Author Topic: [SOLVED] global_config - plugin_manager stops working when gc is enabled.  (Read 12968 times)

Offline snowweb

  • Jr. Member
  • **
  • Posts: 35
When I register global_config alongside my other two already working plugins (password and plugin_manager), plugin_manager stops working and no longer shows up in settings and the enabled plugins within it also disappear!

As soon as I remove global_config and register manually my other plugins (calendar and sticky_notes) all is well again.

I've checked the logs and there is nothing in roundcubemail/error or in httpd/error.

Here is my roundcubemail/config/main.inc.php
Code: [Select]
<?php
$rcmail_config 
= array();
$rcmail_config['debug_level'] = 1;
$rcmail_config['log_driver'] = 'file';
$rcmail_config['log_date_format'] = 'd-M-Y H:i:s O';
$rcmail_config['syslog_id'] = 'roundcube';
$rcmail_config['syslog_facility'] = LOG_USER;
$rcmail_config['smtp_log'] = true;
$rcmail_config['log_logins'] = true;
$rcmail_config['log_session'] = true;
$rcmail_config['sql_debug'] = false;
$rcmail_config['imap_debug'] = false;
$rcmail_config['ldap_debug'] = false;
$rcmail_config['smtp_debug'] = false;
$rcmail_config['default_host'] = '%d';
$rcmail_config['default_port'] = 143;
$rcmail_config['imap_auth_type'] = null;
$rcmail_config['imap_delimiter'] = null;
$rcmail_config['imap_ns_personal'] = null;
$rcmail_config['imap_ns_other']    = null;
$rcmail_config['imap_ns_shared']   = null;
$rcmail_config['imap_force_caps'] = false;
$rcmail_config['imap_force_lsub'] = false;
$rcmail_config['imap_force_ns'] = false;
$rcmail_config['imap_timeout'] = 60;
$rcmail_config['imap_auth_cid'] = null;
$rcmail_config['imap_auth_pw'] = null;
$rcmail_config['imap_cache'] = null;
$rcmail_config['messages_cache'] = '';
$rcmail_config['smtp_server'] = '%d';
$rcmail_config['smtp_port'] = 25;
$rcmail_config['smtp_user'] = '%u';
$rcmail_config['smtp_pass'] = '%p';
$rcmail_config['smtp_auth_type'] = '';
$rcmail_config['smtp_auth_cid'] = null;
$rcmail_config['smtp_auth_pw'] = null;
$rcmail_config['smtp_helo_host'] = '';
$rcmail_config['smtp_timeout'] = 0;
$rcmail_config['enable_installer'] = false;
$rcmail_config['support_url'] = '';
$rcmail_config['skin_logo'] = 'mydomain-logo.png';
$rcmail_config['auto_create_user'] = true;
$rcmail_config['log_dir'] = '/var/log/roundcubemail/';
$rcmail_config['temp_dir'] = 'temp/';
$rcmail_config['message_cache_lifetime'] = '10d';
$rcmail_config['force_https'] = false;
$rcmail_config['use_https'] = false;
$rcmail_config['login_autocomplete'] = 0;
$rcmail_config['login_lc'] = 2;
$rcmail_config['skin_include_php'] = false;
$rcmail_config['display_version'] = false;
$rcmail_config['session_lifetime'] = 60;
$rcmail_config['session_domain'] = 'mydomain.ph';
$rcmail_config['session_name'] = 'rc-sessid';
$rcmail_config['session_storage'] = 'db';
$rcmail_config['memcache_hosts'] = null// e.g. array( 'localhost:11211', '192.168.1.12:11211', 'unix:///var/tmp/memcached.sock' );
$rcmail_config['ip_check'] = false;
$rcmail_config['referer_check'] = false;
$rcmail_config['x_frame_options'] = 'sameorigin';
$rcmail_config['des_key'] = '+fmvJII!8Zp&D2S$c1lmoHUg';
$rcmail_config['username_domain'] = '%d';
$rcmail_config['mail_domain'] = '%d';
$rcmail_config['password_charset'] = 'ISO-8859-1';
$rcmail_config['sendmail_delay'] = 4;
$rcmail_config['max_recipients'] = 30
$rcmail_config['max_group_members'] = 30
$rcmail_config['useragent'] = 'mydomain.ph Webmail';
$rcmail_config['product_name'] = 'RC Webmail';
$rcmail_config['include_host_config'] = false;
$rcmail_config['generic_message_footer'] = '';
$rcmail_config['generic_message_footer_html'] = '';
$rcmail_config['http_received_header'] = false;
$rcmail_config['http_received_header_encrypt'] = false;
$rcmail_config['mail_header_delimiter'] = NULL;
$rcmail_config['line_length'] = 72;
$rcmail_config['send_format_flowed'] = true;
$rcmail_config['dont_override'] = array();
$rcmail_config['identities_level'] = 1;
$rcmail_config['client_mimetypes'] = null;  # null == default
$rcmail_config['mime_magic'] = '/usr/share/misc/magic';
$rcmail_config['im_identify_path'] = null;
$rcmail_config['im_convert_path'] = null;
$rcmail_config['contact_photo_size'] = 160;
$rcmail_config['email_dns_check'] = false;
$rcmail_config['plugins'] = array('global_config','password','plugin_manager');
$rcmail_config['message_sort_col'] = '';
$rcmail_config['message_sort_order'] = 'DESC';
$rcmail_config['list_cols'] = array('subject''status''fromto''date''size''flag''attachment');
$rcmail_config['language'] = null;
$rcmail_config['date_format'] = 'm-d-Y';
$rcmail_config['date_formats'] = array('m-d-y''Y-m-d''d-m-Y''Y/m/d''m/d/Y''d/m/Y''d.m.Y''j.n.Y');
$rcmail_config['time_format'] = 'H:i';
$rcmail_config['time_formats'] = array('G:i''H:i''g:i a''h:i A');
$rcmail_config['date_short'] = 'D H:i';
$rcmail_config['date_long'] = 'm-d-Y H:i';
$rcmail_config['drafts_mbox'] = 'INBOX.Drafts';
$rcmail_config['junk_mbox'] = 'INBOX.spam';
$rcmail_config['sent_mbox'] = 'INBOX.Sent';
$rcmail_config['trash_mbox'] = 'INBOX.Trash';
$rcmail_config['default_folders'] = array('INBOX''INBOX.Drafts''INBOX.Sent''INBOX.spam''INBOX.Trash');
$rcmail_config['create_default_folders'] = true;
$rcmail_config['protect_default_folders'] = true;
$rcmail_config['quota_zero_as_unlimited'] = false;
$rcmail_config['enable_spellcheck'] = false;
$rcmail_config['spellcheck_dictionary'] = false;
$rcmail_config['spellcheck_engine'] = 'googie';
$rcmail_config['spellcheck_uri'] = '';
$rcmail_config['spellcheck_languages'] = NULL;
$rcmail_config['spellcheck_ignore_caps'] = false;
$rcmail_config['spellcheck_ignore_nums'] = false;
$rcmail_config['spellcheck_ignore_syms'] = false;
$rcmail_config['recipients_separator'] = ',';
$rcmail_config['max_pagesize'] = 200;
$rcmail_config['min_keep_alive'] = 60;
$rcmail_config['upload_progress'] = false;
$rcmail_config['undo_timeout'] = 60;
$rcmail_config['address_book_type'] = 'sql';
$rcmail_config['ldap_public'] = array();
$rcmail_config['autocomplete_addressbooks'] = array('sql');
$rcmail_config['autocomplete_min_length'] = 3;
$rcmail_config['autocomplete_threads'] = 0;
$rcmail_config['autocomplete_max'] = 15;
$rcmail_config['address_template'] = '{street}<br/>{locality} {zipcode}<br/>{country} {region}';
$rcmail_config['addressbook_search_mode'] = 0;
$rcmail_config['default_charset'] = 'ISO-8859-1';
$rcmail_config['skin'] = 'larry';
$rcmail_config['mail_pagesize'] = 50;
$rcmail_config['addressbook_pagesize'] = 50;
$rcmail_config['addressbook_sort_col'] = 'surname';
$rcmail_config['addressbook_name_listing'] = 0;
$rcmail_config['timezone'] = 'auto';
$rcmail_config['prefer_html'] = true;
$rcmail_config['show_images'] = 1;
$rcmail_config['htmleditor'] = 2;
$rcmail_config['prettydate'] = true;
$rcmail_config['draft_autosave'] = 180;
$rcmail_config['preview_pane'] = true;
$rcmail_config['preview_pane_mark_read'] = 10;
$rcmail_config['logout_purge'] = false;
$rcmail_config['logout_expunge'] = false;
$rcmail_config['inline_images'] = true;
$rcmail_config['mime_param_folding'] = 0;
$rcmail_config['skip_deleted'] = true;
$rcmail_config['read_when_deleted'] = true;
$rcmail_config['flag_for_deletion'] = false;
$rcmail_config['keep_alive'] = 60;
$rcmail_config['check_all_folders'] = false;
$rcmail_config['display_next'] = false;
$rcmail_config['autoexpand_threads'] = 2;
$rcmail_config['top_posting'] = true;
$rcmail_config['strip_existing_sig'] = true;
$rcmail_config['show_sig'] = 1;
$rcmail_config['sig_above'] = true;
$rcmail_config['force_7bit'] = false;
$rcmail_config['search_mods'] = null;  // Example: array('*' => array('subject'=>1, 'from'=>1), 'Sent' => array('subject'=>1, 'to'=>1));
$rcmail_config['addressbook_search_mods'] = null;  // Example: array('name'=>1, 'firstname'=>1, 'surname'=>1, 'email'=>1, '*'=>1);
$rcmail_config['delete_always'] = true;
$rcmail_config['delete_junk'] = true;
$rcmail_config['mdn_requests'] = 2;
$rcmail_config['mdn_default'] = 0;
$rcmail_config['dsn_default'] = 0;
$rcmail_config['reply_same_folder'] = false;
$rcmail_config['forward_attachment'] = false;
$rcmail_config['default_addressbook'] = null;
$rcmail_config['spellcheck_before_send'] = false;
$rcmail_config['autocomplete_single'] = false;
$rcmail_config['default_font'] = '';
?>

Unfortunately, although I removed all the comments from the config files, they exceed the maximum number of characters (20,000) allowed in a single forum post, so I've had to remove the plugin_manager config from this post.

Any advice, much appreciated.
« Last Edit: August 29, 2012, 02:16:59 AM by snowweb »

Offline snowweb

  • Jr. Member
  • **
  • Posts: 35
Re: global_config - plugin_manager stops working when gc is enabled.
« Reply #1 on: August 28, 2012, 08:27:30 AM »
I forgot to mention that I'm using RC version 0.8.x and all plugins updated today.

Offline snowweb

  • Jr. Member
  • **
  • Posts: 35
i found a permissions issue which was preventing Apache from writing to the roundcube error log. When I fixed that, I get the following error in the log when loading a roundcube page:

Code: [Select]
[28-Aug-2012 21:39:51 +0800]: PHP Error: Failed to load config from /var/www/html/shared/roundcubemail-0.8.1/plugins/global_config/config.inc.php in /var/www/html/shared/roundcubemail-0.8.1/program/include/rcube_plugin.php on line 116 (GET /?_task=mail&_mbox=INBOX)
[28-Aug-2012 21:39:55 +0800]: PHP Error: Failed to load config from /var/www/html/shared/roundcubemail-0.8.1/plugins/global_config/config.inc.php in /var/www/html/shared/roundcubemail-0.8.1/program/include/rcube_plugin.php on line 116 (GET /?_task=mail&_action=list&_mbox=INBOX&_refresh=1&_remote=1&_unlock=loading1346161199943&_=1346161199946)
[28-Aug-2012 21:39:56 +0800]: PHP Error: Failed to load config from /var/www/html/shared/roundcubemail-0.8.1/plugins/global_config/config.inc.php in /var/www/html/shared/roundcubemail-0.8.1/program/include/rcube_plugin.php on line 116 (GET /?_task=mail&_action=getunread&&_remote=1&_unlock=0&_=1346161199947)

/var/www/html/shared/roundcubemail-0.8.1/plugins/global_config/config.inc.php exists as follows:
Code: [Select]
-rw-r--r-- 1 root root 15 Aug 28 16:25 /var/www/html/shared/roundcubemail-0.8.1/plugins/global_config/config.inc.php
What else should I check?

Thanks.
« Last Edit: August 28, 2012, 08:11:42 PM by snowweb »

Offline Yoni

  • Full Member
  • ***
  • Posts: 164
    • MyRoundcube
Re: global_config - plugin_manager stops working when gc is enabled.
« Reply #3 on: August 28, 2012, 10:25:28 PM »
snowweb,

Can you describe how you are installing and configuring global_config?

First, make sure your first plugin registered in main.inc.php is global_config. You can find some information here:
http://myroundcube.com/myroundcube-plugins/plugins-installation#registering_plugin_manager_and_global_config

Before you enable your global_config plugin make sure you have configure it as needed, otherwise you will end up with no plugins loading. That's also explained here:

http://myroundcube.com/myroundcube-plugins/global_config-plugin

Good luck and let us know how that works for you.

Offline snowweb

  • Jr. Member
  • **
  • Posts: 35
Re: global_config - plugin_manager stops working when gc is enabled.
« Reply #4 on: August 28, 2012, 11:22:47 PM »
Many thanks Yoni for your reply.

I hadn't seen either of those two links and the information contained on them was a bit of a surprise!

First of all, I followed a video tutorial on installing plugin_manager (not my preferred way of receiving instructions but all I could find at the time) and that left me with the impression that no configuration of the global_config was necessary. This was re-inforced by the empty config.inc.php-dist which did not even contain a comment explaining it's purpose, so all I did was copy it to config.inc.php.

I notice that one of those pages tells me to copy in the config.inc.php.dist of each plugin I want to use but I'm guessing that if I've already configured in the usual way, the plugin I want to use, then I should copy in the actual config.inc.php? It doesn't say, but I also guess that the old config file, then becomes obsolete?

In the light of this new information, global_config plugin no longer looks as attractive to me as it did for the following reasons.:
  • Maintaining a config file that is many thousands of lines long is far more tedious then opening the file you need to edit which just has the settings related to the plugin you need to reconfigure.
  • It appears that global config might not be as 'intelligent' as I first thought, in that it appears to still load all configurations for all plugins, regardless of whether the user has chosen to use said plugin or not? Is that correct? If so, then it's just saving the http requests, but not bandwidth/download time.
  • Disabling a plugin suddenly becomes harder due to the necessity to delete or comment (after locating) all the lines in the global_config pertaining to the plugin you wish to delete.

I may be wrong and would welcome being corrected. My assumptions are based on just the limited information I've been able to find on the matter.

I may use it though if I can alter the global_config config.inc.php to just include the other config files, rather than have them all copied directly into it. Then at least you can see at a glance which plugins are enabled in it and which aren't, since you can just comment a line to disable that plugin.

Again, I do appreciate you input Yoni and any further advice or comments are always appreciated.

Thanks.

Offline snowweb

  • Jr. Member
  • **
  • Posts: 35
Re: global_config - plugin_manager stops working when gc is enabled.
« Reply #5 on: August 29, 2012, 02:15:53 AM »
I'm pleased to say that I did get it working, it might be a nice and logical next move if it could be made to only load the configurations of the plugins enabled by the user.

One thing I did do though, since I really don't consider copying all the configuration files in to the global_config config file, is I am using php includes to link to the configuration files, that way I can easily enable or disable them and see what's what.

My global_config config.inc.php now looks like this:
Code: [Select]
<?php
require_once("plugins/plugin_manager/config.inc.php");
require_once(
"plugins/calendar/config.inc.php");
require_once(
"plugins/sticky_notes/config.inc.php");

#require_once("plugins/drag_upload/config.inc.php");
#require_once("plugins/fileapi_attachments/config.inc.php");
#require_once("plugins/compose_addressbook/config.inc.php");
#require_once("plugins/keyboard_shortcuts/config.inc.php");
#require_once("plugins/listcommands/config.inc.php");
#require_once("plugins/contextmenu/config.inc.php");
#require_once("plugins/copymessage/config.inc.php");
#require_once("plugins/importmessages/config.inc.php");
#require_once("plugins/zipdownload/config.inc.php");
#require_once("plugins/forwardattachment/config.inc.php");
#require_once("plugins/globaladdressbook/config.inc.php");
#require_once("plugins/chbox/config.inc.php");
#require_once("plugins/markbuttons/config.inc.php");
#require_once("plugins/automatic_addressbook/config.inc.php");
#require_once("plugins/newmail_notifier/config.inc.php");
#require_once("plugins/new_user_dialog/config.inc.php");
#require_once("plugins/google_contacts/config.inc.php");
#require_once("plugins/rcguard/config.inc.php");
#require_once("plugins/vkeyboard/config.inc.php");
#require_once("plugins/pwtools/config.inc.php");
#require_once("plugins/nabble/config.inc.php");
#require_once("plugins/google_ads/config.inc.php");
#require_once("plugins/summary/config.inc.php");
#require_once("plugins/fixTHEAD/config.inc.php");
#require_once("plugins/folderbuttons/config.inc.php");
#require_once("plugins/listcontrols/config.inc.php");
#require_once("plugins/template_objects/config.inc.php");
#require_once("plugins/messagescomposition/config.inc.php");
#require_once("plugins/compose_in_taskbar/config.inc.php");
#require_once("plugins/compose_newwindow/config.inc.php");
#require_once("plugins/scheduled_sending/config.inc.php");
#require_once("plugins/vcard_attach/config.inc.php");
#require_once("plugins/messagesdisplaying/config.inc.php");
#require_once("plugins/hide_blockquote/config.inc.php");
#require_once("plugins/vcard_attachments/config.inc.php");
#require_once("plugins/messagesmanagement/config.inc.php");
#require_once("plugins/accounts/config.inc.php");
#require_once("plugins/archivefolder/config.inc.php");
#require_once("plugins/copymessage/config.inc.php");
#require_once("plugins/addressbook/config.inc.php");
#require_once("plugins/settings/config.inc.php");
#require_once("plugins/calendaring/config.inc.php");
#require_once("plugins/tinymce/config.inc.php");
#require_once("plugins/rss_feeds/config.inc.php");
#require_once("plugins/wrapper/config.inc.php");
#require_once("plugins/terms/config.inc.php");
#require_once("plugins/register/config.inc.php");
#require_once("plugins/captcha/config.inc.php");
#require_once("plugins/taskbar/config.inc.php");
#require_once("plugins/contactus/config.inc.php");
#require_once("plugins/impressum/config.inc.php");
#require_once("plugins/crawler/config.inc.php");
#require_once("plugins/remember_splitter/config.inc.php");
#require_once("plugins/global_alias/config.inc.php");
?>

The reason some are disabled is because I still need to check the configuration of each plugin and setup database tables etc, where necessary. I'll uncomment each one after I've accomplished that.

Thanks for your help.

Offline Yoni

  • Full Member
  • ***
  • Posts: 164
    • MyRoundcube
Well, you really need to configure it the way you see fit your needs. In my personal opinion global_config has made my life easier. The idea behind the plugin is to reduce file stats. A single configuration file works better for me but I can't speak for others.

Once you have copied the configuration from each plugin to global_config config.inc.php you can remove all other config.inc.php from your plugins.

Quote
One thing I did do though, since I really don't consider copying all the configuration files in to the global_config config file, is I am using php includes to link to the configuration files, that way I can easily enable or disable them and see what's what.

That basically defeats global_config's propose in my opinion. The server will still need to reach each one of your configuration files.

Perhaps adding a comment to global_config in that page to "delete other plugins' config.inc.php" could be a good thing to do. The reason why it wasn't added was because its configuration guide omitted completely the config.inc.php of all other plugins as it should...

Quote
Make a copy of …/plugins/global_config/config.inc.php.dist into that same directory and rename the new file to config.inc.php. Open this .php file just so you become familiar with it. It should be empty by default – see screenshot on your right.

Copy the config.inc.php.dist contents of the plugin you would like to enable/register in your Roundcube installation into …/plugins/global_config/config.inc.php

As you can read in that quote, when using global_config you will copy right from the config.inc.php.dist file to the global_config config.inc.php configuration file. It might take a while to get used to it (maybe).

If global_config is being used and the plugin's configuration file is not included your plugin will not work. I don't precisely understand why you believe that plugins not included in global_config are loading anyways. They do not load unless they are included in global_config. As proof of this there is your own first post in which plugins were not loading when global_config was enabled (because its configuration file was empty).

Regardless, feel free to run it the way you consider it works better for you :)
« Last Edit: August 30, 2012, 06:10:03 AM by Yoni »

Offline snowweb

  • Jr. Member
  • **
  • Posts: 35
Quote
If global_config is being used and the plugin's configuration file is not included your plugin will not work. I don't precisely understand why you believe that plugins not included in global_config are loading anyways. They do not load unless they are included in global_config. As proof of this there is your own first post in which plugins were not loading when global_config was enabled (because its configuration file was empty).

Thanks Yoni. You're statement above sums up the major issue that I have with global_config, which is as you say, "If global_config is being used and the plugin's configuration file is not included your plugin will not work". Therefore if want to allow a user to select from any of the plugins available in plugin_manager, I have to copy all of the configurationss for all of the available plugins to the global_config configuration file. Then that has to be loaded for every user, regardless of whether they selected any plugins to be used for their account or not.

Therefore, where is the benefit?

Quote
I don't precisely understand why you believe that plugins not included in global_config are loading anyways.
Not sure why you think I think that? Maybe because I said,

Quote
it might be a nice and logical next move if it could be made to only load the configurations of the plugins enabled by the user.

What I mean there, is that if a user has only enabled one plugin for his account, the global_config still had to contain the configurations of all available plugins, saving what?

What I would like to see is a plugin_manager, which is able to automatically include and exclude only the configurations which are necessary for the plugins selected by the individual user, all neatly contained inside one plugin (the plugin_manager). I would like it to continue to use the existing configurations of the regular plugins, so that they would be configured in the same way that they always were.

I'm not sure if those configurations are downloaded to the browser in any way, but if so, they should be concatenated into a single file before transfer to avoid http requests.

The plugin manager should have a configurations file, which contains most of the plugins already, but all disabled by default. Then all you need to do is change 'false' to 'true' for plugins which are already configured and can be made available to users. I don't think the configurations should be relocated to the global_config file. They should remain in their plugin folders as they are at present.

That's pretty much what I was expecting.

Originally, I only got the plugin_manager because it was the only way to get the calendar plugin which I was using on a previous server. I love the calendar, it's a great plugin and don't want to deprive my users of it. I kind of liked what I thought was the idea of the plugin manager, so thought I'd give it a chance, but now I don't think it's for me. I only have about 5 plugins in use anyway.

I'm thinking now that I'll just enable it once in a while to update the existing plugins and then disable it again. I never was keen on the thought of the users being able to choose what plugins are loaded either.

I fully understand that everyone has there own setup and don't want to ram my desires down anyone's throat. I just can't honestly see any way to to benefit from global_config myself.

Many thanks for taking the trouble to reply.

Offline Yoni

  • Full Member
  • ***
  • Posts: 164
    • MyRoundcube
Here is the idea behind it:

plugin_manager:
  • Centralize downloads
  • Reduce error margin of installing old or wrong plugin version, or both for that matter.
  • Keeping plugins up-to-date by just visiting Plugin Manager Center
  • Make possible to allow users to enable/ disable features.
Plugin_manager gave us also the opportunity to render plugins registration in main.inc.php almost obsolete. It also helps us enormously in the troubleshooting process. In addition to that, it is the gateway to the Real-Time Translation Tool: http://myroundcube.com/myroundcube-plugins/real-time-translation. From within Plugin Manager Center you can keep track of the completeness of a specific language set, translate plugins as they become available, publish your translation and make it available for the rest of the community; instantly.

Then there was this simple idea... hmmm, we have so many config files to work with in 40+ plugins... maybe if we could only have a single configuration file.... oh wait; global_config: I just need to deal with one config.inc.php file from this point on and in the process we will give the server hosting the webmail some love.

It seems to have been a good starting point. At least I would like to believe so ;)
« Last Edit: August 30, 2012, 11:43:10 PM by Yoni »

Offline snowweb

  • Jr. Member
  • **
  • Posts: 35
Thanks for the extra details Yoni and for the schematic.

I can see some advantages, particularly to an admin who wants to implement 40 plugins and allow users to choose which plugins they use. It's certainly easier for such an admin to download and keep them updated.

Originally the global_config sounded worthy, saving (what I imagined as) thousands of http requests a day (or even per hour), but after thinking more deeply about this, these configuration files are requested by scripts running on the server, not by http requests from the browser. Opening a text file (or 40) and reading it's contents is a small task for a Linux server, accomplished in milliseconds, therefore the speed of serving the page or the resources used to do so, will be scarcely affected by using global_config.

I'm sure both plugins are in their infancy and will mature significantly in coming months and I do commend your efforts to make Roundcube easier to use and more stable and particularly in some of your other great plugins, like 'calendar'.

I wish you every success in the future.

Offline Yoni

  • Full Member
  • ***
  • Posts: 164
    • MyRoundcube
Just to clarify; I have only contributed with what I could. Rosali is the person who deserves those credits. His hard work and dedication is what really made MyRoundcube Plugins possible. He is the heart of the project and the person responsible for thousands of line of codes  :)

Offline snowweb

  • Jr. Member
  • **
  • Posts: 35
Thanks Yoni.

Credit to both of you, especially Rosali. :-)