summaryrefslogtreecommitdiff
path: root/plugin_manager
diff options
context:
space:
mode:
Diffstat (limited to 'plugin_manager')
-rw-r--r--plugin_manager/CHANGELOG145
-rw-r--r--plugin_manager/COMMENTS8
-rw-r--r--plugin_manager/CONFIGHEADER9
-rw-r--r--plugin_manager/EXAMPLE36
-rw-r--r--plugin_manager/LICENSE84
-rw-r--r--plugin_manager/README8
-rw-r--r--plugin_manager/SQL/mssql.20131209.sql4
-rw-r--r--plugin_manager/SQL/mssql.initial.sql20
-rw-r--r--plugin_manager/SQL/mysql.20131209.sql4
-rw-r--r--plugin_manager/SQL/mysql.initial.sql21
-rw-r--r--plugin_manager/SQL/pgsql.20131209.sql3
-rw-r--r--plugin_manager/SQL/pgsql.initial.sql17
-rw-r--r--plugin_manager/SQL/sqlite.20131209.sql48
-rw-r--r--plugin_manager/SQL/sqlite.initial.sql11
-rw-r--r--plugin_manager/defaults.inc.php654
-rw-r--r--plugin_manager/localization/bg_BG.inc134
-rw-r--r--plugin_manager/localization/cs_CZ.inc346
-rw-r--r--plugin_manager/localization/de_CH.inc244
-rw-r--r--plugin_manager/localization/de_DE.inc346
-rw-r--r--plugin_manager/localization/el_GR.inc74
-rw-r--r--plugin_manager/localization/en_GB.inc139
-rw-r--r--plugin_manager/localization/en_US.inc346
-rw-r--r--plugin_manager/localization/es_ES.inc346
-rw-r--r--plugin_manager/localization/fi_FI.inc252
-rw-r--r--plugin_manager/localization/fr_FR.inc346
-rw-r--r--plugin_manager/localization/hu_HU.inc154
-rw-r--r--plugin_manager/localization/it_IT.inc170
-rw-r--r--plugin_manager/localization/nl_NL.inc201
-rw-r--r--plugin_manager/localization/pl_PL.inc275
-rw-r--r--plugin_manager/localization/pt_BR.inc182
-rw-r--r--plugin_manager/localization/pt_PT.inc116
-rw-r--r--plugin_manager/localization/revision.inc.php11
-rw-r--r--plugin_manager/localization/ru_RU.inc205
-rw-r--r--plugin_manager/package.xml24
-rw-r--r--plugin_manager/plugin_manager.js372
-rw-r--r--plugin_manager/plugin_manager.php4554
-rw-r--r--plugin_manager/plugin_manager_fixes.js19
-rw-r--r--plugin_manager/plugin_manager_update.js325
-rw-r--r--plugin_manager/skins/classic/blank.html15
-rw-r--r--plugin_manager/skins/classic/download.pngbin0 -> 601 bytes
-rw-r--r--plugin_manager/skins/classic/myroundcube.html19
-rw-r--r--plugin_manager/skins/classic/plugin_manager.css178
-rw-r--r--plugin_manager/skins/classic/plugin_manager_update.css69
-rw-r--r--plugin_manager/skins/classic/templates/config.html11
-rw-r--r--plugin_manager/skins/classic/templates/error.html14
-rw-r--r--plugin_manager/skins/classic/templates/transfer.html10
-rw-r--r--plugin_manager/skins/classic/traffic-light-exclamation.pngbin0 -> 690 bytes
-rw-r--r--plugin_manager/skins/classic/traffic-light-off.pngbin0 -> 401 bytes
-rw-r--r--plugin_manager/skins/classic/traffic-light-pencil.pngbin0 -> 646 bytes
-rw-r--r--plugin_manager/skins/classic/traffic-light-plus.pngbin0 -> 610 bytes
-rw-r--r--plugin_manager/skins/classic/traffic-light.pngbin0 -> 512 bytes
-rw-r--r--plugin_manager/skins/classic/watermark.gifbin0 -> 4644 bytes
-rw-r--r--plugin_manager/skins/larry/blank.html16
-rw-r--r--plugin_manager/skins/larry/download.pngbin0 -> 601 bytes
-rw-r--r--plugin_manager/skins/larry/images/ui-bg_flat_0_aaaaaa_40x100.pngbin0 -> 212 bytes
-rw-r--r--plugin_manager/skins/larry/images/ui-bg_flat_75_ffffff_40x100.pngbin0 -> 208 bytes
-rw-r--r--plugin_manager/skins/larry/images/ui-bg_glass_55_fbf9ee_1x400.pngbin0 -> 335 bytes
-rw-r--r--plugin_manager/skins/larry/images/ui-bg_glass_65_ffffff_1x400.pngbin0 -> 207 bytes
-rw-r--r--plugin_manager/skins/larry/images/ui-bg_glass_75_dadada_1x400.pngbin0 -> 262 bytes
-rw-r--r--plugin_manager/skins/larry/images/ui-bg_glass_75_e6e6e6_1x400.pngbin0 -> 262 bytes
-rw-r--r--plugin_manager/skins/larry/images/ui-bg_glass_95_fef1ec_1x400.pngbin0 -> 332 bytes
-rw-r--r--plugin_manager/skins/larry/images/ui-bg_highlight-soft_75_cccccc_1x100.pngbin0 -> 280 bytes
-rw-r--r--plugin_manager/skins/larry/images/ui-icons_222222_256x240.pngbin0 -> 6922 bytes
-rw-r--r--plugin_manager/skins/larry/images/ui-icons_2e83ff_256x240.pngbin0 -> 4549 bytes
-rw-r--r--plugin_manager/skins/larry/images/ui-icons_454545_256x240.pngbin0 -> 6992 bytes
-rw-r--r--plugin_manager/skins/larry/images/ui-icons_888888_256x240.pngbin0 -> 6999 bytes
-rw-r--r--plugin_manager/skins/larry/images/ui-icons_cd0a0a_256x240.pngbin0 -> 4549 bytes
-rw-r--r--plugin_manager/skins/larry/jqueryui.css462
-rw-r--r--plugin_manager/skins/larry/manage-plugins-col.pngbin0 -> 1995 bytes
-rw-r--r--plugin_manager/skins/larry/myroundcube.html20
-rw-r--r--plugin_manager/skins/larry/plugin_manager.css208
-rw-r--r--plugin_manager/skins/larry/plugin_manager_update.css66
-rw-r--r--plugin_manager/skins/larry/templates/config.html11
-rw-r--r--plugin_manager/skins/larry/templates/error.html13
-rw-r--r--plugin_manager/skins/larry/templates/transfer.html10
-rw-r--r--plugin_manager/skins/larry/traffic-light-exclamation.pngbin0 -> 690 bytes
-rw-r--r--plugin_manager/skins/larry/traffic-light-off.pngbin0 -> 401 bytes
-rw-r--r--plugin_manager/skins/larry/traffic-light-pencil.pngbin0 -> 646 bytes
-rw-r--r--plugin_manager/skins/larry/traffic-light-plus.pngbin0 -> 610 bytes
-rw-r--r--plugin_manager/skins/larry/traffic-light.pngbin0 -> 512 bytes
80 files changed, 11375 insertions, 0 deletions
diff --git a/plugin_manager/CHANGELOG b/plugin_manager/CHANGELOG
new file mode 100644
index 0000000..fafe14d
--- /dev/null
+++ b/plugin_manager/CHANGELOG
@@ -0,0 +1,145 @@
+VERSION COMMENT
+-----------------------------------------------------------------------------------
+20.0 - Implemented GUI to enable/disable plugins by Plugin
+ Manager Administrators
+20.0.1 - 20.0.2 - Roundcube 0.9.2 release
+20.0.3 - GUI improvements
+21.0 - 21.0.4 - Add third party plugins by GUI
+ - Database versioning implemented into GUI (0.9 branch only)
+21.0.5 - Show recommended plugins in update page
+21.0.6 - Fix: PHP Warning: Invalid argument supplied for foreach()
+ in ./plugins/plugin_manager/plugin_manager.php on line 3016
+21.0.7 - 21.0.8 - Implemented skins binding
+21.0.9 - Enable/disable "About" link and MyRoundcube watermark
+21.0.10 - 21.0.13 - GUI improvements (indicate if a plugin is not configured)
+21.0.14 - Strip slashes before config code is passed to eval
+21.0.15 - 21.0.19 - Roundcube 0.9.3
+21.0.20 - 21.0.23 - HTML code editor improvements
+21.0.24 - Added sqlite3 to database map
+21.0.25 - HTML code editor improvements
+21.1 - 21.1.1 - Roundcube 0.9.4
+21.1.2 - Added jsdialogs plugin to defaults
+21.1.3 - Added jappix4roundcube to defaults
+21.1.4 - Removed scrollbar fix
+21.1.5 - 21.1.6 - Fixed register action error 'plugin.summary'
+21.1.7 - Jappix4Roundcube adjustments
+21.1.8 - 21.1.10 - Added tabbed plugin to defaults
+21.1.11 - Fixed navigation handler
+21.1.12 - 21.1.13 - Fixed logo click for tabbed plugin
+21.1.14 - 21.1.15 - Always use https to download plugins
+21.1.16 - Lock database configuration section properly for demo accounts
+21.1.17 - Fix bug in defaults override
+21.1.18 - Added compose_myroundcube to defaults
+21.1.19 - Added vcard_send to defaults
+21.1.20 - 21.1.22 - Adjustments regarding deprecated plugins
+21.2.23 - Submit server IP when downloading plugins to fight PayPal
+ Chargebacks - of course only if user has agreed
+22.0 - Require a Plugin Manager update
+22.0.1 - Don't hide checkboxes in update page on low screen resolution
+22.0.2 - Improved visitor IP detection
+22.0.3 - Added companyaddressbook to defaults
+22.0.4 - 22.0.5 - Added debug code
+22.0.6 - Skip companyaddressbook_plus (helper) in plugin configuration section
+22.0.7 - Prevent logging of 'Illegal string offset' warnings (PHP 5.4)
+22.0.8 - 22.0.9 - Backwards compatibility Roundcube 0.8 branch.
+22.0.10 - Inject MyRoundcube watermark into blank pages for identities and folders steps
+22.0.11 - 22.0.12 - Added mysqladmin to defaults
+22.0.13 - 22.0.14 - Implemented mysqladmin plugin
+22.0.15 - Added User-Agent header to cURL requests
+22.0.16 - Added hmail_publicfolder to defaults
+23.0 - Prepair to be ready for Roundcube 1.0
+23.0.1 - Bugfix: https://code.google.com/p/myroundcube/issues/detail?id=606
+23.0.2 - 23.0.3 - Bugfix: http://trac.roundcube.net/ticket/1489486
+23.0.4 - Added google_oauth2 plugin to defaults
+23.0.5 - Bugfix: Don't break frame when clicking on missing plugin link
+23.0.6 - Bugfix: Display plugin version even if plugin is not registered/loaded automatically
+24.0 - Separate branch for Roundcube 0.9
+25.0 - Roundcube 1.0 compatibility
+25.0.1 - Remove importmessages plugin from defaults
+25.0.2 - Use rcube_utils::remote_addr() for IP detection
+25.0.3 - Workaround for server or php specific escaped quotes when saving preferences
+ into database
+25.0.4 - Add remove_attachments to defaults
+25.0.5 - Roundcube compatibility check
+25.0.6 - Skip calendar_plus and carddav_plus in plugins selector
+25.0.7 - End injected javascript consequently by semicolon
+25.0.8 - Better layout for low resolutions screens
+25.0.9 - Close button for MyRoundcube messages
+25.0.10 - Add cookie_config to defaults
+25.0.11 - Add imap_threads to defaults
+25.0.12 - Bug fix: https://code.google.com/p/myroundcube/issues/detail?id=647
+25.0.13 - Add hmail_search to defaults
+25.0.14 - Hide hmail_* plugins if usage of hmail_* plugins is disabled
+25.0.15 - Configurable real-time translation account
+25.0.16 - Add serveral plugins to plugins settings combobox
+25.0.17 - Remove global_alias plugin
+25.0.18 - Remove globaladdressbook plugin from list of supported third party plugins
+25.0.19 - 25.0.20 - Attempt to fix not reproduceable issue that maintenance mode can't be disabled
+25.0.21 - Add sabredav_migrate to defaults
+25.0.22 - Remove sabredav_migrate from defaults
+25.0.23 - Add hmail_sabredav_sync to defaults
+25.0.24 - Add hmail_roundcube_sync to defaults
+25.0.25 - Roundcube 1.0.1 release
+25.0.26 - Bugfix: Plugins binding (hide checkboxes if plugin is intended to be binded
+ to a specific settings value)
+25.0.27 - Add limit_skins plugin to defaults
+25.0.28 - Added MSSQL support (third party contribution (https://asphostpage.com/)
+25.0.29 - Remove copymessage from defaults
+25.0.30 - Remove default Roundcube plugins from 'Third party plugins' section unless required
+ as a dependency by any MyRoundcube plugin
+25.0.31 - Update $nodocs property
+25.0.32 - Implement rcube_db::limitquery
+25.0.33 - Remove css .boxcontent overwrite (Larry)
+25.0.34 - Remove IF NOT EXISTS clause from PostgreSQL database script
+25.0.35 - Fix loop in 'Settings' section if a helper plugin is missing
+25.0.36 - Implement translation accounts for delegated administrators
+25.0.37 - Add custom_login_logout to defaults
+ - Remove newsletter subscription
+ - Add forum registration link
+25.0.38 - Adopt markbuttons plugin
+26.0 - Provide Roundcube Core Patches in a single download location
+26.0.1 - HTTPS and better wording for Core Patches downloads
+26.0.2 - 26.0.3 - Update notifications feature
+26.0.4 - Fix anchor link navigation (plugin selector) if anchor is out of viewport
+26.0.5 - Scroll up when tabs for plugins navigation are clicked
+26.0.6 - 26-0.7 - Compatibility with pwtools 3.1.x
+26.0.8 - Roundcube 1.0.3 release
+26.0.9 - Release new core patch version
+26.0.10 - 26.0.12 - New calendar plugin compatibility
+26.0.13 - Fix "Customer account" link in Plugin Manager Center
+26.0.14 - 26.0.15 - Added config option to use MyRoundcube splitter hosts
+26.0.16 - Check download branch according to installed myrc_branch plugin
+26.0.17 - Fix a hard coded label
+26.0.18 - Add custom_log plugin to defaults
+26.0.19 - Fix Roundcube date alignment bug in message list
+26.0.20 - 26.0.21 - Skip deprecated configuration key hint for unregistered register drivers
+26.0.22 - Add myrc_branch to required plugins
+26.0.23 - Remove globaladdressbook from defaults
+26.0.24 - 26.0.25 - Implement "closed branch"
+26.0.26 - Remove calendar_plus from defaults
+26.0.27 - Add myrc_sprites to required plugins
+26.0.28 - Remove nabble plugin from defaults
+26.0.29 - Display calendar_plus in "About" step
+27.0 - Force Plugin Manager update
+27.0.1 - 27.0.2 - Roundcube Core patch for Roundcube 1.0.4
+27.0.3 - Remove http_request plugin form required plugins
+27.0.4 - Remove jqueryui plugin from required plugins (loaded over libgpl)
+27.0.5 - Fix missing thired party plugins labels
+27.0.6 - CSS improvement, remove version history younger than 20.0 from CHANGELOG
+27.0.7 - CSS improvement
+27.0.8 - Remove qtip from required plugins (loaded over libgpl)
+27.0.9 - Remove http_request class
+27.0.10 - Fix tinymce configuration parse error
+27.0.11 - Add password_plus plugin to defaults
+27.0.12 - 27.0.15 - Improve customer account download options
+27.0.16 - Use watermark from myrc_sprites
+28.0 - Merge Plugin Manager beta branch with stable branch
+28.0.1 - Show localization updates for *_plus plugins
+28.0.2 - Remove debug code
+28.0.3 - Use admin account as sender for update notifcations
+28.0.4 - 28.0.6 - Update Plugin Manager Center consent page
+28.0.7 - Don't show PHPMyAdmin link if plugin is disabled
+28.0.8 - Updated load_splitter configuration link
+28.0.9 - 28.0.10 - Roundcube 1.0.5 release
+28.0.11 - 28.0.12 - Fix misspelling
+29.0 - Implement request tokens \ No newline at end of file
diff --git a/plugin_manager/COMMENTS b/plugin_manager/COMMENTS
new file mode 100644
index 0000000..c63eb17
--- /dev/null
+++ b/plugin_manager/COMMENTS
@@ -0,0 +1,8 @@
+plugin_manager
+==============
+
+Version 21.0
+------------
+
+Database adjustments are required. If adjustment script does not launch
+automatically then run ./plugins/plugin_manager/SQL/[...].20131209.sql. \ No newline at end of file
diff --git a/plugin_manager/CONFIGHEADER b/plugin_manager/CONFIGHEADER
new file mode 100644
index 0000000..9f7047f
--- /dev/null
+++ b/plugin_manager/CONFIGHEADER
@@ -0,0 +1,9 @@
+/******************************************************************************************************
+ * *
+ * Plugin Manager - file-based configuration *
+ * (c) 2012 - ##YEAR## - myroundcube.com *
+ * Documentation: http://myroundcube.com/myroundcube-plugins/plugin-manager/file-based-administration *
+ * Contact: dev-team [at] myroundcube [dot] com *
+ * *
+ ******************************************************************************************************/
+ \ No newline at end of file
diff --git a/plugin_manager/EXAMPLE b/plugin_manager/EXAMPLE
new file mode 100644
index 0000000..97a59f6
--- /dev/null
+++ b/plugin_manager/EXAMPLE
@@ -0,0 +1,36 @@
+/*************************
+ * *
+ * Full featured example *
+ * *
+ *************************/
+
+// 'myplugin' => array( /* the plugin name */
+// 'label_name' => 'markbuttons.pluginname', /* label for the plugin */
+// 'label_description' => 'markbuttons.plugindescription', // label for the plugin description
+// 'label_inject' => false, // see idle_timeout for a valid expample; possible sources: eval, string, config or session
+// 'unset' => array(), /* an array of configs which have to be wiped out of preferences,
+// if plugin is set to inactive by the user */
+// 'localization' => 'localization', /* localization folder relative to plugin root folder */
+// 'buttons' => false, /* false or an array with valid jquery selector -> inactive: $('validselector').show() */
+// 'domains' => false, /* array with email domains, true or false */
+// 'hosts' => false, /* an array with hosts, true or false */
+// 'config' => './?_task=settings&_action=edit-prefs&_section=folders&_framed=1', /* false or a link to plugin configuration */
+// 'section' => 'folders', /* false or Roundcube's configuration section */
+// 'reload' => false, /* Reload after saving */
+// 'browser' => '$test = $browser->mz || $browser->chrome;', /* false or PHP code based on Roundcube's rcube_browser class */
+// 'eval' => array('$this->register_action("plugin.summary", array($this, "plugin_manager_dummy"));'), /* false or an unindexed array with PHP code to execute */
+// 'uninstall' => array('hide_blockquote_limit'), /* give the user the choice to remove prefs from server permanently
+// false or missing: keep prefs
+// true: autodetect prefs if supported by plugin
+// or an unindexed array with pref keys */
+// 'uninstall_request' => array(
+// 'action' => 'plugin.hmail_autoresponder-uninstall',
+// 'method' => 'post',
+// ), /* a registered plugin action and the method of calling the request */
+// 'uninstall_force' => false, /* uninstall request must be exectuted */
+// 'skins' => false, /* false or an array with skins where the plugin should be active array('classic', 'larry') */
+// 'active' => false /* load plugin by default */
+// 'protected' => true, /* an array of domains where users are not allowed to overwrite plugin defaults or
+// true | false or
+// an associated config key */
+// ), \ No newline at end of file
diff --git a/plugin_manager/LICENSE b/plugin_manager/LICENSE
new file mode 100644
index 0000000..11b1f5e
--- /dev/null
+++ b/plugin_manager/LICENSE
@@ -0,0 +1,84 @@
+
+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.
+
+dev-team [at] myroundcube [dot] com
+http://myroundcube.com
+
+--- LICENSE DETAILS ---
+
+
+
+
+TERMS AND CONDITIONS
+--------------------
+
+User Agreement
+
+MyRoundcube Developers provides MyRoundcube Plugins (code) shall provide ("MyRoundcube Plugins") to
+you ("User") under the terms and conditions of this User Agreement ("the Agreement"). USER UNDERSTANDS
+AND ACKNOWLEDGES THAT USER IS ENTERING INTO AN AGREEMENT WITH MyRoundcube Developers AND NOT THE WEB
+SITE WITH WHOM ANYTHING HAS ASSOCIATED TO BRING YOU THIS CODE. BY USING ("MyRoundcube Plugins") OR ANY
+PART OF ITS CODE YOU ARE AGREEING TO BECOME A PARTY TO THIS AGREEMENT WITH MyRoundcube Developers AND
+TO THE TERMS AND CONDITIONS HEREIN AND ACKNOWLEDGE THAT YOU HAVE READ AND UNDERSTAND ANY APPLICABLE
+ASSOCIATE STATEMENT IN THIS DOCUMENT. ALL MyRoundcube Developers SERVICES ARE PROVIDED ONLINE. PERSONS
+UNDER 13 MAY NOT BE ELEGIBLE TO ENTERING INTO AN AGREEMENT WITH MyRoundcube Developers OR PURCHASE OUR
+SERVICES AND CODE DOWNLOADS.
+
+Acceptable Use Policy
+
+The following policy governs the use of the MyRoundcube Developers code. User will comply with the terms
+and spirit of the Agreement.
+
+(a) User shall not use MyRoundcube Plugins (code) in a manner that violates any city, state, national
+or international law or regulation, or which fails to comply with accepted Internet protocol. User
+shall not attempt to interfere in any way with MyRoundcube Plugins networks or network security, or
+attempt to use the MyRoundcube Plugins code to gain unauthorized access to any other computer system.
+(b) User shall at all times provide MyRoundcube Developers with accurate information. User shall not
+interfere in any way with another User's use of, or MyRoundcube Developers provision of the MyRoundcube
+Plugins. User shall not resell, rent, lease, grant a security interest in, or make commercial use of
+the MyRoundcube Plugins without the express written consent of MyRoundcube Developers.
+(c) User agrees not to transfer MyRoundcube Plugins (code) for gain or otherwise. Transfer of such code
+will result in termination of contract with end user.
+
+Limitation of Liability
+
+UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, TORT, CONTRACT, OR OTHERWISE, SHALL MyRoundcube
+Developers OR ITS LICENSORS OR RESELLERS BE LIABLE TO USER OR ANY OTHER PERSON FOR ANY INDIRECT, SPECIAL,
+INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES RESULTING
+FROM THE USE OF OR THE INABILITY TO USE THE MyRoundcube Plugins (code), THE PERFORMANCE OF MyRoundcube
+Plugins (code) SERVICE, OR DAMAGES FOR LOSS OF GOODWILL, BUSINESS PROFIT, BUSINESS STOPPAGE, LOSS OF
+DATA OR BUSINESS INFORMATION, COMPUTER DAMAGE, OR DAMAGES RESULTING FROM UNAUTHORIZED ACCESS TO OR
+CHANGES MADE TO USER'S TRANSMISSIONS OR DATA, OR ANY AND ALL OTHER COMMERCIAL DAMAGES OR LOSSES.
+IN NO EVENT WILL MyRoundcube Developers BE LIABLE FOR ANY DAMAGES IN EXCESS OF WHAT ANYTHING MyRoundcube
+Developers RECEIVED FROM USER FOR THE MyRoundcube Plugins (code).
+
+Terms
+
+You (the User) are permitted to use the code on unlimited servers you may own, rented or leased, as
+long as you own, rent or lease the server in which MyRoundcube plugins code is hosted.
+Exclusive: You (the User) agree to use the code in one server at a time. Multiple server deployments
+(multiserver setup), clusters or any other form of deployment that simultaneously executes MyRoundcube
+plugins in a live environment must purchase a separate download per server or installation thereof.
+
+Warranties
+
+Our code 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.
+
+Terms Modifications
+
+We reserve the right to change or modify our Terms and Conditions at any time without prior notice.
+For questions, please contact our team at dev-team [at] myroundcube [dot] com.
+
+Copyright (c) 2012 - 2014
+MyRoundcube.com - A Division of Informative Computing Consultants, LLC.
+All rights reserved
+
+Informative Computing Consultants, LLC.
+21741 NW 8th CT
+Pembroke Pines
+Florida, 33029
+dev-team [at] myroundcube [dot] com
+http://myroundcube.com
diff --git a/plugin_manager/README b/plugin_manager/README
new file mode 100644
index 0000000..5198c1c
--- /dev/null
+++ b/plugin_manager/README
@@ -0,0 +1,8 @@
+plugin_manager
+--------------
+Documentation:
+http://myroundcube.com/myroundcube-plugins/plugin-manager
+
+
+MyRoundcube Dev Team
+www.myroundcube.com \ No newline at end of file
diff --git a/plugin_manager/SQL/mssql.20131209.sql b/plugin_manager/SQL/mssql.20131209.sql
new file mode 100644
index 0000000..19107fc
--- /dev/null
+++ b/plugin_manager/SQL/mssql.20131209.sql
@@ -0,0 +1,4 @@
+--az initben mar benne van
+
+UPDATE [system] SET [value]='initial|20131209' WHERE [name]='myrc_plugin_manager'
+GO
diff --git a/plugin_manager/SQL/mssql.initial.sql b/plugin_manager/SQL/mssql.initial.sql
new file mode 100644
index 0000000..f800588
--- /dev/null
+++ b/plugin_manager/SQL/mssql.initial.sql
@@ -0,0 +1,20 @@
+IF NOT EXISTS (SELECT * FROM sysobjects WHERE id = object_id(N'[dbo].[plugin_manager]') AND OBJECTPROPERTY(id, N'IsUserTable') = 1)
+CREATE TABLE [plugin_manager] (
+ [id] int NOT NULL IDENTITY(1,1),
+ [conf] nvarchar(MAX) NOT NULL,
+ [value] nvarchar(MAX),
+ [type] nvarchar(MAX),
+ PRIMARY KEY ([id])
+)
+GO
+
+IF NOT EXISTS (SELECT * FROM sysobjects WHERE id = object_id(N'[dbo].[system]') AND OBJECTPROPERTY(id, N'IsUserTable') = 1)
+CREATE TABLE [system] (
+ [name] nvarchar(64) NOT NULL,
+ [value] nvarchar(MAX),
+ PRIMARY KEY([name])
+)
+GO
+
+INSERT INTO [system] (name, value) VALUES ('myrc_plugin_manager', 'initial|20131209')
+GO \ No newline at end of file
diff --git a/plugin_manager/SQL/mysql.20131209.sql b/plugin_manager/SQL/mysql.20131209.sql
new file mode 100644
index 0000000..1afcbda
--- /dev/null
+++ b/plugin_manager/SQL/mysql.20131209.sql
@@ -0,0 +1,4 @@
+ALTER TABLE `plugin_manager` DROP FOREIGN KEY `user_id_fk_plugin_manager` ;
+ALTER TABLE `plugin_manager` DROP `user_id`;
+ALTER TABLE `plugin_manager` ENGINE=MyISAM;
+UPDATE `system` SET `value`='initial|20131209' WHERE `name`='myrc_plugin_manager'; \ No newline at end of file
diff --git a/plugin_manager/SQL/mysql.initial.sql b/plugin_manager/SQL/mysql.initial.sql
new file mode 100644
index 0000000..e7553d5
--- /dev/null
+++ b/plugin_manager/SQL/mysql.initial.sql
@@ -0,0 +1,21 @@
+CREATE TABLE IF NOT EXISTS `plugin_manager` (
+ `id` int(10) NOT NULL AUTO_INCREMENT,
+ `user_id` int(10) unsigned NOT NULL,
+ `conf` text NOT NULL,
+ `value` text,
+ `type` text,
+ PRIMARY KEY (`id`),
+ KEY `user_id` (`user_id`),
+ KEY `user_id_index` (`user_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+
+CREATE TABLE IF NOT EXISTS `system` (
+ `name` varchar(64) NOT NULL,
+ `value` mediumtext,
+ PRIMARY KEY(`name`)
+);
+
+INSERT INTO `system` (name, value) VALUES ('myrc_plugin_manager', 'initial');
+
+ALTER TABLE `plugin_manager`
+ ADD CONSTRAINT `user_id_fk_plugin_manager` FOREIGN KEY (`user_id`) REFERENCES `users` (`user_id`) ON DELETE CASCADE ON UPDATE CASCADE;
diff --git a/plugin_manager/SQL/pgsql.20131209.sql b/plugin_manager/SQL/pgsql.20131209.sql
new file mode 100644
index 0000000..2edd9bd
--- /dev/null
+++ b/plugin_manager/SQL/pgsql.20131209.sql
@@ -0,0 +1,3 @@
+ALTER TABLE plugin_manager DROP CONSTRAINT plugin_manager_user_id_fkey;
+ALTER TABLE plugin_manager DROP user_id;
+UPDATE "system" SET value='initial|20131209' WHERE name='myrc_plugin_manager'; \ No newline at end of file
diff --git a/plugin_manager/SQL/pgsql.initial.sql b/plugin_manager/SQL/pgsql.initial.sql
new file mode 100644
index 0000000..5fa498b
--- /dev/null
+++ b/plugin_manager/SQL/pgsql.initial.sql
@@ -0,0 +1,17 @@
+CREATE TABLE plugin_manager (
+ id serial NOT NULL,
+ user_id integer NOT NULL
+ REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE,
+ conf text NOT NULL,
+ value text,
+ type text,
+ PRIMARY KEY (id)
+);
+CREATE INDEX ix_plugin_manager_user_id ON users (user_id);
+
+CREATE TABLE IF NOT EXISTS "system" (
+ name varchar(64) NOT NULL PRIMARY KEY,
+ value text
+);
+
+INSERT INTO "system" (name, value) VALUES ('myrc_plugin_manager', 'initial'); \ No newline at end of file
diff --git a/plugin_manager/SQL/sqlite.20131209.sql b/plugin_manager/SQL/sqlite.20131209.sql
new file mode 100644
index 0000000..1fa9cd6
--- /dev/null
+++ b/plugin_manager/SQL/sqlite.20131209.sql
@@ -0,0 +1,48 @@
+CREATE TABLE 'plugin_manager_tmp' (
+ 'id' INTEGER NOT NULL PRIMARY KEY,
+ 'user_id' INT(10) NOT NULL,
+ 'conf' TEXT NOT NULL,
+ 'value' TEXT,
+ 'type' TEXT
+) ;
+
+INSERT INTO plugin_manager_tmp (
+ 'id',
+ 'user_id',
+ 'conf',
+ 'value',
+ 'type'
+)
+SELECT
+ 'id',
+ 'user_id',
+ 'conf',
+ 'value',
+ 'type'
+FROM plugin_manager;
+
+DROP TABLE plugin_manager;
+
+CREATE TABLE 'plugin_manager' (
+ 'id' INTEGER NOT NULL PRIMARY KEY,
+ 'conf' TEXT NOT NULL,
+ 'value' TEXT,
+ 'type' TEXT
+) ;
+
+INSERT INTO plugin_manager (
+ 'id',
+ 'conf',
+ 'value',
+ 'type'
+)
+SELECT
+ 'id',
+ 'conf',
+ 'value',
+ 'type'
+FROM plugin_manager_tmp;
+
+DROP TABLE plugin_manager_tmp;
+
+UPDATE 'system' SET value='initial|20131209' WHERE name='myrc_plugin_manager'; \ No newline at end of file
diff --git a/plugin_manager/SQL/sqlite.initial.sql b/plugin_manager/SQL/sqlite.initial.sql
new file mode 100644
index 0000000..c1b77a8
--- /dev/null
+++ b/plugin_manager/SQL/sqlite.initial.sql
@@ -0,0 +1,11 @@
+CREATE TABLE IF NOT EXISTS 'plugin_manager' ( 'id' integer NOT NULL PRIMARY KEY AUTOINCREMENT, 'user_id' INT(10) NOT NULL, 'conf' TEXT NOT NULL, 'value' TEXT, 'type' TEXT,
+ CONSTRAINT 'plugin_manager_ibfk_1' FOREIGN KEY ('user_id') REFERENCES 'users'
+ ('user_id') ON DELETE
+ CASCADE ON UPDATE CASCADE );
+
+CREATE TABLE IF NOT EXISTS 'system' (
+ name varchar(64) NOT NULL PRIMARY KEY,
+ value text NOT NULL
+);
+
+INSERT INTO system (name, value) VALUES ('myrc_plugin_manager', 'initial'); \ No newline at end of file
diff --git a/plugin_manager/defaults.inc.php b/plugin_manager/defaults.inc.php
new file mode 100644
index 0000000..9ade228
--- /dev/null
+++ b/plugin_manager/defaults.inc.php
@@ -0,0 +1,654 @@
+<?php
+$config['plugin_manager_third_party_plugins'] = array(
+ //'keyboard_shortcuts' => 'https://github.com/corbosman/keyboard_shortcuts',
+ //'listcommands' => 'https://github.com/corbosman/listcommands',
+ //'contextmenu' => 'https://github.com/JohnDoh/Roundcube-Plugin-Context-Menu',
+ //'markasjunk2' => 'https://github.com/JohnDoh/Roundcube-Plugin-Mark-as-Junk-2/',
+ 'jqueryui' => 'https://github.com/roundcube/roundcubemail/tree/release-1.0/plugins/jqueryui',
+ 'database_attachments' => 'https://github.com/roundcube/roundcubemail/tree/release-1.0/plugins/database_attachments',
+ 'password' => 'https://github.com/roundcube/roundcubemail/tree/release-1.0/plugins/password',
+);
+
+$config['plugin_manager_unauth'] = array(
+ 'vkeyboard' => true,
+ 'pwtools' => true,
+ 'webmail_notifier' => true,
+ 'checked_identities' => true,
+ 'detach_attachments' => true,
+ 'summary' => true,
+ 'jappix4roundcube' => true,
+);
+
+/* Full featured example */
+// 'myplugin' => array( /* the plugin name */
+// 'label_name' => 'markbuttons.pluginname', /* label for the plugin */
+// 'label_description' => 'markbuttons.plugindescription', // label for the plugin description
+// 'label_inject' => false, // see idle_timeout for a valid expample; possible sources: eval, string, config or session
+// 'unset' => array(), /* an array of configs which have to be wiped out of preferences,
+// if plugin is set to inactive by the user */
+// 'localization' => 'localization', /* localization folder relative to plugin root folder */
+// 'buttons' => false, /* false or an array with valid jquery selector -> inactive: $('validselector').show */
+// 'domains' => false, /* array with email domains, true or false */
+// 'hosts' => false, /* an array with hosts, true or false */
+// 'protected' => true, /* an array of domains where users are not allowed to overwrite or
+// true | false or
+// an associated config key */
+// 'config' => false, /* See archivefolder plugin for a valid example */
+// 'section' => false, /* See archivefolder plugin for a valid example */
+// 'reload' => false, /* Reload after saving */
+// 'browser' => false, /* See webmail_notifier config (below) for a valid example */
+// 'eval' => false, /* see summary config (below) for a valid example */
+// 'uninstall' => false, /* give the user the choice to remove prefs from server permanently
+// false or missing: keep prefs
+// true: autodetect prefs if supported by plugin or
+// unindexed array with pref keys */
+// 'uninstall_request' => false, /* hmail_autoresponder for a valid example */
+// 'uninstall_force' => false, /* force the uninstall request */
+// 'skins' => false, /* false or an array with skins where the plugin should be active array('classic', 'litecube-f') */
+// 'active' => false /* default */
+// ),
+/* End full featured example */
+
+$config['plugin_manager_defaults'] = array(
+ 'globalplugins' => array(
+ 'db_config' => array(
+ 'protected' => true,
+ 'active' => false
+ ),
+ 'google_oauth2' => array(
+ 'protected' => true,
+ 'active' => false
+ ),
+ 'custom_logo' => array(
+ 'protected' => true,
+ 'active' => false
+ ),
+ 'custom_login_logout' => array(
+ 'protected' => true,
+ 'active' => false
+ ),
+ 'jsdialogs' => array(
+ 'protected' => true,
+ 'active' => false
+ ),
+ 'jscolor' => array(
+ 'protected' => true,
+ 'active' => false
+ ),
+ 'helpui' => array(
+ 'protected' => true,
+ 'active' => false
+ ),
+ 'summary' => array(
+ 'label_name' => 'summary.pluginname',
+ 'label_description' => 'summary.plugindescription',
+ 'unset' => 'nosummary',
+ //'eval' => array('$this->register_action("plugin.summary", array($this, "plugin_manager_dummy"));'),
+ //'uninstall' => true,
+ 'active' => false,
+ 'protected' => true
+ ),
+ 'checkbox' => array(
+ 'label_name' => 'checkbox.pluginname',
+ 'label_description' => 'checkbox.plugindescription',
+ 'active' => false,
+ 'protected' => true
+ ),
+ 'disclaimer' => array(
+ 'protected' => true,
+ 'active' => false
+ ),
+ 'google_analytics' => array(
+ 'label_name' => 'google_analytics.pluginname',
+ 'label_description' => 'google_analytics.plugindescription',
+ 'active' => false,
+ 'protected' => true
+ ),
+ 'domain_check' => array(
+ 'protected' => true,
+ 'active' => false
+ ),
+ 'placeholder' => array(
+ 'protected' => true,
+ 'active' => false
+ ),
+ 'sabredav' => array(
+ 'protected' => true,
+ 'active' => false
+ ),
+ 'demologin' => array(
+ 'protected' => true,
+ 'active' => false
+ ),
+ 'terms' => array(
+ 'protected' => true,
+ 'active' => false
+ ),
+ 'register' => array(
+ 'protected' => true,
+ 'active' => false
+ ),
+ 'lang_sel' => array(
+ 'protected' => true,
+ 'active' => false
+ ),
+ 'limit_skins' => array(
+ 'protected' => true,
+ 'active' => false
+ ),
+ 'rcguard' => array(
+ 'protected' => true,
+ 'active' => false
+ ),
+ 'captcha' => array(
+ 'protected' => true,
+ 'active' => false
+ ),
+ 'newuser' => array(
+ 'protected' => true,
+ 'active' => false
+ ),
+ 'new_user_dialog' => array(
+ 'protected' => true,
+ 'active' => false
+ ),
+ 'dnsbl' => array(
+ 'protected' => true,
+ 'active' => false
+ ),
+ 'persistent_login' => array(
+ 'protected' => true,
+ 'active' => false
+ ),
+ 'taskbar' => array(
+ 'protected' => true,
+ 'active' => false
+ ),
+ 'impressum' => array(
+ 'protected' => true,
+ 'active' => false
+ ),
+ 'contactus' => array(
+ 'protected' => true,
+ 'active' => false
+ ),
+ 'crawler' => array(
+ 'protected' => true,
+ 'active' => false
+ ),
+ 'checked_identities' => array(
+ 'protected' => true,
+ 'active' => false
+ ),
+ 'identities_smtp' => array(
+ 'protected' => true,
+ 'active' => false
+ ),
+ 'impersonate' => array(
+ 'defer' => true,
+ 'protected' => true,
+ 'active' => false
+ ),
+ 'hmail_login' => array(
+ 'protected' => true,
+ 'active' => false
+ ),
+ 'hmail_autoban' => array(
+ 'protected' => true,
+ 'active' => false
+ ),
+ 'hmail_publicfolder' => array(
+ 'protected' => true,
+ 'active' => false
+ ),
+ 'hmail_search' => array(
+ 'protected' => true,
+ 'active' => false
+ ),
+ 'hmail_sabredav_sync' => array(
+ 'protected' => true,
+ 'active' => false,
+ ),
+ 'hmail_roundcube_sync' => array(
+ 'protected' => true,
+ 'active' => false,
+ ),
+ 'blockspamsending' => array(
+ 'protected' => true,
+ 'active' => false
+ ),
+ 'dblog' => array(
+ 'protected' => true,
+ 'active' => false
+ ),
+ 'mysqladmin' => array(
+ 'protected' => true,
+ 'active' => false
+ ),
+ ),
+ 'performance' => array(
+ 'load_splitter' => array(
+ 'protected' => true,
+ 'active' => false
+ ),
+ 'tabbed' => array(
+ 'protected' => true,
+ 'active' => false
+ ),
+ ),
+ 'uisettings' => array(
+ 'contextmenu' => array(
+ 'label_name' => 'contextmenu.pluginname',
+ 'label_description' => 'contextmenu.plugindescription',
+ 'defer' => true,
+ 'active' => false,
+ 'protected' => true
+ ),
+ 'markbuttons' => array(
+ 'label_name' => 'markbuttons.pluginname',
+ 'label_description' => 'markbuttons.plugindescription',
+ 'active' => false,
+ 'protected' => true
+ ),
+ 'google_ads' => array(
+ 'label_name' => 'google_ads.pluginname',
+ 'label_description' => 'google_ads.plugindescription',
+ 'reload' => true,
+ 'active' => false,
+ 'protected' => true
+ ),
+ 'vkeyboard' => array(
+ 'label_name' => 'vkeyboard.pluginname',
+ 'label_description' => 'vkeyboard.plugindescription',
+ 'active' => false,
+ 'protected' => true
+ ),
+ 'keyboard_shortcuts' => array(
+ 'label_name' => 'keyboard_shortcuts.keyboard_shortcuts',
+ 'label_description' => 'keyboard_shortcuts.plugindescription',
+ 'active' => false,
+ 'protected' => true
+ ),
+ 'folderbuttons' => array(
+ 'label_name' => 'folderbuttons.pluginname',
+ 'label_description' => 'folderbuttons.plugindescription',
+ 'active' => false,
+ 'protected' => true
+ ),
+ ),
+ 'messagescomposition' => array(
+ 'save_in_same_folder' => array(
+ 'label_name' => 'save_in_same_folder.pluginname',
+ 'label_description' => 'save_in_same_folder.plugindescription',
+ 'active' => false,
+ 'config_label' => 'replysamefolder',
+ 'protected' => 'reply_same_folder'
+ ),
+ 'compose_myroundcube' => array(
+ 'label_name' => 'compose_myroundcube.pluginname',
+ 'label_description' => 'compose_myroundcube.plugindescription',
+ 'active' => false,
+ 'config_label' => 'composeextwin',
+ 'protected' => 'compose_extwin'
+ ),
+ 'compose_in_taskbar' => array(
+ 'label_name' => 'compose_in_taskbar.pluginname',
+ 'label_description' => 'compose_in_taskbar.plugindescription',
+ 'reload' => true,
+ 'active' => false,
+ 'config_label' => 'composeextwin',
+ 'protected' => 'compose_extwin'
+ ),
+ 'detach_attachments' => array(
+ 'label_name' => 'detach_attachments.pluginname',
+ 'label_description' => 'detach_attachments.plugindescription',
+ 'active' => false,
+ 'protected' => true
+ ),
+ 'listcommands' => array(
+ 'label_name' => 'listcommands.pluginname',
+ 'label_description' => 'listcommands.plugindescription',
+ 'active' => false,
+ 'protected' => true
+ ),
+ 'scheduled_sending' => array(
+ 'label_name' => 'scheduled_sending.pluginname',
+ 'label_description' => 'scheduled_sending.plugindescription',
+ 'uninstall_request' => array( //Note: this will give the user the choice to remove all scheduled messages from sending queue.
+ 'action' => 'plugin.scheduled_sending_uninstall',
+ 'method' => 'post'
+ ),
+ 'active' => false,
+ 'protected' => true
+ ),
+ 'vcard_attach' => array(
+ 'label_name' => 'vcard_attach.pluginname',
+ 'label_description' => 'vcard_attach.plugindescription',
+ 'unset' => 'attach_vcard',
+ 'active' => false,
+ 'protected' => true
+ ),
+ 'vcard_send' => array(
+ 'label_name' => 'vcard_send.pluginname',
+ 'label_description' => 'vcard_send.plugindescription',
+ 'active' => false,
+ 'protected' => true
+ ),
+ 'embed_images' => array(
+ 'label_name' => 'embed_images.pluginname',
+ 'label_description' => 'embed_images.plugindescription',
+ 'protected' => true,
+ 'active' => false,
+ 'protected' => true
+ ),
+ ),
+ 'messagesdisplaying' => array(
+ 'imap_threads' => array(
+ 'label_name' => 'imap_threads.pluginname',
+ 'label_description' => 'imap_threads.plugindescription',
+ 'active' => false,
+ 'protected' => true
+ ),
+ 'message_highlight' => array(
+ 'label_name' => 'message_highlight.mh_title',
+ 'label_description' => 'message_highlight.plugindescription',
+ 'config' => './?_task=settings&_action=edit-prefs&_section=mh_preferences&_framed=1',
+ 'section' => 'mh_preferences',
+ 'uninstall' => array('message_highlight'),
+ 'reload' => true,
+ 'active' => false,
+ 'protected' => true
+ ),
+ 'hide_blockquote' => array(
+ 'label_name' => 'hide_blockquote.pluginname',
+ 'label_description' => 'hide_blockquote.plugindescription',
+ 'config' => './?_task=settings&_action=edit-prefs&_section=mailview&_framed=1',
+ 'section' => 'mailview',
+ 'uninstall' => array('hide_blockquote_limit'),
+ 'active' => false,
+ 'protected' => true
+ ),
+ 'vcard_attachments' => array(
+ 'label_name' => 'vcard_attachments.pluginname',
+ 'label_description' => 'vcard_attachments.plugindescription',
+ 'active' => false,
+ 'protected' => true
+ ),
+ ),
+ 'messagesmanagement' => array(
+ 'remove_attachments' => array(
+ 'label_name' => 'remove_attachments.pluginname',
+ 'label_description' => 'remove_attachments.plugindescription',
+ 'active' => false,
+ 'protected' => true
+ ),
+ 'jappix4roundcube' => array(
+ 'label_name' => 'jappix4roundcube.pluginname',
+ 'label_description' => 'jappix4roundcube.plugindescription',
+ 'reload' => true,
+ 'active' => false,
+ 'protected' => true
+ ),
+ 'hmail_autoresponder' => array(
+ 'label_name' => 'hmail_autoresponder.pluginname',
+ 'label_description' => 'hmail_autoresponder.plugindescription',
+ 'config' => './?_task=settings&_action=plugin.hmail_autoresponder&_framed=1',
+ 'section' => 'accountlink',
+ 'uninstall_force' => true,
+ 'uninstall_request' => array(
+ 'action' => 'plugin.hmail_autoresponder-uninstall',
+ 'method' => 'post',
+ ),
+ 'active' => false,
+ 'protected' => true
+ ),
+ 'hmail_forwarding' => array(
+ 'label_name' => 'hmail_forwarding.pluginname',
+ 'label_description' => 'hmail_forwarding.plugindescription',
+ 'config' => './?_task=settings&_action=plugin.hmail_forwarding&_framed=1',
+ 'section' => 'accountlink',
+ 'uninstall_force' => true,
+ 'uninstall_request' => array(
+ 'action' => 'plugin.hmail_forwarding-uninstall',
+ 'method' => 'post',
+ ),
+ 'active' => false,
+ 'protected' => true
+ ),
+ 'hmail_signature' => array(
+ 'label_name' => 'hmail_signature.signature',
+ 'label_description' => 'hmail_signature.plugindescription',
+ 'config' => './?_task=settings&_action=plugin.hmail_signature&_framed=1',
+ 'section' => 'accountlink',
+ 'uninstall_force' => true,
+ 'uninstall_request' => array(
+ 'action' => 'plugin.hmail_signature-uninstall',
+ 'method' => 'post',
+ ),
+ 'active' => false,
+ 'protected' => true
+ ),
+ 'hmail_rules' => array(
+ 'label_name' => 'hmail_rules.pluginname',
+ 'label_description' => 'hmail_rules.plugindescription',
+ 'config' => './?_task=settings&_action=plugin.hmail_rules&_framed=1',
+ 'section' => 'accountlink',
+ 'active' => false,
+ 'protected' => true
+ ),
+ 'identities_imap' => array(
+ 'label_name' => 'identities_imap.pluginname',
+ 'label_description' => 'identities_imap.plugindescription',
+ 'uninstall_request' => array(
+ 'action' => 'plugin.identities_imap_uninstall',
+ 'method' => 'post',
+ ),
+ 'active' => false,
+ 'protected' => true
+ ),
+ 'hmail_pop3' => array(
+ 'label_name' => 'hmail_pop3.pluginname',
+ 'label_description' => 'hmail_pop3.plugindescription',
+ 'config' => './?_task=settings&_action=plugin.hmail_pop3&_framed=1',
+ 'section' => 'accountlink',
+ 'active' => false,
+ 'protected' => true
+ ),
+ 'archivefolder' => array(
+ 'label_name' => 'archivefolder.pluginname',
+ 'label_description' => 'archivefolder.plugindescription',
+ 'config' => './?_task=settings&_action=edit-prefs&_section=folders&_framed=1',
+ 'section' => 'folders',
+ 'uninstall' => true,
+ 'active' => false,
+ 'protected' => true
+ ),
+ 'markasjunk2' => array(
+ 'label_name' => 'markasjunk2.pluginname',
+ 'label_description' => 'markasjunk2.plugindescription',
+ 'active' => false,
+ 'protected' => true
+ ),
+ 'zipdownload' => array(
+ 'label_name' => 'zipdownload.pluginname',
+ 'label_description' => 'zipdownload.plugindescription',
+ 'active' => false,
+ 'protected' => true
+ ),
+ 'newmail_notifier' => array(
+ 'label_name' => 'newmail_notifier.pluginname',
+ 'label_description' => 'newmail_notifier.plugindescription',
+ 'active' => false,
+ 'protected' => true
+ ),
+ 'webmail_notifier' => array(
+ 'label_name' => 'webmail_notifier.pluginname',
+ 'label_description' => 'webmail_notifier.plugindescription',
+ 'browser' => '$test = $browser->mz || $browser->chrome;',
+ 'uninstall' => true,
+ 'active' => false,
+ 'protected' => true
+ ),
+ ),
+ 'addressbook' => array(
+ 'carddav' => array(
+ 'label_name' => 'carddav.pluginname',
+ 'label_description' => 'carddav.plugindescription',
+ 'reload' => true,
+ 'uninstall_request' => array(
+ 'action' => 'plugin.carddav_uninstall',
+ 'method' => 'post'
+ ),
+ 'active' => false,
+ 'protected' => true
+ ),
+ 'carddav_plus' => array(
+ 'active' => false,
+ 'protected' => true,
+ 'autoload' => true,
+ ),
+ 'plaxo_contacts' => array(
+ 'label_name' => 'plaxo_contacts.plaxocontacts',
+ 'label_description' => 'plaxo_contacts.plugindescription',
+ 'unset' => 'use_plaxo_abook',
+ 'config' => './?_task=settings&_action=edit-prefs&_section=addressbook&_framed=1',
+ 'section' => 'addressbook',
+ 'uninstall' => true,
+ 'uninstall_request' => array(
+ 'action' => 'plugin.plaxo_contacts_uninstall',
+ 'method' => 'post',
+ ),
+ 'active' => false,
+ 'protected' => true
+ ),
+ 'companyaddressbook' => array(
+ 'label_name' => 'companyaddressbook.pluginname',
+ 'label_description' => 'companyaddressbook.plugindescription',
+ 'protected' => true,
+ 'active' => false
+ ),
+ ),
+ 'settings' => array(
+ 'moreuserinfo' => array(
+ 'label_name' => 'moreuserinfo.pluginname',
+ 'label_description' => 'moreuserinfo.plugindescription',
+ 'protected' => true,
+ 'active' => false
+ ),
+ 'cookie_config' => array(
+ 'label_name' => 'cookie_config.pluginname',
+ 'label_description' => 'cookie_config.plugindescription',
+ 'protected' => true,
+ 'active' => false
+ ),
+ ),
+ 'calendaring' => array(
+ 'planner' => array(
+ 'label_name' => 'planner.planner',
+ 'label_description' => 'planner.plugindescription',
+ 'buttons' => array('#planner_button'),
+ 'uninstall' => true,
+ 'uninstall_request' => array(
+ 'action' => 'plugin.planner_uninstall',
+ 'method' => 'post',
+ ),
+ 'reload' => true,
+ 'active' => false,
+ 'protected' => true
+ ),
+ 'sticky_notes' => array(
+ 'label_name' => 'sticky_notes.pluginname',
+ 'label_description' => 'sticky_notes.plugindescription',
+ 'buttons' => array('#sticky_notes_button'),
+ 'reload' => true,
+ 'uninstall_request' => array(
+ 'action' => 'plugin.sticky_notes_unregister',
+ 'method' => 'post',
+ ),
+ 'active' => false,
+ 'protected' => true
+ ),
+ 'calendar' => array(
+ 'label_name' => 'calendar.pluginname',
+ 'label_description' => 'calendar.plugindescription',
+ 'buttons' => array('.button-calendar', '#rcmrowcalendar'),
+ 'reload' => true,
+ 'config' => './?_task=settings&_action=edit-prefs&_section=calendar&_framed=1',
+ 'section' => 'calendar',
+ 'active' => false,
+ 'protected' => true
+ ),
+ ),
+ //'backend' => array(
+ //),
+ 'misc' => array(
+ 'tinymce' => array(
+ 'label_name' => 'tinymce.pluginname',
+ 'label_description' => 'tinymce.plugindescription',
+ 'protected' => true,
+ 'active' => false,
+ 'protected' => true
+ ),
+ 'password_plus' => array(
+ 'label_name' => 'password_plus.pluginname',
+ 'label_description' => 'password_plus.plugindescription',
+ 'protected' => true,
+ 'active' => false
+ ),
+ 'hmail_password' => array(
+ 'label_name' => 'hmail_password.changepasswd',
+ 'label_description' => 'hmail_password.plugindescription',
+ 'protected' => false,
+ 'active' => false,
+ 'protected' => true
+ ),
+ 'hmail_spamfilter' => array(
+ 'label_name' => 'hmail_spamfilter.spamfilter',
+ 'label_description' => 'hmail_spamfilter.plugindescription',
+ 'protected' => false,
+ 'config' => './?_task=settings&_action=plugin.hmail_spamfilter&_framed=1',
+ 'section' => 'accountlink',
+ 'uninstall' => true,
+ 'uninstall_force' => true,
+ 'uninstall_request' => array(
+ 'action' => 'plugin.hmail_spamfilter-uninstall',
+ 'method' => 'post',
+ ),
+ 'active' => false,
+ 'protected' => true
+ ),
+ 'pwtools' => array(
+ 'label_name' => 'pwtools.passwordrecovery',
+ 'label_description' => 'pwtools.plugindescription',
+ 'unset' => array('pwtoolsaddress', 'pwtoolsquestion', 'pwtoolsanswer', 'pwtoolsenabled'),
+ 'config' => '.?_task=settings&_action=plugin.pwtools&_framed=1',
+ 'section' => 'accountlink',
+ 'uninstall' => true,
+ 'active' => false,
+ 'protected' => true
+ ),
+ 'idle_timeout' => array(
+ 'label_name' => 'idle_timeout.pluginname',
+ 'label_description' => 'idle_timeout.plugindescription',
+ 'label_inject' => array('eval', '$s = $this->rcmail->config->get("idle_timeout_warning", 18) + $this->rcmail->config->get("idle_timeout_logout", 2);'),
+ 'reload' => true,
+ 'active' => false,
+ 'protected' => true
+ ),
+ 'rss_feeds' => array(
+ 'label_name' => 'rss_feeds.rss_plugin_name',
+ 'label_description' => 'rss_feeds.plugindescription',
+ 'active' => false,
+ 'protected' => true
+ ),
+ 'wrapper' => array(
+ 'label_name' => 'wrapper.pluginname',
+ 'label_description' => 'wrapper.plugindescription',
+ 'reload' => true,
+ 'uninstall' => true,
+ 'active' => false,
+ 'protected' => true
+ ),
+ ),
+);
+?> \ No newline at end of file
diff --git a/plugin_manager/localization/bg_BG.inc b/plugin_manager/localization/bg_BG.inc
new file mode 100644
index 0000000..bd0417e
--- /dev/null
+++ b/plugin_manager/localization/bg_BG.inc
@@ -0,0 +1,134 @@
+<?php
+/*
+ +-----------------------------------------------------------------------+
+ | ./plugins/plugin_manager/localization/bg_BG.inc
+ |
+ | Language file of MyRoundcube Plugins Bundle
+ | Copyright (C) 2010-2013, Roland 'rosali' Liebl
+ |
+ +-----------------------------------------------------------------------+
+ | Author: Alkin Yusufov - 05/03/2013 23:01:23
+ +-----------------------------------------------------------------------+
+*/
+
+$labels = array();
+$labels['pluginname'] = 'Управление на добавки';
+$labels['plugindescription'] = 'Управлението на добавки дава възможноÑÑ‚ за активиране и/или деактивиране на добавки за вÑеки потребителÑки профил поотделно, като Ñъщевременно дава възможноÑÑ‚ на админиÑтраторите да ÑледÑÑ‚ поÑледните промени, актуалните добавки, поправки, централизирани изтеглÑниÑ, Ð´Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð°Ñ†Ð¸Ñ Ð¸ препоръки. Управлението на добавки не Ð¿Ñ€Ð¾Ð¼ÐµÐ½Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð²Ð°Ñ‚Ð° ÑиÑтема и не инÑталира добавки автоматично.';
+$labels['plugin_manager_title'] = 'Управление на добавки';
+$labels['plugin_manager_center'] = 'Център за управление на добавки';
+$labels['updatepm'] = 'Ðалична е нова верÑÐ¸Ñ Ð½Ð° Управление на добавки.';
+$labels['updatepmrequired'] = 'Ðеобходима е Ð°ÐºÑ‚ÑƒÐ°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð½Ð° Управление на добавки.';
+$labels['downloadnow'] = 'Изтегли Ñега';
+$labels['calendaring'] = 'Календари';
+$labels['misc'] = 'Други';
+$labels['downloads'] = 'изтеглÑниÑ';
+$labels['issue'] = 'Проблем';
+$labels['submitissue'] = 'Докладвай проблем.<br><br>МолÑ, проверете логовете Ñи и предоÑтавете умеÑтна Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð² Ñъобщението.<br><br><b>ЗÐБЕЛЕЖКÐ</b>: ИзиÑква Ñе профил в Google.';
+$labels['showall'] = 'Покажи вÑички добавки';
+$labels['hideuptodate'] = 'Покажи Ñамо актуализациите';
+$labels['connectionerror'] = 'ÐÑма отговор от Ð¾Ñ‚Ð´Ð°Ð»ÐµÑ‡ÐµÐ½Ð¸Ñ Ñървър при опит за връзка.';
+$labels['trylater'] = 'МолÑ, опитайте по-къÑно ...';
+$labels['translate'] = 'Преведи на тази добавка';
+$labels['restoredefaults'] = 'ВъзÑтанови Ñтандартните';
+$labels['checkall'] = 'Маркирай вÑички';
+$labels['uncheckall'] = 'Размаркирай вÑички';
+$labels['toggle'] = 'Превключи избора';
+$labels['status'] = 'СтатуÑ';
+$labels['globalplugins'] = 'Глобални добавки';
+$labels['backend'] = 'Сървърни добавки';
+$labels['messagesmanagement'] = 'Управление на ÑъобщениÑ';
+$labels['furtherconfig'] = 'Желаете ли да наÑтроите тази добавка Ñега?';
+$labels['uninstall'] = 'Вие ще деактивирате тази добавка. Желаете ли да изтриете Ñъхранените наÑтройки?';
+$labels['uninstallconfirm'] = 'Вие ще деактивирате тази добавка. ПРЕДУПРЕЖДЕÐИЕ: Изберете »ИЗКЛЮЧВÐÐЕ« за деактивиране на тази добавка, ÑъхранÑвайки данните и наÑтройките, запиÑани на Ð½Ð°ÑˆÐ¸Ñ Ñървър, ако ÑмÑтате да ги използвате отново в бъдеще. Изберете »ПРЕМÐХВÐÐЕ«, ако иÑкате вÑички данни и наÑтройки , управлÑвани от тази добавка, да бъдат изтрити от нашите бази данни. Обърнете внимание, че това дейÑтвие е необратимо.';
+$labels['areyousure'] = 'Това дейÑтвие е необратимо. ÐаиÑтина ли Ñте Ñигурни?';
+$labels['successfullydeleted'] = 'ÐаÑтройките бÑха премахнати уÑпешно.';
+$labels['successfullysaved'] = 'УÑпешен запиÑ.';
+$labels['errorsaving'] = 'Възникна грешка при запиÑване.';
+$labels['yes'] = 'Да';
+$labels['no'] = 'Ðе';
+$labels['disable'] = 'Изключване';
+$labels['remove'] = 'Премахване';
+$labels['savewarning'] = 'Желаете ли да запишете промените?';
+$labels['plugin_manager_update'] = 'Ðктуализирай добавките';
+$labels['authors_comments'] = 'Бележки на автора (без превод)';
+$labels['requiredby'] = 'Добавката Ñе изиÑква от';
+$labels['requires'] = 'Добавката изиÑква';
+$labels['recommended'] = 'Препоръчани добавки';
+$labels['update_plugins'] = 'ИзтеглÑне на добавки';
+$labels['ziparchive'] = 'Изтегли Zip-архив';
+$labels['demoaccount'] = 'СъжалÑваме, нÑма изтеглÑне (Demo профил)';
+$labels['serverversion'] = 'ИнÑталирана верÑиÑ';
+$labels['mirrorversion'] = 'Ðктуална верÑиÑ';
+$labels['mirrorhost'] = 'Сървър за Ð°ÐºÑ‚ÑƒÐ°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ (host)';
+$labels['comments'] = 'ИзиÑÐºÐ²Ð°Ð½Ð¸Ñ Ð¸ Бележки за актуализациÑ';
+$labels['update_error'] = 'Разлика във верÑиите';
+$labels['update_ok'] = 'Открита е поÑледната верÑиÑ. Ðе е нужна актуализациÑ.';
+$labels['update_edit'] = 'Добавката Ñ‚Ñ€Ñбва да Ñе преконфигурира или изиÑква корекции в базата данни. МолÑ, прегледайте Бележките за актуализациÑ.';
+$labels['servernewer'] = 'ИнÑталираната верÑÐ¸Ñ Ð½Ð° добавката е по-нова от огледалната верÑиÑ.';
+$labels['orhigher'] = 'или по-виÑока';
+$labels['rc_ok'] = 'ВерÑиÑта на Roundcube е актуална.';
+$labels['update_update'] = 'Добавката е неактуална. МолÑ, актуализирайте! Имайте предвид Бележките за актуализациÑ.';
+$labels['noupdates'] = 'ÐÑма избрани актуализации.';
+$labels['rc_update'] = 'ВерÑиÑта на Roundcube е неактуална. МолÑ, актуализирайте!';
+$labels['rc_uptodate'] = 'ВерÑиÑта на Roundcube е актуална.';
+$labels['rc_newer'] = 'ИнÑталираната верÑÐ¸Ñ Ð½Ð° Roundcube е по-нова от огледалната верÑиÑ.';
+$labels['nottested'] = 'МолÑ, използвайте добавките Ñ Ð¿Ð¾Ð²Ð¸ÑˆÐµÐ½Ð¾ внимание. Ðие не знаем дали хоÑтваните Ð´Ð¾Ð¿ÑŠÐ»Ð½ÐµÐ½Ð¸Ñ Ñ€Ð°Ð±Ð¾Ñ‚ÑÑ‚ Ñ Roundcube верÑÐ¸Ñ %s.';
+$labels['justunzip'] = 'ПроÑто разопаковайте архива като припокриете ÑъщеÑтвуващата инÑталациÑ.';
+$labels['guide'] = 'Прочети повече ...';
+$labels['thirdparty'] = 'Това не е добавка на MyRoundcube.';
+$labels['thirdpartywarning'] = 'Това е добавка на външен разработчик. Препоръчваме Ви да не го изтеглÑте от нашите Ñървъри. Ðай-добре Ñ Ð¸Ð·Ñ‚ÐµÐ³Ð»ÐµÑ‚Ðµ от Ñайта на разработчика, за да Ñте Ñигурни, че имате поÑледната верÑиÑ, както и забележките и препоръките на автора.';
+$labels['develsite'] = 'ИзтеглÑне';
+$labels['notinstalled'] = 'не е инÑталиран';
+$labels['notregistered'] = 'не е региÑтриран';
+$labels['roundcubeurl'] = 'ИзтеглÑне на Roundcube';
+$labels['languageupdate'] = 'Ðалична е Ð°ÐºÑ‚ÑƒÐ°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð½Ð° езиков пакет.';
+$labels['localizationfilesonly'] = 'Забележка: ИзтеглÑнето Ñъдържа Ñамо езикови пакети.';
+$labels['donotregister'] = 'Ðе региÑтрирайте това допълнение. Зарежда Ñе автоматично.';
+$labels['register'] = 'РегиÑтрирайте тази добавка в наÑтройките на Plugin Manager или в ./config/config.inc.php <small>[$config[\'plugins\'] = array("<i>foo</i>", "<i>bar</i>");]</small>.';
+$labels['customer_account'] = 'КлиентÑки профил';
+$labels['customer_id'] = 'КлиентÑки номер';
+$labels['invalid_customer_id'] = 'Ðевалиден клиентÑки номер';
+$labels['invalid_credits'] = 'Ðевалидни кредити';
+$labels['successfully_transferred'] = 'Кредитите бÑха прехвърлени уÑпешно';
+$labels['merge'] = 'ОбединÑване на кредити';
+$labels['credits'] = 'Кредити';
+$labels['creditsupdated'] = 'Има промÑна в кредитите Ñлед поÑледното опреÑнÑване на Ñтраницата';
+$labels['buynow'] = 'Купи кредити Ñега';
+$labels['history'] = 'ИÑÑ‚Ð¾Ñ€Ð¸Ñ Ð½Ð° профила';
+$labels['details'] = 'ПодробноÑти';
+$labels['receipt'] = 'РазпиÑка';
+$labels['plugins'] = 'ДопълнениÑ';
+$labels['clickhere'] = 'ÐатиÑни тук';
+$labels['discardliabletopaycosts'] = 'Откажи платените изтеглÑниÑ';
+$labels['unchecknotinstalledplugins'] = 'Откажи изтеглÑниÑта на добавките, които не Ñа инÑталирани';
+$labels['sum'] = 'Сума';
+$labels['show'] = 'Покажи';
+$labels['hide'] = 'Скрий';
+$labels['view'] = 'виж';
+$labels['expired'] = 'изтекъл';
+$labels['terms'] = 'УÑловиÑ';
+$labels['pricelist'] = 'Изтегли цените';
+$labels['forthisdownload'] = 'за това изтеглÑне';
+$labels['remainingcredits'] = 'оÑтаващи кредити';
+$labels['initialdownload'] = 'Първоначално изтеглÑне';
+$labels['keyfeatureaddition'] = 'Ðова функционалноÑÑ‚';
+$labels['codeimprovements'] = 'ÐŸÐ¾Ð´Ð¾Ð±Ñ€ÐµÐ½Ð¸Ñ Ð½Ð° кода';
+$labels['servicenotavailable'] = 'УÑлугата не е доÑтъпна в момента. МолÑ, опитайте по-къÑно!';
+$labels['myrcerror'] = 'УÑлугите на MyRoundcube не Ñа доÑтъпни в момента.';
+$labels['getnew'] = 'ЗаÑви нов клиентÑки номер';
+$labels['getnew_hint'] = 'Препоръчваме Ви чеÑто да подновÑвате клиентÑÐºÐ¸Ñ Ñи номер. Ðко забележите подозрителна активноÑÑ‚ в профила Ñи, незабавно подновете клиентÑÐºÐ¸Ñ Ñи номер.';
+$labels['transfer'] = 'ПрехвърлÑне на кредити';
+$labels['submenuprefix'] = ' » ';
+$labels['noplugindescription'] = 'Ðе е открито опиÑание на допълнението.';
+$labels['markbuttons_pluginname'] = 'Бутони за маркиране на пиÑмата';
+$labels['markbuttons_plugindescription'] = 'Ð”Ð¾Ð±Ð°Ð²Ñ Ð¸ÐºÐ¾Ð½Ð¸ под ÑпиÑъка ÑÑŠÑ ÑÑŠÐ¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð·Ð° бързо маркиране на мейлите.';
+$labels['keyboard_shortcuts_pluginname'] = 'Клавиши за бърз доÑтъп';
+$labels['keyboard_shortcuts_plugindescription'] = 'Изпълнение на команди Ñ Ð¸Ð·Ð¿Ð¾Ð»Ð·Ð²Ð°Ð½Ðµ на клавишни комбинации.';
+$labels['message_highlight_pluginname'] = 'ОцветÑване на ÑъобщениÑ';
+$labels['message_highlight_plugindescription'] = 'ОцветÑване на ÑъобщениÑта, които отговарÑÑ‚ на определени критерии.';
+$labels['google_contacts_pluginname'] = 'Контакти от Google';
+$labels['google_contacts_plugindescription'] = 'ДоÑтъп до контактите Ви в Google.';
+$labels['contextmenu_pluginname'] = 'КонтекÑтно меню';
+$labels['contextmenu_plugindescription'] = 'ДобавÑне на контекÑтно меню при кликване на деÑÐ½Ð¸Ñ Ð±ÑƒÑ‚Ð¾Ð½ на мишката.';
+
+?> \ No newline at end of file
diff --git a/plugin_manager/localization/cs_CZ.inc b/plugin_manager/localization/cs_CZ.inc
new file mode 100644
index 0000000..dc69aaf
--- /dev/null
+++ b/plugin_manager/localization/cs_CZ.inc
@@ -0,0 +1,346 @@
+<?php
+/*
+ +-----------------------------------------------------------------------+
+ | ./plugins/plugin_manager/localization/cs_CZ.inc
+ |
+ | Language file of MyRoundcube Plugins Bundle
+ | Copyright (C) 2010-2015, Roland 'rosali' Liebl
+ |
+ +-----------------------------------------------------------------------+
+ | Author: tachec - 01/20/2015 11:37:38
+ +-----------------------------------------------------------------------+
+*/
+
+$labels = array();
+$labels['pluginname'] = 'Správce doplňků';
+$labels['plugindescription'] = 'Správce doplňků poskytuje uživatelům volby, které umožní povolit ​​nebo zakázat doplňky (na úrovni uživatelského úÄtu) a zároveň pomáhá administrátorům udržet doplňky v aktuálním stavu, opravu případných chyb, centralizované stahování, dokumentaci a doporuÄení. Správce doplňků neprovádí zmÄ›ny v souborovém systému ani automaticky neinstaluje doplňky.';
+$labels['plugin_manager_title'] = 'Správa doplňků';
+$labels['plugin_manager_center'] = 'Centrum Správce doplňků';
+$labels['updatepm'] = 'Je dostupná aktualizace pro Správce doplňků.';
+$labels['updatepmrequired'] = 'Je vyžadována aktualizace Správce doplňků.';
+$labels['downloadnow'] = 'Stáhnout nyní';
+$labels['homepage'] = 'Domovská stránka';
+$labels['calendaring'] = 'Kalendář';
+$labels['misc'] = 'Ostatní';
+$labels['downloads'] = 'staženo';
+$labels['issue'] = 'Problém';
+$labels['submitissue'] = 'Nahlásit problém. Zkontrolujte prosím logy a poskytnÄ›te relevantní informace v hlášení. Poznámka: je vyžadován úÄet Google.';
+$labels['showall'] = 'Zobrazit všechny doplňky';
+$labels['hideuptodate'] = 'Zobrazit pouze aktualizace';
+$labels['connectionerror'] = 'Vzdálený server neodpovídá na pokus o připojení.';
+$labels['trylater'] = 'Zkuste to prosím později...';
+$labels['translate'] = 'Přeložit tento doplněk';
+$labels['translationaccount'] = 'ÚÄet pro pÅ™eklad v reálném Äase (uživatelské jméno)';
+$labels['translationserver'] = 'ÚÄet pro pÅ™eklad v reálném Äase (IMAP server)';
+$labels['whatsthis'] = 'Co je to?';
+$labels['restoredefaults'] = 'Obnovit výchozí';
+$labels['checkall'] = 'Zaškrnout vše';
+$labels['uncheckall'] = 'Zrušit zaškrtnutí všech';
+$labels['toggle'] = 'Přepnout výběr';
+$labels['status'] = 'Stav';
+$labels['globalplugins'] = 'Globální doplňky';
+$labels['performance'] = 'Výkonnost';
+$labels['backend'] = 'Doplňky serveru';
+$labels['messagesmanagement'] = 'Obsluha zpráv';
+$labels['furtherconfig'] = 'ChtÄ›li byste nastavit tento doplnÄ›k teÄ?';
+$labels['uninstall'] = 'Chystáte se vypnout tento doplněk. Chcete trvale odstranit i všechna jeho uložená nastavení? ';
+$labels['uninstallconfirm'] = 'Chystáte se vypnout tento doplnÄ›k. VAROVÃNÃ: Zvolte »Zakázat« pokud chcete tento doplnÄ›k zakázat, ale chcete pro nÄ›j ponechat veÅ¡kerá nastavení pro pozdÄ›jší použití. Zvolte »Odstranit« pokud chcete trvale odstranit z databáze veÅ¡kerá nastavení a data související s tímto doplňkem. Tato akce je nevratná.';
+$labels['areyousure'] = 'Tuto akci nelze vrátit zpět. Jste si jistí?';
+$labels['successfullydeleted'] = 'Nastavení bylo úspěšně odstraněno.';
+$labels['successfullysaved'] = 'Úspěšně uloženo.';
+$labels['errorsaving'] = 'Při ukládání nastala chyba.';
+$labels['yes'] = 'Ano';
+$labels['no'] = 'Ne';
+$labels['disable'] = 'Zakázat';
+$labels['remove'] = 'Odstranit';
+$labels['savewarning'] = 'Chcete již uložit dané změny?';
+$labels['plugin_manager_update'] = 'Aktualizovat doplňky';
+$labels['authors_comments'] = 'Autorovy komentáře (bez překladu)';
+$labels['requiredby'] = 'Doplněk je vyžadován';
+$labels['requires'] = 'Doplněk vyžaduje';
+$labels['recommended'] = 'DoporuÄené doplňky';
+$labels['update_plugins'] = 'Stažení doplňků';
+$labels['ziparchive'] = 'Stáhnout ZIP archiv';
+$labels['demoaccount'] = 'Omlouváme se, ale tato akce je zakázána (demo úÄet)';
+$labels['serverversion'] = 'Verze na serveru';
+$labels['mirrorversion'] = 'Dostupná verze';
+$labels['mirrorhost'] = 'Dostupný server';
+$labels['comments'] = 'Požadavky a poznámky k aktualizaci';
+$labels['update_error'] = 'Verze nesouhlasí';
+$labels['update_ok'] = 'Zjištěna nejnovější verze. Žádná aktualizace není třeba.';
+$labels['update_edit'] = 'Doplněk musí být znovu nakonfigurován nebo vyžaduje úpravy databáze. Prohlédněte si prosím poznámky k aktualizaci.';
+$labels['servernewer'] = 'Registrovaný doplněk je novější než aktuálně dostupná verze.';
+$labels['orhigher'] = 'nebo vyšší';
+$labels['rc_ok'] = 'Jádro Roundcube je aktuální.';
+$labels['update_update'] = 'Doplněk je zastaralý. Prosím aktualizujte! Prohlédněte si poznámky k aktualizaci.';
+$labels['noupdates'] = 'Nejsou vybrány žádné aktualizace.';
+$labels['rc_update'] = 'Jádro Roundcube je zastaralé. Zaktualizujte jej prosím!';
+$labels['rc_uptodate'] = 'Jádro Roundcube je aktuální.';
+$labels['rc_newer'] = 'Jádro Roundcube je novější než aktuálně dostupná verze.';
+$labels['nottested'] = 'Prosím, použijte tento doplněk obezřetně! Nevíme, jestli tento hostovaný doplněk spolupracuje s Roundcube v%s.';
+$labels['justunzip'] = 'StaÄí rozbalit archiv pÅ™es stávající instalaci.';
+$labels['guide'] = 'Čtěte více...';
+$labels['thirdparty'] = 'Toto není MyRoundcube doplněk.';
+$labels['thirdpartywarning'] = 'Toto je doplnÄ›k tÅ™etí strany. DoporuÄujeme nestahovat tento doplnÄ›k z naÅ¡eho úložiÅ¡tÄ›, ale stáhnout jej přímo ze stránek jeho tvůrce. Tím bude zajiÅ¡tÄ›na jeho aktuálnost a případné poznámky a rady budete mít přímo od vývojáře tohoto doplňku.';
+$labels['develsite'] = 'Stáhnout';
+$labels['notinstalled'] = 'nenainstalován';
+$labels['notregistered'] = 'nezaregistrován';
+$labels['roundcubeurl'] = 'Stáhnout Roundcube';
+$labels['languageupdate'] = 'Je dostupná aktualizace lokalizaÄního souboru.';
+$labels['localizationfilesonly'] = 'Poznámka: stažení obsahuje pouze lokalizaÄní soubory';
+$labels['donotregister'] = 'Neregistrujte tento doplnÄ›k. bude naÄten automaticky.';
+$labels['register'] = 'Zaregistrujte tento doplněk v konfiguraci Správce doplňků nebo v souboru ./config/config.inc.php [$config[\'plugins\'] = array("foo", "bar");].';
+$labels['customer_account'] = 'Zákaznický úÄet';
+$labels['customer_id'] = 'ID zákazníka';
+$labels['invalid_customer_id'] = 'Neplatné ID zákazníka';
+$labels['invalid_credits'] = 'Neplatné kredity';
+$labels['successfully_transferred'] = 'Kredity byly úspěšně převedeny';
+$labels['merge'] = 'SlouÄit kredity';
+$labels['credits'] = 'Kredity';
+$labels['creditsupdated'] = 'Kredity se změnily od posledního obnovení stránky';
+$labels['buynow'] = 'Koupit kredity nyní';
+$labels['history'] = 'Historie úÄtu';
+$labels['details'] = 'Detaily';
+$labels['receipt'] = 'Příjmy';
+$labels['plugins'] = 'Doplňky';
+$labels['clickhere'] = 'Klikněte zde';
+$labels['discardliabletopaycosts'] = 'Vyřadit ze stažení doplňky, které jsou zpoplatněné';
+$labels['unchecknotinstalledplugins'] = 'Vyřadit ze stažení doplňky, které nejsou nainstalované';
+$labels['sum'] = 'SouÄet';
+$labels['show'] = 'Zobrazit';
+$labels['hide'] = 'Skrýt';
+$labels['view'] = 'zobrazeno';
+$labels['expired'] = 'expirováno';
+$labels['terms'] = 'Podmínky';
+$labels['pricelist'] = 'Stáhnout ceník';
+$labels['forthisdownload'] = 'pro toto stažení';
+$labels['remainingcredits'] = 'zbývající kredity';
+$labels['initialdownload'] = 'PoÄáteÄní stažení';
+$labels['keyfeatureaddition'] = 'Nová klíÄová funkcionalita';
+$labels['codeimprovements'] = 'Zlepšení kódu';
+$labels['servicenotavailable'] = 'Služba je momentálně nedostupná. Zkuste to prosím později!';
+$labels['myrcerror'] = 'Služby MyRoundcube jsou momentálně nedostupné.';
+$labels['getnew'] = 'Vyžaduje nové ID zákazníka';
+$labels['getnew_hint'] = 'DoporuÄujeme abyste Äasto obnovovali své ID zákazníka. Pokud si vÅ¡imnete jakékoliv podezÅ™elé aktivity v detailech vaÅ¡eho úÄtu, obnovte okamžitÄ› své zákaznické ID.';
+$labels['transfer'] = 'Přenos kreditů';
+$labels['submenuprefix'] = '»';
+$labels['printdetails'] = 'Vytisknout detaily úÄtu ';
+$labels['noplugindescription'] = 'Nezjištěn žádný popisek doplňku.';
+$labels['welcome_to_plugin_manager'] = 'Vítejte ve Správci doplňků';
+$labels['about_to_create_account'] = 'Správce doplňků se chystá vytvoÅ™it výsadní administrátorský úÄet.';
+$labels['create_account_proceed'] = 'Chcete-li pokraÄovat, musíte potvrdit, že jste správce této služby.';
+$labels['please_create'] = 'Vytvořte prosím následující soubor v kořenovém adresáři vaší instalace Roundcube:';
+$labels['thank_you'] = 'Děkuji!';
+$labels['done'] = 'Hotovo';
+$labels['manage_admins'] = 'Administrátoři';
+$labels['plugin_manager_admins'] = 'Administrátoři Správce doplňků';
+$labels['allow_plugins_configuration'] = 'Udělit oprávnění pro konfiguraci doplňků';
+$labels['share_credits'] = 'Sdílet MyRC$ kredity';
+$labels['add'] = 'Přidat';
+$labels['accountnotexists'] = 'ÚÄet neexistuje';
+$labels['sharedby'] = 'Zákaznický úÄet sdílí';
+$labels['switch'] = 'Přepnout';
+$labels['ownaccount'] = 'vlastníkovi úÄtu';
+$labels['shareinvitation'] = 'sdílenému úÄtu';
+$labels['enable_notifications'] = 'Povolit upozornění na novou verzi doplňků';
+$labels['enable_notifications_note'] = 'Poznámka: Správce doplňků dotazuje MyRoundcube servery pro zjištění dostupných aktualizací pouze jednou denně.';
+$labels['notifications_cc'] = 'CC adresa pro upozornění';
+$labels['notifications_cc_note'] = 'Poznámka: oznámení o nových aktualizacích se poÅ¡le vÅ¡em administrátorům Správce doplňků. Pomocí tohoto pole můžete pÅ™idat další příjemce, napÅ™: jan.novak@gmail.com nebo distribuÄní seznam e-mailových adres.';
+$labels['serverconfiguration'] = 'Konfigurace serveru';
+$labels['pluginsconfiguration'] = 'Konfigurace doplňků';
+$labels['use_ssl'] = 'VytvoÅ™it zabezpeÄené SSL pÅ™ipojení k serverům MyRoundcube';
+$labels['use_hmail'] = 'Použít hMailserver kompatibilní doplňky';
+$labels['load_splitter'] = 'Rozdělení zátěže pro statické soubory';
+$labels['show_myrc_messages'] = 'Zobrazit oznamovací zprávy ze serverů MyRoundcube';
+$labels['maintenance_mode'] = 'Režim údržby';
+$labels['maintenance_mode_hint'] = 'DoÄasnÄ› zakáže vÅ¡echny aktivní doplňky. Používá se k aktualizaci doplňků na novÄ›jší hlavní verze. Správce doplňků zakáže vÅ¡echny aktivní doplňky, ale umožní vám i nadále přístup ke stažení nejnovÄ›jších aktualizací doplňků z naÅ¡ich serverů.';
+$labels['running_in_maintenance_mode'] = 'Webmail běží v režimu údržby';
+$labels['serverwide'] = 'konfigurace na stranÄ› serveru';
+$labels['file_based_config'] = 'Povolit konfiguraci Správce doplňků pomocí souborů';
+$labels['advanced_admins'] = 'vhodné pouze pro pokroÄilé správce';
+$labels['compress_html'] = 'Zmenšit HTML výstup';
+$labels['show_config'] = 'Zobrazit aktuální konfiguraci';
+$labels['systemadmin'] = 'Systémový administrátor';
+$labels['admin'] = 'Administrátor';
+$labels['configuredby'] = 'nakonfigurováno';
+$labels['enabled'] = 'Povolen (výchozí)';
+$labels['protected'] = 'Chráněn';
+$labels['skins'] = 'Skiny';
+$labels['loads_always'] = 'Povinný';
+$labels['loads_never'] = 'Doplněk je zakázán';
+$labels['loads_by_user'] = 'Uživatel si může urÄit jeho využití';
+$labels['loads_linked'] = 'Vázán na';
+$labels['unbind'] = 'odvázat';
+$labels['bind'] = 'přivázat';
+$labels['addplugin'] = 'Přidat doplněk';
+$labels['removeplugin'] = 'Odstranit doplněk';
+$labels['errorplugin'] = 'Chyba: Požadovaný doplněk chybí';
+$labels['errorrcversion'] = 'Chyba: doplněk vyžaduje Roundcube';
+$labels['errorphpversion'] = 'Chyba: doplněk vyžaduje PHP';
+$labels['errorphpcurl'] = 'Chyba: není nainstalována podpora cURL';
+$labels['errorphpfinfo'] = 'Chyba: není nainstalována podpora finfo';
+$labels['errordb'] = 'Je vyžadována úprava databáze. Povolte prosím doplněk pro spuštění databázových úloh.';
+$labels['errordb8'] = 'Je vyžadována úprava databáze.';
+$labels['syntaxerror'] = 'Chyba PHP syntaxe';
+$labels['notconfigured'] = 'Doplněk není nakonfigurován';
+$labels['editconfig'] = 'Upravit konfiguraci';
+$labels['instructions'] = 'Pokyny';
+$labels['dbautomatically'] = 'Zahájení úprav.';
+$labels['dbmanually'] = 'Postupujte prosím podle následujících pokynů.';
+$labels['ornewer'] = 'nebo novější';
+$labels['official_releases'] = 'Podporujeme pouze oficiální verze Roundcube';
+$labels['localizationmissing'] = 'Nenalezeny žádné popisky pro jméno a popis doplňku';
+$labels['documentation'] = 'Dokumentace';
+$labels['select_plugin'] = 'Vybrat doplněk';
+$labels['legend'] = 'Legenda';
+$labels['plugindisabledbydefault'] = 'DoplnÄ›k je ve výchozím nastavení zakázán - uživatel si může urÄit jeho použití';
+$labels['pluginenabledbydefault'] = 'DoplnÄ›k je ve výchozím nastavení povolen - uživatel si může urÄit jeho použití';
+$labels['pluginmandatory'] = 'Povinný - doplněk je povolen, uživatelé nemohou tento doplněk povolit/zakázat';
+$labels['show_about_link'] = 'Zobrazit odkaz "O programu"';
+$labels['show_support_link'] = 'Zobrazit odkaz "Podpora"';
+$labels['use_myroundcube_watermark'] = 'Použít vodoznak "MyRoundcube"';
+$labels['remove_watermark'] = 'Nezobrazovat vůbec vodoznak';
+$labels['database'] = 'Databáze';
+$labels['account_details_compressed'] = 'Detaily úÄtu zkomprimovány';
+$labels['credits_transferred'] = 'Kredity převedeny';
+$labels['customer_id_changed'] = 'ID zákazníka změněno';
+$labels['myrcd_bought'] = 'MyRC$ koupeno - děkujeme!';
+$labels['myrcd_refunded'] = 'MyRC$ vráceno';
+$labels['PHPMyAdmin'] = 'PHPMyAdmin';
+$labels['ipmismatch'] = 'Stažení z IP adresy %s není možné (IP adresa klienta neodpovídá). Použijte %s nebo navštivte %s z IP adresy %s.';
+$labels['emoticons_pluginname'] = 'Náhrada smajlíků';
+$labels['emoticons_plugindescription'] = 'Nahradí zkratku pro smajlík obrázkem';
+$labels['markbuttons_pluginname'] = 'TlaÄítko pro oznaÄení zpráv';
+$labels['markbuttons_plugindescription'] = 'PÅ™idá ovládací ikony pod oddÄ›lovaÄ seznamu zpráv, které umožní rychle oznaÄit zprávy.';
+$labels['keyboard_shortcuts_pluginname'] = 'Klávesové zkratky';
+$labels['keyboard_shortcuts_plugindescription'] = 'Spouští příkazy na základě klávesových zkratek.';
+$labels['message_highlight_pluginname'] = 'Zvýrazňování zpráv';
+$labels['message_highlight_plugindescription'] = 'Zvýrazní zprávy na základě filtrovacích pravidel.';
+$labels['google_contacts_pluginname'] = 'Kontakty Google';
+$labels['google_contacts_plugindescription'] = 'Umožní přístup do vašich kontaktů Google.';
+$labels['contextmenu_pluginname'] = 'Kontextové menu';
+$labels['contextmenu_plugindescription'] = 'Kontextové menu na pravé tlaÄítko myÅ¡i.';
+$labels['newmail_notifier_pluginname'] = 'Oznámení příchozí zprávy';
+$labels['newmail_notifier_plugindescription'] = 'Oznámí nově příchozí zprávu.';
+$labels['listcommands_pluginname'] = 'Odpovědět do e-mailové konference';
+$labels['listcommands_plugindescription'] = 'Různé možnosti pro odpovědi na zprávy odeslané z e-mailových konferencí.';
+$labels['copymessage_pluginname'] = 'Kopírování zpráv';
+$labels['copymessage_plugindescription'] = 'Kopírování zpráv do jiné IMAP složky .';
+$labels['vcard_attachments_pluginname'] = 'Přílohy ve formátu vCard';
+$labels['vcard_attachments_plugindescription'] = 'Přidá prvek do zpráv, které mají přílohu ve formátu vcard a umožní tak importovat kontakty přímo do adresáře.';
+$labels['zipdownload_pluginname'] = 'Export zpráv';
+$labels['zipdownload_plugindescription'] = 'Exportuje zprávy jako zip soubor.';
+$labels['markasjunk2_pluginname'] = 'OznaÄ zprávy jako SPAM';
+$labels['markasjunk2_plugindescription'] = 'OznaÄí zprávu jako SPAM nebo jako validní zprávu.';
+$labels['markasjunk_pluginname'] = 'OznaÄ zprávy jako SPAM';
+$labels['markasjunk_plugindescription'] = 'OznaÄí zprávu jako SPAM nebo jako validní zprávu.';
+$labels['google_analytics_pluginname'] = 'Analýza Google';
+$labels['google_analytics_plugindescription'] = 'Vloží analýzu Google';
+$labels['globaladdressbook_pluginname'] = 'Globální adresář';
+$labels['globaladdressbook_plugindescription'] = 'Adresář (pouze pro Ätení), který je poskytován správcem systému.';
+$labels['blockspamsending_pluginname'] = 'Ochrana proti rozesílání spamu';
+$labels['blockspamsending_plugindescription'] = 'Povolí zasílání pouze urÄitého množství zpráv se stejným pÅ™edmÄ›tem v průbÄ›hu jednoho sezení.';
+$labels['global_config_pluginname'] = 'Správa konfigurace';
+$labels['global_config_plugindescription'] = 'Toto je doplnÄ›k pro správu konfigurace. Optimalizuje váš server centralizací konfiguraÄních souborů jednotlivých doplňků. ZjednoduÅ¡uje vaÅ¡e administraÄní úkoly tím, že umožňuje použít pouze jeden konfiguraÄní soubor pro vÅ¡echny doplňky.';
+$labels['jqueryui_pluginname'] = 'Jqueryui';
+$labels['jqueryui_plugindescription'] = 'Javascriptová knihovna Jqueryui';
+$labels['hide_blockquote_pluginname'] = 'Skrýt citace';
+$labels['hide_blockquote_plugindescription'] = 'Skrýt citace, když je poÄet řádků vÄ›tší než zadaný.';
+$labels['crawler_pluginname'] = 'Crawler';
+$labels['crawler_plugindescription'] = 'Falešná stránka pro prohledávací systémy.';
+$labels['archive_pluginname'] = 'Archiv';
+$labels['archive_plugindescription'] = 'Archivuje zprávy v archivní složce.';
+$labels['autologon_pluginname'] = 'Automatické přihlášení';
+$labels['autologon_plugindescription'] = 'Automatické přihlášení uživatele.';
+$labels['openpgpjs_pluginname'] = 'OpenPGPjs';
+$labels['openpgpjs_plugindescription'] = 'PGP pro Roundcube.';
+$labels['dblog_pluginname'] = 'Logu do databáze ';
+$labels['dblog_plugindescription'] = 'Zapisuje události do databáze namísto logovacího souboru.';
+$labels['gibberish_pluginname'] = 'Gibberish šifrování';
+$labels['gibberish_plugindescription'] = 'Pomocný doplněk pro šifrování Gibberish AES.';
+$labels['http_request_pluginname'] = 'HTTP požadavek';
+$labels['http_request_plugindescription'] = 'Pomocný doplněk pro provádění HTTP požadavků přes cURL nebo fsockopen.';
+$labels['http_auth_pluginname'] = 'HTTP autentizace';
+$labels['http_auth_plugindescription'] = 'Pomocný doplněk pro podporu HTTP autentizace pro ostatní doplňky. Poznámka: Tento doplněk je odlišný od výchozího doplňku http_authentication pro Roundcube.';
+$labels['http_authentication_pluginname'] = 'HTTP autentizace (výchozí)';
+$labels['http_authentication_plugindescription'] = 'Využívá aktuální HTTP autentizaci a provádí přihlášení se stávajícím pověřením uživatele.';
+$labels['jscolor_pluginname'] = 'Výběr barvy';
+$labels['jscolor_plugindescription'] = 'Pomocný doplněk sloužící k zobrazení dialogu pro výběr barvy.';
+$labels['tinymce_pluginname'] = 'TinyMCE - HTML editor';
+$labels['tinymce_plugindescription'] = 'Tento doplněk implementuje TinyMCE PHP Kompresor (http://www.tinymce.com/wiki.php/Compressors:PHP). Kromě toho přidává možnost konfigurovat nastavení TinyMCE bez nutnosti úprav v základních souborech RoundCube.';
+$labels['lang_sel_pluginname'] = 'Výběr jazyka.';
+$labels['lang_sel_plugindescription'] = 'Umožňuje výběr jazyka při přihlášení.';
+$labels['newuser_pluginname'] = 'Nový uživatel';
+$labels['newuser_plugindescription'] = 'Informuje správce, když se nový uživatel registruje přes rozhraní webmailu a umožňuje odeslat uvítací zprávu novému uživatele při prvním přihlášení.';
+$labels['placeholder_pluginname'] = 'Přídavné atributy';
+$labels['placeholder_plugindescription'] = 'Přidá přídavné atributy ke vstupním textovým polím a polím pro vstup hesla.';
+$labels['qtip_pluginname'] = 'Místní nápověda jQueryUI';
+$labels['qtip_plugindescription'] = 'Pomocný doplněk pro využití místní nápovědy - jQueryUI qtip.';
+$labels['sabredav_pluginname'] = 'SabreDAV';
+$labels['sabredav_plugindescription'] = 'Vytváří SabreDAV úÄty pro přístup k CalDAV kalendáři pÅ™i vytváření nových uživatelů v RoundCube a pÅ™idružuje hesla, pokud byla zmÄ›nÄ›na.';
+$labels['savepassword_pluginname'] = 'Ulož hesla';
+$labels['savepassword_plugindescription'] = 'Jedná se o pomocný doplněk, který využívají některé další doplňky.';
+$labels['database_attachments_pluginname'] = 'Přílohy v databázi';
+$labels['database_attachments_plugindescription'] = 'Pomocný doplněk pro správu příloh v databázi.';
+$labels['help_pluginname'] = 'Nápověda';
+$labels['help_plugindescription'] = 'Nápověda k webmailu';
+$labels['new_user_dialog_pluginname'] = 'Dialog pro nového uživatele';
+$labels['new_user_dialog_plugindescription'] = 'Poskytuje dialogové okno pro nastavení identity pro nové uživatele. Když je vytvořen nový uživatel, tento doplněk kontroluje výchozí identitu a nastaví příznak v případě, že je identita nekompletní. Na obrazovce uživatele se objeví okno, které překryje veškerý obsah dokud uživatel nedoplní svoji identitu.';
+$labels['rcguard_pluginname'] = 'ReCAPTCHA';
+$labels['rcguard_plugindescription'] = 'Vynutí CAPTCHA ověření po urÄitém poÄtu neúspěšných pokusů o pÅ™ihlášení.';
+$labels['domain_check_pluginname'] = 'Kontrola domény';
+$labels['domain_check_plugindescription'] = 'Omezuje přihlášení do konkrétních domén.';
+$labels['tasklist_pluginname'] = 'Seznam úkolů';
+$labels['tasklist_plugindescription'] = 'Umožňuje vytvářet úkoly a seznamy dílÄích úkolů s pÅ™ipomenutím.';
+$labels['virtuser_query_pluginname'] = 'Dotaz na virtuálního uživatele';
+$labels['virtuser_query_plugindescription'] = 'Databázové vyhledávání spojení uživatel-email a email-uživatel.';
+$labels['virtuser_file_pluginname'] = 'Dotaz na virtuálního uživatele';
+$labels['virtuser_file_plugindescription'] = 'Databázové vyhledávání spojení uživatel-email a email-uživatel.';
+$labels['userinfo_pluginname'] = 'Uživatelské informace';
+$labels['userinfo_plugindescription'] = 'Zobrazí informace o aktuálním uživateli.';
+$labels['subscriptions_option_pluginname'] = 'Odebírání/přidávání IMAP složek';
+$labels['subscriptions_option_plugindescription'] = 'Slouží ke správě odebírání/přidávání IMAP složek.';
+$labels['filters_pluginname'] = 'Filtry';
+$labels['filters_plugindescription'] = 'Správa filtrů na straně klienta.';
+$labels['forgot_password_pluginname'] = 'Zapomenuté heslo';
+$labels['forgot_password_plugindescription'] = 'Požadavek na obnovu hesla.';
+$labels['sieverules_pluginname'] = 'Sieve filtry';
+$labels['sieverules_plugindescription'] = 'Správa Sieve filtrů.';
+$labels['managesieve_pluginname'] = 'Sieve filtry';
+$labels['managesieve_plugindescription'] = 'Správa Sieve filtrů.';
+$labels['acl_pluginname'] = 'Přístupová práva';
+$labels['acl_plugindescription'] = 'Správa přístupových práv na složkách.';
+$labels['vacation_pluginname'] = 'Zpráva v nepřítomnosti';
+$labels['vacation_plugindescription'] = 'Nastavení zprávy v nepřítomnosti (oznámení o dovolené).';
+$labels['password_pluginname'] = 'Změna hesla';
+$labels['password_plugindescription'] = 'Povoluje uživatelům změnit si své heslo.';
+$labels['redundant_attachments_pluginname'] = 'Záložní přílohy';
+$labels['redundant_attachments_plugindescription'] = 'Tento doplnÄ›k poskytuje redundantní úložiÅ¡tÄ› pro doÄasnÄ› nahrané soubory příloh. Přílohy jsou uloženy v databázi a souÄasnÄ› i na lokálním souborovém systému.';
+$labels['example_addressbook_pluginname'] = 'Ukázkový adresář';
+$labels['example_addressbook_plugindescription'] = 'Ukázkový kód pro přidání dalšího adresáře.';
+$labels['debug_logger_pluginname'] = 'Rozšířené logování záznamů';
+$labels['debug_logger_plugindescription'] = 'Umožňuje rozšířené logování záznamů pro úÄely testování.';
+$labels['show_additional_headers_pluginname'] = 'Zobrazit další hlaviÄky zprávy';
+$labels['show_additional_headers_plugindescription'] = 'DoplnÄ›k, který stáhne další hlaviÄky a zobrazí je v detailu zprávy.';
+$labels['additional_message_headers_pluginname'] = 'Další hlaviÄky zprávy';
+$labels['additional_message_headers_plugindescription'] = 'Velmi jednoduchý doplnÄ›k, který do odchozích zpráv pÅ™idá další hlaviÄky nebo je naopak odstraní.';
+$labels['new_user_identity_pluginname'] = 'Identita nového uživatele';
+$labels['new_user_identity_plugindescription'] = 'Tento doplněk vyplní výchozí identitu nového uživatele z LDAPu při jeho první návštěvě.';
+$labels['squirrelmail_usercopy_pluginname'] = 'Migruje uživatele ze Squirrelmailu';
+$labels['squirrelmail_usercopy_plugindescription'] = 'Pro nového uživatele nakopíruje identitu uživatele a jeho nastavení ze Squirrelmailu.';
+$labels['yubikey_authentication_pluginname'] = 'Autentizace Yubikey od firmy Yubico';
+$labels['yubikey_authentication_plugindescription'] = 'Doplněk pro využití autentizace do Roundcube pomocí Yubikey od firmy Yubico ';
+$labels['sauserprefs_pluginname'] = 'Uživatelské nastavení pro Spamassassin';
+$labels['sauserprefs_plugindescription'] = 'Přidá záložku \'Spam\' do uživatelského nastavení pomocí níž si uživatel může měnit nastavení Spamassassinu.';
+$labels['dkimstatus_pluginname'] = 'DKIM stav';
+$labels['dkimstatus_plugindescription'] = 'Zobrazuje stav DKIM podpisu pro každý e-mail.';
+$labels['roundcube_openpgp_pluginname'] = 'Roundcube OpenPGP';
+$labels['roundcube_openpgp_plugindescription'] = 'Implementace OpenPGP pro Roundcube. Pomáhá generovat, spravovat a používat Å¡ifrovací klíÄe.';
+$labels['automatic_addressbook_pluginname'] = 'Automatický adresář';
+$labels['automatic_addressbook_plugindescription'] = 'Vytvoří adresář a automaticky do nÄ›j vkládá získané e-mailové adresy. Eliminuje potÅ™ebu ruÄnÄ› pÅ™idávat každý kontakt.';
+$labels['calendar_pluginname'] = 'Kalendář';
+$labels['calendar_plugindescription'] = 'Umožňuje správu událostí za pomocí Webmail kalendáře.';
+$labels['attachment_reminder_pluginname'] = 'Připomenutí na přílohu';
+$labels['attachment_reminder_plugindescription'] = 'Připomene uživatelům přiložit soubor přílohy před odesláním zprávy.';
+
+?> \ No newline at end of file
diff --git a/plugin_manager/localization/de_CH.inc b/plugin_manager/localization/de_CH.inc
new file mode 100644
index 0000000..f3a1daf
--- /dev/null
+++ b/plugin_manager/localization/de_CH.inc
@@ -0,0 +1,244 @@
+<?php
+/*
++-----------------------------------------------------------------------+
+| ./plugins/plugin_manager/localization/de_CH.inc
+|
+| Language file of MyRoundcube Plugins Bundle
+| Copyright (C) 2010-2012, Roland 'rosali' Liebl
+| Licensed under the GNU GPL
+|
++-----------------------------------------------------------------------+
+| Author: myroundcube@mail4us.net - 03/21/2012 18:05:31
++-----------------------------------------------------------------------+
+*/
+
+$labels = array();
+$labels['pluginname'] = 'Plugin Manager';
+$labels['plugindescription'] = 'Plugin Manager gibt Benutzern die Möglichkeit einzelne Erweiterungen zu aktivieren oder zu deaktivieren und hilft Administratoren Erweiterungen aktuell zu halten. Plugin Manager verändert weder das Filesystem, noch werden Erweiterungen automatisch installiert.';
+$labels['plugin_manager_title'] = 'Erweiterungen verwalten';
+$labels['plugin_manager_center'] = 'Plugin Manager Center';
+$labels['updatepm'] = 'Plugin Manager Update verfügbar.';
+$labels['updatepmrequired'] = 'Plugin Manager Update erforderlich.';
+$labels['downloadnow'] = 'Jetzt herunterladen';
+$labels['calendaring'] = 'Aufgaben und Termine verwalten';
+$labels['misc'] = 'Verschiedenes';
+$labels['downloads'] = 'Downloads';
+$labels['issue'] = 'Problem';
+$labels['submitissue'] = 'Melden Sie ein Problem.<br /><br />Bitte überprüfen Sie Ihre Logs und stellen Sie relevante Informationen im Ticket zur Verfügung.<br /><br /><b>BEACHTE</b>: Sie benötigen einen Google-Account.';
+$labels['showall'] = 'Alle verfügbaren Erweiterungen anzeigen.';
+$labels['hideuptodate'] = 'Nur Erweiterungen anzeigen, für die ein Update vorliegt.';
+$labels['connectionerror'] = 'Der Server hat nicht geantwortet.';
+$labels['trylater'] = 'Bitte versuchen Sie es später nochmal.';
+$labels['translate'] = 'Diese Erweiterung übersetzen ';
+$labels['restoredefaults'] = 'Grundeinstellung wiederherstellen';
+$labels['checkall'] = 'Alle auswählen';
+$labels['uncheckall'] = 'Alle abwählen';
+$labels['toggle'] = 'Auswahl umkehren';
+$labels['status'] = 'Status';
+$labels['globalplugins'] = 'Globale Erweiterungen';
+$labels['backend'] = 'Server-Erweiterungen';
+$labels['messagesmanagement'] = 'Nachrichtenverwaltung';
+$labels['furtherconfig'] = 'Diese Erweiterung erfordert weitere Einstellungen. Möchen Sie die Einstellungen jetzt vornehmen?';
+$labels['uninstall'] = 'Möchten Sie alle gespeicherten Einstellungen löschen?';
+$labels['uninstallconfirm'] = 'Möchten Sie Ihre persönlichen Einstellungen dieser Erweiterung behalten oder entfernen? Wenn Si...';
+$labels['areyousure'] = 'Sie können diese Aktion nicht rückgängig machen. Sind Sie wirklich sicher?';
+$labels['successfullydeleted'] = 'Einstellungen wurden erfolgreich entfernt.';
+$labels['successfullysaved'] = 'Erfolgreich gespeichert.';
+$labels['errorsaving'] = 'Beim Speichern ist ein Fehler aufgetreten.';
+$labels['yes'] = 'Ja';
+$labels['no'] = 'Nein';
+$labels['disable'] = 'Behalten';
+$labels['remove'] = 'Entfernen';
+$labels['savewarning'] = 'Möchten Sie Ihre Änderungen jetzt speichern?';
+$labels['plugin_manager_update'] = 'Erweiterungen erneuern';
+$labels['authors_comments'] = 'Anmerkungen des Autors (nicht übersetzt)';
+$labels['requiredby'] = 'Erweiterung wird benötigt von';
+$labels['requires'] = 'Benötigte Erweiterung(en)';
+$labels['recommended'] = 'Empfohlene Erweiterung(en)';
+$labels['update_plugins'] = 'Nach Updates suchen';
+$labels['ziparchive'] = 'Zip-Archiv herunterladen';
+$labels['demoaccount'] = 'Aktion ist nicht möglich (Demo-Konto)';
+$labels['serverversion'] = 'Server-Version';
+$labels['mirrorversion'] = 'Mirror-Version';
+$labels['mirrorhost'] = 'Mirror-Server';
+$labels['comments'] = 'Voraussetzungen und Amerkungen';
+$labels['update_error'] = 'Versionskonflikt';
+$labels['update_ok'] = 'Die Erweiterung ist aktuell. Es ist kein Update erforderlich.';
+$labels['update_edit'] = 'Die Erweiterung muss neu konfiguriert werden und/oder es sind Datenbankanpassungen vorzunehmen. B...';
+$labels['servernewer'] = 'Die registrierte Version der Erweiterung ist neuer als die des Mirror-Servers.';
+$labels['orhigher'] = 'oder höher';
+$labels['rc_ok'] = 'Roundcube Core ist aktuell.';
+$labels['update_update'] = 'Die Erweiterung ist veraltet. Bitte erneuern Sie die Erweiterung unter Berücksichtigung der nebe...';
+$labels['noupdates'] = 'Es wurden keine Updates ausgewählt.';
+$labels['rc_update'] = 'Roundcube Core veraltet. Bitte erneuern Sie Roundcube Core!';
+$labels['rc_uptodate'] = 'Roundcube Core ist aktuell.';
+$labels['rc_newer'] = 'Roundcube Core ist neuer als die Mirror-Version!';
+$labels['nottested'] = 'Bitte benutzen Sie die Erweiterungen mit Vorsicht! Möglicherweise arbeiten die Erweiterungen mit...';
+$labels['justunzip'] = 'Entpacken Sie das Archiv über die bestehende Installation.';
+$labels['guide'] = 'Anleitung';
+$labels['thirdparty'] = 'Das ist keine MyRoundcube-Erweiterung.';
+$labels['thirdpartywarning'] = 'Das ist keine MyRoundcube-Erweiterung. Damit Sie die aktuellste Version erhalten und eventuelle H...';
+$labels['develsite'] = 'Herunterladen';
+$labels['notinstalled'] = 'nicht installiert';
+$labels['notregistered'] = 'nicht registriert';
+$labels['roundcubeurl'] = 'Roundcube herunterladen';
+$labels['languageupdate'] = 'Übsetzungen wurden überarbeitet.';
+$labels['localizationfilesonly'] = 'Download beinhaltet nur Sprachdateien';
+$labels['donotregister'] = 'Diese Erweiterung braucht nicht registriert zu werden. Sie wird automatisch geladen.';
+$labels['register'] = 'Registrieren Sie diese Erweiterung in ./config/config.inc.php <small>[$config[\'plugins\'] = a...</small>';
+$labels['customer_account'] = 'Kundenkonto';
+$labels['customer_id'] = 'Kundennummer';
+$labels['invalid_customer_id'] = 'Ungültige Kundennummer';
+$labels['successfully_transferred'] = 'Credits wurde übertragen';
+$labels['merge'] = 'Credits zusammenfassen';
+$labels['credits'] = 'Credits';
+$labels['creditsupdated'] = 'Credits hat sich seit dem letzten Laden der Seite geändert';
+$labels['buynow'] = 'Credits aufladen';
+$labels['history'] = 'Kontoauszug';
+$labels['details'] = 'Details';
+$labels['receipt'] = 'Quittung';
+$labels['plugins'] = 'Erweiterungen';
+$labels['clickhere'] = 'Hier klicken';
+$labels['discardliabletopaycosts'] = 'Kostenpflichtige Downloads abwählen';
+$labels['unchecknotinstalledplugins'] = 'Nicht installierte Erweiterungen abwählen';
+$labels['sum'] = 'Summe';
+$labels['show'] = 'Anzeigen';
+$labels['hide'] = 'Verbergen';
+$labels['view'] = 'Ansehen';
+$labels['expired'] = 'verfallen';
+$labels['terms'] = 'Bedingungen';
+$labels['pricelist'] = 'Preisliste';
+$labels['forthisdownload'] = 'für diesen Download';
+$labels['remainingcredits'] = 'verbleibende Credits';
+$labels['initialdownload'] = 'Erstmaliger Download';
+$labels['keyfeatureaddition'] = 'Neue Schlüsselfunktionalität';
+$labels['codeimprovements'] = 'Code-Verbesserungen';
+$labels['servicenotavailable'] = 'Der Service ist gerade nicht verfügbar. Versuchen Sie es bitte später nocheinmal.';
+$labels['myrcerror'] = 'MyRoundcube Services sind zur Zeit nicht verfügbar.';
+$labels['getnew'] = 'Neue Kundennummer anfordern';
+$labels['getnew_hint'] = 'Wir empfehlen, die Kundennummer regelmäßig zu erneuern. Wenn Sie verdächtige Aktivitäten in Ihrem Kundenkonto bemerken, dann erneuern Sie die Kundennummer bitte umgehend.';
+$labels['transfer'] = 'Guthaben übertragen';
+$labels['submenuprefix'] = '» ';
+$labels['noplugindescription'] = 'Es konnte keine Beschreibung der Erweiterung gefunden werden.';
+$labels['emoticons_pluginname'] = 'Emotion-Shortcuts';
+$labels['emoticons_plugindescription'] = 'Emotion-Shortcuts mit Smiley-Grafiken ersetzen';
+$labels['markbuttons_pluginname'] = 'Nachrichten markieren';
+$labels['markbuttons_plugindescription'] = 'Ein Menue zum gleichzeitigen markieren mehrer Nachrichten hinzufügen.';
+$labels['keyboard_shortcuts_pluginname'] = 'Tastatureingaben';
+$labels['keyboard_shortcuts_plugindescription'] = 'Die Webmail-Oberfläche über Tastaturbefehle steuern.';
+$labels['message_highlight_pluginname'] = 'Nachrichtenhervorhebung';
+$labels['message_highlight_plugindescription'] = 'Nachrichten in der Nachrichtenliste nach bestimmten Filterkriterien hervorheben.';
+$labels['google_contacts_pluginname'] = 'Google-Adressen';
+$labels['google_contacts_plugindescription'] = 'Machen Sie Ihre Google-Kontakte verfügbar.';
+$labels['contextmenu_pluginname'] = 'Rechter Mausklick';
+$labels['contextmenu_plugindescription'] = 'Erledigen Sie viele Sachen einfach mit einem rechten Mausklick.';
+$labels['newmail_notifier_pluginname'] = 'Benachrichtigung bei neuen Nachrichten';
+$labels['newmail_notifier_plugindescription'] = 'Benachrichtigung bei neuen Nachrichten anzeigen.';
+$labels['listcommands_pluginname'] = 'Beantwortung von Mailing-Lists';
+$labels['listcommands_plugindescription'] = 'Verschiedene Optionen zur Beantwortung von Nachrichten, die an eine Mailing-List versandt werden.';
+$labels['copymessage_pluginname'] = 'Nachrichten kopieren';
+$labels['copymessage_plugindescription'] = 'Eine oder mehrer Nachrichten in einen anderen IMAP-Ordner kopieren.';
+$labels['vcard_attachments_pluginname'] = 'vCard-Anhänge';
+$labels['vcard_attachments_plugindescription'] = 'vCard-Anhänge direkt in das Adressbuch importieren.';
+$labels['importmessages_pluginname'] = 'Nachrichten importieren';
+$labels['importmessages_plugindescription'] = 'Nachrichten von einer eml- oder zip-Quelle importieren.';
+$labels['zipdownload_pluginname'] = 'Nachrichten exportieren';
+$labels['zipdownload_plugindescription'] = 'Nachrichten als zip-Datei exportieren.';
+$labels['markasjunk2_pluginname'] = 'Nachrichten als Spam kennzeichnen';
+$labels['markasjunk2_plugindescription'] = 'Nachrichten als Spam kennzeichnen oder die Spamkennzeichnung von legitimen Nachrichten entfernen.';
+$labels['markasjunk_pluginname'] = 'Nachrichten als Spam kennzeichnen';
+$labels['markasjunk_plugindescription'] = 'Nachrichten als Spam kennzeichnen oder die Spamkennzeichnung von legitimen Nachrichten entfernen.';
+$labels['google_analytics_pluginname'] = 'Google Analytics';
+$labels['google_analytics_plugindescription'] = 'Google Analytics erlauben.';
+$labels['globaladdressbook_pluginname'] = 'Globales Adressbuch';
+$labels['globaladdressbook_plugindescription'] = 'Dieses Adressbuch enthält Adressen, die von Ihrem Administrator zur Verfügung gestellt werden.';
+$labels['blockspamsending_pluginname'] = 'Spamversand vermeiden';
+$labels['blockspamsending_plugindescription'] = 'Limitieren Sie den Versand von Nachrichrichten gleichen Inhalts während einer Sitzung.';
+$labels['global_config_pluginname'] = 'Konfigurations-Manager';
+$labels['global_config_plugindescription'] = 'Optimieren Sie die Performance Ihres Servers durch Zusammenfassung der einzelnen Erweiterungskonf...';
+$labels['jqueryui_pluginname'] = 'Jqueryui';
+$labels['jqueryui_plugindescription'] = 'Jqueryui Javascript-Bibliothek';
+$labels['hide_blockquote_pluginname'] = 'Zitate abkürzen';
+$labels['hide_blockquote_plugindescription'] = 'Verbergen Sie längere Zitate.';
+$labels['crawler_pluginname'] = 'Crawler';
+$labels['crawler_plugindescription'] = 'Für Crawler einen alternativen Seiteninhalt ausgeben.';
+$labels['archive_pluginname'] = 'Archiv';
+$labels['archive_plugindescription'] = 'Meldungen in Archiv Ordner archivieren.';
+$labels['autologon_pluginname'] = 'Autologin';
+$labels['autologon_plugindescription'] = 'Automatisch anmelden';
+$labels['dblog_pluginname'] = 'Datenbanklogging';
+$labels['dblog_plugindescription'] = 'Logs in die Datenbank anstatt in eine Datei schreiben.';
+$labels['http_auth_pluginname'] = 'HTTP Authentifizierung';
+$labels['jscolor_pluginname'] = 'Color Picker';
+$labels['jscolor_plugindescription'] = 'Farben mittels eines Color Pickers selektieren (Hilfserweiterung).';
+$labels['tinymce_pluginname'] = 'TinyMCE - HTML Editor';
+$labels['tinymce_plugindescription'] = 'Diese Erweiterung implementiert TinyMCE PHP Compressor (http://www.tinymce.com/wiki.php/Compressors:PHP). Zusätzlich schafft diese Erweiterung die Möglichkeit, TinyMCE ohne Änderung des Roundcube-Quellcodes zu konfigurieren.';
+$labels['database_attachments_pluginname'] = 'Datenbank Dateianhänge';
+$labels['database_attachments_plugindescription'] = 'Dateianhänge über die Datenbank anstatt über das File-System verarbeiten (Hilfserweiterung).';
+$labels['help_pluginname'] = 'Hilfe';
+$labels['help_plugindescription'] = 'Webmailhilfe';
+$labels['thank_you'] = 'Herzlichen Dank!';
+$labels['done'] = 'Erledigt';
+$labels['manage_admins'] = 'Administratoren';
+$labels['plugin_manager_admins'] = 'Plugin Manager Administratoren';
+$labels['allow_plugins_configuration'] = 'Berechtigung zur Konfiguration von Erweiterungen';
+$labels['share_credits'] = 'Zugriff auf MyRC$-Credits erlauben';
+$labels['add'] = 'Hinzufügen';
+$labels['accountnotexists'] = 'Diese Konto existiert nicht';
+$labels['sharedby'] = 'Zugriff auf Kundenkonto gewährt von';
+$labels['switch'] = 'Wechseln';
+$labels['ownaccount'] = 'zum eigenen Kundenkonto';
+$labels['shareinvitation'] = 'zum Kundenkonto von';
+$labels['use_ssl'] = 'Verbindungen zu MyRoundcube-Server über SSL';
+$labels['use_hmail'] = 'hMailserver kompatible Erweiterungen nutzen';
+$labels['show_myrc_messages'] = 'Benachrichtigungen von MyRoundcube anzeigen';
+$labels['file_based_config'] = 'File-basierte Konfiguration aktivieren';
+$labels['advanced_admins'] = 'nur für fortgeschrittene Administratoren';
+$labels['compress_html'] = 'HTML-Ausgabe komprimieren';
+$labels['show_config'] = 'Aktuelle Konfiguration anzeigen';
+$labels['systemadmin'] = 'Systemadministrator';
+$labels['admin'] = 'Administrator';
+$labels['configuredby'] = 'konfiguriert durch';
+$labels['enabled'] = 'aktiviert<br />(standardmäßig)';
+$labels['protected'] = 'geschützt';
+$labels['loads_always'] = 'obligatorisch';
+$labels['loads_never'] = 'Erweiterung ist deaktiviert';
+$labels['loads_by_user'] = 'der Benutzer entscheidet';
+$labels['loads_linked'] = 'Verknüpft mit';
+$labels['unbind'] = 'Verknüpfung aufheben';
+$labels['bind'] = 'Verknüpfung herstellen';
+$labels['addplugin'] = 'Erweiterung hinzufügen';
+$labels['removeplugin'] = 'Erweiterung entfernen';
+$labels['errorplugin'] = 'Fehler: Erforderliche Erweiterung fehlt';
+$labels['errorrcversion'] = 'Fehler: Erweiterung erfordert Roundcube';
+$labels['errorphpversion'] = 'Fehler: Erweiterung erfordert PHP';
+$labels['errorphpcurl'] = 'Fehler: cURL ist nicht installiert';
+$labels['errorphpfinfo'] = 'Fehler: finfo ist nicht installiert';
+$labels['errordb'] = 'Datenbankanpassungen sind erforderlich.<br />Bitte aktivieren Sie die Erweiterung, um die Anpassungen zu starten.';
+$labels['errordb8'] = 'Datenbankanpassungen sind erforderlich.';
+$labels['syntaxerror'] = 'PHP-Syntaxerror';
+$labels['notconfigured'] = 'Erweiterung ist nicht konfiguriert';
+$labels['editconfig'] = 'Konfiguration bearbeiten';
+$labels['instructions'] = 'Anweisungen';
+$labels['dbautomatically'] = 'Anpassungen starten.';
+$labels['dbmanually'] = 'Bitte folgen Sie diesen Anweisungen.';
+$labels['ornewer'] = 'oder neuer';
+$labels['official_releases'] = 'nur offizielle Roundcube Versionen werden unterstützt';
+$labels['localizationmissing'] = 'Keine Übersetzung für Namen und Beschreibung der Erweiterung vorhanden';
+$labels['documentation'] = 'Dokumentation';
+$labels['select_plugin'] = 'Erweiterung auswählen';
+$labels['legend'] = 'Legende';
+$labels['plugindisabledbydefault'] = 'Erweiterung ist standardmäßig deaktiviert - der Benutzer kann die Erweiterung aktivieren';
+$labels['pluginenabledbydefault'] = 'Erweiterung ist standardmäßig aktiviert - der Benutzer kann die Erweiterung deaktivieren';
+$labels['pluginmandatory'] = 'Verpflichtend laden - Erweiterung ist aktiviert; der Benutzer kann die Einstellung nicht ändern';
+$labels['show_about_link'] = '"Ãœber"-Link anzeigen';
+$labels['show_support_link'] = '"Support"-Link anzeigen';
+$labels['use_myroundcube_watermark'] = '"MyRoundcube"-Wasserzeichen benutzen';
+$labels['remove_watermark'] = 'Wasserzeichen nicht anzeigen';
+$labels['database'] = 'Datenbank';
+$labels['account_details_compressed'] = 'Buchungen wurden komprimiert';
+$labels['credits_transferred'] = 'Credits wurden übertragen';
+$labels['customer_id_changed'] = 'Kundennummer wurde geändert';
+$labels['myrcd_bought'] = 'Es wurden MyRC$ gekauft - Danke!';
+
+?> \ No newline at end of file
diff --git a/plugin_manager/localization/de_DE.inc b/plugin_manager/localization/de_DE.inc
new file mode 100644
index 0000000..35542cd
--- /dev/null
+++ b/plugin_manager/localization/de_DE.inc
@@ -0,0 +1,346 @@
+<?php
+/*
+ +-----------------------------------------------------------------------+
+ | ./plugins/plugin_manager/localization/de_DE.inc
+ |
+ | Language file of MyRoundcube Plugins Bundle
+ | Copyright (C) 2010-2015, Roland 'rosali' Liebl
+ |
+ +-----------------------------------------------------------------------+
+ | Author: myroundcube@mail4us.net - 01/13/2015 15:48:44
+ +-----------------------------------------------------------------------+
+*/
+
+$labels = array();
+$labels['pluginname'] = 'Plugin Manager';
+$labels['plugindescription'] = 'Plugin Manager gibt Benutzern die Möglichkeit einzelne Erweiterungen zu aktivieren oder zu deaktivieren und hilft Administratoren Erweiterungen aktuell zu halten. Plugin Manager verändert weder das Filesystem, noch werden Erweiterungen automatisch installiert.';
+$labels['plugin_manager_title'] = 'Erweiterungen verwalten';
+$labels['plugin_manager_center'] = 'Plugin Manager Center';
+$labels['updatepm'] = 'Plugin Manager Update verfügbar.';
+$labels['updatepmrequired'] = 'Plugin Manager Update erforderlich.';
+$labels['downloadnow'] = 'Jetzt herunterladen';
+$labels['homepage'] = 'Homepage';
+$labels['calendaring'] = 'Aufgaben und Termine verwalten';
+$labels['misc'] = 'Verschiedenes';
+$labels['downloads'] = 'Downloads';
+$labels['issue'] = 'Problem';
+$labels['submitissue'] = 'Melden Sie ein Problem.<br /><br />Bitte überprüfen Sie Ihre Logs und stellen Sie relevante Informationen im Ticket zur Verfügung.<br /><br /><b>BEACHTE</b>: Sie benötigen einen Google-Account.';
+$labels['showall'] = 'Alle verfügbaren Erweiterungen anzeigen.';
+$labels['hideuptodate'] = 'Nur Erweiterungen anzeigen, für die ein Update vorliegt.';
+$labels['connectionerror'] = 'Der Server hat nicht geantwortet.';
+$labels['trylater'] = 'Bitte versuchen Sie es später nocheinmal.';
+$labels['translate'] = 'Diese Erweiterung übersetzen ';
+$labels['translationaccount'] = 'Echtzeit Ãœbersetzeraccount (Benutzername)';
+$labels['translationserver'] = 'Echtzeit Ãœbersetzeraccout (IMAP Server)';
+$labels['whatsthis'] = 'Was ist das?';
+$labels['restoredefaults'] = 'Grundeinstellung wiederherstellen';
+$labels['checkall'] = 'Alle auswählen';
+$labels['uncheckall'] = 'Alle abwählen';
+$labels['toggle'] = 'Auswahl umkehren';
+$labels['status'] = 'Status';
+$labels['globalplugins'] = 'Globale Erweiterungen';
+$labels['performance'] = 'Leistung';
+$labels['backend'] = 'Server-Erweiterungen';
+$labels['messagesmanagement'] = 'Nachrichtenverwaltung';
+$labels['furtherconfig'] = 'Diese Erweiterung erfordert weitere Einstellungen. Möchen Sie die Einstellungen jetzt vornehmen?';
+$labels['uninstall'] = 'Möchten Sie alle gespeicherten Einstellungen löschen?';
+$labels['uninstallconfirm'] = 'Möchten Sie Ihre persönlichen Einstellungen dieser Erweiterung behalten oder entfernen? Wenn Sie die Einstellungen entfernen, dann müssen Sie die Erweiterung bei einer späteren Aktivierung erneut konfigurieren.';
+$labels['areyousure'] = 'Sie können diese Aktion nicht rückgängig machen. Sind Sie wirklich sicher?';
+$labels['successfullydeleted'] = 'Einstellungen wurden erfolgreich entfernt.';
+$labels['successfullysaved'] = 'Erfolgreich gespeichert.';
+$labels['errorsaving'] = 'Beim Speichern ist ein Fehler aufgetreten.';
+$labels['yes'] = 'Ja';
+$labels['no'] = 'Nein';
+$labels['disable'] = 'Behalten';
+$labels['remove'] = 'Entfernen';
+$labels['savewarning'] = 'Möchten Sie Ihre Änderungen jetzt speichern?';
+$labels['plugin_manager_update'] = 'Erweiterungen erneuern';
+$labels['authors_comments'] = 'Anmerkungen des Autors (nicht übersetzt)';
+$labels['requiredby'] = 'Erweiterung wird benötigt von';
+$labels['requires'] = 'Benötigte Erweiterung(en)';
+$labels['recommended'] = 'Empfohlene Erweiterung(en)';
+$labels['update_plugins'] = 'Updates herunterladen';
+$labels['ziparchive'] = 'Zip-Archiv herunterladen';
+$labels['demoaccount'] = 'Aktion ist nicht möglich (Demo-Konto)';
+$labels['serverversion'] = 'Server-Version';
+$labels['mirrorversion'] = 'Mirror-Version';
+$labels['mirrorhost'] = 'Mirror-Server';
+$labels['comments'] = 'Voraussetzungen und Amerkungen';
+$labels['update_error'] = 'Versionskonflikt';
+$labels['update_ok'] = 'Die Erweiterung ist aktuell. Es ist kein Update erforderlich.';
+$labels['update_edit'] = 'Die Erweiterung ist veraltet. Bitte berücksichtigen Sie die nebenstehenden Hinweise.';
+$labels['servernewer'] = 'Die registrierte Version der Erweiterung ist neuer als die des Mirror-Servers.';
+$labels['orhigher'] = 'oder höher';
+$labels['rc_ok'] = 'Roundcube Core ist aktuell.';
+$labels['update_update'] = 'Die Erweiterung ist veraltet. Bitte erneuern Sie die Erweiterung unter Berücksichtigung der nebenstehenden Hinweise.';
+$labels['noupdates'] = 'Es wurden keine Updates ausgewählt.';
+$labels['rc_update'] = 'Roundcube Core veraltet. Bitte erneuern Sie Roundcube Core!';
+$labels['rc_uptodate'] = 'Roundcube Core ist aktuell.';
+$labels['rc_newer'] = 'Roundcube Core ist neuer als die Mirror-Version!';
+$labels['nottested'] = 'Bitte benutzen Sie die Erweiterungen mit Vorsicht! Möglicherweise arbeiten die Erweiterungen mit Roundcube v%s nicht oder nicht korrekt.';
+$labels['justunzip'] = 'Entpacken Sie das Archiv über die bestehende Installation.';
+$labels['guide'] = 'Anleitung';
+$labels['thirdparty'] = 'Das ist keine MyRoundcube-Erweiterung.';
+$labels['thirdpartywarning'] = 'Das ist keine MyRoundcube-Erweiterung. Damit Sie die aktuellste Version erhalten und eventuelle Hinweise des Entwicklers beachten können, wird empfohlen, diese Erweiterung nicht von diesem Mirror, sondern von der Seite des Entwicklers herunterzuladen.';
+$labels['develsite'] = 'Herunterladen';
+$labels['notinstalled'] = 'nicht installiert';
+$labels['notregistered'] = 'nicht registriert';
+$labels['roundcubeurl'] = 'Roundcube herunterladen';
+$labels['languageupdate'] = 'Übersetzungen wurden überarbeitet.';
+$labels['localizationfilesonly'] = 'Download beinhaltet nur Sprachdateien';
+$labels['donotregister'] = 'Diese Erweiterung braucht nicht registriert zu werden. Sie wird automatisch geladen.';
+$labels['register'] = 'Registrieren Sie diese Erweiterung in der Plugin Manager Konfiguration oder in ./config/main.inc.php <small>[$config[\'plugins\'] = array("<i>foo</i>", "<i>bar</i>");]</small>.';
+$labels['customer_account'] = 'Kundenkonto';
+$labels['customer_id'] = 'Kundennummer';
+$labels['invalid_customer_id'] = 'Ungültige Kundennummer';
+$labels['invalid_credits'] = 'Eingabe ist ungültig';
+$labels['successfully_transferred'] = 'Guthaben wurde übertragen';
+$labels['merge'] = 'Guthaben zusammenfassen';
+$labels['credits'] = 'Guthaben';
+$labels['creditsupdated'] = 'Guthaben hat sich seit dem letzten Laden der Seite geändert';
+$labels['buynow'] = 'Guthaben aufladen';
+$labels['history'] = 'Kontoauszug';
+$labels['details'] = 'Details';
+$labels['receipt'] = 'Quittung';
+$labels['plugins'] = 'Erweiterungen';
+$labels['clickhere'] = 'Hier klicken';
+$labels['discardliabletopaycosts'] = 'Kostenpflichtige Downloads abwählen';
+$labels['unchecknotinstalledplugins'] = 'Nicht installierte Erweiterungen abwählen';
+$labels['sum'] = 'Summe';
+$labels['show'] = 'Anzeigen';
+$labels['hide'] = 'Verbergen';
+$labels['view'] = 'Ansehen';
+$labels['expired'] = 'verfallen';
+$labels['terms'] = 'Bedingungen';
+$labels['pricelist'] = 'Preisliste';
+$labels['forthisdownload'] = 'für diesen Download';
+$labels['remainingcredits'] = 'verbleibendes Guthaben';
+$labels['initialdownload'] = 'Erstmaliger Download';
+$labels['keyfeatureaddition'] = 'Neue Schlüsselfunktionalität';
+$labels['codeimprovements'] = 'Code-Verbesserungen';
+$labels['servicenotavailable'] = 'Der Service ist gerade nicht verfügbar. Versuchen Sie es bitte später nocheinmal.';
+$labels['myrcerror'] = 'MyRoundcube Services sind zur Zeit nicht verfügbar.';
+$labels['getnew'] = 'Neue Kundennummer anfordern';
+$labels['getnew_hint'] = 'Wir empfehlen, die Kundennummer regelmäßig zu erneuern. Wenn Sie verdächtige Aktivitäten in Ihrem Kundenkonto bemerken, dann erneuern Sie die Kundennummer bitte umgehend.';
+$labels['transfer'] = 'Guthaben übertragen';
+$labels['submenuprefix'] = '» ';
+$labels['printdetails'] = 'Drucken';
+$labels['noplugindescription'] = 'Es konnte keine Beschreibung der Erweiterung gefunden werden.';
+$labels['welcome_to_plugin_manager'] = 'Plugin Manager - Herzlich willkommen!';
+$labels['about_to_create_account'] = 'Plugin Manager wird nun ein priviligiertes Administrationskonto einrichten.';
+$labels['create_account_proceed'] = 'Dazu muss sichergestellt sein, dass Sie der Server-Administrator sind.';
+$labels['please_create'] = 'Bitte erstellen Sie im Wurzelverzeichnis Ihrer Roundcube-Installation die folgende Datei:';
+$labels['thank_you'] = 'Herzlichen Dank!';
+$labels['done'] = 'Erledigt';
+$labels['manage_admins'] = 'Administratoren';
+$labels['plugin_manager_admins'] = 'Plugin Manager Administratoren';
+$labels['allow_plugins_configuration'] = 'Berechtigung zur Konfiguration von Erweiterungen';
+$labels['share_credits'] = 'Zugriff auf MyRC$-Guthaben erlauben';
+$labels['add'] = 'Hinzufügen';
+$labels['accountnotexists'] = 'Diese Konto existiert nicht';
+$labels['sharedby'] = 'Zugriff auf Kundenkonto gewährt von';
+$labels['switch'] = 'Wechseln';
+$labels['ownaccount'] = 'zum eigenen Kundenkonto';
+$labels['shareinvitation'] = 'zum Kundenkonto von';
+$labels['enable_notifications'] = 'Update-Benachrichtigungen aktivieren';
+$labels['enable_notifications_note'] = 'Beachte: Plugin Manager kontaktiert MyRoundcube-Mirror-Servers zur Abfrage verfügbarer Updates einmal täglich.';
+$labels['notifications_cc'] = 'Benachrichtigungen zusätzlich senden (CC) an';
+$labels['notifications_cc_note'] = 'Beachte: Update-Benachrichtigungen werden an alle Plugin Manager Administratoren versendet. Bestimmen Sie in diesem Feld einen zusätzlichen Empfänger, z.B. user@gmail.com oder eine Mailingliste.';
+$labels['serverconfiguration'] = 'Server-Konfiguration';
+$labels['pluginsconfiguration'] = 'Plugin-Konfiguration';
+$labels['use_ssl'] = 'Verbindungen zu MyRoundcube-Server über SSL';
+$labels['use_hmail'] = 'hMailserver kompatible Erweiterungen nutzen';
+$labels['load_splitter'] = 'Statische Dateien durch alternative bedienen';
+$labels['show_myrc_messages'] = 'Benachrichtigungen von MyRoundcube anzeigen';
+$labels['maintenance_mode'] = 'Wartungsmodus';
+$labels['maintenance_mode_hint'] = 'Deaktiviert temporär alle Plugins. Wird benutzt, um Plugins für größere Neuerungen zu aktualisieren. Der Plugin Manager deaktiviert alle aktiven Plugins und erlaubt, trotzdem auf das Plugin Center zuzugreifen, um die aktuelleren Plugins von unseren Servern herunterzuladen.';
+$labels['running_in_maintenance_mode'] = 'Webmail läuft im Wartungsmodus.';
+$labels['serverwide'] = 'Serverebene';
+$labels['file_based_config'] = 'File-basierte Konfiguration aktivieren';
+$labels['advanced_admins'] = 'nur für fortgeschrittene Administratoren';
+$labels['compress_html'] = 'HTML-Ausgabe komprimieren';
+$labels['show_config'] = 'Gegenwärtige Konfiguration anzeigen';
+$labels['systemadmin'] = 'Systemadministrator';
+$labels['admin'] = 'Administrator';
+$labels['configuredby'] = 'konfiguriert durch';
+$labels['enabled'] = 'aktiviert<br />(standardmäßig)';
+$labels['protected'] = 'geschützt';
+$labels['skins'] = 'Benutzeroberflächen';
+$labels['loads_always'] = 'verpflichtend laden';
+$labels['loads_never'] = 'Erweiterung ist deaktiviert';
+$labels['loads_by_user'] = 'der Benutzer entscheidet';
+$labels['loads_linked'] = 'Verknüpft mit';
+$labels['unbind'] = 'Verknüpfung aufheben';
+$labels['bind'] = 'Verknüpfung herstellen';
+$labels['addplugin'] = 'Erweiterung hinzufügen';
+$labels['removeplugin'] = 'Erweiterung entfernen';
+$labels['errorplugin'] = 'Error: Erforderliche Erweiterung fehlt';
+$labels['errorrcversion'] = 'Error: Erweiterung erfordert Roundcube';
+$labels['errorphpversion'] = 'Error: Erweiterung erfordert PHP';
+$labels['errorphpcurl'] = 'Error: cURL ist nicht installiert';
+$labels['errorphpfinfo'] = 'Error: finfo ist nicht installiert';
+$labels['errordb'] = 'Datenbankanpassungen sind erforderlich.<br />Bitte aktivieren Sie die Erweiterung, um die Anpassungen zu starten.';
+$labels['errordb8'] = 'Datenbankanpassungen sind erforderlich.';
+$labels['syntaxerror'] = 'PHP-Syntaxerror';
+$labels['notconfigured'] = 'Erweiterung ist nicht konfiguriert';
+$labels['editconfig'] = 'Konfiguration bearbeiten';
+$labels['instructions'] = 'Anleitung';
+$labels['dbautomatically'] = 'Anpassungen starten.';
+$labels['dbmanually'] = 'Bitte folgen Sie diesen Anweisungen.';
+$labels['ornewer'] = 'oder neuer';
+$labels['official_releases'] = 'nur offizielle Roundcubeversionen werden unterstützt';
+$labels['localizationmissing'] = 'Keine Übersetzung für Namen und Beschreibung der Erweiterung vorhanden';
+$labels['documentation'] = 'Dokumentation';
+$labels['select_plugin'] = 'Erweiterung auswählen';
+$labels['legend'] = 'Legende';
+$labels['plugindisabledbydefault'] = 'Erweiterung ist standardmäßig deaktiviert - der Benutzer kann die Erweiterung aktivieren';
+$labels['pluginenabledbydefault'] = 'Erweiterung ist standardmäßig aktiviert - der Benutzer kann die Erweiterung deaktivieren';
+$labels['pluginmandatory'] = 'Verpflichtend laden - Erweiterung ist aktiviert; der Benutzer kann die Einstellung nicht ändern';
+$labels['show_about_link'] = '"Ãœber"-Link anzeigen';
+$labels['show_support_link'] = '"Support"-Link anzeigen';
+$labels['use_myroundcube_watermark'] = '"MyRoundcube"-Wasserzeichen benutzen';
+$labels['remove_watermark'] = 'Wasserzeichen nicht anzeigen';
+$labels['database'] = 'Datenbank';
+$labels['account_details_compressed'] = 'Buchungen wurden komprimiert';
+$labels['credits_transferred'] = 'Credits wurden übertragen';
+$labels['customer_id_changed'] = 'Kundennummer wurde geändert';
+$labels['myrcd_bought'] = 'Es wurden MyRC$ gekauft - Danke!';
+$labels['myrcd_refunded'] = 'Es wurden MyRC$ erstattet';
+$labels['PHPMyAdmin'] = 'PHPMyAdmin';
+$labels['ipmismatch'] = 'Download von IP %s nicht möglich (Client-IP stimmt nicht überein).<br />Benutzen Sie % oder navigieren Sie zu %s von IP %s aus.';
+$labels['emoticons_pluginname'] = 'Emotion-Shortcuts';
+$labels['emoticons_plugindescription'] = 'Emotion-Shortcuts mit Smiley-Grafiken ersetzen';
+$labels['markbuttons_pluginname'] = 'Nachrichten markieren';
+$labels['markbuttons_plugindescription'] = 'Ein Menue zum gleichzeitigen markieren mehrer Nachrichten hinzufügen.';
+$labels['keyboard_shortcuts_pluginname'] = 'Tastatureingaben';
+$labels['keyboard_shortcuts_plugindescription'] = 'Die Webmail-Oberfläche über Tastaturbefehle steuern.';
+$labels['message_highlight_pluginname'] = 'Nachrichten hervorheben';
+$labels['message_highlight_plugindescription'] = 'Nachrichten in der Nachrichtenliste nach bestimmten Filterkriterien hervorheben.';
+$labels['google_contacts_pluginname'] = 'Google-Adressen';
+$labels['google_contacts_plugindescription'] = 'Machen Sie Ihre Google-Kontakte verfügbar.';
+$labels['contextmenu_pluginname'] = 'Rechter Mausklick';
+$labels['contextmenu_plugindescription'] = 'Erledigen Sie viele Sachen einfach mit einem rechten Mausklick.';
+$labels['newmail_notifier_pluginname'] = 'Benachrichtigung bei neuen Nachrichten';
+$labels['newmail_notifier_plugindescription'] = 'Benachrichtigung bei neuen Nachrichten anzeigen.';
+$labels['listcommands_pluginname'] = 'Beantwortung von Mailing-Lists';
+$labels['listcommands_plugindescription'] = 'Verschiedene Optionen zur Beantwortung von Nachrichten, die an eine Mailing-List versandt werden.';
+$labels['copymessage_pluginname'] = 'Nachrichten kopieren';
+$labels['copymessage_plugindescription'] = 'Eine oder mehrer Nachrichten in einen anderen IMAP-Ordner kopieren.';
+$labels['vcard_attachments_pluginname'] = 'vCard-Anhänge';
+$labels['vcard_attachments_plugindescription'] = 'vCard-Anhänge direkt in das Adressbuch importieren.';
+$labels['zipdownload_pluginname'] = 'Nachrichten exportieren';
+$labels['zipdownload_plugindescription'] = 'Nachrichten als zip-Datei exportieren.';
+$labels['markasjunk2_pluginname'] = 'Nachrichten als Spam kennzeichnen';
+$labels['markasjunk2_plugindescription'] = 'Nachrichten als Spam kennzeichnen oder die Spamkennzeichnung von legitimen Nachrichten entfernen.';
+$labels['markasjunk_pluginname'] = 'Nachrichten als Spam kennzeichnen';
+$labels['markasjunk_plugindescription'] = 'Nachrichten als Spam kennzeichnen oder die Spamkennzeichnung von legitimen Nachrichten entfernen.';
+$labels['google_analytics_pluginname'] = 'Google Analytics';
+$labels['google_analytics_plugindescription'] = 'Google Analytics erlauben.';
+$labels['globaladdressbook_pluginname'] = 'Globales Adressbuch';
+$labels['globaladdressbook_plugindescription'] = 'Dieses Adressbuch enthält Adressen, die von Ihrem Administrator zur Verfügung gestellt werden.';
+$labels['blockspamsending_pluginname'] = 'Spamversand vermeiden';
+$labels['blockspamsending_plugindescription'] = 'Limitieren Sie den Versand von Nachrichrichten gleichen Inhalts während einer Sitzung.';
+$labels['global_config_pluginname'] = 'Konfigurations-Manager';
+$labels['global_config_plugindescription'] = 'Optimieren Sie die Performance Ihres Servers durch Zusammenfassung der einzelnen Erweiterungskonfigurationen in einer zentralen Konfiguration.';
+$labels['jqueryui_pluginname'] = 'Jqueryui';
+$labels['jqueryui_plugindescription'] = 'Jqueryui Javascript-Bibliothek';
+$labels['hide_blockquote_pluginname'] = 'Zitate abkürzen';
+$labels['hide_blockquote_plugindescription'] = 'Verbergen Sie längere Zitate.';
+$labels['crawler_pluginname'] = 'Crawler';
+$labels['crawler_plugindescription'] = 'Für Crawler einen alternativen Seiteninhalt ausgeben.';
+$labels['archive_pluginname'] = 'Archiv';
+$labels['archive_plugindescription'] = 'Archiviere Nachricht in Archiv Ordner';
+$labels['autologon_pluginname'] = 'Automatische Anmeldung';
+$labels['autologon_plugindescription'] = 'Automatisch einloggen';
+$labels['openpgpjs_pluginname'] = 'OpenPGPjs';
+$labels['openpgpjs_plugindescription'] = 'Des PGP in Roundcube';
+$labels['dblog_pluginname'] = 'Logging';
+$labels['dblog_plugindescription'] = 'Logs in die Datenbank anstatt einer Datei schreiben.';
+$labels['gibberish_pluginname'] = 'Gibberish Encryption';
+$labels['gibberish_plugindescription'] = 'Hilfserweiterung zur Implentierung von Gibberish-AES-Verschlüsselung.';
+$labels['http_request_pluginname'] = 'HTTP Request';
+$labels['http_request_plugindescription'] = 'Hilfserweiterung zur Implementierung von HTTP-Requests via cURL oder fsockopen.';
+$labels['http_auth_pluginname'] = 'HTTP Authentifizierung';
+$labels['http_auth_plugindescription'] = 'HTTP Authentifizierung (Hilfserweiterung)';
+$labels['http_authentication_pluginname'] = 'HTTP-Authentifizierung (Standard)';
+$labels['http_authentication_plugindescription'] = 'Falls eine HTTP-Authentifizierung besteht, dann automatisch mit den entsprechenden Zugangsdaten einloggen.';
+$labels['jscolor_pluginname'] = 'Color Picker';
+$labels['jscolor_plugindescription'] = 'Farben mittels eines Color Pickers eingeben (Hilfserweiterung).';
+$labels['tinymce_pluginname'] = 'TinyMCE - HTML Editor';
+$labels['tinymce_plugindescription'] = 'Diese Erweiterung implementiert TinyMCE PHP Compressor (http://www.tinymce.com/wiki.php/Compressors:PHP). Zusätzlich schafft diese Erweiterung die Möglichkeit, TinyMCE ohne Änderung des Roundcube-Quellcodes zu konfigurieren.';
+$labels['lang_sel_pluginname'] = 'Sprachauswahl';
+$labels['lang_sel_plugindescription'] = 'Sprache beim Login auswählen.';
+$labels['newuser_pluginname'] = 'Neuer Benutzer';
+$labels['newuser_plugindescription'] = 'Informen Sie den Administrator wenn sich ein neuer Benutzer registriert und senden Sie eine Willkommens-Nachricht an den neuen Benutzer.';
+$labels['placeholder_pluginname'] = 'Placeholder Attribute';
+$labels['placeholder_plugindescription'] = 'Placeholder Attribute zu HTML-Input-Elementen (text/password) hinzufügen.';
+$labels['qtip_pluginname'] = 'jQueryUI Tool Tips';
+$labels['qtip_plugindescription'] = 'jQueryUI tool tips (Hilfserweiterung).';
+$labels['sabredav_pluginname'] = 'SabreDAV';
+$labels['sabredav_plugindescription'] = 'Diese Erweiterung erstellt Konten auf SabreDAV-Servern und synchronisiert Passwörter.';
+$labels['savepassword_pluginname'] = 'Passwörter speichern';
+$labels['savepassword_plugindescription'] = 'Diese Erweiterung wird von anderen Erweiterungen benötigt, die auf das IMAP-Passwort zurückgreifen müssen (Hilfserweiterung).';
+$labels['database_attachments_pluginname'] = 'Database Attachments';
+$labels['database_attachments_plugindescription'] = 'Dateianhänge über die Datenbank anstatt über das File-System verarbeiten (Hilfserweiterung).';
+$labels['help_pluginname'] = 'Hilfe';
+$labels['help_plugindescription'] = 'Webmailhilfe';
+$labels['new_user_dialog_pluginname'] = 'Eingabe der Identität erzwingen';
+$labels['new_user_dialog_plugindescription'] = 'Fordern Sie neue Benutzer mittels eines Dialogs zur Eingabe der Identitätseinstellungen auf.';
+$labels['rcguard_pluginname'] = 'ReCAPTCHA';
+$labels['rcguard_plugindescription'] = 'Mittels ReCAPTCHA ungültige Login-Versuche limitieren.';
+$labels['domain_check_pluginname'] = 'Domain überprüfen';
+$labels['domain_check_plugindescription'] = 'Zugang zum Webmail nur für bestimmte Domains erlauben.';
+$labels['tasklist_pluginname'] = 'Aufgaben';
+$labels['tasklist_plugindescription'] = 'Erstelle Aufgaben und Unteraufgaben mit Erinnerungen.';
+$labels['virtuser_query_pluginname'] = 'Virtuelle Benutzer (datenbankbasiert)';
+$labels['virtuser_query_plugindescription'] = 'Datenbankbasierte User-to-Email und Email-to-User Auflösung';
+$labels['virtuser_file_pluginname'] = 'Virtuelle Benutzer (filebasiert)';
+$labels['virtuser_file_plugindescription'] = 'Filebasierte User-to-Email und Email-to-User Auflösung';
+$labels['userinfo_pluginname'] = 'Benutzerinformation';
+$labels['userinfo_plugindescription'] = 'Zeigen diverse Informationen über den aktuellen Benutzer an.';
+$labels['subscriptions_option_pluginname'] = 'IMAP Einträge';
+$labels['subscriptions_option_plugindescription'] = 'Verwalte IMAP Einträge';
+$labels['filters_pluginname'] = 'Filter';
+$labels['filters_plugindescription'] = 'Webmailseitige Filter verwalten.';
+$labels['forgot_password_pluginname'] = 'Passwort vergessen';
+$labels['forgot_password_plugindescription'] = 'Passwort Anfragen zurücksetzen.';
+$labels['sieverules_pluginname'] = 'Sieve-Filter';
+$labels['sieverules_plugindescription'] = 'Sieve_Filter verwalten.';
+$labels['managesieve_pluginname'] = 'Sieve-Filter';
+$labels['managesieve_plugindescription'] = 'Sieve-Filter verwalten.';
+$labels['acl_pluginname'] = 'Access-Control-Listen (ACL)';
+$labels['acl_plugindescription'] = 'Access-Control-Listen (ACL) verwalten.';
+$labels['vacation_pluginname'] = 'Abwesenheitsnachricht';
+$labels['vacation_plugindescription'] = 'Abwesenheitsnachricht einstellen.';
+$labels['password_pluginname'] = 'Passwort ändern';
+$labels['password_plugindescription'] = 'Benutzer erlauben Passwort zu ändern.';
+$labels['redundant_attachments_pluginname'] = 'Redundante Anhänge';
+$labels['redundant_attachments_plugindescription'] = 'Das Plugin Redundante Anhänge speicher temporär hochgeladene Anhänge doppelt. Sie werden je in der Datenbank und im lokalen Dateisystem abgelegt.';
+$labels['example_addressbook_pluginname'] = 'Beispiel Adressbuch';
+$labels['example_addressbook_plugindescription'] = 'Beispiel Code um ein zusätzliches Adressbuch einzufügen.';
+$labels['debug_logger_pluginname'] = 'Debug Logger';
+$labels['debug_logger_plugindescription'] = 'Debug Logger aktiviert erweitertes Logging für Debug Zwecke.';
+$labels['show_additional_headers_pluginname'] = 'Zeige zusätzliche Nachrichten Headers';
+$labels['show_additional_headers_plugindescription'] = 'Proof-of-Concept Erweiterung welche zusätzliche Headers in der Nachrichtenansicht anzeigt.';
+$labels['additional_message_headers_pluginname'] = 'Zusätzliche Headers';
+$labels['additional_message_headers_plugindescription'] = 'Sehr einfache Erweiterung welche zusätzliche Headers zu ausgehenden Nachrichten hinzufügt oder entfernt.';
+$labels['new_user_identity_pluginname'] = 'Neue Benutzeridentität';
+$labels['new_user_identity_plugindescription'] = 'Neue Nutzeridentität synchronisiert die Standardidentität eines neuen Nutzers bei der Erstanmeldung mit einem LDAP-Verzeichnis.';
+$labels['squirrelmail_usercopy_pluginname'] = 'Ãœbertrage Squirrelmail Nutzer';
+$labels['squirrelmail_usercopy_plugindescription'] = 'Ãœbernehme Einstellungen einer alten Squirrelmail Installation.';
+$labels['yubikey_authentication_pluginname'] = 'Yubico\'s Yubikey Authentifizierung';
+$labels['yubikey_authentication_plugindescription'] = 'Erweiterung zur Implementierung von Yubico\'s Yubikey Authentifizierung.';
+$labels['sauserprefs_pluginname'] = 'Spamassassin\'s Benutzereinstellungen';
+$labels['sauserprefs_plugindescription'] = 'Fügt einen \'Spam\' Tab zu den \'Persönlichen Einstellungen\' hinzu und erlaubt dem Benutzer, seine SpamAssassin-Einstellungen zu verändern.';
+$labels['dkimstatus_pluginname'] = 'DKIM-Status';
+$labels['dkimstatus_plugindescription'] = 'DKIMSTATUTS zeigt den Status der Überprüfung der DKIM-Signature beim Lesen einer Nachricht an.';
+$labels['roundcube_openpgp_pluginname'] = 'Roundcube OpenPGP';
+$labels['roundcube_openpgp_plugindescription'] = 'Mit dieser Erweiterung können Sie OpenPGP in Roundcube verwenden. Es hilft Ihnen Schlüssel zu erzeugen, zu verwalten und bei der Emailabwicklung zu verwenden.';
+$labels['automatic_addressbook_pluginname'] = 'Automatisches Adressbuch';
+$labels['automatic_addressbook_plugindescription'] = 'Erzeugt ein Adressbuch und fügt automatisch die gesammelten Mailadressen dort ein. So muss nicht jeder Kontakt manuell hinzugefügt werden.';
+$labels['calendar_pluginname'] = 'Kalender';
+$labels['calendar_plugindescription'] = 'Verwalten Sie ihre Termine mit einem Webmail-Kalender';
+$labels['attachment_reminder_pluginname'] = 'Attachment Reminder';
+$labels['attachment_reminder_plugindescription'] = 'Benutzer erinnern, Anhänge anzuheften.';
+
+?> \ No newline at end of file
diff --git a/plugin_manager/localization/el_GR.inc b/plugin_manager/localization/el_GR.inc
new file mode 100644
index 0000000..807c630
--- /dev/null
+++ b/plugin_manager/localization/el_GR.inc
@@ -0,0 +1,74 @@
+<?php
+
+/*
++-----------------------------------------------------------------------+
+| language/el_GR/labels.inc |
+| |
+| Language file of the RoundCube Webmail client |
+| Copyright (C) 2008-2012, RoundQube Dev. - Switzerland |
+| |
++-----------------------------------------------------------------------+
+| Author: |
++-----------------------------------------------------------------------+
+
+*/
+
+$labels = array();
+$labels['pluginname'] = 'ΔιαχειÏιστής ΠÏοσθέτων';
+$labels['plugin_manager_title'] = 'ΔιαχείÏιση ΠÏοσθέτων';
+$labels['downloadnow'] = 'ΜεταφόÏτωση Ï„ÏŽÏα';
+$labels['misc'] = 'ΔιάφοÏα';
+$labels['downloads'] = 'μεταφοÏτώσεις';
+$labels['showall'] = 'ΠÏοβολή όλων των ΠÏοσθέτων';
+$labels['hideuptodate'] = 'ΠÏοβολή μόνο αναβαθμίσεων';
+$labels['trylater'] = 'ΠαÏακαλώ Ï€Ïοσπαθήστε αÏγότεÏα...';
+$labels['translate'] = 'ΜεταφÏάστε αυτό το ΠÏόσθετο';
+$labels['restoredefaults'] = 'ΕπαναφοÏά ΠÏοεπιλογών';
+$labels['checkall'] = 'Επιλογή Όλων';
+$labels['uncheckall'] = 'Αποεπιλογή Όλων';
+$labels['status'] = 'Κατάσταση';
+$labels['backend'] = 'ΠÏόσθετα Διακομιστή';
+$labels['messagesmanagement'] = 'ΔιαχείÏιση Μηνυμάτων';
+$labels['furtherconfig'] = 'Θέλετε να Ïυθμίσετε αυτό το Ï€Ïόσθετο Ï„ÏŽÏα?';
+$labels['uninstall'] = 'ΠÏόκειται να απενεÏγοποιήσετε αυτό το Ï€Ïόσθετο. Θέλετε να αφαιÏέσετε όλες τις αποθηκευμένες Ïυθμίσεις μόνιμα;';
+$labels['successfullydeleted'] = 'Οι Ïυθμίσεις αφαιÏέθηκαν επιτυχώς.';
+$labels['successfullysaved'] = 'ΑποθηκεÏτηκε επιτυχώς.';
+$labels['errorsaving'] = 'ΠÏοέκυψε σφάλμα κατά την αποθήκευση.';
+$labels['yes'] = 'Îαι';
+$labels['no'] = 'Όχι';
+$labels['disable'] = 'ΑπενεÏγοποίηση';
+$labels['remove'] = 'ΑφαίÏεση';
+$labels['plugin_manager_update'] = 'Αναβάθμιση ΠÏοσθέτων';
+$labels['recommended'] = 'ΠÏοτεινόμενα ΠÏόσθετα';
+$labels['serverversion'] = 'Έκδοση Διακομιστή';
+$labels['orhigher'] = 'ή μεγαλÏτεÏο';
+$labels['noupdates'] = 'Δεν επιλέχθηκαν ΕνημεÏώσεις.';
+$labels['guide'] = 'Διαβάστε πεÏισσότεÏα...';
+$labels['thirdparty'] = 'Αυτό δεν είναι Ï€Ïόσθετο του MyRoundcube.';
+$labels['develsite'] = 'ΜεταφόÏτωση';
+$labels['notinstalled'] = 'μη εγκατεστημένο';
+$labels['roundcubeurl'] = 'ΜεταφόÏτωση Roundcube';
+$labels['customer_account'] = 'ΛογαÏιασμός Πελάτη';
+$labels['history'] = 'ΙστοÏικό ΛογαÏιασμοÏ';
+$labels['details'] = 'ΛεπτομέÏειες';
+$labels['receipt'] = 'Απόδειξη';
+$labels['plugins'] = 'ΠÏόσθετα';
+$labels['sum'] = 'ΣÏνολο';
+$labels['show'] = 'ΠÏοβολή';
+$labels['hide'] = 'ΑπόκÏυψη';
+$labels['view'] = 'Ï€Ïοβολή';
+$labels['terms'] = 'ÎŒÏοι';
+$labels['codeimprovements'] = 'Βελτιώσεις κώδικα';
+$labels['google_contacts_pluginname'] = 'Επαφές Google';
+$labels['newmail_notifier_plugindescription'] = 'Ειδοποίηση σε νέα μηνÏματα.';
+$labels['importmessages_pluginname'] = 'Εισαγωγή Μηνυμάτων';
+$labels['importmessages_plugindescription'] = 'Εισαγωγή μηνυματων από αÏχείο zip ή πηγή eml.';
+$labels['zipdownload_pluginname'] = 'Εξαγωγή Μηνυμάτων';
+$labels['markasjunk2_pluginname'] = 'Σημείωση Μηνυμάτων ως ΑνεπιθÏμητα';
+$labels['google_ads_pluginname'] = 'Διαφημίσεις Google';
+$labels['google_analytics_pluginname'] = 'Google Analytics';
+$labels['lang_sel_pluginname'] = 'Επιλογή Γλώσσας';
+$labels['lang_sel_plugindescription'] = 'Επιλογή γλώσσας στη σελίδα εισόδου.';
+$labels['newuser_pluginname'] = 'Îέος ΧÏήστης';
+
+?> \ No newline at end of file
diff --git a/plugin_manager/localization/en_GB.inc b/plugin_manager/localization/en_GB.inc
new file mode 100644
index 0000000..b841d10
--- /dev/null
+++ b/plugin_manager/localization/en_GB.inc
@@ -0,0 +1,139 @@
+<?php
+
+/*
++-----------------------------------------------------------------------+
+| ./plugins/plugin_manager/localization/en_GB.inc
+|
+| Language file of MyRoundcube Plugins Bundle
+| Copyright (C) 2010-2012, Roland 'rosali' Liebl
+| Licensed under the GNU GPL
+|
++-----------------------------------------------------------------------+
+| Author: myroundcube@mail4us.net - 03/20/2012 09:34:44
++-----------------------------------------------------------------------+
+
+*/
+
+$labels = array();
+$labels['pluginname'] = 'Plugin Manager';
+$labels['plugindescription'] = 'Plugin Manager gives users the option to enable or disable plugins (at the user account level), while it helps admins to stay current with plugin updates, bug fixes, centralized downloads, documentation and recommendations. Plugin Manager does not modify your file system, nor it will install plugins automatically.';
+$labels['plugin_manager_title'] = 'Manage Plugins';
+$labels['plugin_manager_center'] = 'Plugin Manager Centre';
+$labels['updatepm'] = 'Plugin Manager update available.';
+$labels['updatepmrequired'] = 'Plugin Manager update required.';
+$labels['downloadnow'] = 'Download now';
+$labels['homepage'] = 'Home page';
+$labels['calendaring'] = 'Calendaring';
+$labels['misc'] = 'Miscellaneous';
+$labels['downloads'] = 'downloads';
+$labels['issue'] = 'Issue';
+$labels['submitissue'] = 'Report an issue.<br /><br />Please check your logs and provide relevant information in the ticket.<br /><br /><b>NOTE</b>: a Google Account is required.';
+$labels['showall'] = 'Show All Plugins';
+$labels['hideuptodate'] = 'Show Updates Only';
+$labels['connectionerror'] = 'The remote server did not respond to a connection attempt.';
+$labels['trylater'] = 'Please try later...';
+$labels['translate'] = 'Translate this plugin';
+$labels['translationaccount'] = 'Realtime translation account (username)';
+$labels['translationserver'] = 'Realtime translation account (IMAP server)';
+$labels['whatsthis'] = 'What\'s this?';
+$labels['restoredefaults'] = 'Restore Defaults';
+$labels['checkall'] = 'Check All';
+$labels['uncheckall'] = 'Uncheck All';
+$labels['toggle'] = 'Toggle Selection';
+$labels['status'] = 'Status';
+$labels['globalplugins'] = 'Global Plugins';
+$labels['performance'] = 'Performance';
+$labels['backend'] = 'Server Plugins';
+$labels['messagesmanagement'] = 'Message Management';
+$labels['furtherconfig'] = 'Do you want to configure this plugin now?';
+$labels['uninstall'] = 'You are about to disable this plugin. Do you want to remove all saved settings permanently?';
+$labels['uninstallconfirm'] = 'You are about to disable this plugin. WARNING: Select »DISABLE« to disable this plugin while keeping your current data and configuration stored in our server. Select »REMOVE« if you want all data and configuration managed by this plugin to be removed permanently from our databases. NOTE: this action cannot be undone.';
+$labels['areyousure'] = 'You can\'t undo this action. Are you really sure?';
+$labels['successfullydeleted'] = 'Settings have been removed successfully.';
+$labels['successfullysaved'] = 'Successfully saved.';
+$labels['errorsaving'] = 'An error occured while saving.';
+$labels['yes'] = 'Yes';
+$labels['no'] = 'No';
+$labels['disable'] = 'Disable';
+$labels['remove'] = 'Remove';
+$labels['savewarning'] = 'Do you want to save your changes now?';
+$labels['plugin_manager_update'] = 'Update Plugins';
+$labels['authors_comments'] = 'Author\'s Comments (not translated)';
+$labels['requiredby'] = 'Plugin is required by';
+$labels['requires'] = 'Plugin requires';
+$labels['recommended'] = 'Recommended Plugins';
+$labels['update_plugins'] = 'Plugin Downloads';
+$labels['ziparchive'] = 'Download Zip Archive';
+$labels['demoaccount'] = 'Sorry, action is disabled (Demo Account)';
+$labels['serverversion'] = 'Server Version';
+$labels['mirrorversion'] = 'Mirror Version';
+$labels['mirrorhost'] = 'Mirror Server';
+$labels['comments'] = 'Requirements and Update Notes';
+$labels['update_error'] = 'Version mismatch';
+$labels['update_ok'] = 'Most recent has been detected. No update is necessary.';
+$labels['update_edit'] = 'Plugin must be re-configured or requires database adjustments. Please consider Update Notes.';
+$labels['servernewer'] = 'Registered plugin is newer than mirror version.';
+$labels['orhigher'] = 'or higher';
+$labels['rc_ok'] = 'Roundcube Core is up to date.';
+$labels['update_update'] = 'Plugin is outdated, please update! Consider update notes.';
+$labels['noupdates'] = 'No updates selected.';
+$labels['rc_update'] = 'Roundcube core is outdated, please update!';
+$labels['rc_uptodate'] = 'Roundcube core is up to date.';
+$labels['rc_newer'] = 'Roundcube core is newer than mirror version!';
+$labels['nottested'] = 'Please use plugins with care! We don\'t know if hosted plugins work with Roundcube v%s.';
+$labels['justunzip'] = 'Just unzip the archive over your existing installation.';
+$labels['guide'] = 'Read more...';
+$labels['thirdparty'] = 'This is not a MyRoundcube plugin.';
+$labels['thirdpartywarning'] = 'This is a third party plugin. We recommend not to download the plugin from this mirror server and instead download it from the developer\'s site, to ensure you get the latest version as well as notes and advice from its developer.';
+$labels['develsite'] = 'Download';
+$labels['notinstalled'] = 'not installed';
+$labels['notregistered'] = 'not registered';
+$labels['roundcubeurl'] = 'Download Roundcube';
+$labels['languageupdate'] = 'Localization update is available.';
+$labels['localizationfilesonly'] = 'Note: Download contains only localisation files';
+$labels['donotregister'] = 'Don\'t register this plugin. It is loaded automatically.';
+$labels['register'] = 'Register this plugin in Plugin Manager\'s configuration or in ./config/config.inc.php <small>[$config[\'plugins\'] = array("<i>foo</i>", "<i>bar</i>");]</small>.';
+$labels['customer_account'] = 'Customer Account';
+$labels['customer_id'] = 'Customer ID';
+$labels['invalid_customer_id'] = 'Invalid Customer ID';
+$labels['invalid_credits'] = 'Invalid credits';
+$labels['successfully_transferred'] = 'Credits successfully transferred';
+$labels['noplugindescription'] = 'No plugin description detected.';
+$labels['markbuttons_pluginname'] = 'Mark Message Buttons';
+$labels['markbuttons_plugindescription'] = 'Add control icons under message list separator to quickly mark messages.';
+$labels['keyboard_shortcuts_pluginname'] = 'Keyboard Shortcuts';
+$labels['keyboard_shortcuts_plugindescription'] = 'Enter commands using keyboard shortcuts.';
+$labels['message_highlight_pluginname'] = 'Highlight Messages';
+$labels['message_highlight_plugindescription'] = 'Highlight messages which matches your filter options.';
+$labels['google_contacts_pluginname'] = 'Google Contacts';
+$labels['google_contacts_plugindescription'] = 'Access your Google Contacts.';
+$labels['contextmenu_pluginname'] = 'Context Menu';
+$labels['contextmenu_plugindescription'] = 'Enable right click context menu functionality.';
+$labels['newmail_notifier_pluginname'] = 'New Mail Notifier';
+$labels['newmail_notifier_plugindescription'] = 'Notify on new messages.';
+$labels['listcommands_pluginname'] = 'Reply Mailing Lists';
+$labels['listcommands_plugindescription'] = 'Various options to reply to messages sent from mailing lists.';
+$labels['copymessage_pluginname'] = 'Copy Message(s)';
+$labels['copymessage_plugindescription'] = 'Copy message(s) into another IMAP folder.';
+$labels['vcard_attachments_pluginname'] = 'vCard Attachments';
+$labels['vcard_attachments_plugindescription'] = 'Add a box to messages which have a vcard attachment to import the contact directly into the addre...';
+$labels['zipdownload_pluginname'] = 'Export Messages';
+$labels['zipdownload_plugindescription'] = 'Export messages as a zip file.';
+$labels['markasjunk2_pluginname'] = 'Mark Messages as Spam';
+$labels['markasjunk2_plugindescription'] = 'Mark Messages as spam or not spam.';
+$labels['markasjunk_pluginname'] = 'Mark Messages as Spam';
+$labels['markasjunk_plugindescription'] = 'Mark Messages as spam or not spam.';
+$labels['google_analytics_pluginname'] = 'Google Analytics';
+$labels['google_analytics_plugindescription'] = 'Include Google Analytics.';
+$labels['globaladdressbook_pluginname'] = 'Global Addressbook';
+$labels['globaladdressbook_plugindescription'] = 'This is a readonly addressbook provided by your administrator.';
+$labels['blockspamsending_pluginname'] = 'Prevent Sending Spam';
+$labels['blockspamsending_plugindescription'] = 'Allow sending out only a specific amount of messages with same body during one session.';
+$labels['global_config_pluginname'] = 'Configuration Manager';
+$labels['global_config_plugindescription'] = 'This is a configuration manager plugin. It optimizes your server by centralizing plugin configura...';
+$labels['jqueryui_pluginname'] = 'Jqueryui';
+$labels['jqueryui_plugindescription'] = 'Jqueryui javascript library';
+$labels['automatic_addressbook_pluginname'] = 'Automatic Addressbook';
+$labels['automatic_addressbook_plugindescription'] = 'Creates an addressbook and automatically inserts the collected email addresses there. This eliminates the need to manually add each contact.';
+
+?> \ No newline at end of file
diff --git a/plugin_manager/localization/en_US.inc b/plugin_manager/localization/en_US.inc
new file mode 100644
index 0000000..288e5d9
--- /dev/null
+++ b/plugin_manager/localization/en_US.inc
@@ -0,0 +1,346 @@
+<?php
+/*
+ +-----------------------------------------------------------------------+
+ | ./plugins/plugin_manager/localization/en_US.inc
+ |
+ | Language file of MyRoundcube Plugins Bundle
+ | Copyright (C) 2010-2015, Roland 'rosali' Liebl
+ |
+ +-----------------------------------------------------------------------+
+ | Author: Yoni - 01/16/2015 03:54:10
+ +-----------------------------------------------------------------------+
+*/
+
+$labels = array();
+$labels['pluginname'] = 'Plugin Manager';
+$labels['plugindescription'] = 'Plugin Manager gives users the options to enable and/or disable plugins (at the user account level) while it helps admins to stay current with updates, up-to-date plugins, bug fixes, centralized downloads, documentation and recommendations. Plugin Manager does not modify your file system nor it will install plugins automatically.';
+$labels['plugin_manager_title'] = 'Manage Plugins';
+$labels['plugin_manager_center'] = 'Plugin Manager Center';
+$labels['updatepm'] = 'Plugin Manager update available.';
+$labels['updatepmrequired'] = 'Plugin Manager update required.';
+$labels['downloadnow'] = 'Download now';
+$labels['homepage'] = 'Homepage';
+$labels['calendaring'] = 'Calendaring';
+$labels['misc'] = 'Miscellaneous';
+$labels['downloads'] = 'downloads';
+$labels['issue'] = 'Issue';
+$labels['submitissue'] = 'Report issue.<br /><br />Please check errors logs and provide relevant information in the ticket.<br /><br /><b>NOTE</b>: Google Account is required.';
+$labels['showall'] = 'Show all Plugins';
+$labels['hideuptodate'] = 'Show Updates only';
+$labels['connectionerror'] = 'The remote server did not respond to a connection attempt.';
+$labels['trylater'] = 'Please try later...';
+$labels['translate'] = 'Translate this plugin';
+$labels['translationaccount'] = 'Realtime translation account (username)';
+$labels['translationserver'] = 'Realtime translation account (IMAP server)';
+$labels['whatsthis'] = 'What\'s this?';
+$labels['restoredefaults'] = 'Restore defaults';
+$labels['checkall'] = 'Check all';
+$labels['uncheckall'] = 'Uncheck all';
+$labels['toggle'] = 'Toggle Selection';
+$labels['status'] = 'Status';
+$labels['globalplugins'] = 'Global Plugins';
+$labels['performance'] = 'Performance';
+$labels['backend'] = 'Server Plugins';
+$labels['messagesmanagement'] = 'Messages Management';
+$labels['furtherconfig'] = 'Would you like to configure this plugin now?';
+$labels['uninstall'] = 'You are about to disable this plugin. Do you want to remove all saved settings permanently?';
+$labels['uninstallconfirm'] = 'You are about to disable this plugin. WARNING: Select »DISABLE« to disable this plugin while keeping your current data and configuration stored in our server if you plan to use it again later. Select »REMOVE« if you want all data and configuration managed by this plugin to be removed permanently from our databases. Note this action cannot be undone.';
+$labels['areyousure'] = 'You can\'t undo this action. Are you really sure?';
+$labels['successfullydeleted'] = 'Settings have been removed successfully.';
+$labels['successfullysaved'] = 'Successfully saved.';
+$labels['errorsaving'] = 'An error occured while saving.';
+$labels['yes'] = 'Yes';
+$labels['no'] = 'No';
+$labels['disable'] = 'Disable';
+$labels['remove'] = 'Remove';
+$labels['savewarning'] = 'Do you want to save your changes already?';
+$labels['plugin_manager_update'] = 'Update Plugins';
+$labels['authors_comments'] = 'Author\'s Comments (not translated)';
+$labels['requiredby'] = 'Plugin is required by';
+$labels['requires'] = 'Plugin requires';
+$labels['recommended'] = 'Recommended Plugins';
+$labels['update_plugins'] = 'Plugins downloads';
+$labels['ziparchive'] = 'Download Zip-Archive';
+$labels['demoaccount'] = 'Sorry, action is disabled (Demo Account)';
+$labels['serverversion'] = 'Server Version';
+$labels['mirrorversion'] = 'Mirror Version';
+$labels['mirrorhost'] = 'Mirror Server';
+$labels['comments'] = 'Requirements and Update Notes';
+$labels['update_error'] = 'Version mismatch';
+$labels['update_ok'] = 'Most recent has been detected. No update necessary.';
+$labels['update_edit'] = 'Plugin has to be re-configured or requires database adjustments. Please consider Update Notes.';
+$labels['servernewer'] = 'Registered Plugin is newer than Mirror Version.';
+$labels['orhigher'] = 'or higher';
+$labels['rc_ok'] = 'Roundcube Core is up to date.';
+$labels['update_update'] = 'Plugin is outdated. Please update! Consider Update Notes.';
+$labels['noupdates'] = 'No Updates selected.';
+$labels['rc_update'] = 'Roundcube Core is outdated. Please update!';
+$labels['rc_uptodate'] = 'Roundcube Core is up to date.';
+$labels['rc_newer'] = 'Roundcube Core is newer than Mirror version!';
+$labels['nottested'] = 'Please use Plugins with care! We don\'t know if hosted Plugins work with Roundcube v%s.';
+$labels['justunzip'] = 'Just unzip the Archive over your existing Installation.';
+$labels['guide'] = 'Read more...';
+$labels['thirdparty'] = 'This is not a MyRoundcube Plugin.';
+$labels['thirdpartywarning'] = 'This is a third party plugin. It is recommended not to download the plugin from our mirror. Instead, download it from the developer\'s site to ensure you get the latest version, as well as notes and advices of its developer.';
+$labels['develsite'] = 'Download';
+$labels['notinstalled'] = 'not installed';
+$labels['notregistered'] = 'not registered';
+$labels['roundcubeurl'] = 'Download Roundcube';
+$labels['languageupdate'] = 'Localization Update is available.';
+$labels['localizationfilesonly'] = 'Note: Download contains only localization files';
+$labels['donotregister'] = 'Don\'t register this plugin. It is loaded automatically.';
+$labels['register'] = 'Register this plugin in Plugin Manager\'s configuration or in ./config/config.inc.php <small>[$config[\'plugins\'] = array("<i>foo</i>", "<i>bar</i>");]</small>.';
+$labels['customer_account'] = 'Customer Account';
+$labels['customer_id'] = 'Customer ID';
+$labels['invalid_customer_id'] = 'Invalid Customer ID';
+$labels['invalid_credits'] = 'Invalid credits';
+$labels['successfully_transferred'] = 'Credits successfully transferred';
+$labels['merge'] = 'Merge Credits';
+$labels['credits'] = 'Credits';
+$labels['creditsupdated'] = 'Credits have changed since last page refresh';
+$labels['buynow'] = 'Buy credits now';
+$labels['history'] = 'Account History';
+$labels['details'] = 'Details';
+$labels['receipt'] = 'Receipt';
+$labels['plugins'] = 'Plugins';
+$labels['clickhere'] = 'Click here';
+$labels['discardliabletopaycosts'] = 'Discard incurring costs downloads';
+$labels['unchecknotinstalledplugins'] = 'Discard not installed plugins downloads';
+$labels['sum'] = 'Sum';
+$labels['show'] = 'Show';
+$labels['hide'] = 'Hide';
+$labels['view'] = 'view';
+$labels['expired'] = 'expired';
+$labels['terms'] = 'Terms';
+$labels['pricelist'] = 'Downloads prices chart';
+$labels['forthisdownload'] = 'for this download';
+$labels['remainingcredits'] = 'remaining credits';
+$labels['initialdownload'] = 'Initial download';
+$labels['keyfeatureaddition'] = 'New key feature';
+$labels['codeimprovements'] = 'Code improvements';
+$labels['servicenotavailable'] = 'Service is currently not available. Please try later!';
+$labels['myrcerror'] = 'MyRoundcube services are currently not available.';
+$labels['getnew'] = 'Require a new Customer ID';
+$labels['getnew_hint'] = 'We recommend to renew your Customer ID frequently. If you notice any suspicious activity in your account details, renew your Customer ID immediately.';
+$labels['transfer'] = 'Transfer credits';
+$labels['submenuprefix'] = '» ';
+$labels['printdetails'] = 'Print account details';
+$labels['noplugindescription'] = 'No plugin description detected.';
+$labels['welcome_to_plugin_manager'] = 'Welcome to Plugin Manager';
+$labels['about_to_create_account'] = 'Plugin Manager is about to create a privileged administration account.';
+$labels['create_account_proceed'] = 'To proceed, you need to confirm that you are the service administrator.';
+$labels['please_create'] = 'Please, create the following file in the root folder of your Roundcube installation:';
+$labels['thank_you'] = 'Thank you!';
+$labels['done'] = 'Done';
+$labels['manage_admins'] = 'Administrators';
+$labels['plugin_manager_admins'] = 'Plugin Manager Administrators';
+$labels['allow_plugins_configuration'] = 'Grant plugins configuration permissions';
+$labels['share_credits'] = 'Share MyRC$ credits';
+$labels['add'] = 'Add';
+$labels['accountnotexists'] = 'Account does not exist';
+$labels['sharedby'] = 'Customer account shared by';
+$labels['switch'] = 'Switch';
+$labels['ownaccount'] = 'to own account';
+$labels['shareinvitation'] = 'to shared account';
+$labels['enable_notifications'] = 'Enable plugins update notifications';
+$labels['enable_notifications_note'] = 'Note: Plugin Manager queries MyRoundcube mirror servers for available updates once a day only.';
+$labels['notifications_cc'] = 'Cc for notifications';
+$labels['notifications_cc_note'] = 'Note: Update notifications are sent to all Plugin Manager administrators. Use this field to notify an additional recipient. E.g: john.doh@gmail.com or a distribution list email address.';
+$labels['serverconfiguration'] = 'Server Configuration';
+$labels['pluginsconfiguration'] = 'Plugins Configuration';
+$labels['use_ssl'] = 'Establish secure SSL connections to MyRoundcube servers';
+$labels['use_hmail'] = 'Use hMailserver compatible plugins';
+$labels['load_splitter'] = 'Offload static files';
+$labels['show_myrc_messages'] = 'Display notification messages from MyRoundcube servers';
+$labels['maintenance_mode'] = 'Maintenance mode';
+$labels['maintenance_mode_hint'] = 'Temporarily disable all active plugins. Used to upgrade plugins during major releases. Plugin Manager disables all active plugins, allowing you to still access Plugin Manager Center to download the latest plugins updates from our mirror servers.';
+$labels['running_in_maintenance_mode'] = 'Webmail is running in maintenance mode.';
+$labels['serverwide'] = 'server wide configuration';
+$labels['file_based_config'] = 'Enable Plugin Manager file-based configuration';
+$labels['advanced_admins'] = 'recommended for advanced administrators only';
+$labels['compress_html'] = 'Shrink HTML output';
+$labels['show_config'] = 'Show current configuration';
+$labels['systemadmin'] = 'System Administrator';
+$labels['admin'] = 'Administrator';
+$labels['configuredby'] = 'configured by';
+$labels['enabled'] = 'Enabled<br />(default)';
+$labels['protected'] = 'Protected';
+$labels['skins'] = 'Skins';
+$labels['loads_always'] = 'Mandatory';
+$labels['loads_never'] = 'Plugin is disabled';
+$labels['loads_by_user'] = 'User can determine its usage';
+$labels['loads_linked'] = 'Bound to';
+$labels['unbind'] = 'unbind';
+$labels['bind'] = 'bind';
+$labels['addplugin'] = 'Add plugin';
+$labels['removeplugin'] = 'Remove plugin';
+$labels['errorplugin'] = 'Error: Required plugins are missing';
+$labels['errorrcversion'] = 'Error: Plugin requires Roundcube';
+$labels['errorphpversion'] = 'Error: Plugin requires PHP';
+$labels['errorphpcurl'] = 'Error: cURL is not installed';
+$labels['errorphpfinfo'] = 'Error: finfo is not installed';
+$labels['errordb'] = 'Database adjustments required.<br />Please enable plugin to start database tasks.';
+$labels['errordb8'] = 'Database adjustments required.';
+$labels['syntaxerror'] = 'PHP Syntax Error';
+$labels['notconfigured'] = 'Plugin is not configured';
+$labels['editconfig'] = 'Edit configuration';
+$labels['instructions'] = 'Instructions';
+$labels['dbautomatically'] = 'Start adjustments.';
+$labels['dbmanually'] = 'Please follow these instructions.';
+$labels['ornewer'] = 'or newer';
+$labels['official_releases'] = 'we support official Roundcube releases only';
+$labels['localizationmissing'] = 'No labels for Plugin name and Plugin description detected';
+$labels['documentation'] = 'Documentation';
+$labels['select_plugin'] = 'Select plugin';
+$labels['legend'] = 'Legend';
+$labels['plugindisabledbydefault'] = 'Plugin is disabled by default - User can determine its usage';
+$labels['pluginenabledbydefault'] = 'Plugin is enabled by default - User can determine its usage';
+$labels['pluginmandatory'] = 'Mandatory - Plugin is enabled, users can\'t enable/disable plugin';
+$labels['show_about_link'] = 'Show "About" link';
+$labels['show_support_link'] = 'Show "Support" link';
+$labels['use_myroundcube_watermark'] = 'Use "MyRoundcube" watermark';
+$labels['remove_watermark'] = 'Do not display watermark at all';
+$labels['database'] = 'Database';
+$labels['account_details_compressed'] = 'Account details compressed';
+$labels['credits_transferred'] = 'Credits transferred';
+$labels['customer_id_changed'] = 'Customer ID changed';
+$labels['myrcd_bought'] = 'MyRC$ bought - Thank you!';
+$labels['myrcd_refunded'] = 'MyRC$ refunded';
+$labels['PHPMyAdmin'] = 'PHPMyAdmin';
+$labels['ipmismatch'] = 'No download possible from IP %s <small>(Client IP does not match)</small>.<br />Use %s or browse to %s from IP %s.';
+$labels['emoticons_pluginname'] = 'Emoticon shortcuts';
+$labels['emoticons_plugindescription'] = 'Replace emoticon shortcuts by Smiley images';
+$labels['markbuttons_pluginname'] = 'Mark Message buttons';
+$labels['markbuttons_plugindescription'] = 'Add control icons to the message list separator to quickly mark messages.';
+$labels['keyboard_shortcuts_pluginname'] = 'Keyboard Shortcuts';
+$labels['keyboard_shortcuts_plugindescription'] = 'Enter commands using keyboard shortcuts.';
+$labels['message_highlight_pluginname'] = 'Highlight Messages';
+$labels['message_highlight_plugindescription'] = 'Highlight messages which matches your filter options.';
+$labels['google_contacts_pluginname'] = 'Google Contacts';
+$labels['google_contacts_plugindescription'] = 'Access your Google Contacts.';
+$labels['contextmenu_pluginname'] = 'Context Menu';
+$labels['contextmenu_plugindescription'] = 'Enable right-click contextual menu functionality in webmail.';
+$labels['newmail_notifier_pluginname'] = 'New Mail Notifier';
+$labels['newmail_notifier_plugindescription'] = 'Notify on new messages.';
+$labels['listcommands_pluginname'] = 'Reply Mailing Lists';
+$labels['listcommands_plugindescription'] = 'Various options to reply to messages sent from mailing lists.';
+$labels['copymessage_pluginname'] = 'Copy Message(s)';
+$labels['copymessage_plugindescription'] = 'Copy message(s) into another IMAP folder.';
+$labels['vcard_attachments_pluginname'] = 'vCard Attachments';
+$labels['vcard_attachments_plugindescription'] = 'Add a box to messages which have a vcard attachment to import the contact directly into the addressbook.';
+$labels['zipdownload_pluginname'] = 'Export Messages';
+$labels['zipdownload_plugindescription'] = 'Download selected messages (.eml) or complete folders, as a zip file.';
+$labels['markasjunk2_pluginname'] = 'Mark Messages as Spam';
+$labels['markasjunk2_plugindescription'] = 'Mark Messages as spam or not spam.';
+$labels['markasjunk_pluginname'] = 'Mark Messages as Spam';
+$labels['markasjunk_plugindescription'] = 'Mark Messages as spam or not spam.';
+$labels['google_analytics_pluginname'] = 'Google Analytics';
+$labels['google_analytics_plugindescription'] = 'Include Google Analytics.';
+$labels['globaladdressbook_pluginname'] = 'Global Addressbook';
+$labels['globaladdressbook_plugindescription'] = 'This is a readonly addressbook provided by your administrator.';
+$labels['blockspamsending_pluginname'] = 'Prevent Sending Spam';
+$labels['blockspamsending_plugindescription'] = 'Allow sending out only a specific amount of messages with same body during one session.';
+$labels['global_config_pluginname'] = 'Configuration Manager';
+$labels['global_config_plugindescription'] = 'This is a configuration manager plugin. It optimizes your server by centralizing plugin configuration files. It also makes administrative tasks easier by enabling the use of a single configuration file for all your plugins.';
+$labels['jqueryui_pluginname'] = 'Jqueryui';
+$labels['jqueryui_plugindescription'] = 'Jqueryui javascript library';
+$labels['hide_blockquote_pluginname'] = 'Hide blockquote';
+$labels['hide_blockquote_plugindescription'] = 'Hide citation when the count of lines is greater than the specified value.';
+$labels['crawler_pluginname'] = 'Crawler';
+$labels['crawler_plugindescription'] = 'Fake page content for crawlers.';
+$labels['archive_pluginname'] = 'Archive';
+$labels['archive_plugindescription'] = 'Archive messages in an archive folder.';
+$labels['autologon_pluginname'] = 'Autologon';
+$labels['autologon_plugindescription'] = 'Logon automatically.';
+$labels['openpgpjs_pluginname'] = 'OpenPGPjs';
+$labels['openpgpjs_plugindescription'] = 'Des PGP in Roundcube.';
+$labels['dblog_pluginname'] = 'Log to database';
+$labels['dblog_plugindescription'] = 'Log events to database instead of logging to file.';
+$labels['gibberish_pluginname'] = 'Gibberish Encryption';
+$labels['gibberish_plugindescription'] = 'A helper plugin for Gibberish AES encryption.';
+$labels['http_request_pluginname'] = 'HTTP Request';
+$labels['http_request_plugindescription'] = 'A helper plugin to perform HTTP requests via cURL or fsockopen.';
+$labels['http_auth_pluginname'] = 'HTTP Authentication';
+$labels['http_auth_plugindescription'] = 'A helper plugin to support HTTP Authentication for other plugins. Note: This plugin is different from default Roundcube http_authentication plugin.';
+$labels['http_authentication_pluginname'] = 'HTTP Authentication (default)';
+$labels['http_authentication_plugindescription'] = 'Make use of an existing HTTP authentication and perform login with the existing user credentials.';
+$labels['jscolor_pluginname'] = 'Color Picker';
+$labels['jscolor_plugindescription'] = 'A helper plugin to display a color picker.';
+$labels['tinymce_pluginname'] = 'TinyMCE - HTML Editor';
+$labels['tinymce_plugindescription'] = 'This plugin implements TinyMCE PHP Compressor (http://www.tinymce.com/wiki.php/Compressors:PHP). Additionally, it adds the ability to configure TinyMCE settings without editing Roundcube\'s core files.';
+$labels['lang_sel_pluginname'] = 'Select Language';
+$labels['lang_sel_plugindescription'] = 'Select language on login page.';
+$labels['newuser_pluginname'] = 'New User';
+$labels['newuser_plugindescription'] = 'Inform administrators when a new user is registered via webmail interface and send a welcome message to the new user on the first login.';
+$labels['placeholder_pluginname'] = 'Placeholder Attributes';
+$labels['placeholder_plugindescription'] = 'Add placeholder attributes to text and password input elements.';
+$labels['qtip_pluginname'] = 'jQueryUI Tool Tips';
+$labels['qtip_plugindescription'] = 'A helper plugin to use jQueryUI qtips.';
+$labels['sabredav_pluginname'] = 'SabreDAV';
+$labels['sabredav_plugindescription'] = 'Creates SabreDAV accounts for CalDAV calendar access when new users in Roundcube are created and associates passwords if they have been changed.';
+$labels['savepassword_pluginname'] = 'Save Passwords';
+$labels['savepassword_plugindescription'] = 'This is a helper plugin which is required by other plugins.';
+$labels['database_attachments_pluginname'] = 'Database Attachments';
+$labels['database_attachments_plugindescription'] = 'Helper Plugin to manage attachments in database.';
+$labels['help_pluginname'] = 'Help';
+$labels['help_plugindescription'] = 'Webmail help';
+$labels['new_user_dialog_pluginname'] = 'New User Dialog';
+$labels['new_user_dialog_plugindescription'] = 'Present identity settings dialog box to new users. When a new user is created, this plugin checks the default identity and sets a session flag in case it is incomplete. An overlay box will appear on the screen until the user has reviewed and completed her/his identity.';
+$labels['rcguard_pluginname'] = 'ReCAPTCHA';
+$labels['rcguard_plugindescription'] = 'Force CAPTCHA challenge after a number of failed login attempts.';
+$labels['domain_check_pluginname'] = 'Check Domain';
+$labels['domain_check_plugindescription'] = 'Restrict webmail login to specific domains.';
+$labels['tasklist_pluginname'] = 'Tasklist';
+$labels['tasklist_plugindescription'] = 'Manager your tasks with the Webmail Tasklist.';
+$labels['virtuser_query_pluginname'] = 'Virtual user query';
+$labels['virtuser_query_plugindescription'] = 'Database based User-to-Email and Email-to-User lookup.';
+$labels['virtuser_file_pluginname'] = 'Virtual user query';
+$labels['virtuser_file_plugindescription'] = 'File based User-to-Email and Email-to-User lookup.';
+$labels['userinfo_pluginname'] = 'User information';
+$labels['userinfo_plugindescription'] = 'Display some information about the current user.';
+$labels['subscriptions_option_pluginname'] = 'IMAP subscriptions';
+$labels['subscriptions_option_plugindescription'] = 'Manage IMAP subscriptions.';
+$labels['filters_pluginname'] = 'Filters';
+$labels['filters_plugindescription'] = 'Manage client side filters.';
+$labels['forgot_password_pluginname'] = 'Forgot Password';
+$labels['forgot_password_plugindescription'] = 'Reset Password requests.';
+$labels['sieverules_pluginname'] = 'Sieve Filters';
+$labels['sieverules_plugindescription'] = 'Manage Sieve filters.';
+$labels['managesieve_pluginname'] = 'Sieve Filters';
+$labels['managesieve_plugindescription'] = 'Manage Sieve filters.';
+$labels['acl_pluginname'] = 'Access Control Lists';
+$labels['acl_plugindescription'] = 'Folders Access Control Lists Management.';
+$labels['vacation_pluginname'] = 'Away Message';
+$labels['vacation_plugindescription'] = 'Manage Away Message (vacation notification).';
+$labels['password_pluginname'] = 'Change Password';
+$labels['password_plugindescription'] = 'Allow users to change their password.';
+$labels['redundant_attachments_pluginname'] = 'Redundant Attachments';
+$labels['redundant_attachments_plugindescription'] = 'Redundant attachments plugin provides a redundant storage for temporary uploaded attachment files. They are stored in both the database backend as well as on the local file system.';
+$labels['example_addressbook_pluginname'] = 'Example Address Book';
+$labels['example_addressbook_plugindescription'] = 'Sample code to add an additional address book.';
+$labels['debug_logger_pluginname'] = 'Debug Logger';
+$labels['debug_logger_plugindescription'] = 'Debug logger enables enhanced logging for debugging purposes.';
+$labels['show_additional_headers_pluginname'] = 'Show additional message headers';
+$labels['show_additional_headers_plugindescription'] = 'Proof-of-concept plugin which will fetch additional headers and display them in the message view.';
+$labels['additional_message_headers_pluginname'] = 'Additional Message Headers';
+$labels['additional_message_headers_plugindescription'] = 'Very simple plugin which will add additional headers to or remove them from outgoing messages.';
+$labels['new_user_identity_pluginname'] = 'New User Identity';
+$labels['new_user_identity_plugindescription'] = 'New User Identity populates a new user\'s default identity from LDAP on their first visit.';
+$labels['squirrelmail_usercopy_pluginname'] = 'Migrate Squirrelmail Users';
+$labels['squirrelmail_usercopy_plugindescription'] = 'Copy a new users identity and settings from a nearby Squirrelmail installation.';
+$labels['yubikey_authentication_pluginname'] = 'Yubico\'s Yubikey authentication';
+$labels['yubikey_authentication_plugindescription'] = 'Plugin to use Yubico\'s YubiKey to authentication on Roundcube webmail.';
+$labels['sauserprefs_pluginname'] = 'Spamassassin user preferences';
+$labels['sauserprefs_plugindescription'] = 'Adds a \'Spam\' tab to the \'Personal Settings\' to allow the user to change their SpamAssassin preferences.';
+$labels['dkimstatus_pluginname'] = 'DKIM status';
+$labels['dkimstatus_plugindescription'] = 'DKIMSTATUS displays the status of the DKIM Signature of each email your read in Roundcube.';
+$labels['roundcube_openpgp_pluginname'] = 'Roundcube OpenPGP';
+$labels['roundcube_openpgp_plugindescription'] = 'This extension implements OpenPGP in Roundcube. It helps to generate, manage and use encryption keys.';
+$labels['automatic_addressbook_pluginname'] = 'Automatic Addressbook';
+$labels['automatic_addressbook_plugindescription'] = 'Creates an addressbook and automatically inserts the collected email addresses there. This eliminates the need to manually add each contact.';
+$labels['calendar_pluginname'] = 'Calendar';
+$labels['calendar_plugindescription'] = 'Manage your events with the Webmail Calendar.';
+$labels['attachment_reminder_pluginname'] = 'Attachment Reminder';
+$labels['attachment_reminder_plugindescription'] = 'Remind users to attach a file before sending a message.';
+
+?> \ No newline at end of file
diff --git a/plugin_manager/localization/es_ES.inc b/plugin_manager/localization/es_ES.inc
new file mode 100644
index 0000000..d0ec284
--- /dev/null
+++ b/plugin_manager/localization/es_ES.inc
@@ -0,0 +1,346 @@
+<?php
+/*
+ +-----------------------------------------------------------------------+
+ | ./plugins/plugin_manager/localization/es_ES.inc
+ |
+ | Language file of MyRoundcube Plugins Bundle
+ | Copyright (C) 2010-2015, Roland 'rosali' Liebl
+ |
+ +-----------------------------------------------------------------------+
+ | Author: Yoni - 01/16/2015 03:54:51
+ +-----------------------------------------------------------------------+
+*/
+
+$labels = array();
+$labels['pluginname'] = 'Administrador de complementos';
+$labels['plugindescription'] = 'El administrador de complementos brinda a los usuarios la opcion de habilitar y/o deshabilitar complementos (a nivel de la cuenta del usuario) mientras ayuda a los administradores a estar al día con las actualizaciones, complementos actualizados, solucionar problemas, realiza descargas centralizadas, documentacion y recomendaciones. El administrador de complementos no modifica su sistema de archivos, ni instalará complementos automáticamente';
+$labels['plugin_manager_title'] = 'Administrar complementos';
+$labels['plugin_manager_center'] = 'Centro de administración de complementos';
+$labels['updatepm'] = 'Actualización de Administrador de Complementos disponible.';
+$labels['updatepmrequired'] = 'Actualización de Administrador de Complementos requerida.';
+$labels['downloadnow'] = 'Descargar ahora';
+$labels['homepage'] = 'Página principal';
+$labels['calendaring'] = 'Calendarios';
+$labels['misc'] = 'Misceláneo';
+$labels['downloads'] = 'descargas';
+$labels['issue'] = 'Problema';
+$labels['submitissue'] = 'Reportar un problema.<br><br>Por favor, compruebe los registros y proporcione información relevante de su problema.<br><br>NOTA: Se requiere cuenta de Google';
+$labels['showall'] = 'Mostrar todos los complementos';
+$labels['hideuptodate'] = 'Mostrar sólo actualizaciones ';
+$labels['connectionerror'] = 'El servidor remoto no respondió al intento de conexión.';
+$labels['trylater'] = 'Por favor, intente más tarde...';
+$labels['translate'] = 'Traducir este complemento';
+$labels['translationaccount'] = 'Cuenta de traducción en tiempo real (usuario)';
+$labels['translationserver'] = 'Cuenta de traducción en tiempo real (servidor IMAP)';
+$labels['whatsthis'] = '¿Qué es esto?';
+$labels['restoredefaults'] = 'Restaurar Predeterminados';
+$labels['checkall'] = 'Seleccionar Todos';
+$labels['uncheckall'] = 'Deseleccionar Todos';
+$labels['toggle'] = 'Alternar Selección';
+$labels['status'] = 'Estado';
+$labels['globalplugins'] = 'Globales';
+$labels['performance'] = 'Rendimiento';
+$labels['backend'] = 'Plugins de Servidor';
+$labels['messagesmanagement'] = 'Administración de Mensaje';
+$labels['furtherconfig'] = '¿Quiere configurar este complemento ahora?';
+$labels['uninstall'] = 'Está a punto de desactivar este complemento. ¿Desea eliminar todas las configuraciones guardadas de forma permanente?';
+$labels['uninstallconfirm'] = 'Está a punto de desactivar este complemento. ADVERTENCIA: Seleccione »DESACTIVAR« para desactivar este plugin, manteniendo los datos actuales y su configuración almacenados en nuestro servidor si quiere poder utilizarlos más adelante. Seleccione »REMOVER« si desea que todos los datos y la configuración que gestiona este plugin sean removidos permanentemente de nuestra base de datos. Tenga en cuenta que esta acción no se puede deshacer.';
+$labels['areyousure'] = 'No podrá deshacer esta acción. ¿Está realmente seguro?';
+$labels['successfullydeleted'] = 'Configuraciones eliminadas exitosamente.';
+$labels['successfullysaved'] = 'Guardado exitosamente.';
+$labels['errorsaving'] = 'Ha ocurrido un error mientras se guardaba.';
+$labels['yes'] = 'Sí';
+$labels['no'] = 'No';
+$labels['disable'] = 'Desactivar';
+$labels['remove'] = 'Remover';
+$labels['savewarning'] = '¿Desea guardar los cambios ya?';
+$labels['plugin_manager_update'] = 'Actualizar Complementos';
+$labels['authors_comments'] = 'Comentarios de autor (no traducido)';
+$labels['requiredby'] = 'Complemento requerido por';
+$labels['requires'] = 'Complemento requiere';
+$labels['recommended'] = 'Complementos Recomendados';
+$labels['update_plugins'] = 'Actualizar complementos';
+$labels['ziparchive'] = 'Descargar Zip-Archivo';
+$labels['demoaccount'] = 'Descarga no disponible. (Cuenta Demo)';
+$labels['serverversion'] = 'Versión en Servidor';
+$labels['mirrorversion'] = 'Versión en Proveedor';
+$labels['mirrorhost'] = 'Servidor Proveedor';
+$labels['comments'] = 'Notas de actualización';
+$labels['update_error'] = 'Versión no coincide';
+$labels['update_ok'] = 'Lo más reciente ha sido detectado. No es necesario actualizar.';
+$labels['update_edit'] = 'Complemento debe ser reconfigurado o requiere de ajustes de bases de datos. Por favor, considere las Notas de Actualización.';
+$labels['servernewer'] = 'Complemento registrado es más reciente que la versión del proveedor.';
+$labels['orhigher'] = 'o superior';
+$labels['rc_ok'] = 'Versión de Roundcube en fecha.';
+$labels['update_update'] = 'Complemento no actualizado. Por favor, actualice! Considere las Notas de Actualización.';
+$labels['noupdates'] = 'No hay actualizaciones seleccionadas.';
+$labels['rc_update'] = 'Versión de Roundcube desactualizada. Por favor, actualice!';
+$labels['rc_uptodate'] = 'Versión de Roundcube en fecha.';
+$labels['rc_newer'] = 'Versión de Roundcube es más reciente que la versión del proveedor!';
+$labels['nottested'] = 'Por favor, use estos complementos con cuidado! No sabemos si complementos externos trabajan con Roundcube v%s.';
+$labels['justunzip'] = 'Simplemente descomprima el archivo sobre la instalación existente.';
+$labels['guide'] = 'Leer más...';
+$labels['thirdparty'] = 'Este no es un complemento de MyRoundcube.';
+$labels['thirdpartywarning'] = 'Este es un plugin de terceros. Se recomienda no descargar el plugin desde nuestro servidor proveedor. En vez, descárguelo desde el sitio de su programador para asegurarse de obtener la versión más reciente, así como notas y consejos de su programador.';
+$labels['develsite'] = 'Descarga';
+$labels['notinstalled'] = 'No instalado';
+$labels['notregistered'] = 'No registrado';
+$labels['roundcubeurl'] = 'Descargar Roundcube';
+$labels['languageupdate'] = 'Actualización de Idioma disponible.';
+$labels['localizationfilesonly'] = 'Nota: Descarga contiene sólo archivos de localización';
+$labels['donotregister'] = 'No registre este complemento. Se carga automáticamente.';
+$labels['register'] = 'Registre este complemento en ./config/config.inc.php <small>[$config[\'plugins\'] = array("<i>foo</i>", "<i>bar</i>");]</i></small>';
+$labels['customer_account'] = 'Cuenta de Cliente';
+$labels['customer_id'] = 'ID de Cliente';
+$labels['invalid_customer_id'] = 'ID de cliente inválido';
+$labels['invalid_credits'] = 'Créditos inválidos';
+$labels['successfully_transferred'] = 'Créditos transferidos éxitosamente';
+$labels['merge'] = 'Combinar Créditos';
+$labels['credits'] = 'Créditos';
+$labels['creditsupdated'] = 'Sus créditos han variado desde la última actualización de página';
+$labels['buynow'] = 'Comprar créditos ahora';
+$labels['history'] = 'Historial de Cuenta';
+$labels['details'] = 'Detalles';
+$labels['receipt'] = 'Recibo';
+$labels['plugins'] = 'Complementos';
+$labels['clickhere'] = 'Haga clic aquí';
+$labels['discardliabletopaycosts'] = 'Descartar descargas que incurren gastos';
+$labels['unchecknotinstalledplugins'] = 'Descartar descargas de complementos no instalados';
+$labels['sum'] = 'Suma';
+$labels['show'] = 'Mostrar';
+$labels['hide'] = 'Ocultar';
+$labels['view'] = 'ver';
+$labels['expired'] = 'expirado';
+$labels['terms'] = 'Condiciones';
+$labels['pricelist'] = 'Lista de Precios de Descargas';
+$labels['forthisdownload'] = 'por esta descarga';
+$labels['remainingcredits'] = 'créditos restantes';
+$labels['initialdownload'] = 'descarga inicial';
+$labels['keyfeatureaddition'] = 'Nueva característica clave';
+$labels['codeimprovements'] = 'Mejoras de Código';
+$labels['servicenotavailable'] = 'El servicio no está disponible actualmente. Por favor, inténte más tarde!';
+$labels['myrcerror'] = 'MyRoundcube servicios no están actualmente disponibles.';
+$labels['getnew'] = 'Solicitar un ID de Cliente nuevo';
+$labels['getnew_hint'] = 'Se recomienda renovar su ID de Cliente frecuentemente. Si usted nota cualquier actividad sospechosa en los detalles de su cuenta, renueve su ID de Cliente inmediatamente.';
+$labels['transfer'] = 'Transferir Créditos';
+$labels['submenuprefix'] = '» ';
+$labels['printdetails'] = 'Imprimir detalles de cuenta ';
+$labels['noplugindescription'] = 'Descripción de complemento no detectada.';
+$labels['welcome_to_plugin_manager'] = 'Bienvenido al Administrador de Complementos';
+$labels['about_to_create_account'] = 'El Administrador de Complementos está a punto de crear una cuenta de administración privilegiada.';
+$labels['create_account_proceed'] = 'Para continuar, debe confirmar que usted es el administrador del servicio.';
+$labels['please_create'] = 'Por favor, cree el siguiente archivo en la carpeta raíz de la instalación de Roundcube:';
+$labels['thank_you'] = '¡Gracias!';
+$labels['done'] = 'Listo';
+$labels['manage_admins'] = 'Administradores';
+$labels['plugin_manager_admins'] = 'Cuentas adicionales como Administrador de Complementos';
+$labels['allow_plugins_configuration'] = 'Conceder permisos de configuración de complementos';
+$labels['share_credits'] = 'Compartir MyRC$ créditos';
+$labels['add'] = 'Añadir';
+$labels['accountnotexists'] = 'Cuenta no existe';
+$labels['sharedby'] = 'Cuenta de cliente compartida por';
+$labels['switch'] = 'Cambiar a';
+$labels['ownaccount'] = 'cuenta propia';
+$labels['shareinvitation'] = 'a cuenta compartida';
+$labels['enable_notifications'] = 'Habilitar notificaciones de actualización';
+$labels['enable_notifications_note'] = 'Nota: El Administrador de Complementos consulta los servidores MyRoundcube para actualizaciones disponibles una sola vez al día.';
+$labels['notifications_cc'] = 'Cc de notificaciones';
+$labels['notifications_cc_note'] = 'Nota: Las notificaciones de actualización se envían a todos los administradores de complementos. Utilice este campo para notificar a un receptor adicional. Por ejemplo: john.doh@gmail.com o una dirección de correo electrónico de lista de distribución.';
+$labels['serverconfiguration'] = 'Configuración de Servidor';
+$labels['pluginsconfiguration'] = 'Configuración de Complementos';
+$labels['use_ssl'] = 'Establecer conexiones seguras SSL con los servidores MyRoundcube';
+$labels['use_hmail'] = 'Usar complementos compatibles de hmailserver';
+$labels['load_splitter'] = 'Externalizar archivos estáticos';
+$labels['show_myrc_messages'] = 'Mostrar mensajes de notificación de los servidores MyRoundcube';
+$labels['maintenance_mode'] = 'Modo de mantenimiento';
+$labels['maintenance_mode_hint'] = 'Se utiliza para actualizar complementos durante versiones principales. El Administrador de Complementos desactiva todos los complementos activos y le permite seguir teniendo acceso al Centro de Descargas de Complementos para obtener las más recientes actualizaciones en los servidores de distribución.';
+$labels['running_in_maintenance_mode'] = 'El webmail está funcionando en modo de mantenimiento.';
+$labels['serverwide'] = 'configuración de servidor';
+$labels['file_based_config'] = 'Habilitar configuración del Administrador de Complementos basada en archivos';
+$labels['advanced_admins'] = 'recomendado para administradores avanzados solamente';
+$labels['compress_html'] = 'Comprimir HTML';
+$labels['show_config'] = 'Mostrar configuración actual';
+$labels['systemadmin'] = 'Administrador del Sistema';
+$labels['admin'] = 'Administrador';
+$labels['configuredby'] = 'configurado por';
+$labels['enabled'] = 'Activado<br />(por defecto)';
+$labels['protected'] = 'Protegido';
+$labels['skins'] = 'Temas';
+$labels['loads_always'] = 'Obligatorio';
+$labels['loads_never'] = 'Complemento desactivado';
+$labels['loads_by_user'] = 'El usuario puede determinar su uso';
+$labels['loads_linked'] = 'Enlazado a';
+$labels['unbind'] = 'desenlazar';
+$labels['bind'] = 'enlazar';
+$labels['addplugin'] = 'Añadir complemento';
+$labels['removeplugin'] = 'Eliminar complemento';
+$labels['errorplugin'] = 'Error: complementos necesarios no están disponibles';
+$labels['errorrcversion'] = 'Error: Complemento requiere Roundcube';
+$labels['errorphpversion'] = 'Error: Complemento requiere PHP';
+$labels['errorphpcurl'] = 'Error: cURL no está instalado';
+$labels['errorphpfinfo'] = 'Error: finfo no está instalado';
+$labels['errordb'] = 'Ajustes de base de datos requerido.<br />Por favor, active el complemento para iniciar ajustes.';
+$labels['errordb8'] = 'Ajustes de base de datos requerido.';
+$labels['syntaxerror'] = 'Error de sintaxis PHP';
+$labels['notconfigured'] = 'Complemento no está configurado';
+$labels['editconfig'] = 'Editar configuración';
+$labels['instructions'] = 'Instrucciones';
+$labels['dbautomatically'] = 'Iniciar ajustes.';
+$labels['dbmanually'] = 'Por favor, siga estas instrucciones.';
+$labels['ornewer'] = 'o más reciente';
+$labels['official_releases'] = 'sólo soportamos versiones oficiales de Roundcube';
+$labels['localizationmissing'] = 'Etiquetas para el nombre y la descripción del complemento no detectados';
+$labels['documentation'] = 'Documentación';
+$labels['select_plugin'] = 'Seleccione complemento';
+$labels['legend'] = 'Leyenda';
+$labels['plugindisabledbydefault'] = 'Complemento desactivado por defecto - El usuario puede determinar su uso';
+$labels['pluginenabledbydefault'] = 'Complemento activado por defecto - El usuario puede determinar su uso';
+$labels['pluginmandatory'] = 'Obligatorio - Complemento activado. Usuarios no pueden activar/desactivar el complemento';
+$labels['show_about_link'] = 'Mostrar enlace "Acerca de"';
+$labels['show_support_link'] = 'Mostrar enlace "Soporte"';
+$labels['use_myroundcube_watermark'] = 'Utilizar sello digital "MyRoundcube"';
+$labels['remove_watermark'] = 'No mostrar sello digital';
+$labels['database'] = 'Base de datos';
+$labels['account_details_compressed'] = 'Detalles de la cuenta comprimidos';
+$labels['credits_transferred'] = 'Créditos transferidos';
+$labels['customer_id_changed'] = 'ID de cliente modificado';
+$labels['myrcd_bought'] = 'MyRC$ comprado - ¡Gracias!';
+$labels['myrcd_refunded'] = 'MyRC$ reembolsados';
+$labels['PHPMyAdmin'] = 'PHPMyAdmin';
+$labels['ipmismatch'] = 'Ninguna descarga posible de IP %s <small> (IP del cliente no coincide) </small>.<br /> Utilice %s o navegue a %s de IP %s.';
+$labels['emoticons_pluginname'] = 'Atajos de Emoticono';
+$labels['emoticons_plugindescription'] = 'Reemplace atajos de Emoticono por imágenes';
+$labels['markbuttons_pluginname'] = 'Botones \'Marcar Mensaje\'';
+$labels['markbuttons_plugindescription'] = 'Agregar íconos de control al separador de la lista de mensajes para aplicar acciones rápidamente.';
+$labels['keyboard_shortcuts_pluginname'] = 'Métodos Abreviados de Teclado';
+$labels['keyboard_shortcuts_plugindescription'] = 'Ejecutar comandos utilizando métodos abreviados de teclado.';
+$labels['message_highlight_pluginname'] = 'Resaltar Mensajes';
+$labels['message_highlight_plugindescription'] = 'Resaltar mensajes que coincidan con sus opciones de filtro.';
+$labels['google_contacts_pluginname'] = 'Google Contacts';
+$labels['google_contacts_plugindescription'] = 'Accede a tus contactos de Google.';
+$labels['contextmenu_pluginname'] = 'Menú Contextual';
+$labels['contextmenu_plugindescription'] = 'Habilitar la funcionalidad de menú contextual al hacer clic derecho en webmail.';
+$labels['newmail_notifier_pluginname'] = 'Notificador de Mensaje';
+$labels['newmail_notifier_plugindescription'] = 'Notificación de nuevos mensajes.';
+$labels['listcommands_pluginname'] = 'Responder Listas de Correo';
+$labels['listcommands_plugindescription'] = 'Varias opciones para responder a los mensajes enviados desde listas de correo.';
+$labels['copymessage_pluginname'] = 'Copiar Mensaje(s)';
+$labels['copymessage_plugindescription'] = 'Copiar mensaje(s) hacia otra carpeta IMAP.';
+$labels['vcard_attachments_pluginname'] = 'vCard Adjuntos';
+$labels['vcard_attachments_plugindescription'] = 'Agregar casilla a mensajes que tienen un vCard adjunto para importar el contacto directamente hacia el libro de direcciones.';
+$labels['zipdownload_pluginname'] = 'Exportar Mensajes';
+$labels['zipdownload_plugindescription'] = 'Descargar mensajes seleccionados (.eml) o carpetas completas, como un archivo zip.';
+$labels['markasjunk2_pluginname'] = 'Marcar como Spam';
+$labels['markasjunk2_plugindescription'] = 'Marcar mensajes como spam o no spam.';
+$labels['markasjunk_pluginname'] = 'Marcar como Spam';
+$labels['markasjunk_plugindescription'] = 'Marcar mensajes como spam o no spam.';
+$labels['google_analytics_pluginname'] = 'Google Analytics';
+$labels['google_analytics_plugindescription'] = 'Incluir Google Analytics.';
+$labels['globaladdressbook_pluginname'] = 'Libro Global de Direcciones';
+$labels['globaladdressbook_plugindescription'] = 'Libreta de direcciones de sólo lectura proporcionada por el administrador.';
+$labels['blockspamsending_pluginname'] = 'Impedir el envío de Spam';
+$labels['blockspamsending_plugindescription'] = 'Permitir el envío de una cantidad específica de mensajes con el mismo texto durante una sesión.';
+$labels['global_config_pluginname'] = 'Administrador de Configuración';
+$labels['global_config_plugindescription'] = 'Este es un complemento de administración de configuración. Se optimiza el servidor mediante la centralización de la configuración de estos complementos. También hace más fácil las tareas administrativas, permitiendo el uso de un solo archivo de configuración para todos los complementos.';
+$labels['jqueryui_pluginname'] = 'Jqueryui';
+$labels['jqueryui_plugindescription'] = 'Librería de Jqueryui javascript';
+$labels['hide_blockquote_pluginname'] = 'Ocultar bloque entrecomillado';
+$labels['hide_blockquote_plugindescription'] = 'Ocultar citación cuando el recuento de líneas es mayor que el valor especificado.';
+$labels['crawler_pluginname'] = 'Crawler';
+$labels['crawler_plugindescription'] = 'Contenido de página falso para los rastreadores.';
+$labels['archive_pluginname'] = 'Archive';
+$labels['archive_plugindescription'] = 'Archivar mensajes en una carpeta de archivo.';
+$labels['autologon_pluginname'] = 'Autologon';
+$labels['autologon_plugindescription'] = 'Iniciar sesión automáticamente.';
+$labels['openpgpjs_pluginname'] = 'OpenPGPjs';
+$labels['openpgpjs_plugindescription'] = 'Des PGP en Roundcube.';
+$labels['dblog_pluginname'] = 'Registrar en base de datos';
+$labels['dblog_plugindescription'] = 'Registrar eventos en base de datos en vez de registrarlos en archivos.';
+$labels['gibberish_pluginname'] = 'Gibberish Encryption';
+$labels['gibberish_plugindescription'] = 'Complemtento para ayudar en la codificación Gibberish AES.';
+$labels['http_request_pluginname'] = 'HTTP Request';
+$labels['http_request_plugindescription'] = 'Complemento para ayudar a realizar peticiones HTTP vía cURL o fsockopen.';
+$labels['http_auth_pluginname'] = 'Autentificación HTTP';
+$labels['http_auth_plugindescription'] = 'Un complemento de ayuda para soportar autentificación HTTP.';
+$labels['http_authentication_pluginname'] = 'Autenticación HTTP (por defecto)';
+$labels['http_authentication_plugindescription'] = 'Hacer uso de una autenticación HTTP existente e iniciar sesión con las credenciales del mismo usuario.';
+$labels['jscolor_pluginname'] = 'Selector de Color';
+$labels['jscolor_plugindescription'] = 'Un complemento de ayuda para mostrar un selector de color.';
+$labels['tinymce_pluginname'] = 'TinyMCE - Editor HTML';
+$labels['tinymce_plugindescription'] = 'Reemplazar el editor HTML predeterminado TinyMCE por TinyMCE jQuery. (Incluye Compresor PHP TinyMCE - http://www.tinymce.com/wiki.php/Compressors:PHP)';
+$labels['lang_sel_pluginname'] = 'Seleccionar Idioma';
+$labels['lang_sel_plugindescription'] = 'Seleccionar idioma en la página de inicio de sesión';
+$labels['newuser_pluginname'] = 'Nuevo usuario';
+$labels['newuser_plugindescription'] = 'Informar al los administradores cuando un nuevo usuario es registrado por medio de la interfaz Web del correo y envía un mensaje de bienvenida al nuevo usuario en el primer inicio de sesión.';
+$labels['placeholder_pluginname'] = 'Atributos de marcador de posición';
+$labels['placeholder_plugindescription'] = 'Agregar atributos de marcador de posición para los elementos de entrada de texto y contraseña.';
+$labels['qtip_pluginname'] = 'Información sobre herramientas con jQueryUI';
+$labels['qtip_plugindescription'] = 'Un complemento de ayuda para utilizar qtips de jQueryUI.';
+$labels['sabredav_pluginname'] = 'SabreDAV (Soporte para WebDav sobre PHP)';
+$labels['sabredav_plugindescription'] = 'Crea cuentas SabreDav para accesos a calendarios CalDAV cuando se crean nuevos usuarios en Roundcube y asocia contraseñas si estas han sido modificadas.';
+$labels['savepassword_pluginname'] = 'Guardar contraseñas';
+$labels['savepassword_plugindescription'] = 'Éste es un complemente auxiliar requerido por otros complementos.';
+$labels['database_attachments_pluginname'] = 'Adjuntos en base de datos';
+$labels['database_attachments_plugindescription'] = 'Complemento auxiliar para administrar adjuntos en base de datos';
+$labels['help_pluginname'] = 'Ayuda';
+$labels['help_plugindescription'] = 'Ayuda Webmail';
+$labels['new_user_dialog_pluginname'] = 'diálogo de nuevo usuario';
+$labels['new_user_dialog_plugindescription'] = 'Muestra el diálogo de configuración de datos personales a los nuevos usuarios. Cuando un usuario es creado, el complemento verifica la Identidad Predeterminada y establece un límite de sesión en caso de que se encuentre incompleta. Un cuadro emergente aparece en pantalla hasta que el usuario lo revise y complete su información.';
+$labels['rcguard_pluginname'] = 'ReCaptcha';
+$labels['rcguard_plugindescription'] = 'Enforzar un desafío CAPTCHA después de varios intentos de inicio de sesión fallidos.';
+$labels['domain_check_pluginname'] = 'Verifica Dominio';
+$labels['domain_check_plugindescription'] = 'Restringir el inicio de sesión de webmail a dominios específicos.';
+$labels['tasklist_pluginname'] = 'Lista de Tareas';
+$labels['tasklist_plugindescription'] = 'Crear tareas y listas de subtareas con recordatorios.';
+$labels['virtuser_query_pluginname'] = 'Consulta de Usuario Virtual';
+$labels['virtuser_query_plugindescription'] = 'Búsqueda en base de datos de \'Usuario a Correo electrónico\' y viceversa.';
+$labels['virtuser_file_pluginname'] = 'Consulta de Usuario Virtual';
+$labels['virtuser_file_plugindescription'] = 'Búsqueda en archivos de \'Usuario a Correo electrónico\' y viceversa.';
+$labels['userinfo_pluginname'] = 'Información del usuario';
+$labels['userinfo_plugindescription'] = 'Mostrar información sobre el usuario actual.';
+$labels['subscriptions_option_pluginname'] = 'Suscripciones IMAP';
+$labels['subscriptions_option_plugindescription'] = 'Administrar suscripciones IMAP.';
+$labels['filters_pluginname'] = 'Filtros';
+$labels['filters_plugindescription'] = 'Gestionar filtros de mensajes definidos por el usuario.';
+$labels['forgot_password_pluginname'] = 'Forgot Password';
+$labels['forgot_password_plugindescription'] = 'Peticiones de restablecimiento de contraseña.';
+$labels['sieverules_pluginname'] = 'Filtros Sieve';
+$labels['sieverules_plugindescription'] = 'Administrar Filtros Sieve.';
+$labels['managesieve_pluginname'] = 'Filtros Sieve';
+$labels['managesieve_plugindescription'] = 'Administrar Filtros Sieve.';
+$labels['acl_pluginname'] = 'Listas de Control de Acceso';
+$labels['acl_plugindescription'] = 'Administración de Lista de Control de Acceso a Carpetas.';
+$labels['vacation_pluginname'] = 'Respuesta Automática';
+$labels['vacation_plugindescription'] = 'Administrar Respuestas Automáticas (notificación de vacaciones).';
+$labels['password_pluginname'] = 'Cambiar Contraseña';
+$labels['password_plugindescription'] = 'Permite al usuario cambiar su contraseña.';
+$labels['redundant_attachments_pluginname'] = 'Adjuntos Redundantes';
+$labels['redundant_attachments_plugindescription'] = 'Proporciona un almacenamiento redundante para archivos adjuntos cargados temporales. Se almacenan tanto en la base de datos así como en el sistema de archivos local.';
+$labels['example_addressbook_pluginname'] = 'Libreta de direcciones de ejemplo ';
+$labels['example_addressbook_plugindescription'] = 'Código de ejemplo para agregar una libreta de direcciones adicional.';
+$labels['debug_logger_pluginname'] = 'Registros de Depuración';
+$labels['debug_logger_plugindescription'] = 'Permite registros mejorados para fines de depuración.';
+$labels['show_additional_headers_pluginname'] = 'Mostrar encabezados de mensajes adicionales';
+$labels['show_additional_headers_plugindescription'] = 'Complemento de concepto-de-prueba para que se capturen cabeceras adicionales y sean mostradas en la vista de mensajes.';
+$labels['additional_message_headers_pluginname'] = 'Encabezados de Mensajes Adicionales';
+$labels['additional_message_headers_plugindescription'] = 'Complemento sencillo que agrega encabezados adicionales o los elimina de mensajes salientes.';
+$labels['new_user_identity_pluginname'] = 'Nueva Identidad de Usuario';
+$labels['new_user_identity_plugindescription'] = 'Autocompleta identidad predeterminada de un nuevo usuario de LDAP en su primera visita.';
+$labels['squirrelmail_usercopy_pluginname'] = 'Migrar Usuarios Squirrelmail';
+$labels['squirrelmail_usercopy_plugindescription'] = 'Copia la identidad de un nuevo usuario y la configuración de una instalación Squirrelmail cercana.';
+$labels['yubikey_authentication_pluginname'] = 'Autenticación Yubikey de Yubico';
+$labels['yubikey_authentication_plugindescription'] = 'Complemento para utilizar la autenticación YubiKey de Yubico en Roundcube webmail.';
+$labels['sauserprefs_pluginname'] = 'Preferencias de Usuario para Spamassassin';
+$labels['sauserprefs_plugindescription'] = 'Añade una pestaña de \'spam\' a los \'Ajustes personales\' para permitir al usuario cambiar sus preferencias de SpamAssassin.';
+$labels['dkimstatus_pluginname'] = 'DKIM status';
+$labels['dkimstatus_plugindescription'] = 'DKIMSTATUS muestra el estado de la firma DKIM en cada correo que lee en Roundcube.';
+$labels['roundcube_openpgp_pluginname'] = 'Roundcube OpenPGP';
+$labels['roundcube_openpgp_plugindescription'] = 'Esta extensión implementa OpenPGP en Roundcube. Ayuda a generar, administrar y utilizar claves de cifrado.';
+$labels['automatic_addressbook_pluginname'] = 'Libreta de Direcciones Automática';
+$labels['automatic_addressbook_plugindescription'] = 'Crea una libreta de direcciones e inserta automáticamente las direcciones de correos electrónicos contactados. Esto elimina la necesidad de añadir manualmente cada contacto.';
+$labels['calendar_pluginname'] = 'Calendario';
+$labels['calendar_plugindescription'] = 'Administre sus eventos con el Calendario Webmail.';
+$labels['attachment_reminder_pluginname'] = 'Recordatorio de adjuntos';
+$labels['attachment_reminder_plugindescription'] = 'Recordar a usuarios adjuntar un archivo antes de enviar mensajes.';
+
+?> \ No newline at end of file
diff --git a/plugin_manager/localization/fi_FI.inc b/plugin_manager/localization/fi_FI.inc
new file mode 100644
index 0000000..09f4205
--- /dev/null
+++ b/plugin_manager/localization/fi_FI.inc
@@ -0,0 +1,252 @@
+<?php
+/*
+ +-----------------------------------------------------------------------+
+ | ./plugins/plugin_manager/localization/fi_FI.inc
+ |
+ | Language file of MyRoundcube Plugins Bundle
+ | Copyright (C) 2010-2015, Roland 'rosali' Liebl
+ |
+ +-----------------------------------------------------------------------+
+ | Author: Markku Virtanen - 01/13/2015 11:52:45
+ +-----------------------------------------------------------------------+
+*/
+
+$labels = array();
+$labels['pluginname'] = 'Liitännäisten hallinta';
+$labels['plugindescription'] = 'Liitännäisten hallinta antaa käyttäjille mahdollisuuden liitännäisten aktivointiin ja/tai päältä pois ottamiseen (käyttäjätasolla). Webmailin hallintatunnuksilla saa tietoa päivityksistä, ajantasalla olevista liitännäisistä, bugikorjauksista, keskitetyt lataukset, ohjeet ja suosituksista. Liitännäinen...';
+$labels['plugin_manager_title'] = 'Hallinnoi liitännäisiä';
+$labels['plugin_manager_center'] = 'Liitännäisten hallintaportaali';
+$labels['updatepm'] = 'Liitännäisten hallintaan on päivitys olemassa.';
+$labels['updatepmrequired'] = 'Päivitys liitännäisten hallintaan tarvitaan.';
+$labels['downloadnow'] = 'Lataa nyt';
+$labels['homepage'] = 'Kotisivu';
+$labels['calendaring'] = 'Kalenteri';
+$labels['misc'] = 'Sekalaiset';
+$labels['downloads'] = 'lataukset';
+$labels['issue'] = 'Ongelma';
+$labels['submitissue'] = 'Raportoi ongelma.<br><br>Tarkista lokitiedostot ja anna tarvittavat tiedot tikettiin.<br><br><b>HUOMIO</b>: Google tili tarvitaan.';
+$labels['showall'] = 'Näytä kaikki liitännäiset';
+$labels['hideuptodate'] = 'Näyt vain päivitykset';
+$labels['connectionerror'] = 'Etäpalvelin ei vastannut yhdistämisyritykseen.';
+$labels['trylater'] = 'Ole hyvä ja yritä myöhemmin uudestaan...';
+$labels['translate'] = 'Käännä tämä liitännäinen';
+$labels['translationaccount'] = 'Reaaliaikaisen kääntämisen tili (käyttäjänimi)';
+$labels['translationserver'] = 'Reaaliaikaisen kääntämisen tili (IMAP palvelin)';
+$labels['whatsthis'] = 'Mikä tämä on?';
+$labels['restoredefaults'] = 'Palauta oletukset';
+$labels['checkall'] = 'Ruksaa kaikki';
+$labels['uncheckall'] = 'Ruksi pois kaikista';
+$labels['toggle'] = 'Käännä valinnat';
+$labels['status'] = 'Tila';
+$labels['globalplugins'] = 'Globaalit liitännäiset';
+$labels['performance'] = 'Suorituskyky';
+$labels['backend'] = 'Palvelin liitännäiset';
+$labels['messagesmanagement'] = 'Viestien hallinta';
+$labels['furtherconfig'] = 'Haluatko muuttaa tämän liitännäisen asetuksia nyt?';
+$labels['uninstall'] = 'Olet ottamassa tämän liitännäisen pois päältä. Haluatko pysyvästi poistaa kaikki tallennetut asetukset?';
+$labels['uninstallconfirm'] = 'Olet poistamassa tämän liitännäisen pois käytöstä. VAROITUS: Valitse »POIS PÄÄLTÄ« ottaaksesi liitännäisen pois päältä mutta säilyttäen tämänhetkiset tiedot ja asetukset palvelimella jos haluat käyttää niitä uudestaan. Valitse »POISTA« poistaaksesi myös tiedot ja asetukset';
+$labels['areyousure'] = 'Et voi peruuttaa tätä. Oletko aivan varma?';
+$labels['successfullydeleted'] = 'Asetukset poistettu.';
+$labels['successfullysaved'] = 'Tallennus onnistui.';
+$labels['errorsaving'] = 'Tapahtui virhe tallentaessa.';
+$labels['yes'] = 'Kyllä';
+$labels['no'] = 'Ei';
+$labels['disable'] = 'Pois päältä';
+$labels['remove'] = 'Poista';
+$labels['savewarning'] = 'Haluatko jo nyt tallentaa muutokset?';
+$labels['plugin_manager_update'] = 'Pävitä liitännäiset';
+$labels['authors_comments'] = 'Tekijän kommentit (ei käännetty)';
+$labels['requiredby'] = 'Liitännäinen vaatii liitännäisen';
+$labels['requires'] = 'Liitännäinen vaatii';
+$labels['recommended'] = 'Suositellut liitännäiset';
+$labels['update_plugins'] = 'Liitännäisten lataus';
+$labels['ziparchive'] = 'Lataa ZIP-paketti';
+$labels['demoaccount'] = 'Sori, et voi tehdä tätä (Esittely tili)';
+$labels['serverversion'] = 'Palvelinversio';
+$labels['mirrorversion'] = 'Mirror versio';
+$labels['mirrorhost'] = 'Mirror palvelin';
+$labels['comments'] = 'Vaatimukset ja päivitystiedot';
+$labels['update_error'] = 'Versiot eivät täsmänneet';
+$labels['update_ok'] = 'Uusin löydetty. Ei tarvetta päivitykselle.';
+$labels['update_edit'] = 'Liitännäisen asetukset pitää tehdä uudestaan tai vaatii tietokantamuutoksia. Katso päivitystiedot.';
+$labels['servernewer'] = 'Rekisteröity liitännäinen on uudempi kuin mirror versio.';
+$labels['orhigher'] = 'tai uudempi';
+$labels['rc_ok'] = 'Roundcube Core on ajan tasalla.';
+$labels['update_update'] = 'Liitännäinen on vanhentunut. Ole hyvä ja päivitä! Katso myös päivitystiedot.';
+$labels['noupdates'] = 'Ei valittuja päivityksiä.';
+$labels['rc_update'] = 'Roundcube Core ei ole ajan tasalla. Ole hyvä ja päivitä!';
+$labels['rc_uptodate'] = 'Roundcube Core on ajan tasalla.';
+$labels['rc_newer'] = 'Roundcube Core on uudempi kuin mirror versio.';
+$labels['nottested'] = 'Käytä liitännäisiä varoen! Emme tiedä toimivatko kyseiset liitännäiset Roundcube v%s.';
+$labels['justunzip'] = 'Pura tiedosto olemassaolevaan asennukseen.';
+$labels['guide'] = 'Lue lisää...';
+$labels['thirdparty'] = 'Tämä ei ole MyRoundcube liitännäinen';
+$labels['thirdpartywarning'] = 'Tämä on kolmannen osapuolen liitännäinen. Ei ole suositeltavaa ladata tätä liitännäistä peilauspalvelimeltamme. Lataa tiedosto mieluummin kehittäjän sivustolta jotta saat varmasti uusimman version ohjeiden ja avun kera.';
+$labels['develsite'] = 'Lataa';
+$labels['notinstalled'] = 'ei asennettu';
+$labels['notregistered'] = 'ei rekisteröity';
+$labels['roundcubeurl'] = 'Lataa Roundcube';
+$labels['languageupdate'] = 'Kielikäännös päivitys saatavilla.';
+$labels['localizationfilesonly'] = 'Huomio: Lataus sisältää vain kielitiedostot';
+$labels['donotregister'] = 'Älä rekisteröi tätä liitännäistä. Se on ladattu automaattisesti.';
+$labels['register'] = 'Rekisteröi tämä liitännäinen liitännäisten hallinnasta tai ./config/config.inc.php <small>[$config[\'plugins\'] = array("<i>foo</i>", "<i>bar</i>");]</small>.';
+$labels['customer_account'] = 'Asiakastili';
+$labels['customer_id'] = 'Asiakasnumero';
+$labels['invalid_customer_id'] = 'Väärä asiakasnumero';
+$labels['invalid_credits'] = 'Väärät krediitit';
+$labels['successfully_transferred'] = 'Krediittien siirto onnistui';
+$labels['merge'] = 'Yhdistä krediittejä';
+$labels['credits'] = 'Krediitit';
+$labels['creditsupdated'] = 'Krediitit ovat muuttuneet sitten viime sivupäivityksen';
+$labels['buynow'] = 'Osta krediittejä nyt';
+$labels['history'] = 'Tilihistoria';
+$labels['details'] = 'Tiedot';
+$labels['receipt'] = 'Kuitti';
+$labels['plugins'] = 'Liitännäiset';
+$labels['clickhere'] = 'Klikkaa tästä';
+$labels['discardliabletopaycosts'] = 'Älä ota huomioon maksullisia latauksia';
+$labels['unchecknotinstalledplugins'] = 'Älä ota huomioon asennettuja liitännäisiä';
+$labels['sum'] = 'Summa';
+$labels['show'] = 'Näytä';
+$labels['hide'] = 'Piilota';
+$labels['view'] = 'näytä';
+$labels['expired'] = 'ei ole voimassa';
+$labels['terms'] = 'Ehdot';
+$labels['pricelist'] = 'Lataus hinnasto';
+$labels['forthisdownload'] = 'tälle lataukselle';
+$labels['remainingcredits'] = 'jäljellä olevat krediitit';
+$labels['initialdownload'] = 'Ensilataus';
+$labels['keyfeatureaddition'] = 'Uusi keskeinen piirre';
+$labels['codeimprovements'] = 'Koodin parannukset';
+$labels['servicenotavailable'] = 'Palvelu ei ole tällä hetkellä käytössä. Kokeile myöhemmin uudelleen!';
+$labels['myrcerror'] = 'MyRoundcube palvelut eivät tällä hetkellä ole käytössä.';
+$labels['getnew'] = 'Hanki uusi asiakasnumero';
+$labels['getnew_hint'] = 'Suosittellemme uusimaan asiakasnumeronne usein. Jos huomaatte epäilyttävää toimintaa tilin tiedoissa, uusikaa asiakasnumero välittömästi.';
+$labels['transfer'] = 'Siirrä krediittejä';
+$labels['submenuprefix'] = '» ';
+$labels['printdetails'] = 'Tulosta tilin tiedot';
+$labels['noplugindescription'] = 'Liitännäiseltä ei löytynyt lisätietoja';
+$labels['welcome_to_plugin_manager'] = 'Tervetuloa liitännäisten hallinnointiin';
+$labels['about_to_create_account'] = 'Liitännäisten hallinnointi on luomassa ylläpitotilin.';
+$labels['create_account_proceed'] = 'Jatkaaksesi sinun täytyy varmistaa että olet palvelun ylläpitäjä';
+$labels['please_create'] = 'Ole hyvä ja luo seuraava tiedosto Roundcube asennuksen juureen:';
+$labels['thank_you'] = 'Kiitos!';
+$labels['done'] = 'Valmis';
+$labels['manage_admins'] = 'Ylläpitäjät';
+$labels['plugin_manager_admins'] = 'Liitännäisten hallinnoinnin ylläpitäjät';
+$labels['allow_plugins_configuration'] = 'Anna liitännäisten konfigurointiin oikeuksia';
+$labels['share_credits'] = 'Jaa MyRC$ krediittejä';
+$labels['add'] = 'Lisää';
+$labels['accountnotexists'] = 'Tiliä ei ole olemassa';
+$labels['sharedby'] = 'Asiakastilin jakoi ';
+$labels['switch'] = 'Vaihda';
+$labels['ownaccount'] = 'omaan tiliin';
+$labels['shareinvitation'] = 'jaettuun tiliin';
+$labels['enable_notifications'] = 'Laita päälle liitännäisten päivitysilmoitukset';
+$labels['enable_notifications_note'] = 'Huomio: Liitännäisten hallinnointi kyselee MyRoundcube palvelimilta saatavilla olevia päivityksiä kerran päivässä.';
+$labels['notifications_cc'] = 'Kopio ilmoituksista';
+$labels['notifications_cc_note'] = 'Huomio: Päivitysten ilmoitukset lähetetään kaikille liitännäisten hallinta ylläpitäjille. Käytä tätä kenttää lähettääksesi ulkopuolisille ilmoituksia päivityksistä. Esim. johd.doh@gmail.com tai postistuslistaosoite.';
+$labels['serverconfiguration'] = 'Palvelinasetukset';
+$labels['pluginsconfiguration'] = 'Liitännäisten asetukset';
+$labels['use_ssl'] = 'Käytä salattuja SSL yhteyksiä MyRoundcube palvelimilla';
+$labels['use_hmail'] = 'Käytä hMailserver yhteensopivia liitännäisiä';
+$labels['load_splitter'] = 'Lataa staattiset tiedostot toisaalla';
+$labels['show_myrc_messages'] = 'Näytä ilmoitusviestit MyRoundcube palvelimilta';
+$labels['maintenance_mode'] = 'Huoltokatko';
+$labels['maintenance_mode_hint'] = 'Väliaikaikaisesti otetaan kaikki aktiiviset liitännäiset pois päältä. Käytetään liitännäisten päivitykseen isojen päivitysten kanssa. Liitännäisten hallinta ottaa pois päältä kaikki aktiiviset liitännäiset, mutta antaa sinulle pääsyn liitännäisten hallintaportaaliin jotta voit ladata viimeisimmät pävitykset peilauspalvelimiltamme.';
+$labels['running_in_maintenance_mode'] = 'Webmailissa on huoltokatko';
+$labels['serverwide'] = 'koko palvelimen asetukset';
+$labels['file_based_config'] = 'Ota käyttöön tiedostopohjainen liitännäisten hallinnointi';
+$labels['advanced_admins'] = 'suositellaan vain edistyneille ylläpitäjille';
+$labels['compress_html'] = 'Pienennä HTML ulostulo';
+$labels['show_config'] = 'Näytä tämänhetkiset asetukset';
+$labels['systemadmin'] = 'Järjestelmän ylläpitäjä';
+$labels['admin'] = 'Ylläpitäjä';
+$labels['configuredby'] = 'asetukset tehnyt';
+$labels['enabled'] = 'Päällä (oletus)';
+$labels['protected'] = 'Suojattu';
+$labels['skins'] = 'Skinit';
+$labels['loads_always'] = 'Pakollinen';
+$labels['loads_never'] = 'Liitännäinen on pois päältä';
+$labels['loads_by_user'] = 'Käyttäjä voi päättää sen käytöstä';
+$labels['loads_linked'] = 'Liitetty';
+$labels['unbind'] = 'irrota';
+$labels['bind'] = 'liitä';
+$labels['addplugin'] = 'Lisää liitännäinen';
+$labels['removeplugin'] = 'Poista liitännäinen';
+$labels['errorplugin'] = 'Virhe: Vaadittuja liitännäisiä ei löytynyt';
+$labels['errorrcversion'] = 'Virhe: Liitännäinen vaatii Roundcuben';
+$labels['errorphpversion'] = 'Virhe: Liitännäinen vaatii PHP:n';
+$labels['errorphpcurl'] = 'Virhe: cURL ei ole asennettu';
+$labels['errorphpfinfo'] = 'Virhe: finfo ei ole asennettu';
+$labels['errordb'] = 'Tietokantamuutokset vaaditaan. Ole hyvä ja ota liitännäinen käyttöön aloittaaksesi tietokantamuutokset.';
+$labels['errordb8'] = 'Tietokantamuutokset vaaditaan.';
+$labels['syntaxerror'] = 'PHP syntaksivirhe';
+$labels['notconfigured'] = 'Liitännäistä ei ole konfiguroitu';
+$labels['editconfig'] = 'Muokkaa konfiguraatiota';
+$labels['instructions'] = 'Ohjeet';
+$labels['dbautomatically'] = 'Aloita toimet';
+$labels['dbmanually'] = 'Noudata näitä ohjeita.';
+$labels['ornewer'] = 'tai uudemppi';
+$labels['official_releases'] = 'tuemme vain virallisia Roundcube julkasuja';
+$labels['localizationmissing'] = 'Ei löytynyt liitännäisen nimeä tai liitännäisen lisätietoja';
+$labels['documentation'] = 'Dokumentaatio';
+$labels['select_plugin'] = 'Valitse liitännäinen';
+$labels['legend'] = 'Selitys';
+$labels['plugindisabledbydefault'] = 'Liitännäinen on pois käytöstä oletuksena - Käyttäjä voi määrittää sen käytöstä';
+$labels['pluginenabledbydefault'] = 'Liitännäinen on päällä oletuksena - Käyttäjä voi määrittää sen käytöstä';
+$labels['pluginmandatory'] = 'Pakollinen - Liitännäinen on päällä, käyttäjä ei voi kytkeä päälle tai poistaa käytöstä liitännäistä';
+$labels['show_about_link'] = 'Näytä "Tietoa" linkki';
+$labels['show_support_link'] = 'Näytä "Tuki" linkki';
+$labels['use_myroundcube_watermark'] = 'Käytä "MyRoundcube" vesileimaa';
+$labels['remove_watermark'] = 'Älä näytä vesileimaa ollenkaan';
+$labels['database'] = 'Tietokanta';
+$labels['account_details_compressed'] = 'Tilin tiedot pakattuna';
+$labels['credits_transferred'] = 'Krediittejä siirretty';
+$labels['customer_id_changed'] = 'Asiakasnumero muutettu';
+$labels['myrcd_bought'] = 'MyRC$ ostettu - Kiitos!';
+$labels['myrcd_refunded'] = 'MyRC$ takaisinmaksettu';
+$labels['PHPMyAdmin'] = 'PHPMyAdmin';
+$labels['ipmismatch'] = 'Lataus ei mahdollista IP osoitteesta %s <small>(IP ei täsmää)</small>.<br>Käytä %s tai selaa %s IP osoitteista %s.';
+$labels['emoticons_pluginname'] = 'Emoticon lyhenteet';
+$labels['emoticons_plugindescription'] = 'Vaihda emoticon lyhenteet hymiökuvilla';
+$labels['markbuttons_pluginname'] = 'Merkkaa viestit painikkeet';
+$labels['markbuttons_plugindescription'] = 'Lisää kuvakkeet viestilistan erottimeen jotta voit nopeasti merkata viestejä.';
+$labels['keyboard_shortcuts_pluginname'] = 'Pikanäppäimet';
+$labels['keyboard_shortcuts_plugindescription'] = 'Syötä komentoja käyttäen pikanäppäimiä';
+$labels['message_highlight_pluginname'] = 'Korosta viestejä';
+$labels['message_highlight_plugindescription'] = 'Korosta viestit jotka täsmäävät suotimiisi.';
+$labels['google_contacts_pluginname'] = 'Google Kontaktit';
+$labels['google_contacts_plugindescription'] = 'Pääsy Google kontakteihin';
+$labels['contextmenu_pluginname'] = 'Pikavalikko';
+$labels['contextmenu_plugindescription'] = 'Aseta päälle oikean hiiren klikkauksen pikavalikko toiminnot.';
+$labels['newmail_notifier_pluginname'] = 'Uusi viesti muistuttaja';
+$labels['newmail_notifier_plugindescription'] = 'Muistuta uusista viesteisteistä';
+$labels['listcommands_pluginname'] = 'Vastaa postituslistoihin';
+$labels['listcommands_plugindescription'] = 'Erinäisiä valintoja vastata viesteihin jotka ovat tulleet postituslistoilta.';
+$labels['copymessage_pluginname'] = 'Kopioi viesti(t)';
+$labels['copymessage_plugindescription'] = 'Kopioi viesti(t) toiseen IMAP kansioon.';
+$labels['vcard_attachments_pluginname'] = 'vCard liitteet';
+$labels['vcard_attachments_plugindescription'] = 'Lisää laatikko viesteihin joissa on vcard-liite lisätäksesi sen suoraan osoitekirjaan.';
+$labels['zipdownload_pluginname'] = 'Vie viestejä';
+$labels['zipdownload_plugindescription'] = 'Vie viestejä .zip tiedostossa.';
+$labels['markasjunk2_pluginname'] = 'Merkkaa roskapostiviestit';
+$labels['markasjunk2_plugindescription'] = 'Merkkaa viestit roskaposteiksi.';
+$labels['markasjunk_pluginname'] = 'Merkkaa roskapostiviestit';
+$labels['markasjunk_plugindescription'] = 'Merkkaa viestit roskaposteiksi.';
+$labels['google_analytics_pluginname'] = 'Google Analytics';
+$labels['google_analytics_plugindescription'] = 'Lisää Google Analytics';
+$labels['jqueryui_pluginname'] = 'Jqueryui';
+$labels['jqueryui_plugindescription'] = 'Jqueryui javascript kirjasto';
+$labels['autologon_pluginname'] = 'Autologon';
+$labels['autologon_plugindescription'] = 'Kirjaudu automaattisesti';
+$labels['dblog_pluginname'] = 'Lokita tietokantaan';
+$labels['dblog_plugindescription'] = 'Kirjoittaa lokit tietokantaan tiedoston sijaan';
+$labels['http_request_pluginname'] = 'HTTP Request';
+$labels['http_request_plugindescription'] = 'Helper lisäosa jolla voidaan tehdä HTTP pyyntöjä cURLin tai fsockopenin avulla';
+$labels['http_auth_pluginname'] = 'HTTP autentikointi';
+$labels['http_auth_plugindescription'] = 'Helper lisäosa tuki HTTP autentikoinnille käytettäväksi muissa lisäosissa. Huom: tämä lisäosa on eri kuin Roundcuben http_authentication lisäosa.';
+$labels['jscolor_pluginname'] = 'Värivalitsin';
+$labels['jscolor_plugindescription'] = 'Helper lisäosa jolla näytetään värivalitsin';
+
+?> \ No newline at end of file
diff --git a/plugin_manager/localization/fr_FR.inc b/plugin_manager/localization/fr_FR.inc
new file mode 100644
index 0000000..b795890
--- /dev/null
+++ b/plugin_manager/localization/fr_FR.inc
@@ -0,0 +1,346 @@
+<?php
+/*
+ +-----------------------------------------------------------------------+
+ | ./plugins/plugin_manager/localization/fr_FR.inc
+ |
+ | Language file of MyRoundcube Plugins Bundle
+ | Copyright (C) 2010-2015, Roland 'rosali' Liebl
+ |
+ +-----------------------------------------------------------------------+
+ | Author: Olivier Zolli - 01/20/2015 18:23:27
+ +-----------------------------------------------------------------------+
+*/
+
+$labels = array();
+$labels['pluginname'] = 'Gestionnaire de plugins';
+$labels['plugindescription'] = 'Le gestionnaire de plugins fournit aux utilisateurs des options pour activer ou désactiver les plugins (au niveau du compte utilisateur) tandis qu\'il aide les administrateurs à maintenir leur système à jour avec des mises à jour de plugins, des corrections de bugs, des téléchargements et documentations centralisés. Le gestionnaire de plugins ne modifie pas votre système de fichiers et n\'installe pas les plugins automatiquement';
+$labels['plugin_manager_title'] = 'Gestionnaire de Plugins';
+$labels['plugin_manager_center'] = 'Centre de gestion des plugins';
+$labels['updatepm'] = 'Une mise à jour du Plugin_Manager est disponible';
+$labels['updatepmrequired'] = 'La mise à jour de Plugin_manager est nécessaire';
+$labels['downloadnow'] = 'Téléchargez maintenant';
+$labels['homepage'] = 'Accueil';
+$labels['calendaring'] = 'Gestion de calendrier';
+$labels['misc'] = 'Divers';
+$labels['downloads'] = 'Traduire ce plugin';
+$labels['issue'] = 'Problème';
+$labels['submitissue'] = 'Rapporter un problème.<br /><br />Merci de vérifier vos logs et fournir des informations pertinentes dans le billet.<br /><br /><b>NOTE</b>: Un compte google est requis.';
+$labels['showall'] = 'Montrer tous les plugins';
+$labels['hideuptodate'] = 'Ne montrer que les mises à jour';
+$labels['connectionerror'] = 'Le serveur distant n\'a pas répondu à une tentative de connexion.';
+$labels['trylater'] = 'Merci de réessayer plus tard...';
+$labels['translate'] = 'Traduire ce plugin';
+$labels['translationaccount'] = 'Traduction en temps réel (Nom d\'utilisateur)';
+$labels['translationserver'] = 'Traduction en temps réel (Serveur IMAP)';
+$labels['whatsthis'] = 'Plus d\'info...';
+$labels['restoredefaults'] = 'Paramètres par défaut';
+$labels['checkall'] = 'Tout cocher';
+$labels['uncheckall'] = 'Tout décocher';
+$labels['toggle'] = 'Inverser la sélection';
+$labels['status'] = 'Status';
+$labels['globalplugins'] = 'Plugins génériques';
+$labels['performance'] = 'Performance';
+$labels['backend'] = 'Plugins serveur';
+$labels['messagesmanagement'] = 'Gestion des messages';
+$labels['furtherconfig'] = 'Voulez-vous configurer le plugin maintenant?';
+$labels['uninstall'] = 'Vous êtes sur le point de désactiver ce plugin. Voulez-vous supprimer tous les paramètres enregistrés de façon permanente?';
+$labels['uninstallconfirm'] = 'Vous êtes sur le point de désactiver ce plugin. AVERTISSEMENT: Sélectionner »DÉSACTIVER« pour désactiver ce plugin tout en gardant vos données actuelles et la configuration stockée sur notre serveur si vous prévoyez de l\'utiliser à nouveau plus tard. Sélectionnez »SUPPRIMER« si vous voulez que toutes les données de configuration gérés par ce plugin soient définitivement supprimées de nos bases de données. Notez que cette action ne peut pas est irréversible.';
+$labels['areyousure'] = 'Vous ne pouvez pas annuler cette action. Etes-vous vraiment sûr?';
+$labels['successfullydeleted'] = 'Les paramètres ont été supprimés avec succès.';
+$labels['successfullysaved'] = 'Enregistré avec succès.';
+$labels['errorsaving'] = 'Une erreur est survenue lors de l\'enregistrement.';
+$labels['yes'] = 'Oui';
+$labels['no'] = 'Non';
+$labels['disable'] = 'Désactiver';
+$labels['remove'] = 'Supprimer';
+$labels['savewarning'] = 'Voulez-vous enregistrer vos modifications?';
+$labels['plugin_manager_update'] = 'Mise à jour des plugins';
+$labels['authors_comments'] = 'Commentaires de l\'auteur (non traduit)';
+$labels['requiredby'] = 'Le plugin est requis par';
+$labels['requires'] = 'Plugin requis';
+$labels['recommended'] = 'Plugin recommandé';
+$labels['update_plugins'] = 'Mise à jour du plugin';
+$labels['ziparchive'] = 'Télécharger une archive ZIP';
+$labels['demoaccount'] = 'Désolé, pas de téléchargements (Compte de démonstration)';
+$labels['serverversion'] = 'Version serveur';
+$labels['mirrorversion'] = 'Version distante';
+$labels['mirrorhost'] = 'Serveur distant';
+$labels['comments'] = 'Pré-requis et notes de mise à jour';
+$labels['update_error'] = 'Différence de version';
+$labels['update_ok'] = 'Version la plus récente a été détectée. Pas de mise à jour nécessaire.';
+$labels['update_edit'] = 'Le plugin doit être re-configuré ou nécessite des ajustements de base de données. S\'il vous plaît tenez compte des notes de mise à jour.';
+$labels['servernewer'] = 'Le plugin enregistré est plus récente que la version distante.';
+$labels['orhigher'] = 'ou supérieure';
+$labels['rc_ok'] = 'Roundcube est à jour.';
+$labels['update_update'] = 'Le plugin est obsolète. Mettez à jour s\'il vous plait! Tenez compte des notes de mise à jour.';
+$labels['noupdates'] = 'Aucune mise à jour sélectionnée.';
+$labels['rc_update'] = 'Roundcube n\'est pas à jour. Mettez le à jour s\'il vous plait!';
+$labels['rc_uptodate'] = 'Roundcube est à jour.';
+$labels['rc_newer'] = 'Votre version de roundcude est plus récente que la version distante!';
+$labels['nottested'] = 'S\'il vous plaît utilisez les plugins avec prudence! Nous ne savons pas si Plugins hébergés fonctionnent avec Roundcube v%s.';
+$labels['justunzip'] = 'Il suffit de décompresser l\'archive sur votre installation existante.';
+$labels['guide'] = 'En savoir plus...';
+$labels['thirdparty'] = 'Ce n\'est pas un plugin MyRoundcube.';
+$labels['thirdpartywarning'] = 'Ceci est un plugin tiers. Nous vous recommandons de ne pas télécharger le plugin à partir de ce serveur distant. Téléchargez-le à partir du site du développeur pour être sûr d\'avoir la version la plus récente et prenez en compte les conseils du développeur.';
+$labels['develsite'] = 'Téléchargement';
+$labels['notinstalled'] = 'pas installé';
+$labels['notregistered'] = 'pas enregistré';
+$labels['roundcubeurl'] = 'Télécharger Roundcube';
+$labels['languageupdate'] = 'Une mise à jour de la traduction est disponible.';
+$labels['localizationfilesonly'] = 'Note: Le téléchargement ne contient que les traductions';
+$labels['donotregister'] = 'N\'enregistrez pas ce plugin. Il sera chargé automatiquement.';
+$labels['register'] = 'Enregistrez ce plugin dans ./config/config.inc.php <small>[$config[\'plugins\'] = array("<i>foo</i>", "<i>bar</i>");]</small>.';
+$labels['customer_account'] = 'Compte client';
+$labels['customer_id'] = 'Numéro de client';
+$labels['invalid_customer_id'] = 'Mauvais identifiant Customer_ID';
+$labels['invalid_credits'] = 'Pas assez de crédits';
+$labels['successfully_transferred'] = 'Crédits transférés avec succès';
+$labels['merge'] = 'Fusionner les crédits';
+$labels['credits'] = 'Crédits';
+$labels['creditsupdated'] = 'Les crédits ont changé depuis le dernier rafraichissement de la page';
+$labels['buynow'] = 'Acheter des crédits maintenant';
+$labels['history'] = 'Historique du compte';
+$labels['details'] = 'Détails';
+$labels['receipt'] = 'Reçu';
+$labels['plugins'] = 'Plugins';
+$labels['clickhere'] = 'Cliquez ici';
+$labels['discardliabletopaycosts'] = 'Enlever les téléchargements payants';
+$labels['unchecknotinstalledplugins'] = 'Abandonnez le téléchargement des plugins non installés ';
+$labels['sum'] = 'Résumé';
+$labels['show'] = 'Montrer';
+$labels['hide'] = 'Cacher';
+$labels['view'] = 'Voir';
+$labels['expired'] = 'Expiré';
+$labels['terms'] = 'Conditions';
+$labels['pricelist'] = 'Coûts des téléchargements';
+$labels['forthisdownload'] = 'Pour ce téléchargement';
+$labels['remainingcredits'] = 'Crédits restants';
+$labels['initialdownload'] = 'Premier téléchargement';
+$labels['keyfeatureaddition'] = 'Nouvelle fonctionnalité clée';
+$labels['codeimprovements'] = 'Amélioration de code';
+$labels['servicenotavailable'] = 'Le service est actuellement indisponible. Merci de rééssayer ultérieurement';
+$labels['myrcerror'] = 'Le service MyRoundcube est actuellement indisponible';
+$labels['getnew'] = 'Demander un nouveau numéro de client';
+$labels['getnew_hint'] = 'Nous vous recommandons de renouveler votre numéro de client fréquemment. Si vous détéctez une activité suspecte le détail de votre compte, renouvelez votre numéro de client immédiatement.';
+$labels['transfer'] = 'Transférer des crédits';
+$labels['submenuprefix'] = ' » ';
+$labels['printdetails'] = 'Imprimer les détails du compte';
+$labels['noplugindescription'] = 'Aucune description n\'est disponible pour ce plugin.';
+$labels['welcome_to_plugin_manager'] = 'Bienvenue dans le Plugin_Manager';
+$labels['about_to_create_account'] = 'Le Plugin_Manager va créer un compte d\'administrateur';
+$labels['create_account_proceed'] = 'Veuillez confirmer que vous êtes bien l\'administrateur';
+$labels['please_create'] = 'Veuillez SVP créer un fichier vide avec ce nom dans le répertoire racine de votre installation RoundCube';
+$labels['thank_you'] = 'Merci !';
+$labels['done'] = 'Terminé';
+$labels['manage_admins'] = 'Administrateurs';
+$labels['plugin_manager_admins'] = 'Administrateurs du Plugin_Manager';
+$labels['allow_plugins_configuration'] = 'Accorder les permissions de configuration du Plugin_Manager';
+$labels['share_credits'] = 'Partager les crédits MyRC$';
+$labels['add'] = 'Ajouter';
+$labels['accountnotexists'] = 'Compte inexistant';
+$labels['sharedby'] = 'compte client partagé pars';
+$labels['switch'] = 'Changer';
+$labels['ownaccount'] = 'vers son propre compte';
+$labels['shareinvitation'] = 'vers un compte partagé';
+$labels['enable_notifications'] = 'Activer les notifications de mise à jour des plugins';
+$labels['enable_notifications_note'] = 'Note : Le gestionnaire de plugins ne cherche les mises à jour sur les serveurs miroir MyRoundcube qu\'une fois par jour.';
+$labels['notifications_cc'] = 'Cc pour les notifications';
+$labels['notifications_cc_note'] = 'Note : Les notifications de mise à jour sont envoyées à tous les administrateurs du gestionnaire de plugins. Utilisez ce champ pour notifier un destinataire supplémentaire. Par exemple john.doh@gmail.com ou une adresse de mailing list.';
+$labels['serverconfiguration'] = 'Configuration du serveur';
+$labels['pluginsconfiguration'] = 'Configuration des plugins';
+$labels['use_ssl'] = 'Etablir une connexion sécurisée SSL vers les serveurs MyRoundCube';
+$labels['use_hmail'] = 'Utiliser les plugins HMailserver';
+$labels['load_splitter'] = 'Décharge les fichiers statiques';
+$labels['show_myrc_messages'] = 'Afficher les notifications en provenance des serveurs MyRoundCube';
+$labels['maintenance_mode'] = 'Mode maintenance';
+$labels['maintenance_mode_hint'] = 'Désactive temporairement l\'ensemble des plugins. Utilisé lors d\'une mise à jour majeure. Plugin Manager désactive tous les plugins actifs, vous permettant de toujours accéder au centre de gestion des plugins pour télécharger les dernières versions depuis nos miroirs.';
+$labels['running_in_maintenance_mode'] = 'Le webmail est exécuté en mode maintenance.';
+$labels['serverwide'] = 'configuration sur le serveur';
+$labels['file_based_config'] = 'Activer la configuration du Plugin_manager via le fichier de config';
+$labels['advanced_admins'] = 'recommandé pour les administrateurs expérimentés';
+$labels['compress_html'] = 'Compresser l\'export HTML';
+$labels['show_config'] = 'Montrer Afficher la configuration par défaut';
+$labels['systemadmin'] = 'Administrateur système';
+$labels['admin'] = 'Administrateur';
+$labels['configuredby'] = 'configuré par';
+$labels['enabled'] = 'Activé (defaut)';
+$labels['protected'] = 'Protégé';
+$labels['skins'] = 'Skins';
+$labels['loads_always'] = 'Obligatoire';
+$labels['loads_never'] = 'Plugin désactivé';
+$labels['loads_by_user'] = 'L\'utilisateur peut déterminer son usage';
+$labels['loads_linked'] = 'Lié à';
+$labels['unbind'] = 'non lié';
+$labels['bind'] = 'lié';
+$labels['addplugin'] = 'Ajouter un plugin';
+$labels['removeplugin'] = 'Enlever un plugin';
+$labels['errorplugin'] = 'Erreur: plugins obligatoires manquants ';
+$labels['errorrcversion'] = 'Erreur: plugin nécessite Roundcube';
+$labels['errorphpversion'] = 'Erreur: plugin nécessite PHP';
+$labels['errorphpcurl'] = 'Erreur: cURL n\'est pas installé';
+$labels['errorphpfinfo'] = 'Erreur: finfo n\'est pas installé';
+$labels['errordb'] = 'Mise à jour de la DB requise. Veuillez activer le plugin pour démarrer cet ajustement.';
+$labels['errordb8'] = 'Mise à jour de la DB requise';
+$labels['syntaxerror'] = 'Erreur de syntaxe PHP';
+$labels['notconfigured'] = 'Plugin n\'est pas configuré';
+$labels['editconfig'] = 'Editer la configuration';
+$labels['instructions'] = 'Instructions';
+$labels['dbautomatically'] = 'Démarrer la mise à jour';
+$labels['dbmanually'] = 'Veuillez suivre les instructions';
+$labels['ornewer'] = 'ou plus récent';
+$labels['official_releases'] = 'nous supportons les versions officielles Roundcube uniquement';
+$labels['localizationmissing'] = 'Pas détail pour le nom ou la description du plugin détéctés';
+$labels['documentation'] = 'Documentation';
+$labels['select_plugin'] = 'Choisir un plugin';
+$labels['legend'] = 'Légende';
+$labels['plugindisabledbydefault'] = 'Le plugin est désactivé par défaut - L\'utilisateur peut déterminer son usage';
+$labels['pluginenabledbydefault'] = 'Le plugin est sactivé par défaut - L\'utilisateur peut déterminer son usage';
+$labels['pluginmandatory'] = 'Obligatoire - Le plugin est activé, l\'utilisateur ne peut activer ou désactiver le plugin';
+$labels['show_about_link'] = 'Montrer le lien "A propos"';
+$labels['show_support_link'] = 'Montrer le lien "Support"';
+$labels['use_myroundcube_watermark'] = 'Utilisez le watermak "MyRoundCube"';
+$labels['remove_watermark'] = 'Ne pas afficher de watermark';
+$labels['database'] = 'Database';
+$labels['account_details_compressed'] = 'Détails du compte comprimé';
+$labels['credits_transferred'] = 'Crédits transférés';
+$labels['customer_id_changed'] = 'ID client modifié';
+$labels['myrcd_bought'] = 'MyRC$ acheté - merci !';
+$labels['myrcd_refunded'] = 'Remboursement de MyRC$';
+$labels['PHPMyAdmin'] = 'PHPMyAdmin';
+$labels['ipmismatch'] = 'Pas de téléchargement possible depuis l\'IP %s (l\'IP du client ne correspond pas). Utilisez %s ou naviguez vers %s depuis l\'IP %s.';
+$labels['emoticons_pluginname'] = 'Raccourcis des émoticons';
+$labels['emoticons_plugindescription'] = 'Remplacer les raccourcis des émoticons par des images';
+$labels['markbuttons_pluginname'] = 'Boutons de sélection des messages';
+$labels['markbuttons_plugindescription'] = 'Ajoute une icône de contrôle sous la liste des séparateurs de message pour sélectionner rapidement les messages.';
+$labels['keyboard_shortcuts_pluginname'] = 'Raccourcis claviers';
+$labels['keyboard_shortcuts_plugindescription'] = 'Ajoute des contrôles utilisant les raccourcis clavier.';
+$labels['message_highlight_pluginname'] = 'Mise en valeur des messages';
+$labels['message_highlight_plugindescription'] = 'Mets en valeur les messages qui correspondent à vos options de filtrage.';
+$labels['google_contacts_pluginname'] = 'Google contacts';
+$labels['google_contacts_plugindescription'] = 'Permet l\'accès à vos contacts google.';
+$labels['contextmenu_pluginname'] = 'Menu contextuel';
+$labels['contextmenu_plugindescription'] = 'Active l\'affichage d\'un menu contextuel lors d\'un clic droit.';
+$labels['newmail_notifier_pluginname'] = 'Notification de nouveaux messages';
+$labels['newmail_notifier_plugindescription'] = 'Notification lors de la réceptions de nouveaux messages';
+$labels['listcommands_pluginname'] = 'Réponse aux listes de diffusion';
+$labels['listcommands_plugindescription'] = 'Options variées permettant de répondre aux messages en provenance de listes de diffusions.';
+$labels['copymessage_pluginname'] = 'Copie de message(s)';
+$labels['copymessage_plugindescription'] = 'Copie de message(s) dans un autre dossier IMAP.';
+$labels['vcard_attachments_pluginname'] = 'vCard en pièce jointe';
+$labels['vcard_attachments_plugindescription'] = 'Ajouter une boîte aux messages qui ont une pièce jointe vCard pour importer directement le contact dans le carnet d\'adresse.';
+$labels['zipdownload_pluginname'] = 'Exportation des messages';
+$labels['zipdownload_plugindescription'] = 'Exporte les messages en format zip';
+$labels['markasjunk2_pluginname'] = 'Marquer les messages comme étant du spam';
+$labels['markasjunk2_plugindescription'] = 'Marque les message comme étant du spam ou inversement.';
+$labels['markasjunk_pluginname'] = 'Marquer les messages comme étant du spam';
+$labels['markasjunk_plugindescription'] = 'Marque les message comme étant du spam ou inversement.';
+$labels['google_analytics_pluginname'] = 'Google Analytics';
+$labels['google_analytics_plugindescription'] = 'Inclure Google Analytics.';
+$labels['globaladdressbook_pluginname'] = 'Carnet d\'adresse global';
+$labels['globaladdressbook_plugindescription'] = 'Ceci est un carnet d\'adresse en lecture seule fourni par votre administrateur.';
+$labels['blockspamsending_pluginname'] = 'Empêcher l\'envoi de spam';
+$labels['blockspamsending_plugindescription'] = 'Permet l\'envoi d\'une quantité définie de messages avec même destinataire pendant une session.';
+$labels['global_config_pluginname'] = 'Gestionnaire de configuration';
+$labels['global_config_plugindescription'] = 'Ceci est un plugin gestionnaire de configuration. Il optimise votre serveur en centralisant les fichiers de configuration du plugin. Il rend aussi les tâches administratives plus simple en permettant l\'utilisation d\'un fichier de configuration unique pour tous vos plugins';
+$labels['jqueryui_pluginname'] = 'Jqueryui';
+$labels['jqueryui_plugindescription'] = 'Librairie javascript Jqueryui';
+$labels['hide_blockquote_pluginname'] = 'Masquer la citation';
+$labels['hide_blockquote_plugindescription'] = 'Masquer la citation lorsque le nombre de lignes est supérieur au nombre de lignes spécifiées.';
+$labels['crawler_pluginname'] = 'Crawler';
+$labels['crawler_plugindescription'] = 'Leurre les moteurs de recherche ';
+$labels['archive_pluginname'] = 'Archive';
+$labels['archive_plugindescription'] = 'Archiver les messages dans un dossier d\'archives.';
+$labels['autologon_pluginname'] = 'Connexion automatique.';
+$labels['autologon_plugindescription'] = 'Se connecter automatiquement.';
+$labels['openpgpjs_pluginname'] = 'OpenPGPjs';
+$labels['openpgpjs_plugindescription'] = 'PGP DES dans RoundCube.';
+$labels['dblog_pluginname'] = 'Log dans une database';
+$labels['dblog_plugindescription'] = 'Enregistrer les logs dans une Database au lieu d\'un fichier';
+$labels['gibberish_pluginname'] = 'Chiffrement Gibberish';
+$labels['gibberish_plugindescription'] = 'Une aide pour le chiffrement Gibberish AES.';
+$labels['http_request_pluginname'] = 'Requête HTTP';
+$labels['http_request_plugindescription'] = 'Un plugin pour exécuter des requêtes HTTP via cURL ou fsockopen.';
+$labels['http_auth_pluginname'] = 'Authentification HTTP';
+$labels['http_auth_plugindescription'] = 'Plug in pour supporter l\'authentification HTTP';
+$labels['http_authentication_pluginname'] = 'Authentification HTTP (defaut)';
+$labels['http_authentication_plugindescription'] = 'Utiliser l\'authentification HTTP existante par défaut et utiliser les données de l\'utilisateur';
+$labels['jscolor_pluginname'] = 'Sélecteur de couleur';
+$labels['jscolor_plugindescription'] = 'Plugin pour choisir une couleur';
+$labels['tinymce_pluginname'] = 'TinyMCE - Editeur HTML';
+$labels['tinymce_plugindescription'] = 'Remplacer le TinuMCE par défaut pas TinyMCE jquery (inclu TinyMCE php compressor http://www.tinymce.com/wiki.php/Compressors:PHP).';
+$labels['lang_sel_pluginname'] = 'Séléctionner le language';
+$labels['lang_sel_plugindescription'] = 'Séléctionner le language sur la page d\'authentification';
+$labels['newuser_pluginname'] = 'Nouvel utilisateur';
+$labels['newuser_plugindescription'] = 'informe les administrateurs quand un nouvel utilisateur s\'enregistre via l\'interface du webmail et envoie un message de bienvenue à cet utilisateur lors de la première connexion.';
+$labels['placeholder_pluginname'] = 'Attributs de marqueur de position';
+$labels['placeholder_plugindescription'] = 'Ajouter des attributs de marqueur de position pour les éléments d\'entrée utilisateur et mot de passe.';
+$labels['qtip_pluginname'] = 'Outils jQueryUI';
+$labels['qtip_plugindescription'] = 'Un plugin d\'aide à l\'utilisation des outils jQueryUI';
+$labels['sabredav_pluginname'] = 'SabreDAV (support pour WebDAV avec PHP)';
+$labels['sabredav_plugindescription'] = 'Crée des comptes SabreDAV pour l\'accès aux calendriers CalDAV lorsque de nouveaux utilisateurs sont créés dans Roundcube et leur associe leur mot de passe s\'il a été changé';
+$labels['savepassword_pluginname'] = 'Sauvegarde les mots de passe';
+$labels['savepassword_plugindescription'] = 'Un plugin d\'aide qui est requis par d\'autres plugins';
+$labels['database_attachments_pluginname'] = 'Pièce jointe en base de données';
+$labels['database_attachments_plugindescription'] = 'Un plugin d\'aide à la gestion des pièces jointe en base de données';
+$labels['help_pluginname'] = 'aide';
+$labels['help_plugindescription'] = 'Aide Webmail';
+$labels['new_user_dialog_pluginname'] = 'Nouvel utilisateur';
+$labels['new_user_dialog_plugindescription'] = 'Présente une zone de dialogue avec les paramètres d\'identité aux nouveaux utilisateurs. Lorsqu\'un utilisateur est créé, ce plugin vérifie l\'identité par défaut et met un flag si elle est incomplète. Un message d\'avertissement apparait sur l\'écran jusqu\'à que l\'utilisateur ait compléter ses données personnelles';
+$labels['rcguard_pluginname'] = 'ReCAPTCHA';
+$labels['rcguard_plugindescription'] = 'Force l\'utilisateur à utililser les captcha après un certain nombre d\'échec lors de l\'authentification';
+$labels['domain_check_pluginname'] = 'Vérification de domaine';
+$labels['domain_check_plugindescription'] = 'Restreint l\'identification au webmail à des domaines spécifiques';
+$labels['tasklist_pluginname'] = 'Liste de tâches';
+$labels['tasklist_plugindescription'] = 'Créer des tâches et des sous-tâches avec rappels.';
+$labels['virtuser_query_pluginname'] = 'Requête utilisateur virtuel';
+$labels['virtuser_query_plugindescription'] = 'Recherche utilisateur -> email ou email -> utilisateur avec base de donnée.';
+$labels['virtuser_file_pluginname'] = 'Requête utilisateur virtuel';
+$labels['virtuser_file_plugindescription'] = 'Recherche utilisateur -> email ou email -> utilisateur avec fichier.';
+$labels['userinfo_pluginname'] = 'Informations utilisateur.';
+$labels['userinfo_plugindescription'] = 'Affiche quelques informations à propos de l\'utilisateur courant.';
+$labels['subscriptions_option_pluginname'] = 'Abonnements IMAP';
+$labels['subscriptions_option_plugindescription'] = 'Gérer les abonnements IMAP';
+$labels['filters_pluginname'] = 'Filtres';
+$labels['filters_plugindescription'] = 'Gérer les filtres clients.';
+$labels['forgot_password_pluginname'] = 'Mot de passe perdu';
+$labels['forgot_password_plugindescription'] = 'Requêtes de changement de mot de passe.';
+$labels['sieverules_pluginname'] = 'Filtres Sieve';
+$labels['sieverules_plugindescription'] = 'Gérer les filtres Sieve.';
+$labels['managesieve_pluginname'] = 'Filtres Sieve';
+$labels['managesieve_plugindescription'] = 'Gérer les filtres Sieve.';
+$labels['acl_pluginname'] = 'Listes de contrôle d\'accès (ACL)';
+$labels['acl_plugindescription'] = 'Gestion des dossiers de liste de contrôle d\'accès (ACL).';
+$labels['vacation_pluginname'] = 'Message automatiques';
+$labels['vacation_plugindescription'] = 'Gérer les messages automatiques (signalement de vacances)';
+$labels['password_pluginname'] = 'Modifier le mot de passe';
+$labels['password_plugindescription'] = 'Permet aux utilisateurs de changer de mot de passe.';
+$labels['redundant_attachments_pluginname'] = 'Pièces jointes redondantes.';
+$labels['redundant_attachments_plugindescription'] = 'Le plugin de pièces jointes redondantes permet de stocker les fichiers temporaires en double. Elles sont attachées à la fois dans la base de données et sur le système de fichier.';
+$labels['example_addressbook_pluginname'] = 'Carnet d\'adresse d\'exemple.';
+$labels['example_addressbook_plugindescription'] = 'Exemple de code pour ajouter un carnet d\'adresse supplémentaire.';
+$labels['debug_logger_pluginname'] = 'Enregistreur de données de débogage';
+$labels['debug_logger_plugindescription'] = 'L\'enregistreur de données de débogage active l\'enregistrement étendu de données pour le débogage.';
+$labels['show_additional_headers_pluginname'] = 'Visualiser les entêtes supplémentaires.';
+$labels['show_additional_headers_plugindescription'] = 'Concept de plugin permettant de visualiser les entêtes supplémentaires dans la vue message.';
+$labels['additional_message_headers_pluginname'] = 'Entêtes de messages supplémentaires';
+$labels['additional_message_headers_plugindescription'] = 'Plugin simple permettant d\'ajouter ou supprimer des entêtes sur les messages envoyés.';
+$labels['new_user_identity_pluginname'] = 'Visite d\'un nouvel utiisateur';
+$labels['new_user_identity_plugindescription'] = 'Le plugin de visite d\'un nouvel utilisateur peuple l\'identité d\'un nouvel utilisateur depuis ses informations LDAP à sa première connexion.';
+$labels['squirrelmail_usercopy_pluginname'] = 'Migration des utilisateurs Squirrelmail';
+$labels['squirrelmail_usercopy_plugindescription'] = 'Copie les identités des utilisateurs depuis une installation de Squirrelmail.';
+$labels['yubikey_authentication_pluginname'] = 'Authentification Yubikey de Yubico';
+$labels['yubikey_authentication_plugindescription'] = 'Plugin pour utiliser l\'authentification Yubikey de Yubico sur RoundCube.';
+$labels['sauserprefs_pluginname'] = 'Préférences utilisateurs Spamassassin';
+$labels['sauserprefs_plugindescription'] = 'Ajoute un onglet \'Spam\' à l\'onglet \'Paramètres personnels\' pour modifier leurs préférences Spamassassin';
+$labels['dkimstatus_pluginname'] = 'Statut DKIM';
+$labels['dkimstatus_plugindescription'] = 'DKIMSTATUS affiche le statut de la signature DKIM de chaque mail que l\'utilisateur lit dans Roundcube.';
+$labels['roundcube_openpgp_pluginname'] = 'RoundCube OpenPGP';
+$labels['roundcube_openpgp_plugindescription'] = 'Cette extension implémente OpenPGP dans RoundCube. Il génère, gère et utilise des clés de cryptage.';
+$labels['automatic_addressbook_pluginname'] = 'Carnet d\'adresses automatique';
+$labels['automatic_addressbook_plugindescription'] = 'Créé un carnet d\'adresses et y insère automatiquement les adresses email collectées. Cela élimine le besoin de le faire manuellement.';
+$labels['calendar_pluginname'] = 'Agenda';
+$labels['calendar_plugindescription'] = 'Gérez vos rendez-vous dans l\'agenda webmail.';
+$labels['attachment_reminder_pluginname'] = 'Rappel de pièce jointe';
+$labels['attachment_reminder_plugindescription'] = 'Rappelle aux utilisateurs de joindre un fichier avant d\'envoyer un message.';
+
+?> \ No newline at end of file
diff --git a/plugin_manager/localization/hu_HU.inc b/plugin_manager/localization/hu_HU.inc
new file mode 100644
index 0000000..15ec191
--- /dev/null
+++ b/plugin_manager/localization/hu_HU.inc
@@ -0,0 +1,154 @@
+<?php
+/*
+ +-----------------------------------------------------------------------+
+ | ./plugins/plugin_manager/localization/hu_HU.inc
+ |
+ | Language file of MyRoundcube Plugins Bundle
+ | Copyright (C) 2010-2013, Roland 'rosali' Liebl
+ |
+ +-----------------------------------------------------------------------+
+ | Author: Mihaly Vukovics - 09/18/2013 14:09:15
+ +-----------------------------------------------------------------------+
+*/
+
+$labels = array();
+$labels['pluginname'] = 'Beépülőmodul kezelő';
+$labels['plugindescription'] = 'A beépülőmodul kezelő lehetőséget ad a beépülőmodulok felhasználói szintű engedélyezésére, tiltására. Emelett segíti a rendszgazdákat a beépülők telepítésében és frissen tartásában. A modul nem végez módosításokat a fáljrendszeren, illetve nem telepít semmit automatikusan.';
+$labels['plugin_manager_title'] = 'Beépülő modulok kezelése';
+$labels['plugin_manager_center'] = 'Beépülőmodul kezelő központ';
+$labels['updatepm'] = 'Beépülőmodul kezelőhöz frissítés érhető el';
+$labels['updatepmrequired'] = 'A beépülőmodul kezelőt frissíteni kell.';
+$labels['downloadnow'] = 'Letöltés';
+$labels['misc'] = 'Egyebek';
+$labels['downloads'] = 'letöltések';
+$labels['issue'] = 'Hibajelentés';
+$labels['submitissue'] = 'Hibajelentés. Kérlük ellenőrizze a hibanaplót és a relevéns információkat írja a jegybe. Megjegyzés: Google Account szükséges.';
+$labels['showall'] = 'Összes beépülőmodul megjelenítése';
+$labels['hideuptodate'] = 'Csak a frissítések megjelenítése';
+$labels['connectionerror'] = 'A távoli szerver nem válaszolt a csatlakozési kérésre.';
+$labels['trylater'] = 'Próbálkozzon később...';
+$labels['translate'] = 'Beépüélőmodul nyelvének fordítása';
+$labels['restoredefaults'] = 'Alapbeállítások visszaállítása';
+$labels['checkall'] = 'Mindegyik';
+$labels['uncheckall'] = 'Semelyik';
+$labels['toggle'] = 'Kijelölés megfordítása';
+$labels['status'] = 'Státusz';
+$labels['globalplugins'] = 'Globális beépülők';
+$labels['backend'] = 'Server beépülők';
+$labels['messagesmanagement'] = 'Üzenetkezelés';
+$labels['furtherconfig'] = 'Most szeretné konfigurálni a beépülőt?';
+$labels['uninstall'] = 'A modul kikapcsolása a hozzá kapcsolodó összes beállítást véglegesen törli. Ennek tudatában is kikapcsolod?';
+$labels['areyousure'] = 'Ez a lépés nem visszaállítható, biztos, hogy folytatja?';
+$labels['successfullydeleted'] = 'A beállítások sikeresen eltávolításra kerültek.';
+$labels['successfullysaved'] = 'Sikeresen elmentve.';
+$labels['errorsaving'] = 'Hiba lépett fel a mentés közben.';
+$labels['yes'] = 'Igen';
+$labels['no'] = 'Nem';
+$labels['disable'] = 'Letiltva';
+$labels['remove'] = 'Eltávaolítás';
+$labels['savewarning'] = 'El akarok menteni a változásokat?';
+$labels['authors_comments'] = 'A szerző megjegyzései (nincs lefordítva)';
+$labels['requiredby'] = 'Erre a beépülőre az alábbiaknak van szüksége:';
+$labels['requires'] = 'Ez a beépülő a következőket igényli:';
+$labels['recommended'] = 'Ajánlott beépülők';
+$labels['update_plugins'] = 'Beépülő letöltések';
+$labels['ziparchive'] = 'ZIP letöltése';
+$labels['demoaccount'] = 'Sajnálhu, de ez a funkció nem elérhető (Demó hozzáférés)';
+$labels['serverversion'] = 'Telepített verzió';
+$labels['mirrorversion'] = 'Elérhető legújabb verzió';
+$labels['mirrorhost'] = 'Tükör szerver';
+$labels['comments'] = 'Követelmények és frissítési megjegyzések';
+$labels['update_error'] = 'Verzió eltérés';
+$labels['update_ok'] = 'A legújabb verziók vannak telepítve, nincs szükség frissítésre.';
+$labels['update_edit'] = 'A beépülőt újra kell konfigurálni vagy adatbázis frissítést igényel. Kérjük olvassa el a frissítéssel kapcsolatos megjegyzéseket.';
+$labels['servernewer'] = 'A regisztrált beépülő újabb, mint a tükörszerveren található.';
+$labels['orhigher'] = 'vagy magasabb';
+$labels['rc_ok'] = 'A Roundcube verzió aktuális.';
+$labels['update_update'] = 'A beépülő elavult, frissítse, olvassa el a frissítési megjegyzéseket.';
+$labels['noupdates'] = 'Nincs frissítés kiválasztva.';
+$labels['rc_update'] = 'A Rouncube elavult, kérjük frissítse.';
+$labels['rc_uptodate'] = 'A Rouncube verziója aktuális.';
+$labels['rc_newer'] = 'A Roundcube verziója frissebb, mint a tükör szerveren lévő!';
+$labels['justunzip'] = 'Csak tömörítse ki a ZIP fáljt a meglévő Roundcube könyvtárába.';
+$labels['guide'] = 'További információk...';
+$labels['thirdparty'] = 'Ez a beépülő harmadik féltől származik.';
+$labels['thirdpartywarning'] = 'Ez a beépülőmodul harmadik féltől származik. Javasoljuk, hogy ne innen töltse le, hanem egyenesen a fejlesztő oldaláról, hogy biztosan a legfrissebb verziót és az aktuális dokumentációt kapja.';
+$labels['develsite'] = 'Letöltés';
+$labels['notinstalled'] = 'nincs telepítve';
+$labels['notregistered'] = 'nincs regisztrálva';
+$labels['roundcubeurl'] = 'Roundcube letöltése';
+$labels['languageupdate'] = 'Nyelvi frissítés előrhető.';
+$labels['localizationfilesonly'] = 'Megjegyzés: a letöltés csak nyelvi frissítést tartalmaz.';
+$labels['donotregister'] = 'Ne regisztrálja a beépülőt, mert automatikusan betöltődik.';
+$labels['register'] = 'Regisztrálja a beépülőt a Beépülő kezelőben vagy a Rouncube konfigurációs fájljában: ./config/config.inc.php [$config[\'plugins\'] = array("foo", "bar");].';
+$labels['customer_account'] = 'Felhasználói fiók';
+$labels['customer_id'] = 'Ügyfélazonosító';
+$labels['invalid_customer_id'] = 'Hibás ügyfélazonosító';
+$labels['invalid_credits'] = 'Hibás kreditek';
+$labels['successfully_transferred'] = 'Kreditek sikeresen átadva';
+$labels['merge'] = 'Kreditek összevonása';
+$labels['credits'] = 'Kreditek';
+$labels['creditsupdated'] = 'A kreditek változtak az oldal utolsó betöltése óta';
+$labels['buynow'] = 'Kredit vásárlása';
+$labels['history'] = 'Felhasználó fiók történet';
+$labels['details'] = 'Részletek';
+$labels['receipt'] = 'Számla';
+$labels['plugins'] = 'Beépülő modulok';
+$labels['clickhere'] = 'Kattintson ide';
+$labels['discardliabletopaycosts'] = 'Fizetős letöltések figyelmen kivül hagyása';
+$labels['unchecknotinstalledplugins'] = 'Nem telepített beépülő modulok figyelmen kívül hagyása';
+$labels['sum'] = 'Összesen';
+$labels['show'] = 'Mutat';
+$labels['hide'] = 'Elrejt';
+$labels['view'] = 'nézet';
+$labels['expired'] = 'lejárt';
+$labels['terms'] = 'Feltételek';
+$labels['pricelist'] = 'Ãrlista letöltése';
+$labels['forthisdownload'] = 'ezért a letöltésért';
+$labels['remainingcredits'] = 'megmaradt kreditek';
+$labels['initialdownload'] = 'Első letöltés';
+$labels['keyfeatureaddition'] = 'Új fontosabb képesség';
+$labels['codeimprovements'] = 'Kód fejlesztése';
+$labels['servicenotavailable'] = 'A szolgáltatás jelenleg nem elérhető, próbálja később';
+$labels['myrcerror'] = 'A MyRoundcube szolgáltatás jelenleg nem elérhető';
+$labels['getnew'] = 'Új felhasználói azonosító igénylése';
+$labels['getnew_hint'] = 'Javasoljuk, hogy rendszeresen újjítsa meg a felhasználói azonosítóját. Ha bármilyen gyanús változást lát a felhasználói fiók adatai körül, azonnal ujjítsa meg!';
+$labels['transfer'] = 'Kreditek átadása';
+$labels['message_highlight_pluginname'] = 'Üzenetek kiemelése';
+$labels['message_highlight_plugindescription'] = 'Üzenetek kiemelése egy megadott feltétel alapján';
+$labels['google_contacts_pluginname'] = 'Google Névjegyek';
+$labels['contextmenu_pluginname'] = 'Környezetérzékeny menü';
+$labels['contextmenu_plugindescription'] = 'Környezettől függő, jobb egérgombra felbukkanó menü engedélyezése.';
+$labels['globaladdressbook_pluginname'] = 'Google Címjegyzék';
+$labels['manage_admins'] = 'Adminisztrátorok';
+$labels['plugin_manager_admins'] = 'Beépülő modul kezelő adminisztrátorok';
+$labels['allow_plugins_configuration'] = 'Beépölő beállítási jogkör delegálása';
+$labels['share_credits'] = 'Kreditek megosztása';
+$labels['add'] = 'Hozzáadás';
+$labels['accountnotexists'] = 'A fiók nem létezik';
+$labels['sharedby'] = 'A felhasználói fiók megosztva';
+$labels['switch'] = 'Váltás';
+$labels['ownaccount'] = 'a saját fiókhoz';
+$labels['shareinvitation'] = 'a megosztott fikóhoz';
+$labels['use_ssl'] = 'Használjon SSL titkosítást a MyRouncube szerverekhez való csatlakozáskor';
+$labels['use_hmail'] = 'hMeilserver kompatibilis beépülők használata';
+$labels['show_myrc_messages'] = 'MyRoundcube-tól érkező értesítések megjelenítése';
+$labels['serverwide'] = 'Server szintű konfiguráció';
+$labels['file_based_config'] = 'Fálj alapú, globális konfiguráció engedélyezése';
+$labels['advanced_admins'] = 'Csak gyarkolott rendszergazdáknak';
+$labels['compress_html'] = 'HTML kimenet tömörítése';
+$labels['enabled'] = 'Engedélyezve (alapértelmezett)';
+$labels['protected'] = 'Védett';
+$labels['skins'] = 'Bőrök';
+$labels['loads_always'] = 'Elengedhetetlen';
+$labels['loads_never'] = 'Beépülő letiltva';
+$labels['documentation'] = 'Dokumentáció';
+$labels['select_plugin'] = 'Válasszon beépülőt';
+$labels['legend'] = 'Jelmagyarázat';
+$labels['show_about_link'] = 'Névjegy link megjelenítése';
+$labels['show_support_link'] = 'Támogatás link megjelenítése';
+$labels['use_myroundcube_watermark'] = '"MyRoundcube" vízjel használata';
+$labels['remove_watermark'] = 'Ne legyen semmilyen vízjel';
+$labels['database'] = 'Adatbázis';
+
+?> \ No newline at end of file
diff --git a/plugin_manager/localization/it_IT.inc b/plugin_manager/localization/it_IT.inc
new file mode 100644
index 0000000..60b8224
--- /dev/null
+++ b/plugin_manager/localization/it_IT.inc
@@ -0,0 +1,170 @@
+<?php
+/*
+ +-----------------------------------------------------------------------+
+ | ./plugins/plugin_manager/localization/it_IT.inc
+ |
+ | Language file of MyRoundcube Plugins Bundle
+ | Copyright (C) 2010-2012, Roland 'rosali' Liebl
+ | Licensed under the GNU GPL
+ |
+ +-----------------------------------------------------------------------+
+ | Author: Roberto - 11/05/2012 14:56:52
+ +-----------------------------------------------------------------------+
+*/
+
+$labels = array();
+$labels['pluginname'] = 'Gestore Plugin';
+$labels['plugindescription'] = 'Gestore plugin permette agli utenti di abilitare e/o disabilitare i plugin (a livello di account utente) e aiuta gli amministratori a mantenere aggiornato il sistema per ciò che riguarda plugins, bug di sistema, downloads centralizzati, documentazioni e suggerimenti.';
+$labels['plugin_manager_title'] = 'Gestisci i Plugin';
+$labels['plugin_manager_center'] = 'Pannello gestione Plugin';
+$labels['calendaring'] = 'Calendario';
+$labels['misc'] = 'Varie';
+$labels['downloads'] = 'Downloads';
+$labels['issue'] = 'Problemi';
+$labels['submitissue'] = 'Notifica un problema';
+$labels['showall'] = 'Mostra tutti i Plugins';
+$labels['hideuptodate'] = 'Mostra solo gli aggiornamenti';
+$labels['connectionerror'] = 'Il server remoto non risponde al tentativo di connessione';
+$labels['trylater'] = 'Per favore, riprova più tardi...';
+$labels['translate'] = 'Traduci questo Plugin';
+$labels['restoredefaults'] = 'Impostazioni iniziali';
+$labels['checkall'] = 'Seleziona tutti';
+$labels['uncheckall'] = 'Rimuovi tutti';
+$labels['toggle'] = 'Inverti la selezione';
+$labels['status'] = 'Stato';
+$labels['globalplugins'] = 'Plugin globale';
+$labels['backend'] = 'Server di Plugin';
+$labels['messagesmanagement'] = 'Gestione Messaggi';
+$labels['furtherconfig'] = 'Vuoi configurare il plugin adesso?';
+$labels['uninstall'] = 'Stai per disabilitare il plugin. Vuoi rimuovere definitivamente le configurazioni salvate?';
+$labels['uninstallconfirm'] = 'Stai per disabilitare il plugin. ATTENZIONE: Seleziona »DISABILITA« per disabilitare questo plugin e mantenere dati e configurazioni nel nostro server se intendi usare ancora il plugin nel futuro. Seleziona »RIMUOVI« per cancellare definitivamente dati e configurazioni di questo plugin dal nostro database. Quest\'ultima azione non può essere annullata.';
+$labels['areyousure'] = 'Non puoi intraprendere questa azione. Sei veramente sicuro?';
+$labels['successfullydeleted'] = 'Le configurazioni sono state rimosse con successo.';
+$labels['successfullysaved'] = 'Salvato con successo.';
+$labels['errorsaving'] = 'Errore durante il salvataggio.';
+$labels['yes'] = 'Si';
+$labels['no'] = 'No';
+$labels['disable'] = 'Disabilita';
+$labels['remove'] = 'Rimuovi';
+$labels['savewarning'] = 'Vuoi salvare i cambiamenti?';
+$labels['plugin_manager_update'] = 'Aggiorna il gestore di Plugin';
+$labels['authors_comments'] = 'Commento dell\'Autore (non tradotto)';
+$labels['requiredby'] = 'Plugin richiesto da';
+$labels['requires'] = 'Il Plugin richiede';
+$labels['recommended'] = 'Plugin raccomandati';
+$labels['update_plugins'] = 'Aggiorna i Plugin';
+$labels['ziparchive'] = 'Scarica l\'archivio compresso';
+$labels['demoaccount'] = 'Spiacente, download non disponibile (Account Demo)';
+$labels['serverversion'] = 'Versione del Server';
+$labels['mirrorversion'] = 'Versione del Mirror';
+$labels['mirrorhost'] = 'Server di Mirror';
+$labels['comments'] = 'Requisiti e Note di Aggiornamento';
+$labels['update_error'] = 'Versione non corrispondente';
+$labels['update_ok'] = 'È stata rilevata la versione più recente. Nessun aggiornamento necessario.';
+$labels['update_edit'] = 'Il Plugin deve essere riconfigurato o richiede cambiamenti nel database. Per favore leggi le Note di Aggiornamento.';
+$labels['servernewer'] = 'Il Plugin registrato è più nuovo della versione nel Server Mirror.';
+$labels['orhigher'] = 'o successiva';
+$labels['rc_ok'] = 'Il Core di Roundcube è aggiornato.';
+$labels['update_update'] = 'Il Plugin è obsoleto. Per favore aggiornalo! Leggi le Note di Aggiornamento.';
+$labels['noupdates'] = 'Nessun aggiornamento selezionato.';
+$labels['rc_update'] = 'Il Core di Roundcube è obsoleto. Per favore aggiornalo!';
+$labels['rc_uptodate'] = 'Il Core di Roundcube è aggiornato.';
+$labels['rc_newer'] = 'Il Core di Roundcube è più nuovo della versione nel server Mirror!';
+$labels['nottested'] = 'Per favore usa i Plugin con attenzione! Non sappiamo se i Plugin a disposizione funzionano con Roundcube v%s.';
+$labels['justunzip'] = 'Scompatta semplicemente l\'Archivio e sostituisci all\'installazione esistente.';
+$labels['guide'] = 'Ulteriori informazioni...';
+$labels['thirdparty'] = 'Questo non è un Plugin myRoundcube.';
+$labels['thirdpartywarning'] = 'Questo è un Plugin di terze parti. Consigliamo di non scaricare il plugin da questo Server Mirror. Scaricalo dal sito dello sviluppatore per essere sicuro di avere la versione più aggiornata facendo attenzione alle note dello sviluppatore.';
+$labels['develsite'] = 'Scarica';
+$labels['notinstalled'] = 'non installato';
+$labels['notregistered'] = 'non registrato';
+$labels['roundcubeurl'] = 'Scarica Roundcube';
+$labels['languageupdate'] = 'L\'aggiornamento della lingua è disponibile';
+$labels['donotregister'] = 'Non attivare questo Plugin. Viene caricato automaticamente.';
+$labels['register'] = 'Attiva il Plugin in ./config/config.inc.php [$config[\'plugins\'] = array("foo", "bar");].';
+$labels['customer_id'] = 'Customer ID';
+$labels['noplugindescription'] = 'Nessuna descrizione del plugin rilevata.';
+$labels['markbuttons_pluginname'] = 'Bottoni di Contrassegno dei Messaggi';
+$labels['markbuttons_plugindescription'] = 'Aggiunge delle icone di controllo sotto la lista dei messaggi per contrassegnare rapidamente i messaggi.';
+$labels['automatic_addressbook_pluginname'] = 'Rubrica automatica';
+$labels['automatic_addressbook_plugindescription'] = 'Raccogli gli indirizzi di posta di tutti i destinatari in una rubrica separata.';
+$labels['keyboard_shortcuts_pluginname'] = 'Scorciatoie da tastiera';
+$labels['keyboard_shortcuts_plugindescription'] = 'Inserisci i comandi utilizzando le scorciatoie da tastiera.';
+$labels['message_highlight_pluginname'] = 'Evidenzia Messaggi';
+$labels['message_highlight_plugindescription'] = 'Evidenzia i messaggi in corrispondenza delle opzioni dei filtri.';
+$labels['fixTHEAD_pluginname'] = 'Fissa Intestazione Lista Messaggi';
+$labels['fixTHEAD_plugindescription'] = 'Fissa l\'intestazione della Lista Messaggi';
+$labels['compose_addressbook_pluginname'] = 'Seleziona Indirizzi';
+$labels['compose_addressbook_plugindescription'] = 'Seleziona indirizzi durante la composizione dei messaggi.';
+$labels['google_contacts_pluginname'] = 'Contatti Google';
+$labels['google_contacts_plugindescription'] = 'Accedi ai tuoi contatti Google';
+$labels['contextmenu_pluginname'] = 'Menu contestuale';
+$labels['contextmenu_plugindescription'] = 'Abilita la funzionalità pulsante destro del mouse nel menu contestuale.';
+$labels['newmail_notifier_pluginname'] = 'Notifica Nuovo Messaggio';
+$labels['newmail_notifier_plugindescription'] = 'Notifica all\'arrivo di un nuovo messaggio.';
+$labels['listcommands_pluginname'] = 'Rispondi alle Liste';
+$labels['listcommands_plugindescription'] = 'Varie opzioni per rispondere ai messaggi inviati dalle liste di discussione.';
+$labels['copymessage_pluginname'] = 'Copia messaggi(o)';
+$labels['copymessage_plugindescription'] = 'Copia messaggi(o) in un\'altra cartella IMAP.';
+$labels['forwardattachment_pluginname'] = 'Inoltra come Allegato';
+$labels['forwardattachment_plugindescription'] = 'Inoltra messaggi multipli come allegati.';
+$labels['vcard_attachments_pluginname'] = 'Allega vCard';
+$labels['vcard_attachments_plugindescription'] = 'Aggiunge in allegato una vCard ai messaggi inviati per permettere ai destinatari l\'archiviazione del proprio contatto nella loro rubrica.';
+$labels['importmessages_pluginname'] = 'Importa Messaggi';
+$labels['importmessages_plugindescription'] = 'Importa messaggi da un file compresso .zip o da una sorgente eml.';
+$labels['zipdownload_pluginname'] = 'Esporta Messaggi';
+$labels['zipdownload_plugindescription'] = 'Esporta i messaggi in un file compresso .zip';
+$labels['markasjunk2_pluginname'] = 'Marca i Messaggi come Posta Indesiderata';
+$labels['markasjunk2_plugindescription'] = 'Marca i Messaggi come Posta Indesiderata e come Posta Non indesiderata';
+$labels['markasjunk_pluginname'] = 'Marca i Messaggi come Posta Indesiderata';
+$labels['markasjunk_plugindescription'] = 'Marca i Messaggi come Posta Indesiderata e come Posta Non indesiderata';
+$labels['google_ads_pluginname'] = 'Annunci Google';
+$labels['google_ads_plugindescription'] = 'Mostra gli Annunci di Google';
+$labels['google_analytics_pluginname'] = 'Google Analytics';
+$labels['google_analytics_plugindescription'] = 'Includi Google Analytics';
+$labels['globaladdressbook_pluginname'] = 'Rubrica globale';
+$labels['globaladdressbook_plugindescription'] = 'Questa è una rubrica in sola lettura fornita dall\'Amministratore';
+$labels['blockspamsending_pluginname'] = 'Impedisci l\'Invio di Posta Indesiderata';
+$labels['blockspamsending_plugindescription'] = 'Permette l\'invio solo di una quantità definita di messaggi con lo stesso contenuto durante una sessione.';
+$labels['global_config_pluginname'] = 'Gestore Configurazioni';
+$labels['global_config_plugindescription'] = 'Questo è plugin di gestione di configurazioni. Ottimizza il tuo server centralizzando i file di configurazione dei plugin. Rende anche le attività di amministrazione più facili abilitando l\'utilizzo di un solo file di configurazione per tutti i plugin.';
+$labels['jqueryui_pluginname'] = 'jQuery UI';
+$labels['jqueryui_plugindescription'] = 'Libreria javascript jQuery UI';
+$labels['hide_blockquote_pluginname'] = 'Nascondi le citazioni';
+$labels['hide_blockquote_plugindescription'] = 'Nascondi le citazioni when il numero delle linee è maggiore di quello specificato';
+$labels['crawler_pluginname'] = 'Crawler';
+$labels['crawler_plugindescription'] = 'Pagina di contenuto "Fake" per i crawlers';
+$labels['dblog_pluginname'] = 'Log su database';
+$labels['dblog_plugindescription'] = 'Registra i log su un database anziché su un file';
+$labels['http_auth_pluginname'] = 'HTTP Authentication ';
+$labels['http_auth_plugindescription'] = 'Plugin che attiva il supporto all\'autenticazione HTTP';
+$labels['impersonate_pluginname'] = 'Impersonate';
+$labels['impersonate_plugindescription'] = 'Tool per amministratori che permettere di eseguire login nei vari accounts attraverso una "master password"';
+$labels['jscolor_pluginname'] = 'Cattura colori';
+$labels['jscolor_plugindescription'] = 'Un plugin che visualizza un "Cattura colori"';
+$labels['tinymce_pluginname'] = 'TinyMCE - HTML Editor';
+$labels['tinymce_plugindescription'] = 'Questo plugin implementa TinyMCE PHP Compressor (http://www.tinymce.com/wiki.php/Compressors:PHP). Inoltre aggiunge la possibilità di configrare TinyMCE senza modificare i file di Roundcube';
+$labels['embed_images_pluginname'] = 'Embed external Images';
+$labels['embed_images_plugindescription'] = 'Incolla immagini esterne nel corpo di un messaggio';
+$labels['lang_sel_pluginname'] = 'Select Language';
+$labels['lang_sel_plugindescription'] = 'Scegli la lingua nella pagina di login';
+$labels['newuser_pluginname'] = 'New User';
+$labels['newuser_plugindescription'] = 'Informa gli amministratori quando un nuovo utente si è registrato attraverso l\'interfaccia webmail e manda un messaggio di benvenuto al nuovo utente al primo login';
+$labels['placeholder_pluginname'] = 'Placeholder Attributes';
+$labels['placeholder_plugindescription'] = 'Aggiungi attributi segnaposto agli elementi input testo e password';
+$labels['qtip_pluginname'] = 'jQueryUI Tool Tips';
+$labels['qtip_plugindescription'] = 'Plugin di supporto per usare jQueryUI';
+$labels['sabredav_pluginname'] = 'SabreDAV';
+$labels['sabredav_plugindescription'] = 'Crea SabreDAV accounts per l\'accesso a un calendario CalDAV quando in Roundcube viene creato un nuovo utente e aggiorna la password associata se viene cambiata';
+$labels['savepassword_pluginname'] = 'Save Passwords';
+$labels['savepassword_plugindescription'] = 'Plugin richiesto da altri plugin';
+$labels['database_attachments_pluginname'] = 'Database Attachments';
+$labels['database_attachments_plugindescription'] = 'Plugin di supporto per gestire gli allegati tramite database';
+$labels['new_user_dialog_pluginname'] = 'New user Dialog';
+$labels['new_user_dialog_plugindescription'] = 'Mostra la finestra gestione identità ai nuovi utenti. Quando un nuovo utente viene creato, questo plugin controlla l\'identità di default e imposta un flag di sessione se questa è incompleta. Un box in sovrimpressione apparirà sullo schermo fino a quando l\'utente non abbia completato l\'inserimento delle informazioni';
+$labels['rcguard_pluginname'] = 'ReCAPTCHA';
+$labels['rcguard_plugindescription'] = 'Forca l\'inseirmento di un CAPTCHA dopo un certo numero di tentativi di login falliti';
+$labels['domain_check_pluginname'] = 'Check Domain';
+$labels['domain_check_plugindescription'] = 'Limita l\'accesso alla Webmail ai domini specificati.';
+
+?> \ No newline at end of file
diff --git a/plugin_manager/localization/nl_NL.inc b/plugin_manager/localization/nl_NL.inc
new file mode 100644
index 0000000..b9562f5
--- /dev/null
+++ b/plugin_manager/localization/nl_NL.inc
@@ -0,0 +1,201 @@
+<?php
+
+/*
++-----------------------------------------------------------------------+
+| language/nl_NL/labels.inc |
+| |
+| Language file of the RoundCube Webmail client |
+| Copyright (C) 2008-2012, RoundQube Dev. - Switzerland |
+| |
++-----------------------------------------------------------------------+
+| Author: |
++-----------------------------------------------------------------------+
+
+*/
+
+$labels = array();
+$labels['pluginname'] = 'Plugin beheerder';
+$labels['plugindescription'] = 'Hiermee kunnen gebruikers plugins makkelijk activeren of uitschakelen, beheerders kunnen makkelijk de plugins onderhouden. ';
+$labels['plugin_manager_title'] = 'Beheer plugins';
+$labels['plugin_manager_center'] = 'Centrale plaats voor plugins';
+$labels['calendaring'] = 'Kalendering';
+$labels['misc'] = 'Diversen';
+$labels['downloads'] = 'downloads';
+$labels['issue'] = 'Probleem';
+$labels['submitissue'] = 'Rapporteer een probleem.<br /><br />Controleer de logbestanden en plaats deze informatie in de ticket.<br /><br /><b>Notitie</b>: Google account is noodzakelijk.';
+$labels['showall'] = 'Maak alle plugins zichtbaar';
+$labels['hideuptodate'] = 'Laat alleen nieuwe plugins zichtbaar';
+$labels['connectionerror'] = 'De externe server heeft geen antwoord gegeven.';
+$labels['trylater'] = 'Probeer AUB later';
+$labels['translate'] = 'Vertaal deze plugin';
+$labels['restoredefaults'] = 'Herstel standaard waardes';
+$labels['checkall'] = 'Selecteer alles';
+$labels['uncheckall'] = 'Alles deselecteren';
+$labels['toggle'] = 'Wissel selectie';
+$labels['status'] = 'Status';
+$labels['globalplugins'] = 'Algemene plugins';
+$labels['backend'] = 'Server plugins';
+$labels['messagesmanagement'] = 'Bericht beheer';
+$labels['furtherconfig'] = 'Wilt u deze plugin nu configureren?';
+$labels['uninstall'] = 'U staat op het punt om deze plugin uit te schakelen. Wilt u de opgeslagen instellingen definitief verwijderen?';
+$labels['uninstallconfirm'] = 'U staat op het punt om deze plugin uit te schakelen. LET OP: Selecteer >>UITSCHAKELEN<< om deze plugin uit te schakelen en alle data en configuraties te bewaren. Selecteer >>VERWIJDEREN<< als u alle data en configuraties wenst te verwijderen. Deze actie kan niet ongedaan worden gemaakt!';
+$labels['areyousure'] = 'Deze instelling kan niet ongedaan worden gemaakt, weet u het zeker?';
+$labels['successfullydeleted'] = 'Instellingen zijn succesvol verwijderd.';
+$labels['successfullysaved'] = 'Succesvol opgeslagen';
+$labels['errorsaving'] = 'Er is een probleem opgetreden tijdens het opslaan.';
+$labels['yes'] = 'Ja';
+$labels['no'] = 'Nee';
+$labels['disable'] = 'Uitschakelen';
+$labels['remove'] = 'Verwijderen';
+$labels['savewarning'] = 'Wenst u de aanpassingen op te slaan?';
+$labels['plugin_manager_update'] = 'Update Plugins';
+$labels['authors_comments'] = 'Commentaar van de auteur (Niet vertaald)';
+$labels['requiredby'] = 'Plugin word vereist door';
+$labels['requires'] = 'Plugin vereist';
+$labels['recommended'] = 'Aanbevolen plugins';
+$labels['update_plugins'] = 'Plugin downloads';
+$labels['ziparchive'] = 'Download Zip-Archief';
+$labels['demoaccount'] = 'Sorry, donwloaden is niet mogelijk (Demo Account)';
+$labels['serverversion'] = 'Server versie';
+$labels['mirrorversion'] = 'Versie op de bronserver';
+$labels['mirrorhost'] = 'Bronserver';
+$labels['comments'] = 'Benodigdheden en notities van de bijgewerkte versie';
+$labels['update_error'] = 'Versie verschil';
+$labels['update_ok'] = 'Meest actuele versie gedetecteerd. Geen aanpassingen noodzakelijk.';
+$labels['update_edit'] = 'Plugin dient opnieuw te worden ingesteld of vraagt een database aanpassing. Lees de bijsluiter van de update.';
+$labels['servernewer'] = 'Aanwezige plugin is nieuwer dan die van de bronserver.';
+$labels['orhigher'] = 'of hoger';
+$labels['rc_ok'] = 'Roudcube versie is up-to-date';
+$labels['update_update'] = 'Plugin is verouderd. Het is verstandig om deze bij te werken. Lees de bijsluiter van de update.';
+$labels['noupdates'] = 'Geen bijgewerkte versie geselecteerd.';
+$labels['rc_update'] = 'Roundcube versie is verouderd. Het is verstandig om deze bij te werken!';
+$labels['rc_uptodate'] = 'Roundcube versie is up-to-date';
+$labels['rc_newer'] = 'Roundcube versie is nieuwer dan die die van de bronserver.';
+$labels['nottested'] = 'Voorzichtigheid bij het gebruik van deze plugin is geboden! Het is niet bekend of de plugins goed functioneren met Roundcube v%s.';
+$labels['justunzip'] = 'Archief bestand uitpakken over de bestaande installatie.';
+$labels['guide'] = 'Lees meer...';
+$labels['thirdparty'] = 'Dit is geen plugin van MyRoundcube';
+$labels['thirdpartywarning'] = 'Dit betreft een plugin van een derde partij. Het is niet aan te raden deze vanaf onze bronserver te downloaden maar rechtstreeks vanuit de ontwikkelaar. Zo weet u zeker dat u de laatste versie heeft en heeft u tevens de beschikking over eventuele adviezen en bijsluiters van de maker.';
+$labels['develsite'] = 'Downloaden';
+$labels['notinstalled'] = 'niet geinstalleerd';
+$labels['notregistered'] = 'niet geregistreerd';
+$labels['roundcubeurl'] = 'Roundcube downloaden';
+$labels['languageupdate'] = 'Bijgewerkte versies van vertalingen zijn beschikbaar.';
+$labels['donotregister'] = 'Deze plugin wordt automatisch geladen en hoeft niet geregisteerd te worden.';
+$labels['register'] = 'Voeg deze plugin toe bij de Plugin Beheerder configuratie of in ./config/config.inc.php <small>[$config[\'plugins\'] = array("<i>foo</i>", "<i>bar</i>");]</small>.';
+$labels['customer_account'] = 'Klant account';
+$labels['customer_id'] = 'Klant ID';
+$labels['invalid_customer_id'] = 'Ongeldig Klant ID';
+$labels['invalid_credits'] = 'Ongeldige credits';
+$labels['successfully_transferred'] = 'Credits zijn succesvol overgeschreven';
+$labels['merge'] = 'Credits samenvoegen';
+$labels['credits'] = 'Credits';
+$labels['creditsupdated'] = 'De hoogte van het aantal credits is aangepast sinds de laatste verversing van de pagina';
+$labels['buynow'] = 'Credits kopen';
+$labels['history'] = 'Account geschiedenis';
+$labels['details'] = 'Details ';
+$labels['receipt'] = 'Ontvangstbewijs';
+$labels['plugins'] = 'Plugins';
+$labels['clickhere'] = 'Klik hier';
+$labels['discardliabletopaycosts'] = 'Discard incurring costs downloads';
+$labels['sum'] = 'Som';
+$labels['show'] = 'Toon';
+$labels['hide'] = 'Verberg';
+$labels['view'] = 'bekijken';
+$labels['expired'] = 'verlopen';
+$labels['terms'] = 'Termijnen';
+$labels['pricelist'] = 'Download prijslijst';
+$labels['forthisdownload'] = 'voor deze download';
+$labels['remainingcredits'] = 'te behouden credits';
+$labels['initialdownload'] = 'Initieer download';
+$labels['keyfeatureaddition'] = 'Nieuwe sleutel optie';
+$labels['codeimprovements'] = 'Verbeteringen in de code';
+$labels['servicenotavailable'] = 'Dienst is momenteel niet beschikbaar. Probeer het later nog eens!';
+$labels['getnew'] = 'Genereer een nieuw Klant ID';
+$labels['getnew_hint'] = 'Wij raden het aan om uw klant ID frequent te verversen. Als u een vreemde actie in uw account details aantreft dient u uw Klant ID onmiddellijk te verversen.';
+$labels['transfer'] = 'Credits overschrijven';
+$labels['noplugindescription'] = 'Geen omschrijving van de plugin aanwezig.';
+$labels['markbuttons_pluginname'] = 'Selecteer bericht knoppen.';
+$labels['markbuttons_plugindescription'] = 'Voegt onder de berichtenlijst controle iconen toe om snel berichten te selecteren.';
+$labels['automatic_addressbook_pluginname'] = 'Automatische adressenboek';
+$labels['automatic_addressbook_plugindescription'] = 'Verzameld email adressen van alle ontvangers in een apart adressenboek.';
+$labels['keyboard_shortcuts_pluginname'] = 'Toetsenbord snelkoppeling';
+$labels['keyboard_shortcuts_plugindescription'] = 'Commando toevoegen op basis van toetsenbord snelkoppelingen.';
+$labels['message_highlight_pluginname'] = 'Berichten markeren ';
+$labels['message_highlight_plugindescription'] = 'Berichten markeren op basis van de aangemaakte selectie.';
+$labels['fixTHEAD_pluginname'] = 'Herstel de header van de berichten lijst';
+$labels['fixTHEAD_plugindescription'] = 'Herstel de header van de berichten lijst.';
+$labels['compose_addressbook_pluginname'] = 'Adressenboek in schrijfvenster';
+$labels['compose_addressbook_plugindescription'] = 'Geeft u de mogelijkheid om het adressenboek in het schrijfvenster weer te geven om zo eenvoudig naar het adres van de ontvanger te zoeken.';
+$labels['google_contacts_pluginname'] = 'Google contactpersonen';
+$labels['google_contacts_plugindescription'] = 'Benader u Google Contacten';
+$labels['contextmenu_pluginname'] = 'Keuze menu';
+$labels['contextmenu_plugindescription'] = 'Bied u een keuze menu door te klikken met de rechter muis knop.';
+$labels['newmail_notifier_pluginname'] = 'Nieuwe berichten melder';
+$labels['newmail_notifier_plugindescription'] = 'Geeft een melding als er nieuwe berichten zijn.';
+$labels['listcommands_pluginname'] = 'Beantwoord berichtenlijst';
+$labels['listcommands_plugindescription'] = 'Verschillende opties om te reageren op een bericht wat is verzonden via een mailing lijst.';
+$labels['copymessage_pluginname'] = 'Kopieer bericht(en)';
+$labels['copymessage_plugindescription'] = 'Kopieer bericht(en) naareen andere IMAP map.';
+$labels['forwardattachment_pluginname'] = 'Doorsturen als bijlage';
+$labels['forwardattachment_plugindescription'] = 'Meerdere berichten doorsturen als bijlage';
+$labels['vcard_attachments_pluginname'] = 'vCard bijlage';
+$labels['vcard_attachments_plugindescription'] = 'Laat u zien als een bericht voorzien is van een vcard en geeft u de mogelijkheid deze direct in te voegen tot het adressenboek.';
+$labels['importmessages_pluginname'] = 'Importeer berichten';
+$labels['importmessages_plugindescription'] = 'Importeer berichten van een zip- of emlbestand';
+$labels['zipdownload_pluginname'] = 'Exporteer berichten';
+$labels['zipdownload_plugindescription'] = 'Exporteer nerichten naar een zip bestand';
+$labels['markasjunk2_pluginname'] = 'Markeer berichten als spam';
+$labels['markasjunk2_plugindescription'] = 'Markeer berichten als spam of als geen spam';
+$labels['markasjunk_pluginname'] = 'Markeer berichten als spam';
+$labels['markasjunk_plugindescription'] = 'Markeer berichten als spam of als geen spam';
+$labels['google_ads_pluginname'] = 'Google advertenties';
+$labels['google_ads_plugindescription'] = 'Laat google advertenties zien';
+$labels['google_analytics_pluginname'] = 'Google Analytics';
+$labels['google_analytics_plugindescription'] = 'Voeg Google Analytics toe';
+$labels['globaladdressbook_pluginname'] = 'Algemene adressenboek';
+$labels['globaladdressbook_plugindescription'] = 'Dit adressenboek kunt u niet aanpassen en wordt aangeboden door de beheerder.';
+$labels['blockspamsending_pluginname'] = 'Voorkom het versturen van SPAM';
+$labels['blockspamsending_plugindescription'] = 'Sta toe om slechts een specifiek aantal berichten met dezelfde indeling tijdens één sessie te verzenden.';
+$labels['global_config_pluginname'] = 'Configuratie beheerder';
+$labels['global_config_plugindescription'] = 'Dit is een plugin om configuraties te beheren. Het optimaliseert uw server door configuratie bestanden te centraliseren. Het is maakt beheerders taken tevens eenvoudiger door gebruik van slechts één configuratie bestand voor al uw plugins.';
+$labels['jqueryui_pluginname'] = 'Jqueryui';
+$labels['jqueryui_plugindescription'] = 'Jqueryui javascript Bibliotheek';
+$labels['hide_blockquote_pluginname'] = 'Verberg blockquote';
+$labels['hide_blockquote_plugindescription'] = 'Verberg citaten wanneer het aantal regels groter is dan een specifiek aangegeven aantal regels.';
+$labels['crawler_pluginname'] = 'Zoekmachine';
+$labels['crawler_plugindescription'] = 'Nep pagina voor zoekmachines.';
+$labels['dblog_pluginname'] = 'Logboek opslaan in een database';
+$labels['dblog_plugindescription'] = 'Logboek opslaan in een database inplaats van opslaan in een bestand.';
+$labels['http_auth_pluginname'] = 'HTTP Authenticatie';
+$labels['http_auth_plugindescription'] = 'Een hulpvaardige plugin om HTTP authentificatie te ondersteunen. ';
+$labels['impersonate_pluginname'] = 'Imiteren';
+$labels['impersonate_plugindescription'] = 'Een administratieve tool om in te loggen tot een account met behulp van een master wachtwoord.';
+$labels['jscolor_pluginname'] = 'Kleuren selectieprogramma';
+$labels['jscolor_plugindescription'] = 'Een hulpvaardige plugin om een kleuren kiezer te tonen.';
+$labels['tinymce_pluginname'] = 'TinyMCE - HTML editor';
+$labels['tinymce_plugindescription'] = 'Deze plugin implanteert TinyMCE PHP Compressor (http://www.tinymce.com/wiki.php/Compressors:PHP). Tevens voegt het een mogelijkheid toe om TinyMCE instellingen te beheren zonder de Roundcube bron bestanden aan te hoeven passen.';
+$labels['embed_images_pluginname'] = 'Externe afbeeldingen insluiten';
+$labels['embed_images_plugindescription'] = 'Externe afbeeldingen insluiten in de bron van het bericht.';
+$labels['lang_sel_pluginname'] = 'Selecteer taal';
+$labels['lang_sel_plugindescription'] = 'Selecteer taal tijdens het aanmelden';
+$labels['newuser_pluginname'] = 'Nieuwe gebruiker';
+$labels['newuser_plugindescription'] = 'Informeert beheerders wanneer een nieuwe gebruiker zich via het webmail interface aanmeld en zend bij de eerste login een welkomstbericht aan de nieuwe gebruiker.';
+$labels['placeholder_pluginname'] = 'Placeholder Attributen';
+$labels['placeholder_plugindescription'] = 'Voeg een placeholder attribuut toe aan text en password invoer elementen.';
+$labels['qtip_pluginname'] = 'jQueryUI Tool Tips';
+$labels['qtip_plugindescription'] = 'Een hulpvaardige plugin om jQueryUI qtips te gebruiken.';
+$labels['sabredav_pluginname'] = 'SabreDAV';
+$labels['sabredav_plugindescription'] = 'Maakt SabreDAV accounts voor CalDAV kalender wanneer een nieuwe gebruiker in Roundcube worden aangemaakt. Past tevens wachtwoorden aan wanneer deze worden aangepast.';
+$labels['savepassword_pluginname'] = 'Wachtwoorden opslaan';
+$labels['savepassword_plugindescription'] = 'Dit is een plugin welke word vereist door bepaalde andere plugins.';
+$labels['database_attachments_pluginname'] = 'Database bijlage';
+$labels['database_attachments_plugindescription'] = 'Hulp plugin om bijlages in de database te beheren.';
+$labels['new_user_dialog_pluginname'] = 'Nieuwe gebruiker dialoog';
+$labels['new_user_dialog_plugindescription'] = 'Zorgt ervoor dat nieuwe gebruikers bij de eerste keer dat zij inloggen een popup scherm krijgen te zien waarbij de identiteit kan worden ingesteld. ';
+$labels['rcguard_pluginname'] = 'HerCAPTCHA';
+$labels['rcguard_plugindescription'] = 'Activeer CAPTCHA na een aantal mislukte aanmeld pogingen';
+$labels['domain_check_pluginname'] = 'Controleer domein';
+$labels['domain_check_plugindescription'] = 'Beperk het inloggen alleen voor gespecificeerde domeinen';
+
+?> \ No newline at end of file
diff --git a/plugin_manager/localization/pl_PL.inc b/plugin_manager/localization/pl_PL.inc
new file mode 100644
index 0000000..15161bc
--- /dev/null
+++ b/plugin_manager/localization/pl_PL.inc
@@ -0,0 +1,275 @@
+<?php
+/*
++-----------------------------------------------------------------------+
+| ./plugins/plugin_manager/localization/pl_PL.inc
+|
+| Language file of MyRoundcube Plugins Bundle
+| Copyright (C) 2010-2013, Roland 'rosali' Liebl
+|
++-----------------------------------------------------------------------+
+| Author: Tomasz - 08/25/2013 13:22:04
++-----------------------------------------------------------------------+
+*/
+
+$labels = array();
+$labels['pluginname'] = 'Menedżer Wtyczek';
+$labels['plugindescription'] = 'Menedżer Wtyczek daje użytkownikom opcje aby włączać i wyłączać wtyczki ( z poziomu użytkownika) podczas gdy pomaga administratorom aktualizować, poprawiać błędu, tworzyć dokumentacje i zalecenia. Menadżer Wtyczek nie modyfikuje plików systemowych ani nie będzie instalować samodzielnie wtyczek.';
+$labels['plugin_manager_title'] = 'ZarzÄ…dzanie wtyczkami';
+$labels['plugin_manager_center'] = 'Centrum zarzÄ…dzania wtyczkami';
+$labels['updatepm'] = 'Dostępna aktualizacja Menedżera Wtyczek';
+$labels['updatepmrequired'] = 'Wymagana aktualizacja Menedżera Wtyczek';
+$labels['downloadnow'] = 'Pobierz teraz';
+$labels['calendaring'] = 'Kalendarzowe';
+$labels['misc'] = 'Różne';
+$labels['downloads'] = 'pobrania';
+$labels['issue'] = 'Problem';
+$labels['submitissue'] = 'Zgłaszanie problemu.<br /><br />Sprawdź dzienniki zdarzeń, a następnie dołącz istotne informacje w zgłoszeniu.<br /><br /><b>UWAGA</b>: Wymagane konto Google.';
+$labels['showall'] = 'Pokaż wszystkie wtyczki';
+$labels['hideuptodate'] = 'Pokaż tylko uaktualnienia';
+$labels['connectionerror'] = 'Zdalny serwer nie odpowiedział na próbę połączenia.';
+$labels['trylater'] = 'Proszę spróbować później...';
+$labels['translate'] = 'Lokalizuj tÄ… wtyczkÄ™';
+$labels['whatsthis'] = 'Co to jest?';
+$labels['restoredefaults'] = 'Przywróć domyślne';
+$labels['checkall'] = 'Zaznacz wszystko';
+$labels['uncheckall'] = 'Odznacz wszystko';
+$labels['toggle'] = 'Odwróć zaznaczenie';
+$labels['status'] = 'Status';
+$labels['globalplugins'] = 'Wtyczki globalne';
+$labels['performance'] = 'Wydajność';
+$labels['backend'] = 'Wtyczki serwerowe';
+$labels['messagesmanagement'] = 'ZarzÄ…dzanie komunikatami';
+$labels['furtherconfig'] = 'Czy chciałbyś teraz skonfigurować tą wtyczkę?';
+$labels['uninstall'] = 'Jesteś bliski wyłączenia tej wtyczki. Czy chcesz, aby wszystkie zachowane ustawienia zostały trwale usunięte?';
+$labels['uninstallconfirm'] = 'JesteÅ› bliski wyÅ‚Ä…czenia tej wtyczki. OSTRZEÅ»ENIE: Wybór <WYÅÄ„CZ> spowoduje wyÅ‚Ä…czenie tej wtyczki, a Twoje aktualne dane i ustawienia pozostanÄ… zachowane w celu późniejszego wykorzystania. Wybór <USUŃ> spowoduje trwaÅ‚e usuniÄ™cie wszystkich danych i konfiguracji wykorzystywanych przez tÄ… wtyczkÄ™. Miej na uwadze, że tej czynnoÅ›ci nie można cofnąć.';
+$labels['areyousure'] = 'Nie będziesz mógł cofnąć tej czynności. Naprawdę jesteś pewien?';
+$labels['successfullydeleted'] = 'Ustawienia zostały usunięte.';
+$labels['successfullysaved'] = 'Zapis powiódł się.';
+$labels['errorsaving'] = 'Wystąpił błąd poczas zapisu.';
+$labels['yes'] = 'Tak';
+$labels['no'] = 'Nie';
+$labels['disable'] = 'Wyłącz';
+$labels['remove'] = 'Usuń';
+$labels['savewarning'] = 'Czy chcesz już zachować zmiany?';
+$labels['plugin_manager_update'] = 'Uaktualnij wtyczki';
+$labels['authors_comments'] = 'Komentarze autora (nie przetłumaczone)';
+$labels['requiredby'] = 'Wtyczka wymagana przez';
+$labels['requires'] = 'Wtyczka wymaga';
+$labels['recommended'] = 'Zalecane wtyczki';
+$labels['update_plugins'] = 'Uaktualnij wtyczki';
+$labels['ziparchive'] = 'Pobierz archiwum ZIP';
+$labels['demoaccount'] = 'Pobieranie niemożliwe (konto Demo)';
+$labels['serverversion'] = 'Używana wersja';
+$labels['mirrorversion'] = 'Wersja uaktualnienia';
+$labels['mirrorhost'] = 'Serwer z aktualnieniem';
+$labels['comments'] = 'Wymagania i informacje zwiÄ…zane z uaktualnieniem';
+$labels['update_error'] = 'Niezgodność wersji';
+$labels['update_ok'] = 'Wykryto najnowszÄ… wersjÄ™. Uaktualnienie nie jest potrzebne.';
+$labels['update_edit'] = 'Wtyczka musi zostać ponownie skonfigurowana lub wymaga zmiany ustawień bazy danych. Zapoznaj się z informacjami związanymi z uaktualnieniem.';
+$labels['servernewer'] = 'Wersja używanej wtyczki jest nowsza od wersji uaktualnionej.';
+$labels['orhigher'] = 'lub wyższa';
+$labels['rc_ok'] = 'Roundcube Core jest aktualny.';
+$labels['update_update'] = 'Wtyczka zdeaktualizowana. Proszę uaktualnić! Zapoznaj się z informacjami związanymi z uaktualnieniem.';
+$labels['noupdates'] = 'Nie wybrano uaktualnienia.';
+$labels['rc_update'] = 'Roundcube Core jest nie aktualny. Proszę uaktualnić!';
+$labels['rc_uptodate'] = 'Roundcube Core jest aktualny.';
+$labels['rc_newer'] = 'Używany Roundcube Core jest nowszy od uaktualnienia!';
+$labels['nottested'] = 'Zachowaj ostrożność wykorzystując wtyczki! Nie wiadomo czy te wtyczki działają z Roundcube v%s.';
+$labels['justunzip'] = 'Rozpakuj archiwum w miejscu istniejÄ…cej instalacji.';
+$labels['guide'] = 'Czytaj więcej...';
+$labels['thirdparty'] = 'To nie jest wtyczka MyRoundcube.';
+$labels['thirdpartywarning'] = 'Wtyczka autorstwa osoby trzeciej. Zalecamy nie pobierać wtyczki z naszego serwera.<br />Zamiast tego proponujemy jej pobranie z witryny projektanta wtyczki.<br />Dzięki temu uzyskasz pewność, że pobrałeś najnowszą wersję oraz będziesz mógł<br />zapoznać się z informacji i poradami przygotowanymi przez jej projektanta.';
+$labels['develsite'] = 'Pobierz';
+$labels['notinstalled'] = 'nie zainstalowana';
+$labels['notregistered'] = 'nie używana';
+$labels['roundcubeurl'] = 'Pobierz Roundcube';
+$labels['languageupdate'] = 'Dostępna aktualizacja lokalizacji.';
+$labels['localizationfilesonly'] = 'Uwaga: Plik zawiera tylko pliki z tłumaczeniem.';
+$labels['donotregister'] = 'Nie uaktywniaj tej wtyczki, gdyż jest ona ładowana automatycznie.';
+$labels['register'] = 'Uaktywnij tÄ… wtyczkÄ™ w ./config/config.inc.php <small>[$config[\'plugins\'] = array("<i>foo</i>", "<i>bar</i>");]</small>.';
+$labels['customer_account'] = 'Konto Klienta';
+$labels['customer_id'] = 'ID Klienta';
+$labels['invalid_customer_id'] = 'Nieprawidłowy ID klienta';
+$labels['invalid_credits'] = 'Nieprawidłowy stan środków';
+$labels['successfully_transferred'] = 'Åšrodki przeniesione poprawnie';
+$labels['merge'] = 'Połącz środki';
+$labels['credits'] = 'Åšrodki';
+$labels['creditsupdated'] = 'Stan środków został zmieniony podczas ostatniego odświeżenia strony';
+$labels['buynow'] = 'Kup środki teraz';
+$labels['history'] = 'Historia Konta';
+$labels['details'] = 'Szczegóły';
+$labels['receipt'] = 'Rachunek';
+$labels['plugins'] = 'Wtyczki';
+$labels['clickhere'] = 'Klinij tutaj';
+$labels['discardliabletopaycosts'] = 'Usuń ponoszone koszty pobrań';
+$labels['unchecknotinstalledplugins'] = 'Usuń nie zainstalowane pobrania wtyczek';
+$labels['sum'] = 'Suma';
+$labels['show'] = 'Pokaż';
+$labels['hide'] = 'Ukryj';
+$labels['view'] = 'widok';
+$labels['expired'] = 'przerminowane';
+$labels['terms'] = 'Warunki';
+$labels['pricelist'] = 'Koszty pobrań';
+$labels['forthisdownload'] = 'dla tego pobrania';
+$labels['remainingcredits'] = 'pozostałe środki';
+$labels['initialdownload'] = 'PoczÄ…tkowe pobranie';
+$labels['keyfeatureaddition'] = 'Nowa ważna funkcja';
+$labels['codeimprovements'] = 'Usprawnienie kodu';
+$labels['servicenotavailable'] = 'Usługa aktualnie niedostępna. Spróbuj ponownie później!';
+$labels['myrcerror'] = 'Usługi MyRoundcube są aktualnie niedostępne.';
+$labels['getnew'] = 'Wymagany ID Klienta';
+$labels['getnew_hint'] = 'Zalecamy aby odnawiać ID Klienta regularnie. Jeżeli zauważysz podejrzane zachowanie na koncie, natychmiast odnów swoje ID klienta.';
+$labels['transfer'] = 'Przekaż środki';
+$labels['submenuprefix'] = '» ';
+$labels['noplugindescription'] = 'Nie wykryto opisu wtyczki.';
+$labels['welcome_to_plugin_manager'] = 'Witamy w Menedżerze Wtyczek';
+$labels['about_to_create_account'] = 'Menedżer Wtyczek jest w trakcie tworzenia uprzywilejowanego konta administracyjnego.';
+$labels['create_account_proceed'] = 'Żeby wykonać tą czynność, potrzebne będzie potwierdzenie, że jesteś administratorem systemu.';
+$labels['please_create'] = 'Proszę, utwórz poniższy plik w katalogu głównym Twojej instalacji Roundcube:';
+$labels['thank_you'] = 'Dziękujemy!';
+$labels['done'] = 'Zrobione';
+$labels['manage_admins'] = 'Administratorzy';
+$labels['plugin_manager_admins'] = 'Administratorzy Menedżera Wtyczek';
+$labels['allow_plugins_configuration'] = 'Nadaj uprawnienia konfiguracji wtyczek';
+$labels['share_credits'] = 'Współdziel środki MyRC$';
+$labels['add'] = 'Dodaj';
+$labels['accountnotexists'] = 'Konto nie istnieje';
+$labels['sharedby'] = 'Konto klienckie współdzielone przez';
+$labels['switch'] = 'Przełącz';
+$labels['ownaccount'] = 'na konto własne';
+$labels['shareinvitation'] = 'na konto współdzielone';
+$labels['serverconfiguration'] = 'Konfiguracja serwera';
+$labels['pluginsconfiguration'] = 'Konfiguracja wtyczek';
+$labels['use_ssl'] = 'Ustanawiaj bezpieczne połączenia SSL z serwerami MyRoundcube';
+$labels['use_hmail'] = 'Używaj wtyczek zgodnych z hMailserver';
+$labels['show_myrc_messages'] = 'Wyświetlaj komunikaty powiadomień pochodzące z serwerów MyRoundcube';
+$labels['maintenance_mode'] = 'Tryb obsługi';
+$labels['serverwide'] = 'globalna konfiguracja serwera';
+$labels['file_based_config'] = 'Włącz konfigurację Menedżera Wtyczek przechowywaną w pliku';
+$labels['advanced_admins'] = 'zalecane tylko dla zaawansowanych administratorów';
+$labels['show_config'] = 'Pokaż aktualną konfigurację';
+$labels['systemadmin'] = 'Administrator Systemu';
+$labels['admin'] = 'Administrator';
+$labels['configuredby'] = 'skonfigurowane przez';
+$labels['enabled'] = 'Włączone (domyślnie)';
+$labels['protected'] = 'Zabezpieczone';
+$labels['skins'] = 'Skórki';
+$labels['loads_always'] = 'ObowiÄ…zkowe';
+$labels['loads_never'] = 'Wtyczka jest wyłączona';
+$labels['loads_by_user'] = 'Użytkownik może samodzielnie decydować o jej użyciu';
+$labels['loads_linked'] = 'PowiÄ…zane z';
+$labels['unbind'] = 'odwiąż';
+$labels['bind'] = 'powiąż';
+$labels['addplugin'] = 'Dodaj wtyczkÄ™';
+$labels['removeplugin'] = 'Usuń wtyczkę';
+$labels['errorplugin'] = 'BÅ‚Ä…d: Nie znaleziono wymaganych wtyczek';
+$labels['errorrcversion'] = 'BÅ‚Ä…d: Wtyczka wymaga Roundcube';
+$labels['errorphpversion'] = 'BÅ‚Ä…d: Wtyczka wymaga PHP';
+$labels['errorphpcurl'] = 'BÅ‚Ä…d: Nie zainstalowano cURL';
+$labels['errorphpfinfo'] = 'BÅ‚Ä…d: Nie zainstalowano finfo';
+$labels['errordb'] = 'Wymagane dostosowanie bazy danych. Włącz wtyczkę, aby rozpocząć tą operację.';
+$labels['errordb8'] = 'Wymagane dostosowanie bazy danych.';
+$labels['syntaxerror'] = 'Błąd składni PHP';
+$labels['notconfigured'] = 'Wtyczka nie skonfigurowana';
+$labels['editconfig'] = 'Edycja konfiguracji';
+$labels['instructions'] = 'Instrukcje';
+$labels['dbautomatically'] = 'Rozpocznij dostosowanie.';
+$labels['dbmanually'] = 'Proszę postępować zgodnie z instrukcją.';
+$labels['ornewer'] = 'lub nowsze';
+$labels['official_releases'] = 'Wspieramy wyłącznie oficjalne wydania Roundcube';
+$labels['localizationmissing'] = 'Nie wykryto plików językowych';
+$labels['documentation'] = 'Dokumentacja';
+$labels['select_plugin'] = 'Wybierz wtyczkÄ™';
+$labels['legend'] = 'Opis';
+$labels['plugindisabledbydefault'] = 'Wtyczka jest domyślnie wyłączona - Użytkownik może samodzielnie decydować o jej użyciu';
+$labels['pluginenabledbydefault'] = 'Wtyczka jest domyślnie włączona - Użytkownik może samodzielnie decydować o jej użyciu';
+$labels['pluginmandatory'] = 'Obowiązkowe - wtyczka jest włączona, użytkownicy nie mogą włączać/wyłączać wtyczki';
+$labels['show_about_link'] = 'Pokazuj odsyłacz "O MyRoundcube"';
+$labels['show_support_link'] = 'Pokazuj odsyłacz "Wsparcie"';
+$labels['use_myroundcube_watermark'] = 'Używaj znaku wodnego "MyRoundcube"';
+$labels['remove_watermark'] = 'Nie wyświetlaj w ogóle znaku wodnego';
+$labels['database'] = 'Baza danych';
+$labels['credits_transferred'] = 'Åšrodki przeniesiono';
+$labels['customer_id_changed'] = 'Zmieniono ID klienta';
+$labels['myrcd_bought'] = 'Zakupiono MyRC$ - dziękujemy!';
+$labels['PHPMyAdmin'] = 'PHPMyAdmin';
+$labels['markbuttons_pluginname'] = 'Przyciski Oznaczania Wiadomości';
+$labels['markbuttons_plugindescription'] = 'Dodaj ikony oznaczania wiadomości.';
+$labels['keyboard_shortcuts_pluginname'] = 'Skróty klawiszowe';
+$labels['keyboard_shortcuts_plugindescription'] = 'Wpisuj polecenia używając skrótów klawiszowych.';
+$labels['message_highlight_pluginname'] = 'Podświetlanie Wiadomości';
+$labels['message_highlight_plugindescription'] = 'Podświetlanie wiadomości pasujących do filtra.';
+$labels['google_contacts_pluginname'] = 'Kontakty Google';
+$labels['google_contacts_plugindescription'] = 'Dostęp do kontaktów Google';
+$labels['contextmenu_pluginname'] = 'Menu Kontekstowe';
+$labels['contextmenu_plugindescription'] = 'Pozwala na dostęp do menu uruchamianego prawym przyciskiem myszy.';
+$labels['newmail_notifier_pluginname'] = 'Informacja o nowej wiadomości';
+$labels['newmail_notifier_plugindescription'] = 'Powiadamiaj o nowych wiadomościach';
+$labels['listcommands_pluginname'] = 'Odpowiedzi dla List mailigowych';
+$labels['listcommands_plugindescription'] = 'Pozwala na różne odpowiedzi na wiadomości z list mailingowych';
+$labels['copymessage_pluginname'] = 'Kopuj Wiadomości';
+$labels['copymessage_plugindescription'] = 'Pozwala na kopiowanie wiadomości do inych folderów IMAP';
+$labels['vcard_attachments_pluginname'] = 'Załączniki vCard';
+$labels['vcard_attachments_plugindescription'] = 'Dodaje przycisk do automatycznego dodania wizytówki do książki adresowej';
+$labels['zipdownload_pluginname'] = 'Eksport Wiadomości';
+$labels['zipdownload_plugindescription'] = 'Eksport wiadomości jako .zip';
+$labels['markasjunk2_pluginname'] = 'Zaznacz Wiadomości jako SPAM';
+$labels['markasjunk2_plugindescription'] = 'Zaznaczanie wiadomości jako SPAM i nie SPAM';
+$labels['markasjunk_pluginname'] = 'Zaznacz Wiadomości jako SPAM';
+$labels['markasjunk_plugindescription'] = 'Zaznaczanie wiadomości jako SPAM i nie SPAM';
+$labels['google_analytics_pluginname'] = 'Google Analytics';
+$labels['google_analytics_plugindescription'] = 'Dołącz google Analytics';
+$labels['globaladdressbook_pluginname'] = 'Globalna Książka adresowa';
+$labels['globaladdressbook_plugindescription'] = 'Globalna książka adresowa przygotowana przez Administratora.';
+$labels['blockspamsending_pluginname'] = 'Blokada Wysyłania SPAMu';
+$labels['blockspamsending_plugindescription'] = 'Pozwala na ograniczenie wysyłania zbyt dużych ilości wiadmości o takiej samej treści podczas jednej sesji.';
+$labels['global_config_pluginname'] = 'Manadżer Konfiguracji';
+$labels['global_config_plugindescription'] = 'To jest wtyczka menadżera konfiguracji. Optymalizuje twój serwer poprzez centralizacje konfiguracji wtyczek. Pozwala też na zarządzanie wtyczkami z jednego pliku konfiguracyjnego.';
+$labels['jqueryui_pluginname'] = 'Jquertyui';
+$labels['jqueryui_plugindescription'] = 'Biblioteka javascript Jqueryui';
+$labels['hide_blockquote_pluginname'] = 'Ukryj cytaty';
+$labels['hide_blockquote_plugindescription'] = 'Urywa cytaty jezeli liczba lini jest wieksza niż ustwiona ilość lini cytowanego tekstu.';
+$labels['crawler_pluginname'] = 'Roboty';
+$labels['crawler_plugindescription'] = 'Strona dla robotów i web crawlerów.';
+$labels['archive_pluginname'] = 'Archiwum';
+$labels['autologon_pluginname'] = 'Auto-logowanie';
+$labels['autologon_plugindescription'] = 'Zaloguj automatycznie';
+$labels['dblog_pluginname'] = 'Loguj do bazy';
+$labels['dblog_plugindescription'] = 'Logowanie zdarzeń do bazy danych zamiast do pliku.';
+$labels['gibberish_pluginname'] = 'Szyfrowanie Gibberish';
+$labels['http_request_pluginname'] = 'Żądanie HTTP';
+$labels['http_auth_pluginname'] = 'HTTP Autentykacja';
+$labels['http_auth_plugindescription'] = 'Wtyczka wspierajÄ…ca autentykacje HTTP';
+$labels['http_authentication_pluginname'] = 'Autentukacja HTTP (default)';
+$labels['jscolor_pluginname'] = 'Wybór Kolorów';
+$labels['jscolor_plugindescription'] = 'Wtyczka pozawalająca wybrać kolory';
+$labels['tinymce_pluginname'] = 'TinyMCE - Edytor HTML';
+$labels['tinymce_plugindescription'] = 'Wtyczka implementujÄ…ca edytor TinyMCE';
+$labels['lang_sel_pluginname'] = 'Wybierz język';
+$labels['lang_sel_plugindescription'] = 'Wybierz język na stronie logowania.';
+$labels['newuser_pluginname'] = 'Nowy użytkownik';
+$labels['newuser_plugindescription'] = 'Poinformuj administratora o rejestracji nowego uzytkonika poprzez interfejs webmail oraz wyślij wiadomość powitalną przy pierwszym logowaniu.';
+$labels['placeholder_pluginname'] = 'Atrybuty pól';
+$labels['placeholder_plugindescription'] = 'Dodaje atrybuty do pól tekstu i hasla';
+$labels['qtip_pluginname'] = 'jQueryUI Dymki Wskazówek';
+$labels['qtip_plugindescription'] = 'Wtyczka dodająca dymki ze wskazówkami';
+$labels['sabredav_pluginname'] = 'SabreDAV';
+$labels['sabredav_plugindescription'] = 'Tworzy konta SabreDAV dla kalendarza CalDAV kiedy nowy użytkownik zostaje dodany do Rouncube i tworzy połączenia pomiędzy Roundcubre-SabreDAV.';
+$labels['savepassword_pluginname'] = 'Zapisz Hasła';
+$labels['savepassword_plugindescription'] = 'Wtyczka pomocnicza dla innych wtyczek';
+$labels['database_attachments_pluginname'] = 'Załączniki bazodanowe';
+$labels['database_attachments_plugindescription'] = 'Wtyczka pomocnicza do zarządzaniem załączników w bazie';
+$labels['help_pluginname'] = 'Pomoc';
+$labels['new_user_dialog_pluginname'] = 'Informacja dla nowych użytkowników';
+$labels['new_user_dialog_plugindescription'] = 'Pokazuje ustawienia tożsamości dla nowych użytkowników. Wtyczka sprawdza czy nowy uzytkownik ma stworzoną poprawnie tożsamość i pomaga zakonczenie procesu rejestracji tożsamości.';
+$labels['rcguard_pluginname'] = 'ReCAPTCHA';
+$labels['rcguard_plugindescription'] = 'Zmusza wprowadzenie CAPTCHA po kilku nieudanych próbach logowania.';
+$labels['domain_check_pluginname'] = 'Sprawdzenie Domeny';
+$labels['domain_check_plugindescription'] = 'Ograniczenie logowania tylko dla niektórych domen';
+$labels['tasklist_pluginname'] = 'Lista zadań';
+$labels['userinfo_pluginname'] = 'Informacja o użytkowniku';
+$labels['filters_pluginname'] = 'Filtry';
+$labels['password_pluginname'] = 'Zmiana hasła';
+$labels['example_addressbook_pluginname'] = 'Przykładowa książka adresowa';
+
+?> \ No newline at end of file
diff --git a/plugin_manager/localization/pt_BR.inc b/plugin_manager/localization/pt_BR.inc
new file mode 100644
index 0000000..0b1e781
--- /dev/null
+++ b/plugin_manager/localization/pt_BR.inc
@@ -0,0 +1,182 @@
+<?php
+/*
+ +-----------------------------------------------------------------------+
+ | ./plugins/plugin_manager/localization/pt_BR.inc
+ |
+ | Language file of MyRoundcube Plugins Bundle
+ | Copyright (C) 2010-2013, Roland 'rosali' Liebl
+ |
+ +-----------------------------------------------------------------------+
+ | Author: filhocf - 01/03/2013 18:46:35
+ +-----------------------------------------------------------------------+
+*/
+
+$labels = array();
+$labels['pluginname'] = 'Plugin Manager';
+$labels['plugindescription'] = 'O Plugin Manager dá ao usuário as opções de ativar e/ou desativar plugins (ao nível de conta de usuário) enquanto ele ajuda os administradores a manter atualizado com os plugins, correções de erros, descarga centralizada, documentação e recomendações. O Plugin Manager não faz modificações no seu sistema de arquivo ou não instalará plugins automaticamente.';
+$labels['plugin_manager_title'] = 'Gerenciar Plugins';
+$labels['plugin_manager_center'] = 'Centro de Gerenciamento de Plugin';
+$labels['calendaring'] = 'Calendário';
+$labels['misc'] = 'Diversos';
+$labels['downloads'] = 'Descargas';
+$labels['issue'] = 'problema';
+$labels['submitissue'] = 'Reporte um problema.Por favor, verifique seus registros e forneça informações relevantes no bilhete...';
+$labels['showall'] = 'Mostrar todos os Plugins';
+$labels['hideuptodate'] = 'Mostrar atualizações somente';
+$labels['connectionerror'] = 'O servidor remoto não respondeu a solicitação de conexão.';
+$labels['trylater'] = 'Por favor, tente mais tarde...';
+$labels['translate'] = 'Traduzir este plugin';
+$labels['restoredefaults'] = 'Restaurar padrões';
+$labels['checkall'] = 'Marcar todos';
+$labels['uncheckall'] = 'Desmarcar todos';
+$labels['toggle'] = 'Alternar seleção';
+$labels['status'] = 'Status';
+$labels['globalplugins'] = 'Plugins globais';
+$labels['backend'] = 'Plugins do servidor';
+$labels['messagesmanagement'] = 'Gerenciamento de mensagens';
+$labels['furtherconfig'] = 'Você deseja configurar este plugin agora?';
+$labels['uninstall'] = 'Você está prestes a desativar este plugin. Você deseja remover todas as configurações salvas permanentemente?';
+$labels['uninstallconfirm'] = 'Você está prestes a desativar este plugin. ATENÇÃO: Selecione »DESATIVAR« para desativar este plugin enquanto mantém seus dados atuais e configurações armazenadas no seu servidor se você planeja usar eles novamente. Selecione »REMOVER« se você deseja que todos seus dados e configurações gerenciadas por este plugin sejam removidos permanentemente de seus bancos de dados. Note que esta ação não pode ser desfeita.';
+$labels['areyousure'] = 'Você não pode desfazer esta ação. Você está certo disto?';
+$labels['successfullydeleted'] = 'Configuracões foram removidos com sucesso.';
+$labels['successfullysaved'] = 'Salvo com sucesso.';
+$labels['errorsaving'] = 'Ocorreu um erro ao salvar.';
+$labels['yes'] = 'Sim';
+$labels['no'] = 'Não';
+$labels['disable'] = 'Desativar';
+$labels['remove'] = 'Remover';
+$labels['savewarning'] = 'Você ainda deseja salvar suas mudanças?';
+$labels['plugin_manager_update'] = 'Atualizar Plugins';
+$labels['authors_comments'] = 'Comentários do Autor (não traduzido)';
+$labels['requiredby'] = 'O Plugin é requerido por';
+$labels['requires'] = 'O Plugin requer';
+$labels['recommended'] = 'Plugins recomendados';
+$labels['update_plugins'] = 'Atualizar Plugins';
+$labels['ziparchive'] = 'Baixar arquivo ZIP';
+$labels['demoaccount'] = 'Desculpe, sem descargas (Conta de demonstração)';
+$labels['serverversion'] = 'Versão do servidor';
+$labels['mirrorversion'] = 'Versão do espelho';
+$labels['mirrorhost'] = 'Servidor espelho';
+$labels['comments'] = 'Requerimentos e Notas de Atualização';
+$labels['update_error'] = 'Incompatibilidade de versão';
+$labels['update_ok'] = 'A versão mais recente foi detectada. Não é necessária atualização.';
+$labels['update_edit'] = 'O Plugin teve que ser reconfigurado ou requer ajustes de banco de dados. Por favor, considere as Notas de Atualização.';
+$labels['servernewer'] = 'Plugins registrados são mais novos que a versão do espelho.';
+$labels['orhigher'] = 'ou maior';
+$labels['rc_ok'] = 'O número do RoundCube está atualizado.';
+$labels['update_update'] = 'O Plugin está desatualizado. Por favor, atualize! Considere as Notas de Atualização.';
+$labels['noupdates'] = 'Nenhuma Atualização selecionada.';
+$labels['rc_update'] = 'O núcleo do Roundcube está desatualizado. Por favor, atualize!';
+$labels['rc_uptodate'] = 'O número do RoundCube está atualizado.';
+$labels['rc_newer'] = 'O núcleo do Roundcube é mais novo que a versão do espelho!';
+$labels['nottested'] = 'Por favor, use os Plugins com cuidado! Nós não sabemos se os Plugins trabalham com o Roundcube x%s.';
+$labels['justunzip'] = 'Somente descompacte o arquivo sobre sua instalação existe.';
+$labels['guide'] = 'Leia mais...';
+$labels['thirdparty'] = 'Este não é um Plugin do MyRoundcube.';
+$labels['thirdpartywarning'] = 'Este é um plugin de terceiros. Nós recomendamosnão baixar o plugin deste Servidor Espelho.';
+$labels['develsite'] = 'Baixar';
+$labels['notinstalled'] = 'Não instalado';
+$labels['notregistered'] = 'não registrado';
+$labels['roundcubeurl'] = 'Baixe o Roundcube';
+$labels['languageupdate'] = 'Uma atualização de idioma está disponível.';
+$labels['donotregister'] = 'Não registre este plugin. Ele é lido automaticamente.';
+$labels['register'] = 'Registre este plugin em ./config/config.inc.php [$config[\'plugins\'] = array("foo", "bar");';
+$labels['customer_account'] = 'Conta de Cliente';
+$labels['customer_id'] = 'ID do Cliente';
+$labels['invalid_customer_id'] = 'ID do Cliente Inválido';
+$labels['invalid_credits'] = 'Créditos inválidos';
+$labels['successfully_transferred'] = 'Créditos transferidos com sucesso';
+$labels['merge'] = 'Fundir Créditos';
+$labels['credits'] = 'Créditos';
+$labels['creditsupdated'] = 'Créditos foram modificados desde a última atualização da página';
+$labels['buynow'] = 'Comprar créditos agora';
+$labels['history'] = 'Histórico da Conta';
+$labels['details'] = 'Detalhes';
+$labels['receipt'] = 'Recibo';
+$labels['plugins'] = 'Plugins';
+$labels['clickhere'] = 'Clique aqui';
+$labels['discardliabletopaycosts'] = 'Descartar descargas que incorram em custos';
+$labels['sum'] = 'Soma';
+$labels['show'] = 'Mostrar';
+$labels['hide'] = 'Ocultar';
+$labels['view'] = 'exibir';
+$labels['expired'] = 'expirado';
+$labels['terms'] = 'Termos';
+$labels['pricelist'] = 'Preços de descarga';
+$labels['forthisdownload'] = 'para esta descarga';
+$labels['remainingcredits'] = 'créditos remanescentes';
+$labels['initialdownload'] = 'Descarga inicial';
+$labels['keyfeatureaddition'] = 'Nova funcionalidade chave';
+$labels['codeimprovements'] = 'Melhorias de código';
+$labels['servicenotavailable'] = 'O serviço está atualmente indisponível. Por favor, tente mais tarde!';
+$labels['getnew'] = 'Querer um novo ID de Cliente';
+$labels['getnew_hint'] = 'Nós recomendamos renovar seu ID de Cliente frequentemente. Se você notar qualquer atividade suspeita nos seus detalhes da conta, renove seu ID de cliente imediatamente.';
+$labels['transfer'] = 'Transferir créditos';
+$labels['noplugindescription'] = 'Não foi detectado descrição do plugin.';
+$labels['markbuttons_pluginname'] = 'Botões de marcação de mensagem';
+$labels['markbuttons_plugindescription'] = 'Adicionar ícones de controle no separador de lista de mensagens para marcação rápida de mensagens.';
+$labels['automatic_addressbook_pluginname'] = 'Catálogo de endereços automático';
+$labels['automatic_addressbook_plugindescription'] = 'Coletar endereços de e-mail dos recipientes em um catálogo de endereços separado.';
+$labels['keyboard_shortcuts_pluginname'] = 'Atalhos de teclado';
+$labels['keyboard_shortcuts_plugindescription'] = 'Digite os comandos usando atalhos de teclado.';
+$labels['message_highlight_pluginname'] = 'Mensagens destacadas';
+$labels['message_highlight_plugindescription'] = 'Mensagens destacadas que combinam com suas opções de filtro.';
+$labels['fixTHEAD_pluginname'] = 'Corrigir o cabeçalho da lista de mensagens';
+$labels['fixTHEAD_plugindescription'] = 'Corrigir o cabeçalho da lista de mensagens.';
+$labels['compose_addressbook_pluginname'] = 'Pegar endereços';
+$labels['compose_addressbook_plugindescription'] = 'Pegar os endereços ao compor uma mensagem.';
+$labels['google_contacts_pluginname'] = 'Contatos do Google';
+$labels['google_contacts_plugindescription'] = 'Acessar seus contatos do Google.';
+$labels['contextmenu_pluginname'] = 'Menu de contexto';
+$labels['contextmenu_plugindescription'] = 'Ativar a funcionalidade de menu de contexto com o clique direito.';
+$labels['newmail_notifier_pluginname'] = 'Novo Notificador de E-mail';
+$labels['newmail_notifier_plugindescription'] = 'Notificar sobre novas mensagens.';
+$labels['listcommands_pluginname'] = 'Responder para lista de discussão';
+$labels['listcommands_plugindescription'] = 'Varias opções de resposta para mensagens enviadas das listas de discussão.';
+$labels['copymessage_pluginname'] = 'Copiar mensagem(ns)';
+$labels['copymessage_plugindescription'] = 'Copiar mensagem(ns) para outra pasta IMAP.';
+$labels['forwardattachment_pluginname'] = 'Encaminhar como Anexo';
+$labels['forwardattachment_plugindescription'] = 'Encaminhar múltiplas mensagens como anexos.';
+$labels['vcard_attachments_pluginname'] = 'Anexos vCard';
+$labels['vcard_attachments_plugindescription'] = 'Adicionar uma caixa para mensagens que tenham um anexo vcard para importar o contato diretamente para o catálogo de endereço.';
+$labels['importmessages_pluginname'] = 'Importar mensagens';
+$labels['importmessages_plugindescription'] = 'Importar mensagens de uma fonte zip ou eml.';
+$labels['zipdownload_pluginname'] = 'Exportar mensagens';
+$labels['zipdownload_plugindescription'] = 'Exportar mensagens como um arquivo zip.';
+$labels['markasjunk2_pluginname'] = 'Marcar mensagens como spam';
+$labels['markasjunk2_plugindescription'] = 'Marcar mensagens como spam ou não spam.';
+$labels['markasjunk_pluginname'] = 'Marcar mensagens como spam';
+$labels['markasjunk_pluginname'] = 'Google Ads';
+$labels['google_ads_plugindescription'] = 'Mostrar anúncios do Google.';
+$labels['google_analytics_pluginname'] = 'Google Analytics';
+$labels['google_analytics_plugindescription'] = 'Incluir Google Analytics.';
+$labels['globaladdressbook_pluginname'] = 'Catálogo de endereços global';
+$labels['globaladdressbook_plugindescription'] = 'Este é um catálogo de endereço somente leitura provido pelo seu administrador.';
+$labels['blockspamsending_pluginname'] = 'Previne envio de spam';
+$labels['blockspamsending_plugindescription'] = 'Permite enviar somente um grupo de mensagens específicas com mesmo corpo durante uma sessão.';
+$labels['global_config_pluginname'] = 'Gerente de Configuração';
+$labels['global_config_plugindescription'] = 'Esta é um plugin de gerenciamento de configuração. Ele otimiza seu servidor pela centralização dos arquivos de configurações dos plugins. Ele também faz as tarefas administrativas mais fáceis pela ativação do uso de um arquivo simples de configuração para todos os plugins.';
+$labels['jqueryui_pluginname'] = 'Jqueryui';
+$labels['jqueryui_plugindescription'] = 'Biblioteca javascript Jqueryui';
+$labels['hide_blockquote_pluginname'] = 'Ocultar bloco de citação (blockquote)';
+$labels['hide_blockquote_plugindescription'] = 'Oculta a citação quando o contador de linhas é maior que um contador de linhas especificado.';
+$labels['crawler_pluginname'] = 'Rastreador (Crawler)';
+$labels['crawler_plugindescription'] = 'Página de conteúdo falto para rastreadores (crawler).';
+$labels['dblog_pluginname'] = 'Registrar no banco de dados';
+$labels['dblog_plugindescription'] = 'Registrar no banco de dados invés de em arquivo.';
+$labels['http_auth_pluginname'] = 'Autenticação HTTP';
+$labels['http_auth_plugindescription'] = 'Um plugin auxiliar para suporte à Autenticação HTTP.';
+$labels['impersonate_pluginname'] = 'Impersonate';
+$labels['impersonate_plugindescription'] = 'Uma ferramenta administrativa para conectar nas contas através de uma senha mestra.';
+$labels['jscolor_pluginname'] = 'Seletor de Cores';
+$labels['jscolor_plugindescription'] = 'Um plugin auxiliar que mostra um seletor de cores.';
+$labels['tinymce_pluginname'] = 'TinyMCE - Editor HTML';
+$labels['tinymce_plugindescription'] = 'Substitui o TinyMCE padrão pelo TinyMCE jQuery (incluindo o Compressor PHP TinyMCE http://www.tinymce.com/wiki.php/Compressors:PHP).';
+$labels['embed_images_pluginname'] = 'Imagens externas embarcadas';
+$labels['embed_images_plugindescription'] = 'Imagens externas embarcadas na mensagem fonte.';
+$labels['lang_sel_pluginname'] = 'Selecione o idioma';
+$labels['lang_sel_plugindescription'] = 'Selecione o idioma na página de acesso.';
+$labels['newuser_pluginname'] = 'Novo Usuário';
+$labels['newuser_plugindescription'] = 'Informe os administradores quando um novo usuário é registrado via interface webmail e envie uma mensagem de boas vindas para o novo usuário no seu primeiro acesso.';
+
+?> \ No newline at end of file
diff --git a/plugin_manager/localization/pt_PT.inc b/plugin_manager/localization/pt_PT.inc
new file mode 100644
index 0000000..44444c2
--- /dev/null
+++ b/plugin_manager/localization/pt_PT.inc
@@ -0,0 +1,116 @@
+<?php
+/*
+ +-----------------------------------------------------------------------+
+ | ./plugins/plugin_manager/localization/pt_PT.inc
+ |
+ | Language file of MyRoundcube Plugins Bundle
+ | Copyright (C) 2010-2013, Roland 'rosali' Liebl
+ |
+ +-----------------------------------------------------------------------+
+ | Author: RuiSMoura - 01/25/2013 17:57:49
+ +-----------------------------------------------------------------------+
+*/
+
+$labels = array();
+$labels['pluginname'] = 'Gestor de Plugins';
+$labels['plugin_manager_title'] = 'Gerir Plugins';
+$labels['plugin_manager_center'] = 'Gestor de Plugins';
+$labels['calendaring'] = 'Elementos de Calendário';
+$labels['misc'] = 'Vários';
+$labels['downloads'] = 'Transferências';
+$labels['issue'] = 'problema';
+$labels['showall'] = 'Mostrar todos os Plugins';
+$labels['hideuptodate'] = 'Mostrar apenas actualizações';
+$labels['connectionerror'] = 'O servidor não respondeu à tentativa de ligação.';
+$labels['trylater'] = 'Por favor tente mais tarde...';
+$labels['translate'] = 'Traduzir Plugin';
+$labels['restoredefaults'] = 'Restaurar Definições';
+$labels['checkall'] = 'Selecionar Todos';
+$labels['uncheckall'] = 'Desmarcar Todos';
+$labels['toggle'] = 'Inverter Seleção';
+$labels['status'] = 'Estado';
+$labels['globalplugins'] = 'Plugins Globais';
+$labels['backend'] = 'Plugins do Servidor';
+$labels['messagesmanagement'] = 'Gestão de Mensagens';
+$labels['furtherconfig'] = 'Quer configurar este plugin agora?';
+$labels['uninstall'] = 'Este plugin será desativado. Quer remover definitivamente todas as definições gravadas?';
+$labels['areyousure'] = 'Não pode desfazer esta ação. Tem a certeza?';
+$labels['successfullydeleted'] = 'As definições foram removidas com sucesso.';
+$labels['successfullysaved'] = 'Gravado com sucesso.';
+$labels['errorsaving'] = 'Ocorreu um erro ao gravar.';
+$labels['yes'] = 'Sim';
+$labels['no'] = 'Não';
+$labels['disable'] = 'Desativar';
+$labels['remove'] = 'Remover';
+$labels['savewarning'] = 'Pertende gravar as suas alterações já?';
+$labels['plugin_manager_update'] = 'Atualizar Plugins';
+$labels['authors_comments'] = 'Comentários do Autor (não traduzido)';
+$labels['requiredby'] = 'O plugin é requerido pelo';
+$labels['requires'] = 'O plugin requer';
+$labels['recommended'] = 'Plugins recomendados';
+$labels['update_plugins'] = 'Transferir Plugins';
+$labels['ziparchive'] = 'Transferir Arquivo-Zip ';
+$labels['demoaccount'] = 'Desculpe, download desactivado (Conta de Demonstração)';
+$labels['serverversion'] = 'Versão no Servidor';
+$labels['mirrorversion'] = 'Versão no Servidor-Espelho';
+$labels['mirrorhost'] = 'Servidor-Espelho';
+$labels['comments'] = 'Requisitos e Notas de Atualização';
+$labels['update_error'] = 'Versão não coincide';
+$labels['update_ok'] = 'Versão mais actual detetada, Não é necessária atualização';
+$labels['update_edit'] = 'O Plugin precisa de ser reconfigurado ou requer ajustes na base de dados. Por favor tenha em considerção as Notas de Actualização ';
+$labels['servernewer'] = 'O Plugin é mais recente do que o da versão do servidor-espelho.';
+$labels['orhigher'] = 'ou superior';
+$labels['rc_ok'] = 'O Roundcube está atualizado.';
+$labels['update_update'] = 'Plugin desatualizado. Por favor atualize! Tenha em Consideração as Notas de Atualização.';
+$labels['noupdates'] = 'Nenhuma atualização detetada.';
+$labels['rc_update'] = 'O Roundcube está desatualizado. Por favor atualize!';
+$labels['rc_uptodate'] = 'O Roundcube está atualizado.';
+$labels['nottested'] = 'Por favor use os Plugins com precaução! Não sabemos se os Plugins alojados funcionam com o Roundcube v%s.';
+$labels['justunzip'] = 'Apenas descompacte o arquivo para a instalação existente.';
+$labels['guide'] = 'Leia mais...';
+$labels['thirdparty'] = 'Isto não é um Plugin do MyRoundcube';
+$labels['thirdpartywarning'] = 'Este é um plugin de terceiros. Recomendamos que não faça o download do nosso servidor. Em vez disso faça o download diretamente do site do autor para assim obter a última versão assim como todas as notas e conselhos do seu autor.';
+$labels['develsite'] = 'Transferir';
+$labels['notinstalled'] = 'não instalado';
+$labels['notregistered'] = 'não registado';
+$labels['roundcubeurl'] = 'Transferir o Roundcube ';
+$labels['languageupdate'] = 'Está disponível uma atualização de linguagem.';
+$labels['noplugindescription'] = 'Nenhuma descrição encontrada para este plugin.';
+$labels['markbuttons_pluginname'] = 'Botões para Sinalização de Mensagens';
+$labels['markbuttons_plugindescription'] = 'Acrescenta icons sob a lista de mensagens para rapidamente sinalizar mensagens.';
+$labels['automatic_addressbook_pluginname'] = 'Livro de endereços Automático';
+$labels['automatic_addressbook_plugindescription'] = 'Captar endereços de email não existentes para um livro de endereços em separado.';
+$labels['keyboard_shortcuts_pluginname'] = 'Atalhos de teclado';
+$labels['message_highlight_pluginname'] = 'Destacar Mensagens';
+$labels['message_highlight_plugindescription'] = 'Destacar mensagens de acordo com as opções de filtro.';
+$labels['compose_addressbook_pluginname'] = 'Livro de Endereços na Janela de Composição.';
+$labels['google_contacts_pluginname'] = 'Contactos Google';
+$labels['google_contacts_plugindescription'] = 'Tenha acesso aos seus contactos do Google.';
+$labels['contextmenu_pluginname'] = 'Menu de Contexto';
+$labels['contextmenu_plugindescription'] = 'Activar a funcionalidade menu de contexto.';
+$labels['newmail_notifier_pluginname'] = 'Novo Notificador de Email';
+$labels['newmail_notifier_plugindescription'] = 'Receba um alterta de nova mensagem.';
+$labels['copymessage_pluginname'] = 'Copiar Mensagem(s)';
+$labels['copymessage_plugindescription'] = 'Copia mensagem(s) para outra pasta IMAP.';
+$labels['forwardattachment_pluginname'] = 'Reencaminhar como anexo';
+$labels['forwardattachment_plugindescription'] = 'Reencaminha várias mensagens como anexos.';
+$labels['vcard_attachments_pluginname'] = 'Anexos vCard';
+$labels['vcard_attachments_plugindescription'] = 'Adiciona uma caixa às mensagens que tenham em anexo um vcard, para importar diretamente para o livro de endereços.';
+$labels['importmessages_pluginname'] = 'Importar Mensagens';
+$labels['importmessages_plugindescription'] = 'Importa mensagens de uma fonte zip ou eml.';
+$labels['zipdownload_pluginname'] = 'Exportar Mensagens';
+$labels['zipdownload_plugindescription'] = 'Exportar mensagens num ficheiro zip.';
+$labels['markasjunk2_pluginname'] = 'Marcar Mensagem como Spam';
+$labels['markasjunk2_plugindescription'] = 'Marca as Mensagens como sendo spam ou não.';
+$labels['markasjunk_pluginname'] = 'Marcar Mensagem como Spam';
+$labels['markasjunk_plugindescription'] = 'Marca as Mensagens como sendo spam ou não.';
+$labels['google_ads_pluginname'] = 'Anúncios Google';
+$labels['google_ads_plugindescription'] = 'Mostra Publicidade do Google.';
+$labels['globaladdressbook_pluginname'] = 'Livro de Endereços Global';
+$labels['blockspamsending_pluginname'] = 'Previne Enviar Spam';
+$labels['impersonate_pluginname'] = 'Personificar';
+$labels['impersonate_plugindescription'] = 'Uma ferramenta de administração que permite iniciar sessão nas contas de email dos utilizadores com uma palvra-passe mestre.';
+$labels['jscolor_pluginname'] = 'Palete de cores';
+$labels['jscolor_plugindescription'] = 'Um plugin de ajuda que mostra uma palete de cores.';
+
+?> \ No newline at end of file
diff --git a/plugin_manager/localization/revision.inc.php b/plugin_manager/localization/revision.inc.php
new file mode 100644
index 0000000..db75626
--- /dev/null
+++ b/plugin_manager/localization/revision.inc.php
@@ -0,0 +1,11 @@
+<?php
+
+$ps_localization_update = serialize(
+ array(
+ 'translator' => 'Olivier Zolli',
+ 'language ' => 'fr_FR',
+ 'date' => '01/20/2015 18:23:27'
+ )
+);
+
+?> \ No newline at end of file
diff --git a/plugin_manager/localization/ru_RU.inc b/plugin_manager/localization/ru_RU.inc
new file mode 100644
index 0000000..4869c7d
--- /dev/null
+++ b/plugin_manager/localization/ru_RU.inc
@@ -0,0 +1,205 @@
+<?php
+/*
+ +-----------------------------------------------------------------------+
+ | ./plugins/plugin_manager/localization/ru_RU.inc
+ |
+ | Language file of MyRoundcube Plugins Bundle
+ | Copyright (C) 2010-2013, Roland 'rosali' Liebl
+ |
+ +-----------------------------------------------------------------------+
+ | Author: Pavel - 02/11/2013 17:48:12
+ +-----------------------------------------------------------------------+
+*/
+
+$labels = array();
+$labels['pluginname'] = 'Менеджер раÑширений';
+$labels['plugindescription'] = 'Менеджер раÑширений дает возможноÑÑ‚ÑŒ пользователÑм включать или отключать плагины на уровне пользователÑ. Менеджер раÑширений не изменÑет вашу файловую ÑиÑтему, он предназначен только Ð´Ð»Ñ Ð°Ð²Ñ‚Ð¾Ð¼Ð°Ñ‚Ð¸Ñ‡ÐµÑкой уÑтановки раÑширений. ÐдминимÑтраторам ÑиÑтем Менеджер раÑширений позволÑет быть в курÑе поÑледних обновлений ÑиÑтемы и Ñамих раÑширений, документации, рекомендаций. Включает в ÑÐµÐ±Ñ Ñ†ÐµÐ½Ñ‚Ñ€Ð°Ð»Ð¸Ð·Ð¾Ð²Ð°Ð½Ð½ÑƒÑŽ загрузку';
+$labels['plugin_manager_title'] = 'Управление раÑширениÑми';
+$labels['plugin_manager_center'] = 'Центр ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ñ€Ð°ÑширениÑми';
+$labels['updatepm'] = 'ДоÑтупны Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ ÐœÐµÐ½ÐµÐ´Ð¶ÐµÑ€Ð° РаÑширений';
+$labels['updatepmrequired'] = 'Ðеобходимо обновление Менеджера РаÑширений';
+$labels['downloadnow'] = 'Загрузить ÑейчаÑ';
+$labels['calendaring'] = 'Календарь';
+$labels['misc'] = 'ОÑтальное';
+$labels['downloads'] = 'Загрузки';
+$labels['issue'] = 'ВерÑии';
+$labels['submitissue'] = 'Сообщить о проблеме. <br /><br />ПожалуйÑта, проверьте журналы Ñобытий и предоÑтавлÑÑ‚ÑŒ ÑоответÑтвующую информацию в поддрежку.<br /><br /><b>NOTE</b>: ТребуетÑÑ Ð°ÐºÐºÐ°ÑƒÐ½Ñ‚ Google.';
+$labels['showall'] = 'Показать вÑе раÑширениÑ';
+$labels['hideuptodate'] = 'Показать только обновлениÑ';
+$labels['connectionerror'] = 'Удаленный Сервер не реагирует на попытку ÑоединениÑ.';
+$labels['trylater'] = 'ПожалуйÑта, попробуйте позже...';
+$labels['translate'] = 'ПеревеÑти Ñто раÑширение';
+$labels['restoredefaults'] = 'ВоÑÑтановить Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¿Ð¾ умолчанию';
+$labels['checkall'] = 'Выделить вÑе';
+$labels['uncheckall'] = 'СнÑÑ‚ÑŒ выбор';
+$labels['toggle'] = 'Изменить выбор';
+$labels['status'] = 'СтатуÑ';
+$labels['globalplugins'] = 'Глобальные раÑширениÑ';
+$labels['backend'] = 'Серверные раÑширениÑ';
+$labels['messagesmanagement'] = 'Управление ÑообщениÑми';
+$labels['furtherconfig'] = 'Хотели бы вы, чтобы наÑтроить Ñто раÑширение ÑейчаÑ?';
+$labels['uninstall'] = 'Ð’Ñ‹ ÑобираетеÑÑŒ отключить Ñтот плагин. Ð’Ñ‹ хотите, удалить вÑе Ñохраненные наÑтройки навÑегда?';
+$labels['uninstallconfirm'] = 'Ð’Ñ‹ ÑобираетеÑÑŒ отключить Ñтот плагин. Внимание: Выбрав пункт "ОТКЛЮЧИТЬ" Ñто раÑширение Ñохранит ваши данные и наÑтройки на Ñервере (еÑли вы планируете иÑпользовать его позже выберете "ОТКЛЮЧТЬ".). Выберите пункт "УДÐЛИТЬ", еÑли вы хотите, чтобы вÑе данные и наÑтройки, управлÑемых Ñтим раÑширением, были удаленны. Обратите внимание, Ñто дейÑтвие ÐЕ может быть ОТМЕÐЕÐÐО.';
+$labels['areyousure'] = 'Ð’Ñ‹ не можете отменить Ñто дейÑтвие. Ð’Ñ‹ дейÑтвительно уверены?';
+$labels['successfullydeleted'] = 'ÐаÑтройки были уÑпешно удалены.';
+$labels['successfullysaved'] = 'УÑпешно Ñохранены.';
+$labels['errorsaving'] = 'Произошла ошибка при Ñохранении.';
+$labels['yes'] = 'Да';
+$labels['no'] = 'Ðет';
+$labels['disable'] = 'Отключить';
+$labels['remove'] = 'Удалить';
+$labels['savewarning'] = 'Ð’Ñ‹ хотите Ñохранить изменениÑ?';
+$labels['plugin_manager_update'] = 'Обновить раÑширениÑ';
+$labels['authors_comments'] = 'Комментарии авторов';
+$labels['requiredby'] = 'РаÑширение требуетÑÑ ';
+$labels['requires'] = 'РаÑширению требуетÑÑ';
+$labels['recommended'] = 'Рекомендованные раÑширениÑ';
+$labels['update_plugins'] = 'Обновить раÑширениÑ';
+$labels['ziparchive'] = 'Скачать архив (ZIP)';
+$labels['demoaccount'] = 'Извините, Ñкачать невозможно (демо - аккаунт)';
+$labels['serverversion'] = 'Сервер верÑиÑ';
+$labels['mirrorversion'] = 'Зеркало верÑиÑ';
+$labels['mirrorhost'] = 'Зеркало';
+$labels['comments'] = 'ÐŸÑ€Ð¸Ð¼ÐµÑ‡Ð°Ð½Ð¸Ñ Ð¸ Ñ‚Ñ€ÐµÐ±Ð¾Ð²Ð°Ð½Ð¸Ñ Ðº обновлению';
+$labels['update_error'] = 'ÐеÑоответÑтвие верÑий';
+$labels['update_ok'] = 'ПоÑледнÑÑ Ð²ÐµÑ€ÑиÑ. Обновление не требуетÑÑ.';
+$labels['update_edit'] = 'РаÑширение должно быть повторно наÑтроено илии требует корректировки базы данных. Обратите внимание на примечание к обновлению.';
+$labels['servernewer'] = 'ВерÑÐ¸Ñ Ñ€Ð°ÑÑˆÐ¸Ñ€ÐµÐ½Ð¸Ñ Ð½Ð¾Ð²ÐµÐµ верÑии на зеркале. ';
+$labels['orhigher'] = 'или выше';
+$labels['rc_ok'] = 'ВерÑÐ¸Ñ Roundcube актуальна. ';
+$labels['update_update'] = 'РаÑширение ÑвлÑетÑÑ ÑƒÑтаревшей. Обновите, пожалуйÑта! ';
+$labels['noupdates'] = 'Ðи одного Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð½Ðµ выбрано.';
+$labels['rc_update'] = 'ВерÑÐ¸Ñ Roundcube уÑтарела. ПожалуйÑта, обновите!';
+$labels['rc_uptodate'] = 'Roundcube обновлен!';
+$labels['rc_newer'] = 'ВерÑÐ¸Ñ Roundcube новее верÑии на зеркале!';
+$labels['nottested'] = 'ПожалуйÑта, иÑпользуйте раÑÑˆÐ¸Ñ€ÐµÐ½Ð¸Ñ Ñ Ð¾ÑторожноÑтью! РаÑÑˆÐ¸Ñ€ÐµÐ½Ð¸Ñ Ð¼Ð¾Ð³ÑƒÑ‚ повредить Roundcube v%s.';
+$labels['justunzip'] = 'ПроÑто раÑпакуйте архив поверх вашей ÑущеÑтвующей уÑтановки.';
+$labels['guide'] = 'Читать полноÑтью...';
+$labels['thirdparty'] = 'Это не MyRoundcube раÑширение.';
+$labels['thirdpartywarning'] = 'Этот плагин напиÑан Ñторонним разработчиком. Мы рекомендуем вам Ñкачать его Ñ Ñайта разработчика а не Ñ Ð½Ð°ÑˆÐµÐ³Ð¾ зеркала. Ðа Ñайте разработчика вы так же найдете его более Ñвежую верÑию, и Ð·Ð°Ð¼ÐµÑ‡Ð°Ð½Ð¸Ñ Ð¸ Ñоветы по уÑтановке';
+$labels['develsite'] = 'Скачать';
+$labels['notinstalled'] = 'Ðе уÑтановлен';
+$labels['notregistered'] = 'РаÑширение не зарегиÑтрировано в файле конфигурации';
+$labels['roundcubeurl'] = 'Скачать Roundcube';
+$labels['languageupdate'] = 'ДоÑтупно обновление локализации.';
+$labels['localizationfilesonly'] = 'Загрузка будет Ñодержать только файлы локализации. Изменений в коде плагина нет';
+$labels['donotregister'] = 'Ðе региÑтрируйте Ñто раÑширение, оно будет Ñкаченно автоматичеÑки.';
+$labels['register'] = 'ЗарегиÑтрировать Ñтот плагин в ./config/config.inc.php <small>[$config[\'plugins\'] = array("<i>foo</i>", "<i>bar</i>");]</small>.';
+$labels['customer_account'] = 'Ðккаунт клиента';
+$labels['customer_id'] = 'Ðомер клиента';
+$labels['invalid_customer_id'] = 'Ðеправильный номер клиента';
+$labels['invalid_credits'] = 'Ðеправильные кредиты';
+$labels['successfully_transferred'] = 'Кредиты уÑпешно перенеÑены';
+$labels['merge'] = 'ПринÑÑ‚ÑŒ кредиты';
+$labels['credits'] = 'Кредиты';
+$labels['creditsupdated'] = 'Кредиты были изменены Ñ Ð¼Ð¾Ð¼ÐµÐ½Ñ‚Ð° поÑледнего Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ñтраницы';
+$labels['buynow'] = 'ПриобреÑти кредиты';
+$labels['history'] = 'ИÑÑ‚Ð¾Ñ€Ð¸Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ð¹ по аккаунту';
+$labels['details'] = 'Подробно';
+$labels['receipt'] = 'выпиÑка';
+$labels['plugins'] = 'Плагины';
+$labels['clickhere'] = 'Ðажмите здеÑÑŒ';
+$labels['discardliabletopaycosts'] = 'ОтказатьÑÑ Ð¾Ñ‚ оплаты';
+$labels['unchecknotinstalledplugins'] = 'Отменить загрузку ';
+$labels['sum'] = 'Сумма';
+$labels['show'] = 'Показать';
+$labels['hide'] = 'Убрать';
+$labels['view'] = 'проÑмотреть';
+$labels['expired'] = 'проÑрочен';
+$labels['terms'] = 'Правила';
+$labels['pricelist'] = 'Загрузить цены';
+$labels['forthisdownload'] = 'Ð´Ð»Ñ Ñтой загрузки';
+$labels['remainingcredits'] = 'ОÑталоÑÑŒ кредитов';
+$labels['initialdownload'] = 'ÐÐ°Ñ‡Ð°Ð»ÑŒÐ½Ð°Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ°';
+$labels['keyfeatureaddition'] = 'ÐÐ¾Ð²Ð°Ñ ÐºÐ»ÑŽÑ‡ÐµÐ²Ð°Ñ Ð¾ÑобенноÑÑ‚ÑŒ';
+$labels['codeimprovements'] = 'Ð£Ð»ÑƒÑ‡ÑˆÐµÐ½Ð¸Ñ ÐºÐ¾Ð´Ð°';
+$labels['servicenotavailable'] = 'Ð¡ÐµÑ€Ð²Ð¸Ñ Ð½ÐµÐ´Ð¾Ñтупен. Попробуйте позже!';
+$labels['myrcerror'] = 'Службы MyRoundcube в наÑтоÑщий момент недоÑтупны';
+$labels['getnew'] = 'ЗапроÑить новый номер клиента';
+$labels['getnew_hint'] = 'Мы рекомендуем вам чаще обновлÑÑ‚ÑŒ обновлÑÑ‚ÑŒ Ñвой номер клиента. ЕÑли вы уведомлены о подозрительной активноÑти на вашем Ñчете, обновите Ñвой номер клиента как можно Ñкорее';
+$labels['transfer'] = 'ПеренеÑти кредиты';
+$labels['noplugindescription'] = 'ОпиÑание раÑширение не найдено.';
+$labels['markbuttons_pluginname'] = 'Отметить кнопки Ñообщений';
+$labels['markbuttons_plugindescription'] = 'Добавить "множеÑтвенный выбор".';
+$labels['automatic_addressbook_pluginname'] = 'ÐвтоматичеÑкий Ñборщик ареÑÑов';
+$labels['automatic_addressbook_plugindescription'] = 'Собирает адреÑа Ñлектронной почты вÑех получателей в отдельную книгу.';
+$labels['keyboard_shortcuts_pluginname'] = 'Ð¡Ð¾Ñ‡ÐµÑ‚Ð°Ð½Ð¸Ñ ÐºÐ»Ð°Ð²Ð¸Ñˆ';
+$labels['keyboard_shortcuts_plugindescription'] = 'Ввод команд при помощи Ñочетаний клавиш.';
+$labels['message_highlight_pluginname'] = 'ПодÑветка Ñообщений';
+$labels['message_highlight_plugindescription'] = 'ПодÑветка Ñообщений в ÑоответÑтвии Ñ Ñ„Ð¸Ð»ÑŒÑ‚Ñ€Ð¾Ð¼.';
+$labels['fixTHEAD_pluginname'] = 'Fix Header of Message List';
+$labels['fixTHEAD_plugindescription'] = 'ИÑправление заголовка ÑпиÑка Ñообщений.';
+$labels['compose_addressbook_pluginname'] = 'ÐдреÑÐ½Ð°Ñ ÐºÐ½Ð¸Ð³Ð° в окне ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ ÑообщениÑ';
+$labels['compose_addressbook_plugindescription'] = 'ДобавлÑет адреÑную книгу в окно ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð´Ð»Ñ ÑƒÐ´Ð¾Ð±Ð½Ð¾Ð³Ð¾ поиÑка получателей.';
+$labels['google_contacts_pluginname'] = 'Контакты Google';
+$labels['google_contacts_plugindescription'] = 'ДоÑтуп к контактам вашего Google аккаунта. ';
+$labels['contextmenu_pluginname'] = 'КонтекÑтное меню';
+$labels['contextmenu_plugindescription'] = 'ДобавлÑет открытие меню по правому клику мыши.';
+$labels['newmail_notifier_pluginname'] = 'New Mail Notifier';
+$labels['newmail_notifier_plugindescription'] = 'Уведомление о новых ÑообщениÑÑ….';
+$labels['listcommands_pluginname'] = 'Reply Mailing Lists';
+$labels['listcommands_plugindescription'] = 'Различные варианты ответа на ÑообщениÑ, отправленные из ÑпиÑков раÑÑылки.';
+$labels['copymessage_pluginname'] = 'Копирование ÑообщениÑ(ий)';
+$labels['copymessage_plugindescription'] = 'Копирование ÑообщениÑ(ий) в другую IMAP папку.';
+$labels['forwardattachment_pluginname'] = 'ПереÑылка вложением';
+$labels['forwardattachment_plugindescription'] = 'ПереÑылка неÑкольких Ñообщений как вложениÑ.';
+$labels['vcard_attachments_pluginname'] = 'vCard вложениÑ';
+$labels['vcard_attachments_plugindescription'] = 'ДобавлÑет возможноÑÑ‚ÑŒ импорта файла vCard напрÑмую в адреÑную книгу.';
+$labels['importmessages_pluginname'] = 'Импорт Ñообщений';
+$labels['importmessages_plugindescription'] = 'Импортирует ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¸Ð· *.zip архива или *.eml файла.';
+$labels['zipdownload_pluginname'] = 'ЭкÑпорт Ñообщений';
+$labels['zipdownload_plugindescription'] = 'ЭкÑпортирует ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð² zip архив.';
+$labels['markasjunk2_pluginname'] = 'Отметить как Ñпам';
+$labels['markasjunk2_plugindescription'] = 'Отмечает ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ ÐºÐ°Ðº Ñпам.';
+$labels['markasjunk_pluginname'] = 'Отметить как Ñпам';
+$labels['markasjunk_plugindescription'] = 'Отмечает ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ ÐºÐ°Ðº Ñпам.';
+$labels['google_ads_pluginname'] = 'Google реклама';
+$labels['google_ads_plugindescription'] = 'Показ Google рекламы.';
+$labels['google_analytics_pluginname'] = 'Google аналитика';
+$labels['google_analytics_plugindescription'] = 'ДобавлÑет Google аналитику.';
+$labels['globaladdressbook_pluginname'] = 'Ð“Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ð°Ñ Ð°Ð´Ñ€ÐµÑÐ½Ð°Ñ ÐºÐ½Ð¸Ð³Ð°';
+$labels['globaladdressbook_plugindescription'] = 'Ð“Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ð°Ñ Ð°Ð´Ñ€ÐµÑÐ½Ð°Ñ ÐºÐ½Ð¸Ð³Ð° видна вÑем пользователÑм, но пользователь не имеет прав на редактирование, редактирование и заполнение ведетÑÑ Ð·Ð°Ñ€Ð°Ð½ÐµÐµ назначенным админиÑтратором.';
+$labels['blockspamsending_pluginname'] = 'Предотвращение раÑÑылки Ñпама';
+$labels['blockspamsending_plugindescription'] = 'ПозволÑет поÑылать, только определенное количеÑтво Ñообщений Ñ Ð¾Ð´Ð½Ð¾Ð³Ð¾ тела в течение одной ÑеÑÑии.';
+$labels['global_config_pluginname'] = 'Конфигуратор';
+$labels['global_config_plugindescription'] = 'Ð•Ð´Ð¸Ð½Ð°Ñ ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ Ð´Ð»Ñ Ð²Ñех раÑширений.';
+$labels['jqueryui_pluginname'] = 'Jqueryui';
+$labels['jqueryui_plugindescription'] = 'Jqueryui Ñва библиотека.';
+$labels['hide_blockquote_pluginname'] = 'Скрыть цитату';
+$labels['hide_blockquote_plugindescription'] = 'Hide citation when lines count is greater than a specified count of lines.';
+$labels['crawler_pluginname'] = 'Crawler';
+$labels['crawler_plugindescription'] = 'Поддельные Ñодержание Ñтраницы Ð´Ð»Ñ Ð¿Ð¾Ð¸Ñковых роботов.';
+$labels['dblog_pluginname'] = 'Журнал в базе';
+$labels['dblog_plugindescription'] = 'Ведение журнала в БД вмеÑто файла.';
+$labels['http_auth_pluginname'] = 'HTTP авторизациÑ';
+$labels['http_auth_plugindescription'] = 'ДобавлÑет поддержку HTTP авторизации.';
+$labels['impersonate_pluginname'] = 'Impersonate';
+$labels['impersonate_plugindescription'] = 'ИнÑтрумент Ð´Ð»Ñ Ð²Ñ…Ð¾Ð´Ð° в учетные запиÑи по маÑтер-паролю.';
+$labels['jscolor_pluginname'] = 'Палитра цветов';
+$labels['jscolor_plugindescription'] = 'ДобавлÑет палитру цветов.';
+$labels['tinymce_pluginname'] = 'TinyMCE - HTML редактор';
+$labels['tinymce_plugindescription'] = 'Замена Ñтандартного редактора TinyMCE на редактор TinyMCE jQuery (включает TinyMCE PHP Compressor http://www.tinymce.com/wiki.php/Compressors:PHP).';
+$labels['embed_images_pluginname'] = 'Внедрить внешний риÑунок';
+$labels['embed_images_plugindescription'] = 'Внедрить внешний риÑунок в иÑточник ÑообщениÑ';
+$labels['lang_sel_pluginname'] = 'Выбрать Ñзык';
+$labels['lang_sel_plugindescription'] = 'Выбрать Ñзык на Ñтранице входа в ÑиÑтему';
+$labels['newuser_pluginname'] = 'Ðовый пользователь';
+$labels['newuser_plugindescription'] = 'УведомлÑÑ‚ÑŒ админиÑтратора в Ñлучае когда через веб-Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Ð·Ð°Ñ€ÐµÐ³Ð¸Ñтрирован новый пользователь, и выÑылать приветÑтвенное пиÑьмо новому пользователю на первый логин';
+$labels['placeholder_pluginname'] = 'Ðтрибуты заполнителÑ';
+$labels['placeholder_plugindescription'] = 'Добавить атрибуты Ð·Ð°Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»Ñ Ð´Ð»Ñ Ñ‚ÐµÐºÑтовых полей и полей ввода паролÑ';
+$labels['qtip_pluginname'] = 'ПодÑказки jQueryUI';
+$labels['qtip_plugindescription'] = 'Плагин помощи Ð´Ð»Ñ Ð¸ÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ jQueryUI подÑказок';
+$labels['sabredav_pluginname'] = 'SabreDAV';
+$labels['sabredav_plugindescription'] = 'Создавать аккаунты доÑтупа SabreDAV Ð´Ð»Ñ ÐºÐ°Ð»ÐµÐ½Ð´Ð°Ñ€ÐµÐ¹ CalDAV, когда новый пользователь Roundcube Ñоздает и объединÑет пароли, еÑли они были изменены';
+$labels['savepassword_pluginname'] = 'Сохранить пароли';
+$labels['savepassword_plugindescription'] = 'Этот плагин помощи иÑпользуетÑÑ Ð´Ñ€ÑƒÐ³Ð¸Ð¼Ð¸ плагинами';
+$labels['database_attachments_pluginname'] = 'Ð’Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð² БД';
+$labels['database_attachments_plugindescription'] = 'Плагин помощи Ð´Ð»Ñ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð²Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñми в базе данных';
+$labels['new_user_dialog_pluginname'] = 'Ðовый диалог пользователÑ';
+$labels['new_user_dialog_plugindescription'] = 'ÐаÑтройки идентификации диалогового окна ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð½Ð¾Ð²Ñ‹Ñ… пользователей. Когда ÑоздаетÑÑ Ð½Ð¾Ð²Ñ‹Ð¹ пользователь, плагин проверÑет наÑтройки и уÑтанавливает флаг незавершенной ÑеÑÑии. При Ñтом на Ñкране поÑвлÑетÑÑ Ð²Ñплывающее окно Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñмотра и ввода идентификационных данных пользователÑ';
+$labels['rcguard_pluginname'] = 'ReCAPTCHA';
+$labels['rcguard_plugindescription'] = 'УÑилить CAPTCHA поÑле некоторого количеÑтва безуÑпешных попыток входа';
+$labels['domain_check_pluginname'] = 'Проверить Домен';
+$labels['domain_check_plugindescription'] = 'Ограничить вход в webmail до Ñпециально указываемых адреÑов';
+
+?> \ No newline at end of file
diff --git a/plugin_manager/package.xml b/plugin_manager/package.xml
new file mode 100644
index 0000000..3c65785
--- /dev/null
+++ b/plugin_manager/package.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="http://pear.php.net/dtd/package-2.0" xmlns:tasks="http://pear.php.net/dtd/tasks-1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" packagerversion="1.9.0" version="2.0" xsi:schemaLocation="http://pear.php.net/dtd/tasks-1.0
+ http://pear.php.net/dtd/tasks-1.0.xsd
+ http://pear.php.net/dtd/package-2.0
+ http://pear.php.net/dtd/package-2.0.xsd">
+ <name>plugin_manager</name>
+ <lead>
+ <name>Myroundcube Dev Team</name>
+ <user>rosali</user>
+ <email>dev-team@myroundcube.com</email>
+ <active>yes</active>
+ </lead>
+ <uri>http://myroundcube.com/myroundcube-plugins/plugin-manager</uri>
+ <date>2015-02-14</date>
+ <version>
+ <release>28.0.12</release>
+ <api>28.0.12</api>
+ </version>
+ <stability>
+ <release>stable</release>
+ <api>stable</api>
+ </stability>
+ <license uri="http://dev.myroundcube.com/index.php?_action=plugin.plugin_server_license&amp;_plugin=plugin_manager">All Rights reserved</license>
+</package>
diff --git a/plugin_manager/plugin_manager.js b/plugin_manager/plugin_manager.js
new file mode 100644
index 0000000..e043d03
--- /dev/null
+++ b/plugin_manager/plugin_manager.js
@@ -0,0 +1,372 @@
+function pm_get_credits(){
+ rcmail.http_post(
+ 'plugin.plugin_manager_getcredits', ''
+ );
+}
+
+function pm_update_credits(response){
+ if(response){
+ if($('#cdlcredits').get(0) && parseInt(response) && (parseInt(response) != parseInt($('#cdlcredits').text()))){
+ var newcredits = parseInt(response) - parseInt($('#cdlcredits').text());
+ var color = newcredits > 0 ? 'green' : 'red';
+ var html = $('#accountdetails').html();
+ $('#accountdetails > tbody:last').append('<tr><td colspan="4" style="border: 1px solid lightgrey;">MyRC$ ' + rcmail.gettext('creditsupdated','plugin_manager') + '</td><td align="right" style="border: 1px solid lightgrey; color: ' + color + ';">' + (newcredits > 0 ? '+' : '') + newcredits + '</td><td style="border: 1px solid lightgrey;">&nbsp;</td></tr>');
+ $('#cdlcredits').text(response);
+ rcmail.display_message('MyRC$ ' + newcredits + ' ' + rcmail.gettext('creditsupdated','plugin_manager'), 'confirmation');
+ }
+ }
+ window.setTimeout('pm_get_credits()', 1000 * 30);
+}
+
+function plugin_manager_save_prefs(){
+ $('.mainaction').hide();
+ var prefs = $('input[name*="man"]').serialize();
+ rcmail.http_post('plugin.plugin_manager_save', prefs);
+}
+
+$(document).ready(function(){
+ // update credtis
+ if(rcmail.env.framed){
+ window.setTimeout('pm_get_credits()', 1 * 1000);
+ }
+ // hide qtips
+ $('.about-link').click(function(){
+ $('.ui-tooltip').hide();
+ });
+ // add event listeners
+ rcmail.addEventListener('init', function(evt){
+ rcmail.addEventListener('plugin.plugin_manager_getcredits', pm_update_credits);
+ });
+ rcmail.addEventListener('plugin.plugin_manager_save_config', function(response) {
+ var msg = response[0];
+ var type = response[1];
+ rcmail.display_message(msg, type);
+ $('#source').html(msg + '&nbsp;');
+ });
+ rcmail.addEventListener('plugin.plugin_manager_success', function(response) {
+ rcmail.pm_stat = $('input[name*="man"]').serialize();
+ rcmail.display_message(rcmail.gettext('successfullydeleted', 'plugin_manager'), 'confirmation');
+ if(response){
+ eval(response);
+ plugin_manager_save_prefs();
+ }
+ else{
+ plugin_manager_save_prefs();
+ }
+ });
+ rcmail.addEventListener('plugin.plugin_manager_saved', function(response) {
+ rcmail.pm_stat = $('input[name*="man"]').serialize();
+ rcmail.display_message(rcmail.gettext('successfullysaved', 'plugin_manager'), 'confirmation');
+ if(response){
+ eval(response);
+ }
+ });
+ rcmail.addEventListener('plugin.plugin_manager_error', function(response) {
+ rcmail.display_message(rcmail.gettext('errorsaving', 'plugin_manager'), 'error');
+ $('.mainaction').hide();
+ $(':checkbox').each(function(){
+ $(this).prop('disabled', true);
+ });
+ window.setTimeout("parent.location.href='./?_task=settings&_action=plugin.plugin_manager'", 3000);
+ });
+ rcmail.addEventListener('init', function(){
+ function float_fieldsets(){
+ if(document.location.search.indexOf('&_section=plugin_manager&') < 0){
+ return;
+ }
+ $('td.title').remove();
+ rcmail.pm_mh = 0;
+ rcmail.pm_mh2 = new Array();
+ rcmail.pm_mw = 0;
+ rcmail.pm_top = 0;
+ rcmail.pm_row = -1;
+ $('.pm_section').each(function(){
+ if($(this).width() > rcmail.pm_mw)
+ rcmail.pm_mw = $(this).width();
+ if($(this).height() > rcmail.pm_mh)
+ rcmail.pm_mh = $(this).height();
+ });
+ $('.pm_section').each(function(){
+ $(this).width(rcmail.pm_mw);
+ $(this).height(rcmail.pm_mh);
+ });
+ $('.pm_fieldset').each(function(){
+ if($(this).offset().top > rcmail.pm_top){
+ rcmail.pm_row ++;
+ rcmail.pm_top = $(this).offset().top;
+ if(!rcmail.pm_mh2[rcmail.pm_row])
+ rcmail.pm_mh2[rcmail.pm_row] = $(this).height();
+ }
+ if($(this).height() > rcmail.pm_mh2[rcmail.pm_row]){
+ rcmail.pm_mh2[rcmail.pm_row] = $(this).height();
+ }
+ });
+ rcmail.pm_top = 0;
+ rcmail.pm_row = -1;
+ rcmail.pm_heights = new Array();
+ rcmail.pm_sections = -1;
+ $('.pm_fieldset').each(function(){
+ $(this).width(rcmail.pm_mw - 20);
+ if($(this).offset().top > rcmail.pm_top){
+ rcmail.pm_row ++;
+ rcmail.pm_top = $(this).offset().top;
+ }
+ rcmail.pm_sections ++;
+ rcmail.pm_heights[rcmail.pm_sections] = rcmail.pm_mh2[rcmail.pm_row];
+ $(this).height(rcmail.pm_mh2[rcmail.pm_row] - 20);
+ });
+ rcmail.pm_sections = -1;
+ $('.pm_section').each(function(){
+ rcmail.pm_sections ++;
+ $(this).height(rcmail.pm_heights[rcmail.pm_sections]);
+ });
+ }
+ float_fieldsets();
+ $(window).resize(function(){
+ $('.pm_section').each(function(){
+ $(this).attr('style', '');
+ });
+ $('.pm_fieldset').each(function(){
+ $(this).attr('style', '');
+ });
+ float_fieldsets();
+ });
+ $('.plugin_manager_li').click(function(){
+ $('#pm_restore_defaults').prop('checked', false);
+ $('#pm_check_all').prop('checked', false);
+ $('#pm_uncheck_all').prop('checked', false);
+ });
+ $('#pm_restore_defaults').click(function(){
+ $('#pm_check_all').prop('checked', false);
+ $('#pm_uncheck_all').prop('checked', false);
+ for(var i in rcmail.env.pm_restore){
+ $('#pm_chbox_' + rcmail.env.pm_restore[i][0]).prop('checked', rcmail.env.pm_restore[i][1]);
+ }
+ });
+ $('#pm_check_all').click(function(){
+ $('#pm_uncheck_all').prop('checked', false);
+ $('#pm_restore_defaults').prop('checked', false);
+ for(var i in rcmail.env.pm_restore){
+ $('#pm_chbox_' + rcmail.env.pm_restore[i][0]).prop('checked', true);
+ }
+ });
+ $('#pm_uncheck_all').click(function(){
+ $('#pm_check_all').prop('checked', false);
+ $('#pm_restore_defaults').prop('checked', false);
+ for(var i in rcmail.env.pm_restore){
+ $('#pm_chbox_' + rcmail.env.pm_restore[i][0]).prop('checked', false);
+ }
+ });
+ $('#pm_update_plugins').click(function(){
+ document.location.href = './?_task=settings&_framed=1&_action=plugin.plugin_manager_update&_warning=1';
+ });
+ rcmail.pm_stat = $('input[name*="man"]').serialize();
+ $('.mainaction').hide();
+ $('.mainaction').prop('disabled', true);
+ $('input:checkbox').click(function(){
+ if(rcmail.pm_stat != $('input[name*="man"]').serialize()){
+ $('.mainaction').prop('disabled', false);
+ $('.mainaction').show();
+ }
+ else{
+ $('.mainaction').prop('disabled', true);
+ $('.mainaction').hide();
+ }
+ });
+ $('.fsavedialog').click(function(){
+ var plugin = $(this).attr('name').replace('_plugin_manager_','');
+ var label = rcmail.gettext(plugin + '.plugindescription');
+ if(label.substr(0,1) != '[' && label.substr(label.length - 1, 1) != ']'){
+ if($('.mainaction').prop('disabled') == false){
+ if($(this).prop('checked') && !$(this).hasClass('fconfig')){
+ plugin_manager_save_prefs();
+ }
+ else{
+ if(!$(this).hasClass('funinstall') && !$(this).hasClass('frequest') && !$(this).hasClass('frequestforce')){
+ plugin_manager_save_prefs();
+ }
+ }
+ }
+ }
+ });
+ $('.fconfig').click(function(){
+ if($(this).prop('checked')){
+ var plugin = $(this).attr('name').replace('_plugin_manager_','');
+ var label = rcmail.gettext(plugin + '.plugindescription');
+ if(label.substr(0,1) != '[' && label.substr(label.length - 1, 1) != ']'){
+ if($('.mainaction').prop('disabled') == false){
+ $('.mainaction').hide();
+ var buttons = {};
+ buttons[rcmail.gettext('plugin_manager.yes')] = function(){
+ $('#plugin_manager_config_plugin').val(plugin);
+ document.forms.form.submit();
+ $('#jqdialog').dialog("close");
+ };
+ buttons[rcmail.gettext('plugin_manager.no')] = function(){
+ plugin_manager_save_prefs();
+ $('#jqdialog').dialog("close");
+ };
+ $('#jqdialog').html(label + '<hr /><p>' + rcmail.gettext('plugin_manager.furtherconfig') + '</p>');
+ $('#jqdialog').dialog({
+ 'title': rcmail.gettext(plugin + '.pluginname'),
+ 'buttons': buttons,
+ 'position': [$(this).offset().left + 20, $(this).offset().top + 20],
+ 'zIndex': 99999,
+ 'close': function(){
+ $('#plugin_manager_config_plugin').val('');
+ }
+ });
+ }
+ }
+ }
+ else{
+ if(!$(this).hasClass('funinstall') && !$(this).hasClass('frequest') && !$(this).hasClass('frequestforce')){
+ plugin_manager_save_prefs();
+ }
+ }
+ });
+ $('.funinstall').click(function(){
+ if(!$(this).prop('checked')){
+ var plugin = $(this).attr('name').replace('_plugin_manager_','');
+ var label = rcmail.gettext(plugin + '.plugindescription');
+ if(label.substr(0,1) != '[' && label.substr(label.length - 1, 1) != ']'){
+ if($('.mainaction').prop('disabled') == false){
+ $('.mainaction').hide();
+ var buttons = {};
+ buttons[rcmail.gettext('plugin_manager.yes')] = function(){
+ $('.mainaction').prop('disabled', true);
+ rcmail.http_post('plugin.plugin_manager_uninstall', '_uninstall=' + plugin);
+ $('#jqdialog').dialog("close");
+ };
+ buttons[rcmail.gettext('plugin_manager.no')] = function(){
+ plugin_manager_save_prefs();
+ $('#jqdialog').dialog("close");
+ };
+ $('#jqdialog').html(label + '<hr /><p>' + rcmail.gettext('plugin_manager.uninstall') + '</p>');
+ $('#jqdialog').dialog({
+ 'title': rcmail.gettext(plugin + '.pluginname'),
+ 'buttons': buttons,
+ 'position': [$(this).offset().left + 20, $(this).offset().top + 20],
+ 'zIndex': 99999,
+ 'close': function(){
+ }
+ });
+ }
+ }
+ }
+ });
+ $('.frequest').click(function(){
+ if(!$(this).prop('checked')){
+ $(this).prop('checked', true)
+ var plugin = $(this).attr('name').replace('_plugin_manager_','');
+ var label = rcmail.gettext(plugin + '.plugindescription');
+ if(label.substr(0,1) != '[' && label.substr(label.length - 1, 1) != ']'){
+ if($('.mainaction').prop('disabled') == false){
+ $('.mainaction').hide();
+ var buttons = {};
+ buttons[rcmail.gettext('plugin_manager.disable')] = function(){
+ $('#pm_chbox_' + plugin).prop('checked', false);
+ plugin_manager_save_prefs();
+ $('#jqdialog').dialog("close");
+ };
+ buttons[rcmail.gettext('plugin_manager.remove')] = function(){
+ $('.mainaction').prop('disabled', true);
+ $('#pm_chbox_' + plugin).prop('checked', false);
+ if(confirm(rcmail.gettext('plugin_manager.areyousure')))
+ rcmail.http_post('plugin.plugin_manager_uninstall', '_uninstall=' + plugin);
+ else
+ plugin_manager_save_prefs();
+ $('#jqdialog').dialog("close");
+ };
+ $('#jqdialog').html(label + '<hr /><p>' + rcmail.gettext('plugin_manager.uninstallconfirm') + '</p>');
+ $('#jqdialog').dialog({
+ 'title': rcmail.gettext(plugin + '.pluginname'),
+ 'buttons': buttons,
+ 'position': [$(this).offset().left + 20, $(this).offset().top + 20],
+ 'zIndex': 99999,
+ 'close': function(){
+ }
+ });
+ }
+ }
+ }
+ });
+ $('.frequestforce').click(function(){
+ if(!$(this).prop('checked')){
+ $(this).prop('checked', true)
+ var plugin = $(this).attr('name').replace('_plugin_manager_','');
+ var label = rcmail.gettext(plugin + '.plugindescription');
+ if(label.substr(0,1) != '[' && label.substr(label.length - 1, 1) != ']'){
+ if($('.mainaction').prop('disabled') == false){
+ var buttons = {};
+ buttons[rcmail.gettext('plugin_manager.remove')] = function(){
+ $('.mainaction').prop('disabled', true);
+ $('#pm_chbox_' + plugin).prop('checked', false);
+ rcmail.http_post('plugin.plugin_manager_uninstall', '_uninstall=' + plugin);
+ $('#jqdialog').dialog("close");
+ };
+ $('#jqdialog').html(label + '<hr /><p>' + rcmail.gettext('plugin_manager.uninstall') + '</p>');
+ $('#jqdialog').dialog({
+ 'title': rcmail.gettext(plugin + '.pluginname'),
+ 'buttons': buttons,
+ 'position': [$(this).offset().left + 20, $(this).offset().top + 20],
+ 'zIndex': 99999,
+ 'close': function(){
+ }
+ });
+ }
+ }
+ }
+ });
+ $('.plugin_manager_ul > li').each(function(){
+ var plugin = $(this).attr('id');
+ var temparr = plugin.split('pmid_');
+ plugin = temparr[1];
+ if(rcmail.env['pm_plugin_' + plugin] != 1){
+ if(rcmail.env['pm_buttons_' + plugin]){
+ for(var i in rcmail.env['pm_buttons_' + plugin]){
+ if(parent.$(rcmail.env['pm_buttons_' + plugin][i]).get(0)){
+ parent.$(rcmail.env['pm_buttons_' + plugin][i]).hide();
+ }
+ else{
+ if(parent.$(rcmail.env['pm_buttons_' + plugin][i]).get(0)){
+ parent.$(rcmail.env['pm_buttons_' + plugin][i]).show();
+ }
+ }
+ }
+ }
+ }
+ else{
+ if(rcmail.env['pm_buttons_' + plugin]){
+ console.log(rcmail.env['pm_buttons_' + plugin][0]);
+ if(!parent.$(rcmail.env['pm_buttons_' + plugin][0]).get(0)){
+ parent.location.href='./?_task=settings&_action=plugin.plugin_manager';
+ }
+ }
+ }
+ var label = rcmail.gettext(plugin + '.plugindescription');
+ if(label.indexOf('.plugindescription') == -1){
+ if(label.substr(0,1) != '[' && label.substr(label.length - 1, 1) != ']'){
+ $(this).qtip({
+ content: {
+ title: $(this).text().replace("\n",""),
+ text: label
+ },
+ position: {
+ my: "top left",
+ at: "left bottom",
+ target: $(this),
+ viewport: $(window)
+ },
+ hide: {
+ effect: function () { $(this).slideUp(5, function(){ $(this).dequeue(); }); }
+ },
+ style: {
+ classes: "ui-tooltip-light"
+ }
+ });
+ }
+ }
+ });
+ });
+}); \ No newline at end of file
diff --git a/plugin_manager/plugin_manager.php b/plugin_manager/plugin_manager.php
new file mode 100644
index 0000000..65850a1
--- /dev/null
+++ b/plugin_manager/plugin_manager.php
@@ -0,0 +1,4554 @@
+<?php
+#
+# This file is part of MyRoundcube "plugin_manager" plugin.
+#
+# Your are not allowed to distribute this file or parts of it.
+#
+# This file 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.
+#
+# Copyright (c) 2012 - 2015 Roland 'Rosali' Liebl - all rights reserved.
+# dev-team [at] myroundcube [dot] com
+# http://myroundcube.com
+#
+class plugin_manager extends rcube_plugin
+{
+
+ private $debug = false;
+ static private $version = '29.0';
+ static private $date = '22-02-2015';
+
+ private $core_patches = array(
+ 'version' => 'Roundcube 1.0.5',
+ 'count' => 0,
+ 'date' => '2015-02-08 06:00:00',
+ 'comments' => 'Download required core files PATCHES for Roundcube 1.0.5 from <a href="https://mirror.myroundcube.com/dl/1.0.5/roundcube.zip">here</a>. Unzip the package over your Roundcube installation. For DETAILS about the additions these files provide, download a revision copy (*.PATCH) from <a href="https://mirror.myroundcube.com/dl/1.0.5/roundcube.patch" target="_blank">here</a>.',
+ 'PHP' => '5.3',
+ 'lc' => false,
+ );
+
+ public $allowed_prefs = array('plugin_manager_hmail');
+
+ private $rcmail;
+ private $log = false;
+ private $template;
+ private $admins = array();
+ private $noremote = false;
+ private $host;
+ private $domain;
+ private $config;
+ private $lables;
+ private $plugins;
+ private $mirror = 'http://mirror.myroundcube.com';
+ private $svn = 'http://dev.myroundcube.com';
+ private $beta = 'http://beta.myroundcube.com';
+ private $stable = '0.9.5';
+ private $dev = '1.0.5';
+ private $dev_beta = '1.0.5';
+ private $rcurl = 'http://roundcube.net';
+ private $guide = 'http://myroundcube.com/myroundcube-plugins/plugins-installation';
+ private $replyto = 'dev-team@myroundcube.com';
+ private $vlength = 5;
+ private $billingurl = 'http://billing.myroundcube.com/?_task=billing&_action=buycredits';
+ private $dlurl = 'https://billing.myroundcube.com/pm/';
+ private $delay = 8000;
+ private $out;
+ private $defaults = array();
+ private $unauth = array();
+ private $thirdparty = array();
+ private $use_ssl = false;
+ private $use_hmail = false;
+ private $load_splitter = false;
+ private $maintenance_mode = false;
+ private $compress_html = false;
+ private $file_based_config = false;
+ private $config_permissions = false;
+ private $dontlist = array('plugin_server', 'global_config');
+ private $skip = array('plugin_manager', 'plugin_server', 'companyaddressbook_plus', 'calendar_plus', 'carddav_plus', 'codemirror_ui', 'db_version', 'global_config', 'http_auth', 'jqueryui', 'filesystem_attachments', 'fancybox', 'package_xml', 'sabredav_migrate', 'savepassword', 'timepicker', 'jsdialogs', 'jappix4roundcube', 'db_config', 'tabbed');
+ private $noselect = array('plugin_manager', 'plugin_server', 'companyaddressbook_plus', 'calendar_plus', 'carddav_plus', 'codemirror_ui', 'global_config', 'http_auth', 'jqueryui', 'filesystem_attachments', 'fancybox', 'package_xml', 'sabredav_migrate', 'savepassword','timepicker');
+ private $rctasks = array('settings', 'mail', 'addressbook', 'settings', 'dummy', 'logout', 'login');
+ private $db_map = array(
+ 'sqlite' => 'sqlite',
+ 'sqlite2' => 'sqlite',
+ 'sqlite3' => 'sqlite',
+ 'sybase' => 'mssql',
+ 'dblib' => 'mssql',
+ 'sqlsrv' => 'mssql',
+ 'mssql' => 'mssql',
+ 'mysql' => 'mysql',
+ 'mysqli' => 'mysql',
+ 'pgsql' => 'pgsql',
+ 'postgresql' => 'pgsql',
+ );
+ private $nodocs = array(
+
+ );
+ private $docsmap = array(
+ //'rcguard' => 'captcha-plugin#rcguard',
+ );
+
+ /* unified plugin properties */
+ static private $plugin = 'plugin_manager';
+ static private $author = 'myroundcube@mail4us.net';
+ static private $authors_comments = '<a onclick="alert(\'Roundcube Core Patches are recommended in order to show all installed plugins in <i>About</i> popup.\')" href="#pmu_Roundcube_Core_Patches"><font color="red">IMPORTANT</font></a><br /><a href="http://trac.roundcube.net/ticket/1488871" target="_blank">Related Ticket</a><br /><a href="http://myroundcube.com/myroundcube-plugins/plugin-manager" target="_blank">Documentation</a>';
+ static private $download = 'http://myroundcube.com';
+ static private $licence = 'All Rights reserved';
+ static private $requirements = array(
+ 'Roundcube' => '1.0',
+ 'PHP' => '5.3',
+ 'extra' => 'PHP cURL and OpenSSL are recommended',
+ 'required_plugins' => array(
+ 'settings' => 'require_plugin',
+ 'libgpl' => 'require_plugin',
+ 'codemirror_ui' => 'require_plugin',
+ 'db_version' => 'require_plugin',
+ 'myrc_branch' => 'require_plugin',
+ 'myrc_sprites' => 'require_plugin',
+ ),
+ );
+ static private $prefs = array(
+ 'plugin_manager_active',
+ 'plugin_manager_hash',
+ );
+ static private $tables = array('plugin_manager');
+ static private $db_version = array(
+ 'initial',
+ '20131209'
+ );
+
+ function init(){
+
+ $this->require_plugin('libgpl');
+
+ /* PHP 5.4: suppress illegal string offset warnings */
+ if(version_compare(PHP_VERSION, '5.4.0', '>=') && strpos($_SERVER['HTTP_HOST'], 'myroundcube.com') === false){
+ if((E_ALL & ~E_NOTICE & ~E_STRICT & ~E_WARNING & ~E_USER_WARNING) != filter_var(ini_get('error_reporting'), FILTER_VALIDATE_INT)){
+ @ini_set('error_reporting', E_ALL & ~E_NOTICE & ~E_STRICT & ~E_WARNING & ~E_USER_WARNING);
+ if((E_ALL & ~E_NOTICE & ~E_STRICT & ~E_WARNING & ~E_USER_WARNING) != filter_var(ini_get('error_reporting'), FILTER_VALIDATE_INT)){
+ write_log('errors', 'MyRoundcube Plugin Manager: Please set error_reporting to E_ALL & ~E_NOTICE & ~E_STRICT & ~E_WARNING & ~E_USER_WARNING (php.ini or .htaccess).');
+ }
+ }
+ }
+
+ /* DB versioning */
+ if(is_dir(INSTALL_PATH . 'plugins/db_version')){
+ $this->require_plugin('db_version');
+ if(!$load = db_version::exec(self::$plugin, self::$tables, self::$db_version)){
+ return;
+ }
+ }
+
+ $this->rcmail = rcmail::get_instance();
+
+ $required = self::$requirements['required_plugins'];
+ foreach($required as $plugin => $load){
+ if(!file_exists(INSTALL_PATH . 'plugins/' . $plugin . '/' . $plugin . '.php')){
+ if(get_input_value('_framed', RCUBE_INPUT_GPC)){
+ $this->rcmail->output->add_script('parent.location.href="./";', 'foot');
+ }
+ else{
+ if(MYRC_BRANCH == 'stable'){
+ $server = $this->svn;
+ }
+ else if(MYRC_BRANCH == 'frozen'){
+ $server = $this->mirror;
+ }
+ else{
+ $server = $this->beta;
+ }
+ $this->out = html::tag('div', array('style' => 'font-size: 12px; text-align: justify; position: absolute; margin-left: auto; left: 50%; margin-left: -200px; width: 400px;'),
+ html::tag('h3', null, 'Missing plugin: "' . html::tag('a', array('href' => 'http://myroundcube.com/myroundcube-plugins#' . $plugin, 'target' => '_blank'), $plugin) . '"<br />' . html::tag('span', array('style' => 'font-weight: normal; font-size: 9px'), '(' . INSTALL_PATH . $plugin . ')')) .
+ html::tag('span', null, 'Please ' .
+ html::tag('a', array('href' => $server . '/?_action=plugin.plugin_server_get_pm'), 'download') .
+ ' Plugin Manager package again and upload the entire package to your Roundcube\'s plugin folder.') . html::tag('br') . html::tag('br') .
+ html::tag('div', array('style' => 'display: inline; float: left'),
+ html::tag('a', array('href' => 'javascript:void(0)', 'onclick' => 'document.location.href=\'./\''), $this->gettext('done'))
+ )
+ );
+ $this->register_handler('plugin.body', array($this, 'sqlerror'));
+ $this->rcmail->output->send('plugin');
+ }
+ }
+ }
+
+ $this->require_plugin('myrc_sprites');
+
+ $rcversion = current(explode('-', RCMAIL_VERSION));
+ $pmversion = self::$requirements['Roundcube'];
+
+ if(version_compare($rcversion, $pmversion, '<')){
+ $this->out = html::tag('div', array('style' => 'font-size: 12px; text-align: justify; position: absolute; margin-left: auto; left: 50%; margin-left: -200px; width: 400px;'),
+ html::tag('h3', null, 'Plugin Manager is incompatible with your Roundcube installation (' . RCMAIL_VERSION . ')') .
+ html::tag('span', null, 'Please ' .
+ html::tag('a', array('href' => 'http://myroundcube.com/myroundcube-plugins/plugin-manager', 'target' => '_blank'), 'download') .
+ ' Plugin Manager package again and upload the entire package to your Roundcube\'s plugin folder.') . html::tag('br') . html::tag('br') .
+ html::tag('div', array('style' => 'display: inline; float: left'),
+ html::tag('a', array('href' => 'javascript:void(0)', 'onclick' => 'document.location.href=\'./\''), $this->gettext('done'))
+ )
+ );
+ $this->register_handler('plugin.body', array($this, 'sqlerror'));
+ $this->rcmail->output->send('plugin');
+ }
+
+ $this->add_hook('login_after', array($this, 'login_after'));
+
+ if($this->rcmail->task == 'mail' && $this->rcmail->action == 'plugin.dla'){
+ if(file_exists(INSTALL_PATH . 'plugins/detach_attachments/detach_attachments.php')){
+ $this->require_plugin('detach_attachments');
+ }
+ }
+
+ if($this->rcmail->task == 'settings' && $this->rcmail->action == 'save-pref' && get_input_value('_name', RCUBE_INPUT_POST)){
+ $sql = 'DELETE FROM ' . get_table_name('plugin_manager') . ' WHERE ' . $this->q('conf') . '=?';
+ $this->rcmail->db->query($sql, '_plugin_manager_hmail');
+ $save = get_input_value('_value', RCUBE_INPUT_POST);
+ $sql = 'INSERT INTO ' . get_table_name('plugin_manager') . ' (conf, value, type) VALUES (?, ?, ?)';
+ $this->rcmail->db->query($sql, '_plugin_manager_hmail', $save ? 1: 0, 'bool');
+ $this->rcmail->session->remove('plugin_manager_settings');
+ }
+
+ if(!isset($_SESSION['plugin_manager_settings'])){
+ $sql = 'SELECT * FROM ' . get_table_name('system') . ' WHERE ' . $this->q('name') . '=?';
+ $res = $this->rcmail->db->query($sql, 'myrc_plugin_manager');
+ $res = $this->rcmail->db->fetch_assoc($res);
+ if(is_array($res)){
+ $sql = 'SELECT * FROM ' . get_table_name('plugin_manager') . ' WHERE ' . $this->q('conf') . ' LIKE ?';
+ $res = $this->rcmail->db->query($sql, '_plugin_manager_%');
+ if($res){
+ while($conf = $this->rcmail->db->fetch_assoc($res)){
+ $this->rcmail->config->set(substr($conf['conf'], 1), $conf['value']);
+ $_SESSION['plugin_manager_settings'][substr($conf['conf'], 1)] = $conf['value'];
+ }
+ }
+ }
+ }
+ else{
+ foreach($_SESSION['plugin_manager_settings'] as $key => $value){
+ $this->rcmail->config->set($key, $value);
+ }
+ }
+
+ $this->use_ssl = $this->rcmail->config->get('plugin_manager_use_ssl');
+ $this->use_hmail = $this->rcmail->config->get('plugin_manager_hmail');
+ $this->load_splitter = $this->rcmail->config->get('plugin_manager_load_splitter');
+ if($this->load_splitter && file_exists(INSTALL_PATH . 'plugins/load_splitter/load_splitter.php')){
+ $this->require_plugin('load_splitter');
+ }
+ else{
+ $this->load_splitter = false;
+ }
+ $this->maintenance_mode = $this->rcmail->config->get('plugin_manager_maintenance_mode');
+ $this->compress_html = $this->rcmail->config->get('plugin_manager_compress_html');
+ $this->file_based_config = $this->rcmail->config->get('plugin_manager_file_based_config');
+ $svn = parse_url($this->svn);
+ if($this->file_based_config || $_SERVER['HTTP_HOST'] == $svn['host']){
+ $this->file_based_config = true;
+ if(!in_array('global_config', $this->rcmail->config->get('plugins'))){
+ $this->load_config();
+ $this->require_plugin('settings');
+ }
+ $this->defaults = $this->rcmail->config->get('plugin_manager_defaults', array());
+ $this->unauth = $this->rcmail->config->get('plugin_manager_unauth', array());
+ $this->thirdparty = $this->rcmail->config->get('plugin_manager_third_party_plugins', array());
+ }
+ else{
+ $this->build_defaults();
+ if(!in_array('global_config', $this->rcmail->config->get('plugins'))){
+ $this->require_plugin('settings');
+ }
+ }
+ if($this->rcmail->config->get('plugin_manager_use_ssl', false) && defined('OPENSSL_VERSION_TEXT')){
+ $this->mirror = str_replace('http://', 'https://', $this->mirror);
+ $this->svn = str_replace('http://', 'https://', $this->svn);
+ $this->beta = str_replace('http://', 'https://', $this->beta);
+ $this->billingurl = str_replace('http://', 'https://', $this->billingurl);
+ }
+
+ if($hash = $this->rcmail->config->get('plugin_manager_hash')){
+ if(file_exists(INSTALL_PATH . $hash . '.myrc')){
+ $this->config_permissions = true;
+ }
+ }
+ $fileadmins = $this->rcmail->config->get('plugin_manager_admins');
+ if($this->rcmail->task == 'settings' && $_SESSION['plugin_manager_admins']){
+ $this->admins = $_SESSION['plugin_manager_admins'];
+ }
+ else if($this->rcmail->task == 'settings' && !isset($_GET['_remote'])){
+ $this->admins = array();
+ $sql = 'SELECT * FROM ' . get_table_name('plugin_manager') . ' WHERE ' . $this->q('conf') . '=?';
+ $res = $this->rcmail->db->limitquery($sql, 0, 1, 'admins');
+ if($res){
+ $admins = $this->rcmail->db->fetch_assoc($res);
+ if($admins = unserialize($admins['value'])){
+ $this->rcmail->config->set('plugin_manager_admins', $admins);
+ $this->admins = array_flip($admins);
+ $_SESSION['plugin_manager_admins'] = $this->admins;
+ }
+ }
+ if(count($this->admins) < 1 && strtolower($this->get_demo($_SESSION['username'])) != strtolower(sprintf($this->rcmail->config->get('demo_user_account'),""))){
+ if($this->rcmail->task == 'settings' && !isset($_GET['_remote'])){
+ if(!$hash = $this->rcmail->config->get('plugin_manager_hash')){
+ $hash = session_id();
+ $this->rcmail->user->save_prefs(array('plugin_manager_hash' => $hash));
+ }
+ else{
+ if(!file_exists(INSTALL_PATH . $hash . '.myrc') && !isset($_GET['_framed'])){
+ $this->register_handler('plugin.body', array($this, 'authenticate'));
+ $this->rcmail->output->send('plugin');
+ }
+ else{
+ $query = 'SELECT * FROM ' . get_table_name('plugin_manager') . ' WHERE ' . $this->q('conf') . '=?';
+ $res = $this->rcmail->db->limitquery($query, 0, 1, 'admins');
+ $res = $this->rcmail->db->fetch_assoc($res);
+ if(is_array($res)){
+ $admins = unserialize($res['value']);
+ }
+ else{
+ $query = 'INSERT INTO ' . get_table_name('plugin_manager') . ' (' .
+ $this->q('conf') . ', ' .
+ $this->q('value') . ', ' .
+ $this->q('type') .
+ ') VALUES (?, ?, ?)';
+ $superadmin = array($this->rcmail->user->data['username']);
+ $this->rcmail->db->query($query, 'admins', serialize($superadmin), 'array');
+ $this->rcmail->config->set('plugin_manager_admins', $superadmin);
+ $this->admins = array_flip($superadmin);
+ $_SESSION['plugin_manager_admins'] = $this->admins;
+ }
+ }
+ }
+ }
+ }
+ else if($this->rcmail->task != 'logout' && strtolower($this->get_demo($_SESSION['username'])) != strtolower(sprintf($this->rcmail->config->get('demo_user_account'),""))){
+ $admins = $this->rcmail->config->get('plugin_manager_admins', array());
+ if($admins[0] == strtolower($this->rcmail->user->data['username'])){
+ if(!$hash = $this->rcmail->config->get('plugin_manager_hash')){
+ $hash = session_id();
+ $this->rcmail->user->save_prefs(array('plugin_manager_hash' => $hash));
+ }
+ else{
+ if(!file_exists(INSTALL_PATH . $hash . '.myrc') && !isset($_GET['_framed'])){
+ $this->register_handler('plugin.body', array($this, 'authenticate'));
+ $this->rcmail->output->send('plugin');
+ }
+ }
+ }
+ }
+ $hash = $this->rcmail->config->get('plugin_manager_hash');
+ if(is_array($fileadmins) && file_exists(INSTALL_PATH . $hash . '.myrc')){
+ $this->rcmail->session->remove('plugin_manager_admins');
+ $sql = 'UPDATE ' . get_table_name('plugin_manager') . ' SET ' . $this->q('value') . '=? WHERE ' . $this->q('conf') . '=?';
+ $this->rcmail->db->query($sql, serialize($fileadmins), 'admins');
+ $this->out = html::tag('div', array('style' => 'font-size: 12px; text-align: justify; position: absolute; margin-left: auto; left: 50%; margin-left: -200px; width: 400px;'),
+ html::tag('h3', null, 'Plugin Manager detected a misconfiguration') .
+ html::tag('span', null, 'Please remove ' . '$config[\'plugin_manager_admins\'] from your configuration file.') . html::tag('br') . html::tag('br') .
+ html::tag('pre', null, print_r($fileadmins, true)) .
+ html::tag('div', array('style' => 'display: inline; float: right'),
+ html::tag('a', array('href' => 'javascript:void(0)', 'onclick' => 'document.location.href=\'./?_task=settings\''), $this->gettext('done'))
+ )
+ );
+ $this->register_handler('plugin.body', array($this, 'sqlerror'));
+ $this->rcmail->output->send('plugin');
+ }
+ }
+
+ if($this->rcmail->action != 'jappix.loadmini'){
+ $this->add_texts('localization/', false);
+
+ $this->add_hook('render_page', array($this, 'render_page'));
+ $this->add_hook('send_page', array($this, 'send_page'));
+ $this->add_hook('preferences_sections_list', array($this, 'settings_link'));
+ $this->add_hook('preferences_list', array($this, 'settings'));
+ $this->add_hook('preferences_save', array($this, 'saveprefs'));
+ $this->add_hook('plugins_installed', array($this, 'plugins_installed'));
+
+ $this->register_action('plugin.plugin_manager', array($this, 'navigation'));
+ $this->register_action('plugin.plugin_manager_save', array($this, 'save'));
+ $this->register_action('plugin.plugin_manager_uninstall', array($this, 'uninstall'));
+ $this->register_action('plugin.plugin_manager_update', array($this, 'update'));
+ $this->register_action('plugin.plugin_manager_bind', array($this, 'bind'));
+ $this->register_action('plugin.plugin_manager_unbind', array($this, 'unbind'));
+ $this->register_action('plugin.plugin_manager_getnew', array($this, 'getnew'));
+ $this->register_action('plugin.plugin_manager_deny', array($this, 'deny'));
+ $this->register_action('plugin.plugin_manager_show_config', array($this, 'show'));
+ $this->register_action('plugin.plugin_manager_save_config', array($this, 'save_config'));
+ $this->register_action('plugin.plugin_manager_edit_config', array($this, 'edit_config'));
+ $this->register_action('plugin.plugin_manager_restore_config', array($this, 'restore_config'));
+ $this->register_action('plugin.plugin_manager_accept', array($this, 'accept'));
+ $this->register_action('plugin.plugin_manager_transfer', array($this, 'transfer'));
+ $this->register_action('plugin.plugin_manager_getcredits', array($this, 'getcredits'));
+ $this->register_action('plugin.plugin_manager_buycredits', array($this, 'buycredits'));
+ //$this->register_action('plugin.plugin_manager_compress', array($this, 'compress'));
+ $this->register_action('plugin.plugin_manager_update_notifier', array($this, 'update_notifier'));
+
+ $this->include_script('plugin_manager_fixes.js');
+ if(!$_SESSION['pm_cache']['pm_version'] || $_SESSION['pm_cache']['pm_version']['time'] < time() - 3600){
+ if(isset($this->admins[$this->rcmail->user->data['username']])){
+ $skin = $this->rcmail->config->get('skin');
+ if(!file_exists($this->home . '/skins/' . $skin . '/plugin_manager_update.css')){
+ $skin = 'classic';
+ }
+ $httpConfig['method'] = 'GET';
+ $httpConfig['target'] = $this->svn . '?_action=plugin.plugin_server_pmversion';
+ $httpConfig['timeout'] = '30';
+ $httpConfig['user_agent'] = 'MyRoundcube PHP/5.0';
+ $http = new MyRCHttp();
+ $http->initialize($httpConfig);
+ if(ini_get('safe_mode') || ini_get('open_basedir')){
+ $http->useCurl(false);
+ }
+ $http->execute();
+ $this->_log($httpConfig, $http);
+ if($http->error){
+ $this->mirror = str_replace('https://', 'http://', $this->mirror);
+ $this->svn = str_replace('https://', 'http://', $this->svn);
+ $this->beta = str_replace('https://', 'http://', $this->beta);
+ $this->billingurl = str_replace('https://', 'http://', $this->billingurl);
+ $httpConfig['target'] = $this->svn . '?_action=plugin.plugin_server_pmversion';
+ $http->initialize($httpConfig);
+ $http->execute();
+ if($http->error){
+ $this->mirror = str_replace('.com', '.net', $this->mirror);
+ $this->svn = str_replace('.com', '.net', $this->svn);
+ $this->beta = str_replace('.com', '.net', $this->beta);
+ $this->billingurl = str_replace('.com', '.net', $this->billingurl);
+ $this->guide = str_replace('.com', '.net', $this->guide);
+ $this->dlurl = str_replace('.com', '.net', $this->dlurl);
+ // find me: remove when myroundcube.net SSL is available
+ $this->dlurl = str_replace('https://', 'http://', $this->dlurl);
+ $httpConfig['target'] = $this->svn . '?_action=plugin.plugin_server_pmversion';
+ $http->initialize($httpConfig);
+ $http->execute();
+ $this->_log($httpConfig, $http);
+ }
+ }
+ if(!preg_match('/^[0-9\.|]+$/', trim($http->result)) || count(explode('|', $http->result)) != 2){
+ $this->mirror = str_replace('https://', 'http://', $this->mirror);
+ $this->svn = str_replace('https://', 'http://', $this->svn);
+ $this->beta = str_replace('https://', 'http://', $this->beta);
+ $this->billingurl = str_replace('https://', 'http://', $this->billingurl);
+ // find me: remove when myroundcube.net SSL is available
+ $this->dlurl = str_replace('https://', 'http://', $this->dlurl);
+ $this->mirror = str_replace('.com', '.net', $this->mirror);
+ $this->svn = str_replace('.com', '.net', $this->svn);
+ $this->beta = str_replace('.com', '.net', $this->beta);
+ $this->billingurl = str_replace('.com', '.net', $this->billingurl);
+ $this->guide = str_replace('.com', '.net', $this->guide);
+ $this->dlurl = str_replace('.com', '.net', $this->dlurl);
+ $httpConfig['target'] = $this->svn . '?_action=plugin.plugin_server_pmversion';
+ $http->initialize($httpConfig);
+ $http->execute();
+ $this->_log($httpConfig, $http);
+ }
+ if($this->debug){
+ write_log('plugin_manager', $httpConfig);
+ write_log('plugin_manager', $_SERVER['SERVER_ADDR']);
+ write_log('plugin_manager', self::$version);
+ write_log('plugin_manager', $http);
+ }
+ if(!preg_match('/^[0-9\.|]+$/', trim($http->result)) || count(explode('|', $http->result)) != 2){
+ $this->noremote = true;
+ $http->result = 'error';
+ }
+ $response = $http->result;
+ $_SESSION['pm_cache']['pm_version'] = array(
+ 'error' => $http->error,
+ 'response' => $http->result,
+ 'urls' => array(
+ 'mirror' => $this->mirror,
+ 'svn' => $this->svn,
+ 'beta' => $this->beta,
+ 'billingurl' => $this->billingurl,
+ 'dlurl' => $this->dlurl,
+ 'guide' => $this->guide,
+ ),
+ 'time' => time(),
+ );
+ if(is_array($_SESSION['pm_cache']['pm_version']['urls'])){
+ foreach($_SESSION['pm_cache']['pm_version']['urls'] as $key => $url){
+ $this->$key = $url;
+ }
+ }
+ if(isset($_SESSION['pm_cache']) && !$_SESSION['pm_cache']['pm_version']['error']){
+ $temp = explode('|', $_SESSION['pm_cache']['pm_version']['response'], 2);
+ if($response == 'error'){
+ $this->noremote = true;
+ if(!get_input_value('_remote', RCUBE_INPUT_GPC) && !get_input_value('_framed', RCUBE_INPUT_GPC)){
+ $this->include_stylesheet('skins/' . $skin . '/plugin_manager_update.css');
+ $this->api->output->add_footer(html::tag('div', array('class' => 'myrcerror myrcmessage'), html::tag('span', null, $this->gettext('myrcerror'))));
+ }
+ }
+ else if(self::$version != $temp[0]){
+ if(self::$version < $temp[1]){
+ $this->rcmail->session->remove('pm_update_message');
+ }
+ if((!$_SESSION['pm_update_message']) && !get_input_value('_framed', RCUBE_INPUT_GPC) && $this->rcmail->action != 'about'){
+ if(version_compare(self::$version, $temp[1], '<')){
+ $this->noremote = true;
+ $this->delay = 500000;
+ $_SESSION['pm_update_message'] = true;
+ if(!get_input_value('_remote', RCUBE_INPUT_GPC)){
+ $this->include_stylesheet('skins/' . $skin . '/plugin_manager_update.css');
+ $this->api->output->add_footer(html::tag('div', array('class' => 'updatepmrequired myrcmessage', 'onclick' => 'document.location.href="' . slashify($this->svn) . '?_action=plugin.plugin_server_get_pm"; $(this).hide("slow");'),
+ html::tag('span', null, $this->gettext('updatepmrequired')) .
+ ((strpos($skin, 'litecube') !== false) ? '&nbsp;' : html::tag('br')) .
+ html::tag('span', array('style' => 'text-decoration:underline;'), $this->gettext('downloadnow'))
+ ));
+ }
+ }
+ else if(version_compare(self::$version, $temp[0], '<')){
+ $this->delay = 30000;
+ //$_SESSION['pm_update_message'] = true;
+ if(!get_input_value('_remote', RCUBE_INPUT_GPC)){
+ $this->include_stylesheet('skins/' . $skin . '/plugin_manager_update.css');
+ $this->api->output->add_footer(html::tag('div', array('class' => 'updatepm myrcmessage', 'onclick' => 'document.location.href="' . slashify($this->svn) . '?_action=plugin.plugin_server_get_pm"; $(this).hide("slow");'),
+ html::tag('span', null, $this->gettext('updatepm')) .
+ ((strpos($skin, 'litecube') !== false) ? '&nbsp;' : html::tag('br')) .
+ html::tag('span', array('style' => 'text-decoration:underline;'), $this->gettext('downloadnow'))
+ ));
+ }
+ }
+ }
+ }
+ }
+ else if(isset($_SESSION['pm_cache']) && $_SESSION['pm_cache']['pm_version']['error']){
+ $this->delay = 8000;
+ $this->noremote = true;
+ if(!get_input_value('_remote', RCUBE_INPUT_GPC) && !get_input_value('_framed', RCUBE_INPUT_GPC)){
+ $this->include_stylesheet('skins/' . $skin . '/plugin_manager_update.css');
+ $this->api->output->add_footer(html::tag('div', array('class' => 'myrcerror myrcmessage'), html::tag('span', null, $this->gettext('myrcerror'))));
+ }
+ }
+ $httpConfig['method'] = 'GET';
+ $httpConfig['target'] = $this->svn . '?_action=plugin.plugin_server_branches';
+ $httpConfig['timeout'] = '30';
+ $httpConfig['user_agent'] = 'MyRoundcube PHP/5.0';
+ $http = new MyRCHttp();
+ $http->initialize($httpConfig);
+ $http->execute();
+ if($http->error){
+ $httpConfig['target'] = $this->svn . '?_action=plugin.plugin_server_branches';
+ $http->initialize($httpConfig);
+ $http->execute();
+ }
+ if(!$http->error){
+ if($branches = unserialize($http->result)){
+ $this->dev = $branches['dev'];
+ $this->stable = $branches['stable'];
+ }
+ }
+ $map = array(
+ 'frozen' => 'mirror',
+ 'stable' => 'svn',
+ 'beta' => 'beta'
+ );
+ foreach($map as $host => $map){
+ if($host = $branches['branches'][$host]){
+ $temp1 = parse_url($this->$map);
+ $temp2 = explode('.', $temp1['host']);
+ $temp3 = parse_url($host);
+ $subdomain = current(explode('.', $temp3['host']));
+ $this->$map = $temp1['scheme'] . '://' . $subdomain . '.' . $temp2[1] . '.' . $temp2[2];
+ }
+ else{
+ $this->$map = false;
+ }
+ }
+ if(!$_SESSION['pm_update_message'] && $_SESSION['user_id'] && $this->rcmail->task != 'logout' && !get_input_value('_framed', RCUBE_INPUT_GPC) && $this->rcmail->config->get('plugin_manager_show_myrc_messages', false)){
+ $httpConfig['target'] = $this->svn . '?_action=plugin.plugin_server_motd';
+ $http->initialize($httpConfig);
+ $http->execute();
+ if($http->error){
+ $httpConfig['target'] = $this->svn . '?_action=plugin.plugin_server_motd';
+ $http->initialize($httpConfig);
+ $http->execute();
+ }
+ if(!$http->error){
+ if($http->result != ''){
+ $this->delay = 30000;
+ $_SESSION['pm_update_message'] = true;
+ if(!get_input_value('_remote', RCUBE_INPUT_GPC)){
+ $this->include_stylesheet('skins/' . $skin . '/plugin_manager_update.css');
+ $this->api->output->add_footer(html::tag('div', array('class' => 'motd myrcmessage'),
+ html::tag('span', null, html::tag('div', array('style' => 'float: right'), html::tag('small', null, '[' . html::tag('a', array('href' => '#', 'onclick' => '$(".myrcmessage").hide()', 'title' => $this->gettext('close')), 'x') .']')) . $http->result)
+ ));
+ }
+ }
+ }
+ }
+ }
+ if(count($this->admins) == 0 &&
+ ($_SERVER['QUERY_STRING'] == '_task=settings&_action=edit-prefs&_section=plugin_manager_update&_framed=1' ||$_SERVER['QUERY_STRING'] == '_task=settings&_action=edit-prefs&_section=plugin_manager_customer&_framed=1')
+ ){
+ $this->rcmail->output->add_script('parent.location.href="./?_task=settings"', 'docready');
+ }
+ }
+
+ /* uninstall requests */
+ /* google_contacts */
+ $this->register_action('plugin.google_contacts_uninstall', array($this, 'google_contacts_uninstall'));
+ /* automatic_addressbook */
+ $this->register_action('plugin.automatic_addressbook_uninstall', array($this, 'automatic_addressbook_uninstall'));
+ }
+
+ $this->plugins = $this->rcmail->config->get('plugins', array());
+
+ $this->host = strtolower($_SERVER['HTTP_HOST']);
+ $temparr = explode('@', $_SESSION['username']);
+ $this->domain = strtolower($temparr[1]);
+ if($this->domain == ''){
+ $host = $this->rcmail->user->data['mail_host'];
+ if($host == 'localhost'){
+ $host = $_SERVER['HTTP_HOST'];
+ }
+ $this->domain = $host;
+ }
+ $this->merge_config();
+ $deferred = array();
+ foreach($this->config as $sections => $section){
+ foreach($section as $plugin => $props){
+ if(isset($this->config[$sections][$plugin])){
+ if($props['active']){
+ $load = true;
+ if(is_array($props['hosts']) && count($props['hosts'] > 0)){
+ $load = false;
+ foreach($props['hosts'] as $host){
+ if($this->host == strtolower($host)){
+ $load = true;
+ break;
+ }
+ }
+ }
+ if($this->domain){
+ if($props['domain'] === true){
+ $load = true;
+ }
+ else if(is_array($props['domains']) && count($props['domains'] > 0)){
+ $load = false;
+ foreach($props['domains'] as $domain){
+ if($this->domain == strtolower($domain)){
+ $load = true;
+ break;
+ }
+ }
+ }
+ }
+ if(is_array($props['skins'])){
+ $props['skins'] = array_flip($props['skins']);
+ if(!isset($props['skins'][$this->rcmail->config->get('skin', 'classic')])){
+ $load = false;
+ }
+ }
+ if($load){
+ if($file = @file_get_contents(INSTALL_PATH . '/plugins/' . $plugin . '/' . $plugin . '.php')){
+ $file = str_replace(' ', '', $file);
+ $file = current(explode('functioninit(', $file, 2));
+ $task = explode('$task', $file, 2);
+ $task = explode('=', $task[1], 2);
+ $task = explode(';', $task[1], 2);
+ $task = str_replace(array('"', "'"), array('', ''), trim($task[0]));
+ $noajax = explode('$noajax', $file, 2);
+ $noajax = explode('=', $noajax[1], 2);
+ $noajax = explode(';', $noajax[1], 2);
+ $noajax = str_replace(array('"', "'"), array('', ''), trim($noajax[0]));
+ $noframe = explode('$noframe', $file, 2);
+ $noframe = explode('=', $noframe[1], 2);
+ $noframe = explode(';', $noframe[1], 2);
+ $noframe = str_replace(array('"', "'"), array('', ''), trim($noajax[0]));
+ if($task){
+ if(!preg_match('/^(' . $task . ')$/i', $this->rcmail->task)){
+ $noajax = false;
+ $noframe = false;
+ $load = false;
+ }
+ }
+ if($noajax && ($noajax == 'true' || $noajax == '1')){
+ if(isset($_REQUEST['_remote'])){
+ $noframe = false;
+ $load = false;
+ }
+ }
+ if($noframe && ($noframe == 'true' || $noframe == '1')){
+ if(isset($_REQUEST['_framed'])){
+ $load = false;
+ }
+ }
+ }
+ }
+ if($load && !$this->maintenance_mode){
+ if($props['browser']){
+ if(!$browser)
+ $browser = new rcube_browser();
+ eval($props['browser']);
+ if($test){
+ if($props['defer']){
+ $deferred[] = $plugin;
+ }
+ else{
+ if($plugin != 'load_splitter'){
+ $this->require_plugin($plugin);
+ }
+ }
+ }
+ }
+ else if($props['defer']){
+ $deferred[] = $plugin;
+ }
+ else{
+ if($plugin != 'load_splitter'){
+ $this->require_plugin($plugin);
+ }
+ }
+ }
+ }
+ else{
+ if($props['eval']){
+ if(!is_array($props['eval'])){
+ $eval = array($props['eval']);
+ }
+ else{
+ $eval = $props['eval'];
+ }
+ foreach($eval as $code){
+ eval($code);
+ }
+ }
+ }
+ }
+ }
+ }
+ if(!$this->maintenance_mode){
+ foreach($deferred as $plugin){
+ $this->require_plugin($plugin);
+ }
+ }
+ }
+
+ static public function about($keys = false){
+ $requirements = self::$requirements;
+ foreach(array('required_', 'recommended_') as $prefix){
+ if(is_array($requirements[$prefix.'plugins'])){
+ foreach($requirements[$prefix.'plugins'] as $plugin => $method){
+ if(class_exists($plugin) && method_exists($plugin, 'about')){
+ /* PHP 5.2.x workaround for $plugin::about() */
+ $class = new $plugin(false);
+ $requirements[$prefix.'plugins'][$plugin] = array(
+ 'method' => $method,
+ 'plugin' => $class->about($keys),
+ );
+ }
+ else{
+ $requirements[$prefix.'plugins'][$plugin] = array(
+ 'method' => $method,
+ 'plugin' => $plugin,
+ );
+ }
+ }
+ }
+ }
+ $config = array();
+ $ret = array(
+ 'plugin' => self::$plugin,
+ 'version' => self::$version,
+ 'db_version' => self::$db_version,
+ 'date' => self::$date,
+ 'author' => self::$author,
+ 'comments' => self::$authors_comments,
+ 'licence' => self::$licence,
+ 'download' => self::$download,
+ 'requirements' => $requirements,
+ );
+ if(is_array(self::$prefs))
+ $ret['config'] = array_merge($config, array_flip(self::$prefs));
+ else
+ $ret['config'] = $config;
+ if(is_array($keys)){
+ $return = array('plugin' => self::$plugin);
+ foreach($keys as $key){
+ $return[$key] = $ret[$key];
+ }
+ return $return;
+ }
+ else{
+ return $ret;
+ }
+ }
+
+ function update_notifier(){
+ $_SESSION['plugin_manager_update_notifier'] = true;
+ $server = array();
+ $updates = array();
+ $dir = scandir(INSTALL_PATH . 'plugins');
+ foreach($dir as $dirname){
+ if($dirname != '.' && $dirname != '..' && is_dir(INSTALL_PATH . 'plugins/' . $dirname) && file_exists(INSTALL_PATH . 'plugins/' . $dirname . '/' . $dirname . '.php')){
+ $server[$dirname] = 1;
+ }
+ }
+ if(!empty($server)){
+ $params = array();
+ $httpConfig['method'] = 'GET';
+ $httpConfig['target'] = $this->svn . '?_action=plugin.plugin_server_update_notifier';
+ $httpConfig['timeout'] = '30';
+ $httpConfig['params'] = $params;
+ $httpConfig['user_agent'] = 'MyRoundcube PHP/5.0';
+ $http = new MyRCHttp();
+ $http->initialize($httpConfig);
+ if(ini_get('safe_mode') || ini_get('open_basedir')){
+ $http->useCurl(false);
+ }
+ $http->execute();
+ $this->_log($httpConfig, $http);
+ if($http->error){
+ $response = false;
+ }
+ else{
+ $response = $http->result;
+ }
+ if($mirror = json_decode($response, true)){
+ if(is_array($mirror)){
+ $sql = 'SELECT value FROM ' . get_table_name('system') . ' WHERE name=?';
+ $res = $this->rcmail->db->limitquery($sql, 0, 1, 'myrc_plugin_manager_updates_hash');
+ $value = $this->rcmail->db->fetch_assoc($res);
+ if(is_array($value)){
+ $value = current($value);
+ }
+ else{
+ $value = '';
+ }
+ if($value != md5($response)){
+ $sql = 'DELETE FROM ' . get_table_name('system') . ' WHERE name=?';
+ $this->rcmail->db->query($sql, 'myrc_plugin_manager_updates_hash');
+ $sql = 'INSERT INTO ' . get_table_name('system') . '(name, value) VALUES (?, ?)';
+ $this->rcmail->db->query($sql, 'myrc_plugin_manager_updates_hash', md5($response));
+ $sql = 'DELETE FROM ' . get_table_name('system') . ' WHERE name=?';
+ $this->rcmail->db->query($sql, 'myrc_plugin_manager_updates_last');
+ $sql = 'INSERT INTO ' . get_table_name('system') . '(name, value) VALUES (?, ?)';
+ $this->rcmail->db->query($sql, 'myrc_plugin_manager_updates_last', date('Y-m-d H:i:s'));
+ foreach($server as $plugin => $null){
+ if(isset($mirror[$plugin])){
+ if(file_exists(INSTALL_PATH . 'plugins/' . $plugin . '/' . $plugin . '.php')){
+ $this->require_plugin($plugin);
+ if(class_exists($plugin) && method_exists($plugin, 'about')){
+ /* PHP 5.2.x workaround for $plugin::about() */
+ $class = new $plugin(false);
+ $props = $class->about('version', 'date');
+ if(version_compare($props['version'], $mirror[$plugin]['version'], '<')){
+ $updates[$plugin] = array('server' => $props['version'], 'mirror' => $mirror[$plugin]['version']);
+ }
+ }
+ }
+ }
+ }
+ }
+ $rows = html::tag('tr', null, html::tag('th', array('align' => 'left', 'style' => 'border: 1px solid grey'), 'Plugin') . html::tag('th', array('align' => 'right', 'style' => 'border: 1px solid grey'), 'Locale Version') . html::tag('th', array('align' => 'right', 'style' => 'border: 1px solid grey'), 'Remote Version') . html::tag('th', array('align' => 'right', 'style' => 'border: 1px solid grey'), '&nbsp;'));
+ if(!empty($updates)){
+ foreach($updates as $plugin => $props){
+ $rows .= html::tag('tr', null, html::tag('td', array('style' => 'border: 1px solid grey'), $plugin) . html::tag('td', array('align' => 'right', 'style' => 'border: 1px solid grey'), $props['server']) . html::tag('td', array('align' => 'right', 'style' => 'border: 1px solid grey'), $props['mirror']) . html::tag('td', array('align' => 'right', 'style' => 'border: 1px solid grey'), html::tag('a', array('href' => 'https://myroundcube.com/myroundcube-plugins/show-changelog?_plugin=' . $plugin), 'CHANGELOG')));
+ }
+ $table = html::tag('table', array('cellpadding' => 4, 'cellspacing' => 0, 'style' => 'border: 1px solid grey'), $rows);
+ $body = 'Hello,<br /><br />There are plugins updates available for your Roundcube installation at <i>' . $this->gethost() . '</i>, <i>' . INSTALL_PATH . '</i>:<br /><br />' . $table . '<br /><br />Greetings,<br />MyRoundcube Support<br />(c) ';
+ $body .= html::tag('a', array('href' => 'http://myroundcube.com'), 'MyRoundcube.com') . ' 2012-' . date('Y') . '<br /><br />';
+ $body .= html::tag('div', array('style' => 'text-align:justify;'), 'You are receiving this email notification from Plugin Manager. If you no longer wish to receive updates notifications, please disable the <i>Update Notifications</i> option in your Roundcube installation <i>(Settings&nbsp;&raquo;&nbsp;Manage&nbsp;Plugins&nbsp;&raquo;&nbsp;Settings)</i>.');
+ $body = html::tag('div', array('style' => 'width: 580px'), $body);
+ $sql = 'SELECT value FROM ' . get_table_name('plugin_manager') . ' WHERE conf=?';
+ $res = $this->rcmail->db->limitquery($sql, 0, 1, 'admins');
+ $admins = $this->rcmail->db->fetch_assoc($res);
+ if(is_array($admins)){
+ $admins = unserialize(current($admins));
+ if(is_array($admins)){
+ $subject = 'MyRoundcube Plugins Updates available';
+ $cc = $this->rcmail->config->get('plugin_manager_update_notifications_cc');
+ /*
+ $from = rcube_user::user2email($this->rcmail->user->data['username'], false, true);
+ if(!$from){
+ $from = $this->rcmail->user->data['username'];
+ }
+ */
+ foreach($admins as $admin){
+ $to = rcube_user::user2email($admin, false, true);
+ if(!$to){
+ $to = $admin;
+ }
+ $this->sendmail($to, $to, false, $subject, $body);
+ }
+ if($cc){
+ $this->sendmail($to, false, $cc, $subject, $body);
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ function plugins_installed($plugins){
+ unset($plugins['abort']);
+ $conf = $this->defaults;
+ foreach($conf as $section){
+ foreach($section as $plugin => $props){
+ if($props['protected']){
+ if($props['active']){
+ $plugins[] = $plugin;
+ }
+ }
+ else{
+ $plugins[] = $plugin;
+ }
+ }
+ }
+ if(file_exists(INSTALL_PATH . 'plugins/calendar_plus/calendar_plus.php') && in_array('calendar', $plugins)){
+ $plugins = array_merge($plugins, array('calendar_plus'));
+ }
+ $plugs = $plugins;
+ foreach($plugins as $key => $plugin){
+ $this->require_plugin($plugin);
+ if(method_exists($plugin, 'about')){
+ /* PHP 5.2.x workaround for $plugin::about() */
+ $class = new $plugin(false);
+ $about = $class->about();
+ $requirements = (array) $about['requirements'];
+ foreach($requirements as $requirement => $props){
+ if($requirement == 'required_plugins'){
+ foreach($props as $plugin => $method){
+ if($method['method'] == 'require_plugin'){
+ $plugs[] = $plugin;
+ }
+ }
+ }
+ }
+ }
+ }
+ return $plugs;
+ }
+
+ function build_defaults(){
+ if($_SESSION['plugin_manager_defaults'] && !isset($_SESSION['plugin_manager_admins'][strtolower($this->rcmail->user->data['username'])])){
+ $this->defaults = $_SESSION['plugin_manager_defaults'];
+ $this->unauth = $_SESSION['plugin_manager_unauth'];
+ return;
+ }
+ include INSTALL_PATH . 'plugins/plugin_manager/defaults.inc.php';
+ $defaults = $config['plugin_manager_defaults'];
+ $sql = 'SELECT * FROM ' . get_table_name('plugin_manager') . ' WHERE ' . $this->q('conf') . '=?';
+ $res = $this->rcmail->db->limitquery($sql, 0, 1, 'defaults_overwrite');
+ $overwrite = $this->rcmail->db->fetch_assoc($res);
+ if(is_array($overwrite)){
+ if($overwrite = unserialize($overwrite['value'])){
+ $depricate = false;
+ foreach($overwrite as $section => $plugins){
+ foreach($plugins as $plugin => $props){
+ if(isset($defaults[$section][$plugin]['deprecated'])){
+ if(RCMAIL_VERSION > $defaults[$section][$plugin]['deprecated']){
+ unset($overwrite[$section][$plugin]);
+ $deprecate = true;
+ }
+ }
+ foreach($props as $prop => $value){
+ $defaults[$section][$plugin][$prop] = $value;
+ }
+ }
+ }
+ if($deprecate){
+ $sql = 'UPDATE ' . get_table_name('plugin_manager') . ' SET ' . $this->q('value') . '=? WHERE ' . $this->q('conf') . '=?';
+ $this->rcmail->db->query($sql, serialize($overwrite), 'defaults_overwrite');
+ }
+ }
+ }
+ foreach($defaults as $section => $plugins){
+ foreach($plugins as $plugin => $props){
+ if(!file_exists(INSTALL_PATH . 'plugins/' . $plugin . '/' . $plugin . '.php')){
+ unset($defaults[$section][$plugin]);
+ }
+ else if(substr($plugin, 0, strlen('hmail_')) == 'hmail_' && !$this->use_hmail){
+ unset($defaults[$section][$plugin]);
+ }
+ else{
+ if(isset($config['plugin_manager_unauth'][$plugin])){
+ $this->unauth[$plugin] = true;
+ }
+ }
+ }
+ }
+ $sql = 'SELECT ' . $this->q('value') . ' FROM ' . get_table_name('plugin_manager') . ' WHERE ' . $this->q('conf') . '=?';
+ $res = $this->rcmail->db->limitquery($sql, 0, 1, 'defaults');
+ $overwrite = $this->rcmail->db->fetch_assoc($res);
+ if(is_array($overwrite)){
+ if($overwrite = unserialize($overwrite['value'])){
+ foreach($overwrite as $section => $plugins){
+ foreach($plugins as $plugin => $props){
+ foreach($props as $prop => $value){
+ if(isset($defaults[$section][$plugin])){
+ $true = true;
+ if(is_bool($defaults[$section][$plugin][$prop])){
+ $defaults[$section][$plugin][$prop] = $value ? true : false;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ foreach($defaults as $section => $plugins){
+ foreach($plugins as $plugin => $props){
+ if(isset($defaults[$section][$plugin]['deprecated'])){
+ if(RCMAIL_VERSION > $defaults[$section][$plugin]['deprecated']){
+ unset($defaults[$section][$plugin]);
+ }
+ }
+ }
+ }
+ $this->defaults = $defaults;
+ $_SESSION['plugin_manager_defaults'] = $defaults;
+ $_SESSION['plugin_manager_unauth'] = $this->unauth;
+ $this->thirdparty = $config['plugin_manager_third_party_plugins'];
+ }
+
+ function sqlerror($p){
+ return $this->out;
+ }
+
+ function authenticate($p){
+ $rcmail = rcmail::get_instance();
+ $this->add_texts('localization/');
+ $hash = $this->rcmail->config->get('plugin_manager_hash');
+ $out = html::tag('div', array('style' => 'font-size: 12px; text-align: justify; position: absolute; margin-left: auto; left: 50%; margin-left: -225px; width: 450px;'),
+ html::tag('h3', null, $this->gettext('welcome_to_plugin_manager')) .
+ $this->gettext('about_to_create_account') . ' ' .
+ $this->gettext('create_account_proceed') . ' ' .
+ $this->gettext('please_create') . html::tag('br') . html::tag('br') .
+ html::tag('b', null, html::tag('center', null, $hash . '.myrc')) . html::tag('br') . html::tag('br') .
+ html::tag('div', array('style' => 'display: block; float: left;'), $this->gettext('thank_you')) .
+ html::tag('div', array('style' => 'display: block; float: right;'), html::tag('a', array('href' => './?_task=settings'), $this->gettext('done'))) . html::tag('br') .
+ html::tag('hr') .
+ html::tag('div', array('style' => 'font-size: 10px;'), '&copy;&nbsp;2012 - ' . date('Y') . '&nbsp;MyRoundcube.com. All rights reserved.')
+ );
+ $this->rcmail->output->add_script('$(".button-settings").attr("onclick", "document.location.href=\'./?_task=settings\'")', 'docready');
+ return $out;
+ }
+
+ function login_after($args){
+ $active = $this->rcmail->config->get('plugin_manager_active', array());
+ if(!$active){
+ $this->build_defaults();
+ foreach($this->defaults as $section => $plugins){
+ foreach($plugins as $plugin => $props){
+ if($props['active']){
+ $active[$plugin] = 1;
+ }
+ else{
+ $active[$plugin] = 0;
+ }
+ }
+ }
+ $this->rcmail->user->save_prefs(array('plugin_manager_active' => $active));
+ }
+ return $args;
+ }
+
+ function render_page($p){
+ $this->template = $p['template'];
+ if($this->template == 'settings'){
+ if($next = get_input_value('_next', RCUBE_INPUT_GET)){
+ $this->rcmail->output->add_script('window.setTimeout(\'$("#rcmrow' . $next . '").trigger("mousedown").trigger("mouseup")\', 500);', 'docready');
+ }
+ }
+ else if($this->template == 'mail'){
+ if($this->rcmail->config->get('plugin_manager_update_notifications')){
+ if(!isset($_SESSION['plugin_manager_update_notifier'])){
+ $sql = 'SELECT value FROM ' . get_table_name('system') . ' WHERE name=?';
+ $res = $this->rcmail->db->limitquery($sql, 0, 1, 'myrc_plugin_manager_updates_last');
+ $last = $this->rcmail->db->fetch_assoc($res);
+ if(is_array($last)){
+ $last = strtotime(current($last));
+ }
+ else{
+ $last = 0;
+ }
+ if($last + 86400 < time()){
+ $this->rcmail->output->add_script("rcmail.http_request('plugin.plugin_manager_update_notifier');", 'docready');
+ }
+ }
+ }
+ }
+ if(!get_input_value('_framed', RCUBE_INPUT_GET)){
+ if($this->maintenance_mode){
+ $this->rcmail->output->show_message($this->gettext('running_in_maintenance_mode'), 'warning');
+ }
+ if(!$this->rcmail->config->get('plugin_manager_about_link', true)){
+ $this->rcmail->output->add_script('$(".about-link").hide();', 'foot');
+ }
+ if(!$this->rcmail->config->get('plugin_manager_support_link', true)){
+ if($this->rcmail->action != 'jappix.loadmini'){
+ $this->rcmail->output->add_script('$(".support-link").hide();', 'docready');
+ }
+ }
+ if($section = get_input_value('_plugin_manager_settings_section', RCUBE_INPUT_GET)){
+ $this->rcmail->output->set_env('section', $section);
+ $src = './?_task=settings&_action=edit-prefs&_section=plugin_manager_settings&_framed=1&_expand=' . get_input_value('_expand', RCUBE_INPUT_GET);
+ if($this->rcmail->config->get('skin', 'classic') != 'classic'){
+ $this->rcmail->output->add_script("$('#rcmrowplugin_manager_settings').addClass('selected focused'); $('#preferences-frame').attr('src', '" . $src . "');", 'docready');
+ }
+ else{
+ $this->rcmail->output->add_script("$('#rcmrowplugin_manager_settings').addClass('selected focused'); $('#prefs-frame').attr('src', '" . $src . "');", 'docready');
+ }
+ }
+ if(!class_exists('tabbed')){
+ $this->rcmail->output->add_script('window.setTimeout("$(\'.myrcmessage\').hide(\'slow\');", ' . $this->delay . ');', 'docready');
+ }
+ else{
+ $this->rcmail->output->set_env('pm_message_delay', $this->delay);
+ }
+ if($this->rcmail->config->get('plugin_manager_myroundcube_watermark', true) || $this->rcmail->config->get('plugin_manager_remove_watermark', false)){
+ if(strtolower($this->rcmail->user->data['username']) != $this->rcmail->config->get('mysql_admin') || !class_exists('mysqladmin')){
+ $repl = 'myroundcube.html';
+ if($this->rcmail->config->get('plugin_manager_remove_watermark', false)){
+ $repl = 'blank.html';
+ }
+ switch($p['template']){
+ case 'settings':
+ case 'addressbook':
+ case 'identities':
+ case 'folders':
+ case 'mail':
+ $p['content'] = str_replace('skins/' . $this->rcmail->config->get('skin', 'classic') . '/watermark.html', 'plugins/plugin_manager/skins/' . $this->rcmail->config->get('skin', 'classic') . '/' . $repl, $p['content']);
+ $this->rcmail->output->set_env('blankpage', 'plugins/plugin_manager/skins/' . $this->rcmail->config->get('skin', 'classic') . '/' . $repl);
+ }
+ }
+ }
+ }
+ return $p;
+ }
+
+ function send_page($p){
+ if($this->compress_html){
+ $p = $this->html_compress($p);
+ }
+ else{
+ $temp = explode('.', $this->template);
+ $plugin = $temp[0];
+ if(count($temp == 2)){
+ if(class_exists($plugin) && method_exists($plugin, 'about')){
+ /* PHP 5.2.x workaround for $plugin::about() */
+ $class = new $plugin(false);
+ $about = $class->about(array('version', 'date'));
+ if($temp[0] && $temp[1]){
+ $comment = '<!-- Plugin: ' . $temp[0] . ', Version: ' . $about['version'] . ' - ' . date('Y-m-d', strtotime($about['date'])) . ', Template: ' . $temp[1] . '.html -->';
+ $temp = explode('<head', $p['content'], 2);
+ $p['content'] = $temp[0] . $comment . "\r\n<head" . $temp[1];
+ }
+ }
+ }
+ }
+ return $p;
+ }
+
+ function navigation(){
+ if($section = get_input_value('_section', RCUBE_INPUT_GPC)){
+ $this->rcmail->output->add_script("$(document).ready(function(){ rcmail.addEventListener('init', function(){ rcmail.sections_list.select('" . $section . "') }); })", 'foot');
+ }
+ }
+
+ function merge_config(){
+ $this->config = $this->defaults;
+ if($this->rcmail->user->ID && $this->rcmail->task != 'logout'){
+ $active = $this->rcmail->config->get('plugin_manager_active', array());
+ }
+ else{
+ $active = $this->unauth;
+ }
+ foreach($this->config as $sections => $section){
+ foreach($section as $plugin => $props){
+ if(in_array($plugin, $this->plugins)){
+ $branch = $this->mirror;
+ if(RCMAIL_VERSION > '0.7')
+ $branch = $this->svn;
+ $error = html::tag('h3', array('align' => 'center'), 'ERROR<hr />- Plugin Manager Center -<br />Branch: ' . $branch . '<br />(Roundcube v' . RCMAIL_VERSION . ')<hr />') .
+ html::tag('p', null, 'Misconfiguration: Unregister <b>' . $plugin . '</b> in ./config/main.inc.php.') .
+ html::tag('p', null, 'You can\'t register a plugin in main.inc.php which is configured to be loaded by Plugin Manager.<hr /><center>[<a href="javascript:void(0)" onclick="document.location.reload()">Done</a>]</center>');
+ $this->out = $error;
+ $this->register_handler('plugin.body', array($this, 'sqlerror'));
+ $this->rcmail->output->send('plugin_manager.error');
+ }
+ if(isset($active[$plugin])){
+ $overwrite = $active[$plugin];
+ }
+ else{
+ $overwrite = $props['active'];
+ }
+ if($props['protected']){
+ $overwrite = $props['active'];
+ if(is_array($props['protected'])){
+ foreach($props['protected'] as $domain){
+ if($domain == $this->domain){
+ $overwrite = $props['active'];
+ break;
+ }
+ else{
+ $overwrite = $active[$plugin];
+ }
+ }
+ }
+ else if(is_string($props['protected'])){
+ $overwrite = $this->rcmail->config->get($props['protected']);
+ }
+ }
+ $this->config[$sections][$plugin]['active'] = $overwrite;
+ }
+ }
+ }
+
+ function google_contacts_uninstall(){
+ if($this->rcmail->user->ID){
+ $db_table = get_table_name('google_contacts');
+ $query = "DELETE FROM $db_table WHERE user_id=?";
+ $this->rcmail->db->query($query, $this->rcmail->user->ID);
+ }
+ }
+
+ function automatic_addressbook_uninstall(){
+ if($this->rcmail->user->ID){
+ $db_table = get_table_name('collected_contacts');
+ $query = "DELETE FROM $db_table WHERE user_id=?";
+ $this->rcmail->db->query($query, $this->rcmail->user->ID);
+ }
+ }
+
+ function uninstall(){
+ $uninstall = get_input_value('_uninstall', RCUBE_INPUT_POST);
+ $config = unserialize($this->rcmail->user->data['preferences']);
+ $response = '';
+ foreach($this->config as $sections => $section){
+ foreach($section as $plugin => $props){
+ if($plugin == $uninstall){
+ if($props['uninstall_request']){
+ if(is_array($props['uninstall_request'])){
+ if(strtolower($props['uninstall_request']['method']) == 'post'){
+ $response = 'rcmail.http_post(';
+ }
+ else{
+ $response = 'rcmail.http_request(';
+ }
+ $params = '';
+ if($props['uninstall_request']['params'])
+ $params = $props['uninstall_request']['params'];
+ $response .= '"' . $props['uninstall_request']['action'] . '", "' . $params .'");';
+ }
+ }
+ if(is_array($props['uninstall'])){
+ foreach($props['uninstall'] as $prop){
+ if(is_string($prop)){
+ unset($config[$prop]);
+ }
+ }
+ }
+ else if($props['uninstall'] === true){
+ if(method_exists($plugin, 'about')){
+ /* PHP 5.2.x workaround for $plugin::about() */
+ $class = new $plugin(false);
+ $about = $class->about();
+ if(is_array($about['config'])){
+ foreach($about['config'] as $prop => $val){
+ if(is_string($prop)){
+ unset($config[$prop]);
+ }
+ }
+ }
+ }
+ }
+ $a_user_prefs = $config;
+ $config = serialize($config);
+ $this->rcmail->db->query(
+ "UPDATE ".get_table_name('users').
+ " SET preferences = ?".
+ ", language = ?".
+ " WHERE user_id = ?",
+ $config,
+ $_SESSION['language'],
+ $this->rcmail->user->ID
+ );
+ if($this->rcmail->db->affected_rows() !== false){
+ $this->rcmail->config->set_user_prefs($a_user_prefs);
+ $this->rcmail->data['preferences'] = $config;
+ if(isset($_SESSION['preferences'])){
+ $this->rcmail->session->remove('preferences');
+ $this->rcmail->session->remove('preferences_time');
+ }
+ }
+ break;
+ }
+ }
+ }
+ $this->rcmail->output->command('plugin.plugin_manager_success', $response);
+ }
+
+ function transfer(){
+ $this->register_handler('plugin.body', array($this, 'transfer_html'));
+ $user = $_SESSION['username'];
+ $admins = $this->admins;
+ if(isset($admins[strtolower($user)]) || strtolower($this->get_demo($_SESSION['username'])) == strtolower(sprintf($this->rcmail->config->get('demo_user_account'),""))){
+ $this->rcmail->output->send('plugin_manager.transfer');
+ }
+ }
+
+ function transfer_html(){
+ $customer_id = $this->rcmail->config->get('customer_id');
+ if(isset($_POST['_from']) && isset($_POST['_to']) && isset($_POST['_amount'])){
+ $dest = get_input_value('_to', RCUBE_INPUT_POST);
+ $amount = get_input_value('_amount', RCUBE_INPUT_POST);
+ $alphanum = 'a-z0-9';
+ $alpha = '0-9';
+ if(strlen($dest) < 32){
+ $this->rcmail->output->show_message($this->gettext('invalid_customer_id'), 'error');
+ }
+ else if(strlen($dest) != preg_replace("/[^$alphanum]/i", '', strlen($dest))){
+ $this->rcmail->output->show_message($this->gettext('invalid_customer_id'), 'error');
+ }
+ else if(strlen($amount) != preg_replace("/[^$alpha]/", '', strlen($amount))){
+ $this->rcmail->output->show_message($this->gettext('invalid_credits'), 'error');
+ }
+ else{
+ $httpConfig['method'] = 'POST';
+ $httpConfig['target'] = $this->svn . '?_action=plugin.plugin_server_transfer';
+ $httpConfig['timeout'] = '30';
+ $httpConfig['params'] = array('_customer_id' => $customer_id, '_to' => $dest, '_amount' => $amount, '_ip' => $this->getVisitorIP());
+ $httpConfig['user_agent'] = 'MyRoundcube PHP/5.0';
+ $http = new MyRCHttp();
+ $http->initialize($httpConfig);
+ if(ini_get('safe_mode') || ini_get('open_basedir')){
+ $http->useCurl(false);
+ }
+ $http->execute();
+ if($http->error){
+ $this->rcmail->output->show_message($this->gettext('errorsaving'), 'error');
+ }
+ $response = $http->result;
+ if($response == 'ok'){
+ $this->rcmail->output->show_message($this->gettext('successfully_transferred'), 'confirmation');
+ }
+ else{
+ $this->rcmail->output->show_message($this->gettext('errorsaving'), 'error');
+ }
+ }
+ }
+ $credits = $this->getcredits(false);
+ $row = html::tag('td', array('class' => 'title'), $this->gettext('from') . ':') . html::tag('td', null, html::tag('td', null, html::tag('input', array('name' => '_from', 'size' => 32, 'readonly' => 'readonly', 'value' => $customer_id)) . html::tag('td', array('class' => 'title'), '(' . $this->gettext('customer_id') . ')')));
+ $rows = html::tag('tr', null, $row);
+ $row = html::tag('td', array('class' => 'title'), $this->gettext('to') . ':') . html::tag('td', null, html::tag('td', null, html::tag('input', array('name' => '_to', 'size' => 32, 'value' => $dest ? $dest : '')) . html::tag('td', array('class' => 'title'), '(' . $this->gettext('customer_id') . ')')));
+ $rows .= html::tag('tr', null, $row);
+ $row = html::tag('td', array('class' => 'title'), 'MyRC$:') . html::tag('td', null, html::tag('td', null, html::tag('input', array('name' => '_amount', 'size' => 3, 'value' => $credits)) . html::tag('td', array('class' => 'title'), '(' . 'MyRC$&nbsp;' . html::tag('span', array('id' =>'cdl'), $credits) . '&nbsp;' . $this->gettext('credits') . ')')));
+ $rows .= html::tag('tr', null, $row);
+ $content = html::tag('table', null, $rows);
+ $content .= html::tag('br') . html::tag('input', array('type' => 'submit', 'value' => $this->gettext('transfer'), 'class' => 'button mainaction'));
+ $content .= '&nbsp;' . html::tag('input', array('type' => 'button', 'value' => $this->gettext('cancel'), 'class' => 'button', 'onclick' => 'document.location.href="./?_task=settings&_action=edit-prefs&_section=plugin_manager_customer&_framed=1"'));
+ $fieldset = html::tag('fieldset', null, html::tag('legend', null, $this->gettext('transfer')) . $content);
+ $out = html::tag('form', array('action' => './?_task=settings&_action=plugin.plugin_manager_transfer&_framed=1', 'method' => 'post'), $fieldset);
+ return $out;
+ }
+
+ function update(){
+ $user = $_SESSION['username'];
+ $admins = $this->admins;
+ if(isset($admins[strtolower($user)]) || strtolower($this->get_demo($_SESSION['username'])) == strtolower(sprintf($this->rcmail->config->get('demo_user_account'),""))){
+ $this->register_handler('plugin.body', array($this, 'update_html'));
+ $this->rcmail->output->add_script('pm_resize();', 'docready');
+ $this->rcmail->output->send('plugin');
+ }
+ }
+
+ function update_html(){
+ $hl = get_input_value('_hl', RCUBE_INPUT_GET);
+ $branch = get_input_value('_branch', RCUBE_INPUT_GET);
+ if(strtolower($this->get_demo($_SESSION['username'])) == strtolower(sprintf($this->rcmail->config->get('demo_user_account'),""))){
+ if(RCMAIL_VERSION > $this->stable){
+ $branch = 'dev';
+ }
+ }
+ if($branch == 'dev'){
+ $this->mirror = $this->svn;
+ }
+ else if($branch == 'beta'){
+ $this->mirror = $this->beta;
+ }
+ if($hl && $hl != $_SESSION['language']){
+ $this->rcmail->load_language($hl);
+ $this->add_texts('localization', false);
+ }
+ $this->include_script('plugin_manager_update.js');
+ $this->rcmail->output->add_label(
+ 'plugin_manager.noupdates',
+ 'plugin_manager.showall',
+ 'plugin_manager.hideuptodate'
+ );
+ $skin = $this->rcmail->config->get('skin');
+ if(!file_exists($this->home . '/skins/' . $skin . '/plugin_manager.css')) {
+ $skin = "larry";
+ }
+ $this->include_stylesheet('skins/' . $skin . '/plugin_manager.css');
+ $plugins = array_flip($this->rcmail->config->get('plugins', array()));
+ $dtp = $this->thirdparty;
+ $sections = $this->defaults;
+ foreach($sections as $section => $plugs){
+ foreach($plugs as $plug => $props){
+ $plugins[$plug] = $props;
+ }
+ }
+ $scope = array();
+ foreach($plugins as $plugin => $props){
+ if(!class_exists($plugin)){
+ $this->require_plugin($plugin);
+ }
+ if(method_exists($plugin, 'about')){
+ /* PHP 5.2.x workaround for $plugin::about() */
+ $class = new $plugin(false);
+ $p = $class->about();
+ $p_sav = $p;
+ //$p = $plugin::about();
+ $scope[$plugin] = array('version' => $p['version'], 'date'=> $p ['date']);
+ if(is_array($p['requirements']['required_plugins'])){
+ foreach($p['requirements']['required_plugins'] as $required => $val){
+ $this->require_plugin($required);
+ $p = $val['plugin'];
+ if(method_exists($required, 'about')){
+ /* PHP 5.2.x workaround for $plugin::about() */
+ $class = new $required(false);
+ $p = $class->about();
+ }
+ if(is_array($p)){
+ $scope[$required] = array('version'=>$p['version'], 'date'=>$p['date']);
+ }
+ else{
+ if($dtp[$required]){
+ $scope[$required] = $dtp[$plugin];
+ }
+ else{
+ $scope[$required] = 'unknown';
+ }
+ }
+ }
+ }
+ $p = $p_sav;
+ if(is_array($p['requirements']['recommended_plugins'])){
+ foreach($p['requirements']['recommended_plugins'] as $recommended => $val){
+ if(file_exists(INSTALL_PATH . 'plugins/' . $recommended . '/' . $recommended . '.php')){
+ $this->require_plugin($recommended);
+ $p = $val['plugin'];
+ if(method_exists($recommended, 'about')){
+ /* PHP 5.2.x workaround for $plugin::about() */
+ $class = new $recommended(false);
+ $p = $class->about();
+ }
+ if(is_array($p)){
+ $scope[$recommended] = array('version'=>$p['version'], 'date'=>$p['date']);
+ }
+ else{
+ if($dtp[$recommended]){
+ $scope[$recommended] = $dtp[$plugin];
+ }
+ else{
+ $scope[$recommended] = 'unknown';
+ }
+ }
+ }
+ }
+ }
+ }
+ else{
+ if($dtp[$plugin]){
+ $scope[$plugin] = $dtp[$plugin];
+ }
+ else{
+ $scope[$plugin] = 'unknown';
+ }
+ }
+ }
+ $user = $_SESSION['username'];
+ $temparr = explode('@', $user);
+ if(count($temparr) == 1){
+ $host = $this->rcmail->user->data['mail_host'];
+ if($host == 'localhost'){
+ $host = $_SERVER['HTTP_HOST'];
+ }
+ $user = $user . '@' . $host;
+ }
+ if(get_input_value('_warning', RCUBE_INPUT_GET)){
+ if(MYRC_BRANCH == 'beta'){
+ $betachecked = 'checked';
+ $devchecked = '';
+ $stablechecked = '';
+ $host = $this->beta;
+ }
+ else if(MYRC_BRANCH == 'stable'){
+ $betachecked = '';
+ $devchecked = 'checked';
+ $stablechecked = '';
+ $host = $this->svn;
+ }
+ else{
+ $betachecked = '';
+ $devchecked = '';
+ $stablechecked = 'checked';
+ $host = $this->mirror;
+ }
+ $warning = html::tag('h3', null, 'We respect your privacy!') . html::tag('div', array('style' => 'text-align:justify'), 'If you proceed the following data will be submitted to our mirror servers and saved in our databases. While we consider this data as a whole not to be an invasion to your privacy, you may want to share a different email address with us. See ' . html::tag('a', array('target' => '_blank', 'href' => 'https://myroundcube.com/myroundcube-plugins/plugin-manager/administration#plugin-manager-administrators'), 'here') . ' how to add an additional administrative account to use a different email address.');
+ $form = html::tag('ul', null,
+ html::tag('li', null, '_admin: ' . $user) .
+ html::tag('li', null, '_hl: ' . $_SESSION['language']) .
+ html::tag('li', null, '_customer_id: ' . $this->rcmail->config->get('customer_id')) .
+ html::tag('li', null, '_plugins:')
+ );
+ $EMAIL_PATTERN = '([a-z0-9][a-z0-9\-\.\+\_]*@[^&@"\'.][^@&"\']*\\.([^\\x00-\\x40\\x5b-\\x60\\x7b-\\x7f]{2,}|xn--[a-z0-9]{2,}))';
+ $display = 'none';
+ if(preg_match('/' . $EMAIL_PATTERN . '/i', $user)){
+ $display = 'block';
+ }
+ $out = '<br />' . html::tag('div',
+ array('style' => 'opacity: 0.85;text-align: center; margin-left: auto; margin-left: auto; margin-right: auto; width: 600px; padding: 15px; background-color: #F7FDCB; border: 1px solid #C2D071;'),
+ $warning . html::tag('div', array('style' => "display:$display"),
+ html::tag('div', array('style' => 'text-align: right; margin-right: 80px;'),
+ //html::tag('span', null, 'Yes, please send me MyRoundcube Newsletters') . '&nbsp;' . html::tag('input', array('type' => 'checkbox', 'name' => '_newsletter', 'id' => 'newsletter', 'value' => 1)) . html::tag('br') .
+ html::tag('br') . html::tag('div', array('style' => 'display:inline;margin-right:22px'), 'Don\'t miss out ' . html::tag('a', array('href' => 'https://forum.myroundcube.com/index.php?app=core&module=global&section=register', 'target' => '_blank'), 'on joining') . ' at MyRoundcube\'s community forum.') . html::tag('br') .
+ ($this->svn ? ('<br />' . html::tag('span', null, 'Download <b>stable versions</b> of plugins for Roundcube <b>' . $this->dev) . '</b>&nbsp;' . html::tag('input', array('class' => 'branch', 'onclick' =>'$("#mirrorhost").html("' . $this->svn . '")', 'type' => 'radio', 'checked' => $devchecked, 'name' => '_branch', 'id' => 'devbranch', 'value' => 'dev'))) : '') .
+ ($this->beta ? ('<br />' . html::tag('span', null, 'Download <b>beta versions</b> of plugins for Roundcube <b>' . $this->dev_beta) . '</b>&nbsp;(developement in progress)&nbsp;' . html::tag('input', array('class' => 'branch', 'onclick' =>'$("#mirrorhost").html("' . $this->beta . '")', 'type' => 'radio', 'checked' => $betachecked, 'name' => '_branch', 'id' => 'betabranch', 'value' => 'beta'))) : '').
+ ($this->mirror ? ('<br />' . html::tag('span', null, 'Download <b>stable plugins</b> for Roundcube <b>' . $this->stable) . '</b>&nbsp;(developemnet frozen)&nbsp;' . html::tag('input', array('class' => 'branch', 'onclick' =>'$("#mirrorhost").html("' . $this->mirror . '")', 'type' => 'radio', 'checked' => $stablechecked, 'name' => '_branch', 'id' => 'stablebranch', 'value' => 'stable'))) : '')
+ ) .
+ html::tag('div', array('style' => 'display:none;', 'id' => 'newletterdetails'), '<br />' . html::tag('span', null, 'First Name:&nbsp;') . html::tag('input', array('type' => 'text', 'name' => '_firstname', 'id' => 'firstname', 'maxlength' => 30)) . '<br /><br />' .
+ html::tag('span', null, 'Last Name:&nbsp;') . html::tag('input', array('type' => 'text', 'name' => '_lastnamename', 'id' => 'lastname', 'maxlength' => 30)))) .
+ '<br /><br />' . html::tag('a', array('href' => './?_task=settings&_framed=1&_action=plugin.plugin_manager_update', 'onclick' => 'return backup(this);', 'target' => '_self'), 'I agree') . '&nbsp;|&nbsp;' .
+ html::tag('a', array('href' => '#', 'onclick' => 'document.location.href="plugins/plugin_manager/skins/larry/myroundcube.html";parent.$("#rcmrowplugin_manager_update").remove()'), "I disagree")
+ );
+ $out .= html::tag('div', array('style' => 'margin-left: auto; margin-right: auto; width: 600px; padding: 15px;'), $form);
+ ksort($scope);
+ $out .= html::tag('div', array('style' => 'margin-left: auto; margin-right: auto; width: 900px;'), html::tag('center', null, html::tag('textarea', array('cols' => 90, 'rows' => 20, 'disabled' => true), print_r($scope, true))));
+ $this->rcmail->output->add_script('$(document).ready(function(){$("#tabsbar").hide()});');
+ return $out;
+ }
+ if(get_input_value('_newsletter', RCUBE_INPUT_GET) == 1 && strtolower($this->get_demo($_SESSION['username'])) != strtolower(sprintf($this->rcmail->config->get('demo_user_account'),""))){
+ $params = array('_hl' => $_SESSION['language'], '_admin' => $user, '_plugins' => serialize($scope), '_newsletter' => get_input_value('_newsletter', RCUBE_INPUT_GET), '_firstname' => get_input_value('_firstname', RCUBE_INPUT_GET), '_lastname' => get_input_value('_lastname', RCUBE_INPUT_GET));
+ }
+ else{
+ $params = array('_hl' => $_SESSION['language'], '_admin' => $user, '_plugins' => serialize($scope));
+ }
+ $branch = get_input_value('_branch', RCUBE_INPUT_GET);
+ if($branch == 'dev'){
+ $host = $this->svn;
+ }
+ else if($branch == 'stable'){
+ $host = $this->mirror;
+ }
+ else{
+ $host = $this->beta;
+ }
+ $httpConfig['method'] = 'POST';
+ $httpConfig['target'] = $host . '?_action=plugin.plugin_server_mirror';
+ $httpConfig['timeout'] = '30';
+ $httpConfig['params'] = array_merge($params, array('_customer_id' => $this->rcmail->config->get('customer_id')));
+ $httpConfig['user_agent'] = 'MyRoundcube PHP/5.0';
+ $http = new MyRCHttp();
+ $http->initialize($httpConfig);
+ if(ini_get('safe_mode') || ini_get('open_basedir')){
+ $http->useCurl(false);
+ }
+ $http->execute();
+ $this->_log($httpConfig, $http);
+ if($http->error){
+ return html::tag('div',
+ array('style' => 'opacity: 0.85; text-align: center; margin-left: auto; margin-right: auto; width: 600px; padding: 8px 10px 8px 46px; background: url(./skins/classic/images/display/icons.png) 6px -97px no-repeat; background-color: #EF9398; border: 1px solid #DC5757;'),
+ $this->gettext('connectionerror') . '<br /><br />' . html::tag('a', array('href' => './?_task=settings&_framed=1&_action=plugin.plugin_manager_update', 'target' => '_self'), $this->gettext('trylater')));
+ }
+ $response = $http->result;
+ if(!$server = unserialize($response)){
+ return html::tag('div',
+ array('style' => 'opacity: 0.85; text-align: center; margin-left: auto; margin-right: auto; width: 600px; padding: 8px 10px 8px 46px; background: url(./skins/classic/images/display/icons.png) 6px -97px no-repeat; background-color: #EF9398; border: 1px solid #DC5757;'),
+ $this->gettext('connectionerror') . '<br /><br />' . html::tag('a', array('href' => './?_task=settings&_framed=1&_action=plugin.plugin_manager_update', 'target' => '_self'), $this->gettext('trylater')));
+ }
+ $mirror_rc = $server['roundcube'];
+ $mirror = $server['scope'];
+ if(!isset($mirror['Branch is currently closed'])){
+ $merge = array();
+ foreach($dtp as $plugin => $props){
+ if(!isset($mirror[$plugin])){
+ $merge[$plugin] = $dtp[$plugin];
+ }
+ }
+ ksort($merge);
+ $mirror = array_merge($mirror, $merge);
+ }
+ $temp = $mirror;
+ unset($mirror['plugin_manager']);
+ if(!isset($mirror['Branch is currently closed'])){
+ $ret = array();
+ $ret['Roundcube Core Patches'] = $this->core_patches;
+ $ret['plugin_manager'] = $temp['plugin_manager'];
+ foreach($mirror as $plugin => $props){
+ $ret[$plugin] = $mirror[$plugin];
+ }
+ $mirror = $ret;
+ }
+ $update = array();
+ if(is_array($mirror)){
+ foreach($mirror as $plugin => $props){
+ if(is_array($props)){
+ if($scope[$plugin] && $props['version']){
+ if($props['version'] > $scope[$plugin]['version']){
+ $update[$plugin] = $scope[$plugin];
+ if(is_array($update[$plugin])){
+ $update[$plugin]['notinstalled'] = false;
+ }
+ }
+ }
+ else{
+ $update[$plugin] = $props;
+ if(is_array($update[$plugin])){
+ $update[$plugin]['notinstalled'] = true;
+ }
+ }
+ }
+ else{
+ $update[$plugin] = $scope[$plugin];
+ if(is_array($update[$plugin])){
+ $update[$plugin]['notinstalled'] = false;
+ }
+ }
+ }
+ }
+ $checked = false;
+ foreach($update as $plugin => $props){
+ if(is_array($props)){
+ $checked = true;
+ break;
+ }
+ }
+ include './program/localization/index.inc';
+ $options = '';
+ ksort($rcube_languages);
+ foreach($rcube_languages as $abbr => $lang){
+ $options .= html::tag('option', array('title' => $lang, 'selected' => ($_SESSION['language'] == $abbr)?true:false, 'value' => $abbr), $abbr);
+ }
+ $select = html::tag('select', array('onchange' => 'document.location.href="./?_task=settings&_framed=1&_action=plugin.plugin_manager_update&_branch=dev&_hl=" + this.value'), $options);
+ $thead = html::tag('tr', null,
+ html::tag('th', array('width' => '220px'), $this->gettext('plugin')) .
+ html::tag('th', array('width' => '100px'), $this->gettext('mirrorversion')) .
+ html::tag('th', array('width' => '100px'), $this->gettext('serverversion')) .
+ html::tag('th', array('width' => '90px', 'title' => $this->gettext('language')), $select) .
+ html::tag('th', array('width' => '90px'), html::tag('a', array('href' => 'http://code.google.com/p/myroundcube/issues/list', 'target' => '_blank'), $this->gettext('issue'))) .
+ html::tag('th', array('width' => '30px', 'title' => $this->gettext('hideuptodate')), html::tag('input', array('type' => 'checkbox', 'id' => 'updatetoggle'))) .
+ html::tag('th', array('width' => '30px'), html::tag('input', array('id' => 'toggle', 'title' => $this->gettext('toggle'), 'type' => 'checkbox', 'checked' => $checked))) .
+ html::tag('th', null, $this->gettext('comments'))
+ );
+ $tbody1 = '';
+ $tbody2 = '';
+ $cdlcredits = $server['credits'];
+ $cdlprice = 0;
+ foreach($mirror as $plugin => $props){
+ if(in_array($plugin, $this->dontlist)){
+ continue;
+ }
+ if(substr($plugin, 0, 6) == 'hmail_'){
+ if(!$this->use_hmail){
+ continue;
+ }
+ }
+ $nr = false;
+ if(is_array($props) && $props['version']){
+ $stat = 'ok';
+ $comment = '';
+ $append = '';
+ if($update[$plugin]){
+ $stat = 'update';
+ }
+ if($props['lr']){
+ if(file_exists(INSTALL_PATH . 'plugins/' . $plugin . '/localization/revision.inc.php')){
+ $ps_localization_update = false;
+ $A = false;
+ include INSTALL_PATH . 'plugins/' . $plugin . '/localization/revision.inc.php';
+ if(!$ps_localization_update){
+ $ps_localization_update = $A;
+ }
+ if($ps_localization_update != $props['lr'] && $props['version'] == $scope[$plugin]['version']){
+ $stat = 'update';
+ $comment .= $this->gettext('languageupdate') . "<br /><font color='red'>" . $this->gettext('localizationfilesonly') . "</font>\r\n";
+ }
+ }
+ }
+ if($props['roundcube']){
+ if($props['roundcube'] > RCMAIL_VERSION){
+ $stat = 'error';
+ }
+ }
+ if($props['license']){
+ $license = $this->gettext('terms') . ": " . html::tag('a', array('href' => $this->svn . '?_action=plugin.plugin_server_license&_plugin=' . $plugin, 'target' => '_blank', 'title' => $this->gettext('view')), $props['license']);
+ }
+ else{
+ $license = false;
+ }
+ if($props['comments']){
+ $props['comments'] = $this->gettext('authors_comments') . ': ' . $this->comment2ul($props['comments']);
+ }
+ $comment .= nl2br($props['comments']);
+ $pmsv = $scope[$plugin]['version'];
+ $t = explode('-', $pmsv);
+ $pmsv = $t[0];
+ $pmcv = $props['version'];
+ $t = explode('-', $pmsc);
+ $pmsc = $t[0];
+ $tmsv = explode('.', $pmsv);
+ $tmcv = explode('.', $pmcv);
+ foreach($tmsv as $tmsvk => $tmsvp){
+ while(strlen($tmsvp) < $this->vlength){
+ $tmsvp = '0'. $tmsvp;
+ }
+ $tmsv[$tmsvk] = $tmsvp;
+ }
+ foreach($tmcv as $tmcvk => $tmcvp){
+ while(strlen($tmcvp) < $this->vlength){
+ $tmcvp = '0'. $tmcvp;
+ }
+ $tmcv[$tmcvk] = $tmcvp;
+ }
+ $s = implode('.', $tmsv);
+ $p = implode('.', $tmcv);
+ if($p < $s && is_numeric(substr($scope[$plugin]['version'], 0, 1))){
+ $stat = 'error';
+ $comment = $this->gettext('servernewer');
+ }
+ else if(!is_numeric(substr($scope[$plugin]['version'],0, 1))){
+ if(is_dir(INSTALL_PATH . 'plugins/' . $plugin) && $plugin != 'dblog' && $this->require_plugin($plugin)){
+ if(method_exists($plugin, 'about')){
+ /* PHP 5.2.x workaround for $plugin::about() */
+ $class = new $plugin(false);
+ $arr = $class->about(array('version', 'date'));
+ $scope[$plugin] = $arr;
+ $update[$plugin] = $scope[$plugin];
+ $update[$plugin]['notinstalled'] = false;
+ $pmsv = $scope[$plugin]['version'];
+ $t = explode('-', $pmsv);
+ $pmsv = $t[0];
+ $tmsv = explode('.', $pmsv);
+ foreach($tmsv as $tmsvk => $tmsvp){
+ while(strlen($tmsvp) < $this->vlength){
+ $tmsvp = '0'. $tmsvp;
+ }
+ $tmsv[$tmsvk] = $tmsvp;
+ }
+ $s = implode('.', $tmsv);
+ if($p == $s){
+ $nr = true;
+ }
+ else{
+ $nr = false;
+ }
+ if($p < $s && is_numeric(substr($scope[$plugin]['version'],0,1))){
+ $stat = 'error';
+ $comment = $this->gettext('servernewer');
+ }
+ }
+ else{
+ $scope[$plugin]['version'] = 'unknown';
+ }
+ }
+ else{
+ $scope[$plugin]['version'] = 'unknown';
+ }
+ if($comment != '' && $stat != 'error'){
+ $stat = 'edit';
+ }
+ else if($stat != 'error'){
+ $stat = 'update';
+ }
+ }
+ else if($p > $s && $comment != ''){
+ $stat = 'edit';
+ }
+ else if($p > $s){
+ $stat = 'update';
+ }
+ else if (is_array($update[$plugin]) && $stat != 'error'){
+ $comment = $this->gettext('justunzip') . '<br />' . html::tag('a', array('href' => $this->guide, 'target' => '_blank'), $this->gettext('guide'));;
+ }
+ $roundcube = '';
+ if($props['roundcube']){
+ $roundcube = 'Roundcube Version: ' . $props['roundcube'] . ' ' . $this->gettext('orhigher') . "\r\n";
+ }
+ $php = '';
+ if($props['PHP']){
+ $php = 'PHP: ' . $props['PHP'] . "\r\n";
+ $phpversion = phpversion();
+ $temparr = explode('-', $phpversion);
+ if($props['PHP'] >= $temparr[0]){
+ $stat = 'error';
+ }
+ }
+ $required_plugins = '';
+ if(is_array($props['requires'])){
+ $required_plugins = $this->gettext('requires') . ':<br />';
+ foreach($props['requires'] as $key => $val){
+ $method = '&sup2';
+ if($val['method'] && $val['method'] == 'require_plugin'){
+ $method = '&sup1';
+ }
+ $required_plugins .= '-&nbsp;'.html::tag('a', array('href' => '#' . $key, 'class' => 'anchorLink'), $key) . $method . '<br />';
+ }
+ $required_plugins = substr($required_plugins, 0, strlen($required_plugins) - 2) . "\r\n";
+ }
+ $recommended_plugins = '';
+ if(is_array($props['recommended'])){
+ $recommended_plugins = $this->gettext('recommended') . ':<br />';
+ foreach($props['recommended'] as $key => $val){
+ $recommended_plugins .= '-&nbsp;'.html::tag('a', array('href' => '#' . $key, 'class' => 'anchorLink'), $key) . '&sup2<br />';
+ }
+ $recommended_plugins = substr($recommended_plugins, 0, strlen($recommended_plugins) - 2) . "\r\n";
+ }
+ if(is_array($props['required'])){
+ $requiredby = '';
+ foreach($props['required'] as $key){
+ $requiredby .= '-&nbsp;'.html::tag('a', array('href' => '#' . $key, 'class' => 'anchorLink'), $key) . '<br />';
+ }
+ $requiredby = substr($requiredby, 0, strlen($requiredby) - 2) . "\r\n";
+ $comment = $this->gettext('requiredby') . ':<br />' . $requiredby . "\r\n" . $comment;
+ }
+ $temparr = explode("\r\n", $roundcube . $php . $required_plugins . $recommended_plugins . $comment);
+ $comments = '';
+ foreach($temparr as $r){
+ if($r)
+ $comments .= html::tag('li', null, $r);
+ }
+ if($comments != '' && $plugin != 'Roundcube Core Patches' && $plugin != 'Branch is currently closed'){
+ $changelog = html::tag('li', null, html::tag('a', array('href' => $this->svn . '?_action=plugin.plugin_server_changelog&_plugin=' . $plugin, 'target' => '_blank', 'title' => $this->gettext('view')), 'CHANGELOG'));
+ $comment = html::tag('ul', array('class' =>'pm_update'), ($license ? html::tag('li', null, $license) : '') . $changelog . $comments);
+ }
+ if($update[$plugin]['notinstalled']){
+ if(is_dir('./plugins/' . $plugin)){
+ $serverversion = html::tag('td', null, $this->gettext('notregistered'));
+ }
+ else{
+ if($plugin == 'Roundcube Core Patches'){
+ if($content = @file_get_contents(INSTALL_PATH . '.myrc.patch_version')){
+ $content = explode('|', trim($content));
+ $serverversion = html::tag('td', null, $content[0] . html::tag('br') . html::tag('small', null, '(' . date($this->rcmail->config->get('date_format', 'm-d-Y'), strtotime($content[1])) . ')'));
+ if($mirror[$plugin]['version'] . $mirror[$plugin]['date'] != $content[0] . $content[1]){
+ $stat = 'edit';
+ }
+ else{
+ $stat = 'ok';
+ }
+ }
+ else{
+ $serverversion = html::tag('td', null, $this->gettext('notinstalled'));
+ }
+ }
+ else if($plugin == 'Branch is currently closed'){
+ $stat = 'ok';
+ $serverversion = html::tag('td', null, '--');
+ }
+ else{
+ $serverversion = html::tag('td', null, $this->gettext('notinstalled'));
+ }
+ }
+ }
+ else{
+ $content = ($update[$plugin]?$update[$plugin]['version']:$scope[$plugin]['version']) . '<br />' . html::tag('small', null, '(' . ($update[$plugin] ? date($this->rcmail->config->get('date_format', 'm-d-Y'), strtotime($scope[$plugin]['date'])):date($this->rcmail->config->get('date_format', 'm-d-Y'), strtotime($scope[$plugin]['date']))) . ')');
+ if(substr($content, 0, 1) == 'u'){
+ $serverversion = html::tag('td', null, $this->gettext('unknown'));
+ }
+ else{
+ $serverversion = html::tag('td', null, $content);
+ }
+ }
+ $translation = html::tag('td', array('align' => 'center'), '--');
+ $user = $this->rcmail->config->get('plugin_manager_translation_account') ? $this->rcmail->config->get('plugin_manager_translation_account') : $_SESSION['username'];
+ if($mirror[$plugin]['lc'] !== false){
+ $host = $_SESSION['storage_host'];
+ if($host == 'localhost')
+ $host = $_SERVER['SERVER_ADDR'];
+ if(!$host)
+ $host = $_SERVER['HTTP_HOST'];
+ $host = ($_SESSION['storage_ssl'] ? 'ssl://' : '') . $host . ':' . $_SESSION['storage_port'];
+ $port = $_SESSION['storage_port'] ? $_SESSION['storage_port'] : $this->rcmail->config->get('default_port');
+ if($host = $this->rcmail->config->get('plugin_manager_translation_server')){
+ $temp = parse_url($host);
+ $port = $temp['port'] ? $temp['port'] : $port;
+ }
+ $translation = html::tag('td', array('align' => 'right', 'title' => $plugin . ' :: ' . $this->gettext('translate') . '...'), html::tag('a', array('target' => '_blank', 'href' => $this->mirror . '?_action=plugin.plugin_server_translate&_hl=' . $_SESSION['language'] . '&_plugin=' . $plugin . '&_translator=' . $user . '&_host=' . $host . '&_port=' . $port), ($mirror[$plugin]['lc'] * 100)) . ' %');
+ }
+ $db = $this->rcmail->config->get('db_dsnw');
+ $db = parse_url($db);
+ $db = $db['scheme'];
+ $onclick = '';
+ if(strtolower($this->get_demo($user)) == strtolower(sprintf($this->rcmail->config->get('demo_user_account'),""))){
+ $onclick = 'return false';
+ }
+ $dlprice = 0;
+ if($p > $s || substr($s, 0, 5) == '0000u'){
+ $dlprice = $mirror[$plugin]['prices'][0];
+ $background = 'lightgreen';
+ if(is_dir(INSTALL_PATH . 'plugins/' . $plugin)){
+ if($plugin == 'dblog'){
+ $dlprice = $mirror[$plugin]['prices'][1];
+ $v = explode('.', $scope[$plugin]['version']);
+ $mv = explode('.', $mirror[$plugin]['version']);
+ if(($v[1] == 0 && count($mv) == 2) || $v[0] < $mv[0]){
+ $dlprice = $mirror[$plugin]['prices'][1];
+ $background = 'lightblue';
+ }
+ else if($v[0] == $mv[0] && $v[1] < $mv[1]){
+ $dlprice = $mirror[$plugin]['prices'][2];
+ $background = 'yellow';
+ }
+ else{
+ $dlprice = 0;
+ $background = 'none';
+ }
+ }
+ else if($this->require_plugin($plugin)){
+ $dlprice = $mirror[$plugin]['prices'][1];
+ $v = explode('.', $scope[$plugin]['version']);
+ $mv = explode('.', $mirror[$plugin]['version']);
+ if(($v[1] == 0 && count($mv) == 2) || $v[0] < $mv[0]){
+ $dlprice = $mirror[$plugin]['prices'][1];
+ $background = 'lightblue';
+ }
+ else if($v[0] == $mv[0] && $v[1] < $mv[1]){
+ $dlprice = $mirror[$plugin]['prices'][2];
+ $background = 'yellow';
+ }
+ else{
+ if(method_exists($plugin, 'about')){
+ $dlprice = 0;
+ $background = 'none';
+ }
+ }
+ }
+ }
+ }
+ if(!$dlprice){
+ $background = 'none';
+ }
+ if($nr){// && $scope[$plugin]['version']
+ $stat = 'ok';
+ }
+ $cdlprice = $cdlprice + $dlprice;
+ $prices = html::tag('td', array('style' => "background: lightgreen", 'title' => $this->gettext('initialdownload')), $mirror[$plugin]['prices'][0]);
+ $prices .= html::tag('td', array('style' => "background: lightblue", 'title' => $this->gettext('keyfeatureaddition')), $mirror[$plugin]['prices'][1]);
+ $prices .= html::tag('td', array('style' => "background: yellow", 'title' => $this->gettext('codeimprovements')), $mirror[$plugin]['prices'][2]);
+ $prices .= html::tag('td', null, '&rArr;');
+ $prices .= html::tag('td', array('style' => "background: " . $background, 'title' => 'MyRC$ ' . $dlprice), 'MyRC$&nbsp;' . html::tag('span', array('id' => 'pmdlp_' . $plugin), $dlprice));
+ $checked = ((is_array($update[$plugin]) && !$update[$plugin]['notinstalled'] && $stat != 'error' || $stat == 'edit' || $stat == 'update') && $stat != 'ok')?true:false;
+ $notinstalled = '';
+ if(substr($scope[$plugin]['version'], 0, 1) == 'u'){
+ $notinstalled = 'notinstalled ';
+ }
+ if($plugin == 'Roundcube Core Patches' || $plugin == 'Branch is currently closed'){
+ $submitissue = html::tag('td', array('align' => 'center'), '--');
+ $checkbox = html::tag('td', null, '&nbsp;');
+ }
+ else{
+ $submitissue = html::tag('td', array('align' => 'center', 'title' => $plugin . ' :: ' . $this->gettext('submitissue')), html::tag('a', array('onclick' => $onclick, 'href' => 'http://code.google.com/p/myroundcube/issues/entry?summary=[' . $plugin . '] - Enter one-line summary&comment=Token:%20' . $server['token'] . "%20(Don't modify this token!)%0AVersion:%20" . $scope[$plugin]['version'] . " (" . $scope[$plugin]['date'] . ")%0APHP:%20" . phpversion() . '%0ARCMAIL:%20' . RCMAIL_VERSION . '%0ADatabase:%20' . $db . '%0ASERVER:%20' . $_SERVER['SERVER_SOFTWARE'] . '%0A----%0AI.%20%20Issue%20Description:%0A%0AII.%20Steps to reproduce the Issue:%0A1.%0A2.%0A3.', 'target' => '_blank'), $this->gettext('issue')));
+ $checkbox = html::tag('td', array('align' => 'center'), html::tag('input', array('class' => 'chbox ' . $notinstalled . ($dlprice ? 'costs' : 'free'), 'value' => $plugin . '|' . ($scope[$plugin]['version'] ? $scope[$plugin]['version'] : '0') . '|' . $mirror[$plugin]['token'], 'type' => 'checkbox', 'checked'=> $checked, 'disabled' => ($stat != 'ok' && (is_array($update[$plugin]) && $stat != 'error' || $stat == 'edit' || $stat == 'update'))?false:true, 'name' => '_plugins[]', 'id' => 'chbox_' . asciiwords($plugin, false, '_'), null)));
+ }
+ $tbody1 .= html::tag('tr', null,
+ html::tag('td', array('id' => 'pmu_' . asciiwords($plugin, false, '_'), 'title' => $mirror[$plugin]['description']), html::tag('a', array('name' => '#' . $plugin, 'class' => 'anchorLink'), '&nbsp;') . $plugin . ($mirror[$plugin]['count'] ? ('<br />&nbsp;' . html::tag('small', array('title' => $mirror[$plugin]['count'] . ' ' . $this->gettext('downloads')), '(' . $mirror[$plugin]['count'] . ')')) : '') . ($dlprice ? '<br />' . html::tag('table', null, html::tag('tr', null, html::tag('td', null, 'MyRC$') . $prices)) : '')) .
+ html::tag('td', array('style' => 'background:' . $background), $props['version'] . '<br />' . html::tag('small', null, '(' . date($this->rcmail->config->get('date_format', 'm-d-Y'), strtotime($props['date'])) . ')')) .
+ $serverversion .
+ $translation .
+ $submitissue .
+ html::tag('td', array('class' => $stat, 'title' => $plugin . ' :: ' . $this->gettext('update_' . $stat)), '&nbsp;') .
+ $checkbox .
+ html::tag('td', array('title' => $comment?($plugin . ' :: ' . $comment):''), $comment . $append)
+ );
+ }
+ else{
+ if(is_array($mirror[$plugin])){
+ if(is_array($mirror[$plugin]['required'])){
+ $comments = '';
+ if($mirror[$plugin]['comments']){
+ $comments = html::tag('li', null, $mirror[$plugin]['comments']);
+ }
+ $requiredby = '';
+ foreach($mirror[$plugin]['required'] as $key){
+ $requiredby .= '-&nbsp;'.html::tag('a', array('href' => '#' . $key, 'class' => 'anchorLink'), $key) . '<br />';
+ }
+ $requiredby = substr($requiredby, 0, strlen($requiredby) - 2) . "\r\n";
+ $mirror[$plugin]['comments'] = html::tag('ul', array('class' =>'pm_update'), $comments . html::tag('li', null, $this->gettext('requiredby') . ':<br />' . $requiredby));
+ }
+ $tbody2 .= html::tag('tr', null,
+ html::tag('td', array('id' => 'pmu_' . $plugin, 'title' => $mirror[$plugin]['description']), html::tag('a', array('name' => '#' . $plugin), '&nbsp;') . $plugin) .
+ html::tag('td', array('title' => $plugin . ' :: ' . html::tag('a', array('href' => $mirror[$plugin]['download'], 'target' => '_blank'), $this->gettext('develsite')), 'colspan' => 2), ($mirror[$plugin] != 'unknown')?html::tag('a', array('href' => $mirror[$plugin]['download'], 'target' => '_blank'), $this->gettext('homepage')):$this->gettext($mirror[$plugin])) .
+ html::tag('td', array('align' => 'center'), '--') .
+ html::tag('td', array('align' => 'center'), '--') .
+ html::tag('td', array('align' => 'center', 'class' => 'thirdparty'), '--') .
+ html::tag('td', array('align' => 'center'), html::tag('input', array('title' => $plugin . ' :: ' . $this->gettext('thirdpartywarning'), 'class' => 'chbox', 'name' => '_plugins[]', 'value' => $plugin, 'type' => 'checkbox', 'checked'=> false))) .
+ html::tag('td', array('title' => $mirror[$plugin]['comments']?($plugin . ' :: ' . $mirror[$plugin]['comments']):''), $mirror[$plugin]['comments'])
+ );
+ }
+ else{
+ // ToDo: if link is missing: http://www.google.de/search?q=roundcube+fileapi_attachments
+ $tbody2 .= html::tag('tr', null,
+ html::tag('td', array('id' => 'pmu_' . $plugin), '&nbsp;' . $plugin) .
+ html::tag('td', array('colspan' => 2), ($mirror[$plugin] != 'unknown')?html::tag('a', array('href' => $mirror[$plugin], 'target' => '_blank', 'title' => $mirror[$plugin]), $mirror[$plugin]):$this->gettext($mirror[$plugin])) .
+ html::tag('td', array('align' => 'center'), '--') .
+ html::tag('td', array('align' => 'center'), '--') .
+ html::tag('td', array('align' => 'center'), '--') .
+ html::tag('td', array('align' => 'center'), html::tag('input', array('title' => $plugin . ' :: ' . $this->gettext('thirdpartywarning'), 'class' => 'chbox', 'value' => $plugin, 'type' => 'checkbox', 'checked'=> false))) .
+ html::tag('td', null,'&nbsp;')
+ );
+ }
+ }
+ }
+ $boxtitle = html::tag('div', array('id' => 'prefs-title-right'), $this->gettext('plugin_manager_center'));
+ $rctitle = 'rc_ok';
+ $rcclass = 'rcok';
+ $append = html::tag('span', array('class' => 'vmatch'), '&nbsp;'.$this->gettext('rc_uptodate').'&nbsp;');
+ if($mirror_rc > RCMAIL_VERSION){
+ $rctitle = 'rc_update';
+ $rcclass = 'rcupdate';
+ $append = html::tag('span', array('class' => 'vupdate'), '&nbsp;'.$this->gettext('rc_update').'&nbsp;') . '&nbsp;&raquo;&nbsp;' . html::tag('a', array('href' => $this->rcurl, 'target' => '_blank'), $this->gettext('roundcubeurl')) . '&nbsp;';
+ }
+ else if($mirror_rc < RCMAIL_VERSION){
+ $rctitle = 'rc_newer';
+ $rcclass = 'rcerror';
+ $append = html::tag('span', array('class' => 'vmismatch'), '&nbsp;'.sprintf($this->gettext('nottested'), RCMAIL_VERSION).'&nbsp;');
+ }
+ if($branch == 'beta'){
+ $append .= html::tag('span', null, '<br />&nbsp;<div style="float:right; margin-right:10px;">SECTION: MyRoundcube plugins <b>beta</b> branch</div>');
+ }
+ else if($branch == 'dev'){
+ $append .= html::tag('span', null, '<br />&nbsp;<div style="float:right; margin-right:10px;">SECTION: MyRoundcube plugins <b>stable</b> branch</div>');
+ }
+ else if($branch == 'stable'){
+ $append .= html::tag('span', null, '<br />&nbsp;<div style="float:right; margin-right:10px;">SECTION: MyRoundcube plugins <b>frozen</b> branch</div>');
+ }
+ $rctitle = $this->gettext($rctitle);
+ $mirrorh = parse_url($this->mirror);
+ $db = $this->rcmail->config->get('db_dsnw');
+ $db = parse_url($db);
+ $db = $db['scheme'];
+ $web = 'http' . ($_SERVER['HTTPS']?'s':'') . '://'. $_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'];
+ $user = $_SESSION['username'];
+ if(is_numeric($cdlcredits) && is_numeric($cdlprice)){
+ $remaining = $cdlcredits - $cdlprice;
+ }
+ else{
+ $remaining = 0;
+ }
+ $link = html::tag('a', array('onclick' => 'parent.location.href="./?_task=settings&_action=preferences&_buynow=1"', 'href' => '#'), $this->gettext('customer_account'));
+ $hmchecked = '';
+ $otherchecked = 'checked';
+ if($this->use_hmail){
+ $hmchecked = 'checked';
+ $otherchecked = '';
+ }
+ if($this->admins[$this->rcmail->user->data['username']] == 0){
+ $hmail = html::tag('span', null, 'IMAP-Server:&nbsp;') .
+ html::tag('input', array('type' => 'radio', 'name' => 'hmailbackend', 'id' => 'yhmail', 'checked' => $hmchecked, 'onclick' => 'pm_hmail(false)')) . html::tag('span', null, html::tag('a', array('href' => 'http://www.hmailserver.com/', 'target' => '_blank'), 'hMailserver') . '&nbsp;') .
+ html::tag('input', array('type' => 'radio', 'name' => 'hmailbackend', 'id' => 'nhmail', 'checked' => $otherchecked, 'onclick' => 'pm_hmail(true)')) . html::tag('span', null, 'other') . '&nbsp;&rArr;&nbsp;';
+ }
+ else{
+ $hmail = '';
+ }
+ $credits = html::tag('div', array('style' => 'display:block; border:1px solid lightgrey; background:lightyellow; padding:2px 2px 2px 2px; width:99%;'), '&nbsp;' . $hmail . 'MyRC$ ' .
+ html::tag('span', array('id' => 'cdlcredits'), ($cdlcredits ? $cdlcredits : 0)) . ' (' . $this->gettext('credits') . ') &minus; MyRC$ ' . html::tag('span', array('id' => 'cdlprice'), $cdlprice) . '&nbsp(' . $this->gettext('forthisdownload') . ') = ' . 'MyRC$ ' . html::tag('span', array('id' => 'cdlremaining'), $remaining) . ($remaining > 0 ? '&nbsp;(' . $this->gettext('remainingcredits') . ')' : '&nbsp;(' . $link . ')')
+ );
+ $controls = html::tag('div', array('style' => 'display: inline; float: right; margin-right: 5px;'), html::tag('a', array('id' => 'buycreditslink', 'href' => './?_task=settings&_action=plugin.plugin_manager_buycredits', 'target' => '_blank'), $this->gettext('buynow'))) .
+ html::tag('div', array('style' => 'display: inline; float: right;'), html::tag('a', array('href' => '#', 'onclick' => 'pm_discard()'), $this->gettext('discardliabletopaycosts')) . '&nbsp;|&nbsp;' . html::tag('a', array('href' => '#', 'onclick' => 'pm_notinstalled()'), $this->gettext('unchecknotinstalledplugins')) . '&nbsp;|&nbsp;');
+ $zipbutton = $credits . html::tag('br') . html::tag('input', array('type' => 'submit', 'class' => 'button mainaction', 'value' => $this->gettext('ziparchive'))) . $controls;
+ /*$paypalbutton = html::tag('form', array('action' => "https://www.paypal.com/cgi-bin/webscr", 'method' => "post", 'target' => '_blank'),
+ html::tag('input', array('type' => "hidden", 'name' => "cmd", 'value' => "_s-xclick")) .
+ html::tag('input', array('type' => "hidden", 'name' => "hosted_button_id", 'value' => "37WMD9TBQXRNG")) .
+ html::tag('input', array('type' => "image", 'src' => "https://www.paypalobjects.com/en_US/i/btn/btn_donate_SM.gif", 'border' => "0", 'name' => "submit", 'alt' => "PayPal - The safer, easier way to pay online!")) .
+ html::tag('img', array('alt' => "", 'border' => "0", 'src' => "https://www.paypalobjects.com/en_US/i/scr/pixel.gif", 'width' => "1", 'height' => "1"))
+ );*/
+ if(strtolower($this->get_demo($user)) == strtolower(sprintf($this->rcmail->config->get('demo_user_account'),""))){
+ $zipbutton = $zipbutton = html::tag('input', array('type' => 'button', 'class' => 'button mainaction', 'value' => $this->gettext('demoaccount')));;
+ }
+ $formcontent = html::tag('div', array('id' => 'rcheader'), '<br />Roundcube:&nbsp;' . $this->gettext('serverversion') . '&nbsp;' . RCMAIL_VERSION . '&nbsp;&raquo;&nbsp;' . $this->gettext('mirrorversion') . '&nbsp;' . $mirror_rc . '&nbsp;&raquo;&nbsp;' . $append . '<hr />');
+ $formcontent .= html::tag('p', null);
+ $formcontent .= html::tag('div', array('id' => 'table-container', 'style' => 'height:0px; overflow:auto; margin-right:10px;'), html::tag('table', array('id' => 'table', 'border' => 0, 'cellspacing' => 0, 'cellpadding' => 0), html::tag('thead', null, $thead) . html::tag('tbody', null, $tbody1 . $tbody2)));
+ $formcontent .= html::tag('div', array('id' => 'update_footer'), html::tag('p', null, null) .
+ $zipbutton .
+ html::tag('input', array('type' => 'button', 'onclick' => 'document.location.href="./?_task=settings&_framed=1&_action=plugin.plugin_manager_update&_warning=1"', 'class' => 'button', 'value' => $this->gettext('cancel'))) .
+ html::tag('br') . html::tag('div', array('class' => 'asterix'), '&sup1;' . $this->gettext('donotregister') . '<br />&sup2;' . $this->gettext('register')) .
+ html::tag('input', array('type' => 'hidden', 'name' => '_pm_price', 'id' => 'pm_price', 'value' => '##placeholder##')) .
+ html::tag('input', array('type' => 'hidden', 'name' => '_pm_customer_id', 'value' => $this->rcmail->config->get('customer_id'))) .
+ html::tag('input', array('type' => 'hidden', 'name' => '_pm_admin', 'value' => $user)) .
+ html::tag('input', array('type' => 'hidden', 'name' => '_pm_serveradmin', 'value' => $_SERVER['SERVER_ADMIN'])) .
+ html::tag('input', array('type' => 'hidden', 'name' => '_pm_newsletter', 'value' => get_input_value('_newsletter', RCUBE_INPUT_GPC))) .
+ html::tag('input', array('type' => 'hidden', 'name' => '_pm_branch', 'value' => get_input_value('_branch', RCUBE_INPUT_GPC))) .
+ html::tag('input', array('type' => 'hidden', 'name' => '_pm_firstname', 'value' => urldecode(get_input_value('_firstname', RCUBE_INPUT_GPC)))) .
+ html::tag('input', array('type' => 'hidden', 'name' => '_pm_lastname', 'value' => urldecode(get_input_value('_lastname', RCUBE_INPUT_GPC)))) .
+ /*html::tag('input', array('type' => 'hidden', 'name' => '_pm_self', 'value' => $web)) .*/
+ html::tag('input', array('type' => 'hidden', 'name' => '_pm_serverip', 'value' => $server['ip'])) .
+ /*html::tag('input', array('type' => 'hidden', 'name' => '_pm_servername', 'value' => $_SERVER['SERVER_NAME'])) .
+ html::tag('input', array('type' => 'hidden', 'name' => '_pm_serverport', 'value' => $_SERVER['SERVER_PORT'])) .
+ html::tag('input', array('type' => 'hidden', 'name' => '_pm_serverprotocol', 'value' => $_SERVER['SERVER_PROTOCOL'])) .*/
+ html::tag('input', array('type' => 'hidden', 'name' => '_pm_serversoftware', 'value' => $_SERVER['SERVER_SOFTWARE'])) .
+ html::tag('input', array('type' => 'hidden', 'name' => '_pm_rcmail', 'value' => RCMAIL_VERSION)) .
+ html::tag('input', array('type' => 'hidden', 'name' => '_pm_version', 'value' => self::$version)) .
+ html::tag('input', array('type' => 'hidden', 'name' => '_pm_db', 'value' => $db)) .
+ html::tag('input', array('type' => 'hidden', 'name' => '_pm_php', 'value' => phpversion())) .
+ html::tag('p', null, null)
+ );
+ $formfooter = html::tag('div', array('id' => 'formfooter'), html::tag('div', array('class' => 'footerleft'), html::tag('form', array('name' => 'form', 'onsubmit' => 'return pmf();', 'method' => 'post', 'action' => str_ireplace('http:', 'https:', $this->mirror) . '?_action=plugin.plugin_server_request&_hl=' . $_SESSION['language']), $formcontent)));
+ $formfooter .= html::tag('script', array('type' => 'text/javascript'), '$("body").hide();');
+ $this->rcmail->output->add_label(
+ 'plugin_manager.creditsupdated'
+ );
+ $paypalbutton = html::tag('a', array('href' => 'http://myroundcube.com/#contact', 'target' => '_blank'), 'MyRoundcube ' . $this->gettext('support'));
+ $this->rcmail->output->add_script('if(screen.width < 1300){$(".pm_update").html("..."); $("#settings-sections").hide();$("#pluginbody").css("left", "5px")}', 'docready');
+ return html::tag('div', array('id' =>'prefs-box', 'style' => 'width: 100%; overflow: auto;'), $boxtitle . $formfooter) . html::tag('div', array('id' => 'paypalcontainer'), html::tag('div', array('id' => 'paypal'), $paypalbutton));
+ }
+
+ function getcredits($ajax = true){
+ $params = array('_customer_id' => $this->rcmail->config->get('customer_id'));
+ $httpConfig['method'] = 'POST';
+ $httpConfig['target'] = str_replace('buycredits', 'getcredits', $this->billingurl);
+ $httpConfig['timeout'] = '30';
+ $httpConfig['params'] = $params;
+ $httpConfig['user_agent'] = 'MyRoundcube PHP/5.0';
+ $http = new MyRCHttp();
+ $http->initialize($httpConfig);
+ if(ini_get('safe_mode') || ini_get('open_basedir')){
+ $http->useCurl(false);
+ }
+ $http->execute();
+ $this->_log($httpConfig, $http);
+ if($http->error){
+ $response = false;
+ }
+ else{
+ $response = $http->result;
+ }
+ if($response == '-0'){
+ unset($httpConfig['params']);
+ $httpConfig['method'] = 'GET';
+ $httpConfig['target'] .= '&_customer_id=' . $this->rcmail->config->get('customer_id');
+ $http->initialize($httpConfig);
+ if(ini_get('safe_mode') || ini_get('open_basedir')){
+ $http->useCurl(false);
+ }
+ $http->execute();
+ $this->_log($httpConfig, $http);
+ if($http->error){
+ $response = false;
+ }
+ else{
+ $response = $http->result;
+ }
+ }
+ if($ajax)
+ $this->rcmail->output->command('plugin.plugin_manager_getcredits', $response);
+ else
+ return $response;
+ }
+
+ function buycredits(){
+ $params = array(
+ '_customer_id' => $this->rcmail->config->get('customer_id'),
+ '_clientip' => $_SERVER['REMOTE_ADDR'],
+ '_serverip' => $_SERVER['SERVER_ADDR']
+ );
+ $httpConfig['method'] = 'POST';
+ $httpConfig['target'] = $this->billingurl;
+ $httpConfig['timeout'] = '30';
+ $httpConfig['params'] = $params;
+ $httpConfig['user_agent'] = 'MyRoundcube PHP/5.0';
+ $http = new MyRCHttp();
+ $http->initialize($httpConfig);
+ if(ini_get('safe_mode') || ini_get('open_basedir')){
+ $http->useCurl(false);
+ }
+ $http->execute();
+ $this->_log($httpConfig, $http);
+ if($http->error){
+ $this->rcmail->output->send('plugin_manager.error');
+ }
+ else{
+ $url = explode('?', $this->billingurl, 2);
+ $url = slashify($url[0]);
+ $page = $http->result;
+ $page = str_replace('href="plugins/', 'href="' . $url . 'plugins/', $page);
+ $page = str_replace('src="skins/', 'src="' . $url . 'skins/', $page);
+ $page = str_replace('<img src="plugins/', '<img src="' . $url . 'plugins/', $page);
+ $page = str_replace('<script type="text/javascript" src="plugins/', '<script type="text/javascript" src="' . $url . 'plugins/', $page);
+ send_nocacheing_headers();
+ echo $page;
+ }
+ exit;
+ }
+
+ function getnew(){
+ $params = array('_customer_id' => $this->rcmail->config->get('customer_id'), '_ip' => $this->getVisitorIP());
+ $httpConfig['method'] = 'POST';
+ $httpConfig['target'] = $this->svn . '?_action=plugin.plugin_server_customer_id_new';
+ $httpConfig['timeout'] = '30';
+ $httpConfig['params'] = $params;
+ $httpConfig['user_agent'] = 'MyRoundcube PHP/5.0';
+ $http = new MyRCHttp();
+ $http->initialize($httpConfig);
+ if(ini_get('safe_mode') || ini_get('open_basedir')){
+ $http->useCurl(false);
+ }
+ $http->execute();
+ $this->_log($httpConfig, $http);
+ if($http->error){
+ $response = false;
+ }
+ else{
+ $response = $http->result;
+ }
+ if(is_string($response) && strlen($response) == 32){
+ $a_prefs['customer_id'] = $response;
+ $a_prefs['own_customer_id'] = $response;
+ $this->rcmail->user->save_prefs($a_prefs);
+ $sql = 'SELECT * FROM ' . get_table_name('plugin_manager') . ' WHERE ' . $this->q('conf') . '=?';
+ $res = $this->rcmail->db->limitquery($sql, 0, 1, 'admins');
+ $admins = $this->rcmail->db->fetch_assoc($res);
+ if($admins = unserialize($admins['value'])){
+ if($admins[0] == $this->rcmail->user->data['username']){
+ foreach($admins as $idx => $admin){
+ if($idx == 0) continue;
+ $sql = 'SELECT ' . $this->q('preferences') . ' FROM ' . get_table_name('users') . ' WHERE ' . $this->q('username') . '=? AND ' . $this->q('mail_host') . '=?';
+ $res = $this->rcmail->db->limitquery($sql, 0, 1, $admin, $_SESSION['storage_host']);
+ $prefs = $this->rcmail->db->fetch_assoc($res);
+ if($prefs = unserialize($prefs['preferences'])){
+ if($prefs['customer_id'] == $prefs['shared_customer_id']){
+ $prefs['customer_id'] = $reponse;
+ }
+ $prefs['shared_customer_id'] = $response;
+ $prefs = serialize($prefs);
+ $sql = 'UPDATE ' . get_table_name('users') . ' SET ' . $this->q('preferences') . '=? WHERE ' . $this->q('username') . '=? AND ' . $this->q('mail_host') . '=?';
+ $this->rcmail->db->query($sql, $prefs, $admin, $_SESSION['storage_host']);
+ }
+ }
+ }
+ }
+ }
+ else{
+ unset($httpConfig['params']);
+ $httpConfig['method'] = 'GET';
+ $httpConfig['target'] .= '&_customer_id=' . $this->rcmail->config->get('customer_id') . '&_ip=' . $this->getVisitorIP();
+ $http->initialize($httpConfig);
+ if(ini_get('safe_mode') || ini_get('open_basedir')){
+ $http->useCurl(false);
+ }
+ $http->execute();
+ if($http->error){
+ $response = false;
+ }
+ else{
+ $response = $http->result;
+ }
+ if(is_string($response) && strlen($response) == 32){
+ $a_prefs['customer_id'] = $response;
+ $a_prefs['own_customer_id'] = $response;
+ $this->rcmail->user->save_prefs($a_prefs);
+ $sql = 'SELECT * FROM ' . get_table_name('plugin_manager') . ' WHERE ' . $this->q('conf') . '=?';
+ $res = $this->rcmail->db->limitquery($sql, 0, 1, 'admins');
+ $admins = $this->rcmail->db->fetch_assoc($res);
+ if($admins = unserialize($admins['value'])){
+ if($admins[0] == $this->rcmail->user->data['username']){
+ foreach($admins as $idx => $admin){
+ if($idx == 0) continue;
+ $sql = 'SELECT ' . $this->q('preferences') . ' FROM ' . get_table_name('users') . ' WHERE ' . $this->q('username') . '=? AND ' . $this->q('mail_host') . '=?';
+ $res = $this->rcmail->db->limitquery($sql, 0, 1, $admin, $_SESSION['storage_host']);
+ $prefs = $this->rcmail->db->fetch_assoc($res);
+ if($prefs = unserialize($prefs['preferences'])){
+ if($prefs['customer_id'] == $prefs['shared_customer_id']){
+ $prefs['customer_id'] = $reponse;
+ }
+ $prefs['shared_customer_id'] = $response;
+ $prefs = serialize($prefs);
+ $sql = 'UPDATE ' . get_table_name('users') . ' SET ' . $this->q('preferences') . '=? WHERE ' . $this->q('username') . '=? AND ' . $this->q('mail_host') . '=?';
+ $this->rcmail->db->query($sql, $prefs, $admin, $_SESSION['storage_host']);
+ }
+ }
+ }
+ }
+ }
+ }
+ header('Location: ./?_task=settings&_action=edit-prefs&_section=plugin_manager_customer&_framed=1');
+ exit;
+ }
+
+ function restore_config(){
+ if($this->config_permissions){
+ $plugin = get_input_value('_plugin', RCUBE_INPUT_GPC);
+ $this->show('./plugins/' . $plugin . '/config.inc.php.dist', 'restore');
+ }
+ }
+
+ function edit_config(){
+ if($this->config_permissions){
+ if($plugin = get_input_value('_plugin', RCUBE_INPUT_GPC)){
+ $admin = false;
+ $sql = 'SELECT * FROM ' . get_table_name('db_config') . ' WHERE ' . $this->q('env') . '=?';
+ $res = $this->rcmail->db->limitquery($sql, 0, 1, $plugin);
+ $conf = $this->rcmail->db->fetch_assoc($res);
+ if($conf['conf']){
+ $conf['conf'] = str_replace('$rcmail_config', '$config', $conf['conf']);
+ $source = 'database';
+ $admin = $conf['admin'];
+ include INSTALL_PATH . 'plugins/' . $plugin . '/config.inc.php.dist';
+ $skip_deprecated = false;
+ if($plugin == 'register'){
+ if(isset($conf['conf'])){
+ eval($conf['conf']);
+ }
+ if($driver = $config['register_driver']){
+ include INSTALL_PATH . 'plugins/register/drivers/' . $driver . '/driver.php';
+ }
+ else{
+ $skip_deprecated = true;
+ }
+ }
+ if(is_array($rcmail_config)){
+ $config = $rcmail_config;
+ $sconfig = $rcmail_config;
+ $defaults = $sconfig;
+ $scomments = $rcmail_config_comments;
+ $rcmail_config = false;
+ }
+ else{
+ $sconfig = $config;
+ $defaults = $sconfig;
+ $scomments = $config_comments;
+ }
+ $config = array();
+ eval($conf['conf']);
+ if(is_array($rcmail_config)){
+ $config = $rcmail_config;
+ $rcmail_config = false;
+ }
+ foreach($config as $key => $val){
+ unset($sconfig[$key]);
+ }
+ foreach($config as $key => $val){
+ if(!isset($defaults[$key]) && !$skip_deprecated){
+ if($dist = @file_get_contents(INSTALL_PATH . 'plugins/' . $plugin . '/config.inc.php.dist')){
+ if(strpos($dist, '$config[\'' . $key . '\']') === false){
+ if(strpos($conf['conf'], "/* The following configuration parameter is deprecated - please remove */\n" . '$config[\'' . $key . '\']') === false){
+ $conf['conf'] = str_replace('$config[\'' . $key . '\']', "/* The following configuration parameter is deprecated - please remove */\r\n" . '$config[\'' . $key . '\']', $conf['conf']);
+ }
+ }
+ }
+ }
+ }
+ $prepend = '';
+ if(count($sconfig > 0)){
+ $code = '';
+ foreach($sconfig as $key => $val){
+ if(strpos($conf['conf'], '$config[\'' . $key . '\']') === false){
+ if($comment = $scomments[$key]){
+ $code .= "\r\n" . '/* ' . $comment . ' */' . "\r\n";
+ }
+ $code .= '$config[\'' . $key . '\'] = ' . var_export($val, true) .';' . "\r\n";
+ }
+ }
+ if($code){
+ $prepend = '/*---- New configuration parameters since last saving ----*/' . "\r\n\r\n" .
+ $code . "\r\n" .
+ '/*----------------------------------------------------------*/' . "\r\n\r\n" .
+ '/* Begin currently saved parameters */' . "\r\n\r\n";
+ }
+ }
+ $_POST['_save_config'] = "<?php\r\n\r\n" . $prepend . $conf['conf'] . "\r\n\r\n?>";
+ }
+ else{
+ if(file_exists(INSTALL_PATH . 'plugins/global_config/config.inc.php')){
+ include INSTALL_PATH . 'plugins/global_config/config.inc.php';
+ if(is_array($rcmail_config)){
+ $global_config = $rcmail_config;
+ $rcmail_config = array();
+ }
+ else{
+ $global_config = $config;
+ $config = array();
+ }
+ }
+ $source = './plugins/' . $plugin . '/config.inc.php.dist';
+ $conf = file_get_contents(INSTALL_PATH . 'plugins/' . $plugin . '/config.inc.php.dist');
+ if($plugin == 'register'){
+ if($driver = $this->rcmail->config->get('register_driver')){
+ if(file_exists(INSTALL_PATH . 'plugins/register/drivers/' . $driver . '/config.inc.php.dist')){
+ $source = ', ./plugins/' . $plugin . 'drivers/' . $driver . '/config.inc.php.dist';
+ $conf .= file_get_contents(INSTALL_PATH . 'plugins/register/drivers/' . $driver . '/config.inc.php.dist');
+ $conf = str_replace('?><?php', '/* ' . INSTALL_PATH . 'plugins/regster/drivers/' . $driver . '/config.inc.php */', $conf);
+ }
+ }
+ }
+ $conf = str_replace('$rcmail_config', '$config', $conf);
+ include INSTALL_PATH . 'plugins/' . $plugin . '/config.inc.php.dist';
+ if(is_array($rcmail_config)){
+ $config = $rcmail_config;
+ }
+ $rcmail_config = array();
+ $config = array();
+ if(file_exists(INSTALL_PATH . 'plugins/' . $plugin . '/config.inc.php')){
+ $source = './plugins/' . $plugin . '/config.inc.php';
+ include INSTALL_PATH . 'plugins/' . $plugin . '/config.inc.php';
+ }
+ if($plugins == 'register'){
+ if($driver = $this->rcmail->config->get('register_driver')){
+ if(file_exists(INSTALL_PATH . 'plugins/register/drivers/' . $driver . '/config.inc.php')){
+ $source = ', ./plugins/' . $plugin . 'drivers/' . $driver . '/config.inc.php';
+ include INSTALL_PATH . 'plugins/register/drivers/' . $driver . '/config.inc.php';
+ }
+ }
+ }
+ if(file_exists(INSTALL_PATH . 'plugins/global_config/config.inc.php')){
+ include INSTALL_PATH . 'plugins/global_config/config.inc.php';
+ }
+ foreach($config as $key => $val){
+ if(isset($global_config[$key])){
+ $source = './plugins/global_config/config.inc.php';
+ }
+ $conf = preg_replace('/\n\$config\[\'' . $key . '\'\] = \$/s', "\n" . '//***$config[' . "'" . $key . "'" . '] = $', $conf);
+ if(isset($config[$key])){
+ $conf = preg_replace('/\n\$config\[\'' . $key . '\'\](.+?);(\r|\n)/s', "\n" . '$config[' . "'" . $key . "'" . '] = ' . var_export($config[$key], true) . ';', $conf);
+ }
+ }
+ $conf = str_replace("\n" . '//***$config[', "\n" . '$config[', $conf);
+ $_POST['_save_config'] = $conf;
+ }
+ }
+ $this->show($source, 'edit', $admin);
+ }
+ }
+
+ function check_syntax($conf = false){
+ $test = "if(0){\n" . $conf . "\n}";
+ @ini_set('log_errors', false);
+ @ini_set('display_errors', true);
+ ob_start();
+ eval($test);
+ $error = str_replace(': eval()\'d code ', '', strip_tags(ob_get_clean()));
+ ob_end_clean();
+ return $error;
+ }
+
+ function save_config(){
+ if($this->config_permissions){
+ $plugin = get_input_value('_plugin', RCUBE_INPUT_POST);
+ $source = get_input_value('_source', RCUBE_INPUT_POST);
+ $conf = trim($_POST['_save_config']);
+ $conf = str_replace('+', '__plus__', $conf);
+ $conf = urldecode($conf);
+ $conf = str_replace('__plus__', '+', $conf);
+ $conf = str_replace('/*---- New configuration parameters since last saving ----*/' . "\n\n", '', $conf);
+ $conf = str_replace('/*----------------------------------------------------------*/' . "\n\n", '', $conf);
+ $conf = str_replace('/* Begin currently saved parameters */' . "\n\n", '', $conf);
+ $conf = explode("\n", $conf);
+ if(strtolower(trim($conf[count($conf) -1])) == '?>'){
+ unset($conf[count($conf) -1]);
+ }
+ if(strtolower(trim($conf[0])) == '<?php'){
+ unset($conf[0]);
+ }
+ $conf = trim(stripslashes(implode("\n", $conf)));
+ $error = $this->check_syntax($conf);
+ if($error){
+ $conf = str_replace("\\'", '"', $conf);
+ $error = $this->check_syntax($conf);
+ }
+ if(!$error){
+ $sql = 'DELETE FROM ' . get_table_name('db_config') . ' WHERE ' . $this->q('env') . '=?';
+ $this->rcmail->db->query($sql, $plugin);
+ $sql = 'INSERT INTO ' . get_table_name('db_config') . '(' . $this->q('env') . ', ' . $this->q('conf') . ', ' . $this->q('admin') . ') VALUES (?, ?, ?)';
+ $this->rcmail->db->query($sql, $plugin, $conf, $this->rcmail->user->data['username']);
+ $this->rcmail->output->command('plugin.plugin_manager_save_config', array($this->gettext('successfullysaved'), 'confirmation'));
+ }
+ else{
+ $this->rcmail->output->command('plugin.plugin_manager_save_config', array($error, 'error'));
+ }
+ }
+ else{
+ $this->rcmail->output->command('plugin.plugin_manager_save_config', array($this->gettext('errorsaving'), 'error'));
+ }
+ }
+
+ function show($source = false, $mode = 'edit', $admin = false){
+ $plugin = get_input_value('_plugin', RCUBE_INPUT_GPC);
+ if(!$source){
+ if(file_exists(INSTALL_PATH . 'plugins/' . $plugin . '/config.inc.php.dist')){
+ $source = './plugins/' . $plugin . '/config.inc.php.dist';
+ }
+ }
+ if(strtolower($this->get_demo($_SESSION['username'])) == strtolower(sprintf($this->rcmail->config->get('demo_user_account'),""))){
+ $this->out = html::tag('h3', null, '&nbsp;&nbsp;Access denied (Demo Account)') .
+ html::tag('div', array('style' => 'float: left;'), '&nbsp;&nbsp;[' . html::tag('a', array('href' => './?_task=settings&_action=edit-prefs&_section=plugin_manager_settings&_framed=1&_expand=' . $plugin), $this->gettext('back')) . ']');
+ }
+ else if($plugin){
+ $GLOBALS['codemirror'] = array(
+ 'mode' => 'PHP',
+ 'elem' => 'code',
+ 'readonly' => false,
+ 'buttons' => '["save", "undo", "redo", "jump", "search"]',
+ 'save' => 'function(){document.getElementById("code").value = editor.mirror.getValue(); rcmail.http_post("plugin.plugin_manager_save_config", "_plugin=' . $plugin . '&_save_config=" + urlencode($("#code").val()));}',
+ );
+ $this->require_plugin('codemirror_ui');
+ if(isset($_POST['_save_config'])){
+ $content = trim($_POST['_save_config']);
+ }
+ else{
+ $content = file_get_contents(INSTALL_PATH . 'plugins/' . $plugin . '/config.inc.php.dist');
+ if($plugin == 'register'){
+ if($driver = $this->rcmail->config->get('register_driver')){
+ if(file_exists(INSTALL_PATH . 'plugins/register/drivers/' . $driver . '/config.inc.php.dist')){
+ $content .= file_get_contents(INSTALL_PATH . 'plugins/register/drivers/' . $driver . '/config.inc.php.dist');
+ $content = str_replace('?><?php', '', $content);
+ }
+ }
+ }
+ }
+ if($mode == 'edit'){
+ $action = '&nbsp;[' . html::tag('a', array('href' => './?_task=settings&_action=plugin.plugin_manager_restore_config&_framed=1&_plugin=' . $plugin), $this->gettext('restoredefaults')) . ']';
+ }
+ else{
+ $action = '&nbsp;[' . html::tag('a', array('href' => './?_action=plugin.plugin_manager_edit_config&_framed=1&_plugin=' . $plugin), $this->gettext('edit')) . ']';
+ }
+ if(in_array($plugin, $this->nodocs)){
+ $instructions = html::tag('div', array('style' => 'float: left;'),
+ '&nbsp;[' . html::tag('a', array('target' => '_blank', 'href' => 'http://myroundcube.com/myroundcube-plugins#' . $plugin), $this->gettext('instructions')) . ']');
+
+ }
+ else if(isset($this->docsmap[$plugin])){
+ $instructions = html::tag('div', array('style' => 'float: left;'),
+ '&nbsp;[' . html::tag('a', array('target' => '_blank', 'href' => 'http://myroundcube.com/myroundcube-plugins/' . $this->docsmap[$plugin]), $this->gettext('instructions')) . ']');
+ }
+ else{
+ $instructions = html::tag('div', array('style' => 'float: left;'),
+ '&nbsp;[' . html::tag('a', array('target' => '_blank', 'href' => 'http://myroundcube.com/myroundcube-plugins/' . $plugin . '-plugin'), $this->gettext('instructions')) . ']');
+ }
+ $this->include_script('plugin_manager.js');
+ $this->out = html::tag('form', array('method' => 'post', 'name' => 'form', 'action' => './?_task=settings&_action=plugin.plugin_manager_save_config&_framed=1'),
+ html::tag('div', array('style' => 'position:absolute; top: 20px; bottom: 20px; left: 20px; right: 20px;'),
+ html::tag('div', array('style' => 'float: left;'), $this->gettext('plugin') . ':&nbsp;' . $plugin) .
+ html::tag('div', array('style' => 'float: right;', 'id' => 'source'), ($source ? ($this->gettext('source') . ':&nbsp;') : '') . ($source == 'database' ? $this->gettext('database') : $source) . ($admin ? html::tag('small', null, html::tag('span', null, '&nbsp;(' . $this->gettext('configuredby') . '&nbsp;' . $admin . ')')) : '')) .
+ html::tag('input', array('name' => '_plugin', 'type' => 'hidden', 'value' => $plugin)) .
+ html::tag('input', array('name' => '_source', 'type' => 'hidden', 'value' => $source)) .
+ html::tag('br') .
+ html::tag('textarea', array('style' => 'width: 100%; height: 95%', 'name' => '_save_config', 'id' => 'code'),
+ $content
+ ) .
+ html::tag('br') .
+ html::tag('div', array('style' => 'float: left;'),
+ $instructions .
+ $action .
+ '&nbsp;[' . html::tag('a', array('href' => './?_task=settings&_action=edit-prefs&_section=plugin_manager_settings&_framed=1&_expand=' . $plugin), $this->gettext('back')) . ']')
+ )
+ );
+ }
+ else{
+ $GLOBALS['codemirror'] = array(
+ 'mode' => 'PHP',
+ 'elem' => 'code',
+ 'readonly' => true,
+ 'buttons' => '["jump", "search"]',
+ 'save' => 'function(){}',
+ );
+ $this->require_plugin('codemirror_ui');
+ $header = str_replace('##YEAR##', date('Y'), file_get_contents(INSTALL_PATH . 'plugins/plugin_manager/CONFIGHEADER'));
+ $example = file_get_contents(INSTALL_PATH . 'plugins/plugin_manager/EXAMPLE');
+ $this->out = html::tag('div', array('style' => 'position:absolute; top: 20px; bottom: 20px; left: 20px; right: 20px;'),
+ html::tag('textarea', array('readonly' => true, 'style' => 'width: 100%; height: 95%', 'id' => 'code'),
+ "<?php\r\n" .
+ $header . "\r\n" .
+ $example . "\r\n\r\n" .
+ '/* Configuration */' . "\r\n\r\n" .
+ '/* Plugins which have to be loaded in not authenticated state even if disabled by user */' . "\r\n" .
+ '$config[\'plugin_manager_unauth\'] = ' .
+ var_export($this->unauth, true) . ";\r\n\r\n" .
+ '/* Defaults */' . "\r\n" .
+ '$config[\'plugin_manager_defaults\'] = ' .
+ var_export($this->defaults, true) . ";\r\n?>"
+ ) .
+ html::tag('div', array('style' => 'float: right;'), '[' . html::tag('a', array('href' => './?_task=settings&_action=edit-prefs&_section=plugin_manager_settings&_framed=1'), $this->gettext('back')) . ']')
+ );
+ }
+ $this->register_handler('plugin.body', array($this, 'sqlerror'));
+ $this->rcmail->output->send('plugin_manager.config');
+ }
+
+ function deny(){
+ $customer_id = $this->rcmail->config->get('customer_id');
+ $own_customer_id = $this->rcmail->config->get('own_customer_id');
+ $a_prefs = array();
+ $a_prefs['customer_id'] = $own_customer_id;
+ $a_prefs['shared_customer_id'] = $customer_id;
+ $this->rcmail->user->save_prefs($a_prefs);
+ header('Location: ./?_task=settings&_action=edit-prefs&_section=plugin_manager_customer&_framed=1');
+ exit;
+ }
+
+ function accept(){
+ $customer_id = $this->rcmail->config->get('shared_customer_id');
+ $a_prefs = array();
+ $a_prefs['customer_id'] = $customer_id;
+ $this->rcmail->user->save_prefs($a_prefs);
+ header('Location: ./?_task=settings&_action=edit-prefs&_section=plugin_manager_customer&_framed=1');
+ exit;
+ }
+
+ function settings_link($args){
+ $args['list']['plugin_manager'] = array(
+ 'id' => 'plugin_manager',
+ 'section' => $this->gettext('plugin_manager_title')
+ );
+ $user = $_SESSION['username'];
+ $admins = $this->admins;
+ if(strtolower($this->get_demo($_SESSION['username'])) == strtolower(sprintf($this->rcmail->config->get('demo_user_account'),""))){
+ if($this->rcmail->config->get('demo_target_group', 'admins') == 'admins'){
+ $demo = true;
+ }
+ }
+ if((isset($admins[strtolower($user)]) && $admins[strtolower($user)] == 0 && file_exists(INSTALL_PATH . $this->rcmail->config->get('plugin_manager_hash') . '.myrc')) || $demo){
+ $args['list']['plugin_manager_admins'] = array(
+ 'id' => 'plugin_manager_admins',
+ 'section' => $this->gettext('submenuprefix') . $this->gettext('manage_admins')
+ );
+ }
+ if((isset($admins[strtolower($user)]) && file_exists(INSTALL_PATH . $this->rcmail->config->get('plugin_manager_hash') . '.myrc')) || $demo){
+ $args['list']['plugin_manager_settings'] = array(
+ 'id' => 'plugin_manager_settings',
+ 'section' => $this->gettext('submenuprefix') . $this->gettext('settings')
+ );
+ }
+ if(!$this->noremote && isset($admins[strtolower($user)]) || $demo){
+ $args['list']['plugin_manager_update'] = array(
+ 'id' => 'plugin_manager_update',
+ 'section' => $this->gettext('submenuprefix') . $this->gettext('update_plugins')
+ );
+ if(!$demo){
+ $args['list']['plugin_manager_customer'] = array(
+ 'id' => 'plugin_manager_customer',
+ 'section' => $this->gettext('submenuprefix') . $this->gettext('customer_account')
+ );
+ if(!$this->rcmail->config->get('customer_id')){
+ $customer_id = $this->getCustomerID();
+ if(is_string($customer_id) && strlen($customer_id) == 32){
+ $a_prefs['customer_id'] = $customer_id;
+ $this->rcmail->user->save_prefs($a_prefs);
+ }
+ }
+ $customer_id = $this->rcmail->config->get('customer_id');
+ if($_GET['_buynow'] || !$customer_id){
+ if(!$customer_id){
+ $customer_id = $this->getCustomerID();
+ $arr['customer_id'] = $customer_id;
+ $this->rcmail->user->save_prefs($arr);
+ $this->rcmail->output->add_script('rcmail.display_message("' . $this->gettext('getnew') . '", "notice");', 'docready');
+ }
+ $this->rcmail->output->add_script('rcmail.sections_list.select("plugin_manager_customer");', 'docready');
+ }
+ }
+ }
+ return $args;
+ }
+
+ function bind(){
+ if(isset($this->admins[strtolower($_SESSION['username'])]) && file_exists(INSTALL_PATH . $this->rcmail->config->get('plugin_manager_hash') . '.myrc')){
+ $target = get_input_value('_target', RCUBE_INPUT_GET);
+ $section = get_input_value('_section', RCUBE_INPUT_GET);
+ if($section && $target){
+ $sql = 'SELECT * FROM ' . get_table_name('plugin_manager') . ' WHERE ' . $this->q('conf') . '=?';
+ $res = $this->rcmail->db->limitquery($sql, 0, 1, 'defaults_overwrite');
+ $overwrite = $this->rcmail->db->fetch_assoc($res);
+ if(is_array($overwrite)){
+ $defaults = unserialize($overwrite['value']);
+ if(is_array($defaults)){
+ include INSTALL_PATH . 'plugins/plugin_manager/defaults.inc.php';
+ $defaults[$section][$target]['protected'] = $config['plugin_manager_defaults'][$section][$target]['protected'];
+ $sql = 'UPDATE ' . get_table_name('plugin_manager') . ' SET ' . $this->q('value') . '=?, ' . $this->q('type') . '=? WHERE ' . $this->q('conf') . '=?';
+ $this->rcmail->db->query($sql, serialize($defaults), 'array', 'defaults_overwrite');
+ $this->rcmail->session->remove('plugin_manager_defaults');
+ }
+ }
+ header('Location: ./?_task=settings&_action=edit-prefs&_section=plugin_manager_settings&_framed=1');
+ exit;
+ }
+ }
+ }
+
+ function unbind(){
+ if(isset($this->admins[strtolower($_SESSION['username'])]) && file_exists(INSTALL_PATH . $this->rcmail->config->get('plugin_manager_hash') . '.myrc')){
+ $target = get_input_value('_target', RCUBE_INPUT_GET);
+ $section = get_input_value('_section', RCUBE_INPUT_GET);
+ if($section && $target){
+ $sql = 'SELECT * FROM ' . get_table_name('plugin_manager') . ' WHERE ' . $this->q('conf') . '=?';
+ $res = $this->rcmail->db->limitquery($sql, 0, 1, 'defaults_overwrite');
+ $overwrite = $this->rcmail->db->fetch_assoc($res);
+ if(!is_array($overwrite)){
+ include INSTALL_PATH . 'plugins/plugin_manager/defaults.inc.php';
+ $overwrite = $config['plugin_manager_defaults'];
+ }
+ else{
+ $overwrite = unserialize($overwrite['value']);
+ if(!is_array($overwrite)){
+ include INSTALL_PATH . 'plugins/plugin_manager/defaults.inc.php';
+ $overwrite = $config['plugin_manager_defaults'];
+ }
+ }
+ $overwrite[$section][$target]['protected'] = false;
+ $sql = 'DELETE FROM ' . get_table_name('plugin_manager') . ' WHERE ' . $this->q('conf') . '=?';
+ $this->rcmail->db->query($sql, 'defaults_overwrite');
+ $sql = 'INSERT INTO ' . get_table_name('plugin_manager') . ' (' . $this->q('conf') . ', ' . $this->q('value') . ', ' . $this->q('type') . ') VALUES(?, ?, ?)';
+ $this->rcmail->db->query($sql, 'defaults_overwrite', serialize($overwrite), 'array');
+ $this->rcmail->session->remove('plugin_manager_defaults');
+ header('Location: ./?_task=settings&_action=edit-prefs&_section=plugin_manager_settings&_framed=1');
+ exit;
+ }
+ }
+ }
+
+ function settings($args){
+ // Do not run the section just for building the settings section link
+ if(!get_input_value('_framed', RCUBE_INPUT_GPC)){
+ if($args['section'] == 'plugin_manager'){
+ $skin = $this->rcmail->config->get('skin');
+ if(!file_exists($this->home . '/skins/' . $skin . '/plugin_manager.css')) {
+ $skin = "classic";
+ }
+ $this->include_stylesheet('skins/' . $skin . '/plugin_manager.css');
+ }
+ if(substr($args['section'], 0, strlen('plugin_manager')) == 'plugin_manager'){
+ if($args['section'] != 'plugin_manager'){
+ $args['blocks'][$args['section']]['options'] = array(
+ 'title' => '',
+ 'content' => html::tag('div', array('id' => 'pm_dummy'), '')
+ );
+ return $args;
+ }
+ }
+ }
+ if($args['section'] == 'plugin_manager'){
+ $this->include_script('plugin_manager.js');
+ $skin = $this->rcmail->config->get('skin');
+ if(!file_exists($this->home . '/skins/' . $skin . '/plugin_manager.css')) {
+ $skin = "classic";
+ }
+ $this->include_stylesheet('skins/' . $skin . '/plugin_manager.css');
+ $args['blocks']['plugin_manager'] = array(
+ 'options' => array(),
+ 'name' => ''
+ );
+ $this->merge_config();
+ $content = '';
+ $restore = array();
+ $display_section = array();
+ foreach($this->config as $section => $props) {
+ if(count($props) > 0){
+ $li = array();
+ foreach($props as $plugin => $prop){
+ $show = true;
+ if($this->domain){
+ if(is_array($prop['domains']) && count($prop['domains'] > 0)){
+ $show = false;
+ foreach($prop['domains'] as $domain){
+ if($this->domain == $domain){
+ $show = true;
+ break;
+ }
+ }
+ }
+ if(is_array($prop['hosts']) && count($prop['hosts'] > 0)){
+ $show = false;
+ foreach($prop['hosts'] as $host){
+ if($this->host == strtolower($host)){
+ $show = true;
+ break;
+ }
+ }
+ }
+ if($prop['browser']){
+ $show = false;
+ if(!$browser)
+ $browser = new rcube_browser();
+ eval($prop['browser']);
+ if($test){
+ if($prop['active']){
+ $show = true;
+ }
+ }
+ }
+ if($prop['autoload']){
+ $show = false;
+ }
+ if($prop['protected']){
+ if($prop['protected'] === true){
+ $show = false;
+ }
+ else if(is_string($prop['protected'])){
+ $show = false;
+ }
+ else if(is_array($prop['protected']) && count($prop['protected']) > 0){
+ foreach($prop['protected'] as $domain){
+ if($this->domain == strtolower($domain)){
+ $show = false;
+ break;
+ }
+ }
+ }
+ }
+ if(is_array($prop['skins'])){
+ $prop['skins'] = array_flip($prop['skins']);
+ if(!isset($prop['skins'][$this->rcmail->config->get('skin', 'classic')])){
+ $show = false;
+
+ }
+ }
+ }
+ if($show){
+ $display_section[$section] = true;
+ $defaults = $this->defaults;
+ $restore[$plugin] = array($plugin, $defaults[$section][$plugin]['active']);
+ if($user[$section][$plugin]){
+ $prop = $user[$section][$plugin];
+ }
+ if(is_array($prop['buttons'])){
+ $this->rcmail->output->set_env('pm_buttons_' . $plugin, $prop['buttons']);
+ $this->rcmail->output->set_env('pm_plugin_' . $plugin, $prop['active']);
+ }
+ $fconfig = 'fsavedialog';
+ if($prop['config']){
+ $fconfig = 'fconfig';
+ }
+ $funinstall = '';
+ if($prop['uninstall']){
+ $funinstall = 'funinstall';
+ }
+ $frequest = '';
+ if($prop['uninstall_request']){
+ if($prop['uninstall_force']){
+ $frequest = 'frequestforce';
+ }
+ else{
+ $frequest = 'frequest';
+ }
+ }
+
+ $input = new html_checkbox(array('style' => 'vertical-align: middle;', 'name' => '_plugin_manager_' . $plugin, 'class' => trim($fconfig . ' ' . $funinstall . ' ' . $frequest), 'value' => 1, 'id' => 'pm_chbox_' . $plugin));
+ if(substr($this->labels($prop['label_name']), 0, 1) == '[' && substr($this->labels($prop['label_name']), strlen($this->labels($prop['label_name'])) - 1) == ']'){
+ if(!is_dir('./plugins/' . $plugin)){
+ $li[$plugin].= html::tag('li', array('class' => '_plugin_manager_li', 'id' => 'pmid_' . html::tag('i', null, $plugin)), html::tag('input', array('style' => 'vertical-align: middle;', 'type' => 'checkbox', 'disabled' => 'true')) . html::tag('span', array('style' => 'vertical-align: middle;'), '&nbsp;' . html::tag('i', null, $plugin) . '&nbsp;' . html::tag('font', array('color' => 'red'), '(' . $this->gettext('notinstalled') . ')')));
+ }
+ }
+ else{
+ $li[$this->labels($prop['label_name'])].= html::tag('li', array('class' => 'plugin_manager_li', 'style' => 'white-space: nowrap', 'id' => 'pmid_' . $plugin), $input->show($prop['active']?1:0) . html::tag('span', array('style' => 'vertical-align: middle;'), '&nbsp;' . str_replace(' ', '&nbsp;', $this->labels($prop['label_name']))));
+ }
+ if($prop['label_name']){
+ $this->rcmail->output->add_script('rcmail.add_label({"' . $plugin . '.pluginname":"' . $this->labels($prop['label_name']) . '"});');
+ }
+ if($prop['label_description']){
+ $s = '';
+ if(is_array($prop['label_inject'])){
+ switch($prop['label_inject'][0]){
+ case 'string':
+ $s = $prop['label_inject'][1];
+ break;
+ case 'config':
+ $s = $this->rcmail->config->get($prop['label_inject'][1]);
+ break;
+ case 'session':
+ $s = $_SESSION($prop['label_inject'][1]);
+ break;
+ case 'eval':
+ eval($prop['label_inject'][1]);
+ break;
+ }
+ }
+ $this->rcmail->output->add_script('rcmail.add_label({"' . $prop['label_description'] . '":"' . $this->labels($prop['label_description'], $s) . '"});');
+ }
+ }
+ else{
+ $input = new html_hiddenfield(array('name' => '_plugin_manager_' . $plugin, 'id' => 'pm_chbox_' . $plugin, 'value' => $prop['active']?1:0));
+ $li[$this->labels($prop['label_name'])].= $input->show();
+ }
+ }
+ if($display_section[$section] && count($li) > 0 && $section != 'globalplugins' && $section != 'performance'){
+ ksort($li);
+ $li = implode('', $li);
+ $content .= html::tag('div', array('id' => 'pm_section_' . $section, 'class' => 'pm_section'), html::tag('fieldset', array('class' => 'pm_fieldset'), html::tag('legend', array('class' => 'title'), str_replace(' ', '&nbsp;', $this->labels($section))) . html::tag('ul', array('id' => 'pm_' . $section, 'class' => 'plugin_manager_ul'), $li)));
+ }
+ }
+ }
+ if($content != ''){
+ $args['blocks']['plugin_manager']['options'][0] = array(
+ 'title' => '',
+ 'content' => html::tag('div', array('id' => 'pm_div'), $content)
+ );
+ $input_restore = new html_checkbox(array('id' => 'pm_restore_defaults'));
+ $input_checkall = new html_checkbox(array('id' => 'pm_check_all'));
+ $input_uncheckall = new html_checkbox(array('id' => 'pm_uncheck_all'));
+ $input_config = new html_hiddenfield(array('name' => '_config_plugin', 'id' => 'plugin_manager_config_plugin'));
+ $update = '';
+ $admins = $this->admins;
+ $user = $_SESSION['username'];
+ if(isset($admins[strtolower($user)]) || strtolower($this->get_demo($_SESSION['username'])) == strtolower(sprintf($this->rcmail->config->get('demo_user_account'),""))){
+ $input_update = new html_checkbox(array('id' => 'pm_update_plugins'));
+ $update = '&nbsp;&nbsp;' . $this->gettext('update_plugins') . '&nbsp;' . html::tag('span', array('class' => 'pm_control'), $input_update->show(0));
+ }
+ $args['blocks']['plugin_manager']['options'][2] = array(
+ 'title' => '',
+ 'content' => $this->gettext('restoredefaults') . '&nbsp;' . html::tag('span', array('class' => 'pm_control'), $input_restore->show(0)) .
+ '&nbsp;&nbsp;' . $this->gettext('checkall') . '&nbsp;' . html::tag('span', array('class' => 'pm_control'), $input_checkall->show(0)) .
+ '&nbsp;&nbsp;' . $this->gettext('uncheckall') . '&nbsp;' . html::tag('span', array('class' => 'pm_control'), $input_uncheckall->show(0)) .
+ $input_config->show() .
+ $update .
+ html::tag('div', array('id' => 'jqdialog', 'style' => 'display: none;'))
+ );
+ $this->rcmail->output->set_env('pm_restore', $restore);
+ $this->rcmail->output->add_label(
+ 'plugin_manager.furtherconfig',
+ 'plugin_manager.successfullydeleted',
+ 'plugin_manager.successfullysaved',
+ 'plugin_manager.errorsaving',
+ 'plugin_manager.uninstall',
+ 'plugin_manager.uninstallconfirm',
+ 'plugin_manager.savewarning',
+ 'plugin_manager.areyousure',
+ 'plugin_manager.yes',
+ 'plugin_manager.no',
+ 'plugin_manager.disable',
+ 'plugin_manager.remove'
+ );
+ }
+ else{
+ $user = $_SESSION['username'];
+ $admins = $this->admins;
+ if(isset($admins[strtolower($user)])){
+ $input_update = new html_checkbox(array('id' => 'pm_update_plugins'));
+ $args['blocks']['plugin_manager']['options'][1] = array(
+ 'title' => '',
+ 'content' => $this->gettext('update_plugins') . '&nbsp;' . $input_update->show(0)
+ );
+ }
+ }
+ }
+ else if($args['section'] == 'plugin_manager_update'){
+ $warning = '&_warning=1';
+ if(strtolower($this->get_demo($_SESSION['username'])) == strtolower(sprintf($this->rcmail->config->get('demo_user_account'),""))){
+ $warning = '';
+ }
+ $args['blocks']['plugin_manager_update']['options'][0] = array(
+ 'title' => html::tag('script', array('type' => 'text/javascript'), '$("body").hide(); document.location.href="./?_task=settings&_framed=1&_action=plugin.plugin_manager_update' . $warning . '"'),
+ 'content' => ''
+ );
+ }
+ else if($args['section'] == 'plugin_manager_settings'){
+ if($label = get_input_value('_pmmsg', RCUBE_INPUT_GET)){
+ $this->rcmail->output->show_message($this->gettext($label), 'confirmation');
+ }
+ $args['blocks']['plugin_manager']['name'] = $this->gettext('settings');
+ $checked = false;
+ $readonly = true;
+ if($this->admins[$this->rcmail->user->data['username']] == 0){
+ $readonly = false;
+ }
+ if($this->file_based_config){
+ $checked = true;
+ }
+ $args['blocks']['plugin_manager']['options'][] = array(
+ 'title' => $this->gettext('file_based_config') . $append,
+ 'content' => ($readonly ? html::tag('input', array('type' => 'checkbox', 'disabled' => true, 'checked' => $checked)) : html::tag('input', array('onclick' => '$("#plugin_manager_overlay").show(); document.forms.form.submit()', 'type' => 'checkbox', 'checked' => $checked, 'id' => 'pm_file_based_config', 'name' => '_plugin_manager_file_based_config', 'value' => 1))) .
+ html::tag('small', null, '&nbsp;(' . $this->gettext('serverwide') . ($readonly ? '' : '&nbsp; - ' . html::tag('a', array('href' => 'http://myroundcube.com/myroundcube-plugins/plugin-manager/file-based-administration', 'target' => '_blank'), $this->gettext('advanced_admins'))) . '&nbsp;-&nbsp;' . html::tag('a', array('href' => './?_action=plugin.plugin_manager_show_config&_framed=1'), $this->gettext('show_config')) . ')')
+ );
+ $checked = false;
+ if($this->use_ssl){
+ $checked = true;
+ }
+ $args['blocks']['plugin_manager']['options'][] = array(
+ 'title' => $this->gettext('use_ssl'),
+ 'content' => ($readonly ? html::tag('input', array('type' => 'checkbox', 'disabled' => true, 'checked' => $checked)) : html::tag('input', array('onclick' => '$("#plugin_manager_overlay").show(); document.forms.form.submit()', 'type' => 'checkbox', 'checked' => $checked, 'id' => 'pm_use_ssl', 'name' => '_plugin_manager_use_ssl', 'value' => 1))) .
+ html::tag('small', null, '&nbsp;(' . $this->gettext('serverwide') . ')')
+ );
+ $checked = false;
+ if($this->use_hmail){
+ $checked = true;
+ }
+ $args['blocks']['plugin_manager']['options'][] = array(
+ 'title' => $this->gettext('use_hmail'),
+ 'content' => ($readonly ? html::tag('input', array('type' => 'checkbox', 'disabled' => true, 'checked' => $checked)) : html::tag('input', array('onclick' => '$("#plugin_manager_overlay").show(); document.forms.form.submit()', 'type' => 'checkbox', 'checked' => $checked, 'id' => 'pm_use_hmail', 'name' => '_plugin_manager_hmail', 'value' => 1))) .
+ html::tag('small', null, '&nbsp;(' . $this->gettext('serverwide') . ')')
+ );
+ $checked = false;
+ if($this->load_splitter){
+ $checked = true;
+ }
+ if(!file_exists(INSTALL_PATH . 'plugins/load_splitter/load_splitter.php')){
+ $append = '&nbsp;&minus;&nbsp;' . html::tag('font', array('color' => 'red'), html::tag('a', array('href' => '#', 'onclick' => 'document.location.href="./?_task=settings&_framed=1&_action=plugin.plugin_manager_update&_warning=1"'), 'load_splitter') . '&nbsp;' . $this->gettext('notinstalled'));
+ $disabled = true;
+ }
+ else{
+ $append = '';
+ $disabled = false;
+ }
+ $args['blocks']['plugin_manager']['options'][] = array(
+ 'title' => $this->gettext('load_splitter') . '&nbsp;' . html::tag('small', null, html::tag('a', array('href' => '#', 'onclick' => '$("#pluginselector").val("performance").change();$("html, body").animate({ scrollTop: $("#row_load_splitter").offset().top - 40 }, 500)'), '[load_splitter]')) . '&nbsp;' . $append,
+ 'content' => (($readonly || $disabled) ? html::tag('input', array('type' => 'checkbox', 'disabled' => true, 'checked' => $checked)) : html::tag('input', array('onclick' => '$("#plugin_manager_overlay").show(); document.forms.form.submit()', 'type' => 'checkbox', 'checked' => $checked, 'id' => 'pm_load_splitter', 'name' => '_plugin_manager_load_splitter', 'value' => 1))) .
+ html::tag('small', null, '&nbsp;(' . $this->gettext('serverwide') . ')') . '&nbsp;' . html::tag('a', array('href' => 'https://myroundcube.com/myroundcube-plugins/load_splitter-plugin/load-splitter-service', 'target' => '_blank'), html::tag('small', null, 'MyRoundcube Load Splitter Service'))
+ );
+
+ $checked = false;
+ if($this->compress_html){
+ $checked = true;
+ }
+ $args['blocks']['plugin_manager']['options'][] = array(
+ 'title' => $this->gettext('compress_html'),
+ 'content' => ($readonly ? html::tag('input', array('type' => 'checkbox', 'disabled' => true, 'checked' => $checked)) : html::tag('input', array('onclick' => '$("#plugin_manager_overlay").show(); document.forms.form.submit()', 'type' => 'checkbox', 'checked' => $checked, 'id' => 'pm_compress_html', 'name' => '_plugin_manager_compress_html', 'value' => 1))) .
+ html::tag('small', null, '&nbsp;(' . $this->gettext('serverwide') . ')')
+ );
+ $checked = false;
+ if($this->rcmail->config->get('plugin_manager_about_link', true)){
+ $checked = true;
+ }
+ $args['blocks']['plugin_manager']['options'][] = array(
+ 'title' => $this->gettext('show_about_link'),
+ 'content' => ($readonly ? html::tag('input', array('type' => 'checkbox', 'disabled' => true, 'checked' => $checked)) : html::tag('input', array('onclick' => '$("#plugin_manager_overlay").show(); if($(this).prop("checked")){parent.$(".about-link").show()}else{parent.$(".about-link").hide()}; document.forms.form.submit()', 'type' => 'checkbox', 'checked' => $checked, 'id' => 'pm_about_link', 'name' => '_plugin_manager_about_link', 'value' => 1))) .
+ html::tag('small', null, '&nbsp;(' . $this->gettext('serverwide') . ')')
+ );
+ if($this->rcmail->config->get('support_url')){
+ $checked = false;
+ if($this->rcmail->config->get('plugin_manager_support_link', true)){
+ $checked = true;
+ }
+ $args['blocks']['plugin_manager']['options'][] = array(
+ 'title' => $this->gettext('show_support_link'),
+ 'content' => ($readonly ? html::tag('input', array('type' => 'checkbox', 'disabled' => true, 'checked' => $checked)) : html::tag('input', array('onclick' => '$("#plugin_manager_overlay").show(); if($(this).prop("checked")){parent.$(".support-link").show()}else{parent.$(".support-link").hide()}; document.forms.form.submit()', 'type' => 'checkbox', 'checked' => $checked, 'id' => 'pm_support_link', 'name' => '_plugin_manager_support_link', 'value' => 1))) .
+ html::tag('small', null, '&nbsp;(' . $this->gettext('serverwide') . ')')
+ );
+ }
+ $checked = false;
+ if($this->rcmail->config->get('plugin_manager_myroundcube_watermark', true)){
+ $checked = true;
+ }
+ $args['blocks']['plugin_manager']['options'][] = array(
+ 'title' => $this->gettext('use_myroundcube_watermark'),
+ 'content' => ($readonly ? html::tag('input', array('type' => 'checkbox', 'disabled' => true, 'checked' => $checked)) : html::tag('input', array('onclick' => '$("#plugin_manager_overlay").show(); document.forms.form.submit()', 'type' => 'checkbox', 'checked' => $checked, 'id' => 'pm_myroundcube_watermark', 'name' => '_plugin_manager_myroundcube_watermark', 'value' => 1))) .
+ html::tag('small', null, '&nbsp;(' . $this->gettext('serverwide') . ')')
+ );
+ $checked = false;
+ if($this->rcmail->config->get('plugin_manager_remove_watermark', false)){
+ $checked = true;
+ }
+ $args['blocks']['plugin_manager']['options'][] = array(
+ 'title' => $this->gettext('remove_watermark'),
+ 'content' => ($readonly ? html::tag('input', array('type' => 'checkbox', 'disabled' => true, 'checked' => $checked)) : html::tag('input', array('onclick' => '$("#plugin_manager_overlay").show(); document.forms.form.submit()', 'type' => 'checkbox', 'checked' => $checked, 'id' => 'pm_remove_watermark', 'name' => '_plugin_manager_remove_watermark', 'value' => 1))) .
+ html::tag('small', null, '&nbsp;(' . $this->gettext('serverwide') . ')')
+ );
+ $checked = false;
+ if($this->rcmail->config->get('plugin_manager_show_myrc_messages')){
+ $checked = true;
+ }
+ $args['blocks']['plugin_manager']['options'][] = array(
+ 'title' => $this->gettext('show_myrc_messages'),
+ 'content' => html::tag('input', array('onclick' => '$("#plugin_manager_overlay").show(); document.forms.form.submit()', 'type' => 'checkbox', 'checked' => $checked, 'id' => 'pm_show_myrc_messages', 'name' => '_plugin_manager_show_myrc_messages', 'value' => 1))
+ );
+ $checked = false;
+ if($this->rcmail->config->get('plugin_manager_maintenance_mode')){
+ $checked = true;
+ }
+ $args['blocks']['plugin_manager']['options'][] = array(
+ 'title' => $this->gettext('maintenance_mode') . ':' . html::tag('br') . html::tag('small', null, $this->gettext('maintenance_mode_hint')),
+ 'content' => html::tag('input', array('onclick' => '$("#plugin_manager_overlay").show(); document.forms.form.submit()', 'type' => 'checkbox', 'checked' => $checked, 'id' => 'pm_maintenanceMode', 'name' => '_plugin_manager_maintenance_mode', 'value' => 1)) .
+ html::tag('small', null, '&nbsp;(' . $this->gettext('serverwide') . ')')
+ );
+ $readonly = true;
+ if($this->admins[$this->rcmail->user->data['username']] == 0){
+ $readonly = false;
+ }
+ $checked = false;
+ if($this->rcmail->config->get('plugin_manager_update_notifications')){
+ $checked = true;
+ }
+ $args['blocks']['plugin_manager']['options'][] = array(
+ 'title' => $this->gettext('enable_notifications') . ':' . html::tag('br') . html::tag('small', null, $this->gettext('enable_notifications_note')),
+ 'content' => ($readonly ? html::tag('input', array('type' => 'checkbox', 'disabled' => true, 'checked' => $checked)) : html::tag('input', array('onclick' => '$("#plugin_manager_overlay").show(); document.forms.form.submit()', 'type' => 'checkbox', 'checked' => $checked, 'id' => 'pm_update_notifications', 'name' => '_plugin_manager_update_notifications', 'value' => 1))) .
+ html::tag('small', null, '&nbsp;(' . $this->gettext('serverwide') . ')')
+ );
+ $readonly = true;
+ if($this->admins[$this->rcmail->user->data['username']] == 0){
+ $readonly = false;
+ }
+ $args['blocks']['plugin_manager']['options'][] = array(
+ 'title' => $this->gettext('notifications_cc') . ':' . html::tag('br') . html::tag('small', null, $this->gettext('notifications_cc_note')),
+ 'content' => ($readonly ? html::tag('input', array('type' => 'text', 'disabled' => true, 'value' => $this->rcmail->config->get('plugin_manager_update_notifications_cc'))) : html::tag('input', array('placeholder' => 'john.doh@gmail.com', 'size' => '30', 'type' => 'text', 'id' => 'pm_update_notifications_cc', 'name' => '_plugin_manager_update_notifications_cc', 'value' => $this->rcmail->config->get('plugin_manager_update_notifications_cc'))) .
+ '&nbsp;' . html::tag('small', null, '[' . html::tag('a', array('href' => '#', 'onclick' => '$("#plugin_manager_overlay").show(); document.forms.form.submit()'), $this->gettext('save')) . ']')) .
+ html::tag('small', null, '&nbsp;(' . $this->gettext('serverwide') . ')')
+ );
+ $args['blocks']['plugin_manager']['options'][] = array(
+ 'title' => $this->gettext('translationaccount'),
+ 'content' => html::tag('input', array('type' => 'text', 'size' => 30, 'placeholder' => 'john.doh@gmail.com', 'id' => 'pm_translation_account', 'name' => '_plugin_manager_translation_account', 'value' => $this->rcmail->config->get('plugin_manager_translation_account'))) .
+ '&nbsp;' . html::tag('small', null, '[' . html::tag('a', array('href' => '#', 'onclick' => '$("#plugin_manager_overlay").show(); document.forms.form.submit()'), $this->gettext('save')) . ']' . '&nbsp;' . html::tag('a', array('href' => 'http://myroundcube.com/myroundcube-plugins/real-time-translation', 'target' => '_blank'), $this->gettext('whatsthis'))
+ )
+ );
+ $args['blocks']['plugin_manager']['options'][] = array(
+ 'title' => $this->gettext('translationserver'),
+ 'content' => html::tag('input', array('type' => 'text', 'placeholder' => 'ssl://imap.gmail.com:993', 'size' => 30, 'id' => 'pm_translation_server', 'name' => '_plugin_manager_translation_server', 'value' => $this->rcmail->config->get('plugin_manager_translation_server'))) .
+ '&nbsp;' . html::tag('small', null, '[' . html::tag('a', array('href' => '#', 'onclick' => '$("#plugin_manager_overlay").show(); document.forms.form.submit()'), $this->gettext('save')) . ']')
+ );
+ if(!$this->file_based_config){
+ $options = html::tag('option', null, '--');
+ $plugins_sorted = array();
+ foreach($this->defaults as $section => $plugins){
+ foreach($plugins as $plugin => $props){
+ $plugins_sorted[$plugin] = $section;
+ }
+ }
+ ksort($plugins_sorted);
+ foreach($plugins_sorted as $plugin => $section){
+ if(!in_array($plugin, $this->noselect)){
+ $options .= html::tag('option', array('value' => $section, 'id' => 'option_' . $plugin), $plugin);
+ }
+ }
+ $selector = html::tag('select', array('id' => 'pluginselector', 'onchange' => '$(".row").attr("style", ""); if(!$("#" + $(this).val()).is(":visible")){ $("#tab" + $(this).val()).trigger("click") }; $("#row_" + ($(this).find(":selected").text())).attr("style", "border-left: 7px solid #000000;"); $("html, body").animate({ scrollTop: $("#row_" + $(this).find(":selected").text()).offset().top - 40 }, 500);'), $options);
+ $args['blocks']['plugin_manager']['options'][] = array(
+ 'title' => $this->gettext('select_plugin'),
+ 'content' => $selector
+ );
+ $tabs = '';
+ $divs = '';
+ include INSTALL_PATH . 'plugins/plugin_manager/defaults.inc.php';
+ $defaults = $config['plugin_manager_defaults'];
+ $release_defaults = $defaults;
+ $conf = array();
+ foreach($defaults as $section => $plugins){
+ foreach($plugins as $plugin => $props){
+ $conf[$plugin] = 1;
+ }
+ }
+ $options = array();
+ $sql = 'SELECT * FROM ' . get_table_name('plugin_manager') . ' WHERE ' . $this->q('conf') . '=?';
+ $res = $this->rcmail->db->limitquery($sql, 0, 1, 'defaults');
+ $overwrite = $this->rcmail->db->fetch_assoc($res);
+ if($overwrite['value']){
+ $overwrite = unserialize($overwrite['value']);
+ if(is_array($overwrite)){
+ $defaults = array_merge($defaults, $overwrite);
+ }
+ }
+ $sql = 'SELECT * FROM ' . get_table_name('plugin_manager') . ' WHERE ' . $this->q('conf') . '=?';
+ $res = $this->rcmail->db->limitquery($sql, 0, 1, 'defaults_overwrite');
+ $overwrite = $this->rcmail->db->fetch_assoc($res);
+ if($overwrite['value']){
+ $overwrite = unserialize($overwrite['value']);
+ if(is_array($overwrite)){
+ foreach($overwrite as $section => $plugins){
+ foreach($plugins as $plugin => $props){
+ foreach($props as $key => $val){
+ $defaults[$section][$plugin][$key] = $val;
+ }
+ }
+ }
+ }
+ }
+ foreach($defaults as $section => $plugins){
+ foreach($plugins as $plugin => $props){
+ $options[$plugin] = 1;
+ }
+ }
+ foreach($this->rcmail->config->get('plugins', array()) as $plugin){
+ $options[$plugin] = 1;
+ }
+ $scope = scandir(INSTALL_PATH . 'plugins');
+ $select = array();
+ foreach($scope as $dir){
+ if(file_exists(INSTALL_PATH . 'plugins/' . $dir . '/' . $dir . '.php')){
+ if(!isset($options[$dir])){
+ if(!in_array($dir, $this->skip)){
+ $select[$dir] = 1;
+ }
+ }
+ else if(!isset($conf[$dir])){
+ if(!in_array($dir, $this->skip)){
+ $select[$dir] = -1;
+ }
+ }
+ }
+ }
+ $sel_add = html::tag('option', null, '--');
+ ksort($options);
+ foreach($select as $plugin => $available){
+ if($available == 1){
+ $sel_add .= html::tag('option', array('value' => $plugin), $plugin);
+ }
+ }
+ foreach($this->defaults as $section => $plugins){
+ foreach($select as $plugin => $available){
+ if($available == -1 && isset($plugins[$plugin])){
+ $sel_remove[$section] .= html::tag('option', array('value' => $plugin), $plugin);
+ }
+ }
+ if(function_exists('mb_substr')){
+ $truncate = mb_substr($this->gettext($section), 0, 9);
+ }
+ else{
+ $truncate = substr($this->gettext($section), 0, 9);
+ }
+ $tabs .= html::tag('li', array('onclick' => 'window.location.href="#pm_translation_server"'),
+ html::tag('a', array('href' => '#' . $section, 'onclick' => 'parent.rcmail.env.section="' . $section . '"', 'id' => 'tab' . $section, 'title' => $this->gettext($section)), strlen($this->gettext($section)) > 12 ? $truncate . '...' : $this->gettext($section))
+ );
+ $legend = html::tag('div', array('style' => 'float: left; width: 300px;'), html::tag('span', array('style' => 'font-size: 11px; font-weight: normal;'), '&nbsp;' . $this->gettext('legend') . ':') .
+ html::tag('table', null,
+ html::tag('tr', null,
+ html::tag('td', array('nowrap' => true, 'class' => 'pm_legend'), html::tag('input', array('type' => 'checkbox', 'disabled' => true)) . html::tag('input', array('type' => 'checkbox', 'disabled' => true))) .
+ html::tag('td', array('nowrap' => true, 'class' => 'pm_legend', 'style' => 'font-size: 9px; font-weight: normal; color: #188c18;'), $this->gettext('plugindisabledbydefault'))
+ ) .
+ html::tag('tr', null,
+ html::tag('td', array('class' => 'pm_legend'), html::tag('input', array('type' => 'checkbox', 'disabled' => true, 'checked' => true)) . html::tag('input', array('type' => 'checkbox', 'disabled' => true))) .
+ html::tag('td', array('class' => 'pm_legend', 'nowrap' => true, 'style' => 'font-size: 9px; font-weight: normal; color: #188c18;'), $this->gettext('pluginenabledbydefault'))
+ ) .
+ html::tag('tr', null,
+ html::tag('td', array('class' => 'pm_legend'), html::tag('input', array('type' => 'checkbox', 'disabled' => true)) . html::tag('input', array('type' => 'checkbox', 'disabled' => true, 'checked' => true))) .
+ html::tag('td', array('nowrap' => true, 'class' => 'pm_legend', 'style' => 'font-size: 9px; font-weight: normal; color: #8a8a8a;'), $this->gettext('loads_never'))
+ ) .
+ html::tag('tr', null,
+ html::tag('td', array('class' => 'pm_legend'), html::tag('input', array('type' => 'checkbox', 'disabled' => true, 'checked' => true)) . html::tag('input', array('type' => 'checkbox', 'disabled' => true, 'checked' => true))) .
+ html::tag('td', array('nowrap' => true, 'class' => 'pm_legend', 'style' => 'font-size: 9px; font-weight: normal; color: #ff1b1b;'), $this->gettext('pluginmandatory'))
+ )
+ )
+ );
+ $rows = array();
+ $skins = array();
+ $files = scandir(INSTALL_PATH . 'skins');
+ foreach($files as $file){
+ if(is_dir(INSTALL_PATH . 'skins/' . $file) && $file != '.' && $file != '..'){
+ $skins[] = $file;
+ }
+ }
+ $skinoptions = html::tag('option', array('value' => 'all'), $this->gettext('all'));
+ $combinations = '';
+ foreach($skins as $skin){
+ if($combinations){
+ $combinations .= '|';
+ }
+ $combinations .= $skin;
+ if($combinations != implode('|', $skins)){
+ $skinoptions .= html::tag('option', array('value' => $combinations), $combinations);
+ }
+ }
+ foreach($plugins as $plugin => $props){
+ if($props['autoload']){
+ continue;
+ }
+ $labels = array();
+ $name = $this->gettext($plugin . '.pluginname');
+ $title = $this->gettext($plugin . '.plugindescription');
+ if(substr($name, 0, 1) == '['){
+ $name = $this->gettext($plugin . '_pluginname');
+ $title = $this->gettext($plugin . '_plugindescription');
+ }
+ if(substr($name, 0, 1) == '['){
+ if(file_exists(INSTALL_PATH . 'plugins/' . $plugin . '/localization/en_US.inc')){
+ include INSTALL_PATH . 'plugins/' . $plugin . '/localization/en_US.inc';
+ $en_us_labels = $labels;
+ if(file_exists(INSTALL_PATH . 'plugins/' . $plugin . '/localization/' . $_SESSION['language'] . '.inc')){
+ include INSTALL_PATH . 'plugins/' . $plugin . '/localization/' . $_SESSION['language'] . '.inc';
+ $labels = array_merge($en_us_labels, $labels);
+ }
+ if(isset($labels['pluginname'])){
+ $name = $labels['pluginname'];
+ }
+ if(isset($labels['plugindescription'])){
+ $title = $labels['plugindescription'];
+ }
+ else{
+ $title = '';
+ }
+ }
+ else{
+ $title = '';
+ }
+ }
+ $docs = false;
+ if(substr($name, 0, 1) == '['){
+ $name = $plugin . '&nbsp;' . html::tag('small', null, html::tag('span', null, '[') . html::tag('a', array('href' =>
+ "mailto:dev-team@myroundcube.com?subject=Third party plugin localization (" . $plugin . ")&body=Please add localization labels to the next Plugin Manager localization update.%0D%0A%0D%0APlugin: " . $plugin . "%0D%0A%0D%0ALanguage: en_US (English please)%0D%0APlugin name:%0D%0APlugin description:"
+ ),
+ html::tag('span', array('style' => 'color: #ff1b1b;'), $this->gettext('localizationmissing'))) . html::tag('span', null, ']')
+ );
+ }
+ if(is_array($release_defaults[$section][$plugin])){
+ $docs = true;
+ }
+ $isactive = $props['active'] ? true : false;
+ $isprotected = $props['protected'] ? true : false;
+ if(is_string($props['protected'])){
+ $isprotected = $props['protected'];
+ }
+ if($disable = get_input_value('_plugin', RCUBE_INPUT_GET)){
+ if($disable == $plugin){
+ $isactive = false;
+ $isprotected = true;
+ if(is_array($props['protected'])){
+ $isprotected = $props['protected'];
+ }
+ }
+ }
+ $status = false;
+ $bind = '';
+ $unbind = '';
+ $linked = '';
+ $error = '';
+ if(class_exists('db_config') && $this->defaults['globalplugins']['db_config']['active'] && RCMAIL_VERSION > '0.8.6'){
+ $isconfigured = true;
+ if(file_exists(INSTALL_PATH . 'plugins/' . $plugin . '/config.inc.php.dist')){
+ $sql = 'SELECT * FROM ' . get_table_name('db_config') . ' WHERE ' . $this->q('env') . '=?';
+ $res = $this->rcmail->db->limitquery($sql, 0, 1, $plugin);
+ if(!is_array($this->rcmail->db->fetch_assoc($res))){
+ if($plugin != 'global_config' && file_exists(INSTALL_PATH . 'plugins/global_config/config.inc.php')){
+ if(!file_exists(INSTALL_PATH . 'plugins/' . $plugin . 'config.inc.php')){
+ $config = array();
+ $rcmail_config = array();
+ include INSTALL_PATH . 'plugins/' . $plugin . '/config.inc.php.dist';
+ if(is_array($rcmail_config)){
+ $config = $rcmail_config;
+ $rcmail_config = array();
+ }
+ $defconf = $config;
+ $config = array();
+ include INSTALL_PATH . 'plugins/global_config/config.inc.php';
+ if(file_exists(INSTALL_PATH . 'plugins/' . $plugin . '/config.inc.php')){
+ include INSTALL_PATH . 'plugins/' . $plugin . '/config.inc.php';
+ if(is_array($rcmail_config)){
+ $config = $rcmail_config;
+ }
+ }
+ foreach($defconf as $key => $value){
+ if(isset($config[$key])){
+ $isconfigured = true;
+ break;
+ }
+ else{
+ $isconfigured = false;
+ }
+ }
+ }
+ }
+ }
+ $democlick = '';
+ if(strtolower($this->get_demo($_SESSION['username'])) == strtolower(sprintf($this->rcmail->config->get('demo_user_account'),""))){
+ $democlick = 'rcmail.display_message("' . $this->gettext('demoaccount') . '", "error"); return false';
+ }
+ if(!$isconfigured){
+ $error .= '&nbsp;' . html::tag('small', array('style' => 'color: #ff1b1b;'), '[' . html::tag('a', array('style' => 'color: #ff1b1b;', 'onclick' => $democlick, 'href' => './?_action=plugin.plugin_manager_show_config&_framed=1&_plugin=' . $plugin), $this->gettext('notconfigured')) . ']');
+ }
+ else if(file_exists(INSTALL_PATH . 'plugins/' . $plugin . '/config.inc.php.dist')){
+ $error .= '&nbsp;' . html::tag('small', array('style' => 'color: #188c18;'), '[' . html::tag('a', array('style' => 'color: #188c18;', 'onclick' => $democlick, 'href' => './?_action=plugin.plugin_manager_edit_config&_framed=1&_plugin=' . $plugin), $this->gettext('editconfig')) . ']');
+ }
+ }
+ }
+ if($this->defaults['globalplugins']['mysqladmin']['active'] && class_exists('mysqladmin') && class_exists($plugin) && method_exists($plugin, 'about') && strtolower($this->rcmail->config->get('mysql_admin')) == strtolower($this->rcmail->user->data['username'])){
+ /* PHP 5.2.x workaround for $plugin::about() */
+ $class = new $plugin(false);
+ $sqladmin = $class->about(array('sqladmin'));
+ if($sqladmin['sqladmin']){
+ $sqladmin = $sqladmin['sqladmin'];
+ $error .= '&nbsp;' . html::tag('small', array('style' => 'color: #188c18;'), '[' . html::tag('a', array('style' => 'color: #188c18;', 'onclick' => 'var temp = document.location.href.split(\'&_expand\'); rcmail.set_cookie(\'PMA_referrer\', temp[0] + \'&_expand=' . $plugin . '\');', 'href' => './?_action=plugin.mysqladmin&pma_login=1&db=' . $sqladmin[0] . '&dbt=' . $sqladmin[1]), $this->gettext('PHPMyAdmin')) . ']');
+ }
+ }
+ if(class_exists($plugin) && !method_exists($plugin, 'about')){
+ $error .= '&nbsp;' . html::tag('small', array('style' => 'color: #8a8a8a;'), '[' . html::tag('i', null, str_replace('.', '', $this->gettext('thirdparty'))) . ']');
+ }
+ if($plugin == 'load_splitter'){
+ $isactive = $this->load_splitter;
+ $disabled = true;
+ }
+ else{
+ $disabled = false;
+ }
+ $active = html::tag('td', array('align' => 'center'), html::tag('input', array('onclick' => '$("#plugin_manager_overlay").show(); document.forms.form.action = document.forms.form.action + "?_plugin=' . $plugin . '"; document.forms.form.submit()', 'name' => '_plugin_manager_defaults[' . $section . '][' . $plugin . '][active]', 'value' => 1, 'checked' => $isactive ? true : false, 'style' => 'display:' . ($disabled ? 'none' : 'block'), 'type' => 'checkbox')));
+ if(is_string($release_defaults[$section][$plugin]['protected']) && !is_string($props['protected'])){
+ if(substr($this->gettext($release_defaults[$section][$plugin]['config_label']), 0, 1) != '['){
+ $bind = '&nbsp;' . html::tag('small', null, '[' . html::tag('a', array('title' => $this->gettext('loads_linked') . ': ' . $this->gettext($release_defaults[$section][$plugin]['config_label']), 'href' => './?_task=settings&_action=plugin.plugin_manager_bind&_section=' . $section . '&_target=' . $plugin), $this->gettext('bind')) . ']');
+ $active = html::tag('td');
+ }
+ }
+ if(is_string($props['protected'])){
+ $linked = $this->gettext('loads_linked') . ':' . html::tag('br') . $this->gettext($section) . html::tag('br') . '-&nbsp';
+ $status = $props['config_label'] ? $props['config_label'] : $props['protected'];
+ if(substr($this->gettext($status), 0, 1) == '['){
+ $this->rcmail->output->add_script('document.location.href="./?_task=settings&_action=plugin.plugin_manager_unbind&_section=' . $section . '&_target=' . $plugin . '";', 'docready');
+ }
+ $unbind = '&nbsp;' . html::tag('small', null, '[' . html::tag('a', array('href' => './?_task=settings&_action=plugin.plugin_manager_unbind&_section=' . $section . '&_target=' . $plugin), $this->gettext('unbind')) . ']');
+ $color = '#188c18';
+ $active = html::tag('td', array('align' => 'center'), html::tag('input', array('name' => '_plugin_manager_defaults[' . $section . '][' . $plugin . '][active]', 'value' => 0, 'type' => 'hidden')));
+ }
+ else if($isactive && $isprotected){
+ $status = 'loads_always';
+ $color = '#ff1b1b';
+ }
+ else if((!$isactive && $isprotected) || (($section == 'globalplugins' || $section == 'performance') && !$isactiv && !$isprotected)){
+ $status = 'loads_never';
+ $color = '#8a8a8a';
+ }
+ else{
+ $status = 'loads_by_user';
+ $color = '#188c18';
+ }
+ if($section == 'globalplugins' || $section == 'performance' || $bind){
+ if($bind){
+ $protected = html::tag('td');
+ }
+ else{
+ $protected = html::tag('td', array('align' => 'center'), html::tag('input', array('disabled' => true, 'checked' => true, 'type' => 'checkbox')));
+ }
+ $protected .= html::tag('input', array('name' => '_plugin_manager_defaults[' . $section . '][' . $plugin . '][protected]', 'value' => 1, 'type' => 'hidden'));
+ }
+ else{
+ if(is_string($isprotected)){
+ $protected = html::tag('td', array('align' => 'center'), html::tag('input', array('name' => '_plugin_manager_defaults[' . $section . '][' . $plugin . '][protected]', 'value' => $isprotected, 'type' => 'hidden')));
+ }
+ else{
+ $protected = html::tag('td', array('align' => 'center'), html::tag('input', array('onclick' => '$("#plugin_manager_overlay").show(); document.forms.form.action = document.forms.form.action + "?_plugin=' . $plugin . '"; document.forms.form.submit()', 'name' => '_plugin_manager_defaults[' . $section . '][' . $plugin . '][protected]', 'value' => 1, 'checked' => $isprotected ? true : false, 'type' => 'checkbox')));
+ }
+ }
+ if(!class_exists($plugin)){
+ $this->require_plugin($plugin);
+ }
+ if(method_exists($plugin, 'about')){
+ $class = new $plugin(false);
+ $requirements = $class->about();
+ $required = $requirements['db_version'];
+ if(is_array($required)){
+ $required = implode('|', $required);
+ $sql = 'SELECT * FROM ' . get_table_name('system') . ' WHERE ' . $this->q('name') . '=?';
+ $res = $this->rcmail->db->limitquery($sql, 0, 1, 'myrc_' . $plugin);
+ $db = $this->rcmail->db->fetch_assoc($res);
+ $db = $db['value'];
+ if($db != $required && strtolower($this->get_demo($_SESSION['username'])) != strtolower(sprintf($this->rcmail->config->get('demo_user_account'),""))){
+ if(!$isactive && !$isprotected){
+ $isprotected = true;
+ if(is_string($isprotected)){
+ $protected = html::tag('td', array('align' => 'center'), html::tag('input', array('name' => '_plugin_manager_defaults[' . $section . '][' . $plugin . '][protected]', 'value' => 1, 'type' => 'hidden')));
+ }
+ else{
+ $protected = html::tag('td', array('align' => 'center'), html::tag('input', array('onclick' => '$("#plugin_manager_overlay").show(); document.forms.form.action = document.forms.form.action + "?_plugin=' . $plugin . '"; document.forms.form.submit()', 'name' => '_plugin_manager_defaults[' . $section . '][' . $plugin . '][protected]', 'value' => 1, 'checked' => true, 'type' => 'checkbox')));
+ }
+ $this->rcmail->output->add_script('$("#plugin_manager_overlay").show(); document.forms.form.submit();', 'docready');
+ }
+ $status = 'errordb';
+ $color = '#ff1b1b';
+ $temp = explode('.', RCMAIL_VERSION);
+ if(($temp[0] == 0 && $temp[1] > 8) || $temp[0] > 0){
+ if($isactive && $isprotected){
+ if($class->task){
+ foreach($this->rctasks as $task){
+ if(preg_match('/^('.$class->task.')$/i', $task)){
+ $link = './?_task=' . $task . '&_plugin_manager_settings_section=' . $section;
+ break;
+ }
+ }
+ }
+ else{
+ $link = './?_task=settings&_plugin_manager_settings_section=' . $section;
+ }
+ $_SESSION['db_version_lock'] = true;
+ $status = 'errordb8';
+ $error = html::tag('br') . html::tag('a', array('href' => 'javascript:void(0)', 'onclick' => 'window.setTimeout(\'parent.location.href="' . $link . '"\', 500);'), $this->gettext('dbautomatically'));
+ $this->rcmail->output->show_message('plugin_manager.dbautomatically', 'notice');
+ }
+ }
+ else{
+ $status = 'errordb8';
+ $error = html::tag('br') . html::tag('a', array('href' => 'http://myroundcube.com/myroundcube-plugins/faqs/myroundcube-plugins-database-versioning-support', 'target' => '_blank'), $this->gettext('dbmanually'));
+ }
+ }
+ }
+ $required = $requirements['requirements']['required_plugins'];
+ if(is_array($required)){
+ $missing = array();
+ foreach($required as $key => $val){
+ if(!file_exists(INSTALL_PATH . 'plugins/' . $key . '/' . $key . '.php')){
+ $missing[] = $key;
+ }
+ }
+ if(count($missing) > 0){
+ $active = html::tag('td', null, '&nbsp;');
+ $protected = html::tag('td', null, '&nbsp;');
+ $status = 'errorplugin';
+ $color = '#ff1b1b';
+ if(RCMAIL_VERSION > $this->stable){
+ $branch = 'dev';
+ }
+ else{
+ $branch = 'stable';
+ }
+ $error = '&nbsp;(' . html::tag('a', array('href' => 'javascript:void(0)', 'onclick' => 'document.location.href="./?_task=settings&_action=plugin.plugin_manager_update&_framed=1&_branch=' . $branch . '"'), implode(', ', $missing)) . ')';
+ }
+ }
+ $required = $requirements['requirements']['Roundcube'];
+ if(isset($required)){
+ if(RCMAIL_VERSION < $required){
+ $active = html::tag('td', null, html::tag('input', array('name' => '_plugin_manager_defaults[' . $section . '][' . $plugin . '][active]', 'value' => 0, 'type' => 'hidden')));
+ $protected = html::tag('td', null, html::tag('input', array('name' => '_plugin_manager_defaults[' . $section . '][' . $plugin . '][protected]', 'value' => 1, 'type' => 'hidden')));
+ $status = 'errorrcversion';
+ $color = '#ff1b1b';
+ $error = '&nbsp;v' . $required . '&nbsp;' . $this->gettext('ornewer') . html::tag('br') . html::tag('small', array('style' => 'color: #000000;'), '[' . html::tag('a', array('href' => 'http://roundcube.net/download', 'target' => '_blank'), $this->gettext('official_releases')) . ']');
+ if($isactive || !$isprotected){
+ $this->rcmail->output->add_script('$("#plugin_manager_overlay").show(); document.forms.form.submit();', 'docready');
+ }
+ }
+ }
+ $required = $requirements['requirements']['PHP'];
+ if(isset($required)){
+ $temp = explode('+', $required);
+ $module = trim($temp[1]);
+ if(strtolower($module) == 'curl'){
+ if(!function_exists('curl_init')){
+ $active = html::tag('td', null, html::tag('input', array('name' => '_plugin_manager_defaults[' . $section . '][' . $plugin . '][active]', 'value' => 0, 'type' => 'hidden')));
+ $protected = html::tag('td', null, html::tag('input', array('name' => '_plugin_manager_defaults[' . $section . '][' . $plugin . '][protected]', 'value' => 1, 'type' => 'hidden')));
+ $status = 'errorphpcurl';
+ $color = '#ff1b1b';
+ $error = '&nbsp;' . html::tag('small', array('style' => 'color: #000000;'), '[' . html::tag('a', array('href' => 'http://php.net/manual/en/book.curl.php', 'target' => '_blank'), 'PHP cURL') . ']');
+ if($isactive || !$isprotected){
+ $this->rcmail->output->add_script('$("#plugin_manager_overlay").show(); document.forms.form.submit();', 'docready');
+ }
+ }
+ }
+ if(strtolower($module) == 'finfo'){
+ if(!function_exists('finfo_open')){
+ $active = html::tag('td', null, html::tag('input', array('name' => '_plugin_manager_defaults[' . $section . '][' . $plugin . '][active]', 'value' => 0, 'type' => 'hidden')));
+ $protected = html::tag('td', null, html::tag('input', array('name' => '_plugin_manager_defaults[' . $section . '][' . $plugin . '][protected]', 'value' => 1, 'type' => 'hidden')));
+ $status = 'errorphpcurl';
+ $status = 'errorphpfinfo';
+ $color = '#ff1b1b';
+ $error = '&nbsp;' . html::tag('small', array('style' => 'color: #000000;'), '[' . html::tag('a', array('href' => 'http://php.net/manual/en/book.fileinfo.php', 'target' => '_blank'), 'PHP finfo') . ']');
+ if($isactive || !$isprotected){
+ $this->rcmail->output->add_script('$("#plugin_manager_overlay").show(); document.forms.form.submit();', 'docready');
+ }
+ }
+ }
+ $php = trim($temp[0]);
+ if(PHP_VERSION < $php){
+ $active = html::tag('td', null, html::tag('input', array('name' => '_plugin_manager_defaults[' . $section . '][' . $plugin . '][active]', 'value' => 0, 'type' => 'hidden')));
+ $protected = html::tag('td', null, html::tag('input', array('name' => '_plugin_manager_defaults[' . $section . '][' . $plugin . '][protected]', 'value' => 1, 'type' => 'hidden')));
+ $status = 'errorphpversion';
+ $color = '#ff1b1b';
+ $error = '&nbsp;v' . $required;
+ if($isactive || !$isprotected){
+ $this->rcmail->output->add_script('$("#plugin_manager_overlay").show(); document.forms.form.submit();', 'docready');
+ }
+ }
+ }
+ }
+ $skins = html::tag('td', null, html::tag('select', array('id' => 'skin_sel_' . $plugin , 'name' => '_skins[' . $section . '][' . $plugin . ']', 'onchange' => 'document.forms.form.submit()'), $skinoptions));
+ if(is_array($props['skins'])){
+ $skins .= html::tag('script', array('type' => 'text/javascript'), '$("#skin_sel_' . $plugin . '").val("' . implode('|', $props['skins']) . '");');
+ }
+ if($plugin == 'db_config'){
+ $skey = '_03';
+ if($this->admins[$this->rcmail->user->data['username']] != 0){
+ $active = html::tag('td', array('align' => 'center', 'colspan' => 3),
+ html::tag('span', array('style' => 'font-weight: normal; color: #8a8a8a;'), $this->gettext('systemadmin') . '&nbsp;(' . $this->gettext('serverwide') . ')') .
+ html::tag('input', array('name' => '_plugin_manager_defaults[' . $section . '][' . $plugin . '][active]', 'value' => $this->defaults['globalplugins']['db_config']['active'], 'type' => 'hidden')) .
+ html::tag('input', array('name' => '_plugin_manager_defaults[' . $section . '][' . $plugin . '][protected]', 'value' => 1, 'type' => 'hidden'))
+ );
+ $protected = '';
+ $skins = '';
+ if($isactive && $isprotected){
+ $status = 'loads_always';
+ $color = '#ff1b1b';
+ }
+ else if((!$isactive && $isprotected)){
+ $status = 'loads_never';
+ $color = '#8a8a8a';
+ }
+ }
+ }
+ else if(substr($this->gettext($plugin . '.pluginname'), 0, 1) != '['){
+ $skey = $this->gettext($plugin . '.pluginname');
+ }
+ else if(substr($this->gettext('plugin_manager.' . $plugin . '_pluginname'), 0, 1) != '['){
+ $skey = $this->gettext('plugin_manager.' . $plugin . '_pluginname');
+ }
+ else{
+ $skey = $plugin;
+ }
+ $rows[strtolower($skey)] = html::tag('a', array('name' => $plugin), '') . html::tag('tr', array('id' => 'row_' . $plugin, 'class' => 'row'),
+ html::tag('td', array('style' => 'font-weight: normal;', 'class' => 'pm_config'), html::tag('span', array('title' => $title), $name) . ' ' . ($docs ? html::tag('small', null, '[' . html::tag('a', array('href' => 'http://myroundcube.com/myroundcube-plugins#'. $plugin, 'target' => '_blank', 'title' => $this->gettext('documentation')), $plugin) . ']') : '')) .
+ $active .
+ $protected .
+ $skins .
+ html::tag('td', array('style' => 'font-weight: normal; color: ' . $color), ($status ? ($linked . $this->gettext($status) . $unbind . $bind . $error) : '&nbsp;'))
+ );
+ }
+ $rows['_0'] = html::tag('tr', array('id' => 'row_new_plugin_' . $section, 'class' => 'row'),
+ html::tag('td', array('width' => '20%'), html::tag('select', array('onchange' => 'document.forms.form.submit()', 'name' => '_new_plugin_name[' . $section . ']'), $sel_add)) .
+ html::tag('td', array('width' => '30%', 'colspan' => 3, 'align' => 'center', 'style' => 'font-weight: normal; color: #8a8a8a;'), $this->gettext('addplugin')) .
+ html::tag('td', array('width' => '50%'), '&nbsp;')
+ );
+ if($sel_remove[$section]){
+ $sel_remove[$section] = html::tag('option', null, '--') . $sel_remove[$section];
+ $rows['_1'] = html::tag('tr', array('id' => 'row_remove_plugin_' . $section, 'class' => 'row'),
+ html::tag('td', array('width' => '20%'), html::tag('select', array('onchange' => 'document.forms.form.submit()', 'name' => '_remove_plugin_name[' . $section . ']'), $sel_remove[$section])) .
+ html::tag('td', array('width' => '30%', 'colspan' => 3, 'align' => 'center', 'style' => 'font-weight: normal; color: #8a8a8a;'), $this->gettext('removeplugin')) .
+ html::tag('td', array('width' => '50%'), '&nbsp;')
+ );
+ }
+ ksort($rows);
+ $divs .= html::tag('div', array('id' => $section),
+ html::tag('table', array('class' => 'propform', 'width' => '100%'),
+ html::tag('tr', null,
+ html::tag('th', array('width' => '20%', 'style' =>'font-weight: normal;'), $this->gettext('plugin')) .
+ html::tag('th', array('width' => '10%', 'style' =>'font-weight: normal;'), $this->gettext('enabled')) .
+ html::tag('th', array('width' => '10%', 'style' =>'font-weight: normal;'), $this->gettext('protected')) .
+ html::tag('th', array('width' => '10%', 'align' => 'left', 'style' => 'font-weight: normal;'), '&nbsp;&nbsp;' . $this->gettext('skins')) .
+ html::tag('th', array('width' => '50%', 'align' => 'left', 'style' => 'font-weight: normal;'), '&nbsp;&nbsp;' . $this->gettext('status'))
+ ) . implode('', $rows)
+ ) . $legend
+ );
+ }
+ $html = html::tag('div', array('id' => 'plugin_manager_defaults', 'style' => 'display: none;'),
+ html::tag('ul', null,
+ html::tag('style', array('type' => 'text/css'), '.ui-tabs .ui-tabs-nav li a { font-size: 11px; } table.propform td.title { white-space: normal; }') . $tabs . $divs
+ )
+ );
+ $args['blocks']['plugin_manager']['options'][] = array(
+ 'title' => $html,
+ 'content' => html::tag('span', array('id' => 'remove'))
+ );
+ $skin = $this->rcmail->config->get('skin');
+ if(!file_exists($this->home . '/skins/' . $skin . '/plugin_manager.css')) {
+ $skin = "classic";
+ }
+ $this->include_stylesheet('skins/' . $skin . '/plugin_manager.css');
+ $this->api->output->add_footer(html::tag('div', array('id' => 'plugin_manager_overlay')));
+ }
+ $admins = array_flip($this->admins);
+ $systemadmin = '$(".boxtitle").html($(".boxtitle").html() + "&nbsp;&raquo;&nbsp;' . $this->gettext('systemadmin') . ':&nbsp;' . $admins[0];
+ if($admins[0] != $this->rcmail->user->data['username']){
+ $systemadmin .= '&nbsp;&raquo;&nbsp;' . $this->gettext('admin') . ':&nbsp;' . $admins[0];
+ }
+ $systemadmin .= '&nbsp;&raquo;&nbsp;<a href=\'javascript:window.scrollTo(0, 0)\'>' . $this->gettext('serverconfiguration') . '</a>&nbsp;|&nbsp;<a onclick=\'return pluginsconfiguration()\' href=\'#pm_translation_server\'>' . $this->gettext('pluginsconfiguration') . '</a>';
+ $systemadmin .= '")';
+ $this->rcmail->output->add_script(
+ 'function pluginsconfiguration(){
+ if($("#plugin_manager_defaults").tabs("option", "selected") == -1){
+ $("#tabglobalplugins").trigger("click");
+ return true;
+ }
+ }
+ $(".mainaction").hide();
+ $("#remove").parent().remove();
+ $("#plugin_manager_defaults").parent().attr("colspan", 2);
+ $("#plugin_manager_defaults").tabs({ collapsible: true, active: false });
+ if(parent.rcmail.env.section){
+ $("#tab" + parent.rcmail.env.section).trigger("click");
+ }
+ $("#plugin_manager_defaults").show();
+ $("td.title").css("width", "300px");
+ ' . $systemadmin,
+ 'foot'
+ );
+ if($plugin = get_input_value('_plugin', RCUBE_INPUT_GET)){
+ if(strtolower($this->get_demo($_SESSION['username'])) != strtolower(sprintf($this->rcmail->config->get('demo_user_account'),""))){
+ $this->rcmail->output->add_script('document.forms.form.action = document.forms.form.action + "?_plugin=' . $plugin . '"; document.forms.form.submit();', 'docready');
+ }
+ }
+ if($plugin = get_input_value('_expand', RCUBE_INPUT_GET)){
+ $this->rcmail->output->add_script('$("#option_' . $plugin . '").prop("selected", true); $("#pluginselector").change();', 'docready');
+ }
+ }
+ else if($args['section'] == 'plugin_manager_admins'){
+ $this->admins = array();
+ $args['blocks']['plugin_manager']['name'] = $this->gettext('plugin_manager_admins');
+ $content = '';
+ $args['blocks']['plugin_manager']['options'][] = array(
+ 'title' => '',
+ 'content' => html::tag('div', array('id' => 'pm_div_0'), html::tag('input', array('type' => 'hidden', 'size' => 35, 'id' => 'pma_label_0', 'name' => '_plugin_manager_admins[]', 'value' => ''))) .
+ '&nbsp;' . html::tag('small', null, html::tag('a', array('href' => 'javascript:var user = prompt("' . $this->gettext('username') . '", $("#pma_label_0").val()); if(user) {$("#pma_label_0").val(user); document.forms.form.submit()}'), $this->gettext('add')))
+ );
+ $sql = 'SELECT ' . $this->q('value') . ' FROM ' . get_table_name('plugin_manager') . ' WHERE ' . $this->q('conf') . '=?';
+ $res = $this->rcmail->db->limitquery($sql, 0, 1, 'admins');
+ if($res){
+ $admins = $this->rcmail->db->fetch_assoc($res);
+ if($admins = unserialize($admins['value'])){
+ $this->admins = array_flip($admins);
+ }
+ }
+ foreach($this->admins as $admin => $val){
+ if($val == 0) continue;
+ $isadmin = false;
+ $isshared = false;
+ $sql = 'SELECT ' . $this->q('preferences') . ' FROM ' . get_table_name('users') . ' WHERE ' . $this->q('username') . '=? AND ' . $this->q('mail_host') . '=?';
+ if($res = $this->rcmail->db->limitquery($sql, 0, 1, $admin, $_SESSION['storage_host'])){
+ $prefs = $this->rcmail->db->fetch_assoc($res);
+ if($prefs = unserialize($prefs['preferences'])){
+ if($prefs['plugin_manager_hash'] && $prefs['plugin_manager_hash'] == $this->rcmail->config->get('plugin_manager_hash')){
+ $isadmin = true;
+ }
+ if($prefs['customer_id'] && $prefs['customer_id'] == $this->rcmail->config->get('customer_id')){
+ $isshared = true;
+ }
+ else if($prefs['shared_customer_id'] && ($prefs['customer_id'] != $prefs['shared_customer_id']) && ($prefs['shared_customer_id'] == $this->rcmail->config->get('customer_id'))){
+ $isshared = true;
+ }
+ }
+ }
+ $args['blocks']['plugin_manager']['options'][] = array(
+ 'title' => html::tag('label', array('for' => 'pma_label_' . $val), html::tag('b', null, html::tag('i', null, $admin))),
+ 'content' => html::tag('div', array('id' => 'pm_div_' . $val), html::tag('input', array('type' => 'hidden', 'size' => 35, 'id' => 'pma_label_' . $val, 'name' => '_plugin_manager_admins[]', 'value' => $admin))) .
+ '&nbsp;' . html::tag('small', null, html::tag('a', array('href' => 'javascript:$("#pma_label_' . $val . '").val("");document.forms.form.submit()'), $this->gettext('delete')) . '&nbsp;|&nbsp;' .
+ html::tag('a', array('href' => 'javascript:var user = prompt("' . $this->gettext('username') . '", $("#pma_label_' . $val . '").val()); if(user) {$("#pma_label_' . $val . '").val(user); document.forms.form.submit()}'), $this->gettext('edit')))
+ );
+ $args['blocks']['plugin_manager']['options'][] = array(
+ 'title' => html::tag('label', array('for' => 'pmc_label_' . $val), $this->gettext('submenuprefix') . '&nbsp;' . $this->gettext('allow_plugins_configuration')),
+ 'content' => html::tag('div', array('id' => 'pm_div_config_' . $val), html::tag('input', array('checked' => $isadmin, 'onclick' => 'document.forms.form.submit()', 'id' => 'pmc_label_' . $val, 'type' => 'checkbox', 'name' => '_plugin_manager_config[' . $admin . ']', 'value' => 1)))
+ );
+ $args['blocks']['plugin_manager']['options'][] = array(
+ 'title' => html::tag('label', array('for' => 'pmi_label_' . $val), $this->gettext('submenuprefix') . '&nbsp;' . $this->gettext('share_credits')),
+ 'content' => html::tag('div', array('id' => 'pm_div_customer_' . $val), html::tag('input', array('checked' => $isshared, 'onclick' => 'document.forms.form.submit()', 'id' => 'pmi_label_' . $val, 'type' => 'checkbox', 'name' => '_plugin_manager_customer[' . $admin . ']', 'value' => 1)))
+ );
+ }
+ $this->rcmail->output->add_script('$(".mainaction").hide(); $(".boxtitle").html($(".boxtitle").html() + "&nbsp;&raquo;&nbsp;' . $this->gettext('systemadmin') . ':&nbsp;' . $this->rcmail->user->data['username'] . '")', 'docready');
+ }
+ else if($args['section'] == 'plugin_manager_customer'){
+ $this->include_script('plugin_manager.js');
+ $this->rcmail->output->add_label(
+ 'plugin_manager.creditsupdated'
+ );
+ $customer_id = $this->rcmail->config->get('customer_id');
+ if(!$customer_id){
+ $customer_id = $this->getCustomerID();
+ if(is_string($customer_id) && strlen($customer_id) == 32){
+ $a_prefs['customer_id'] = $customer_id;
+ $this->rcmail->user->save_prefs($a_prefs);
+ }
+ else{
+ $args['blocks']['plugin_manager_customer']['options'][0] = array(
+ 'title' => $this->gettext('servicenotavailable'),
+ 'content' => ''
+ );
+ $this->rcmail->output->add_script('if(self.location.href != parent.location.href){$(".mainaction").remove()}', 'docready');
+ }
+ }
+ if($_GET['_framed']){
+ $params = array('_customer_id' => $this->rcmail->config->get('customer_id'));
+ $httpConfig['method'] = 'POST';
+ $httpConfig['target'] = $this->svn . '?_action=plugin.plugin_server_account';
+ $httpConfig['timeout'] = '30';
+ $httpConfig['params'] = $params;
+ $httpConfig['user_agent'] = 'MyRoundcube PHP/5.0';
+ $http = new MyRCHttp();
+ $http->initialize($httpConfig);
+ if(ini_get('safe_mode') || ini_get('open_basedir')){
+ $http->useCurl(false);
+ }
+ $http->execute();
+ $this->_log($httpConfig, $http);
+ if(($shared = $this->rcmail->config->get('plugin_manager_shared')) && $this->rcmail->config->get('customer_id') != $this->rcmail->config->get('own_customer_id')){
+ $content = html::tag('input', array('name' => '_customer_id', 'id' => 'customer_id', 'type' => 'hidden', 'value' => $customer_id)) .
+ html::tag('input', array('name' => '_clientip', 'id' => 'clientip', 'type' => 'hidden', 'value' => $_SERVER['REMOTE_ADDR'])) .
+ html::tag('input', array('name' => '_serverip', 'id' => 'serverip', 'type' => 'hidden', 'value' => $_SERVER['SERVER_ADDR'])) .
+ html::tag('span', array('style' => 'font-weight: normal; font-size: 13px'), $this->gettext('sharedby') . '&nbsp;' . html::tag('b', null, $shared)) . html::tag('br') .
+ html::tag('small', array('style' => 'font-weight: normal'), '&raquo;&nbsp;' .
+ html::tag('a', array('href' => './?_action=plugin.plugin_manager_deny'), $this->gettext('switch')) . '&nbsp;' . $this->gettext('ownaccount') . '&nbsp;' . $this->rcmail->user->data['username']
+ ) .
+ html::tag('br') . html::tag('br') .
+ html::tag('input', array('name' => '_home', 'id' => 'home', 'type' => 'hidden', 'value' => ''));
+ }
+ else{
+ $accept = '';
+ if($this->rcmail->config->get('shared_customer_id')){
+ $accept = html::tag('br') .
+ html::tag('small', array('style' => 'font-weight: normal'), '&raquo;&nbsp;' . html::tag('a', array('href' => './?_action=plugin.plugin_manager_accept'), $this->gettext('switch')) . ' ' .
+ $this->gettext('shareinvitation') . ' ' . $this->rcmail->config->get('plugin_manager_shared'));
+ }
+ $content = $this->gettext('customer_id') . ': ' . html::tag('input', array('name' => '_customer_id', 'id' => 'customer_id', 'size' => 32, 'readonly' => 'readonly', 'value' => $customer_id)) .
+ html::tag('input', array('name' => '_clientip', 'id' => 'clientip', 'type' => 'hidden', 'value' => $_SERVER['REMOTE_ADDR'])) .
+ html::tag('input', array('name' => '_serverip', 'id' => 'serverip', 'type' => 'hidden', 'value' => $_SERVER['SERVER_ADDR'])) .
+ '&nbsp;' . html::tag('a', array('href' => './?_task=settings&_action=plugin.plugin_manager_getnew', 'style' => 'font-size:11px;', 'title' => $this->gettext('getnew_hint')), $this->gettext('getnew')) .
+ $accept .
+ html::tag('br') . html::tag('br') .
+ html::tag('input', array('name' => '_home', 'id' => 'home', 'type' => 'hidden', 'value' => ''));
+ }
+ $this->rcmail->output->add_script('if(document.getElementById("home")){ $("#home").val(document.location.href) };', 'docready');
+ if($http->error){
+ $content .= html::tag('span', array('style' => 'font-weight: normal; font-size: 11px'), $this->gettext('trylater'));
+ }
+ else{
+ $response = $http->result;
+ $account = unserialize($response);
+ if(is_array($account) && !$account['credits'] == '-0'){
+ unset($httpConfig['params']);
+ $httpConfig['method'] = 'GET';
+ $httpConfig['target'] .= '&_customer_id=' . $this->rcmail->config->get('customer_id');
+ $http->initialize($httpConfig);
+ if(ini_get('safe_mode') || ini_get('open_basedir')){
+ $http->useCurl(false);
+ }
+ $http->execute();
+ $response = $http->result;
+ $account = unserialize($response);
+ }
+ if(is_array($account)){
+ $rows = '';
+ $sum = 0;
+ if(is_array($account['history'])){
+ $head = html::tag('tr', array('style' => 'font-weight: bold; font-size: 12px;'),
+ html::tag('td', array('style' => 'border: 2px solid lightgrey;'), $this->gettext('date')) .
+ html::tag('td', array('style' => 'border: 2px solid lightgrey;'), 'IPs') .
+ html::tag('td', array('style' => 'border: 2px solid lightgrey;', 'align' => 'center'), $this->gettext('download')) .
+ html::tag('td', array('style' => 'border: 2px solid lightgrey;', 'align' => 'center'), $this->gettext('receipt')) .
+ html::tag('td', array('style' => 'border: 2px solid lightgrey;'), 'MyRC$') .
+ html::tag('td', array('style' => 'border: 2px solid lightgrey;', 'align' => 'center'), $this->gettext('plugins'))
+ );
+ foreach($account['history'] as $entry){
+ $list = '';
+ $plugins = unserialize($entry['plugins']);
+ if(is_array($plugins)){
+ foreach($plugins as $plugin){
+ $list .= html::tag('li', null, $plugin[0] . '&nbsp;(' . $plugin[1] . ')');
+ }
+ }
+ if($entry['action'] == 'd'){
+ if($_SERVER['REMOTE_ADDR'] == $entry['clientip'] || $_SERVER['HTTP_X_FORWARDED_FOR'] == $entry['clientip'] || $_SERVER['HTTP_X_REAL_IP'] == $entry['clientip']){
+ $dllink = $this->dlurl . 'index.php?_hash=' . md5($_SERVER['REMOTE_ADDR']) . '&_dl=' . $entry['dl'];
+ $dllabel = $this->gettext('clickhere');
+ }
+ else{
+ $dllink = '#';
+ $dllabel = sprintf($this->gettext('ipmismatch'), $_SERVER['REMOTE_ADDR'], html::tag('input', array('readonly' => 'readonly', 'onclick' => 'this.select()', 'style' => 'font-size:9px', 'value' => 'wget --no-check-certificate -O plugins.zip "' . $this->dlurl . 'index.php?_hash=' . md5($entry['serverip']) . '&_dl=' . $entry['dl'] . '"')), html::tag('input', array('readonly' => 'readonly', 'onclick' => 'this.select()', 'style' => 'font-size:9px', 'value' => $this->dlurl . 'index.php?_hash=' . md5($entry['serverip']) . '&_dl=' . $entry['dl'])), $entry['serverip']);
+ }
+ if(substr($entry['dl'], 0, 1) == '_'){
+ $dllink = '#';
+ $dllabel = $this->gettext('expired');
+ }
+ $rows .= html::tag('tr', null,
+ html::tag('td', array('style' => 'border: 1px solid lightgrey;', 'nowrap' => 'nowrap', 'valign' => 'top'), str_replace(' ', '&nbsp;', date($this->rcmail->config->get('date_format', 'Y-m-d') . ' ' . $this->rcmail->config->get('time_format', 'H:i:s') . ':s', strtotime($entry['date'])))) .
+ html::tag('td', array('style' => 'border: 1px solid lightgrey;', 'nowrap' => 'nowrap', 'valign' => 'top'), $entry['serverip'] ? ($entry['serverip'] . '&nbsp;(Server)<br />' . $entry['clientip'] . '&nbsp;(Client)') : ($entry['ip'] . '&nbsp;(Client)')) .
+ html::tag('td', array('style' => 'border: 1px solid lightgrey;', 'nowrap' => 'nowrap', 'valign' => 'top', 'align' => 'center'), $dllink == '#' ? $dllabel : html::tag('a', array('href' => $dllink), $dllabel)) .
+ html::tag('td', array('style' => 'border: 1px solid lightgrey;', 'nowrap' => 'nowrap', 'valign' => 'top'),
+ html::tag('a', array('href' => 'javascript:void(0)', 'onclick' => '$(".' . $entry['dl'] . '").show()'), $this->gettext('show')) . '&nbsp;|&nbsp;' .
+ html::tag('a', array('href' => 'javascript:void(0)', 'onclick' => '$(".' . $entry['dl'] . '").hide()'), $this->gettext('hide')) . '&nbsp;|&nbsp;' .
+ html::tag('a', array('href' => 'javascript:void(0)', 'onclick' => 'var win = window.open(); win.document.write("<pre>" + $(".' . $entry['dl'] . '").html() + "</pre>"); win.print(); win.close()'), $this->gettext('print')) .
+ html::tag('pre', array('class' => 'expand ' . $entry['dl'], 'style' => 'display: none;'), base64_decode($entry['receipt']))) .
+ html::tag('td', array('style' => 'border: 1px solid lightgrey; color: red;', 'nowrap' => 'nowrap', 'valign' => 'top', 'align' => 'right'), $entry['myrcd']) .
+ html::tag('td', array('style' => 'border: 1px solid lightgrey;', 'nowrap' => 'nowrap', 'valign' => 'top'), html::tag('ul', null, $list))
+ );
+ $sum = $sum + $entry['myrcd'];
+ }
+ else if($entry['action'] == 'b'){
+ $rows .= html::tag('tr', null,
+ html::tag('td', array('style' => 'border: 1px solid lightgrey;', 'nowrap' => 'nowrap', 'valign' => 'top'), str_replace(' ', '&nbsp;', date($this->rcmail->config->get('date_format', 'Y-m-d') . ' ' . $this->rcmail->config->get('time_format', 'H:i:s') . ':s', strtotime($entry['date'])))) .
+ html::tag('td', array('style' => 'border: 1px solid lightgrey;', 'nowrap' => 'nowrap', 'valign' => 'top'), $entry['serverip'] ? ($entry['serverip'] . '&nbsp;(Server)<br />' . $entry['clientip'] . '&nbsp;(Client)<br />via ' . $entry['ip']) : $entry['ip']) .
+ html::tag('td', array('style' => 'border: 1px solid lightgrey;', 'nowrap' => 'nowrap', 'valign' => 'top', 'align' => 'center', 'colspan' => 2), $this->gettext('myrcd_bought')) .
+ html::tag('td', array('style' => 'border: 1px solid lightgrey; color: green;', 'nowrap' => 'nowrap', 'valign' => 'top', 'align' => 'right'), '+' . $entry['myrcd']) .
+ html::tag('td', array('style' => 'border: 1px solid lightgrey;', 'nowrap' => 'nowrap', 'valign' => 'top'), '&nbsp;')
+ );
+ $sum = $sum + $entry['myrcd'];
+ }
+ else if($entry['action'] == 'r'){
+ $rows .= html::tag('tr', null,
+ html::tag('td', array('style' => 'border: 1px solid lightgrey;', 'nowrap' => 'nowrap', 'valign' => 'top'), str_replace(' ', '&nbsp;', date($this->rcmail->config->get('date_format', 'Y-m-d') . ' ' . $this->rcmail->config->get('time_format', 'H:i:s') . ':s', strtotime($entry['date'])))) .
+ html::tag('td', array('style' => 'border: 1px solid lightgrey;', 'nowrap' => 'nowrap', 'valign' => 'top'), $entry['serverip'] ? ($entry['serverip'] . '&nbsp;(Server)<br />' . $entry['clientip'] . '&nbsp;(Client)<br />via ' . $entry['ip']) : $entry['ip']) .
+ html::tag('td', array('style' => 'border: 1px solid lightgrey;', 'nowrap' => 'nowrap', 'valign' => 'top', 'align' => 'center', 'colspan' => 2), $this->gettext('myrcd_refunded')) .
+ html::tag('td', array('style' => 'border: 1px solid lightgrey; color: red;', 'nowrap' => 'nowrap', 'valign' => 'top', 'align' => 'right'), $entry['myrcd']) .
+ html::tag('td', array('style' => 'border: 1px solid lightgrey;', 'nowrap' => 'nowrap', 'valign' => 'top'), '&nbsp;')
+ );
+ $sum = $sum + $entry['myrcd'];
+ }
+ else if($entry['action'] == 'c'){
+ $rows .= html::tag('tr', null,
+ html::tag('td', array('style' => 'border: 1px solid lightgrey;', 'nowrap' => 'nowrap', 'valign' => 'top'), str_replace(' ', '&nbsp;', date($this->rcmail->config->get('date_format', 'Y-m-d') . ' ' . $this->rcmail->config->get('time_format', 'H:i:s') . ':s', strtotime($entry['date'])))) .
+ html::tag('td', array('style' => 'border: 1px solid lightgrey;', 'nowrap' => 'nowrap', 'valign' => 'top'), $entry['ip']) .
+ html::tag('td', array('style' => 'border: 1px solid lightgrey;', 'nowrap' => 'nowrap', 'valign' => 'top', 'align' => 'center', 'colspan' => 2), $this->gettext('customer_id_changed')) .
+ html::tag('td', array('style' => 'border: 1px solid lightgrey;', 'nowrap' => 'nowrap', 'valign' => 'top'), '&nbsp;') .
+ html::tag('td', array('style' => 'border: 1px solid lightgrey;', 'nowrap' => 'nowrap', 'valign' => 'top'), '&nbsp;')
+ );
+ }
+ else if($entry['action'] == 't'){
+ $rows .= html::tag('tr', null,
+ html::tag('td', array('style' => 'border: 1px solid lightgrey;', 'nowrap' => 'nowrap', 'valign' => 'top'), str_replace(' ', '&nbsp;', date($this->rcmail->config->get('date_format', 'Y-m-d') . ' ' . $this->rcmail->config->get('time_format', 'H:i:s') . ':s', strtotime($entry['date'])))) .
+ html::tag('td', array('style' => 'border: 1px solid lightgrey;', 'nowrap' => 'nowrap', 'valign' => 'top'), $entry['ip']) .
+ html::tag('td', array('style' => 'border: 1px solid lightgrey;', 'nowrap' => 'nowrap', 'valign' => 'top', 'align' => 'center', 'colspan' => 2), $this->gettext('credits_transferred')) .
+ html::tag('td', array('style' => 'border: 1px solid lightgrey; color:' . ($entry['myrcd'] > 0 ? ' green;' : ' red;'), 'nowrap' => 'nowrap', 'valign' => 'top', 'align' => 'right'), ($entry['myrcd'] > 0 ? '+' : '') . $entry['myrcd']) .
+ html::tag('td', array('style' => 'border: 1px solid lightgrey;', 'nowrap' => 'nowrap', 'valign' => 'top'), '&nbsp;')
+ );
+ $sum = $sum + $entry['myrcd'];
+ }
+ else if($entry['action'] == 'a'){
+ $color = $entry['myrcd'] > 0 ? 'green' : 'red';
+ $rows .= html::tag('tr', null,
+ html::tag('td', array('style' => 'border: 1px solid lightgrey;', 'nowrap' => 'nowrap', 'valign' => 'top'), str_replace(' ', '&nbsp;', date($this->rcmail->config->get('date_format', 'Y-m-d') . ' ' . $this->rcmail->config->get('time_format', 'H:i:s') . ':s', strtotime($entry['date'])))) .
+ html::tag('td', array('style' => 'border: 1px solid lightgrey;', 'nowrap' => 'nowrap', 'valign' => 'top'), $entry['ip']) .
+ html::tag('td', array('style' => 'border: 1px solid lightgrey;', 'nowrap' => 'nowrap', 'valign' => 'top', 'align' => 'center', 'colspan' => 2), $this->gettext('account_details_compressed')) .
+ html::tag('td', array('style' => 'border: 1px solid lightgrey; color: ' . $color . ';', 'nowrap' => 'nowrap', 'valign' => 'top', 'align' => 'right'), ($entry['myrcd'] > 0 ? '+' : '') . $entry['myrcd']) .
+ html::tag('td', array('style' => 'border: 1px solid lightgrey;', 'nowrap' => 'nowrap', 'valign' => 'top'), '&nbsp;')
+ );
+ $sum = $sum + $entry['myrcd'];
+ }
+ }
+ }
+ $free = '';
+ if($account['credits'] > $sum){
+ $free = html::tag('tr', null,
+ html::tag('td', array('style' => 'border: 1px solid lightgrey;', 'nowrap' => 'nowrap', 'valign' => 'top', 'align' => 'center'), '--') .
+ html::tag('td', array('style' => 'border: 1px solid lightgrey;', 'nowrap' => 'nowrap', 'valign' => 'top', 'colspan' => 3), 'Free&nbsp;MyRC$&nbsp;granted&nbsp;-&nbsp;Enjoy!') .
+ html::tag('td', array('style' => 'border: 1px solid lightgrey; color: green;', 'nowrap' => 'nowrap', 'valign' => 'top', 'align' => 'right'), '+'. ($account['credits'] - $sum)) .
+ html::tag('td', array('style' => 'border: 1px solid lightgrey;', 'nowrap' => 'nowrap', 'valign' => 'top'), '&nbsp;')
+ );
+ }
+ $rows .= html::tag('tr', null,
+ html::tag('td', array('style' => 'border: 1px solid lightgrey;', 'nowrap' => 'nowrap', 'valign' => 'top', 'colspan' => 4), 'MyRC$ (' . $this->gettext('credits') . ')') .
+ html::tag('td', array('style' => 'border: 1px solid lightgrey; font-weight: bold; color: ' . ($account['credits'] > 0 ? 'green' : 'red'), 'nowrap' => 'nowrap', 'valign' => 'top', 'align' => 'right'), ($account['credits'] > 0 ? '+' : '') . html::tag('span', null, $account['credits'])) .
+ html::tag('td', array('style' => 'border: 1px solid lightgrey;', 'nowrap' => 'nowrap', 'valign' => 'top', 'align' => 'right'), html::tag('a', array('href' => 'javascript:document.forms.form.target="_blank";document.forms.form.action="' . $this->billingurl .'";document.forms.form.submit()', 'style' => 'font-weight:normal; font-size: 11px'), str_replace(' ', '&nbsp;', $this->gettext('buynow'))))
+ );
+ $print = '$(".expand").show(); $("a").hide(); var content = $("#accountdetails").html(); while(content.indexOf("|") > -1){content = content.replace("|", "")}; ' .
+ 'var win = window.open(); win.document.write("<html><head><title>MyRoundcube ' . $this->gettext('customer_account') . ' - ' . $this->gettext('print') . '</title></head><body><table>" + content + "</table></body></html>"); ' .
+ '$("a").show(); $(".expand").hide(); win.print(); win.close();';// document.location.href="./?_task=settings&_action=plugin.plugin_manager_compress";';
+ if($this->rcmail->config->get('plugin_manager_shared')){
+ $priviledged = '';
+ $printdetails = '';
+ }
+ else{
+ $priviledged = html::tag('li', null, html::tag('a', array('href' => './?_task=settings&_action=plugin.plugin_manager_transfer&_framed=1', 'style' => 'font-weight:normal; font-size: 12px'), str_replace(' ', '&nbsp;', $this->gettext('transfer')))) .
+ html::tag('li', null, html::tag('a', array('href' => 'javascript:document.forms.form.target="_blank";document.forms.form.action="' . str_replace('buycredits', 'mergecredits', $this->billingurl) .'";document.forms.form.submit()', 'style' => 'font-weight:normal; font-size: 12px'), str_replace(' ', '&nbsp;', $this->gettext('merge'))));
+ $printdetails = html::tag('div', array('style' => 'float:right;padding:3px;'), html::tag('a', array('href' => '#', 'onclick' => $print, 'style' => 'font-size:11px;'), $this->gettext('printdetails')) . '&nbsp;');
+ }
+ $content .= html::tag('fieldset', array('style' => 'border: 1px solid lightgrey; padding: 5px; margin-left: 0'),
+ html::tag('legend', array('style' => 'font-weight: normal; padding-bottom: 0;'), $this->gettext('details')) .
+ html::tag('ul', null,
+ html::tag('li', null, html::tag('a', array('href' => 'javascript:document.forms.form.target="_blank";document.forms.form.action="' . $this->billingurl .'";document.forms.form.submit()', 'style' => 'font-weight:normal; font-size: 12px'), str_replace(' ', '&nbsp;', $this->gettext('buynow')))) .
+ $priviledged .
+ html::tag('li', null, html::tag('span', array('style' => 'font-weight: bold; font-size: 12px;'), 'MyRC$ ' . ' ' . html::tag('span', array('id' => 'cdlcredits'), $account['credits']) . ' ' . html::tag('span', array('style' => 'font-weight: normal;'), '(' . $this->gettext('credits') . ')'))) .
+ html::tag('li', null, html::tag('span', array('style' => 'font-size: 12px;'), $this->gettext('history'))) . html::tag('br') .
+ html::tag('div', array('style' => 'float:left;padding:3px;'), html::tag('a', array('href' => '#', 'onclick' => 'document.location.href=document.location.href + "&_ts=' . time() . '"', 'style' => 'font-size:11px;'), $this->gettext('refresh'))) .
+ html::tag('div', array('style' => 'float:right;padding:3px;'), html::tag('a', array('href' => '#', 'onclick' => 'window.open("' . str_replace('?_task=billing&_action=buycredits', 'plugins/billing/prices.php?_ts=' . time(), $this->billingurl) . '")', 'style' => 'font-size:11px;'), $this->gettext('pricelist'))) .
+ $printdetails .
+ html::tag('table', array('id' => 'accountdetails', 'style' => 'font-weight: normal; font-size: 11px; border: 1px solid lightgrey;', 'border' => '0', 'cellpadding' => '0', 'cellspacing' => '0', 'width' => '100%'), $head . $free . $rows)
+ )
+ );
+ }
+ else{
+ $content .= html::tag('span', array('style' => 'font-weight: normal; font-size: 11px'), $this->gettext('trylater'));
+ }
+ }
+ }
+ else{
+ $content = '';
+ }
+ $args['blocks']['plugin_manager_customer']['options'][0] = array(
+ 'title' => $content,
+ 'content' => ''
+ );
+ $this->rcmail->output->add_script('if(self.location.href != parent.location.href){$(".mainaction").remove(); $("td").css("width", "1px");}', 'docready');
+ }
+ return $args;
+ }
+
+ function compress(){
+ $params = array('_customer_id' => $this->rcmail->config->get('customer_id'), '_ip' => $this->getVisitorIP());
+ $httpConfig['method'] = 'POST';
+ $httpConfig['target'] = $this->svn . '?_action=plugin.plugin_server_compress';
+ $httpConfig['timeout'] = '30';
+ $httpConfig['params'] = $params;
+ $httpConfig['user_agent'] = 'MyRoundcube PHP/5.0';
+ $http = new MyRCHttp();
+ $http->initialize($httpConfig);
+ if(ini_get('safe_mode') || ini_get('open_basedir')){
+ $http->useCurl(false);
+ }
+ $http->execute();
+ $this->_log($httpConfig, $http);
+ header('Location: ./?_task=settings&_action=edit-prefs&_section=plugin_manager_customer&_framed=1');
+ exit;
+ }
+
+ function getCustomerID(){
+ $params = array();
+ $httpConfig['method'] = 'GET';
+ $httpConfig['target'] = $this->svn . '?_action=plugin.plugin_server_customer_id';
+ $httpConfig['timeout'] = '30';
+ $httpConfig['params'] = $params;
+ $httpConfig['user_agent'] = 'MyRoundcube PHP/5.0';
+ $http = new MyRCHttp();
+ $http->initialize($httpConfig);
+ if(ini_get('safe_mode') || ini_get('open_basedir')){
+ $http->useCurl(false);
+ }
+ $http->execute();
+ $this->_log($httpConfig, $http);
+ if($http->error){
+ $response = false;
+ }
+ else{
+ $response = $http->result;
+ }
+ return $response;
+ }
+
+ function save(){
+ $ret = $this->saveprefs(array('section' => 'plugin_manager'));
+ if(class_exists('cookie_config')){
+ cookie_config::plugin_manager_save($ret);
+ }
+ $saved = $this->rcmail->user->save_prefs($ret['prefs']);
+ $response = '';
+ if($saved){
+ if($ret['script'])
+ $response = $ret['script'];
+ $this->rcmail->output->command('plugin.plugin_manager_saved', $response);
+ }
+ else{
+ $this->rcmail->output->command('plugin.plugin_manager_error', $response);
+ }
+ }
+
+ function saveprefs($args){
+ if($args['section'] == 'plugin_manager_settings'){
+ if(strtolower($this->get_demo($_SESSION['username'])) == strtolower(sprintf($this->rcmail->config->get('demo_user_account'),""))){
+ $this->rcmail->output->show_message($this->gettext('demoaccount'), 'error');
+ return $args;
+ }
+ $this->rcmail->session->remove('plugin_manager_settings');
+ $defaults = get_input_value('_plugin_manager_defaults', RCUBE_INPUT_POST);
+ $newplugin = (array) get_input_value('_new_plugin_name', RCUBE_INPUT_POST);
+ $removeplugin = (array) get_input_value('_remove_plugin_name', RCUBE_INPUT_POST);
+ $skins = (array) get_input_value('_skins', RCUBE_INPUT_POST);
+ include INSTALL_PATH . 'plugins/plugin_manager/defaults.inc.php';
+ $overwrite = $config['plugin_manager_defaults'];
+ $sql = 'SELECT * FROM ' . get_table_name('plugin_manager') . ' WHERE ' . $this->q('conf') . '=?';
+ $res = $this->rcmail->db->limitquery($sql, 0, 1, 'defaults_overwrite');
+ $overwrite = $this->rcmail->db->fetch_assoc($res);
+ if(is_array($overwrite)){
+ $overwrite = unserialize($overwrite['value']);
+ if(!is_array($overwrite)){
+ $overwrite = $config['plugin_manager_defaults'];
+ }
+ }
+ else{
+ $overwrite = $config['plugin_manager_defaults'];
+ }
+ foreach($skins as $section => $plugins){
+ foreach($plugins as $plugin => $skin){
+ if($skin != 'all'){
+ $overwrite[$section][$plugin]['skins'] = explode('|', $skin);
+ }
+ else{
+ unset($overwrite[$section][$plugin]['skins']);
+ }
+ }
+ }
+ $sql = 'UPDATE ' . get_table_name('plugin_manager') . ' SET ' . $this->q('value') . '=? WHERE ' . $this->q('conf') . '=?';
+ $res = $this->rcmail->db->query($sql, serialize($overwrite), 'defaults_overwrite');
+ if(!$this->rcmail->db->affected_rows($res)){
+ $sql = 'INSERT INTO ' . get_table_name('plugin_manager') . ' (' . $this->q('conf') . ', ' . $this->q('value') . ', ' . $this->q('type') . ') VALUES (?, ?, ?)';
+ $this->rcmail->db->query($sql, 'defaults_overwrite', serialize($overwrite), 'array');
+ }
+ foreach($removeplugin as $section => $plugin){
+ if($plugin && file_exists(INSTALL_PATH . 'plugins/' . $plugin . '/' . $plugin . '.php')){
+ unset($overwrite[$section][$plugin]);
+ $sql = 'UPDATE ' . get_table_name('plugin_manager') . ' SET ' . $this->q('value') . '=? WHERE ' . $this->q('conf') . '=?';
+ $res = $this->rcmail->db->query($sql, serialize($overwrite), 'defaults_overwrite');
+ break;
+ }
+ }
+ foreach($newplugin as $section => $plugin){
+ if($plugin && file_exists(INSTALL_PATH . 'plugins/' . $plugin . '/' . $plugin . '.php')){
+ $overwrite[$section][$plugin] = array(
+ 'active' => false,
+ 'protected' => true,
+ 'label_name' => $plugin . '.pluginname',
+ 'label_description' => $plugin . '.plugindescription'
+ );
+ $sql = 'UPDATE ' . get_table_name('plugin_manager') . ' SET ' . $this->q('value') . '=? WHERE ' . $this->q('conf') . '=?';
+ $res = $this->rcmail->db->query($sql, serialize($overwrite), 'defaults_overwrite');
+ break;
+ }
+ }
+ if(is_array($defaults)){
+ foreach($this->defaults as $section => $plugins){
+ foreach($plugins as $plugin => $props){
+ foreach($props as $prop => $value){
+ if($prop == 'active' || $prop == 'protected'){
+ if(!isset($defaults[$section][$plugin][$prop])){
+ $defaults[$section][$plugin][$prop] = false;
+ }
+ }
+ }
+ }
+ }
+ $defaults = serialize($defaults);
+ $sql = 'DELETE FROM ' . get_table_name('plugin_manager') . ' WHERE ' . $this->q('conf') . '=?';
+ $this->rcmail->db->query($sql, 'defaults');
+ $sql = 'INSERT INTO ' . get_table_name('plugin_manager') . '(' . $this->q('conf') . ', ' . $this->q('value') . ', ' . $this->q('type') . ') VALUES (?, ?, ?)';
+ $this->rcmail->db->query($sql, 'defaults', $defaults, 'array');
+ $this->rcmail->session->remove('plugin_manager_defaults');
+ $defaults = unserialize($defaults);
+ if($defaults['globalplugins']['sabredav']['active'] == 1){
+ $this->require_plugin('sabredav');
+ }
+ }
+ if($this->admins[$this->rcmail->user->data['username']] == 0){
+ $this->rcmail->user->save_prefs(
+ array(
+ 'plugin_manager_show_myrc_messages' => get_input_value('_plugin_manager_show_myrc_messages', RCUBE_INPUT_POST),
+ 'plugin_manager_translation_account' => trim(get_input_value('_plugin_manager_translation_account', RCUBE_INPUT_POST)),
+ 'plugin_manager_translation_server' => trim(get_input_value('_plugin_manager_translation_server', RCUBE_INPUT_POST)),
+ )
+ );
+ $sql = 'DELETE FROM ' . get_table_name('plugin_manager') . ' WHERE ' . $this->q('conf') . ' LIKE ?';
+ $this->rcmail->db->query($sql, '_plugin_manager_%');
+ $keys = array('_plugin_manager_update_notifications', '_plugin_manager_update_notifications_cc', '_plugin_manager_maintenance_mode', '_plugin_manager_file_based_config', '_plugin_manager_use_ssl', '_plugin_manager_hmail', '_plugin_manager_load_splitter', '_plugin_manager_compress_html', '_plugin_manager_about_link', '_plugin_manager_myroundcube_watermark', '_plugin_manager_remove_watermark', '_plugin_manager_support_link');
+ foreach($keys as $key){
+ $save = get_input_value($key, RCUBE_INPUT_POST);
+ $sql = 'INSERT INTO ' . get_table_name('plugin_manager') . ' (conf, value, type) VALUES (?, ?, ?)';
+ if(is_null($save) || is_numeric($save)){
+ $this->rcmail->db->query($sql, $key, $save ? 1: 0, 'bool');
+ }
+ else if(is_array($save)){
+ $this->rcmail->db->query($sql, $key, serialize($save), 'array');
+ }
+ else if(is_string($save)){
+ $this->rcmail->db->query($sql, $key, trim($save), 'string');
+ }
+ }
+ }
+ else{
+ $keys = array('_plugin_manager_maintenance_mode');
+ foreach($keys as $key){
+ $sql = 'DELETE FROM ' . get_table_name('plugin_manager') . ' WHERE ' . $this->q('conf') . ' LIKE ?';
+ $this->rcmail->db->query($sql, $key);
+ $save = get_input_value($key, RCUBE_INPUT_POST);
+ $sql = 'INSERT INTO ' . get_table_name('plugin_manager') . ' (conf, value, type) VALUES (?, ?, ?)';
+ $this->rcmail->db->query($sql, $key, $save ? 1: 0, 'bool');
+ }
+ $this->rcmail->user->save_prefs(
+ array(
+ 'plugin_manager_show_myrc_messages' => get_input_value('_plugin_manager_show_myrc_messages', RCUBE_INPUT_POST),
+ 'plugin_manager_translation_account' => trim(get_input_value('_plugin_manager_translation_account', RCUBE_INPUT_POST)),
+ 'plugin_manager_translation_server' => trim(get_input_value('_plugin_manager_translation_server', RCUBE_INPUT_POST))
+ )
+ );
+ }
+ if($plugin = get_input_value('_plugin', RCUBE_INPUT_GET)){
+ $append = '&_expand='. $plugin;
+ }
+ else{
+ $append = '';
+ }
+ if(get_input_value('_plugin_manager_maintenance_mode', RCUBE_INPUT_POST)){
+ $prefix = '';
+ if(class_exists('tabbed')){
+ $prefix = 'parent.';
+ }
+ $this->rcmail->output->add_script($prefix . "parent.location.href='./?_task=settings&_next=plugin_manager_settings';", 'docready');
+ return $args;
+ }
+ else{
+ header('Location: ./?_task=settings&_action=edit-prefs&_section=plugin_manager_settings&_framed=1&_pmmsg=successfullysaved' . $append);
+ exit;
+ }
+ }
+ if($args['section'] == 'plugin_manager_admins'){
+ if(strtolower($this->get_demo($_SESSION['username'])) == strtolower(sprintf($this->rcmail->config->get('demo_user_account'),""))){
+ $this->rcmail->output->show_message($this->gettext('demoaccount'), 'error');
+ return $args;
+ }
+ $sql = 'SELECT * FROM ' . get_table_name('plugin_manager') . ' WHERE ' . $this->q('conf') . '=?';
+ $res = $this->rcmail->db->limitquery($sql, 0, 1, 'admins');
+ $admins = $this->rcmail->db->fetch_assoc($res);
+ if(!$admins = unserialize($admins['value'])){
+ $admins = array();
+ }
+ $merge = get_input_value('_plugin_manager_admins', RCUBE_INPUT_POST);
+ $admins = array_merge(array($this->rcmail->user->data['username']), $merge);
+ $save = array();
+ foreach($admins as $idx => $admin){
+ if($admin){
+ $sql = 'SELECT ' . $this->q('username') . ' FROM ' . get_table_name('users') . ' WHERE ' . $this->q('username') . '=?';
+ $res = $this->rcmail->db->limitquery($sql, 0, 1, strtolower($admin));
+ if($res){
+ if(is_array($this->rcmail->db->fetch_assoc($res))){
+ $save[] = $admin;
+ }
+ else{
+ $this->rcmail->output->show_message($this->gettext('accountnotexists'), 'error');
+ }
+ }
+ }
+ }
+ asort($save);
+ $save = array_merge(array($this->rcmail->user->data['username']), $save);
+ $save = array_unique($save);
+ $sql = 'UPDATE ' . get_table_name('plugin_manager') . ' SET ' . $this->q('value') . '=? WHERE ' . $this->q('conf') . '=?';
+ $this->rcmail->db->query($sql, serialize($save), 'admins');
+ foreach($admins as $idx => $admin){
+ if($idx == 0) continue;
+ $config = get_input_value('_plugin_manager_config', RCUBE_INPUT_POST);
+ $sql = 'SELECT ' . $this->q('preferences') . ' FROM ' . get_table_name('users') . ' WHERE ' . $this->q('username') . '=? AND ' . $this->q('mail_host') . '=?';
+ if($res = $this->rcmail->db->limitquery($sql, 0, 1, $admin, $_SESSION['storage_host'])){
+ $prefs = $this->rcmail->db->fetch_assoc($res);
+ if($prefs = unserialize($prefs['preferences'])){
+ if(isset($config[$admin])){
+ $prefs = serialize(array_merge($prefs, array('plugin_manager_hash' => $this->rcmail->config->get('plugin_manager_hash'))));
+ }
+ else{
+ unset($prefs['plugin_manager_hash']);
+ $prefs = serialize($prefs);
+ }
+ }
+ else{
+ if(isset($config[$admin])){
+ $prefs = serialize(array('plugin_manager_hash' => $this->rcmail->config->get('plugin_manager_hash')));
+ }
+ else{
+ $prefs = serialize(array());
+ }
+ }
+ $sql = 'UPDATE ' . get_table_name('users') . ' SET ' . $this->q('preferences') . '=? WHERE ' . $this->q('username') . '=? AND ' . $this->q('mail_host') . '=?';
+ $this->rcmail->db->query($sql, $prefs, $admin, $_SESSION['storage_host']);
+ }
+ }
+ foreach($admins as $idx => $admin){
+ if($idx == 0) continue;
+ $config = get_input_value('_plugin_manager_customer', RCUBE_INPUT_POST);
+ $sql = 'SELECT ' . $this->q('preferences') . ' FROM ' . get_table_name('users') . ' WHERE ' . $this->q('username') . '=? AND ' . $this->q('mail_host') . '=?';
+ if($res = $this->rcmail->db->limitquery($sql, 0, 1, $admin, $_SESSION['storage_host'])){
+ $prefs = $this->rcmail->db->fetch_assoc($res);
+ if($prefs = unserialize($prefs['preferences'])){
+ if(isset($config[$admin])){
+ $prefs = serialize(array_merge($prefs, array('shared_customer_id' => $this->rcmail->config->get('customer_id'), 'plugin_manager_shared' => $this->rcmail->user->data['username'], 'own_customer_id' => $prefs['own_customer_id'] ? $prefs['own_customer_id'] : $prefs['customer_id'])));
+ }
+ else{
+ if(isset($prefs['own_customer_id'])){
+ $prefs['customer_id'] = $prefs['own_customer_id'];
+ }
+ unset($prefs['own_customer_id']);
+ unset($prefs['shared_customer_id']);
+ unset($prefs['plugin_manager_shared']);
+ $prefs = serialize($prefs);
+ }
+ }
+ else{
+ if(isset($config[$admin])){
+ $prefs = serialize(array('shared_customer_id' => $this->rcmail->config->get('customer_id'), 'plugin_manager_shared' => $this->rcmail->user->data['username'], 'own_customer_id' => $prefs['own_customer_id'] ? $prefs['own_customer_id'] : $prefs['customer_id']));
+ }
+ else{
+ $prefs = serialize(array());
+ }
+ }
+ $sql = 'UPDATE ' . get_table_name('users') . ' SET ' . $this->q('preferences') . '=? WHERE ' . $this->q('username') . '=? AND ' . $this->q('mail_host') . '=?';
+ $this->rcmail->db->query($sql, $prefs, $admin, $_SESSION['storage_host']);
+ }
+ }
+ }
+ else if($args['section'] == 'plugin_manager'){
+ $plugins = $this->config;
+ $pactive = $this->rcmail->config->get('plugin_manager_active', array());
+ $user = $this->rcmail->config->get('plugin_manager_user', array());
+ $config_plugin = get_input_value('_config_plugin', RCUBE_INPUT_POST);
+ $active = array();
+ $add_script = '';
+ foreach($plugins as $sections => $section){
+ foreach($section as $plugin => $props){
+ $posted = get_input_value('_plugin_manager_' . $plugin, RCUBE_INPUT_POST);
+ if($posted){
+ $plugins[$sections][$plugin]['active'] = 1;
+ $active[$plugin] = 1;
+ if($props['config'] && $config_plugin == $plugin){
+ if($props['section']){
+ $add_script .= "try{parent.rcmail.sections_list.select('" . $props['section'] . "')}catch(e){parent.rcmail.sections_list.clear_selection()};";
+ if($props['config']){
+ if($props['section'] == 'accountlink'){
+ if($this->rcmail->config->get('skin', 'classic') == 'larry'){
+ $add_script .= "parent.$('#preferences-frame').attr('src', '" . $props['config'] . "');";
+ }
+ else{
+ $add_script .= "parent.$('#prefs-frame').attr('src', '" . $props['config'] . "');";
+ }
+ }
+ else
+ $add_script .= "document.location.href='" . $props['config'] . "';";
+ }
+ }
+ }
+ else if($props['reload'] && !$add_script){
+ if($plugins[$sections][$plugin]['active'] != $pactive[$plugin]){
+ $add_script .= "parent.location.href='./?_task=settings&_action=plugin.plugin_manager&_section=plugin_manager';";
+ }
+ }
+ }
+ else{
+ $plugins[$sections][$plugin]['active'] = 0;
+ $active[$plugin] = 0;
+ if($props['reload'] && !$add_script){
+ if($plugins[$sections][$plugin]['active'] != $pactive[$plugin])
+ $add_script .= "parent.location.href='./?_task=settings&_action=plugin.plugin_manager&_section=plugin_manager';";
+ if($plugin == 'wrapper' && $add_script)
+ $add_script .= 'parent.' . $add_script;
+ }
+ if(is_array($plugins[$sections][$plugin]['unset'])){
+ $unsets = $plugins[$sections][$plugin]['unset'];
+ }
+ else if(is_string($plugins[$sections][$plugin]['unset'])){
+ $unsets = array($plugins[$sections][$plugin]['unset']);
+ }
+ if(is_array($unsets)){
+ foreach($unsets as $pref => $value){
+ $new = $this->rcmail->config->get($value);
+ $sav = $value;
+ $array = $this->rcmail->config->get($pref);
+ if(is_array($array)){
+ $new = $array;
+ $sav = $pref;
+ }
+ if(is_array($new)){
+ $new = $this->rcmail->config->get($pref);
+ unset($new[$pref]);
+ foreach($new as $key => $val){
+ if($val == $value){
+ unset($new[$key]);
+ }
+ }
+ if(is_numeric($key))
+ $new = array_values($new);
+ }
+ else{
+ $new = false;
+ unset($prefs[$sav]);
+ }
+ $args['prefs'][$sav] = $new;
+ }
+ }
+ }
+ }
+ }
+ $remote = get_input_value('_remote', RCUBE_INPUT_POST);
+ if($add_script){
+ if($remote)
+ $args['script'] = $add_script;
+ else
+ $this->rcmail->output->add_script($add_script);
+ }
+ $args['prefs']['plugin_manager_active'] = $active;
+ }
+ else if($args['section'] == 'plugin_manager_customer'){
+ if($id = get_input_value('_customer_id', RCUBE_INPUT_POST)){
+ $args['prefs']['customer_id'] = $id;
+ }
+ }
+ return $args;
+ }
+
+ function labels($label, $s = false){
+ $temparr = explode('.', $label);
+ if(count($temparr) > 1){
+ // plugin label
+ if(!is_array($this->labels[$temparr[0]])){
+ $plugins = $this->rcmail->config->get($this->plugin, array());
+ foreach($plugins as $sections => $section){
+ foreach($section as $plugin => $props){
+ if($plugin == $temparr[0]){
+ $localization = $props['localization'];
+ break;
+ }
+ }
+ if($localization){
+ break;
+ }
+ }
+ if(!$localization)
+ $localization = 'localization';
+ $path = INSTALL_PATH . 'plugins/' . $temparr[0] . '/' . $localization;
+ $file = $path . '/en_US.inc';
+ @include $file;
+ $file = $path . '/' . $_SESSION['language'] . '.inc';
+ $en_labels = $labels;
+ $en_msgs = $messages;
+ @include $file;
+ if(is_array($en_labels) && is_array($labels))
+ $labels = array_merge($en_labels, $labels);
+ if(is_array($en_msgs) && is_array($messages))
+ $messages = array_merge($en_msgs, $messages);
+ if(is_array($labels) && is_array($messages))
+ $labels = array_merge($messages, $labels);
+ $this->labels[$temparr[0]] = $labels;
+ }
+ if($this->labels[$temparr[0]][$temparr[1]]){
+ $label = $this->labels[$temparr[0]][$temparr[1]];
+ }
+ else{
+ $pm_label = $this->gettext($temparr[0] . '_' . $temparr[1]);
+ if(substr($label, 0, 1) == '[' && substr($label, strlen($label) - 1, 1) == ']'){
+ $label = '[' . $label . ']';
+ }
+ else{
+ $label = $pm_label;
+ }
+ }
+ }
+ else{
+ // default label
+ $label = $this->gettext($label);
+ }
+ if(substr($label, 0, 1) == '[' && substr($label, strlen($label) - 1, 1) == ']'){
+ // return best hestimation
+ $label = ucwords(substr(str_replace('_', ' ', $label), 1,strlen($label) - 2));
+ $label = '['.str_replace('.plugindescription', '', str_replace('.pluginname', '', $label)).']';
+ }
+ if($s || strpos($label, '%s') !== false){
+ if(!$s){
+ $s = '';
+ }
+ $label = sprintf($label, $s);
+ }
+ return Q($label);
+ }
+
+ function q($str){
+ return $this->rcmail->db->quoteIdentifier($str);
+ }
+
+ function fix_table_names($sql, $tables){
+ foreach($tables as $table){
+ $real_table = get_table_name($table);
+ if($real_table != $table){
+ $sql = preg_replace("/([^a-z0-9_])$table([^a-z0-9_])/i", "\\1$real_table\\2", $sql);
+ }
+ }
+ return $sql;
+ }
+
+ function AllPermutations($InArray, $InProcessedArray = array()){
+ $ReturnArray = array();
+ foreach($InArray as $Key=>$value){
+ $CopyArray = $InProcessedArray;
+ $CopyArray[$Key] = $value;
+ $TempArray = array_diff_key($InArray, $CopyArray);
+ if(count($TempArray) == 0){
+ $ReturnArray[] = $CopyArray;
+ }
+ else{
+ $ReturnArray = array_merge($ReturnArray, $this->AllPermutations($TempArray, $CopyArray));
+ }
+ }
+ return $ReturnArray;
+ }
+
+ function comment2ul($string){
+ $string = '<li>' . preg_replace('/<br(?: \/)?>/', "</li><li>", $string) . '</li>';
+ return html::tag('ul', array('class' => 'pm_update'), str_replace('<li></li>', '', $string));
+ }
+
+ function get_demo($string){
+ $temparr = explode("@",$string);
+ return preg_replace ('/[0-9 ]/i', '', $temparr[0]) . "@" . $temparr[count($temparr)-1];
+ }
+
+ function getVisitorIP(){
+ return rcube_utils::remote_addr();
+ }
+
+ function html_compress($p){
+ $page = $p['content'];
+ $reg = '/<(pre|textarea|script|style|code).*?>(.*?)<(\/pre|\/textarea|\/script|\/style|\/code)>/imsu';
+ $count = preg_match_all($reg, $page, $nocompress);
+ if($count > 0){
+ foreach($nocompress[0] as $content){
+ $page = str_replace($content, '<!-- '.md5($content).' -->', $page);
+ }
+ }
+ $search = array(
+ '/\>[^\S ]+/s', //strip whitespaces after tags, except space
+ '/[^\S ]+\</s', //strip whitespaces before tags, except space
+ '/(\s)+/s' // shorten multiple whitespace sequences
+ );
+ $replace = array(
+ '>',
+ '<',
+ '\\1'
+ );
+ $page = preg_replace($search, $replace, $page);
+ if($count > 0){
+ foreach($nocompress[0] as $content){
+ $page = str_replace('<!-- '.md5($content).' -->', $content, $page);
+ }
+ }
+ $p['content'] = $page;
+ return $p;
+ }
+
+ function gethost(){
+ if($host = $_SERVER['HTTP_X_FORWARDED_HOST']){
+ $elements = explode(',', $host);
+ $host = trim(end($elements));
+ }
+ else{
+ if(!$host = $_SERVER['HTTP_HOST']){
+ if(!$host = $_SERVER['SERVER_NAME']){
+ $host = !empty($_SERVER['SERVER_ADDR']) ? $_SERVER['SERVER_ADDR'] : '';
+ }
+ }
+ }
+ $host = preg_replace('/:\d+$/', '', $host);
+ if(!$host){
+ $host = 'localhost';
+ }
+ return trim($host);
+ }
+
+ function sendmail($from, $to, $cc, $subject, $body){
+ $return = false;
+ if($from && ($to || $cc) && $subject && $body){
+ $body = str_replace('&amp;', '&', $body);
+ $LINE_LENGTH = $this->rcmail->config->get('line_length', 72);
+ $h2t = new html2text($body, false, true, 0);
+ $txt = rc_wordwrap($h2t->get_text(), $LINE_LENGTH, "\r\n");
+ $msg = array('subject' => '=?UTF-8?B?'. base64_encode($subject) . '?=', 'htmlbody' => $body, 'txtbody' => $txt);
+ $ctb = md5(rand() . microtime());
+ $headers = "Return-Path: $from\r\n";
+ $headers .= "MIME-Version: 1.0\r\n";
+ $headers .= "Content-Type: multipart/alternative; boundary=\"=_$ctb\"\r\n";
+ $headers .= "Reply-To: " . $this->replyto . "\r\n";
+ $headers .= "Date: " . date('r', time()) . "\r\n";
+ $headers .= "From: MyRoundcube Update Notifier <$from>\r\n";
+ if($to){
+ $headers .= "To: $to\r\n";
+ }
+ if($cc){
+ $headers .= "CC: $cc\r\n";
+ }
+ $headers .= "Subject: " . $msg['subject'] . "\r\n";
+ $headers .= "Reply-To: $from\r\n";
+ $msg_body .= "Content-Type: multipart/alternative; boundary=\"=_$ctb\"\r\n\r\n";
+ $txt_body = "--=_$ctb";
+ $txt_body .= "\r\n";
+ $txt_body .= "Content-Transfer-Encoding: 7bit\r\n";
+ $txt_body .= "Content-Type: text/plain; charset=" . RCMAIL_CHARSET . "\r\n";
+ $txt = rc_wordwrap($msg['txtbody'], $LINE_LENGTH, "\r\n");
+ $txt = wordwrap($txt, 998, "\r\n", true);
+ $txt_body .= "$txt\r\n";
+ $txt_body .= "--=_$ctb";
+ $txt_body .= "\r\n";
+ $msg_body .= $txt_body;
+ $msg_body .= "Content-Transfer-Encoding: quoted-printable\r\n";
+ $msg_body .= "Content-Type: text/html; charset=" . RCMAIL_CHARSET . "\r\n\r\n";
+ $msg_body .= str_replace("=","=3D",$msg['htmlbody']);
+ $msg_body .= "\r\n\r\n";
+ $msg_body .= "--=_$ctb--";
+ $msg_body .= "\r\n\r\n";
+ if(!is_object($this->rcmail->smtp)){
+ $this->rcmail->smtp_init(true);
+ }
+ $this->rcmail->smtp->connect();
+ if(!$to){
+ $to = $cc;
+ }
+ $return = $this->rcmail->smtp->send_mail($from, $to, $headers, $msg_body);
+ }
+ return $return;
+ }
+
+ private function _log($config, $http){
+ if($this->log){
+ write_log('plugin_manager', '--- REQUEST ----');
+ write_log('plugin_manager', $config);
+ write_log('plugin_manager', '--- RESPONSE ---');
+ write_log('plugin_manager', $http->error ? $http->error : $http->result);
+ }
+ }
+}
+?> \ No newline at end of file
diff --git a/plugin_manager/plugin_manager_fixes.js b/plugin_manager/plugin_manager_fixes.js
new file mode 100644
index 0000000..af08e6e
--- /dev/null
+++ b/plugin_manager/plugin_manager_fixes.js
@@ -0,0 +1,19 @@
+if(window.rcmail){
+ rcmail.addEventListener('init', function(){
+ // logo click (all Roundcube versions)
+ if(rcmail.env.skin == 'larry'){
+ $('#toplogo').attr('onclick', '');
+ $('#toplogo').click(function(){
+ $('.button-mail').click();
+ });
+ $('#toplogo').attr('style', 'cursor: pointer');
+ }
+ });
+
+ // fix date alignment
+ if(rcmail.env.task == 'mail' && !rcmail.env.framed && !rcmail.env.extwin){
+ rcmail.addEventListener('listupdate', function(){
+ $(window).trigger('resize');
+ });
+ }
+}
diff --git a/plugin_manager/plugin_manager_update.js b/plugin_manager/plugin_manager_update.js
new file mode 100644
index 0000000..73721ea
--- /dev/null
+++ b/plugin_manager/plugin_manager_update.js
@@ -0,0 +1,325 @@
+function backup(obj){
+ if(confirm("Please, backup your existing plugins. You won't be able to download an earlier plugin version once you have updated plugins to the latest beta version!\r\nClick OK to continue only if you have a recent backup.")){
+ news(obj);
+ }
+}
+
+function news(obj){
+ if($('#newsletter').prop('checked')){
+ if($('#firstname').val() == ''){
+ alert('Please enter your First Name');
+ return false;
+ }
+ if($('#lastname').val() == ''){
+ alert('Please enter your Last Name');
+ return false;
+ }
+ var nl = 0;
+ if($('#newsletter').prop('checked'))
+ nl = 1;
+ obj.href = obj.href + '&_newsletter=' + nl + '&_firstname=' + escape($('#firstname').val()) + '&_lastname=' + escape($('#lastname').val());
+ }
+ if($('#devbranch').prop('checked')){
+ obj.href = obj.href + '&_branch=dev';
+ }
+ else if($('#stablebranch').prop('checked')){
+ obj.href = obj.href + '&_branch=stable';
+ }
+ else if($('#betabranch').prop('checked')){
+ obj.href = obj.href + '&_branch=beta';
+ }
+ return true;
+}
+
+function pm_get_credits(){
+ rcmail.http_post(
+ 'plugin.plugin_manager_getcredits', ''
+ );
+}
+
+function pm_discard(){
+ $('.costs').prop('checked', false);
+ $('#cdlprice').text(pm_price());
+ $('#cdlremaining').text(parseInt($('#cdlcredits').text()) - parseInt($('#cdlprice').text()));
+}
+
+function pm_notinstalled(){
+ $('.notinstalled').prop('checked', false);
+ $('#cdlprice').text(pm_price());
+ $('#cdlremaining').text(parseInt($('#cdlcredits').text()) - parseInt($('#cdlprice').text()));
+}
+
+function pm_update_credits(response){
+ if(response){
+ if($('#cdlcredits').text() != ''){
+ if(parseInt(response) != parseInt($('#cdlcredits').text())){
+ var newcredits = parseInt(response) - parseInt($('#cdlcredits').text());
+ $('#cdlcredits').text(response);
+ $('#cdlprice').text(pm_price());
+ $('#cdlremaining').text(parseInt($('#cdlcredits').text()) - parseInt($('#cdlprice').text()));
+ rcmail.display_message('MyRC$ ' + newcredits + ' ' + rcmail.gettext('creditsupdated','plugin_manager'), 'confirmation');
+ }
+ }
+ }
+ window.setTimeout('pm_get_credits()', 1000 * 30);
+}
+
+function pm_hmail(hmail){
+ $('.chbox').each(function(){
+ if($(this).attr('id') && $(this).attr('id').indexOf('_hmail_') > -1){
+ if(!$(this).prop('disabled')){
+ $(this).prop('checked', hmail);
+ $(this).trigger('click');
+ $('#cdlprice').text(pm_price());
+ $('#cdlremaining').text(parseInt($('#cdlcredits').text()) - parseInt($('#cdlprice').text()));
+ }
+ }
+ });
+ var prop = new Array();
+ prop['name'] = 'plugin_manager_hmail';
+ prop['value'] = hmail ? 0 : 1;
+ rcmail.save_pref(prop);
+ //window.setTimeout('document.location.href = document.location.href + "&_t=" + new Date().getTime()', 500);
+}
+
+function pm_price(){
+ var price = 0;
+ var id;
+ $('.chbox').each(function(){
+ if($(this).prop('checked')){
+ id = $(this).attr('id');
+ if(id){
+ id = id.replace('chbox_', 'pmdlp_');
+ if($('#' + id).text()){
+ price = price + parseInt($('#' + id).text());
+ }
+ }
+ }
+ });
+ return price;
+}
+
+function pm_uncheck(){
+ $('.chbox').each(function(){
+ $(this).prop('checked', false);
+ });
+}
+
+function pmf(){
+ var checked = false;
+ $('.chbox').each(function(){
+ if($(this).prop('checked')){
+ checked = true;
+ }
+ });
+ if(!checked){
+ rcmail.display_message(rcmail.gettext('noupdates', 'plugin_manager'), 'notice');
+ return false;
+ }
+ var hint = '';
+ $('input[type=hidden]').each(function(){
+ if($(this).prop('name') !='_token' && $(this).prop('name') !='hosted_button_id' && $(this).prop('name') !='cmd'){
+ hint = hint + $(this).prop('name') + ': ' + $(this).val() + "\n";
+ }
+ });
+ if(hint != ''){
+ var price = pm_price();
+ if(price > parseInt($('#cdlcredits').text())){
+ if(confirm("The price for this download exeeds your MyRC$ credits!\n\nPlease buy credits or discard incurring costs downloads.\n\nYes, buy MyRC$ credits [ok].\nNo, discard downloads [cancel].")){
+ window.open('./?_task=settings&_action=plugin.plugin_manager_buycredits');
+ return false;
+ }
+ else{
+ pm_discard();
+ return false;
+ }
+ }
+ $('#pm_price').val(price);
+ hint = hint.replace('##placeholder##', price);
+ var conf = '';
+ if(price > 0){
+ conf = 'Balance' + "\n---------\n" + 'We will charge your account by MyRC$ ' + price + " for this download.\n---------\n";
+ }
+ else{
+ conf = 'This download is free.' + "\n---------\n\n";
+ }
+ conf = conf + 'The form you are about to submit to...' + "\n" + $('form').prop('action') + "\n" + '...contains hidden fields:' + "\n\n" + hint + "\n";
+ conf = conf + 'We respect your privacy. The information in this form is only used for your own customer account maintenance.' + "\n\n";
+ conf = conf + 'Do you agree?';
+ var ret = confirm(conf);
+ if(ret){
+ $('#toggle').prop('checked', false);
+ window.setTimeout('pm_uncheck();', 500);
+ $('#cdlcredits').text($('#cdlremaining').text());
+ $('#cdlprice').text(0);
+ }
+ return ret;
+ }
+ return true;
+}
+
+function pm_resize(fudge){
+ $("#mainscreen").css("top", "15px");
+ $("#mainscreen").css("bottom", "5px");
+ $("#header").hide();
+ $("#taskbar").hide();
+ $("#logo").hide();
+ $("#mainscreen").show();
+ $("#settings-sections").hide();
+ $("#pluginbody").css("left", 0);
+ $("body").show();
+ if($('#table-container').get(0)){
+ var top = $('#table-container').offset().top;
+ var footer = $('#update_footer').height();
+ var height = $(window).height() - top - footer - 70;
+ $('#table-container').height(height);
+ }
+}
+
+function pm_goToByScroll(id){
+ $('.qtip').hide();
+ $('#table-container').animate({scrollTop: $("#"+id).offset().top - $('#table').offset().top},'slow');
+}
+
+$(window).resize(function(){
+ $('#mainscreen').hide();
+ window.setTimeout("pm_resize();",200);
+});
+
+$(document).ready(function(){
+ // hide qtips
+ $('.about-link').click(function(){
+ $('.ui-tooltip').hide();
+ });
+ rcmail.addEventListener('init', function(evt){
+ rcmail.addEventListener('plugin.plugin_manager_getcredits', pm_update_credits);
+ });
+ var donate = $('#paypalcontainer').html();
+ $('#paypalcontainer').remove();
+ $('body').append(donate);
+ $('#message').hide();
+ $('#newsletter').click(function(){
+ $('#newletterdetails').toggle();
+ $('#firstname').focus();
+ });
+ $('#updatetoggle').click(function(){
+ if($(this).prop('checked')){
+ $(this).attr('title', rcmail.gettext('showall', 'plugin_manager'));
+ $('td').each(function(){
+ if($(this).hasClass('ok') || $(this).hasClass('thirdparty')){
+ $(this).parent().hide();
+ }
+ });
+ }
+ else{
+ $(this).attr('title', rcmail.gettext('hideuptodate', 'plugin_manager'));
+ $('td').each(function(){
+ if($(this).hasClass('ok') || $(this).hasClass('thirdparty')){
+ $(this).parent().show();
+ }
+ });
+ }
+ });
+ window.setTimeout('pm_get_credits()', 1000 * 30);
+ /*$('.chbox').each(function(){
+ $(this).prop('disabled', false);
+ });*/
+ $('.chbox').click(function(){
+ $('#cdlprice').text(pm_price());
+ $('#cdlremaining').text(parseInt($('#cdlcredits').text()) - parseInt($('#cdlprice').text()));
+ });
+ $('.anchorLink').on('click', function(){
+ id = 'pmu_' + $(this).attr('href').substr(1);
+ pm_goToByScroll(id);
+ });
+ $('#toggle').click(function(){
+ var stat = $(this).prop('checked');
+ $('.chbox').each(function(){
+ if(!$(this).prop('disabled') && $(this).is(':visible')){
+ $(this).prop('checked', stat);
+ }
+ });
+ $('#cdlprice').text(pm_price());
+ $('#cdlremaining').text(parseInt($('#cdlcredits').text()) - parseInt($('#cdlprice').text()));
+ });
+ $('#table-container').scroll(function(){
+ $('.qtip').hide();
+ });
+ $('th').mouseover(function(){
+ $('.qtip').hide();
+ });
+ $('#update_footer').mouseover(function(){
+ $('.qtip').hide();
+ });
+ $('td').each(function(){
+ if($(this).attr('title')){
+ var ct = {};
+ var temp = $(this).attr('title').split(' :: ');
+ if(temp.length == 2){
+ ct = {
+ title: temp[0],
+ text: temp[1]
+ }
+ }
+ else{
+ ct = {
+ text: $(this).attr('title')
+ }
+ }
+ var at = 'left bottom';
+ if($(this).attr('id')){
+ if($(this).attr('id').indexOf('pmu_') > -1){
+ at = 'bottom center';
+ }
+ }
+ $(this).qtip({
+ content: ct,
+ position: {
+ my: "top left",
+ at: at,
+ target: $(this),
+ viewport: $(window)
+ },
+ show: {
+ solo: true
+ },
+ hide: 'click',
+ style: {
+ classes: "ui-tooltip-light"
+ }
+ });
+ }
+ });
+ $('.chbox').each(function(){
+ if($(this).attr('title')){
+ var ct = {};
+ var temp = $(this).attr('title').split(' :: ');
+ if(temp.length == 2){
+ ct = {
+ title: temp[0],
+ text: temp[1]
+ }
+ }
+ else{
+ ct = {
+ text: $(this).attr('title')
+ }
+ }
+ $(this).qtip({
+ content: ct,
+ position: {
+ my: "top left",
+ at: "left bottom",
+ target: $(this),
+ viewport: $(window)
+ },
+ show: {
+ solo: true
+ },
+ style: {
+ classes: "ui-tooltip-red"
+ }
+ });
+ }
+ });
+}); \ No newline at end of file
diff --git a/plugin_manager/skins/classic/blank.html b/plugin_manager/skins/classic/blank.html
new file mode 100644
index 0000000..5368cac
--- /dev/null
+++ b/plugin_manager/skins/classic/blank.html
@@ -0,0 +1,15 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+ <title></title>
+ <!--[if IE]>
+ <style type="text/css">
+ body { width: expression((parseInt(document.documentElement.clientWidth)-20)+'px'); }
+ </style>
+ <![endif]-->
+</head>
+
+<body style="background-color:#F2F2F2;">
+
+</body>
+</html> \ No newline at end of file
diff --git a/plugin_manager/skins/classic/download.png b/plugin_manager/skins/classic/download.png
new file mode 100644
index 0000000..2271b6d
--- /dev/null
+++ b/plugin_manager/skins/classic/download.png
Binary files differ
diff --git a/plugin_manager/skins/classic/myroundcube.html b/plugin_manager/skins/classic/myroundcube.html
new file mode 100644
index 0000000..100f46e
--- /dev/null
+++ b/plugin_manager/skins/classic/myroundcube.html
@@ -0,0 +1,19 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+ <title></title>
+ <!--[if IE]>
+ <style type="text/css">
+ body { width: expression((parseInt(document.documentElement.clientWidth)-20)+'px'); }
+ </style>
+ <![endif]-->
+</head>
+
+<body style="background-color:#F2F2F2;">
+
+<div style="margin:20px auto; text-align:center">
+<img src="watermark.gif" width="260" height="228" alt="" />
+</div>
+
+</body>
+</html> \ No newline at end of file
diff --git a/plugin_manager/skins/classic/plugin_manager.css b/plugin_manager/skins/classic/plugin_manager.css
new file mode 100644
index 0000000..efa5b43
--- /dev/null
+++ b/plugin_manager/skins/classic/plugin_manager.css
@@ -0,0 +1,178 @@
+#plugin_manager_overlay {
+ display: none;
+ position: fixed;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ z-index: 4999;
+ background: rgba(0,0,0,0.5) !important;
+ background: #F6F6F6;
+ /** IE hacks */
+ filter: alpha(opacity=90);
+ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=90)";
+ width: expression(document.documentElement.clientWidth+'px');
+ height: expression(document.documentElement.clientHeight+'px');
+}
+
+#paypal{
+ position: absolute;
+ top: 65px;
+ right: 45px;
+ z-index: 9999;
+}
+
+.qtip{
+ max-width: none;
+}
+
+.asterix
+{
+ display: inline;
+ float: left;
+ margin-left: 5px;
+}
+
+.plugin_manager_ul
+{
+ list-style: none;
+ margin-top: 0px;
+}
+
+.plugin_manager_ul li
+{
+ padding-left: 0px;
+ margin-left:-40px;
+}
+
+.plugin_manager_ul input[type="checkbox"]
+{
+ margin-left: 0;
+ vertical-align: bottom;
+}
+
+.pm_control input[type="checkbox"]
+{
+ vertical-align: bottom;
+}
+
+.pm_section
+{
+ float: left;
+}
+
+.pm_update
+{
+ margin-top: 0px;
+ margin-bottom: 0px;
+ padding: 0px 15px;
+}
+
+#prefs-title-right
+{
+ color: #1f75cc;
+ font-size: 20px;
+ float: right;
+ margin-top: 7px;
+ margin-right: 25px;
+ display: inline;
+}
+
+#table
+{
+ table-layout:fixed;
+ width: 100%;
+}
+
+#table tbody tr td
+{
+ height: 20px;
+ padding: 5px;
+ font-size: 13px;
+ overflow: hidden;
+ vertical-align: middle;
+ word-wrap: break-word;
+ text-overflow: ellipsis;
+ -o-text-overflow: ellipsis;
+ border: 1px solid #EBEBEB;
+ cursor: default;
+}
+
+#table thead tr th
+{
+ height: 20px;
+ padding: 5px;
+ font-size: 13px;
+ overflow: hidden;
+ vertical-align: middle;
+ text-overflow: ellipsis;
+ -o-text-overflow: ellipsis;
+ border: 2px solid #EBEBEB;
+ cursor: default;
+}
+
+#rcheader
+{
+ font-size: 13px;
+}
+
+.vmismatch
+{
+ background-color: #EF9398;
+ border-radius: 5px 5px;
+ box-shadow: 0pt 1px 3px rgba(0, 0, 0, 0.1);
+}
+
+.vmatch
+{
+ background-color: #A6EF7B;
+ border-radius: 5px 5px;
+ box-shadow: 0pt 1px 3px rgba(0, 0, 0, 0.1);
+}
+
+.vupdate
+{
+ background-color: #EF9398;
+ border-radius: 5px 5px;
+ box-shadow: 0pt 1px 3px rgba(0, 0, 0, 0.1);
+}
+
+.rcok
+{
+ background: url(traffic-light-off.png) no-repeat;
+}
+
+.rcupdate
+{
+ background: url(traffic-light-exclamation.png) no-repeat;
+}
+
+.rcerror
+{
+ background: url(traffic-light-exclamation.png) no-repeat;
+}
+
+#table .ok
+{
+ background: url(traffic-light-off.png) center no-repeat;
+}
+
+#table .error
+{
+ background: url(traffic-light-exclamation.png) center no-repeat;
+}
+
+#table .update
+{
+ background: url(traffic-light-plus.png) center no-repeat;
+}
+
+#table .edit
+{
+ background: url(traffic-light-pencil.png) center no-repeat;
+}
+
+#table .off
+{
+ background: url(traffic-light-off.png) center no-repeat;
+} \ No newline at end of file
diff --git a/plugin_manager/skins/classic/plugin_manager_update.css b/plugin_manager/skins/classic/plugin_manager_update.css
new file mode 100644
index 0000000..346a0f3
--- /dev/null
+++ b/plugin_manager/skins/classic/plugin_manager_update.css
@@ -0,0 +1,69 @@
+.motd{
+ z-index: 9999;
+ position: absolute;
+ top: 5px;
+ margin-left: auto;
+ left: 50%;
+ margin-left: -200px;
+ width: 400px;
+ border-radius: 5px;
+ padding: 4px;
+ -moz-border-radius: 5px;
+ border: 1px solid #DEEEFC;
+ background-color: #F2F9FF;
+ text-align: justify;
+ color: #3F70BA;
+}
+
+.updatepm{
+ z-index: 9999;
+ position: absolute;
+ top: 30px;
+ margin-left: auto;
+ left: 50%;
+ margin-left: -200px;
+ width: 400px;
+ border-radius: 5px;
+ padding: 4px;
+ -moz-border-radius: 5px;
+ border: 1px solid #DEEEFC;
+ background: url(download.png) 20px 8px no-repeat #F2F9FF;
+ text-align: center;
+ color: #3F70BA;
+ cursor: pointer;
+}
+
+.updatepmrequired{
+ z-index: 9999;
+ position: absolute;
+ top: 30px;
+ margin-left: auto;
+ left: 50%;
+ margin-left: -200px;
+ width: 400px;
+ border-radius: 5px;
+ padding: 4px;
+ -moz-border-radius: 5px;
+ border: 1px solid #FEEBAB;
+ background: url(download.png) 20px 8px no-repeat #FEF8E1;
+ text-align: center;
+ color: #9E660D;
+ cursor: pointer;
+}
+
+.myrcerror{
+ z-index: 9999;
+ position: absolute;
+ top: 30px;
+ margin-left: auto;
+ left: 50%;
+ margin-left: -200px;
+ width: 400px;
+ border-radius: 5px;
+ padding: 4px;
+ -moz-border-radius: 5px;
+ background-color: #FF6B61;
+ border: 1px solid #FF0800;
+ text-align: center;
+ color: #733737;
+} \ No newline at end of file
diff --git a/plugin_manager/skins/classic/templates/config.html b/plugin_manager/skins/classic/templates/config.html
new file mode 100644
index 0000000..d2ff4ca
--- /dev/null
+++ b/plugin_manager/skins/classic/templates/config.html
@@ -0,0 +1,11 @@
+<roundcube:object name="doctype" value="html5" />
+<html>
+<head>
+<title><roundcube:object name="pagetitle" /></title>
+<roundcube:include file="/includes/links.html" />
+</head>
+<body class="iframe" style="margin: 0 0 0 0">
+<roundcube:object name="plugin.body" />
+<roundcube:include file="/includes/footer.html" />
+</body>
+</html> \ No newline at end of file
diff --git a/plugin_manager/skins/classic/templates/error.html b/plugin_manager/skins/classic/templates/error.html
new file mode 100644
index 0000000..aa12a8a
--- /dev/null
+++ b/plugin_manager/skins/classic/templates/error.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title><roundcube:object name="productname" /> :: ERROR</title>
+<roundcube:include file="/includes/links.html" />
+</head>
+<body>
+
+<div style="width:400px; margin:60px auto;">
+<roundcube:object name="plugin.body" />
+</div>
+
+</body>
+</html>
diff --git a/plugin_manager/skins/classic/templates/transfer.html b/plugin_manager/skins/classic/templates/transfer.html
new file mode 100644
index 0000000..7616cbb
--- /dev/null
+++ b/plugin_manager/skins/classic/templates/transfer.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title><roundcube:object name="pagetitle" /></title>
+<roundcube:include file="/includes/links.html" />
+</head>
+<body class="iframe">
+<roundcube:object name="plugin.body" />
+</body>
+</html>
diff --git a/plugin_manager/skins/classic/traffic-light-exclamation.png b/plugin_manager/skins/classic/traffic-light-exclamation.png
new file mode 100644
index 0000000..d547fab
--- /dev/null
+++ b/plugin_manager/skins/classic/traffic-light-exclamation.png
Binary files differ
diff --git a/plugin_manager/skins/classic/traffic-light-off.png b/plugin_manager/skins/classic/traffic-light-off.png
new file mode 100644
index 0000000..261565a
--- /dev/null
+++ b/plugin_manager/skins/classic/traffic-light-off.png
Binary files differ
diff --git a/plugin_manager/skins/classic/traffic-light-pencil.png b/plugin_manager/skins/classic/traffic-light-pencil.png
new file mode 100644
index 0000000..90b70ef
--- /dev/null
+++ b/plugin_manager/skins/classic/traffic-light-pencil.png
Binary files differ
diff --git a/plugin_manager/skins/classic/traffic-light-plus.png b/plugin_manager/skins/classic/traffic-light-plus.png
new file mode 100644
index 0000000..0bddb65
--- /dev/null
+++ b/plugin_manager/skins/classic/traffic-light-plus.png
Binary files differ
diff --git a/plugin_manager/skins/classic/traffic-light.png b/plugin_manager/skins/classic/traffic-light.png
new file mode 100644
index 0000000..9b458bc
--- /dev/null
+++ b/plugin_manager/skins/classic/traffic-light.png
Binary files differ
diff --git a/plugin_manager/skins/classic/watermark.gif b/plugin_manager/skins/classic/watermark.gif
new file mode 100644
index 0000000..03e3155
--- /dev/null
+++ b/plugin_manager/skins/classic/watermark.gif
Binary files differ
diff --git a/plugin_manager/skins/larry/blank.html b/plugin_manager/skins/larry/blank.html
new file mode 100644
index 0000000..f0487b2
--- /dev/null
+++ b/plugin_manager/skins/larry/blank.html
@@ -0,0 +1,16 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title></title>
+<style type="text/css">
+
+html, body {
+ height: 95%;
+}
+
+</style>
+</head>
+<body>
+
+</body>
+</html> \ No newline at end of file
diff --git a/plugin_manager/skins/larry/download.png b/plugin_manager/skins/larry/download.png
new file mode 100644
index 0000000..2271b6d
--- /dev/null
+++ b/plugin_manager/skins/larry/download.png
Binary files differ
diff --git a/plugin_manager/skins/larry/images/ui-bg_flat_0_aaaaaa_40x100.png b/plugin_manager/skins/larry/images/ui-bg_flat_0_aaaaaa_40x100.png
new file mode 100644
index 0000000..9c012f6
--- /dev/null
+++ b/plugin_manager/skins/larry/images/ui-bg_flat_0_aaaaaa_40x100.png
Binary files differ
diff --git a/plugin_manager/skins/larry/images/ui-bg_flat_75_ffffff_40x100.png b/plugin_manager/skins/larry/images/ui-bg_flat_75_ffffff_40x100.png
new file mode 100644
index 0000000..a709a5d
--- /dev/null
+++ b/plugin_manager/skins/larry/images/ui-bg_flat_75_ffffff_40x100.png
Binary files differ
diff --git a/plugin_manager/skins/larry/images/ui-bg_glass_55_fbf9ee_1x400.png b/plugin_manager/skins/larry/images/ui-bg_glass_55_fbf9ee_1x400.png
new file mode 100644
index 0000000..ec6a7d5
--- /dev/null
+++ b/plugin_manager/skins/larry/images/ui-bg_glass_55_fbf9ee_1x400.png
Binary files differ
diff --git a/plugin_manager/skins/larry/images/ui-bg_glass_65_ffffff_1x400.png b/plugin_manager/skins/larry/images/ui-bg_glass_65_ffffff_1x400.png
new file mode 100644
index 0000000..f8de70a
--- /dev/null
+++ b/plugin_manager/skins/larry/images/ui-bg_glass_65_ffffff_1x400.png
Binary files differ
diff --git a/plugin_manager/skins/larry/images/ui-bg_glass_75_dadada_1x400.png b/plugin_manager/skins/larry/images/ui-bg_glass_75_dadada_1x400.png
new file mode 100644
index 0000000..3d1dfae
--- /dev/null
+++ b/plugin_manager/skins/larry/images/ui-bg_glass_75_dadada_1x400.png
Binary files differ
diff --git a/plugin_manager/skins/larry/images/ui-bg_glass_75_e6e6e6_1x400.png b/plugin_manager/skins/larry/images/ui-bg_glass_75_e6e6e6_1x400.png
new file mode 100644
index 0000000..548004c
--- /dev/null
+++ b/plugin_manager/skins/larry/images/ui-bg_glass_75_e6e6e6_1x400.png
Binary files differ
diff --git a/plugin_manager/skins/larry/images/ui-bg_glass_95_fef1ec_1x400.png b/plugin_manager/skins/larry/images/ui-bg_glass_95_fef1ec_1x400.png
new file mode 100644
index 0000000..71dfda1
--- /dev/null
+++ b/plugin_manager/skins/larry/images/ui-bg_glass_95_fef1ec_1x400.png
Binary files differ
diff --git a/plugin_manager/skins/larry/images/ui-bg_highlight-soft_75_cccccc_1x100.png b/plugin_manager/skins/larry/images/ui-bg_highlight-soft_75_cccccc_1x100.png
new file mode 100644
index 0000000..92cbef3
--- /dev/null
+++ b/plugin_manager/skins/larry/images/ui-bg_highlight-soft_75_cccccc_1x100.png
Binary files differ
diff --git a/plugin_manager/skins/larry/images/ui-icons_222222_256x240.png b/plugin_manager/skins/larry/images/ui-icons_222222_256x240.png
new file mode 100644
index 0000000..c1cb117
--- /dev/null
+++ b/plugin_manager/skins/larry/images/ui-icons_222222_256x240.png
Binary files differ
diff --git a/plugin_manager/skins/larry/images/ui-icons_2e83ff_256x240.png b/plugin_manager/skins/larry/images/ui-icons_2e83ff_256x240.png
new file mode 100644
index 0000000..84b601b
--- /dev/null
+++ b/plugin_manager/skins/larry/images/ui-icons_2e83ff_256x240.png
Binary files differ
diff --git a/plugin_manager/skins/larry/images/ui-icons_454545_256x240.png b/plugin_manager/skins/larry/images/ui-icons_454545_256x240.png
new file mode 100644
index 0000000..b6db1ac
--- /dev/null
+++ b/plugin_manager/skins/larry/images/ui-icons_454545_256x240.png
Binary files differ
diff --git a/plugin_manager/skins/larry/images/ui-icons_888888_256x240.png b/plugin_manager/skins/larry/images/ui-icons_888888_256x240.png
new file mode 100644
index 0000000..feea0e2
--- /dev/null
+++ b/plugin_manager/skins/larry/images/ui-icons_888888_256x240.png
Binary files differ
diff --git a/plugin_manager/skins/larry/images/ui-icons_cd0a0a_256x240.png b/plugin_manager/skins/larry/images/ui-icons_cd0a0a_256x240.png
new file mode 100644
index 0000000..ed5b6b0
--- /dev/null
+++ b/plugin_manager/skins/larry/images/ui-icons_cd0a0a_256x240.png
Binary files differ
diff --git a/plugin_manager/skins/larry/jqueryui.css b/plugin_manager/skins/larry/jqueryui.css
new file mode 100644
index 0000000..0e48b38
--- /dev/null
+++ b/plugin_manager/skins/larry/jqueryui.css
@@ -0,0 +1,462 @@
+/*! jQuery UI - v1.9.2 - 2013-06-15
+* http://jqueryui.com
+* Includes: jquery.ui.core.css, jquery.ui.resizable.css, jquery.ui.selectable.css, jquery.ui.accordion.css, jquery.ui.autocomplete.css, jquery.ui.button.css, jquery.ui.datepicker.css, jquery.ui.dialog.css, jquery.ui.menu.css, jquery.ui.progressbar.css, jquery.ui.slider.css, jquery.ui.spinner.css, jquery.ui.tabs.css, jquery.ui.tooltip.css
+* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Verdana%2CArial%2Csans-serif&fwDefault=normal&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=cccccc&bgTextureHeader=highlight_soft&bgImgOpacityHeader=75&borderColorHeader=aaaaaa&fcHeader=222222&iconColorHeader=222222&bgColorContent=ffffff&bgTextureContent=flat&bgImgOpacityContent=75&borderColorContent=aaaaaa&fcContent=222222&iconColorContent=222222&bgColorDefault=e6e6e6&bgTextureDefault=glass&bgImgOpacityDefault=75&borderColorDefault=d3d3d3&fcDefault=555555&iconColorDefault=888888&bgColorHover=dadada&bgTextureHover=glass&bgImgOpacityHover=75&borderColorHover=999999&fcHover=212121&iconColorHover=454545&bgColorActive=ffffff&bgTextureActive=glass&bgImgOpacityActive=65&borderColorActive=aaaaaa&fcActive=212121&iconColorActive=454545&bgColorHighlight=fbf9ee&bgTextureHighlight=glass&bgImgOpacityHighlight=55&borderColorHighlight=fcefa1&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=glass&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px
+* Copyright 2013 jQuery Foundation and other contributors Licensed MIT */
+
+/* Layout helpers
+----------------------------------*/
+.ui-helper-hidden { display: none; }
+.ui-helper-hidden-accessible { border: 0; clip: rect(0 0 0 0); height: 1px; margin: -1px; overflow: hidden; padding: 0; position: absolute; width: 1px; }
+.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; }
+.ui-helper-clearfix:before, .ui-helper-clearfix:after { content: ""; display: table; }
+.ui-helper-clearfix:after { clear: both; }
+.ui-helper-clearfix { zoom: 1; }
+.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); }
+
+
+/* Interaction Cues
+----------------------------------*/
+.ui-state-disabled { cursor: default !important; }
+
+
+/* Icons
+----------------------------------*/
+
+/* states and images */
+.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; }
+
+
+/* Misc visuals
+----------------------------------*/
+
+/* Overlays */
+.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }
+.ui-resizable { position: relative;}
+.ui-resizable-handle { position: absolute;font-size: 0.1px; display: block; }
+.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; }
+.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; }
+.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; }
+.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; }
+.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; }
+.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; }
+.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; }
+.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; }
+.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}.ui-selectable-helper { position: absolute; z-index: 100; border:1px dotted black; }
+.ui-accordion .ui-accordion-header { display: block; cursor: pointer; position: relative; margin-top: 2px; padding: .5em .5em .5em .7em; zoom: 1; }
+.ui-accordion .ui-accordion-icons { padding-left: 2.2em; }
+.ui-accordion .ui-accordion-noicons { padding-left: .7em; }
+.ui-accordion .ui-accordion-icons .ui-accordion-icons { padding-left: 2.2em; }
+.ui-accordion .ui-accordion-header .ui-accordion-header-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; }
+.ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; overflow: auto; zoom: 1; }
+.ui-autocomplete {
+ position: absolute;
+ top: 0;
+ left: 0;
+ cursor: default;
+}
+
+/* workarounds */
+* html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */
+.ui-button { display: inline-block; position: relative; padding: 0; margin-right: .1em; cursor: pointer; text-align: center; zoom: 1; overflow: visible; } /* the overflow property removes extra width in IE */
+.ui-button, .ui-button:link, .ui-button:visited, .ui-button:hover, .ui-button:active { text-decoration: none; }
+.ui-button-icon-only { width: 2.2em; } /* to make room for the icon, a width needs to be set here */
+button.ui-button-icon-only { width: 2.4em; } /* button elements seem to need a little more width */
+.ui-button-icons-only { width: 3.4em; }
+button.ui-button-icons-only { width: 3.7em; }
+
+/*button text element */
+.ui-button .ui-button-text { display: block; line-height: 1.4; }
+.ui-button-text-only .ui-button-text { padding: .4em 1em; }
+.ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text { padding: .4em; text-indent: -9999999px; }
+.ui-button-text-icon-primary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 1em .4em 2.1em; }
+.ui-button-text-icon-secondary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 2.1em .4em 1em; }
+.ui-button-text-icons .ui-button-text { padding-left: 2.1em; padding-right: 2.1em; }
+/* no icon support for input elements, provide padding by default */
+input.ui-button { padding: .4em 1em; }
+
+/*button icon element(s) */
+.ui-button-icon-only .ui-icon, .ui-button-text-icon-primary .ui-icon, .ui-button-text-icon-secondary .ui-icon, .ui-button-text-icons .ui-icon, .ui-button-icons-only .ui-icon { position: absolute; top: 50%; margin-top: -8px; }
+.ui-button-icon-only .ui-icon { left: 50%; margin-left: -8px; }
+.ui-button-text-icon-primary .ui-button-icon-primary, .ui-button-text-icons .ui-button-icon-primary, .ui-button-icons-only .ui-button-icon-primary { left: .5em; }
+.ui-button-text-icon-secondary .ui-button-icon-secondary, .ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; }
+.ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; }
+
+/*button sets*/
+.ui-buttonset { margin-right: 7px; }
+.ui-buttonset .ui-button { margin-left: 0; margin-right: -.3em; }
+
+/* workarounds */
+button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra padding in Firefox */
+.ui-datepicker { width: 17em; padding: .2em .2em 0; display: none; }
+.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; }
+.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; }
+.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; }
+.ui-datepicker .ui-datepicker-prev { left:2px; }
+.ui-datepicker .ui-datepicker-next { right:2px; }
+.ui-datepicker .ui-datepicker-prev-hover { left:1px; }
+.ui-datepicker .ui-datepicker-next-hover { right:1px; }
+.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; }
+.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; }
+.ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0; }
+.ui-datepicker select.ui-datepicker-month-year {width: 100%;}
+.ui-datepicker select.ui-datepicker-month,
+.ui-datepicker select.ui-datepicker-year { width: 49%;}
+.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; }
+.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; }
+.ui-datepicker td { border: 0; padding: 1px; }
+.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; }
+.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; }
+.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; }
+.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; }
+
+/* with multiple calendars */
+.ui-datepicker.ui-datepicker-multi { width:auto; }
+.ui-datepicker-multi .ui-datepicker-group { float:left; }
+.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; }
+.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; }
+.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; }
+.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; }
+.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; }
+.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; }
+.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; }
+.ui-datepicker-row-break { clear:both; width:100%; font-size:0em; }
+
+/* RTL support */
+.ui-datepicker-rtl { direction: rtl; }
+.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; }
+.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; }
+.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; }
+.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; }
+.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; }
+.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; }
+.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; }
+.ui-datepicker-rtl .ui-datepicker-group { float:right; }
+.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
+.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
+
+/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */
+.ui-datepicker-cover {
+ position: absolute; /*must have*/
+ z-index: -1; /*must have*/
+ filter: mask(); /*must have*/
+ top: -4px; /*must have*/
+ left: -4px; /*must have*/
+ width: 200px; /*must have*/
+ height: 200px; /*must have*/
+}.ui-dialog { position: absolute; top: 0; left: 0; padding: .2em; width: 300px; overflow: hidden; }
+.ui-dialog .ui-dialog-titlebar { padding: .4em 1em; position: relative; }
+.ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .1em 0; }
+.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; }
+.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; }
+.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; }
+.ui-dialog .ui-dialog-content { position: relative; border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; }
+.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; }
+.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { float: right; }
+.ui-dialog .ui-dialog-buttonpane button { margin: .5em .4em .5em 0; cursor: pointer; }
+.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; }
+.ui-draggable .ui-dialog-titlebar { cursor: move; }
+.ui-menu { list-style:none; padding: 2px; margin: 0; display:block; outline: none; }
+.ui-menu .ui-menu { margin-top: -3px; position: absolute; }
+.ui-menu .ui-menu-item { margin: 0; padding: 0; zoom: 1; width: 100%; }
+.ui-menu .ui-menu-divider { margin: 5px -2px 5px -2px; height: 0; font-size: 0; line-height: 0; border-width: 1px 0 0 0; }
+.ui-menu .ui-menu-item a { text-decoration: none; display: block; padding: 2px .4em; line-height: 1.5; zoom: 1; font-weight: normal; }
+.ui-menu .ui-menu-item a.ui-state-focus,
+.ui-menu .ui-menu-item a.ui-state-active { font-weight: normal; margin: -1px; }
+
+.ui-menu .ui-state-disabled { font-weight: normal; margin: .4em 0 .2em; line-height: 1.5; }
+.ui-menu .ui-state-disabled a { cursor: default; }
+
+/* icon support */
+.ui-menu-icons { position: relative; }
+.ui-menu-icons .ui-menu-item a { position: relative; padding-left: 2em; }
+
+/* left-aligned */
+.ui-menu .ui-icon { position: absolute; top: .2em; left: .2em; }
+
+/* right-aligned */
+.ui-menu .ui-menu-icon { position: static; float: right; }
+.ui-progressbar { height:2em; text-align: left; overflow: hidden; }
+.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; }.ui-slider { position: relative; text-align: left; }
+.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; }
+.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0; }
+
+.ui-slider-horizontal { height: .8em; }
+.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; }
+.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; }
+.ui-slider-horizontal .ui-slider-range-min { left: 0; }
+.ui-slider-horizontal .ui-slider-range-max { right: 0; }
+
+.ui-slider-vertical { width: .8em; height: 100px; }
+.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; }
+.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; }
+.ui-slider-vertical .ui-slider-range-min { bottom: 0; }
+.ui-slider-vertical .ui-slider-range-max { top: 0; }.ui-spinner { position:relative; display: inline-block; overflow: hidden; padding: 0; vertical-align: middle; }
+.ui-spinner-input { border: none; background: none; padding: 0; margin: .2em 0; vertical-align: middle; margin-left: .4em; margin-right: 22px; }
+.ui-spinner-button { width: 16px; height: 50%; font-size: .5em; padding: 0; margin: 0; text-align: center; position: absolute; cursor: default; display: block; overflow: hidden; right: 0; }
+.ui-spinner a.ui-spinner-button { border-top: none; border-bottom: none; border-right: none; } /* more specificity required here to overide default borders */
+.ui-spinner .ui-icon { position: absolute; margin-top: -8px; top: 50%; left: 0; } /* vertical centre icon */
+.ui-spinner-up { top: 0; }
+.ui-spinner-down { bottom: 0; }
+
+/* TR overrides */
+.ui-spinner .ui-icon-triangle-1-s {
+ /* need to fix icons sprite */
+ background-position:-65px -16px;
+}
+.ui-tabs { position: relative; padding: .2em; zoom: 1; } /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
+.ui-tabs .ui-tabs-nav { margin: 0; padding: .2em .2em 0; }
+.ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; top: 0; margin: 1px .2em 0 0; border-bottom: 0; padding: 0; white-space: nowrap; }
+.ui-tabs .ui-tabs-nav li a { float: left; padding: .5em 1em; text-decoration: none; }
+.ui-tabs .ui-tabs-nav li.ui-tabs-active { margin-bottom: -1px; padding-bottom: 1px; }
+.ui-tabs .ui-tabs-nav li.ui-tabs-active a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-tabs-loading a { cursor: text; }
+.ui-tabs .ui-tabs-nav li a, .ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */
+.ui-tabs .ui-tabs-panel { display: block; border-width: 0; padding: 1em 1.4em; background: none; }
+.ui-tooltip {
+ padding: 8px;
+ position: absolute;
+ z-index: 9999;
+ max-width: 300px;
+ -webkit-box-shadow: 0 0 5px #aaa;
+ box-shadow: 0 0 5px #aaa;
+}
+/* Fades and background-images don't work well together in IE6, drop the image */
+* html .ui-tooltip {
+ background-image: none;
+}
+body .ui-tooltip { border-width: 2px; }
+
+/* Component containers
+----------------------------------*/
+.ui-widget { font-family: Verdana,Arial,sans-serif; font-size: 1.1em; }
+.ui-widget .ui-widget { font-size: 1em; }
+.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Verdana,Arial,sans-serif; font-size: 1em; }
+.ui-widget-content { border: 1px solid #aaaaaa; background: #ffffff url(images/ui-bg_flat_75_ffffff_40x100.png) 50% 50% repeat-x; color: #222222; }
+.ui-widget-content a { color: #222222; }
+.ui-widget-header { border: 1px solid #aaaaaa; background: #cccccc 50% 50% repeat-x; color: #222222; font-weight: bold; }
+.ui-widget-header a { color: #222222; }
+
+/* Interaction states
+----------------------------------*/
+.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #d3d3d3; background: #e6e6e6 url(images/ui-bg_glass_75_e6e6e6_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #555555; }
+.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #555555; text-decoration: none; }
+.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #999999; background: #dadada url(images/ui-bg_glass_75_dadada_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #212121; }
+.ui-state-hover a, .ui-state-hover a:hover, .ui-state-hover a:link, .ui-state-hover a:visited { color: #212121; text-decoration: none; }
+.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #aaaaaa; background: #ffffff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #212121; }
+.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #212121; text-decoration: none; }
+
+/* Interaction Cues
+----------------------------------*/
+.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {border: 1px solid #fcefa1; background: #fbf9ee url(images/ui-bg_glass_55_fbf9ee_1x400.png) 50% 50% repeat-x; color: #363636; }
+.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636; }
+.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #cd0a0a; background: #fef1ec url(images/ui-bg_glass_95_fef1ec_1x400.png) 50% 50% repeat-x; color: #cd0a0a; }
+.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #cd0a0a; }
+.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #cd0a0a; }
+.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; }
+.ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; }
+.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; }
+.ui-state-disabled .ui-icon { filter:Alpha(Opacity=35); } /* For IE8 - See #6059 */
+
+/* Icons
+----------------------------------*/
+
+/* states and images */
+.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png); }
+.ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); }
+.ui-widget-header .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); }
+.ui-state-default .ui-icon { background-image: url(images/ui-icons_888888_256x240.png); }
+.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_454545_256x240.png); }
+.ui-state-active .ui-icon {background-image: url(images/ui-icons_454545_256x240.png); }
+.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_2e83ff_256x240.png); }
+.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_cd0a0a_256x240.png); }
+
+/* positioning */
+.ui-icon-carat-1-n { background-position: 0 0; }
+.ui-icon-carat-1-ne { background-position: -16px 0; }
+.ui-icon-carat-1-e { background-position: -32px 0; }
+.ui-icon-carat-1-se { background-position: -48px 0; }
+.ui-icon-carat-1-s { background-position: -64px 0; }
+.ui-icon-carat-1-sw { background-position: -80px 0; }
+.ui-icon-carat-1-w { background-position: -96px 0; }
+.ui-icon-carat-1-nw { background-position: -112px 0; }
+.ui-icon-carat-2-n-s { background-position: -128px 0; }
+.ui-icon-carat-2-e-w { background-position: -144px 0; }
+.ui-icon-triangle-1-n { background-position: 0 -16px; }
+.ui-icon-triangle-1-ne { background-position: -16px -16px; }
+.ui-icon-triangle-1-e { background-position: -32px -16px; }
+.ui-icon-triangle-1-se { background-position: -48px -16px; }
+.ui-icon-triangle-1-s { background-position: -64px -16px; }
+.ui-icon-triangle-1-sw { background-position: -80px -16px; }
+.ui-icon-triangle-1-w { background-position: -96px -16px; }
+.ui-icon-triangle-1-nw { background-position: -112px -16px; }
+.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
+.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
+.ui-icon-arrow-1-n { background-position: 0 -32px; }
+.ui-icon-arrow-1-ne { background-position: -16px -32px; }
+.ui-icon-arrow-1-e { background-position: -32px -32px; }
+.ui-icon-arrow-1-se { background-position: -48px -32px; }
+.ui-icon-arrow-1-s { background-position: -64px -32px; }
+.ui-icon-arrow-1-sw { background-position: -80px -32px; }
+.ui-icon-arrow-1-w { background-position: -96px -32px; }
+.ui-icon-arrow-1-nw { background-position: -112px -32px; }
+.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
+.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
+.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
+.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
+.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
+.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
+.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
+.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
+.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
+.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
+.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
+.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
+.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
+.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
+.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
+.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
+.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
+.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
+.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
+.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
+.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
+.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
+.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
+.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
+.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
+.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
+.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
+.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
+.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
+.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
+.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
+.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
+.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
+.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
+.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
+.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
+.ui-icon-arrow-4 { background-position: 0 -80px; }
+.ui-icon-arrow-4-diag { background-position: -16px -80px; }
+.ui-icon-extlink { background-position: -32px -80px; }
+.ui-icon-newwin { background-position: -48px -80px; }
+.ui-icon-refresh { background-position: -64px -80px; }
+.ui-icon-shuffle { background-position: -80px -80px; }
+.ui-icon-transfer-e-w { background-position: -96px -80px; }
+.ui-icon-transferthick-e-w { background-position: -112px -80px; }
+.ui-icon-folder-collapsed { background-position: 0 -96px; }
+.ui-icon-folder-open { background-position: -16px -96px; }
+.ui-icon-document { background-position: -32px -96px; }
+.ui-icon-document-b { background-position: -48px -96px; }
+.ui-icon-note { background-position: -64px -96px; }
+.ui-icon-mail-closed { background-position: -80px -96px; }
+.ui-icon-mail-open { background-position: -96px -96px; }
+.ui-icon-suitcase { background-position: -112px -96px; }
+.ui-icon-comment { background-position: -128px -96px; }
+.ui-icon-person { background-position: -144px -96px; }
+.ui-icon-print { background-position: -160px -96px; }
+.ui-icon-trash { background-position: -176px -96px; }
+.ui-icon-locked { background-position: -192px -96px; }
+.ui-icon-unlocked { background-position: -208px -96px; }
+.ui-icon-bookmark { background-position: -224px -96px; }
+.ui-icon-tag { background-position: -240px -96px; }
+.ui-icon-home { background-position: 0 -112px; }
+.ui-icon-flag { background-position: -16px -112px; }
+.ui-icon-calendar { background-position: -32px -112px; }
+.ui-icon-cart { background-position: -48px -112px; }
+.ui-icon-pencil { background-position: -64px -112px; }
+.ui-icon-clock { background-position: -80px -112px; }
+.ui-icon-disk { background-position: -96px -112px; }
+.ui-icon-calculator { background-position: -112px -112px; }
+.ui-icon-zoomin { background-position: -128px -112px; }
+.ui-icon-zoomout { background-position: -144px -112px; }
+.ui-icon-search { background-position: -160px -112px; }
+.ui-icon-wrench { background-position: -176px -112px; }
+.ui-icon-gear { background-position: -192px -112px; }
+.ui-icon-heart { background-position: -208px -112px; }
+.ui-icon-star { background-position: -224px -112px; }
+.ui-icon-link { background-position: -240px -112px; }
+.ui-icon-cancel { background-position: 0 -128px; }
+.ui-icon-plus { background-position: -16px -128px; }
+.ui-icon-plusthick { background-position: -32px -128px; }
+.ui-icon-minus { background-position: -48px -128px; }
+.ui-icon-minusthick { background-position: -64px -128px; }
+.ui-icon-close { background-position: -80px -128px; }
+.ui-icon-closethick { background-position: -96px -128px; }
+.ui-icon-key { background-position: -112px -128px; }
+.ui-icon-lightbulb { background-position: -128px -128px; }
+.ui-icon-scissors { background-position: -144px -128px; }
+.ui-icon-clipboard { background-position: -160px -128px; }
+.ui-icon-copy { background-position: -176px -128px; }
+.ui-icon-contact { background-position: -192px -128px; }
+.ui-icon-image { background-position: -208px -128px; }
+.ui-icon-video { background-position: -224px -128px; }
+.ui-icon-script { background-position: -240px -128px; }
+.ui-icon-alert { background-position: 0 -144px; }
+.ui-icon-info { background-position: -16px -144px; }
+.ui-icon-notice { background-position: -32px -144px; }
+.ui-icon-help { background-position: -48px -144px; }
+.ui-icon-check { background-position: -64px -144px; }
+.ui-icon-bullet { background-position: -80px -144px; }
+.ui-icon-radio-on { background-position: -96px -144px; }
+.ui-icon-radio-off { background-position: -112px -144px; }
+.ui-icon-pin-w { background-position: -128px -144px; }
+.ui-icon-pin-s { background-position: -144px -144px; }
+.ui-icon-play { background-position: 0 -160px; }
+.ui-icon-pause { background-position: -16px -160px; }
+.ui-icon-seek-next { background-position: -32px -160px; }
+.ui-icon-seek-prev { background-position: -48px -160px; }
+.ui-icon-seek-end { background-position: -64px -160px; }
+.ui-icon-seek-start { background-position: -80px -160px; }
+/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
+.ui-icon-seek-first { background-position: -80px -160px; }
+.ui-icon-stop { background-position: -96px -160px; }
+.ui-icon-eject { background-position: -112px -160px; }
+.ui-icon-volume-off { background-position: -128px -160px; }
+.ui-icon-volume-on { background-position: -144px -160px; }
+.ui-icon-power { background-position: 0 -176px; }
+.ui-icon-signal-diag { background-position: -16px -176px; }
+.ui-icon-signal { background-position: -32px -176px; }
+.ui-icon-battery-0 { background-position: -48px -176px; }
+.ui-icon-battery-1 { background-position: -64px -176px; }
+.ui-icon-battery-2 { background-position: -80px -176px; }
+.ui-icon-battery-3 { background-position: -96px -176px; }
+.ui-icon-circle-plus { background-position: 0 -192px; }
+.ui-icon-circle-minus { background-position: -16px -192px; }
+.ui-icon-circle-close { background-position: -32px -192px; }
+.ui-icon-circle-triangle-e { background-position: -48px -192px; }
+.ui-icon-circle-triangle-s { background-position: -64px -192px; }
+.ui-icon-circle-triangle-w { background-position: -80px -192px; }
+.ui-icon-circle-triangle-n { background-position: -96px -192px; }
+.ui-icon-circle-arrow-e { background-position: -112px -192px; }
+.ui-icon-circle-arrow-s { background-position: -128px -192px; }
+.ui-icon-circle-arrow-w { background-position: -144px -192px; }
+.ui-icon-circle-arrow-n { background-position: -160px -192px; }
+.ui-icon-circle-zoomin { background-position: -176px -192px; }
+.ui-icon-circle-zoomout { background-position: -192px -192px; }
+.ui-icon-circle-check { background-position: -208px -192px; }
+.ui-icon-circlesmall-plus { background-position: 0 -208px; }
+.ui-icon-circlesmall-minus { background-position: -16px -208px; }
+.ui-icon-circlesmall-close { background-position: -32px -208px; }
+.ui-icon-squaresmall-plus { background-position: -48px -208px; }
+.ui-icon-squaresmall-minus { background-position: -64px -208px; }
+.ui-icon-squaresmall-close { background-position: -80px -208px; }
+.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
+.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
+.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
+.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
+.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
+.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
+
+
+/* Misc visuals
+----------------------------------*/
+
+/* Corner radius */
+.ui-corner-all, .ui-corner-top, .ui-corner-left, .ui-corner-tl { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; -khtml-border-top-left-radius: 4px; border-top-left-radius: 4px; }
+.ui-corner-all, .ui-corner-top, .ui-corner-right, .ui-corner-tr { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; -khtml-border-top-right-radius: 4px; border-top-right-radius: 4px; }
+.ui-corner-all, .ui-corner-bottom, .ui-corner-left, .ui-corner-bl { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; -khtml-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; }
+.ui-corner-all, .ui-corner-bottom, .ui-corner-right, .ui-corner-br { -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; -khtml-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; }
+
+/* Overlays */
+.ui-widget-overlay { background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .3;filter:Alpha(Opacity=30); }
+.ui-widget-shadow { margin: -8px 0 0 -8px; padding: 8px; background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .3;filter:Alpha(Opacity=30); -moz-border-radius: 8px; -khtml-border-radius: 8px; -webkit-border-radius: 8px; border-radius: 8px; } \ No newline at end of file
diff --git a/plugin_manager/skins/larry/manage-plugins-col.png b/plugin_manager/skins/larry/manage-plugins-col.png
new file mode 100644
index 0000000..a117439
--- /dev/null
+++ b/plugin_manager/skins/larry/manage-plugins-col.png
Binary files differ
diff --git a/plugin_manager/skins/larry/myroundcube.html b/plugin_manager/skins/larry/myroundcube.html
new file mode 100644
index 0000000..681c35a
--- /dev/null
+++ b/plugin_manager/skins/larry/myroundcube.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title></title>
+<style type="text/css">
+
+html, body {
+ height: 95%;
+}
+
+body {
+ background: url(../../../myrc_sprites/skins/larry/images/myrc_watermark.png) center no-repeat #fff;
+}
+
+</style>
+</head>
+<body>
+
+</body>
+</html> \ No newline at end of file
diff --git a/plugin_manager/skins/larry/plugin_manager.css b/plugin_manager/skins/larry/plugin_manager.css
new file mode 100644
index 0000000..bdf188c
--- /dev/null
+++ b/plugin_manager/skins/larry/plugin_manager.css
@@ -0,0 +1,208 @@
+#plugin_manager_overlay {
+ display: none;
+ position: fixed;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ z-index: 4999;
+ background: rgba(0,0,0,0.5) !important;
+ background: #F6F6F6;
+ /** IE hacks */
+ filter: alpha(opacity=90);
+ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=90)";
+ width: expression(document.documentElement.clientWidth+'px');
+ height: expression(document.documentElement.clientHeight+'px');
+}
+
+legend{
+ padding-top: 15px;
+ margin-left: -2px;
+}
+
+#paypal{
+ position: absolute;
+ top: 0;
+ right: 15px;
+ z-index: 9999;
+}
+
+.qtip{
+ max-width: 350px;
+}
+
+#sections-table #rcmrowplugin_manager td.section{
+ background: url(manage-plugins-col.png) 6px 0px no-repeat;
+}
+
+#sections-table #rcmrowplugin_manager.selected td.section{
+ background: url(manage-plugins-col.png) 6px -25px no-repeat;
+}
+
+.asterix
+{
+ display: inline;
+ float: left;
+ margin-left: 5px;
+}
+
+.plugin_manager_ul
+{
+ list-style: none;
+ margin-top: 0px;
+}
+
+.plugin_manager_ul li
+{
+ padding-left: 0px;
+ margin-left:-40px;
+}
+
+.plugin_manager_ul input[type="checkbox"]
+{
+ margin-left: 0;
+ vertical-align: bottom;
+}
+
+.pm_control input[type="checkbox"]
+{
+ vertical-align: bottom;
+}
+
+.title
+{
+ color: #2c84e1;
+ padding-right: 10px;
+}
+
+.pm_section
+{
+ float: left;
+}
+
+.pm_update
+{
+ margin-top: 0px;
+ margin-bottom: 0px;
+ padding: 0px 15px;
+}
+
+table.propform td {
+ width: 1px !important;
+}
+
+table.propform td.pm_legend {
+ width: auto !important;
+ border-bottom: 0 solid #fff;
+}
+
+#prefs-title-right
+{
+ color: #1f75cc;
+ font-size: 20px;
+ float: right;
+ margin-top: 7px;
+ margin-right: 25px;
+ display: inline;
+}
+
+#table
+{
+ /*table-layout:fixed;
+ overflow: hidden;
+ white-space: nowrap;*/
+ width: 100%;
+}
+
+#table tbody tr td
+{
+ height: 20px;
+ padding: 5px;
+ font-size: 13px;
+ overflow: hidden;
+ vertical-align: middle;
+ word-wrap: break-word;
+ text-overflow: ellipsis;
+ -o-text-overflow: ellipsis;
+ border: 1px solid #EBEBEB;
+ cursor: default;
+}
+
+#table thead tr th
+{
+ height: 20px;
+ padding: 5px;
+ font-size: 13px;
+ overflow: hidden;
+ vertical-align: middle;
+ text-overflow: ellipsis;
+ -o-text-overflow: ellipsis;
+ border: 2px solid #EBEBEB;
+ cursor: default;
+}
+
+#rcheader
+{
+ font-size: 13px;
+}
+
+.vmismatch
+{
+ background-color: #EF9398;
+ border-radius: 5px 5px;
+ box-shadow: 0pt 1px 3px rgba(0, 0, 0, 0.1);
+}
+
+.vmatch
+{
+ background-color: #A6EF7B;
+ border-radius: 5px 5px;
+ box-shadow: 0pt 1px 3px rgba(0, 0, 0, 0.1);
+}
+
+.vupdate
+{
+ background-color: #EF9398;
+ border-radius: 5px 5px;
+ box-shadow: 0pt 1px 3px rgba(0, 0, 0, 0.1);
+}
+
+.rcok
+{
+ background: url(traffic-light-off.png) no-repeat;
+}
+
+.rcupdate
+{
+ background: url(traffic-light-exclamation.png) no-repeat;
+}
+
+.rcerror
+{
+ background: url(traffic-light-exclamation.png) no-repeat;
+}
+
+#table .ok
+{
+ background: url(traffic-light-off.png) center no-repeat;
+}
+
+#table .error
+{
+ background: url(traffic-light-exclamation.png) center no-repeat;
+}
+
+#table .update
+{
+ background: url(traffic-light-plus.png) center no-repeat;
+}
+
+#table .edit
+{
+ background: url(traffic-light-pencil.png) center no-repeat;
+}
+
+#table .off
+{
+ background: url(traffic-light-off.png) center no-repeat;
+} \ No newline at end of file
diff --git a/plugin_manager/skins/larry/plugin_manager_update.css b/plugin_manager/skins/larry/plugin_manager_update.css
new file mode 100644
index 0000000..65aa7a2
--- /dev/null
+++ b/plugin_manager/skins/larry/plugin_manager_update.css
@@ -0,0 +1,66 @@
+.motd{
+ z-index: 9997;
+ position: absolute;
+ top: 2px;
+ left: 50%;
+ margin-left: -200px;
+ width: 400px;
+ border-radius: 5px;
+ padding: 10px 10px 10px 10px;
+ -moz-border-radius: 5px;
+ border: 1px solid #DEEEFC;
+ background-color: #F2F9FF;
+ text-align: justify;
+ color: #3F70BA;
+}
+
+.updatepm{
+ z-index: 9998;
+ position: absolute;
+ top: 2px;
+ left: 50%;
+ margin-left: -200px;
+ width: 400px;
+ border-radius: 5px;
+ padding: 4px;
+ -moz-border-radius: 5px;
+ border: 1px solid #DEEEFC;
+ background: url(download.png) 20px 8px no-repeat #F2F9FF;
+ text-align: center;
+ color: #3F70BA;
+ cursor: pointer;
+}
+
+.updatepmrequired{
+ z-index: 9999;
+ position: absolute;
+ top: 2px;
+ left: 50%;
+ margin-left: -200px;
+ width: 400px;
+ border-radius: 5px;
+ padding: 4px;
+ -moz-border-radius: 5px;
+ border: 1px solid #FEEBAB;
+ background: url(download.png) 20px 8px no-repeat #FEF8E1;
+ text-align: center;
+ color: #9E660D;
+ cursor: pointer;
+}
+
+.myrcerror{
+ z-index: 9999;
+ position: absolute;
+ top: 2px;
+ margin-left: auto;
+ left: 50%;
+ margin-left: -200px;
+ width: 400px;
+ border-radius: 5px;
+ padding: 4px;
+ -moz-border-radius: 5px;
+ background-color: #FF6B61;
+ border: 1px solid #FF0800;
+ text-align: center;
+ color: #733737;
+} \ No newline at end of file
diff --git a/plugin_manager/skins/larry/templates/config.html b/plugin_manager/skins/larry/templates/config.html
new file mode 100644
index 0000000..d2ff4ca
--- /dev/null
+++ b/plugin_manager/skins/larry/templates/config.html
@@ -0,0 +1,11 @@
+<roundcube:object name="doctype" value="html5" />
+<html>
+<head>
+<title><roundcube:object name="pagetitle" /></title>
+<roundcube:include file="/includes/links.html" />
+</head>
+<body class="iframe" style="margin: 0 0 0 0">
+<roundcube:object name="plugin.body" />
+<roundcube:include file="/includes/footer.html" />
+</body>
+</html> \ No newline at end of file
diff --git a/plugin_manager/skins/larry/templates/error.html b/plugin_manager/skins/larry/templates/error.html
new file mode 100644
index 0000000..a577eea
--- /dev/null
+++ b/plugin_manager/skins/larry/templates/error.html
@@ -0,0 +1,13 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title><roundcube:object name="pagetitle" /></title>
+<roundcube:include file="/includes/links.html" />
+</head>
+<body>
+
+<div class="uibox centerbox errorbox">
+<roundcube:object name="plugin.body" />
+</div>
+</body>
+</html>
diff --git a/plugin_manager/skins/larry/templates/transfer.html b/plugin_manager/skins/larry/templates/transfer.html
new file mode 100644
index 0000000..7616cbb
--- /dev/null
+++ b/plugin_manager/skins/larry/templates/transfer.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title><roundcube:object name="pagetitle" /></title>
+<roundcube:include file="/includes/links.html" />
+</head>
+<body class="iframe">
+<roundcube:object name="plugin.body" />
+</body>
+</html>
diff --git a/plugin_manager/skins/larry/traffic-light-exclamation.png b/plugin_manager/skins/larry/traffic-light-exclamation.png
new file mode 100644
index 0000000..d547fab
--- /dev/null
+++ b/plugin_manager/skins/larry/traffic-light-exclamation.png
Binary files differ
diff --git a/plugin_manager/skins/larry/traffic-light-off.png b/plugin_manager/skins/larry/traffic-light-off.png
new file mode 100644
index 0000000..261565a
--- /dev/null
+++ b/plugin_manager/skins/larry/traffic-light-off.png
Binary files differ
diff --git a/plugin_manager/skins/larry/traffic-light-pencil.png b/plugin_manager/skins/larry/traffic-light-pencil.png
new file mode 100644
index 0000000..90b70ef
--- /dev/null
+++ b/plugin_manager/skins/larry/traffic-light-pencil.png
Binary files differ
diff --git a/plugin_manager/skins/larry/traffic-light-plus.png b/plugin_manager/skins/larry/traffic-light-plus.png
new file mode 100644
index 0000000..0bddb65
--- /dev/null
+++ b/plugin_manager/skins/larry/traffic-light-plus.png
Binary files differ
diff --git a/plugin_manager/skins/larry/traffic-light.png b/plugin_manager/skins/larry/traffic-light.png
new file mode 100644
index 0000000..9b458bc
--- /dev/null
+++ b/plugin_manager/skins/larry/traffic-light.png
Binary files differ