c3189ce6c7301c3ec17878fd3918f31d0d3cb18a..e1ceb050e19c7574bca146a8da7047ee4ff456b5
2016-07-10 Marius Burkard
Merge branch 'stable-3.1'
e1ceb0 diff | tree
2016-07-10 Marius Burkard
- replace *:* by 127.0.0.1:* in amavis config
58b8f2 diff | tree
2016-07-09 Till Brehm
Merge branch 'dutch-language' into 'stable-3.1'
5693ad diff | tree
2016-07-08 Pascal Dreissen
Dutch language adjustments for Interface and Mail
46d2d1 diff | tree
2016-07-08 Pascal Dreissen
More dutch language adjustment for dashboard / dns / clients / sites
7e24fd diff | tree
2016-07-08 Marius Burkard
- prevent issue when using smtp binding in postfix
73c2f4 diff | tree
2016-07-08 Pascal Dreissen
Dashboard / DNS and Login dutch language ajdustments.
173afc diff | tree
2016-07-08 Pascal Dreissen
more dutch language adjustments.
a2401d diff | tree
2016-07-08 Marius Burkard
Merge branch 'fix-3984' into 'stable-3.1'
9bcd2f diff | tree
2016-07-08 Pascal Dreissen
several updates on dutch language files
505fc4 diff | tree
2016-07-08 Pascal Dreissen
escapeshellarg document root for security reasons (fixes #3984)
e8dda4 diff | tree
2016-07-08 Marius Burkard
Merge branch 'dashboard-quota-tooltips' into 'stable-3.1'
a26815 diff | tree
2016-07-08 Pascal Dreissen
cron_plugin.inc.php $document root fix for quota
ff26b4 diff | tree
2016-07-08 Pascal Dreissen
Database quota fix % lost in change
f1193b diff | tree
2016-07-08 Pascal Dreissen
Tooltips on used percentage within Dashboard
c95963 diff | tree
2016-07-08 Pascal Dreissen
vhost quota not correctly pointing to document root (DF -T) (fixes #3984)
a481a6 diff | tree
2016-07-08 Pascal Dreissen
Merge branch 'revert-7827db36' into 'stable-3.1'
6a00e0 diff | tree
2016-07-08 Pascal Dreissen
Revert "vhost quota not correctly pointing to document root (DF -T) fixes #...
3dfce6 diff | tree
2016-07-08 Pascal Dreissen
vhost quota not correctly pointing to document root (DF -T) fixes #3984
7827db diff | tree
2016-07-06 Till Brehm
Merge branch 'stable-3.1' of git.ispconfig.org:ispconfig/ispconfig3 into st...
993d82 diff | tree
2016-07-06 Till Brehm
Fixed permission issue of bin directory in on latest Debian in chroot jails.
e37c42 diff | tree
2016-07-06 Till Brehm
Fixed issue in SQL lib.
3560c8 diff | tree
2016-07-05 Marius Burkard
Merge branch 'stable-3.1'
165177 diff | tree
2016-07-05 Marius Burkard
Merge branch 'missing_fonts' into 'stable-3.1'
a66612 diff | tree
2016-07-05 Marius Burkard
Merge branch 'stable-3.1'
ec0634 diff | tree
2016-07-05 Pascal Dreissen
Merge branch 'missing_fonts' into 'stable-3.1'
1a485f diff | tree
2016-07-05 Pascal Dreissen
Missing glyphicon fonts (fixes #3981, #3886)
e82757 diff | tree
2016-07-05 Marius Burkard
Merge branch 'stable-3.1' into 'stable-3.1'
3cc04c diff | tree
2016-07-05 Pascal Dreissen
Forgot one template for tooltips as mentioned in: https://git.ispconfig.org...
6b42bf diff | tree
2016-07-05 Marius Burkard
Merge branch 'stable-3.1' into 'stable-3.1'
72cefc diff | tree
2016-07-05 Pascal Dreissen
Move tooltip js to global javascript library
d75040 diff | tree
2016-07-05 Pascal Dreissen
Tooltips javascript made global fixes #3995
6ffe3c diff | tree
2016-07-05 Pascal Dreissen
Fixed IPV6 regex https://git.ispconfig.org/ispconfig/ispconfig3/issues/4002
fbfdc4 diff | tree
2016-07-05 Pascal Dreissen
Tooltips on several templates
644682 diff | tree
2016-07-04 Marius Burkard
Merge branch 'feature/php-fpm-envpath' into 'stable-3.1'
d2ed12 diff | tree
2016-07-04 Marius Burkard
Merge branch 'letsencrypt-alias' into 'stable-3.1'
67f562 diff | tree
2016-07-04 Moll
Only if none there is no prefix else it's www
8c93e1 diff | tree
2016-07-04 Moll
Little bracket fix
9d9c76 diff | tree
2016-07-04 Moll
Set default env[PATH] and env[HOSTNAME] since it is cleared by default sett...
13aef5 diff | tree
2016-07-04 Moll
Removed none from subdomain / alias list
3768e3 diff | tree
2016-07-03 Till Brehm
Fixed backup list link to website. Issue #4004
c7a80c diff | tree
2016-07-01 Till Brehm
Merge branch 'patch-3' into 'stable-3.1'
1d87d8 diff | tree
2016-07-01 Martin
Load correct datetimeformat
33f68a diff | tree
2016-07-01 Marius Burkard
- fixed client welcome message, fixed #3993
f9cfd8 diff | tree
2016-07-01 Marius Burkard
Merge branch 'stable-3.1'
49441b diff | tree
2016-07-01 Marius Burkard
- fixed expert install mode and merged code, fixed #3990
da3c0c diff | tree
2016-06-30 Till Brehm
Fixed #3196
437887 diff | tree
2016-06-30 Till Brehm
Fixed: Issue #3991 hailed users dont get removed correctly from /etc/passwd
be08cd diff | tree
2016-06-29 Till Brehm
Fixed a session save issue.
ebcb3b diff | tree
2016-06-29 Till Brehm
Added "DATE" form type that works like the "DATETIME" type incl. date picke...
566c28 diff | tree
10 files added
1 files renamed
215 files modified
3905 ■■■■■ changed files
.gitignore 1 ●●●● patch | view | raw | blame | history
install/dist/conf/centos72.conf.php 219 ●●●●● patch | view | raw | blame | history
install/dist/conf/debiantesting.conf.php 230 ●●●●● patch | view | raw | blame | history
install/dist/lib/centos72.lib.php 9 ●●●● patch | view | raw | blame | history
install/dist/lib/centos_base.lib.php 8 ●●●● patch | view | raw | blame | history
install/dist/lib/fedora.lib.php 37 ●●●●● patch | view | raw | blame | history
install/dist/lib/gentoo.lib.php 24 ●●●●● patch | view | raw | blame | history
install/dist/lib/opensuse.lib.php 25 ●●●●● patch | view | raw | blame | history
install/dist/tpl/gentoo/amavisd-ispconfig.conf.master 6 ●●●● patch | view | raw | blame | history
install/install.php 660 ●●●● patch | view | raw | blame | history
install/lib/install.lib.php 107 ●●●●● patch | view | raw | blame | history
install/lib/installer_base.lib.php 22 ●●●● patch | view | raw | blame | history
install/lib/update.lib.php 2 ●●● patch | view | raw | blame | history
install/sql/incremental/upd_0081.sql 2 ●●● patch | view | raw | blame | history
install/sql/incremental/upd_dev_collection.sql 15 ●●●●● patch | view | raw | blame | history
install/sql/ispconfig3.sql 25 ●●●●● patch | view | raw | blame | history
install/tpl/amavisd_user_config.master 6 ●●●● patch | view | raw | blame | history
install/tpl/config.inc.php.master 2 ●●● patch | view | raw | blame | history
install/tpl/debian6_dovecot-sql.conf.master 2 ●●● patch | view | raw | blame | history
install/tpl/debian_dovecot-sql.conf.master 2 ●●● patch | view | raw | blame | history
install/tpl/debian_dovecot2.conf.master 1 ●●●● patch | view | raw | blame | history
install/tpl/debian_postfix.conf.master 2 ●●● patch | view | raw | blame | history
install/tpl/fedora_amavisd_conf.master 4 ●●●● patch | view | raw | blame | history
install/tpl/fedora_dovecot-sql.conf.master 2 ●●● patch | view | raw | blame | history
install/tpl/fedora_dovecot2.conf.master 1 ●●●● patch | view | raw | blame | history
install/tpl/fedora_postfix.conf.master 2 ●●● patch | view | raw | blame | history
install/tpl/gentoo_postfix.conf.master 2 ●●● patch | view | raw | blame | history
install/tpl/helo_access.master 2 ●●● patch | view | raw | blame | history
install/tpl/opensuse_amavisd_conf.master 4 ●●●● patch | view | raw | blame | history
install/tpl/opensuse_dovecot-sql.conf.master 2 ●●● patch | view | raw | blame | history
install/tpl/opensuse_dovecot2.conf.master 1 ●●●● patch | view | raw | blame | history
install/tpl/opensuse_postfix.conf.master 2 ●●● patch | view | raw | blame | history
install/tpl/pureftpd_mysql.conf.master 20 ●●●● patch | view | raw | blame | history
install/update.php 2 ●●● patch | view | raw | blame | history
interface/lib/classes/db_mysql.inc.php 2 ●●● patch | view | raw | blame | history
interface/lib/classes/functions.inc.php 2 ●●● patch | view | raw | blame | history
interface/lib/classes/json_handler.inc.php 23 ●●●●● patch | view | raw | blame | history
interface/lib/classes/quota_lib.inc.php 4 ●●●● patch | view | raw | blame | history
interface/lib/classes/remoting_lib.inc.php 1 ●●●● patch | view | raw | blame | history
interface/lib/classes/session.inc.php 4 ●●●● patch | view | raw | blame | history
interface/lib/classes/tform.inc.php 18 ●●●●● patch | view | raw | blame | history
interface/lib/classes/tform_base.inc.php 20 ●●●●● patch | view | raw | blame | history
interface/lib/lang/nl.lng 154 ●●●● patch | view | raw | blame | history
interface/web/admin/lib/lang/de_server_config.lng 2 ●●● patch | view | raw | blame | history
interface/web/admin/list/server_ip_map.list.php 2 ●●● patch | view | raw | blame | history
interface/web/admin/templates/directive_snippets_edit.htm 4 ●●●● patch | view | raw | blame | history
interface/web/admin/templates/server_ip_list.htm 8 ●●●●● patch | view | raw | blame | history
interface/web/admin/templates/system_config_dns_edit.htm 20 ●●●●● patch | view | raw | blame | history
interface/web/client/form/client_template.tform.php 19 ●●●● patch | view | raw | blame | history
interface/web/client/lib/lang/nl.lng 24 ●●●● patch | view | raw | blame | history
interface/web/client/lib/lang/nl_client_del.lng 2 ●●● patch | view | raw | blame | history
interface/web/client/lib/lang/nl_client_message.lng 28 ●●●● patch | view | raw | blame | history
interface/web/client/lib/lang/nl_clients_list.lng 4 ●●●● patch | view | raw | blame | history
interface/web/client/lib/lang/nl_domain.lng 4 ●●●● patch | view | raw | blame | history
interface/web/client/lib/lang/nl_domain_list.lng 2 ●●● patch | view | raw | blame | history
interface/web/client/lib/lang/nl_reseller.lng 6 ●●●● patch | view | raw | blame | history
interface/web/client/lib/lang/nl_resellers_list.lng 4 ●●●● patch | view | raw | blame | history
interface/web/client/templates/client_del.htm 12 ●●●●● patch | view | raw | blame | history
interface/web/client/templates/clients_list.htm 4 ●●● patch | view | raw | blame | history
interface/web/client/templates/resellers_list.htm 4 ●●● patch | view | raw | blame | history
interface/web/dashboard/dashlets/templates/databasequota.htm 2 ●●● patch | view | raw | blame | history
interface/web/dashboard/dashlets/templates/limits.htm 2 ●●● patch | view | raw | blame | history
interface/web/dashboard/dashlets/templates/mailquota.htm 2 ●●● patch | view | raw | blame | history
interface/web/dashboard/dashlets/templates/quota.htm 2 ●●● patch | view | raw | blame | history
interface/web/dashboard/lib/lang/nl_dashlet_customer.lng 4 ●●●● patch | view | raw | blame | history
interface/web/dashboard/lib/lang/nl_dashlet_databasequota.lng 6 ●●●● patch | view | raw | blame | history
interface/web/dashboard/lib/lang/nl_dashlet_invoice_client_settings.lng 2 ●●● patch | view | raw | blame | history
interface/web/dashboard/lib/lang/nl_dashlet_invoices.lng 20 ●●●● patch | view | raw | blame | history
interface/web/dashboard/lib/lang/nl_dashlet_limits.lng 4 ●●●● patch | view | raw | blame | history
interface/web/dashboard/lib/lang/nl_dashlet_mailquota.lng 8 ●●●● patch | view | raw | blame | history
interface/web/dashboard/lib/lang/nl_dashlet_modules.lng 2 ●●● patch | view | raw | blame | history
interface/web/dashboard/lib/lang/nl_dashlet_products.lng 14 ●●●● patch | view | raw | blame | history
interface/web/dashboard/lib/lang/nl_dashlet_quota.lng 12 ●●●● patch | view | raw | blame | history
interface/web/dashboard/lib/lang/nl_dashlet_shop.lng 6 ●●●● patch | view | raw | blame | history
interface/web/dashboard/lib/lang/pl_dashlet_modules.lng 2 ●●● patch | view | raw | blame | history
interface/web/dashboard/templates/dashboard.htm 2 ●●● patch | view | raw | blame | history
interface/web/dns/dns_import.php 25 ●●●● patch | view | raw | blame | history
interface/web/dns/dns_spf_edit.php 6 ●●●● patch | view | raw | blame | history
interface/web/dns/dns_wizard.php 14 ●●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/de_dns_wizard.lng 3 ●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/en_dns_wizard.lng 1 ●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/nl.lng 2 ●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/nl_dns_soa_admin_list.lng 10 ●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/nl_dns_soa_list.lng 4 ●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/nl_dns_wizard.lng 52 ●●●● patch | view | raw | blame | history
interface/web/dns/templates/dns_a_list.htm 4 ●●●● patch | view | raw | blame | history
interface/web/dns/templates/dns_soa_admin_list.htm 10 ●●●●● patch | view | raw | blame | history
interface/web/dns/templates/dns_soa_edit.htm 2 ●●● patch | view | raw | blame | history
interface/web/dns/templates/dns_soa_list.htm 10 ●●●●● patch | view | raw | blame | history
interface/web/help/list/support_message.list.php 3 ●●●● patch | view | raw | blame | history
interface/web/help/support_message_edit.php 2 ●●● patch | view | raw | blame | history
interface/web/login/index.php 1 ●●●● patch | view | raw | blame | history
interface/web/login/lib/lang/nl.lng 12 ●●●● patch | view | raw | blame | history
interface/web/login/lib/lang/nl_login_as.lng 10 ●●●● patch | view | raw | blame | history
interface/web/login/login_as.php 4 ●●●● patch | view | raw | blame | history
interface/web/login/logout.php 4 ●●●● patch | view | raw | blame | history
interface/web/mail/lib/lang/nl_mail_user.lng 34 ●●●● patch | view | raw | blame | history
interface/web/mail/list/mail_alias.list.php 2 ●●● patch | view | raw | blame | history
interface/web/mail/list/mail_aliasdomain.list.php 2 ●●● patch | view | raw | blame | history
interface/web/mail/list/mail_blacklist.list.php 2 ●●● patch | view | raw | blame | history
interface/web/mail/list/mail_content_filter.list.php 2 ●●● patch | view | raw | blame | history
interface/web/mail/list/mail_domain.list.php 2 ●●● patch | view | raw | blame | history
interface/web/mail/list/mail_domain_catchall.list.php 2 ●●● patch | view | raw | blame | history
interface/web/mail/list/mail_forward.list.php 2 ●●● patch | view | raw | blame | history
interface/web/mail/list/mail_get.list.php 2 ●●● patch | view | raw | blame | history
interface/web/mail/list/mail_relay_recipient.list.php 2 ●●● patch | view | raw | blame | history
interface/web/mail/list/mail_spamfilter.list.php 2 ●●● patch | view | raw | blame | history
interface/web/mail/list/mail_transport.list.php 2 ●●● patch | view | raw | blame | history
interface/web/mail/list/mail_user.list.php 10 ●●●● patch | view | raw | blame | history
interface/web/mail/list/mail_whitelist.list.php 2 ●●● patch | view | raw | blame | history
interface/web/mail/list/spamfilter_blacklist.list.php 2 ●●● patch | view | raw | blame | history
interface/web/mail/list/spamfilter_policy.list.php 8 ●●●● patch | view | raw | blame | history
interface/web/mail/list/spamfilter_users.list.php 2 ●●● patch | view | raw | blame | history
interface/web/mail/list/spamfilter_whitelist.list.php 2 ●●● patch | view | raw | blame | history
interface/web/mail/list/xmpp_domain.list.php 2 ●●● patch | view | raw | blame | history
interface/web/mail/mail_domain_edit.php 2 ●●● patch | view | raw | blame | history
interface/web/mail/mail_user_edit.php 9 ●●●● patch | view | raw | blame | history
interface/web/mail/templates/mail_user_list.htm 4 ●●● patch | view | raw | blame | history
interface/web/mail/xmpp_domain_edit.php 2 ●●● patch | view | raw | blame | history
interface/web/monitor/lib/lang/pl.lng 2 ●●● patch | view | raw | blame | history
interface/web/sites/ajax_get_ip.php 10 ●●●●● patch | view | raw | blame | history
interface/web/sites/aps_install_package.php 2 ●●● patch | view | raw | blame | history
interface/web/sites/database_quota_stats.php 9 ●●●●● patch | view | raw | blame | history
interface/web/sites/lib/lang/nl.lng 18 ●●●● patch | view | raw | blame | history
interface/web/sites/lib/lang/nl_aps.lng 40 ●●●● patch | view | raw | blame | history
interface/web/sites/lib/lang/nl_aps_instances_list.lng 16 ●●●● patch | view | raw | blame | history
interface/web/sites/lib/lang/nl_aps_packages_list.lng 12 ●●●● patch | view | raw | blame | history
interface/web/sites/lib/lang/nl_aps_update_packagelist.lng 8 ●●●● patch | view | raw | blame | history
interface/web/sites/lib/lang/nl_backup_stats_list.lng 10 ●●●● patch | view | raw | blame | history
interface/web/sites/lib/lang/nl_database.lng 32 ●●●● patch | view | raw | blame | history
interface/web/sites/lib/lang/nl_database_admin_list.lng 2 ●●● patch | view | raw | blame | history
interface/web/sites/lib/lang/nl_database_list.lng 2 ●●● patch | view | raw | blame | history
interface/web/sites/lib/lang/nl_database_quota_stats_list.lng 6 ●●●● patch | view | raw | blame | history
interface/web/sites/lib/lang/nl_database_user.lng 44 ●●●● patch | view | raw | blame | history
interface/web/sites/lib/lang/nl_database_user_admin_list.lng 8 ●●●● patch | view | raw | blame | history
interface/web/sites/lib/lang/nl_database_user_list.lng 6 ●●●● patch | view | raw | blame | history
interface/web/sites/lib/lang/nl_user_quota_stats_list.lng 4 ●●●● patch | view | raw | blame | history
interface/web/sites/lib/lang/nl_web_domain.lng 6 ●●●● patch | view | raw | blame | history
interface/web/sites/lib/lang/nl_web_folder.lng 8 ●●●● patch | view | raw | blame | history
interface/web/sites/lib/lang/nl_web_folder_list.lng 4 ●●●● patch | view | raw | blame | history
interface/web/sites/lib/lang/nl_web_folder_user.lng 22 ●●●● patch | view | raw | blame | history
interface/web/sites/lib/lang/nl_web_folder_user_list.lng 8 ●●●● patch | view | raw | blame | history
interface/web/sites/lib/lang/nl_web_sites_stats_list.lng 4 ●●●● patch | view | raw | blame | history
interface/web/sites/lib/lang/nl_web_subdomain.lng 14 ●●●● patch | view | raw | blame | history
interface/web/sites/lib/lang/nl_web_vhost_domain.lng 48 ●●●● patch | view | raw | blame | history
interface/web/sites/lib/lang/nl_web_vhost_domain_admin_list.lng 4 ●●●● patch | view | raw | blame | history
interface/web/sites/lib/lang/nl_web_vhost_domain_list.lng 4 ●●●● patch | view | raw | blame | history
interface/web/sites/lib/lang/nl_web_vhost_subdomain_list.lng 8 ●●●● patch | view | raw | blame | history
interface/web/sites/list/cron.list.php 2 ●●● patch | view | raw | blame | history
interface/web/sites/list/database.list.php 4 ●●●● patch | view | raw | blame | history
interface/web/sites/list/ftp_user.list.php 2 ●●● patch | view | raw | blame | history
interface/web/sites/list/shell_user.list.php 2 ●●● patch | view | raw | blame | history
interface/web/sites/list/web_childdomain.list.php 2 ●●● patch | view | raw | blame | history
interface/web/sites/list/web_folder.list.php 2 ●●● patch | view | raw | blame | history
interface/web/sites/list/web_folder_user.list.php 2 ●●● patch | view | raw | blame | history
interface/web/sites/list/web_vhost_domain.list.php 2 ●●● patch | view | raw | blame | history
interface/web/sites/list/webdav_user.list.php 2 ●●● patch | view | raw | blame | history
interface/web/sites/templates/backup_stats_list.htm 12 ●●●● patch | view | raw | blame | history
interface/web/sites/templates/cron_list.htm 8 ●●●●● patch | view | raw | blame | history
interface/web/sites/templates/database_admin_list.htm 6 ●●●●● patch | view | raw | blame | history
interface/web/sites/templates/database_list.htm 8 ●●●●● patch | view | raw | blame | history
interface/web/sites/templates/database_user_edit.htm 2 ●●● patch | view | raw | blame | history
interface/web/sites/templates/web_vhost_domain_admin_list.htm 6 ●●●●● patch | view | raw | blame | history
interface/web/sites/templates/web_vhost_domain_edit.htm 4 ●●●● patch | view | raw | blame | history
interface/web/sites/templates/web_vhost_domain_list.htm 6 ●●●●● patch | view | raw | blame | history
interface/web/sites/web_vhost_domain_edit.php 66 ●●●● patch | view | raw | blame | history
interface/web/themes/default/assets/fonts/glyphicons-halflings-regular.eot patch | view | raw | blame | history
interface/web/themes/default/assets/fonts/glyphicons-halflings-regular.svg 229 ●●●●● patch | view | raw | blame | history
interface/web/themes/default/assets/fonts/glyphicons-halflings-regular.ttf patch | view | raw | blame | history
interface/web/themes/default/assets/fonts/glyphicons-halflings-regular.woff patch | view | raw | blame | history
interface/web/themes/default/assets/javascripts/ispconfig.js 93 ●●●●● patch | view | raw | blame | history
interface/web/themes/default/assets/stylesheets/ispconfig.css 3 ●●●●● patch | view | raw | blame | history
interface/web/themes/default/assets/stylesheets/ispconfig.min.css 2 ●●● patch | view | raw | blame | history
interface/web/themes/default/assets/stylesheets/select2x2.png patch | view | raw | blame | history
interface/web/themes/default/templates/error.tpl.htm 1 ●●●● patch | view | raw | blame | history
interface/web/themes/default/templates/main.tpl.htm 2 ●●● patch | view | raw | blame | history
interface/web/themes/default/templates/main_login.tpl.htm 4 ●●●● patch | view | raw | blame | history
interface/web/tools/lib/lang/ar_usersettings.lng 2 ●●● patch | view | raw | blame | history
interface/web/tools/lib/lang/bg_usersettings.lng 2 ●●● patch | view | raw | blame | history
interface/web/tools/lib/lang/br_usersettings.lng 2 ●●● patch | view | raw | blame | history
interface/web/tools/lib/lang/ca_usersettings.lng 2 ●●● patch | view | raw | blame | history
interface/web/tools/lib/lang/cz_usersettings.lng 2 ●●● patch | view | raw | blame | history
interface/web/tools/lib/lang/de_usersettings.lng 2 ●●● patch | view | raw | blame | history
interface/web/tools/lib/lang/el_usersettings.lng 2 ●●● patch | view | raw | blame | history
interface/web/tools/lib/lang/en_usersettings.lng 2 ●●● patch | view | raw | blame | history
interface/web/tools/lib/lang/es_usersettings.lng 2 ●●● patch | view | raw | blame | history
interface/web/tools/lib/lang/fi_usersettings.lng 2 ●●● patch | view | raw | blame | history
interface/web/tools/lib/lang/fr_usersettings.lng 2 ●●● patch | view | raw | blame | history
interface/web/tools/lib/lang/hr_usersettings.lng 2 ●●● patch | view | raw | blame | history
interface/web/tools/lib/lang/hu_usersettings.lng 2 ●●● patch | view | raw | blame | history
interface/web/tools/lib/lang/id_usersettings.lng 2 ●●● patch | view | raw | blame | history
interface/web/tools/lib/lang/it_usersettings.lng 2 ●●● patch | view | raw | blame | history
interface/web/tools/lib/lang/ja_usersettings.lng 2 ●●● patch | view | raw | blame | history
interface/web/tools/lib/lang/nl_usersettings.lng 2 ●●● patch | view | raw | blame | history
interface/web/tools/lib/lang/pl_usersettings.lng 2 ●●● patch | view | raw | blame | history
interface/web/tools/lib/lang/pt_usersettings.lng 2 ●●● patch | view | raw | blame | history
interface/web/tools/lib/lang/ro_usersettings.lng 2 ●●● patch | view | raw | blame | history
interface/web/tools/lib/lang/ru_usersettings.lng 2 ●●● patch | view | raw | blame | history
interface/web/tools/lib/lang/se_usersettings.lng 2 ●●● patch | view | raw | blame | history
interface/web/tools/lib/lang/sk_usersettings.lng 2 ●●● patch | view | raw | blame | history
interface/web/tools/lib/lang/tr_usersettings.lng 2 ●●● patch | view | raw | blame | history
interface/web/tools/templates/import_ispconfig.htm 6 ●●●●● patch | view | raw | blame | history
interface/web/vm/list/openvz_ip.list.php 2 ●●● patch | view | raw | blame | history
interface/web/vm/list/openvz_ostemplate.list.php 4 ●●●● patch | view | raw | blame | history
interface/web/vm/list/openvz_template.list.php 2 ●●● patch | view | raw | blame | history
interface/web/vm/list/openvz_vm.list.php 2 ●●● patch | view | raw | blame | history
remoting_client/examples/rest_example.php 57 ●●●●● patch | view | raw | blame | history
server/conf/php_fpm_pool.conf.master 2 ●●●●● patch | view | raw | blame | history
server/conf/vhost.conf.master 20 ●●●●● patch | view | raw | blame | history
server/cron.php 24 ●●●●● patch | view | raw | blame | history
server/lib/classes/cron.d/500-backup_mail.inc.php 2 ●●● patch | view | raw | blame | history
server/lib/classes/cron.d/900-letsencrypt.inc.php 24 ●●●●● patch | view | raw | blame | history
server/lib/classes/db_mysql.inc.php 16 ●●●●● patch | view | raw | blame | history
server/lib/classes/monitor_tools.inc.php 450 ●●●●● patch | view | raw | blame | history
server/lib/classes/system.inc.php 35 ●●●● patch | view | raw | blame | history
server/plugins-available/apache2_plugin.inc.php 44 ●●●● patch | view | raw | blame | history
server/plugins-available/backup_plugin.inc.php 1 ●●●● patch | view | raw | blame | history
server/plugins-available/cron_plugin.inc.php 6 ●●●● patch | view | raw | blame | history
server/plugins-available/mail_plugin.inc.php 8 ●●●● patch | view | raw | blame | history
server/plugins-available/mail_plugin_dkim.inc.php 21 ●●●● patch | view | raw | blame | history
server/plugins-available/maildeliver_plugin.inc.php 2 ●●● patch | view | raw | blame | history
server/plugins-available/maildrop_plugin.inc.php 2 ●●● patch | view | raw | blame | history
server/plugins-available/nginx_plugin.inc.php 42 ●●●● patch | view | raw | blame | history
server/plugins-available/shelluser_jailkit_plugin.inc.php 14 ●●●●● patch | view | raw | blame | history
server/scripts/create_jailkit_chroot.sh 3 ●●●●● patch | view | raw | blame | history
server/server.php 37 ●●●● patch | view | raw | blame | history
.gitignore
New file
@@ -0,0 +1 @@
.DS_Store
install/dist/conf/centos72.conf.php
New file
@@ -0,0 +1,219 @@
<?php
/*
Copyright (c) 2007, Till Brehm, projektfarm Gmbh
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
    * Redistributions of source code must retain the above copyright notice,
      this list of conditions and the following disclaimer.
    * Redistributions in binary form must reproduce the above copyright notice,
      this list of conditions and the following disclaimer in the documentation
      and/or other materials provided with the distribution.
    * Neither the name of ISPConfig nor the names of its contributors
      may be used to endorse or promote products derived from this software without
      specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
//***  Fedora 9 default settings
//* Main
$conf['language'] = 'en';
$conf['distname'] = 'centos72';
$conf['hostname'] = 'server1.domain.tld'; // Full hostname
$conf['ispconfig_install_dir'] = '/usr/local/ispconfig';
$conf['ispconfig_config_dir'] = '/usr/local/ispconfig';
$conf['ispconfig_log_priority'] = 2;  // 0 = Debug, 1 = Warning, 2 = Error
$conf['ispconfig_log_dir'] = '/var/log/ispconfig';
$conf['server_id'] = 1;
$conf['init_scripts'] = '/etc/init.d';
$conf['runlevel'] = '/etc';
$conf['shells'] = '/etc/shells';
$conf['pam'] = '/etc/pam.d';
//* Services provided by this server, this selection will be overridden by the expert mode
$conf['services']['mail'] = true;
$conf['services']['web'] = true;
$conf['services']['dns'] = true;
$conf['services']['file'] = true;
$conf['services']['db'] = true;
$conf['services']['vserver'] = true;
//* MySQL
$conf['mysql']['installed'] = false; // will be detected automatically during installation
$conf['mysql']['init_script'] = 'mariadb';
$conf['mysql']['host'] = 'localhost';
$conf['mysql']['ip'] = '127.0.0.1';
$conf['mysql']['port'] = '3306';
$conf['mysql']['database'] = 'dbispconfig';
$conf['mysql']['admin_user'] = 'root';
$conf['mysql']['admin_password'] = '';
$conf['mysql']['charset'] = 'utf8';
$conf['mysql']['ispconfig_user'] = 'ispconfig';
$conf['mysql']['ispconfig_password'] = md5(uniqid(rand()));
$conf['mysql']['master_slave_setup'] = 'n';
$conf['mysql']['master_host'] = '';
$conf['mysql']['master_database'] = 'dbispconfig';
$conf['mysql']['master_admin_user'] = 'root';
$conf['mysql']['master_admin_password'] = '';
$conf['mysql']['master_ispconfig_user'] = '';
$conf['mysql']['master_ispconfig_password'] = md5(uniqid(rand()));
//* Apache
$conf['apache']['installed'] = false; // will be detected automatically during installation
$conf['apache']['user'] = 'apache';
$conf['apache']['group'] = 'apache';
$conf['apache']['init_script'] = 'httpd';
$conf['apache']['version'] = '2.2';
$conf['apache']['vhost_conf_dir'] = '/etc/httpd/conf/sites-available';
$conf['apache']['vhost_conf_enabled_dir'] = '/etc/httpd/conf/sites-enabled';
$conf['apache']['vhost_port'] = '8080';
$conf['apache']['php_ini_path_apache'] = '/etc/php.ini';
$conf['apache']['php_ini_path_cgi'] = '/etc/php.ini';
//* Website base settings
$conf['web']['website_basedir'] = '/var/www';
$conf['web']['website_path'] = '/var/www/clients/client[client_id]/web[website_id]';
$conf['web']['website_symlinks'] = '/var/www/[website_domain]/:/var/www/clients/client[client_id]/[website_domain]/';
//* Apps base settings
$conf['web']['apps_vhost_ip'] = '_default_';
$conf['web']['apps_vhost_port'] = '8081';
$conf['web']['apps_vhost_servername'] = '';
$conf['web']['apps_vhost_user'] = 'ispapps';
$conf['web']['apps_vhost_group'] = 'ispapps';
//* Fastcgi
$conf['fastcgi']['fastcgi_phpini_path'] = '/etc/';
$conf['fastcgi']['fastcgi_starter_path'] = '/var/www/php-fcgi-scripts/[system_user]/';
$conf['fastcgi']['fastcgi_bin'] = '/usr/bin/php-cgi';
//* Postfix
$conf['postfix']['installed'] = false; // will be detected automatically during installation
$conf['postfix']['config_dir'] = '/etc/postfix';
$conf['postfix']['init_script'] = 'postfix';
$conf['postfix']['user'] = 'postfix';
$conf['postfix']['group'] = 'postfix';
$conf['postfix']['vmail_userid'] = '5000';
$conf['postfix']['vmail_username'] = 'vmail';
$conf['postfix']['vmail_groupid'] = '5000';
$conf['postfix']['vmail_groupname'] = 'vmail';
$conf['postfix']['vmail_mailbox_base'] = '/var/vmail';
//* Mailman
$conf['mailman']['installed'] = false; // will be detected automatically during installation
$conf['mailman']['config_dir'] = '/etc/mailman';
$conf['mailman']['init_script'] = 'mailman';
//* Getmail
$conf['getmail']['installed'] = false; // will be detected automatically during installation
$conf['getmail']['config_dir'] = '/etc/getmail';
$conf['getmail']['program'] = '/usr/bin/getmail';
//* Courier
$conf['courier']['installed'] = false; // will be detected automatically during installation
$conf['courier']['config_dir'] = '/etc/authlib';
$conf['courier']['courier-authdaemon'] = 'courier-authlib';
$conf['courier']['courier-imap'] = 'courier-imap';
$conf['courier']['courier-imap-ssl'] = '';
$conf['courier']['courier-pop'] = '';
$conf['courier']['courier-pop-ssl'] = '';
//* Dovecot
$conf['dovecot']['installed'] = false; // will be detected automatically during installation
$conf['dovecot']['config_dir'] = '/etc/dovecot';
$conf['dovecot']['init_script'] = 'dovecot';
//* SASL
$conf['saslauthd']['installed'] = false; // will be detected automatically during installation
$conf['saslauthd']['config'] = '/etc/sysconfig/saslauthd';
$conf['saslauthd']['init_script'] = 'saslauthd';
//* Amavisd
$conf['amavis']['installed'] = false; // will be detected automatically during installation
$conf['amavis']['config_dir'] = '/etc/amavisd';
$conf['amavis']['init_script'] = 'amavisd';
//* ClamAV
$conf['clamav']['installed'] = false; // will be detected automatically during installation
$conf['clamav']['init_script'] = 'clamd@amavisd';
//* Pureftpd
$conf['pureftpd']['installed'] = false; // will be detected automatically during installation
$conf['pureftpd']['config_dir'] = '/etc/pure-ftpd';
$conf['pureftpd']['init_script'] = 'pure-ftpd';
//* MyDNS
$conf['mydns']['installed'] = false; // will be detected automatically during installation
$conf['mydns']['config_dir'] = '/etc';
$conf['mydns']['init_script'] = 'mydns';
//* PowerDNS
$conf['powerdns']['installed'] = false; // will be detected automatically during installation
$conf['powerdns']['database'] = 'powerdns';
$conf["powerdns"]["config_dir"] = '/etc/powerdns/pdns.d';
$conf['powerdns']['init_script'] = 'pdns';
//* BIND DNS Server
$conf['bind']['installed'] = false; // will be detected automatically during installation
$conf['bind']['bind_user'] = 'named';
$conf['bind']['bind_group'] = 'named';
$conf['bind']['bind_zonefiles_dir'] = '/var/named';
$conf['bind']['named_conf_path'] = '/etc/named.conf';
$conf['bind']['named_conf_local_path'] = '/etc/named.conf.local';
$conf['bind']['init_script'] = 'named';
//* Jailkit
$conf['jailkit']['installed'] = false; // will be detected automatically during installation
$conf['jailkit']['config_dir'] = '/etc/jailkit';
$conf['jailkit']['jk_init'] = 'jk_init.ini';
$conf['jailkit']['jk_chrootsh'] = 'jk_chrootsh.ini';
$conf['jailkit']['jailkit_chroot_app_programs'] = '/usr/bin/groups /usr/bin/id /usr/bin/dircolors /bin/basename /usr/bin/dirname /usr/bin/nano';
$conf['jailkit']['jailkit_chroot_cron_programs'] = '/usr/bin/php /usr/bin/perl /usr/share/perl /usr/share/php';
//* Squid
$conf['squid']['installed'] = false; // will be detected automatically during installation
$conf['squid']['config_dir'] = '/etc/squid';
$conf['squid']['init_script'] = 'squid';
//* Nginx
$conf['nginx']['installed'] = false; // will be detected automatically during installation
$conf['nginx']['user'] = 'nginx';
$conf['nginx']['group'] = 'nginx';
$conf['nginx']['config_dir'] = '/etc/nginx';
$conf['nginx']['vhost_conf_dir'] = '/etc/nginx/sites-available';
$conf['nginx']['vhost_conf_enabled_dir'] = '/etc/nginx/sites-enabled';
$conf['nginx']['init_script'] = 'nginx';
$conf['nginx']['vhost_port'] = '8080';
$conf['nginx']['cgi_socket'] = '/var/run/fcgiwrap.socket';
$conf['nginx']['php_fpm_init_script'] = 'php-fpm';
$conf['nginx']['php_fpm_ini_path'] = '/etc/php.ini';
$conf['nginx']['php_fpm_pool_dir'] = '/etc/php-fpm.d';
$conf['nginx']['php_fpm_start_port'] = 9010;
$conf['nginx']['php_fpm_socket_dir'] = '/var/lib/php5-fpm';
//* vlogger
$conf['vlogger']['config_dir'] = '/etc';
//* cron
$conf['cron']['init_script'] = 'crond';
$conf['cron']['crontab_dir'] = '/etc/cron.d';
$conf['cron']['wget'] = '/usr/bin/wget';
//* OpenVZ
$conf['openvz']['installed'] = false;
?>
install/dist/conf/debiantesting.conf.php
New file
@@ -0,0 +1,230 @@
<?php
/*
Copyright (c) 2016, Till Brehm, ISPConfig UG
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
    * Redistributions of source code must retain the above copyright notice,
      this list of conditions and the following disclaimer.
    * Redistributions in binary form must reproduce the above copyright notice,
      this list of conditions and the following disclaimer in the documentation
      and/or other materials provided with the distribution.
    * Neither the name of ISPConfig nor the names of its contributors
      may be used to endorse or promote products derived from this software without
      specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
//***  Ubuntu 16.04 default settings
//* Main
$conf['language'] = 'en';
$conf['distname'] = 'ubuntu1604';
$conf['hostname'] = 'server1.domain.tld'; // Full hostname
$conf['ispconfig_install_dir'] = '/usr/local/ispconfig';
$conf['ispconfig_config_dir'] = '/usr/local/ispconfig';
$conf['ispconfig_log_priority'] = 2;  // 0 = Debug, 1 = Warning, 2 = Error
$conf['ispconfig_log_dir'] = '/var/log/ispconfig';
$conf['server_id'] = 1;
$conf['init_scripts'] = '/etc/init.d';
$conf['runlevel'] = '/etc';
$conf['shells'] = '/etc/shells';
$conf['pam'] = '/etc/pam.d';
//* Services provided by this server, this selection will be overridden by the expert mode
$conf['services']['mail'] = true;
$conf['services']['web'] = true;
$conf['services']['dns'] = true;
$conf['services']['file'] = true;
$conf['services']['db'] = true;
$conf['services']['vserver'] = true;
$conf['services']['proxy'] = false;
$conf['services']['firewall'] = false;
//* MySQL
$conf['mysql']['installed'] = false; // will be detected automatically during installation
$conf['mysql']['init_script'] = 'mysql';
$conf['mysql']['host'] = 'localhost';
$conf['mysql']['ip'] = '127.0.0.1';
$conf['mysql']['port'] = '3306';
$conf['mysql']['database'] = 'dbispconfig';
$conf['mysql']['admin_user'] = 'root';
$conf['mysql']['admin_password'] = '';
$conf['mysql']['charset'] = 'utf8';
$conf['mysql']['ispconfig_user'] = 'ispconfig';
$conf['mysql']['ispconfig_password'] = md5(uniqid(rand()));
$conf['mysql']['master_slave_setup'] = 'n';
$conf['mysql']['master_host'] = '';
$conf['mysql']['master_database'] = 'dbispconfig';
$conf['mysql']['master_admin_user'] = 'root';
$conf['mysql']['master_admin_password'] = '';
$conf['mysql']['master_ispconfig_user'] = '';
$conf['mysql']['master_ispconfig_password'] = md5(uniqid(rand()));
//* Apache
$conf['apache']['installed'] = false; // will be detected automatically during installation
$conf['apache']['user'] = 'www-data';
$conf['apache']['group'] = 'www-data';
$conf['apache']['init_script'] = 'apache2';
$conf['apache']['version'] = '2.4';
$conf['apache']['vhost_conf_dir'] = '/etc/apache2/sites-available';
$conf['apache']['vhost_conf_enabled_dir'] = '/etc/apache2/sites-enabled';
$conf['apache']['vhost_port'] = '8080';
$conf['apache']['php_ini_path_apache'] = '/etc/php/7.0/apache2/php.ini';
$conf['apache']['php_ini_path_cgi'] = '/etc/php/7.0/cgi/php.ini';
//* Website base settings
$conf['web']['website_basedir'] = '/var/www';
$conf['web']['website_path'] = '/var/www/clients/client[client_id]/web[website_id]';
$conf['web']['website_symlinks'] = '/var/www/[website_domain]/:/var/www/clients/client[client_id]/[website_domain]/';
//* Apps base settings
$conf['web']['apps_vhost_ip'] = '_default_';
$conf['web']['apps_vhost_port'] = '8081';
$conf['web']['apps_vhost_servername'] = '';
$conf['web']['apps_vhost_user'] = 'ispapps';
$conf['web']['apps_vhost_group'] = 'ispapps';
//* Fastcgi
$conf['fastcgi']['fastcgi_phpini_path'] = '/etc/php/7.0/cgi/';
$conf['fastcgi']['fastcgi_starter_path'] = '/var/www/php-fcgi-scripts/[system_user]/';
$conf['fastcgi']['fastcgi_bin'] = '/usr/bin/php-cgi';
//* Postfix
$conf['postfix']['installed'] = false; // will be detected automatically during installation
$conf['postfix']['config_dir'] = '/etc/postfix';
$conf['postfix']['init_script'] = 'postfix';
$conf['postfix']['user'] = 'postfix';
$conf['postfix']['group'] = 'postfix';
$conf['postfix']['vmail_userid'] = '5000';
$conf['postfix']['vmail_username'] = 'vmail';
$conf['postfix']['vmail_groupid'] = '5000';
$conf['postfix']['vmail_groupname'] = 'vmail';
$conf['postfix']['vmail_mailbox_base'] = '/var/vmail';
//* Mailman
$conf['mailman']['installed'] = false; // will be detected automatically during installation
$conf['mailman']['config_dir'] = '/etc/mailman';
$conf['mailman']['init_script'] = 'mailman';
//* Getmail
$conf['getmail']['installed'] = false; // will be detected automatically during installation
$conf['getmail']['config_dir'] = '/etc/getmail';
$conf['getmail']['program'] = '/usr/bin/getmail';
//* Courier
$conf['courier']['installed'] = false; // will be detected automatically during installation
$conf['courier']['config_dir'] = '/etc/courier';
$conf['courier']['courier-authdaemon'] = 'courier-authdaemon';
$conf['courier']['courier-imap'] = 'courier-imap';
$conf['courier']['courier-imap-ssl'] = 'courier-imap-ssl';
$conf['courier']['courier-pop'] = 'courier-pop';
$conf['courier']['courier-pop-ssl'] = 'courier-pop-ssl';
//* Dovecot
$conf['dovecot']['installed'] = false; // will be detected automatically during installation
$conf['dovecot']['config_dir'] = '/etc/dovecot';
$conf['dovecot']['init_script'] = 'dovecot';
//* SASL
$conf['saslauthd']['installed'] = false; // will be detected automatically during installation
$conf['saslauthd']['config'] = '/etc/default/saslauthd';
$conf['saslauthd']['init_script'] = 'saslauthd';
//* Amavisd
$conf['amavis']['installed'] = false; // will be detected automatically during installation
$conf['amavis']['config_dir'] = '/etc/amavis';
$conf['amavis']['init_script'] = 'amavis';
//* ClamAV
$conf['clamav']['installed'] = false; // will be detected automatically during installation
$conf['clamav']['init_script'] = 'clamav-daemon';
//* Pureftpd
$conf['pureftpd']['installed'] = false; // will be detected automatically during installation
$conf['pureftpd']['config_dir'] = '/etc/pure-ftpd';
$conf['pureftpd']['init_script'] = 'pure-ftpd-mysql';
//* MyDNS
$conf['mydns']['installed'] = false; // will be detected automatically during installation
$conf['mydns']['config_dir'] = '/etc';
$conf['mydns']['init_script'] = 'mydns';
//* PowerDNS
$conf['powerdns']['installed'] = false; // will be detected automatically during installation
$conf['powerdns']['database'] = 'powerdns';
$conf["powerdns"]["config_dir"] = '/etc/powerdns/pdns.d';
$conf['powerdns']['init_script'] = 'pdns';
//* BIND DNS Server
$conf['bind']['installed'] = false; // will be detected automatically during installation
$conf['bind']['bind_user'] = 'root';
$conf['bind']['bind_group'] = 'bind';
$conf['bind']['bind_zonefiles_dir'] = '/etc/bind';
$conf['bind']['named_conf_path'] = '/etc/bind/named.conf';
$conf['bind']['named_conf_local_path'] = '/etc/bind/named.conf.local';
$conf['bind']['init_script'] = 'bind9';
//* Jailkit
$conf['jailkit']['installed'] = false; // will be detected automatically during installation
$conf['jailkit']['config_dir'] = '/etc/jailkit';
$conf['jailkit']['jk_init'] = 'jk_init.ini';
$conf['jailkit']['jk_chrootsh'] = 'jk_chrootsh.ini';
$conf['jailkit']['jailkit_chroot_app_programs'] = '/usr/bin/groups /usr/bin/id /usr/bin/dircolors /usr/bin/lesspipe /usr/bin/basename /usr/bin/dirname /usr/bin/nano /usr/bin/pico /usr/bin/mysql /usr/bin/mysqldump /usr/bin/git /usr/bin/git-receive-pack /usr/bin/git-upload-pack /usr/bin/unzip /usr/bin/zip /bin/tar /bin/rm /usr/bin/patch';
$conf['jailkit']['jailkit_chroot_cron_programs'] = '/usr/bin/php /usr/bin/perl /usr/share/perl /usr/share/php';
//* Squid
$conf['squid']['installed'] = false; // will be detected automatically during installation
$conf['squid']['config_dir'] = '/etc/squid';
$conf['squid']['init_script'] = 'squid';
//* Nginx
$conf['nginx']['installed'] = false; // will be detected automatically during installation
$conf['nginx']['user'] = 'www-data';
$conf['nginx']['group'] = 'www-data';
$conf['nginx']['config_dir'] = '/etc/nginx';
$conf['nginx']['vhost_conf_dir'] = '/etc/nginx/sites-available';
$conf['nginx']['vhost_conf_enabled_dir'] = '/etc/nginx/sites-enabled';
$conf['nginx']['init_script'] = 'nginx';
$conf['nginx']['vhost_port'] = '8080';
$conf['nginx']['cgi_socket'] = '/var/run/fcgiwrap.socket';
$conf['nginx']['php_fpm_init_script'] = 'php7.0-fpm';
$conf['nginx']['php_fpm_ini_path'] = '/etc/php/7.0/fpm/php.ini';
$conf['nginx']['php_fpm_pool_dir'] = '/etc/php/7.0/fpm/pool.d';
$conf['nginx']['php_fpm_start_port'] = 9010;
$conf['nginx']['php_fpm_socket_dir'] = '/var/lib/php7.0-fpm';
//* OpenVZ
$conf['openvz']['installed'] = false;
//*Bastille-Firwall
$conf['bastille']['installed'] = false;
$conf['bastille']['config_dir'] = '/etc/Bastille';
//* vlogger
$conf['vlogger']['config_dir'] = '/etc';
//* cron
$conf['cron']['init_script'] = 'cron';
$conf['cron']['crontab_dir'] = '/etc/cron.d';
$conf['cron']['wget'] = '/usr/bin/wget';
//* Metronome XMPP
$conf['xmpp']['installed'] = false;
$conf['xmpp']['init_script'] = 'metronome';
?>
install/dist/lib/centos72.lib.php
File was renamed from install/dist/lib/ubuntu1604.lib.php
@@ -1,7 +1,7 @@
<?php
/*
Copyright (c) 2016, Till Brehm, ISPConfig UG
Copyright (c) 2014, Till Brehm, ISPConfig UG
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
@@ -28,8 +28,13 @@
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
class installer extends installer_base {
require_once realpath(dirname(__FILE__)) . '/centos_base.lib.php';
class installer extends installer_centos {
    protected $clamav_socket = '/var/run/clamd.amavisd/clamd.sock';
    // everything else is inherited from installer_centos class
}
?>
install/dist/lib/centos_base.lib.php
@@ -33,7 +33,7 @@
    protected $clamav_socket = '/tmp/clamd.socket';
    
    public function configure_amavis() {
        global $conf;
        global $conf, $dist;
        // amavisd user config file
        $configfile = 'fedora_amavisd_conf';
@@ -50,6 +50,12 @@
        $content = str_replace('/var/spool/amavisd/clamd.sock', $this->clamav_socket, $content);
        wf($conf["amavis"]["config_dir"].'/amavisd.conf', $content);
        chmod($conf['amavis']['config_dir'].'/amavisd.conf', 0640);
        // for CentOS 7.2 only
        if($dist['confid'] == 'centos72') {
            chmod($conf['amavis']['config_dir'].'/amavisd.conf', 0750);
            chgrp($conf['amavis']['config_dir'].'/amavisd.conf', 'amavis');
        }
        // Adding the amavisd commands to the postfix configuration
install/dist/lib/fedora.lib.php
@@ -89,6 +89,9 @@
        //* mysql-virtual_relayrecipientmaps.cf
        $this->process_postfix_config('mysql-virtual_relayrecipientmaps.cf');
        //* mysql-virtual_outgoing_bcc.cf
        $this->process_postfix_config('mysql-virtual_outgoing_bcc.cf');
        //* mysql-virtual_policy_greylist.cf
        $this->process_postfix_config('mysql-virtual_policy_greylist.cf');
@@ -179,11 +182,33 @@
        //if(!is_file('/var/lib/mailman/data/aliases')) touch('/var/lib/mailman/data/aliases');
        if(is_file('/var/lib/mailman/data/aliases')) unlink('/var/lib/mailman/data/aliases');
        if(!is_link('/var/lib/mailman/data/aliases')) symlink('/etc/mailman/aliases', '/var/lib/mailman/data/aliases');
        if(!is_file('/etc/mailman/aliases')) touch('/etc/mailman/aliases');
        exec('postalias /var/lib/mailman/data/aliases');
        if(!is_file('/etc/mailman/virtual-mailman')) touch('/etc/mailman/virtual-mailman');
        exec('postmap /etc/mailman/virtual-mailman');
        if(!is_file('/var/lib/mailman/data/transport-mailman')) touch('/var/lib/mailman/data/transport-mailman');
        exec('/usr/sbin/postmap /var/lib/mailman/data/transport-mailman');
        //* Create auxillary postfix conf files
        $configfile = 'helo_access';
        if(is_file($config_dir.'/'.$configfile)) {
            copy($config_dir.'/'.$configfile, $config_dir.'/'.$configfile.'~');
            chmod($config_dir.'/'.$configfile.'~', 0400);
        }
        $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/'.$configfile.'.master', 'tpl/'.$configfile.'.master');
        $content = strtr($content, $postconf_placeholders);
        # todo: look up this server's ip addrs and loop through each
        # todo: look up domains hosted on this server and loop through each
        wf($config_dir.'/'.$configfile, $content);
        $configfile = 'blacklist_helo';
        if(is_file($config_dir.'/'.$configfile)) {
            copy($config_dir.'/'.$configfile, $config_dir.'/'.$configfile.'~');
            chmod($config_dir.'/'.$configfile.'~', 0400);
        }
        $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/'.$configfile.'.master', 'tpl/'.$configfile.'.master');
        $content = strtr($content, $postconf_placeholders);
        wf($config_dir.'/'.$configfile, $content);
        //* Make a backup copy of the main.cf file
        copy($config_dir.'/main.cf', $config_dir.'/main.cf~');
@@ -440,6 +465,10 @@
        $content = str_replace('{mysql_server_host}', $conf['mysql']['host'], $content);
        $content = str_replace('{mysql_server_port}', $conf['mysql']['port'], $content);
        $content = str_replace('{server_id}', $conf['server_id'], $content);
        # enable iterate_query for dovecot2
        if(version_compare($dovecot_version,2, '>=')) {
            $content = str_replace('# iterate_query', 'iterate_query', $content);
        }
        wf("$config_dir/$configfile", $content);
        exec("chmod 600 $config_dir/$configfile");
@@ -451,7 +480,7 @@
    }
    public function configure_amavis() {
        global $conf;
        global $conf, $dist;
        // amavisd user config file
        $configfile = 'fedora_amavisd_conf';
@@ -466,6 +495,12 @@
        $content = str_replace('{hostname}', $conf['hostname'], $content);
        wf($conf["amavis"]["config_dir"].'/amavisd.conf', $content);
        chmod($conf['amavis']['config_dir'].'/amavisd.conf', 0640);
        // for CentOS 7.2 only
        if($dist['confid'] == 'centos72') {
            chmod($conf['amavis']['config_dir'].'/amavisd.conf', 0750);
            chgrp($conf['amavis']['config_dir'].'/amavisd.conf', 'amavis');
        }
        // Adding the amavisd commands to the postfix configuration
install/dist/lib/gentoo.lib.php
@@ -135,6 +135,26 @@
        touch($config_dir.'/nested_header_checks');
        touch($config_dir.'/body_checks');
        //* Create auxillary postfix conf files
        $configfile = 'helo_access';
        if(is_file($config_dir.'/'.$configfile)) {
            copy($config_dir.'/'.$configfile, $config_dir.'/'.$configfile.'~');
            chmod($config_dir.'/'.$configfile.'~', 0400);
        }
        $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/'.$configfile.'.master', 'tpl/'.$configfile.'.master');
        $content = strtr($content, $postconf_placeholders);
        # todo: look up this server's ip addrs and loop through each
        # todo: look up domains hosted on this server and loop through each
        wf($config_dir.'/'.$configfile, $content);
        $configfile = 'blacklist_helo';
        if(is_file($config_dir.'/'.$configfile)) {
            copy($config_dir.'/'.$configfile, $config_dir.'/'.$configfile.'~');
            chmod($config_dir.'/'.$configfile.'~', 0400);
        }
        $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/'.$configfile.'.master', 'tpl/'.$configfile.'.master');
        $content = strtr($content, $postconf_placeholders);
        wf($config_dir.'/'.$configfile, $content);
        //* Make a backup copy of the main.cf file
        copy($config_dir.'/main.cf', $config_dir.'/main.cf~');
@@ -321,6 +341,10 @@
        //* dovecot-sql.conf
        $configfile = $config_dir.'/dovecot-sql.conf';
        $content = $this->get_template_file('debian_dovecot-sql.conf', true, true);
        # enable iterate_query for dovecot2
        if(version_compare($dovecot_version,2, '>=')) {
            $content = str_replace('# iterate_query', 'iterate_query', $content);
        }
        $this->write_config_file($configfile, $content);
    }
install/dist/lib/opensuse.lib.php
@@ -197,6 +197,27 @@
        if(!is_file('/var/lib/mailman/data/transport-mailman')) touch('/var/lib/mailman/data/transport-mailman');
        exec('/usr/sbin/postmap /var/lib/mailman/data/transport-mailman');
        //* Create auxillary postfix conf files
        $configfile = 'helo_access';
        if(is_file($config_dir.'/'.$configfile)) {
            copy($config_dir.'/'.$configfile, $config_dir.'/'.$configfile.'~');
            chmod($config_dir.'/'.$configfile.'~', 0400);
        }
        $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/'.$configfile.'.master', 'tpl/'.$configfile.'.master');
        $content = strtr($content, $postconf_placeholders);
        # todo: look up this server's ip addrs and loop through each
        # todo: look up domains hosted on this server and loop through each
        wf($config_dir.'/'.$configfile, $content);
        $configfile = 'blacklist_helo';
        if(is_file($config_dir.'/'.$configfile)) {
            copy($config_dir.'/'.$configfile, $config_dir.'/'.$configfile.'~');
            chmod($config_dir.'/'.$configfile.'~', 0400);
        }
        $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/'.$configfile.'.master', 'tpl/'.$configfile.'.master');
        $content = strtr($content, $postconf_placeholders);
        wf($config_dir.'/'.$configfile, $content);
        //* Make a backup copy of the main.cf file
        copy($config_dir.'/main.cf', $config_dir.'/main.cf~');
@@ -450,6 +471,10 @@
        $content = str_replace('{mysql_server_host}', $conf['mysql']['host'], $content);
        $content = str_replace('{mysql_server_port}', $conf['mysql']['port'], $content);
        $content = str_replace('{server_id}', $conf['server_id'], $content);
        # enable iterate_query for dovecot2
        if(version_compare($dovecot_version,2, '>=')) {
            $content = str_replace('# iterate_query', 'iterate_query', $content);
        }
        wf("$config_dir/$configfile", $content);
        exec("chmod 600 $config_dir/$configfile");
install/dist/tpl/gentoo/amavisd-ispconfig.conf.master
@@ -95,9 +95,9 @@
$inet_socket_port = [10024,10026];
# *:* = send to IP/HOST:incoming Port + 1
$forward_method = 'smtp:*:*';
$notify_method = 'smtp:*:*';
# :* = send to incoming Port + 1
$forward_method = 'smtp:127.0.0.1:*';
$notify_method = 'smtp:127.0.0.1:*';
$interface_policy{'10026'} = 'ORIGINATING';
$policy_bank{'ORIGINATING'} = {
install/install.php
@@ -133,7 +133,7 @@
//** Include the distribution-specific installer class library and configuration
if(is_file('dist/lib/'.$dist['baseid'].'.lib.php')) include_once 'dist/lib/'.$dist['baseid'].'.lib.php';
include_once 'dist/lib/'.$dist['id'].'.lib.php';
include_once 'dist/conf/'.$dist['id'].'.conf.php';
include_once 'dist/conf/'.$dist['confid'].'.conf.php';
//****************************************************************************************************
//** Installer Interface
@@ -246,41 +246,99 @@
$conf['services']['proxy'] = false;
$conf['services']['xmpp'] = false;
if($install_mode == 'standard') {
//** Get Server ID
// $conf['server_id'] = $inst->free_query('Unique Numeric ID of the server','1');
// Server ID is an autoInc value of the mysql database now
if($install_mode == 'expert' && strtolower($inst->simple_query('Shall this server join an existing ISPConfig multiserver setup', array('y', 'n'), 'n','join_multiserver_setup')) == 'y') {
    $conf['mysql']['master_slave_setup'] = 'y';
    //** Get MySQL root credentials
    $finished = false;
    do {
        $tmp_mysql_server_host = $inst->free_query('MySQL master server hostname', $conf['mysql']['master_host'],'mysql_master_hostname');
        $tmp_mysql_server_port = $inst->free_query('MySQL master server port', $conf['mysql']['master_port'],'mysql_master_port');
        $tmp_mysql_server_admin_user = $inst->free_query('MySQL master server root username', $conf['mysql']['master_admin_user'],'mysql_master_root_user');
        $tmp_mysql_server_admin_password = $inst->free_query('MySQL master server root password', $conf['mysql']['master_admin_password'],'mysql_master_root_password');
        $tmp_mysql_server_database = $inst->free_query('MySQL master server database name', $conf['mysql']['master_database'],'mysql_master_database');
        //* Initialize the MySQL server connection
        if(@mysqli_connect($tmp_mysql_server_host, $tmp_mysql_server_admin_user, $tmp_mysql_server_admin_password, $tmp_mysql_server_database, (int)$tmp_mysql_server_port)) {
            $conf['mysql']['master_host'] = $tmp_mysql_server_host;
            $conf['mysql']['master_port'] = $tmp_mysql_server_port;
            $conf['mysql']['master_admin_user'] = $tmp_mysql_server_admin_user;
            $conf['mysql']['master_admin_password'] = $tmp_mysql_server_admin_password;
            $conf['mysql']['master_database'] = $tmp_mysql_server_database;
            $finished = true;
        } else {
            swriteln($inst->lng('Unable to connect to mysql server').' '.mysqli_connect_error());
        }
    } while ($finished == false);
    unset($finished);
    // initialize the connection to the master database
    $inst->dbmaster = new db();
    if($inst->dbmaster->linkId) $inst->dbmaster->closeConn();
    $inst->dbmaster->setDBData($conf['mysql']["master_host"], $conf['mysql']["master_admin_user"], $conf['mysql']["master_admin_password"]);
    $inst->dbmaster->setDBName($conf['mysql']["master_database"]);
} else {
    // the master DB is the same then the slave DB
    $inst->dbmaster = $inst->db;
    //* Create the MySQL database
    $inst->configure_database();
}
    //* Insert the Server record into the database
    $inst->add_database_server_record();
//* Create the mysql database
$inst->configure_database();
//* Check for Web-Server
if(!$conf['apache']['installed'] && !$conf['nginx']['installed']) {
    $conf['apache']['installed'] = $inst->force_configure_app('Apache', ($install_mode == 'expert'));
    $conf['nginx']['installed'] = $inst->force_configure_app('nginx', ($install_mode == 'expert'));
}
//* Configure Webserver - Apache or nginx
if($conf['apache']['installed'] == true && $conf['nginx']['installed'] == true) {
    $http_server_to_use = $inst->simple_query('Apache and nginx detected. Select server to use for ISPConfig:', array('apache', 'nginx'), 'apache','http_server');
    if($http_server_to_use == 'apache'){
        $conf['nginx']['installed'] = false;
        $conf['services']['file'] = true;
    } else {
        $conf['apache']['installed'] = false;
    }
}
//* Insert the Server record into the database
if($install_mode == 'expert') {
    swriteln('Adding ISPConfig server record to database.');
    swriteln('');
}
$inst->add_database_server_record();
if($install_mode == 'standard' || strtolower($inst->simple_query('Configure Mail', array('y', 'n') , 'y','configure_mail') ) == 'y') {
    //* Configure Postgrey
    $force = @($conf['postgrey']['installed']) ? true : $inst->force_configure_app('Postgrey', false);
    $force = @($conf['postgrey']['installed']) ? true : $inst->force_configure_app('Postgrey', ($install_mode == 'expert'));
    if($force) swriteln('Configuring Postgrey');
    //* Configure Postfix
    $force = @($conf['postfix']['installed']) ? true : $inst->force_configure_app('Postfix', false);
    $force = @($conf['postfix']['installed']) ? true : $inst->force_configure_app('Postfix', ($install_mode == 'expert'));
    if($force) {
        swriteln('Configuring Postfix');
        $inst->configure_postfix();
        $conf['services']['mail'] = true;
        $inst->configure_postfix();
    }
    if($conf['services']['mail']) {
        //* Configure Mailman
        $force = @($conf['mailman']['installed']) ? true : $inst->force_configure_app('Mailman', false);
        $force = @($conf['mailman']['installed']) ? true : $inst->force_configure_app('Mailman', ($install_mode == 'expert'));
        if($force) {
            swriteln('Configuring Mailman');
            $inst->configure_mailman();
        }
        }
        //* Check for Dovecot and Courier
        if(!$conf['dovecot']['installed'] && !$conf['courier']['installed']) {
            $conf['dovecot']['installed'] = $inst->force_configure_app('Dovecot', false);
            $conf['courier']['installed'] = $inst->force_configure_app('Courier', false);
            $conf['dovecot']['installed'] = $inst->force_configure_app('Dovecot', ($install_mode == 'expert'));
            $conf['courier']['installed'] = $inst->force_configure_app('Courier', ($install_mode == 'expert'));
        }
        //* Configure Mailserver - Dovecot or Courier
        if($conf['dovecot']['installed'] && $conf['courier']['installed']) {
@@ -307,44 +365,58 @@
        }
        //* Configure Spamasassin
        $force = @($conf['spamassassin']['installed']) ? true : $inst->force_configure_app('Spamassassin', false);
        $force = @($conf['spamassassin']['installed']) ? true : $inst->force_configure_app('Spamassassin', ($install_mode == 'expert'));
        if($force) {
            swriteln('Configuring Spamassassin');
            $inst->configure_spamassassin();
        }
        //* Configure Amavis
        $force = @($conf['amavis']['installed']) ? true : $inst->force_configure_app('Amavisd', false);
        $force = @($conf['amavis']['installed']) ? true : $inst->force_configure_app('Amavisd', ($install_mode == 'expert'));
        if($force) {
            swriteln('Configuring Amavisd');
            $inst->configure_amavis();
        }
        //* Configure Getmail
        $force = @($conf['getmail']['installed']) ? true : $inst->force_configure_app('Getmail', false);
        $force = @($conf['getmail']['installed']) ? true : $inst->force_configure_app('Getmail', ($install_mode == 'expert'));
        if($force) {
            swriteln('Configuring Getmail');
            $inst->configure_getmail();
        }
    } else {
        swriteln('[ERROR] Postfix not installed - skipping Mail');
    }
}
    } else swriteln('[ERROR] Postfix not installed - skipping Mail');
//* Configure Jailkit
$force = @($conf['jailkit']['installed']) ? true : $inst->force_configure_app('Jailkit', ($install_mode == 'expert'));
if($force) {
    swriteln('Configuring Jailkit');
    $inst->configure_jailkit();
}
//* Configure Pureftpd
$force = @($conf['pureftpd']['installed']) ? true : $inst->force_configure_app('pureftpd', ($install_mode == 'expert'));
if($force) {
    swriteln('Configuring Pureftpd');
    $inst->configure_pureftpd();
}
//** Configure DNS
if($install_mode == 'standard' || strtolower($inst->simple_query('Configure DNS Server', array('y', 'n'), 'y','configure_dns')) == 'y') {
    //* Check for DNS
//    if(!$conf['powerdns']['installed'] && !$conf['bind']['installed'] && !$conf['mydns']['installed']) {
    if(!$conf['bind']['installed'] && !$conf['mydns']['installed']) {
//        $conf['powerdns']['installed'] = $inst->force_configure_app('PowerDNS', false);
        $conf['bind']['installed'] = $inst->force_configure_app('BIND', false);
        $conf['mydns']['installed'] = $inst->force_configure_app('MyDNS', false);
    if(!$conf['powerdns']['installed'] && !$conf['bind']['installed'] && !$conf['mydns']['installed']) {
        if($install_mode == 'expert') $conf['powerdns']['installed'] = $inst->force_configure_app('PowerDNS', ($install_mode == 'expert'));
        $conf['bind']['installed'] = $inst->force_configure_app('BIND', ($install_mode == 'expert'));
        $conf['mydns']['installed'] = $inst->force_configure_app('MyDNS', ($install_mode == 'expert'));
    }
    //* Configure PowerDNS
/*
    if($conf['powerdns']['installed']) {
    if($install_mode == 'expert' && $conf['powerdns']['installed']) {
        swriteln('Configuring PowerDNS');
        $inst->configure_powerdns();
        $conf['services']['dns'] = true;
    }
*/
    //* Configure Bind
    if($conf['bind']['installed']) {
        swriteln('Configuring BIND');
@@ -361,36 +433,9 @@
        $conf['services']['dns'] = true;
    }
    //* Configure Jailkit
    $force = @($conf['jailkit']['installed']) ? true : $inst->force_configure_app('Jailkit', false);
    if($force) {
        swriteln('Configuring Jailkit');
        $inst->configure_jailkit();
    }
}
    //* Configure Pureftpd
    $force = @($conf['pureftpd']['installed']) ? true : $inst->force_configure_app('pureftpd', false);
    if($force) {
        swriteln('Configuring Pureftpd');
        $inst->configure_pureftpd();
    }
    //* Check for Web-Server
    if(!$conf['apache']['installed'] && !$conf['nginx']['installed']) {
        $conf['apache']['installed'] = $inst->force_configure_app('Apache', false);
        $conf['nginx']['installed'] = $inst->force_configure_app('nginx', false);
    }
    //* Configure Webserver - Apache or nginx
    if($conf['apache']['installed'] && $conf['nginx']['installed']) {
        $http_server_to_use = $inst->simple_query('Apache and nginx detected. Select server to use for ISPConfig:', array('apache', 'nginx'), 'apache','http_server');
        if($http_server_to_use == 'apache'){
            $conf['nginx']['installed'] = false;
        } else {
            $conf['apache']['installed'] = false;
        }
    }
if($install_mode == 'standard' || strtolower($inst->simple_query('Configure Web Server', array('y', 'n'), 'y','configure_webserver')) == 'y') {
    //* Configure Apache
    if($conf['apache']['installed']){
        swriteln('Configuring Apache');
@@ -398,41 +443,42 @@
        $conf['services']['web'] = true;
        $conf['services']['file'] = true;
        //* Configure Vlogger
        $force = @($conf['vlogger']['installed']) ? true : $inst->force_configure_app('vlogger', false);
        $force = @($conf['vlogger']['installed']) ? true : $inst->force_configure_app('vlogger', ($install_mode == 'expert'));
        if($force) {
            swriteln('Configuring vlogger');
            $inst->configure_vlogger();
        }
        //* Configure squid
/*
        $force = @($conf['squid']['installed']) ? true : $inst->force_configure_app('squid');
        $force = @($conf['squid']['installed']) ? true : $inst->force_configure_app('squid', ($install_mode == 'expert'));
        if($force) {
            swriteln('Configuring Squid');
            $inst->configure_squid();
            $conf['services']['proxy'] = true;
            if($conf['squid']['init_script'] != '' && is_executable($conf['init_scripts'].'/'.$conf['squid']['init_script']))system($conf['init_scripts'].'/'.$conf['squid']['init_script'].' restart &> /dev/null');
        }
*/
    }
    //* Configure nginx
    if($conf['nginx']['installed']){
        swriteln('Configuring nginx');
        $inst->configure_nginx();
        $conf['services']['web'] = true;
    }
}
    //* Configure XMPP
    $force = @($conf['xmpp']['installed']) ? true : $inst->force_configure_app('Metronome XMPP Server', false);
    if($force) {
        swriteln('Configuring Metronome XMPP Server');
        $inst->configure_xmpp();
        $conf['services']['xmpp'] = true;
    }
//* Configure OpenVZ
$force = @($conf['openvz']['installed']) ? true : $inst->force_configure_app('OpenVZ', ($install_mode == 'expert'));
if($force) {
    $conf['services']['vserver'] = true;
    swriteln('Configuring OpenVZ');
}
if($install_mode == 'standard' || strtolower($inst->simple_query('Configure Firewall Server', array('y', 'n'), 'y','configure_firewall')) == 'y') {
    //* Check for Firewall
    if(!$conf['ufw']['installed'] && !$conf['firewall']['installed']) {
        $conf['ufw']['installed'] = $inst->force_configure_app('Ubuntu Firewall', false);
        $conf['firewall']['installed'] = $inst->force_configure_app('Bastille Firewall', false);
        $conf['ufw']['installed'] = $inst->force_configure_app('Ubuntu Firewall', ($install_mode == 'expert'));
        $conf['firewall']['installed'] = $inst->force_configure_app('Bastille Firewall', ($install_mode == 'expert'));
    }
    //* Configure Firewall - Ubuntu or Bastille
    if($conf['ufw']['installed'] && $conf['firewall']['installed']) {
@@ -456,29 +502,49 @@
        $conf['services']['firewall'] = true;
        $conf['bastille']['installed'] = true;
    }
}
    //* Configure Fail2ban
    $force = @($conf['fail2ban']['installed']) ? true : $inst->force_configure_app('Fail2ban', false);
    if($force) {
        swriteln('Configuring Fail2ban');
        $inst->configure_fail2ban();
    }
//* Configure XMPP
$force = @($conf['xmpp']['installed']) ? true : $inst->force_configure_app('Metronome XMPP Server', ($install_mode == 'expert'));
if($force) {
    swriteln('Configuring Metronome XMPP Server');
    $inst->configure_xmpp();
    $conf['services']['xmpp'] = true;
}
    //* Configure OpenVZ
    $force = @($conf['openvz']['installed']) ? true : $inst->force_configure_app('OpenVZ', false);
    if($force) {
        $conf['services']['vserver'] = true;
        swriteln('Configuring OpenVZ');
    }
//* Configure Fail2ban
$force = @($conf['fail2ban']['installed']) ? true : $inst->force_configure_app('Fail2ban', ($install_mode == 'expert'));
if($force) {
    swriteln('Configuring Fail2ban');
    $inst->configure_fail2ban();
}
if($conf['services']['web'] == true) {
    //** Configure apps vhost
    swriteln('Configuring Apps vhost');
    $inst->configure_apps_vhost();
}
    //* Configure ISPConfig
//** Configure ISPConfig :-)
$install_ispconfig_interface_default = ($conf['mysql']['master_slave_setup'] == 'y')?'n':'y';
if($install_mode == 'standard' || strtolower($inst->simple_query('Install ISPConfig Web Interface', array('y', 'n'), $install_ispconfig_interface_default,'install_ispconfig_web_interface')) == 'y') {
    swriteln('Installing ISPConfig');
    //** Customize the port ISPConfig runs on
    //** We want to check if the server is a module or cgi based php enabled server
    //** TODO: Don't always ask for this somehow ?
    /*
    $fast_cgi = $inst->simple_query('CGI PHP Enabled Server?', array('yes','no'),'no');
    if($fast_cgi == 'yes') {
        $alias = $inst->free_query('Script Alias', '/php/');
        $path = $inst->free_query('Script Alias Path', '/path/to/cgi/bin');
        $conf['apache']['vhost_cgi_alias'] = sprintf('ScriptAlias %s %s', $alias, $path);
    } else {
        $conf['apache']['vhost_cgi_alias'] = "";
    }
    */
    //** Customise the port ISPConfig runs on
    $ispconfig_vhost_port = $inst->free_query('ISPConfig Port', '8080','ispconfig_port');
    $conf['interface_password'] = $inst->free_query('Admin password', 'admin');
    if($conf['interface_password'] != 'admin') {
@@ -499,398 +565,58 @@
    if(strtolower($inst->simple_query('Do you want a secure (SSL) connection to the ISPConfig web interface', array('y', 'n'), 'y','ispconfig_use_ssl')) == 'y') {     
        $inst->make_ispconfig_ssl_cert();
    }
    $inst->install_ispconfig_interface = true;
    $inst->install_ispconfig();
} else {
    $inst->install_ispconfig_interface = false;
}
    //* Configure DBServer
    swriteln('Configuring DBServer');
    $inst->configure_dbserver();
$inst->install_ispconfig();
    //* Configure ISPConfig
    if($conf['cron']['installed']) {
        swriteln('Installing ISPConfig crontab');
        $inst->install_crontab();
    } else swriteln('[ERROR] Cron not found');
//* Configure DBServer
swriteln('Configuring DBServer');
$inst->configure_dbserver();
    swriteln('Detect IP addresses');
    $inst->detect_ips();
    swriteln('Restarting services ...');
    if($conf['mysql']['installed'] == true && $conf['mysql']['init_script'] != '') system($inst->getinitcommand($conf['mysql']['init_script'], 'restart').' >/dev/null 2>&1');
    if($conf['postfix']['installed'] == true && $conf['postfix']['init_script'] != '') system($inst->getinitcommand($conf['postfix']['init_script'], 'restart'));
    if($conf['saslauthd']['installed'] == true && $conf['saslauthd']['init_script'] != '') system($inst->getinitcommand($conf['saslauthd']['init_script'], 'restart'));
    if($conf['amavis']['installed'] == true && $conf['amavis']['init_script'] != '') system($inst->getinitcommand($conf['amavis']['init_script'], 'restart'));
    if($conf['clamav']['installed'] == true && $conf['clamav']['init_script'] != '') system($inst->getinitcommand($conf['clamav']['init_script'], 'restart'));
    if($conf['courier']['installed'] == true){
        if($conf['courier']['courier-authdaemon'] != '') system($inst->getinitcommand($conf['courier']['courier-authdaemon'], 'restart'));
        if($conf['courier']['courier-imap'] != '') system($inst->getinitcommand($conf['courier']['courier-imap'], 'restart'));
        if($conf['courier']['courier-imap-ssl'] != '') system($inst->getinitcommand($conf['courier']['courier-imap-ssl'], 'restart'));
        if($conf['courier']['courier-pop'] != '') system($inst->getinitcommand($conf['courier']['courier-pop'], 'restart'));
        if($conf['courier']['courier-pop-ssl'] != '') system($inst->getinitcommand($conf['courier']['courier-pop-ssl'], 'restart'));
    }
    if($conf['dovecot']['installed'] == true && $conf['dovecot']['init_script'] != '') system($inst->getinitcommand($conf['dovecot']['init_script'], 'restart'));
    if($conf['mailman']['installed'] == true && $conf['mailman']['init_script'] != '') system('nohup '.$inst->getinitcommand($conf['mailman']['init_script'], 'restart').' >/dev/null 2>&1 &');
    if($conf['apache']['installed'] == true && $conf['apache']['init_script'] != '') system($inst->getinitcommand($conf['apache']['init_script'], 'restart'));
    //* Reload is enough for nginx
    if($conf['nginx']['installed'] == true){
        if($conf['nginx']['php_fpm_init_script'] != '') system($inst->getinitcommand($conf['nginx']['php_fpm_init_script'], 'reload'));
        if($conf['nginx']['init_script'] != '') system($inst->getinitcommand($conf['nginx']['init_script'], 'reload'));
    }
    if($conf['pureftpd']['installed'] == true && $conf['pureftpd']['init_script'] != '') system($inst->getinitcommand($conf['pureftpd']['init_script'], 'restart'));
    if($conf['mydns']['installed'] == true && $conf['mydns']['init_script'] != '') system($inst->getinitcommand($conf['mydns']['init_script'], 'restart').' &> /dev/null');
    if($conf['powerdns']['installed'] == true && $conf['powerdns']['init_script'] != '') system($inst->getinitcommand($conf['powerdns']['init_script'], 'restart').' &> /dev/null');
    if($conf['bind']['installed'] == true && $conf['bind']['init_script'] != '') system($inst->getinitcommand($conf['bind']['init_script'], 'restart').' &> /dev/null');
    //if($conf['squid']['installed'] == true && $conf['squid']['init_script'] != '' && is_file($conf['init_scripts'].'/'.$conf['squid']['init_script']))     system($conf['init_scripts'].'/'.$conf['squid']['init_script'].' restart &> /dev/null');
    if($conf['nginx']['installed'] == true && $conf['nginx']['init_script'] != '') system($inst->getinitcommand($conf['nginx']['init_script'], 'restart').' &> /dev/null');
    if($conf['ufw']['installed'] == true && $conf['ufw']['init_script'] != '') system($inst->getinitcommand($conf['ufw']['init_script'], 'restart').' &> /dev/null');
    if($conf['xmpp']['installed'] == true && $conf['xmpp']['init_script'] != '') system($inst->getinitcommand($conf['xmpp']['init_script'], 'restart').' &> /dev/null');
} else { //* expert mode
    //** Get Server ID
    // $conf['server_id'] = $inst->free_query('Unique Numeric ID of the server','1');
    // Server ID is an autoInc value of the mysql database now
    if(strtolower($inst->simple_query('Shall this server join an existing ISPConfig multiserver setup', array('y', 'n'), 'n','join_multiserver_setup')) == 'y') {
        $conf['mysql']['master_slave_setup'] = 'y';
        //** Get MySQL root credentials
        $finished = false;
        do {
            $tmp_mysql_server_host = $inst->free_query('MySQL master server hostname', $conf['mysql']['master_host'],'mysql_master_hostname');
            $tmp_mysql_server_port = $inst->free_query('MySQL master server port', $conf['mysql']['master_port'],'mysql_master_port');
            $tmp_mysql_server_admin_user = $inst->free_query('MySQL master server root username', $conf['mysql']['master_admin_user'],'mysql_master_root_user');
            $tmp_mysql_server_admin_password = $inst->free_query('MySQL master server root password', $conf['mysql']['master_admin_password'],'mysql_master_root_password');
            $tmp_mysql_server_database = $inst->free_query('MySQL master server database name', $conf['mysql']['master_database'],'mysql_master_database');
            //* Initialize the MySQL server connection
            if(@mysqli_connect($tmp_mysql_server_host, $tmp_mysql_server_admin_user, $tmp_mysql_server_admin_password, $tmp_mysql_server_database, (int)$tmp_mysql_server_port)) {
                $conf['mysql']['master_host'] = $tmp_mysql_server_host;
                $conf['mysql']['master_port'] = $tmp_mysql_server_port;
                $conf['mysql']['master_admin_user'] = $tmp_mysql_server_admin_user;
                $conf['mysql']['master_admin_password'] = $tmp_mysql_server_admin_password;
                $conf['mysql']['master_database'] = $tmp_mysql_server_database;
                $finished = true;
            } else {
                swriteln($inst->lng('Unable to connect to mysql server').' '.mysqli_connect_error());
            }
        } while ($finished == false);
        unset($finished);
        // initialize the connection to the master database
        $inst->dbmaster = new db();
        if($inst->dbmaster->linkId) $inst->dbmaster->closeConn();
        $inst->dbmaster->setDBData($conf['mysql']["master_host"], $conf['mysql']["master_admin_user"], $conf['mysql']["master_admin_password"]);
        $inst->dbmaster->setDBName($conf['mysql']["master_database"]);
    } else {
        // the master DB is the same then the slave DB
        $inst->dbmaster = $inst->db;
    }
    //* Create the mysql database
    $inst->configure_database();
    //* Check for Web-Server
    if($conf['apache']['installed'] != true && $conf['nginx']['installed'] != true) {
        $conf['apache']['installed'] = $inst->force_configure_app('Apache');
        $conf['nginx']['installed'] = $inst->force_configure_app('nginx');
    }
    //* Configure Webserver - Apache or nginx
    if($conf['apache']['installed'] == true && $conf['nginx']['installed'] == true) {
        $http_server_to_use = $inst->simple_query('Apache and nginx detected. Select server to use for ISPConfig:', array('apache', 'nginx'), 'apache','http_server');
        if($http_server_to_use == 'apache'){
            $conf['nginx']['installed'] = false;
            $conf['services']['file'] = true;
        } else {
            $conf['apache']['installed'] = false;
        }
    }
    //* Insert the Server record into the database
    swriteln('Adding ISPConfig server record to database.');
    swriteln('');
    $inst->add_database_server_record();
    if(strtolower($inst->simple_query('Configure Mail', array('y', 'n') , 'y','configure_mail') ) == 'y') {
        $conf['services']['mail'] = true;
        //* Configure Postgrey
        $force = @($conf['postgrey']['installed']) ? true : $inst->force_configure_app('Postgrey');
        if($force) swriteln('Configuring Postgrey');
        //* Configure Postfix
        $force = @($conf['postfix']['installed']) ? true : $inst->force_configure_app('Postfix');
        if($force) {
            swriteln('Configuring Postfix');
            $inst->configure_postfix();
        }
        //* Configure Mailman
        $force = @($conf['mailman']['installed']) ? true : $inst->force_configure_app('Mailman');
        if($force) {
            swriteln('Configuring Mailman');
            $inst->configure_mailman();
        }
        //* Check for Dovecot and Courier
        if(!$conf['dovecot']['installed'] && !$conf['courier']['installed']) {
            $conf['dovecot']['installed'] = $inst->force_configure_app('Dovecot');
            $conf['courier']['installed'] = $inst->force_configure_app('Courier');
        }
        //* Configure Mailserver - Dovecot or Courier
        if($conf['dovecot']['installed'] && $conf['courier']['installed']) {
            $mail_server_to_use = $inst->simple_query('Dovecot and Courier detected. Select server to use with ISPConfig:', array('dovecot', 'courier'), 'dovecot','mail_server');
            if($mail_server_to_use == 'dovecot'){
                $conf['courier']['installed'] = false;
            } else {
                $conf['dovecot']['installed'] = false;
            }
        }
        //* Configure Dovecot
        if($conf['dovecot']['installed']) {
            swriteln('Configuring Dovecot');
            $inst->configure_dovecot();
        }
        //* Configure Courier
        if($conf['courier']['installed']) {
            swriteln('Configuring Courier');
            $inst->configure_courier();
            swriteln('Configuring SASL');
            $inst->configure_saslauthd();
            swriteln('Configuring PAM');
            $inst->configure_pam();
        }
        //* Configure Spamasassin
        $force = @($conf['spamassassin']['installed']) ? true : $inst->force_configure_app('Spamassassin');
        if($force) {
            swriteln('Configuring Spamassassin');
            $inst->configure_spamassassin();
        }
        //* Configure Amavis
        $force = @($conf['amavis']['installed']) ? true : $inst->force_configure_app('Amavisd');
        if($force) {
            swriteln('Configuring Amavisd');
            $inst->configure_amavis();
        }
        //* Configure Getmail
        $force = @($conf['getmail']['installed']) ? true : $inst->force_configure_app('Getmail');
        if($force) {
            swriteln('Configuring Getmail');
            $inst->configure_getmail();
        }
        if($conf['postfix']['installed'] == true && $conf['postfix']['init_script'] != '') system($inst->getinitcommand($conf['postfix']['init_script'], 'restart'));
        if($conf['saslauthd']['installed'] == true && $conf['saslauthd']['init_script'] != '') system($inst->getinitcommand($conf['saslauthd']['init_script'], 'restart'));
        if($conf['amavis']['installed'] == true && $conf['amavis']['init_script'] != '') system($inst->getinitcommand($conf['amavis']['init_script'], 'restart'));
        if($conf['clamav']['installed'] == true && $conf['clamav']['init_script'] != '') system($inst->getinitcommand($conf['clamav']['init_script'], 'restart'));
        if($conf['courier']['installed'] == true){
            if($conf['courier']['courier-authdaemon'] != '') system($inst->getinitcommand($conf['courier']['courier-authdaemon'], 'restart'));
            if($conf['courier']['courier-imap'] != '') system($inst->getinitcommand($conf['courier']['courier-imap'], 'restart'));
            if($conf['courier']['courier-imap-ssl'] != '') system($inst->getinitcommand($conf['courier']['courier-imap-ssl'], 'restart'));
            if($conf['courier']['courier-pop'] != '') system($inst->getinitcommand($conf['courier']['courier-pop'], 'restart'));
            if($conf['courier']['courier-pop-ssl'] != '') system($inst->getinitcommand($conf['courier']['courier-pop-ssl'], 'restart'));
        }
        if($conf['dovecot']['installed'] == true && $conf['dovecot']['init_script'] != '') system($inst->getinitcommand($conf['dovecot']['init_script'], 'restart'));
        if($conf['mailman']['installed'] == true && $conf['mailman']['init_script'] != '') system('nohup '.$inst->getinitcommand($conf['mailman']['init_script'], 'restart').' >/dev/null 2>&1 &');
    }
    //* Configure Jailkit
    $force = @($conf['jailkit']['installed']) ? true : $inst->force_configure_app('Jailkit');
    if($force) {
        swriteln('Configuring Jailkit');
        $inst->configure_jailkit();
    }
    //* Configure Pureftpd
    $force = @($conf['pureftpd']['installed']) ? true : $inst->force_configure_app('pureftpd');
    if($force) {
        swriteln('Configuring Pureftpd');
        $inst->configure_pureftpd();
    }
    //** Configure DNS
    if(strtolower($inst->simple_query('Configure DNS Server', array('y', 'n'), 'y','configure_dns')) == 'y') {
        $conf['services']['dns'] = true;
        //* Check for DNS
        if(!$conf['powerdns']['installed'] && !$conf['bind']['installed'] && !$conf['mydns']['installed']) {
            $conf['powerdns']['installed'] = $inst->force_configure_app('PowerDNS');
            $conf['bind']['installed'] = $inst->force_configure_app('BIND');
            $conf['mydns']['installed'] = $inst->force_configure_app('MyDNS');
        }
        //* Configure PowerDNS
        if($conf['powerdns']['installed']) {
            swriteln('Configuring PowerDNS');
            $inst->configure_powerdns();
            $conf['services']['dns'] = true;
        }
        //* Configure Bind
        if($conf['bind']['installed']) {
            swriteln('Configuring BIND');
            $inst->configure_bind();
            $conf['services']['dns'] = true;
            if(!is_installed('haveged')) {
                swriteln("[INFO] haveged not detected - DNSSEC can fail");
            }
        }
        //* Configure MyDNS
        if($conf['mydns']['installed']) {
            swriteln('Configuring MyDNS');
            $inst->configure_mydns();
            $conf['services']['dns'] = true;
        }
    }
    if(strtolower($inst->simple_query('Configure Web Server', array('y', 'n'), 'y','configure_webserver')) == 'y') {
        $conf['services']['web'] = true;
        //* Configure Apache
        if($conf['apache']['installed']){
            swriteln('Configuring Apache');
            $inst->configure_apache();
            $conf['services']['file'] = true;
            //* Configure Vlogger
            $force = @($conf['vlogger']['installed']) ? true : $inst->force_configure_app('vlogger');
            if($force) {
                swriteln('Configuring vlogger');
                $inst->configure_vlogger();
            }
            //* Configure squid
/*
            $force = @($conf['squid']['installed']) ? true : $inst->force_configure_app('squid');
            if($force) {
                swriteln('Configuring Squid');
                $inst->configure_squid();
                $conf['services']['proxy'] = true;
                if($conf['squid']['init_script'] != '' && is_executable($conf['init_scripts'].'/'.$conf['squid']['init_script']))system($conf['init_scripts'].'/'.$conf['squid']['init_script'].' restart &> /dev/null');
            }
*/
        }
        //* Configure nginx
        if($conf['nginx']['installed']){
            swriteln('Configuring nginx');
            $inst->configure_nginx();
        }
    }
    //* Configure OpenVZ
    $force = @($conf['openvz']['installed']) ? true : $inst->force_configure_app('OpenVZ');
    if($force) {
        $conf['services']['vserver'] = true;
        swriteln('Configuring OpenVZ');
    }
    if(strtolower($inst->simple_query('Configure Firewall Server', array('y', 'n'), 'y','configure_firewall')) == 'y') {
        //* Check for Firewall
        if(!$conf['ufw']['installed'] && !$conf['firewall']['installed']) {
            $conf['ufw']['installed'] = $inst->force_configure_app('Ubuntu Firewall');
            $conf['firewall']['installed'] = $inst->force_configure_app('Bastille Firewall');
        }
        //* Configure Firewall - Ubuntu or Bastille
        if($conf['ufw']['installed'] && $conf['firewall']['installed']) {
            $firewall_to_use = $inst->simple_query('Ubuntu and Bastille Firewall detected. Select firewall to use with ISPConfig:', array('bastille', 'ubuntu'), 'bastille','firewall_server');
            if($firewall_to_use == 'bastille'){
                $conf['ufw']['installed'] = false;
            } else {
                $conf['firewall']['installed'] = false;
            }
        }
        //* Configure Ubuntu Firewall
        if($conf['ufw']['installed']){
            swriteln('Configuring Ubuntu Firewall');
            $inst->configure_ufw_firewall();
            $conf['services']['firewall'] = true;
        }
        //* Configure Bastille Firewall
        if($conf['firewall']['installed']){
            swriteln('Configuring Bastille Firewall');
            $inst->configure_bastille_firewall();
            $conf['services']['firewall'] = true;
        }
    }
    //* Configure XMPP
    $force = @($conf['xmpp']['installed']) ? true : $inst->force_configure_app('Metronome XMPP Server');
    if($force) {
        swriteln('Configuring Metronome XMPP Server');
        $inst->configure_xmpp();
        $conf['services']['xmpp'] = true;
    }
    //** Configure ISPConfig :-)
    $install_ispconfig_interface_default = ($conf['mysql']['master_slave_setup'] == 'y')?'n':'y';
    if(strtolower($inst->simple_query('Install ISPConfig Web Interface', array('y', 'n'), $install_ispconfig_interface_default,'install_ispconfig_web_interface')) == 'y') {
        swriteln('Installing ISPConfig');
        //** We want to check if the server is a module or cgi based php enabled server
        //** TODO: Don't always ask for this somehow ?
        /*
        $fast_cgi = $inst->simple_query('CGI PHP Enabled Server?', array('yes','no'),'no');
        if($fast_cgi == 'yes') {
             $alias = $inst->free_query('Script Alias', '/php/');
             $path = $inst->free_query('Script Alias Path', '/path/to/cgi/bin');
             $conf['apache']['vhost_cgi_alias'] = sprintf('ScriptAlias %s %s', $alias, $path);
        } else {
             $conf['apache']['vhost_cgi_alias'] = "";
        }
        */
        //** Customise the port ISPConfig runs on
        $ispconfig_vhost_port = $inst->free_query('ISPConfig Port', '8080','ispconfig_port');
        $conf['interface_password'] = $inst->free_query('Admin password', 'admin');
        if($conf['interface_password'] != 'admin') {
            $check = false;
            do {
                unset($temp_password);
                $temp_password = $inst->free_query('Re-enter admin password', '');
                $check = @($temp_password == $conf['interface_password'])?true:false;
                if(!$check) swriteln('Passwords do not match.');
            } while (!$check);
        }
        unset($check);
        unset($temp_password);
        if($conf['apache']['installed'] == true) $conf['apache']['vhost_port']  = $ispconfig_vhost_port;
        if($conf['nginx']['installed'] == true) $conf['nginx']['vhost_port']  = $ispconfig_vhost_port;
        unset($ispconfig_vhost_port);
        if(strtolower($inst->simple_query('Enable SSL for the ISPConfig web interface', array('y', 'n'), 'y','ispconfig_use_ssl')) == 'y') {
            $inst->make_ispconfig_ssl_cert();
        }
        $inst->install_ispconfig_interface = true;
    } else {
        $inst->install_ispconfig_interface = false;
    }
    $inst->install_ispconfig();
    //* Configure DBServer
    swriteln('Configuring DBServer');
    $inst->configure_dbserver();
    //* Configure ISPConfig
//* Configure ISPConfig
swriteln('Installing ISPConfig crontab');
if($conf['cron']['installed']) {
    swriteln('Installing ISPConfig crontab');
    $inst->install_crontab();
    if($conf['apache']['installed'] == true && $conf['apache']['init_script'] != '') system($inst->getinitcommand($conf['apache']['init_script'], 'restart'));
    //* Reload is enough for nginx
    if($conf['nginx']['installed'] == true){
        if($conf['nginx']['php_fpm_init_script'] != '') system($inst->getinitcommand($conf['nginx']['php_fpm_init_script'], 'reload'));
        if($conf['nginx']['init_script'] != '') system($inst->getinitcommand($conf['nginx']['init_script'], 'reload'));
    }
    swriteln('Detect IP addresses');
    $inst->detect_ips();
} else swriteln('[ERROR] Cron not found');
swriteln('Detect IP addresses');
$inst->detect_ips();
swriteln('Restarting services ...');
if($conf['mysql']['installed'] == true && $conf['mysql']['init_script'] != '') system($inst->getinitcommand($conf['mysql']['init_script'], 'restart').' >/dev/null 2>&1');
if($conf['postfix']['installed'] == true && $conf['postfix']['init_script'] != '') system($inst->getinitcommand($conf['postfix']['init_script'], 'restart'));
if($conf['saslauthd']['installed'] == true && $conf['saslauthd']['init_script'] != '') system($inst->getinitcommand($conf['saslauthd']['init_script'], 'restart'));
if($conf['amavis']['installed'] == true && $conf['amavis']['init_script'] != '') system($inst->getinitcommand($conf['amavis']['init_script'], 'restart'));
if($conf['clamav']['installed'] == true && $conf['clamav']['init_script'] != '') system($inst->getinitcommand($conf['clamav']['init_script'], 'restart'));
if($conf['courier']['installed'] == true){
    if($conf['courier']['courier-authdaemon'] != '') system($inst->getinitcommand($conf['courier']['courier-authdaemon'], 'restart'));
    if($conf['courier']['courier-imap'] != '') system($inst->getinitcommand($conf['courier']['courier-imap'], 'restart'));
    if($conf['courier']['courier-imap-ssl'] != '') system($inst->getinitcommand($conf['courier']['courier-imap-ssl'], 'restart'));
    if($conf['courier']['courier-pop'] != '') system($inst->getinitcommand($conf['courier']['courier-pop'], 'restart'));
    if($conf['courier']['courier-pop-ssl'] != '') system($inst->getinitcommand($conf['courier']['courier-pop-ssl'], 'restart'));
}
if($conf['dovecot']['installed'] == true && $conf['dovecot']['init_script'] != '') system($inst->getinitcommand($conf['dovecot']['init_script'], 'restart'));
if($conf['mailman']['installed'] == true && $conf['mailman']['init_script'] != '') system('nohup '.$inst->getinitcommand($conf['mailman']['init_script'], 'restart').' >/dev/null 2>&1 &');
if($conf['apache']['installed'] == true && $conf['apache']['init_script'] != '') system($inst->getinitcommand($conf['apache']['init_script'], 'restart'));
//* Reload is enough for nginx
if($conf['nginx']['installed'] == true){
    if($conf['nginx']['php_fpm_init_script'] != '') system($inst->getinitcommand($conf['nginx']['php_fpm_init_script'], 'reload'));
    if($conf['nginx']['init_script'] != '') system($inst->getinitcommand($conf['nginx']['init_script'], 'reload'));
}
if($conf['pureftpd']['installed'] == true && $conf['pureftpd']['init_script'] != '') system($inst->getinitcommand($conf['pureftpd']['init_script'], 'restart'));
if($conf['mydns']['installed'] == true && $conf['mydns']['init_script'] != '') system($inst->getinitcommand($conf['mydns']['init_script'], 'restart').' &> /dev/null');
if($conf['powerdns']['installed'] == true && $conf['powerdns']['init_script'] != '') system($inst->getinitcommand($conf['powerdns']['init_script'], 'restart').' &> /dev/null');
if($conf['bind']['installed'] == true && $conf['bind']['init_script'] != '') system($inst->getinitcommand($conf['bind']['init_script'], 'restart').' &> /dev/null');
//if($conf['squid']['installed'] == true && $conf['squid']['init_script'] != '' && is_file($conf['init_scripts'].'/'.$conf['squid']['init_script']))     system($conf['init_scripts'].'/'.$conf['squid']['init_script'].' restart &> /dev/null');
if($conf['nginx']['installed'] == true && $conf['nginx']['init_script'] != '') system($inst->getinitcommand($conf['nginx']['init_script'], 'restart').' &> /dev/null');
if($conf['ufw']['installed'] == true && $conf['ufw']['init_script'] != '') system($inst->getinitcommand($conf['ufw']['init_script'], 'restart').' &> /dev/null');
if($conf['xmpp']['installed'] == true && $conf['xmpp']['init_script'] != '') system($inst->getinitcommand($conf['xmpp']['init_script'], 'restart').' &> /dev/null');
} //* << $install_mode / 'Standard' or Genius
$inst->create_mount_script();
install/lib/install.lib.php
@@ -27,29 +27,6 @@
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/*
    This function returns a string that describes the installed
    Linux distribution. e.g. debian40 for Debian GNU/Linux 4.0
*/
/*
Comments to completion forever ;-)
commandline arguments
$argv[1]
<?
echo "Total argument passed are : $argc \n";
for( $i = 0 ; $i <= $argc -1 ;$i++)
{
echo "Argument $i : $argv[$i] \n";
}
?>
*/
error_reporting(E_ALL|E_STRICT);
@@ -59,6 +36,10 @@
//** IMPORTANT!
//   This is the same code as in server/lib/classes/monitor_tools.inc.php
//   So if you change it here, you also have to change it in there!
//
//    This function returns a string that describes the installed
//    Linux distribution. e.g. debian40 for Debian GNU/Linux 4.0
function get_distname() {
    $distname = '';
@@ -68,27 +49,52 @@
    //** Debian or Ubuntu
    if(file_exists('/etc/debian_version')) {
        if (strstr(trim(file_get_contents('/etc/issue')), 'Ubuntu')) {
            if (strstr(trim(file_get_contents('/etc/issue')), 'LTS')) {
                $lts=" LTS";
            } else {
                $lts="";
            }
        // Check if this is Ubuntu and not Debian
        if (strstr(trim(file_get_contents('/etc/issue')), 'Ubuntu') || (is_file('/etc/os-release') && stristr(file_get_contents('/etc/os-release'), 'Ubuntu'))) {
            $issue = file_get_contents('/etc/issue');
            // Use content of /etc/issue file
            if(strstr($issue,'Ubuntu')) {
                if (strstr(trim($issue), 'LTS')) {
                    $lts=" LTS";
                } else {
                    $lts="";
                }
            $issue=file_get_contents('/etc/issue');
            $distname = 'Ubuntu';
            $distid = 'debian40';
            $distbaseid = 'debian';
            $ver = explode(' ', $issue);
            $ver = array_filter($ver);
            $ver = next($ver);
            $mainver = explode('.', $ver);
            $mainver = array_filter($mainver);
            $mainver = current($mainver).'.'.next($mainver);
                $distname = 'Ubuntu';
                $distid = 'debian40';
                $distbaseid = 'debian';
                $ver = explode(' ', $issue);
                $ver = array_filter($ver);
                $ver = next($ver);
                $mainver = explode('.', $ver);
                $mainver = array_filter($mainver);
                $mainver = current($mainver).'.'.next($mainver);
            // Use content of /etc/os-release file
            } else {
                $os_release = file_get_contents('/etc/os-release');
                if (strstr(trim($os_release), 'LTS')) {
                    $lts = " LTS";
                } else {
                    $lts = "";
                }
                $distname = 'Ubuntu';
                $distid = 'debian40';
                $distbaseid = 'debian';
                preg_match("/.*VERSION=\"(.*)\".*/ui", $os_release, $ver);
                $ver = str_replace("LTS", "", $ver[1]);
                $ver = explode(" ", $ver, 2);
                $ver = reset($ver);
                $mainver = $ver;
            }
            switch ($mainver){
            case "16.04":
                $relname = "(Xenial Xerus)";
                $distid = 'ubuntu1604';
                $distconfid = 'ubuntu1604';
                break;
            case "15.10":
                $relname = "(Wily Werewolf)";
@@ -163,7 +169,7 @@
                $relname = "UNKNOWN";
            }
            $distver = $ver.$lts." ".$relname;
            swriteln("Operating System: ".$distver."\n");
            swriteln("Operating System: ".$distname.' '.$distver."\n");
        } elseif(trim(file_get_contents('/etc/debian_version')) == '4.0') {
            $distname = 'Debian';
            $distver = '4.0';
@@ -194,6 +200,13 @@
            $distid = 'debian60';
            $distbaseid = 'debian';
            swriteln("Operating System: Debian 8.0 (Jessie) or compatible\n");
        } elseif(strstr(trim(file_get_contents('/etc/debian_version')), '/sid')) {
            $distname = 'Debian';
            $distver = 'Testing';
            $distid = 'debian60';
            $distconfid = 'debiantesting';
            $distbaseid = 'debian';
            swriteln("Operating System: Debian Testing\n");
        } else {
            $distname = 'Debian';
            $distver = 'Unknown';
@@ -280,6 +293,13 @@
            $distid = 'centos53';
            $distbaseid = 'fedora';
            swriteln("Operating System: CentOS 6 or compatible\n");
        } elseif(stristr($content, 'CentOS Linux release 7.2')) {
            $distname = 'CentOS';
            $distver = 'Unknown';
            $distid = 'centos72';
            $distconfid = 'centos72';
            $distbaseid = 'fedora';
            swriteln("Operating System: CentOS 7.2\n");
        } elseif(stristr($content, 'CentOS Linux release 7')) {
            $distname = 'CentOS';
            $distver = 'Unknown';
@@ -310,8 +330,11 @@
    } else {
        die('Unrecognized GNU/Linux distribution');
    }
    // Set $distconfid to distid, if no different id for the config is defined
    if(!isset($distconfid)) $distconfid = $distid;
    return array('name' => $distname, 'version' => $distver, 'id' => $distid, 'baseid' => $distbaseid);
    return array('name' => $distname, 'version' => $distver, 'id' => $distid, 'confid' => $distconfid, 'baseid' => $distbaseid);
}
function sread() {
install/lib/installer_base.lib.php
@@ -171,14 +171,19 @@
        if(is_installed('named') || is_installed('bind') || is_installed('bind9')) $conf['bind']['installed'] = true;
        if(is_installed('squid')) $conf['squid']['installed'] = true;
        if(is_installed('nginx')) $conf['nginx']['installed'] = true;
        if(is_installed('iptables') && is_installed('ufw')) $conf['ufw']['installed'] = true;
        if(is_installed('iptables') && is_installed('bastille-netfilter')) $conf['firewall']['installed'] = true;
        if(is_installed('iptables') && is_installed('ufw')) {
            $conf['ufw']['installed'] = true;
        } elseif(is_installed('iptables')) {
            $conf['firewall']['installed'] = true;
        }
        if(is_installed('fail2ban-server')) $conf['fail2ban']['installed'] = true;
        if(is_installed('vzctl')) $conf['openvz']['installed'] = true;
        if(is_installed('metronome') && is_installed('metronomectl')) $conf['xmpp']['installed'] = true;
        if(is_installed('spamassassin')) $conf['spamassassin']['installed'] = true;
        if(is_installed('vlogger')) $conf['vlogger']['installed'] = true;
        if(is_installed('cron')) $conf['cron']['installed'] = true;
        // if(is_installed('vlogger')) $conf['vlogger']['installed'] = true;
        // ISPConfig ships with vlogger, so it is always installed.
        $conf['vlogger']['installed'] = true;
        if(is_installed('cron') || is_installed('anacron')) $conf['cron']['installed'] = true;
        if ($conf['services']['web'] && (($conf['apache']['installed'] && is_file($conf['apache']["vhost_conf_enabled_dir"]."/000-ispconfig.vhost")) || ($conf['nginx']['installed'] && is_file($conf['nginx']["vhost_conf_enabled_dir"]."/000-ispconfig.vhost")))) $this->ispconfig_interface_installed = true;
    }
@@ -224,7 +229,7 @@
        if ($check_sql_mode['@@sql_mode'] != '' && $check_sql_mode['@@sql_mode'] != 'NO_ENGINE_SUBSTITUTION') {
            echo "Wrong SQL-mode. You should use NO_ENGINE_SUBSTITUTION. Add\n\n";
            echo "    sql-mode=\"NO_ENGINE_SUBSTITUTION\"\n\n";
            echo"to the mysqld-section in /etc/mysql/my.cnf and restart mysqld afterwards\n";
            echo"to the mysqld-section in your mysql-config and restart mysqld afterwards\n";
            die();
        }
@@ -296,6 +301,7 @@
        $tpl_ini_array['fastcgi']['fastcgi_bin'] = $conf['fastcgi']['fastcgi_bin'];
        $tpl_ini_array['server']['hostname'] = $conf['hostname'];
        $tpl_ini_array['server']['ip_address'] = @gethostbyname($conf['hostname']);
        $tpl_ini_array['server']['firewall'] = ($conf['ufw']['installed'] == true)?'ufw':'bastille';
        $tpl_ini_array['web']['website_basedir'] = $conf['web']['website_basedir'];
        $tpl_ini_array['web']['website_path'] = $conf['web']['website_path'];
        $tpl_ini_array['web']['website_symlinks'] = $conf['web']['website_symlinks'];
@@ -1277,6 +1283,10 @@
        $content = str_replace('{mysql_server_host}', $conf['mysql']['host'], $content);
        $content = str_replace('{mysql_server_port}', $conf['mysql']['port'], $content);
        $content = str_replace('{server_id}', $conf['server_id'], $content);
        # enable iterate_query for dovecot2
        if(version_compare($dovecot_version,2, '>=')) {
            $content = str_replace('# iterate_query', 'iterate_query', $content);
        }
        wf($config_dir.'/'.$configfile, $content);
        chmod($config_dir.'/'.$configfile, 0600);
@@ -1681,7 +1691,7 @@
        if(!@is_dir($conf['ispconfig_log_dir'].'/httpd')) mkdir($conf['ispconfig_log_dir'].'/httpd', 0755, true);
        if(is_file('/etc/suphp/suphp.conf')) {
            replaceLine('/etc/suphp/suphp.conf', 'php=php:/usr/bin', 'x-httpd-suphp="php:/usr/bin/php-cgi"', 0);
            replaceLine('/etc/suphp/suphp.conf', 'php="php:/usr/bin', 'x-httpd-suphp="php:/usr/bin/php-cgi"', 0);
            //replaceLine('/etc/suphp/suphp.conf','docroot=','docroot=/var/clients',0);
            replaceLine('/etc/suphp/suphp.conf', 'umask=0077', 'umask=0022', 0);
        }
install/lib/update.lib.php
@@ -128,7 +128,7 @@
    if ($check_sql_mode['@@sql_mode'] != '' && $check_sql_mode['@@sql_mode'] != 'NO_ENGINE_SUBSTITUTION') {
        echo "Wrong SQL-mode. You should use NO_ENGINE_SUBSTITUTION. Add\n\n";
        echo "    sql-mode=\"NO_ENGINE_SUBSTITUTION\"\n\n";
        echo"to the mysqld-section in /etc/mysql/my.cnf and restart mysqld afterwards\n";
        echo"to the mysqld-section in your mysql-config and restart mysqld afterwards\n";
        die();
    }
install/sql/incremental/upd_0081.sql
@@ -198,7 +198,7 @@
    `traffic_date` date NOT NULL,
    `in_bytes` bigint(32) unsigned NOT NULL,
    `out_bytes` bigint(32) unsigned NOT NULL, 
    PRIMARY KEY (`hostname`,`traffic_date`)
    UNIQUE KEY (`hostname`,`traffic_date`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
ALTER TABLE `mail_forwarding` ADD COLUMN `allow_send_as` ENUM('n','y') NOT NULL DEFAULT 'n' AFTER `active`;
install/sql/incremental/upd_dev_collection.sql
@@ -0,0 +1,15 @@
ALTER TABLE `client` CHANGE `web_servers` `web_servers` TEXT NULL DEFAULT NULL;
ALTER TABLE `client` CHANGE `mail_servers` `mail_servers` TEXT NULL DEFAULT NULL;
ALTER TABLE `client` CHANGE `xmpp_servers` `xmpp_servers` TEXT NULL DEFAULT NULL;
ALTER TABLE `client` CHANGE `db_servers` `db_servers` TEXT NULL DEFAULT NULL;
ALTER TABLE `client` CHANGE `dns_servers` `dns_servers` TEXT NULL DEFAULT NULL;
UPDATE client SET web_servers = default_webserver WHERE (web_servers = '' OR web_servers IS NULL);
UPDATE client SET mail_servers = default_mailserver WHERE (mail_servers = '' OR mail_servers IS NULL);
UPDATE client SET xmpp_servers = default_xmppserver WHERE (xmpp_servers = '' OR xmpp_servers IS NULL);
UPDATE client SET db_servers = default_dbserver WHERE (db_servers = '' OR db_servers IS NULL);
UPDATE client SET dns_servers = default_dnsserver WHERE (dns_servers = '' OR dns_servers IS NULL);
ALTER TABLE `client_template` ADD `default_slave_dnsserver` INT NOT NULL DEFAULT '0' AFTER `limit_dns_slave_zone`;
ALTER TABLE `client_template` ADD `mail_servers` TEXT NULL DEFAULT NULL AFTER `template_type`;
ALTER TABLE `client_template` ADD `web_servers` TEXT NULL DEFAULT NULL AFTER `limit_xmpp_httparchive`;
ALTER TABLE `client_template` ADD `dns_servers` TEXT NULL DEFAULT NULL AFTER `limit_aps`;
ALTER TABLE `client_template` ADD `db_servers` TEXT NULL DEFAULT NULL AFTER `limit_dns_record`;
install/sql/ispconfig3.sql
@@ -170,7 +170,7 @@
  `bank_account_swift` varchar(255) DEFAULT NULL,
  `paypal_email` varchar(255) DEFAULT NULL,
  `default_mailserver` int(11) unsigned NOT NULL DEFAULT '1',
  `mail_servers` blob,
  `mail_servers` text,
  `limit_maildomain` int(11) NOT NULL DEFAULT '-1',
  `limit_mailbox` int(11) NOT NULL DEFAULT '-1',
  `limit_mailalias` int(11) NOT NULL DEFAULT '-1',
@@ -185,7 +185,7 @@
  `limit_spamfilter_user` int(11) NOT NULL DEFAULT '0',
  `limit_spamfilter_policy` int(11) NOT NULL DEFAULT '0',
  `default_xmppserver` int(11) unsigned NOT NULL DEFAULT '1',
  `xmpp_servers` blob,
  `xmpp_servers` text,
  `limit_xmpp_domain` int(11) NOT NULL DEFAULT '-1',
  `limit_xmpp_user` int(11) NOT NULL DEFAULT '-1',
  `limit_xmpp_muc` ENUM( 'n', 'y' ) NOT NULL default 'n',
@@ -197,7 +197,7 @@
  `limit_xmpp_pastebin` ENUM( 'n', 'y' ) NOT NULL default 'n',
  `limit_xmpp_httparchive` ENUM( 'n', 'y' ) NOT NULL default 'n',
  `default_webserver` int(11) unsigned NOT NULL DEFAULT '1',
  `web_servers` blob,
  `web_servers` text,
  `limit_web_ip` text,
  `limit_web_domain` int(11) NOT NULL DEFAULT '-1',
  `limit_web_quota` int(11) NOT NULL DEFAULT '-1',
@@ -222,13 +222,13 @@
  `limit_directive_snippets` ENUM( 'n', 'y' ) NOT NULL DEFAULT 'n',
  `limit_aps` int(11) NOT NULL DEFAULT '-1',
  `default_dnsserver` int(11) unsigned NOT NULL DEFAULT '1',
  `db_servers` blob,
  `db_servers` text,
  `limit_dns_zone` int(11) NOT NULL DEFAULT '-1',
  `default_slave_dnsserver` int(11) unsigned NOT NULL DEFAULT '1',
  `limit_dns_slave_zone` int(11) NOT NULL DEFAULT '-1',
  `limit_dns_record` int(11) NOT NULL DEFAULT '-1',
  `default_dbserver` int(11) NOT NULL DEFAULT '1',
  `dns_servers` blob,
  `dns_servers` text,
  `limit_database` int(11) NOT NULL DEFAULT '-1',
  `limit_database_user` int(11) NOT NULL DEFAULT '-1',
  `limit_database_quota` int(11) NOT NULL default '-1',
@@ -301,6 +301,7 @@
  `sys_perm_other` varchar(5) default NULL,
  `template_name` varchar(64) NOT NULL DEFAULT '',
  `template_type` varchar(1) NOT NULL default 'm',
  `mail_servers` text,
  `limit_maildomain` int(11) NOT NULL default '-1',
  `limit_mailbox` int(11) NOT NULL default '-1',
  `limit_mailalias` int(11) NOT NULL default '-1',
@@ -315,7 +316,7 @@
  `limit_spamfilter_user` int(11) NOT NULL default '0',
  `limit_spamfilter_policy` int(11) NOT NULL default '0',
  `default_xmppserver` int(11) unsigned NOT NULL DEFAULT '1',
  `xmpp_servers` blob,
  `xmpp_servers` text,
  `limit_xmpp_domain` int(11) NOT NULL DEFAULT '-1',
  `limit_xmpp_user` int(11) NOT NULL DEFAULT '-1',
  `limit_xmpp_muc` ENUM( 'n', 'y' ) NOT NULL default 'n',
@@ -325,6 +326,7 @@
  `limit_xmpp_status` ENUM( 'n', 'y' ) NOT NULL default 'n',
  `limit_xmpp_pastebin` ENUM( 'n', 'y' ) NOT NULL default 'n',
  `limit_xmpp_httparchive` ENUM( 'n', 'y' ) NOT NULL default 'n',
  `web_servers` text,
  `limit_web_ip` text,
  `limit_web_domain` int(11) NOT NULL default '-1',
  `limit_web_quota` int(11) NOT NULL default '-1',
@@ -348,9 +350,12 @@
  `limit_backup` ENUM( 'n', 'y' ) NOT NULL DEFAULT 'y',
  `limit_directive_snippets` ENUM( 'n', 'y' ) NOT NULL DEFAULT 'n',
  `limit_aps` int(11) NOT NULL DEFAULT '-1',
  `dns_servers` text,
  `limit_dns_zone` int(11) NOT NULL default '-1',
  `default_slave_dnsserver` int(11) NOT NULL DEFAULT '0',
  `limit_dns_slave_zone` int(11) NOT NULL default '-1',
  `limit_dns_record` int(11) NOT NULL default '-1',
  `db_servers` text,
  `limit_database` int(11) NOT NULL default '-1',
  `limit_database_user` int(11) NOT NULL DEFAULT '-1',
  `limit_database_quota` int(11) NOT NULL default '-1',
@@ -657,7 +662,7 @@
  `traffic_date` date NOT NULL,
  `in_bytes` bigint(32) unsigned NOT NULL,
  `out_bytes` bigint(32) unsigned NOT NULL,
  PRIMARY KEY (`hostname`,`traffic_date`)
  UNIQUE KEY (`hostname`,`traffic_date`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
-- --------------------------------------------------------
@@ -1153,7 +1158,7 @@
  `veid` int(11) NOT NULL DEFAULT '0',
  `traffic_date` date NULL DEFAULT NULL,
  `traffic_bytes` bigint(32) unsigned NOT NULL DEFAULT '0',
  PRIMARY KEY (`veid`,`traffic_date`)
  UNIQUE KEY (`veid`,`traffic_date`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
--
@@ -2043,7 +2048,7 @@
  `hostname` varchar(255) NOT NULL DEFAULT '',
  `traffic_date` date NULL DEFAULT NULL,
  `traffic_bytes` bigint(32) unsigned NOT NULL default '0',
  PRIMARY KEY  (`hostname`,`traffic_date`)
  UNIQUE KEY  (`hostname`,`traffic_date`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;
-- --------------------------------------------------------
@@ -2477,7 +2482,7 @@
-- Dumping data for table `sys_config`
--
INSERT INTO sys_config VALUES ('db','db_version','3.1b1');
INSERT INTO sys_config VALUES ('db','db_version','3.1dev');
INSERT INTO sys_config VALUES ('interface','session_timeout','0');
SET FOREIGN_KEY_CHECKS = 1;
install/tpl/amavisd_user_config.master
@@ -77,9 +77,9 @@
$inet_socket_port = [10024,10026];
# *:* = send to IP/HOST:incoming Port + 1
$forward_method = 'smtp:*:*';
$notify_method = 'smtp:*:*';
# :* = send to incoming Port + 1
$forward_method = 'smtp:127.0.0.1:*';
$notify_method = 'smtp:127.0.0.1:*';
$interface_policy{'10026'} = 'ORIGINATING';
$policy_bank{'ORIGINATING'} = {
  originating => 1,
install/tpl/config.inc.php.master
@@ -56,7 +56,7 @@
//** Application
define('ISPC_APP_TITLE', 'ISPConfig');
define('ISPC_APP_VERSION', '3.1b1');
define('ISPC_APP_VERSION', '3.1dev');
define('DEVSYSTEM', 0);
install/tpl/debian6_dovecot-sql.conf.master
@@ -19,4 +19,4 @@
# The iterate_query is required for the doveadm command only and works only on dovecot 2 servers.
# Do not enable it on Dovecot 1.x servers
# iterate_query = SELECT email as user FROM mail_user
# iterate_query = SELECT email as user FROM mail_user WHERE server_id = '{server_id}'
install/tpl/debian_dovecot-sql.conf.master
@@ -126,5 +126,5 @@
# The iterate_query is required for the doveadm command only and works only on dovecot 2 servers.
# Do not enable it on Dovecot 1.x servers
# iterate_query = SELECT email as user FROM mail_user
# iterate_query = SELECT email as user FROM mail_user WHERE server_id = '{server_id}'
install/tpl/debian_dovecot2.conf.master
@@ -63,3 +63,4 @@
  postmaster_address = webmaster@localhost
  mail_plugins = quota sieve
}
mail_plugins = $mail_plugins quota
install/tpl/debian_postfix.conf.master
@@ -26,7 +26,7 @@
proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $sender_bcc_maps $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $smtpd_sender_login_maps
smtpd_helo_required = yes
smtpd_helo_restrictions = permit_sasl_authenticated, permit_mynetworks, check_helo_access regexp:{config_dir}/helo_access, reject_invalid_hostname, reject_non_fqdn_hostname, check_helo_access regexp:{config_dir}/blacklist_helo
smtpd_sender_restrictions = check_sender_access regexp:{config_dir}/tag_as_originating.re {reject_slm}, permit_mynetworks, check_sender_access mysql:{config_dir}/mysql-virtual_sender.cf, check_sender_access regexp:{config_dir}/tag_as_foreign.re
smtpd_sender_restrictions = check_sender_access regexp:{config_dir}/tag_as_originating.re {reject_slm}, permit_mynetworks, permit_sasl_authenticated, check_sender_access mysql:{config_dir}/mysql-virtual_sender.cf, check_sender_access regexp:{config_dir}/tag_as_foreign.re
smtpd_client_restrictions = check_client_access mysql:{config_dir}/mysql-virtual_client.cf
smtpd_client_message_rate_limit = 100
maildrop_destination_concurrency_limit = 1
install/tpl/fedora_amavisd_conf.master
@@ -146,8 +146,8 @@
$myhostname = '{hostname}';
$notify_method  = 'smtp:[127.0.0.1]:10027';
$forward_method = 'smtp:[127.0.0.1]:10025';  # set to undef with milter!
$notify_method  = 'smtp:127.0.0.1:*';
$forward_method = 'smtp:127.0.0.1:*';  # set to undef with milter!
# $os_fingerprint_method = 'p0f:127.0.0.1:2345';  # to query p0f-analyzer.pl
install/tpl/fedora_dovecot-sql.conf.master
@@ -139,4 +139,4 @@
# The iterate_query is required for the doveadm command only and works only on dovecot 2 servers.
# Do not enable it on Dovecot 1.x servers
# iterate_query = SELECT email as user FROM mail_user
# iterate_query = SELECT email as user FROM mail_user WHERE server_id = '{server_id}'
install/tpl/fedora_dovecot2.conf.master
@@ -61,3 +61,4 @@
  postmaster_address = webmaster@localhost
  mail_plugins = quota sieve
}
mail_plugins = $mail_plugins quota
install/tpl/fedora_postfix.conf.master
@@ -23,7 +23,7 @@
proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $sender_bcc_maps $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $smtpd_sender_login_maps
smtpd_helo_required = yes
smtpd_helo_restrictions = permit_sasl_authenticated, permit_mynetworks, check_helo_access regexp:{config_dir}/helo_access, reject_invalid_hostname, reject_non_fqdn_hostname, check_helo_access regexp:{config_dir}/blacklist_helo
smtpd_sender_restrictions = check_sender_access regexp:{config_dir}/tag_as_originating.re {reject_slm}, permit_mynetworks, check_sender_access mysql:{config_dir}/mysql-virtual_sender.cf, check_sender_access regexp:{config_dir}/tag_as_foreign.re
smtpd_sender_restrictions = check_sender_access regexp:{config_dir}/tag_as_originating.re {reject_slm}, permit_mynetworks, permit_sasl_authenticated, check_sender_access mysql:{config_dir}/mysql-virtual_sender.cf, check_sender_access regexp:{config_dir}/tag_as_foreign.re
smtpd_client_restrictions = check_client_access mysql:{config_dir}/mysql-virtual_client.cf
smtpd_client_message_rate_limit = 100
maildrop_destination_concurrency_limit = 1
install/tpl/gentoo_postfix.conf.master
@@ -22,7 +22,7 @@
proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $smtpd_sender_login_maps
smtpd_helo_required = yes
smtpd_helo_restrictions = permit_sasl_authenticated, permit_mynetworks, check_helo_access regexp:{config_dir}/helo_access, reject_invalid_hostname, reject_non_fqdn_hostname, check_helo_access regexp:{config_dir}/blacklist_helo
smtpd_sender_restrictions = check_sender_access regexp:{config_dir}/tag_as_originating.re {reject_slm}, permit_mynetworks, check_sender_access mysql:{config_dir}/mysql-virtual_sender.cf, check_sender_access regexp:{config_dir}/tag_as_foreign.re
smtpd_sender_restrictions = check_sender_access regexp:{config_dir}/tag_as_originating.re {reject_slm}, permit_mynetworks, permit_sasl_authenticated, check_sender_access mysql:{config_dir}/mysql-virtual_sender.cf, check_sender_access regexp:{config_dir}/tag_as_foreign.re
smtpd_client_restrictions = check_client_access mysql:{config_dir}/mysql-virtual_client.cf
smtpd_client_message_rate_limit = 100
maildrop_destination_concurrency_limit = 1
install/tpl/helo_access.master
@@ -2,7 +2,7 @@
# be sure to list your own hostname(s), domain(s) and IP address(es) here
# Reject others identifying with this machine's hostnames and IP addresses
/^{myhostname}$/  REJECT
#/^{myhostname}$/  REJECT
#/^((smtp|mx|mail)\.domain1\.com$/    REJECT
#/^mail\.domain2\.com$/        REJECT
install/tpl/opensuse_amavisd_conf.master
@@ -145,8 +145,8 @@
$myhostname = 'linux-jfp8.site';
$notify_method  = 'smtp:[127.0.0.1]:10027';
$forward_method = 'smtp:[127.0.0.1]:10025';  # set to undef with milter!
$notify_method  = 'smtp:127.0.0.1:*';
$forward_method = 'smtp:127.0.0.1:*';  # set to undef with milter!
# $final_virus_destiny      = D_DISCARD;
# $final_banned_destiny     = D_BOUNCE;
install/tpl/opensuse_dovecot-sql.conf.master
@@ -139,4 +139,4 @@
# The iterate_query is required for the doveadm command only and works only on dovecot 2 servers.
# Do not enable it on Dovecot 1.x servers
# iterate_query = SELECT email as user FROM mail_user
# iterate_query = SELECT email as user FROM mail_user WHERE server_id = '{server_id}'
install/tpl/opensuse_dovecot2.conf.master
@@ -60,3 +60,4 @@
  postmaster_address = webmaster@localhost
  mail_plugins = quota sieve
}
mail_plugins = $mail_plugins quota
install/tpl/opensuse_postfix.conf.master
@@ -25,7 +25,7 @@
proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $sender_bcc_maps $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $smtpd_sender_login_maps
smtpd_helo_required = yes
smtpd_helo_restrictions = permit_sasl_authenticated, permit_mynetworks, check_helo_access regexp:{config_dir}/helo_access, reject_invalid_hostname, reject_non_fqdn_hostname, check_helo_access regexp:{config_dir}/blacklist_helo
smtpd_sender_restrictions = check_sender_access regexp:{config_dir}/tag_as_originating.re {reject_slm}, permit_mynetworks, check_sender_access mysql:{config_dir}/mysql-virtual_sender.cf, check_sender_access regexp:{config_dir}/tag_as_foreign.re
smtpd_sender_restrictions = check_sender_access regexp:{config_dir}/tag_as_originating.re {reject_slm}, permit_mynetworks, permit_sasl_authenticated, check_sender_access mysql:{config_dir}/mysql-virtual_sender.cf, check_sender_access regexp:{config_dir}/tag_as_foreign.re
smtpd_client_restrictions = check_client_access mysql:{config_dir}/mysql-virtual_client.cf
smtpd_client_message_rate_limit = 100
maildrop_destination_concurrency_limit = 1
install/tpl/pureftpd_mysql.conf.master
@@ -59,12 +59,12 @@
# Query to execute in order to fetch the password
MYSQLGetPW      SELECT password FROM ftp_user WHERE active = 'y' AND server_id = '{server_id}' AND username="\L" AND (expires IS NULL OR expires > NOW())
MYSQLGetPW      SELECT password FROM ftp_user WHERE active = 'y' AND server_id = '{server_id}' AND username="\L" AND (expires IS NULL OR expires="0000-00-00 00:00:00" OR expires > NOW())
# Query to execute in order to fetch the system user name or uid
MYSQLGetUID     SELECT uid FROM ftp_user WHERE active = 'y' AND server_id = '{server_id}' AND username="\L" AND (expires IS NULL OR expires > NOW())
MYSQLGetUID     SELECT uid FROM ftp_user WHERE active = 'y' AND server_id = '{server_id}' AND username="\L" AND (expires IS NULL OR expires="0000-00-00 00:00:00" OR expires > NOW())
# Optional : default UID - if set this overrides MYSQLGetUID
@@ -74,7 +74,7 @@
# Query to execute in order to fetch the system user group or gid
MYSQLGetGID     SELECT gid FROM ftp_user WHERE active = 'y' AND server_id = '{server_id}' AND username="\L" AND (expires IS NULL OR expires > NOW())
MYSQLGetGID     SELECT gid FROM ftp_user WHERE active = 'y' AND server_id = '{server_id}' AND username="\L" AND (expires IS NULL OR expires="0000-00-00 00:00:00" OR expires > NOW())
# Optional : default GID - if set this overrides MYSQLGetGID
@@ -84,34 +84,34 @@
# Query to execute in order to fetch the home directory
MYSQLGetDir     SELECT dir FROM ftp_user WHERE active = 'y' AND server_id = '{server_id}' AND username="\L" AND (expires IS NULL OR expires > NOW())
MYSQLGetDir     SELECT dir FROM ftp_user WHERE active = 'y' AND server_id = '{server_id}' AND username="\L" AND (expires IS NULL OR expires="0000-00-00 00:00:00" OR expires > NOW())
# Optional : query to get the maximal number of files 
# Pure-FTPd must have been compiled with virtual quotas support.
MySQLGetQTAFS  SELECT quota_files FROM ftp_user WHERE active = 'y' AND server_id = '{server_id}' AND quota_files != '-1' AND username="\L" AND (expires IS NULL OR expires > NOW())
MySQLGetQTAFS  SELECT quota_files FROM ftp_user WHERE active = 'y' AND server_id = '{server_id}' AND quota_files != '-1' AND username="\L" AND (expires IS NULL OR expires="0000-00-00 00:00:00" OR expires > NOW())
# Optional : query to get the maximal disk usage (virtual quotas)
# The number should be in Megabytes.
# Pure-FTPd must have been compiled with virtual quotas support.
MySQLGetQTASZ  SELECT quota_size FROM ftp_user WHERE active = 'y' AND server_id = '{server_id}' AND quota_size != '-1' AND username="\L" AND (expires IS NULL OR expires > NOW())
MySQLGetQTASZ  SELECT quota_size FROM ftp_user WHERE active = 'y' AND server_id = '{server_id}' AND quota_size != '-1' AND username="\L" AND (expires IS NULL OR expires="0000-00-00 00:00:00" OR expires > NOW())
# Optional : ratios. The server has to be compiled with ratio support.
MySQLGetRatioUL SELECT ul_ratio FROM ftp_user WHERE active = 'y' AND server_id = '{server_id}' AND ul_ratio != '-1' AND username="\L" AND (expires IS NULL OR expires > NOW())
MySQLGetRatioDL SELECT dl_ratio FROM ftp_user WHERE active = 'y' AND server_id = '{server_id}' AND dl_ratio != '-1' AND username="\L" AND (expires IS NULL OR expires > NOW())
MySQLGetRatioUL SELECT ul_ratio FROM ftp_user WHERE active = 'y' AND server_id = '{server_id}' AND ul_ratio != '-1' AND username="\L" AND (expires IS NULL OR expires="0000-00-00 00:00:00" OR expires > NOW())
MySQLGetRatioDL SELECT dl_ratio FROM ftp_user WHERE active = 'y' AND server_id = '{server_id}' AND dl_ratio != '-1' AND username="\L" AND (expires IS NULL OR expires="0000-00-00 00:00:00" OR expires > NOW())
# Optional : bandwidth throttling.
# The server has to be compiled with throttling support.
# Values are in KB/s .
MySQLGetBandwidthUL SELECT ul_bandwidth FROM ftp_user WHERE active = 'y' AND server_id = '{server_id}' AND ul_bandwidth != '-1' AND username="\L" AND (expires IS NULL OR expires > NOW())
MySQLGetBandwidthDL SELECT dl_bandwidth FROM ftp_user WHERE active = 'y' AND server_id = '{server_id}' AND dl_bandwidth != '-1' AND username="\L" AND (expires IS NULL OR expires > NOW())
MySQLGetBandwidthUL SELECT ul_bandwidth FROM ftp_user WHERE active = 'y' AND server_id = '{server_id}' AND ul_bandwidth != '-1' AND username="\L" AND (expires IS NULL OR expires="0000-00-00 00:00:00" OR expires > NOW())
MySQLGetBandwidthDL SELECT dl_bandwidth FROM ftp_user WHERE active = 'y' AND server_id = '{server_id}' AND dl_bandwidth != '-1' AND username="\L" AND (expires IS NULL OR expires="0000-00-00 00:00:00" OR expires > NOW())
# Enable ~ expansion. NEVER ENABLE THIS BLINDLY UNLESS :
# 1) You know what you are doing.
install/update.php
@@ -137,7 +137,7 @@
//** Include the distribution-specific installer class library and configuration
if(is_file('dist/lib/'.$dist['baseid'].'.lib.php')) include_once 'dist/lib/'.$dist['baseid'].'.lib.php';
include_once 'dist/lib/'.$dist['id'].'.lib.php';
include_once 'dist/conf/'.$dist['id'].'.conf.php';
include_once 'dist/conf/'.$dist['confid'].'.conf.php';
//** Get hostname
exec('hostname -f', $tmp_out);
interface/lib/classes/db_mysql.inc.php
@@ -563,7 +563,7 @@
        }
        
        $query = 'INSERT INTO ?? (' . $k_query . ') VALUES (' . $v_query . ')';
        return $this->query($query, true, $params + $v_params);
        return $this->query($query, true, array_merge($params, $v_params));
    }
    
    public function diffrec($record_old, $record_new) {
interface/lib/classes/functions.inc.php
@@ -190,7 +190,7 @@
            $regex = "/^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/";
        } else {
            // IPv6
            $regex = "/^(\:\:([a-f0-9]{1,4}\:){0,6}?[a-f0-9]{0,4}|[a-f0-9]{1,4}(\:[a-f0-9]{1,4}){0,6}?\:\:|[a-f0-9]{1,4}(\:[a-f0-9]{1,4}){1,6}?\:\:([a-f0-9]{1,4}\:){1,6}?[a-f0-9]{1,4})(\/\d{1,3})?$/i";
            $regex = "/(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))/";
        }
        $server_by_id = array();
interface/lib/classes/json_handler.inc.php
@@ -88,15 +88,11 @@
        $keys = array_keys($_GET);
        $method = reset($keys);
        $params = array();
        if(is_array($_POST)) {
            foreach($_POST as $key => $val) {
                $tmp = json_decode($val, true);
                if(!$tmp) $params[] = $val;
                else $params[] = (array)$tmp;
            }
        }
        $raw = file_get_contents("php://input");
        $json = json_decode($raw, true);
        if(!is_array($json)) $this->_return_json('invalid_data', 'The JSON data sent to the api is invalid');
        if(array_key_exists($method, $this->methods) == false) {
            $this->_return_json('invalid_method', 'Method ' . $method . ' does not exist');
        }
@@ -109,7 +105,14 @@
        if(method_exists($this->classes[$class_name], $method) == false) {
            $this->_return_json('invalid_method', 'Method ' . $method . ' does not exist in the class it was expected (' . $class_name . ')');
        }
        $methObj = new ReflectionMethod($this->classes[$class_name], $method);
        foreach($methObj->getParameters() as $param) {
            $pname = $param->name;
            if(isset($json[$pname])) $params[] = $json[$pname];
            else $params[] = null;
        }
        try {
            $this->_return_json('ok', '', call_user_func_array(array($this->classes[$class_name], $method), $params));
        } catch(SoapFault $e) {
interface/lib/classes/quota_lib.inc.php
@@ -312,13 +312,13 @@
    
                $databases[$i]['quota_raw'] = $databases[$i]['database_quota'];
                $databases[$i]['used_raw'] = $databases[$i]['used'] / 1024 / 1024; //* quota is stored as MB - calculated bytes
                $databases[$i]['used_percentage'] = (($databases[$i]['database_quota'] > 0) && ($databases[$i]['used'] > 0)) ? round($databases[$i]['used'] * 100 / $databases[$i]['database_quota']) : 0;
                $databases[$i]['used_percentage'] = (($databases[$i]['database_quota'] > 0) && ($databases[$i]['used'] > 0)) ? round($databases[$i]['used_raw'] * 100 / $databases[$i]['database_quota']) : 0;
    
                if ($readable) {
                    // colours
                    $databases[$i]['display_colour'] = '#000000';
                    if($databases[$i]['database_quota'] > 0){
                        $used_ratio = $databases[$i]['used']/$databases[$i]['database_quota'];
                        $used_ratio = $databases[$i]['used'] / $databases[$i]['database_quota'];
                    } else {
                        $used_ratio = 0;
                    }
interface/lib/classes/remoting_lib.inc.php
@@ -98,6 +98,7 @@
        unset($form);
        $this->dateformat = $app->lng('conf_format_dateshort');
        $this->datetimeformat = $app->lng('conf_format_datetime');
        return true;
    }
interface/lib/classes/session.inc.php
@@ -93,8 +93,8 @@
        if (@$this->session_array['session_id'] == '') {
            $sql = "REPLACE INTO sys_session (session_id,date_created,last_updated,session_data,permanent) VALUES (?,NOW(),NOW(),'$session_data',?)";
            $this->db->query($sql, $session_id, ($this->permanent ? 'y' : 'n'));
            $sql = "REPLACE INTO sys_session (session_id,date_created,last_updated,session_data,permanent) VALUES (?,NOW(),NOW(),?,?)";
            $this->db->query($sql, $session_id, $session_data, ($this->permanent ? 'y' : 'n'));
        } else {
            $sql = "UPDATE sys_session SET last_updated = NOW(), session_data = ?" . ($this->permanent ? ", `permanent` = 'y'" : "") . " WHERE session_id = ?";
interface/lib/classes/tform.inc.php
@@ -235,6 +235,24 @@
        return $diffrec;
    }
    /**
     * Generate HTML for DATE fields.
     *
     * @access private
     * @param string $form_element Name of the form element.
     * @param string $default_value Selected value for fields.
     * @return string HTML
     */
    function _getDateHTML($form_element, $default_value)
    {
        $_date = ($default_value && $default_value != '0000-00-00' ? strtotime($default_value) : false);
        $_showdate = ($_date === false) ? false : true;
        $tmp_dt = strtr($this->dateformat,array('d' => 'dd', 'm' => 'mm', 'Y' => 'yyyy', 'y' => 'yy'));
        return '<input type="text" class="form-control" name="' . $form_element . '" value="' . ($_showdate ? date($this->dateformat, $_date) : '') . '"  data-input-element="date" data-date-format="' . $tmp_dt . '" />';
    }
    /**
interface/lib/classes/tform_base.inc.php
@@ -562,6 +562,18 @@
                        $new_record[$key] = $this->_getDateTimeHTML($key, $dt_value, $display_seconds);
                        break;
                    case 'DATE':
                        if (strtotime($val) !== false) {
                            $dt_value = $val;
                        } elseif ( isset($field['default']) && (strtotime($field['default']) !== false) ) {
                            $dt_value = $field['default'];
                        } else {
                            $dt_value = 0;
                        }
                        $new_record[$key] = $this->_getDateHTML($key, $dt_value);
                        break;
                    default:
                        if(isset($record[$key])) {
                            $new_record[$key] = htmlspecialchars($record[$key]);
@@ -671,6 +683,12 @@
                    $display_seconds = (isset($field['display_seconds']) && $field['display_seconds'] == true) ? true : false;
                    $new_record[$key] = $this->_getDateTimeHTML($key, $dt_value, $display_seconds);
                    break;
                case 'DATE':
                    $dt_value = (isset($field['default'])) ? $field['default'] : 0;
                    $new_record[$key] = $this->_getDateHTML($key, $dt_value);
                    break;
                default:
@@ -1002,7 +1020,7 @@
                unset($error);
                break;
            case 'ISINT':
                if(function_exists('filter_var') && $field_value < 2147483647) {
                if(function_exists('filter_var') && $field_value < PHP_INT_MAX) {
                    //if($field_value != '' && filter_var($field_value, FILTER_VALIDATE_INT, array("options" => array('min_range'=>0))) === false) {
                    if($field_value != '' && filter_var($field_value, FILTER_VALIDATE_INT) === false) {
                        $errmsg = $validator['errmsg'];
interface/lib/lang/nl.lng
@@ -10,9 +10,9 @@
$wb['number_format_thousands_sep'] = '';
$wb['error_301'] = 'Module niet toegestaan voor de huidige gebruiker.';
$wb['error_302'] = 'Ongeldige module.';
$wb['error_1001'] = 'De gebruikersnaam en wachtwoord kunnen niet leeg zijn!';
$wb['error_1002'] = 'De gebruikersnaam en/of wachtwoord zijn onjuist!';
$wb['error_1003'] = 'De gebruikersnaam wordt gedeactiveerd!';
$wb['error_1001'] = 'Gebruikersnaam en wachtwoord kunnen niet leeg zijn!';
$wb['error_1002'] = 'Gebruikersnaam en/of wachtwoord zijn onjuist!';
$wb['error_1003'] = 'Gebruikersnaam wordt gedeactiveerd!';
$wb['delete_confirmation'] = 'Wilt u dit record echt verwijderen?';
$wb['error_no_view_permission'] = 'U heeft geen toestemming om dit record te bekijken of dit record bestaat niet!';
$wb['error_no_delete_permission'] = 'U heeft geen toestemming om dit record te verwijderen!';
@@ -40,106 +40,106 @@
$wb['top_menu_dashboard'] = 'Home';
$wb['latest_news_txt'] = 'Laatste nieuws';
$wb['top_menu_vm'] = 'VServer';
$wb['daynamesmin_su'] = 'Su';
$wb['daynamesmin_mo'] = 'Mo';
$wb['daynamesmin_tu'] = 'Tu';
$wb['daynamesmin_we'] = 'We';
$wb['daynamesmin_th'] = 'Th';
$wb['daynamesmin_fr'] = 'Fr';
$wb['daynamesmin_sa'] = 'Sa';
$wb['daynames_sunday'] = 'Sunday';
$wb['daynames_monday'] = 'Monday';
$wb['daynames_tuesday'] = 'Tuesday';
$wb['daynames_wednesday'] = 'Wednesday';
$wb['daynames_thursday'] = 'Thursday';
$wb['daynames_friday'] = 'Friday';
$wb['daynames_saturday'] = 'Saturday';
$wb['daynamesmin_su'] = 'Zo';
$wb['daynamesmin_mo'] = 'Ma';
$wb['daynamesmin_tu'] = 'Di';
$wb['daynamesmin_we'] = 'Wo';
$wb['daynamesmin_th'] = 'Do';
$wb['daynamesmin_fr'] = 'Vr';
$wb['daynamesmin_sa'] = 'Za';
$wb['daynames_sunday'] = 'Zondag';
$wb['daynames_monday'] = 'Maandag';
$wb['daynames_tuesday'] = 'Dinsdag';
$wb['daynames_wednesday'] = 'Woensdag';
$wb['daynames_thursday'] = 'Donderdag';
$wb['daynames_friday'] = 'Vrijdag';
$wb['daynames_saturday'] = 'Zaterdag';
$wb['monthnamesshort_jan'] = 'Jan';
$wb['monthnamesshort_feb'] = 'Feb';
$wb['monthnamesshort_mar'] = 'Mar';
$wb['monthnamesshort_apr'] = 'Apr';
$wb['monthnamesshort_may'] = 'May';
$wb['monthnamesshort_may'] = 'Mei';
$wb['monthnamesshort_jun'] = 'Jun';
$wb['monthnamesshort_jul'] = 'Jul';
$wb['monthnamesshort_aug'] = 'Aug';
$wb['monthnamesshort_sep'] = 'Sep';
$wb['monthnamesshort_oct'] = 'Oct';
$wb['monthnamesshort_oct'] = 'Okt';
$wb['monthnamesshort_nov'] = 'Nov';
$wb['monthnamesshort_dec'] = 'Dec';
$wb['datepicker_nextText'] = 'Next';
$wb['datepicker_prevText'] = 'Prev';
$wb['logout_txt'] = 'Logout';
$wb['conf_format_dateshort_human_readable'] = 'yyyy-mm-dd';
$wb['submit_confirmation'] = 'Do you really want to perform this action?';
$wb['datepicker_nextText'] = 'Volgende';
$wb['datepicker_prevText'] = 'Vorige';
$wb['logout_txt'] = 'Uitloggen';
$wb['conf_format_dateshort_human_readable'] = 'dd-mm-yyyy';
$wb['submit_confirmation'] = 'Weet je zeker dat je deze actie wilt uitvoeren ?';
$wb['top_menu_mailuser'] = 'Mailuser';
$wb['globalsearch_resultslimit_of_txt'] = 'of';
$wb['globalsearch_resultslimit_results_txt'] = 'results';
$wb['globalsearch_noresults_text_txt'] = 'No results.';
$wb['globalsearch_noresults_limit_txt'] = '0 results';
$wb['globalsearch_searchfield_watermark_txt'] = 'Search';
$wb['globalsearch_suggestions_text_txt'] = 'Suggestions';
$wb['globalsearch_resultslimit_of_txt'] = 'van';
$wb['globalsearch_resultslimit_results_txt'] = 'resultaten';
$wb['globalsearch_noresults_text_txt'] = 'Geen resultaten.';
$wb['globalsearch_noresults_limit_txt'] = '0 resultaten';
$wb['globalsearch_searchfield_watermark_txt'] = 'Zoeken';
$wb['globalsearch_suggestions_text_txt'] = 'Suggesties';
$wb['global_tabchange_warning_txt'] = 'Changed data in this tab will be changed if you press OK. On cancel they will be discarded.';
$wb['global_tabchange_discard_txt'] = 'You have unsaved changes in this tab. Changes will be discarded if you continue.';
$wb['datalog_changes_txt'] = 'The following changes are not yet populated to all servers:';
$wb['datalog_changes_end_txt'] = 'Storing updates can take up to one minute. Please be patient.';
$wb['datalog_status_i_web_database'] = 'Create new database';
$wb['datalog_status_u_web_database'] = 'Update database';
$wb['datalog_status_d_web_database'] = 'Delete database';
$wb['datalog_status_i_web_database_user'] = 'Create database user for database';
$wb['datalog_status_u_web_database_user'] = 'Update database user';
$wb['datalog_status_d_web_database_user'] = 'Delete database user';
$wb['datalog_status_i_web_domain'] = 'Create new website';
$wb['datalog_status_u_web_domain'] = 'Update website settings';
$wb['datalog_status_d_web_domain'] = 'Delete website';
$wb['datalog_status_i_ftp_user'] = 'Create FTP user';
$wb['datalog_status_u_ftp_user'] = 'Update FTP user';
$wb['datalog_status_d_ftp_user'] = 'Delete FTP user';
$wb['datalog_status_i_mail_domain'] = 'Create email domain';
$wb['datalog_status_u_mail_domain'] = 'Update email domain';
$wb['datalog_status_d_mail_domain'] = 'Delete email domain';
$wb['datalog_status_i_mail_user'] = 'Create email user';
$wb['datalog_status_u_mail_user'] = 'Update email user';
$wb['datalog_status_d_mail_user'] = 'Delete email user';
$wb['datalog_status_i_mail_forwarding'] = 'Create email address';
$wb['datalog_status_u_mail_forwarding'] = 'Update email address';
$wb['datalog_status_d_mail_forwarding'] = 'Delete email address';
$wb['datalog_status_i_dns_rr'] = 'Create DNS record';
$wb['datalog_status_u_dns_rr'] = 'Update DNS record';
$wb['datalog_status_d_dns_rr'] = 'Delete DNS record';
$wb['datalog_status_i_dns_soa'] = 'Create DNS zone';
$wb['datalog_status_u_dns_soa'] = 'Update DNS zone';
$wb['datalog_status_d_dns_soa'] = 'Delete DNS zone';
$wb['datalog_status_i_cron'] = 'Create cron job';
$wb['datalog_status_u_cron'] = 'Update cron job';
$wb['datalog_status_d_cron'] = 'Delete cron job';
$wb['datalog_changes_txt'] = 'De volgende wijzigingen zijn nog niet op alle servers doorgevoerd:';
$wb['datalog_changes_end_txt'] = 'Het doorvoeren van updates kan tot één minuut duren. Even geduld a.u.b.';
$wb['datalog_status_i_web_database'] = 'Aanmaken nieuwe database';
$wb['datalog_status_u_web_database'] = 'Database bijwerken';
$wb['datalog_status_d_web_database'] = 'Database verwijderen';
$wb['datalog_status_i_web_database_user'] = 'Aanmaken database gebruiker voor database';
$wb['datalog_status_u_web_database_user'] = 'Database gebruiker bijwerken';
$wb['datalog_status_d_web_database_user'] = 'Database gebruiker verwijderen';
$wb['datalog_status_i_web_domain'] = 'Aanmaken nieuwe website';
$wb['datalog_status_u_web_domain'] = 'Bijwerken website instellingen';
$wb['datalog_status_d_web_domain'] = 'Verwijderen website';
$wb['datalog_status_i_ftp_user'] = 'Aanmaken FTP gebruiker';
$wb['datalog_status_u_ftp_user'] = 'Bijwerken FTP gebruiker';
$wb['datalog_status_d_ftp_user'] = 'Verwijderen FTP gebruiker';
$wb['datalog_status_i_mail_domain'] = 'Aanmaken e-mail domein';
$wb['datalog_status_u_mail_domain'] = 'Bijwerken e-mail domein';
$wb['datalog_status_d_mail_domain'] = 'Verwijderen e-mail domein';
$wb['datalog_status_i_mail_user'] = 'Aanmaken e-mail gebruiker';
$wb['datalog_status_u_mail_user'] = 'Bijwerken e-mail gebruiker';
$wb['datalog_status_d_mail_user'] = 'Verwijderen e-mail gebruiker';
$wb['datalog_status_i_mail_forwarding'] = 'Aanmaken e-mail adres';
$wb['datalog_status_u_mail_forwarding'] = 'Bijwerken e-mail adres';
$wb['datalog_status_d_mail_forwarding'] = 'Verwijderen e-mail adres';
$wb['datalog_status_i_dns_rr'] = 'Aanmaken DNS record';
$wb['datalog_status_u_dns_rr'] = 'Bijwerken DNS record';
$wb['datalog_status_d_dns_rr'] = 'Verwijderen DNS record';
$wb['datalog_status_i_dns_soa'] = 'Aanmaken DNS zone';
$wb['datalog_status_u_dns_soa'] = 'Bijwerken DNS zone';
$wb['datalog_status_d_dns_soa'] = 'Verwijderen DNS zone';
$wb['datalog_status_i_cron'] = 'Aanmaken cron job';
$wb['datalog_status_u_cron'] = 'Bijwerken cron job';
$wb['datalog_status_d_cron'] = 'Verwijderen cron job';
$wb['datalog_status_i_mail_get'] = 'Create mail fetcher account';
$wb['datalog_status_u_mail_get'] = 'Update mail fetcher account';
$wb['datalog_status_d_mail_get'] = 'Delete mail fetcher account';
$wb['datalog_status_i_mail_mailinglist'] = 'Create mailing list';
$wb['datalog_status_u_mail_mailinglist'] = 'Update mailing list';
$wb['datalog_status_d_mail_mailinglist'] = 'Delete mailing list';
$wb['datalog_status_i_shell_user'] = 'Create shell user';
$wb['datalog_status_u_shell_user'] = 'Update shell user';
$wb['datalog_status_d_shell_user'] = 'Delete shell user';
$wb['datalog_status_i_web_folder'] = 'Create folder protection';
$wb['datalog_status_u_web_folder'] = 'Update folder protection';
$wb['datalog_status_d_web_folder'] = 'Delete folder protection';
$wb['datalog_status_i_shell_user'] = 'Aanmaken shell gebruiker (ssh)';
$wb['datalog_status_u_shell_user'] = 'Bijwerken shell gebruiker (ssh)';
$wb['datalog_status_d_shell_user'] = 'Verwijderen shell gebruiker (ssh)';
$wb['datalog_status_i_web_folder'] = 'Aanmaken folder protectie';
$wb['datalog_status_u_web_folder'] = 'Bijwerken folder protectie';
$wb['datalog_status_d_web_folder'] = 'Verwijderen folder protectie';
$wb['datalog_status_i_web_folder_user'] = 'Create folder protection user';
$wb['datalog_status_u_web_folder_user'] = 'Update folder protection user';
$wb['datalog_status_d_web_folder_user'] = 'Delete folder protection user';
$wb['datalog_status_i_spamfilter_users'] = 'Create spam filter settings';
$wb['datalog_status_u_spamfilter_users'] = 'Update spam filter settings';
$wb['datalog_status_d_spamfilter_users'] = 'Delete spam filter settings';
$wb['login_as_txt'] = 'Log in as';
$wb['datalog_status_i_spamfilter_users'] = 'Aanmaken spam filter instellngen';
$wb['datalog_status_u_spamfilter_users'] = 'Bijwerken spam filter instellngen';
$wb['datalog_status_d_spamfilter_users'] = 'Verwijderen spam filter instellngen';
$wb['login_as_txt'] = 'Inloggen als';
$wb['no_domain_perm'] = 'You have no permission for this domain.';
$wb['no_destination_perm'] = 'You have no permission for this destination.';
$wb['client_you_are_locked'] = 'You have no permission to change any settings.';
$wb['gender_m_txt'] = 'Mr.';
$wb['gender_f_txt'] = 'Ms.';
$wb['gender_m_txt'] = 'Dhr.';
$wb['gender_f_txt'] = 'Mevr.';
$wb['client_cannot_be_deleted_because_of_billing_module_txt'] = 'This client has records in the billing module, therefore he cannot be deleted.';
$wb['yes_txt'] = 'Yes';
$wb['no_txt'] = 'No';
$wb['None'] = 'None';
$wb['yes_txt'] = 'Ja';
$wb['no_txt'] = 'Nee';
$wb['None'] = 'Geen';
$wb['strength_1'] = 'Weak';
$wb['strength_2'] = 'Fair';
$wb['strength_3'] = 'Good';
interface/web/admin/lib/lang/de_server_config.lng
@@ -26,7 +26,7 @@
$wb['mailuser_name_txt'] = 'Mailbenutzer Name';
$wb['mailuser_group_txt'] = 'Mailbenutzer Gruppe';
$wb['mailbox_virtual_uidgid_maps_txt'] = 'Website Linux Uid für Mailboxen';
$wb['mailbox_virtual_uidgid_maps_info_txt'] = 'nur wenn beides auf gleichem Server';
$wb['mailbox_virtual_uidgid_maps_info_txt'] = 'nur für einzel-Server Installationen.';
$wb['mailbox_virtual_uidgid_maps_error_nosingleserver'] = 'Uid kann in Multiserver-Umgebung nicht gemappt werden.';
$wb['mailbox_virtual_uidgid_maps_error_nodovecot'] = 'Uid Mapping funktioniert nur in Verbindung mit dovecot.';
$wb['mailbox_virtual_uidgid_maps_error_alreadyusers'] = 'Uid Mapping kann nur umgeschaltet werden, wenn noch keine Mailuser angelegt sind.';
interface/web/admin/list/server_ip_map.list.php
@@ -18,7 +18,7 @@
    'prefix' => "",
    'suffix' => "",
    'width'  => "",
    'value'  => array('y' => "<div id=\"ir-Yes\" class=\"swap\"><span>Yes</span></div>", 'n' => "<div class=\"swap\" id=\"ir-No\"><span>No</span></div>"));
    'value'  => array('y' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('yes_txt')."</span></div>", 'n' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('no_txt')."</span></div>"));
$liste['item'][] = array( 'field'  => 'server_id',
    'datatype' => 'INTEGER',
interface/web/admin/templates/directive_snippets_edit.htm
@@ -17,8 +17,8 @@
            </div>
            <div class="form-group">
                <label for="snippet" class="col-sm-3 control-label">{tmpl_var name='snippet_txt'}</label>
                <tmpl_if name='is_master'><div class="col-sm-9 col-text"><pre>{tmpl_var name='snippet'}</pre></div></tmpl_else><div class="col-sm-9"><textarea class="form-control" name="snippet" id="snippet" rows='10' cols='50'>{tmpl_var name='snippet'}</textarea></div>
                <div class="col-sm-3 col-text nginx"></div><div class="col-sm-9 col-text nginx"> &nbsp;{tmpl_var name='variables_txt'}: <a href="javascript:void(0);" class="addPlaceholder">{DOCROOT}</a>, <a href="javascript:void(0);" class="addPlaceholder">{FASTCGIPASS}</a>, <a href="javascript:void(0);" class="addPlaceholder">{PHPFALLBACKFASTCGIPASS}</a></div></tmpl_if>
                <tmpl_if name='is_master'><div class="col-sm-9 col-text"><pre>{tmpl_var name='snippet'}</pre></div></tmpl_else><div class="col-sm-9"><textarea class="form-control" name="snippet" id="snippet" rows='10' cols='50'>{tmpl_var name='snippet'}</textarea>
                &nbsp; Nginx {tmpl_var name='variables_txt'}: <a href="javascript:void(0);" class="addPlaceholder">{DOCROOT}</a>, <a href="javascript:void(0);" class="addPlaceholder">{FASTCGIPASS}</a>, <a href="javascript:void(0);" class="addPlaceholder">{PHPFALLBACKFASTCGIPASS}</a></div></tmpl_if>
            </div>
            <tmpl_if name='is_master'></tmpl_else>
            <div class="form-group php">
interface/web/admin/templates/server_ip_list.htm
@@ -38,10 +38,10 @@
                <tbody>
                    <tmpl_loop name="records">
                        <tr>
                            <td><a href="#" data-load-content="admin/server_ip_edit.php?id={tmpl_var name='id'}">{tmpl_var name="server_id"}</a></td>
                            <td><a href="#" data-load-content="admin/server_ip_edit.php?id={tmpl_var name='id'}">{tmpl_var name="client_id"}</a></td>
                            <td><a href="#" data-load-content="admin/server_ip_edit.php?id={tmpl_var name='id'}" data-toggle="tooltip" data-placement="bottom" title="{tmpl_var name='server_id'}">{tmpl_var name="server_id"}</a></td>
                            <td><a href="#" data-load-content="admin/server_ip_edit.php?id={tmpl_var name='id'}" data-toggle="tooltip" data-placement="bottom" title="{tmpl_var name='client_id'}">{tmpl_var name="client_id"}</a></td>
                            <td><a href="#" data-load-content="admin/server_ip_edit.php?id={tmpl_var name='id'}">{tmpl_var name="ip_type"}</a></td>
                            <td><a href="#" data-load-content="admin/server_ip_edit.php?id={tmpl_var name='id'}">{tmpl_var name="ip_address"}</a></td>
                            <td><a href="#" data-load-content="admin/server_ip_edit.php?id={tmpl_var name='id'}" data-toggle="tooltip" data-placement="bottom" title="{tmpl_var name='ip_address'}">{tmpl_var name="ip_address"}</a></td>
                            <td><a href="#" data-load-content="admin/server_ip_edit.php?id={tmpl_var name='id'}">{tmpl_var name="virtualhost"}</a></td>
                            <td><a href="#" data-load-content="admin/server_ip_edit.php?id={tmpl_var name='id'}">{tmpl_var name="virtualhost_port"}</a></td>
                            <td class="text-right">
@@ -62,5 +62,3 @@
                </tfoot>
            </table>
</div>
interface/web/admin/templates/system_config_dns_edit.htm
New file
@@ -0,0 +1,20 @@
<tmpl_if name="list_head_txt">
<div class='page-header'>
        <h1><tmpl_var name="list_head_txt"></h1>
</div>
</tmpl_if>
<tmpl_if name="list_desc_txt"><p><tmpl_var name="list_desc_txt"></p></tmpl_if>
<div class="form-group">
    <label for="default_dnsserver" class="col-sm-3 control-label">{tmpl_var name='default_dnsserver_txt'}</label>
    <div class="col-sm-9"><select name="default_dnsserver" id="default_dnsserver" class="form-control">
        {tmpl_var name='default_dnsserver'}
    </select></div>
</div>
<input type="hidden" name="id" value="{tmpl_var name='id'}">
<div class="clear"><div class="right">
    <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="admin/system_config_edit.php">{tmpl_var name='btn_save_txt'}</button>
    <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="admin/users_list.php">{tmpl_var name='btn_cancel_txt'}</button>
</div></div>
interface/web/client/form/client_template.tform.php
@@ -114,7 +114,7 @@
            'maxlength' => '10',
            'rows'  => '',
            'cols'  => ''
        ),
        ),/*
        'default_mailserver' => array (
            'datatype' => 'INTEGER',
            'formtype' => 'SELECT',
@@ -125,7 +125,7 @@
            ),
            'value'  => array(''),
            'name'  => 'default_mailserver'
        ),
        ),*/
        'limit_maildomain' => array (
            'datatype' => 'INTEGER',
            'formtype' => 'TEXT',
@@ -321,7 +321,7 @@
            'maxlength' => '10',
            'rows'  => '',
            'cols'  => ''
        ),
        ),/*
        'default_xmppserver' => array (
            'datatype' => 'INTEGER',
            'formtype' => 'SELECT',
@@ -332,7 +332,7 @@
            ),
            'value'  => '',
            'name'  => 'default_xmppserver'
        ),
        ),*/
        'xmpp_servers' => array (
            'datatype' => 'VARCHAR',
            'formtype' => 'MULTIPLE',
@@ -420,7 +420,7 @@
            'formtype' => 'CHECKBOX',
            'default' => 'n',
            'value'  => array(0 => 'n', 1 => 'y')
        ),
        ),/*
        'default_webserver' => array (
            'datatype' => 'INTEGER',
            'formtype' => 'SELECT',
@@ -431,7 +431,7 @@
            ),
            'value'  => array(''),
            'name'  => 'default_webserver'
        ),
        ),*/
        'limit_web_domain' => array (
            'datatype' => 'INTEGER',
            'formtype' => 'TEXT',
@@ -623,7 +623,7 @@
            'formtype' => 'CHECKBOX',
            'default' => 'n',
            'value'  => array(0 => 'n', 1 => 'y')
        ),
        ),/*
        'default_dnsserver' => array (
            'datatype' => 'INTEGER',
            'formtype' => 'SELECT',
@@ -634,7 +634,7 @@
            ),
            'value'  => array(''),
            'name'  => 'default_dnsserver'
        ),
        ),*/
        'limit_dns_zone' => array (
            'datatype' => 'INTEGER',
            'formtype' => 'TEXT',
@@ -704,6 +704,7 @@
            'cols'        => ''
        ),
        */
        /*
        'default_dbserver' => array (
            'datatype' => 'INTEGER',
            'formtype' => 'SELECT',
@@ -714,7 +715,7 @@
            ),
            'value'  => array(''),
            'name'  => 'default_dbserver'
        ),
        ),*/
        'limit_database' => array (
            'datatype' => 'INTEGER',
            'formtype' => 'TEXT',
interface/web/client/lib/lang/nl.lng
@@ -5,20 +5,20 @@
$wb['Add Client'] = 'Toevoegen klant';
$wb['Edit Client'] = 'Wijzigen klant';
$wb['Clients'] = 'klanten';
$wb['Templates'] = 'Templates';
$wb['Limit-Templates'] = 'Limit-Templates';
$wb['Add Reseller'] = 'Toevoegen Reseller';
$wb['Edit Reseller'] = 'Wijzigen Reseller';
$wb['Templates'] = 'Sjablonen';
$wb['Limit-Templates'] = 'Limiet sjablonen';
$wb['Add Reseller'] = 'Toevoegen reseller';
$wb['Edit Reseller'] = 'Wijzigen reseller';
$wb['Resellers'] = 'Resellers';
$wb['error_has_clients'] = 'Deze reseller heeft klanten. Verwijder eerst de klanten van de reseller';
$wb['add_additional_template_txt'] = 'Add additional template';
$wb['delete_additional_template_txt'] = 'Delete additional template';
$wb['Messaging'] = 'Messaging';
$wb['Send email'] = 'Send Email';
$wb['Edit Client Circle'] = 'Edit Client Circle';
$wb['Domains'] = 'Domains';
$wb['domain_txt'] = 'Domain';
$wb['client_txt'] = 'Client';
$wb['add_additional_template_txt'] = 'Additioneel sjabloon toevoegen';
$wb['delete_additional_template_txt'] = 'Verwijder additioneel sjabloon';
$wb['Messaging'] = 'Berichten';
$wb['Send email'] = 'Verstuur e-mail';
$wb['Edit Client Circle'] = 'Klanten collectie bewerken';
$wb['Domains'] = 'Domeinen';
$wb['domain_txt'] = 'Domein';
$wb['client_txt'] = 'Klant';
$wb['error_domain_in mailuse'] = 'This domain cannot be deleted, because it is in use as mail-domain';
$wb['error_domain_in webuse'] = 'This domain cannot be deleted, because it is in use as web-domain';
$wb['error_client_can_not_add_domain'] = 'You cannot add a new domain';
interface/web/client/lib/lang/nl_client_del.lng
@@ -3,5 +3,5 @@
$wb['delete_explanation'] = 'Deze actie verwijderd het volgende aantal aan records die geassocieerd zijn met deze klant';
$wb['btn_save_txt'] = 'Verwijder de klant';
$wb['btn_cancel_txt'] = 'Annuleren zonder de klant te verwijderen';
$wb['confirm_client_delete_txt'] = 'Are you sure you want to delete this client?';
$wb['confirm_client_delete_txt'] = 'Weet je zeker dat je deze klant wil verwijderen ?';
?>
interface/web/client/lib/lang/nl_client_message.lng
@@ -1,20 +1,20 @@
<?php
$wb['btn_send_txt'] = 'Send email';
$wb['btn_cancel_txt'] = 'Cancel';
$wb['btn_send_txt'] = 'Stuur e-mail';
$wb['btn_cancel_txt'] = 'Annuleren';
$wb['sender_txt'] = 'Sender email address';
$wb['subject_txt'] = 'Subject';
$wb['message_txt'] = 'Message';
$wb['form_legend_client_txt'] = 'Send email message to all clients.';
$wb['form_legend_admin_txt'] = 'Send email message to all clients and resellers.';
$wb['subject_txt'] = 'Onderwerp';
$wb['message_txt'] = 'Bericht';
$wb['form_legend_client_txt'] = 'Stuur e-mail naar alle klanten.';
$wb['form_legend_admin_txt'] = 'Stuur e-mail naar alle klanten en resellers.';
$wb['sender_invalid_error'] = 'Sender email invalid.';
$wb['subject_invalid_error'] = 'Subject is empty.';
$wb['message_invalid_error'] = 'Message is empty.';
$wb['email_sent_to_txt'] = 'Email sent to:';
$wb['subject_invalid_error'] = 'Onderwerp is leeg.';
$wb['message_invalid_error'] = 'Bericht is leeg.';
$wb['email_sent_to_txt'] = 'E-mail verstuurd aan:';
$wb['page_head_txt'] = 'Send customer information';
$wb['recipient_txt'] = 'Recipient';
$wb['all_clients_resellers_txt'] = 'All clients and resellers';
$wb['all_clients_txt'] = 'All clients';
$wb['recipient_txt'] = 'Ontvanger';
$wb['all_clients_resellers_txt'] = 'Alle klanten en resellers';
$wb['all_clients_txt'] = 'Alle klanten';
$wb['variables_txt'] = 'Variables:';
$wb['gender_m_txt'] = 'Mr.';
$wb['gender_f_txt'] = 'Ms.';
$wb['gender_m_txt'] = 'Dhr.';
$wb['gender_f_txt'] = 'Mevr.';
?>
interface/web/client/lib/lang/nl_clients_list.lng
@@ -6,6 +6,6 @@
$wb['city_txt'] = 'Plaatsnaam';
$wb['country_txt'] = 'Land';
$wb['add_new_record_txt'] = 'Toevoegen nieuwe klant';
$wb['username_txt'] = 'Username';
$wb['customer_no_txt'] = 'Customer No.';
$wb['username_txt'] = 'Gebruikersnaam';
$wb['customer_no_txt'] = 'Klantnummer';
?>
interface/web/client/lib/lang/nl_domain.lng
@@ -1,6 +1,6 @@
<?php
$wb['domain_error_empty'] = 'De domain-naam is niet ingvuld';
$wb['domain_error_empty'] = 'De domein naam is niet ingevuld';
$wb['domain_error_unique'] = 'Het domein bestaat reeds';
$wb['domain_error_regex'] = 'Deze domeinnaam is niet toegestaan';
$wb['domain_error_regex'] = 'Deze domein naam is niet toegestaan';
$wb['Domain'] = 'Domein';
?>
interface/web/client/lib/lang/nl_domain_list.lng
@@ -2,5 +2,5 @@
$wb['list_head_txt'] = 'Domeinen';
$wb['add_new_record_txt'] = 'Toevoegen nieuw domein';
$wb['domain_txt'] = 'Domein';
$wb['user_txt'] = 'Client';
$wb['user_txt'] = 'Klant';
?>
interface/web/client/lib/lang/nl_reseller.lng
@@ -91,11 +91,11 @@
$wb['web_php_options_txt'] = 'PHP Opties';
$wb['limit_client_error'] = 'Het max. aantal klanten is bereikt.';
$wb['limit_client_error_positive_or_unlimited'] = 'Het aantal klanten moet > 0';
$wb['limit_web_quota_txt'] = 'Web Quota';
$wb['limit_web_quota_txt'] = 'Web quota';
$wb['limit_traffic_quota_txt'] = 'Traffic Quota';
$wb['limit_trafficquota_error_notint'] = 'Traffic Quota moet een numerieke waarde zijn.';
$wb['customer_no_txt'] = 'Klant nr.';
$wb['vat_id_txt'] = 'BTW ID';
$wb['customer_no_txt'] = 'Klantnummer';
$wb['vat_id_txt'] = 'BTW nummer';
$wb['required_fields_txt'] = '* Verplichte velden';
$wb['limit_webdav_user_txt'] = 'Max. number of Webdav users';
$wb['limit_webdav_user_error_notint'] = 'The webdav user limit must be a number.';
interface/web/client/lib/lang/nl_resellers_list.lng
@@ -6,6 +6,6 @@
$wb['city_txt'] = 'Plaatsnaam';
$wb['country_txt'] = 'Land';
$wb['add_new_record_txt'] = 'Toevoegen nieuwe reseller';
$wb['customer_no_txt'] = 'Customer No.';
$wb['username_txt'] = 'Username';
$wb['customer_no_txt'] = 'Klantnummer';
$wb['username_txt'] = 'Gebruikersnaam';
?>
interface/web/client/templates/client_del.htm
@@ -3,8 +3,6 @@
</div>
<p><tmpl_var name="list_desc_txt"></p>
        <div id="OKMsg">
            <tmpl_if name='number_records'>
            <tmpl_var name="delete_explanation">:<br /><br />
@@ -12,15 +10,15 @@
                    <tmpl_var name="table">, 
                </tmpl_loop>
            </tmpl_else>
                <tmpl_var name="confirm_client_delete_txt">
                <h3><tmpl_var name="confirm_client_delete_txt"></h3>
            </tmpl_if>
        </div>
        <div class="col-sm-9"><input class="form-control" type="checkbox" name="confirm" value="yes" /></div><b><tmpl_var name="confirm_action_txt"></b>
        &nbsp;
        <div> <input type="checkbox" name="confirm" value="yes" /> <b><tmpl_var name="confirm_action_txt"></b></div>
        &nbsp;
        <input type="hidden" name="id" value="{tmpl_var name='id'}">
        <div class="clear"><div class="right">
        <div class="clear"><div class="left">
            <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="client/client_del.php">{tmpl_var name='btn_save_txt'}</button>
            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="client/client_list.php">{tmpl_var name='btn_cancel_txt'}</button>
        </div></div>
interface/web/client/templates/clients_list.htm
@@ -47,7 +47,7 @@
                            <td><a href="#" data-load-content="client/client_edit.php?id={tmpl_var name='id'}">{tmpl_var name="company_name"}</a></td>
                            <td><a href="#" data-load-content="client/client_edit.php?id={tmpl_var name='id'}">{tmpl_var name="contact_name"}</a></td>
                            <td><a href="#" data-load-content="client/client_edit.php?id={tmpl_var name='id'}">{tmpl_var name="customer_no"}</a></td>
                            <td><a href="#" data-load-content="client/client_edit.php?id={tmpl_var name='id'}">{tmpl_var name="username"}</a></td>
                            <td><a href="#" data-load-content="client/client_edit.php?id={tmpl_var name='id'}" data-toggle="tooltip" data-placement="bottom" title="{tmpl_var name='username'}">{tmpl_var name="username"}</a></td>
                            <td><a href="#" data-load-content="client/client_edit.php?id={tmpl_var name='id'}">{tmpl_var name="city"}</a></td>
                            <td><a href="#" data-load-content="client/client_edit.php?id={tmpl_var name='id'}"><span class="flags flag-{tmpl_var name="countryiso"}">{tmpl_var name="country"}</span></a></td>
                            <tmpl_if name="has_robot"><td><a href="#" data-load-content="client/client_edit.php?id={tmpl_var name='id'}">{tmpl_var name="validation_status"}</a></td></tmpl_if>
@@ -82,5 +82,3 @@
                </tfoot>
            </table>
</div>
interface/web/client/templates/resellers_list.htm
@@ -45,7 +45,7 @@
                            <td><a href="#" data-load-content="client/reseller_edit.php?id={tmpl_var name='id'}">{tmpl_var name="company_name"}</a></td>
                            <td><a href="#" data-load-content="client/reseller_edit.php?id={tmpl_var name='id'}">{tmpl_var name="contact_name"}</a></td>
                            <td><a href="#" data-load-content="client/reseller_edit.php?id={tmpl_var name='id'}">{tmpl_var name="customer_no"}</a></td>
                            <td><a href="#" data-load-content="client/reseller_edit.php?id={tmpl_var name='id'}">{tmpl_var name="username"}</a></td>
                            <td><a href="#" data-load-content="client/reseller_edit.php?id={tmpl_var name='id'}" data-toggle="tooltip" data-placement="bottom" title="{tmpl_var name='username'}">{tmpl_var name="username"}</a></td>
                            <td><a href="#" data-load-content="client/reseller_edit.php?id={tmpl_var name='id'}">{tmpl_var name="city"}</a></td>
                            <td><a href="#" data-load-content="client/reseller_edit.php?id={tmpl_var name='id'}"><span class="flags flag-{tmpl_var name="countryiso"}">{tmpl_var name="country"}</span></a></td>
                            <td class="text-right">
@@ -67,5 +67,3 @@
                </tfoot>
            </table>
</div>
interface/web/dashboard/dashlets/templates/databasequota.htm
@@ -16,7 +16,7 @@
                <td>{tmpl_var name='database_quota'}</td>
                <td>
                <div class='progress'>
                    <div class='progress-bar progress-bar-{tmpl_if name="used_percentage" op="<" value="50"}success{tmpl_elseif name="used_percentage" op="<" value="75"}warning{tmpl_else}danger{/tmpl_if}' role='progressbar' aria-valuemin='0' aria-valuemax='100' aria-valuenow='{tmpl_var name="used_percentage"}' style='width:{tmpl_var name="used_percentage"}%'>
                    <div class='progress-bar progress-bar-{tmpl_if name="used_percentage" op="<" value="50"}success{tmpl_elseif name="used_percentage" op="<" value="75"}warning{tmpl_else}danger{/tmpl_if}' role='progressbar' aria-valuemin='0' aria-valuemax='100' aria-valuenow='{tmpl_var name="used_percentage"}' style='width:{tmpl_var name="used_percentage"}%' data-toggle="tooltip" data-placement="bottom" title="{tmpl_var name='used_percentage'}%">
                    <span class='sr-only'>{tmpl_var name='used'} {tmpl_var name='of_txt'} {tmpl_var name='database_quota'}</span>
                    </div>
                </div>
interface/web/dashboard/dashlets/templates/limits.htm
@@ -14,7 +14,7 @@
                <td>{tmpl_var name='usage'} {tmpl_var name='of_txt'} {tmpl_var name='value'}</td>
                <td>
                <div class='progress'>
                    <div class='progress-bar progress-bar-{tmpl_if name="percentage" op="<" value="50"}success{tmpl_elseif name="percentage" op="<" value="75"}warning{tmpl_else}danger{/tmpl_if}' role='progressbar' aria-valuemin='0' aria-valuemax='100' aria-valuenow='{tmpl_var name="percentage"}' style='width:{tmpl_var name="percentage"}%'>
                    <div class='progress-bar progress-bar-{tmpl_if name="percentage" op="<" value="50"}success{tmpl_elseif name="percentage" op="<" value="75"}warning{tmpl_else}danger{/tmpl_if}' role='progressbar' aria-valuemin='0' aria-valuemax='100' aria-valuenow='{tmpl_var name="percentage"}' style='width:{tmpl_var name="percentage"}%' data-toggle="tooltip" data-placement="bottom" title="{tmpl_var name='percentage'}%">
                    <span class='sr-only'>{tmpl_var name='usage'} {tmpl_var name='of_txt'} {tmpl_var name='value'}</span>
                    </div>
                </div>
interface/web/dashboard/dashlets/templates/mailquota.htm
@@ -18,7 +18,7 @@
                <td>{tmpl_var name='quota'}</td>
                <td>
                <div class='progress'>
                    <div class='progress-bar progress-bar-{tmpl_if name="used_percentage" op="<" value="50"}success{tmpl_elseif name="used_percentage" op="<" value="75"}warning{tmpl_else}danger{/tmpl_if}' role='progressbar' aria-valuemin='0' aria-valuemax='100' aria-valuenow='{tmpl_var name="used_percentage"}' style='width:{tmpl_var name="used_percentage"}%'>
                    <div class='progress-bar progress-bar-{tmpl_if name="used_percentage" op="<" value="50"}success{tmpl_elseif name="used_percentage" op="<" value="75"}warning{tmpl_else}danger{/tmpl_if}' role='progressbar' aria-valuemin='0' aria-valuemax='100' aria-valuenow='{tmpl_var name="used_percentage"}' style='width:{tmpl_var name="used_percentage"}%' data-toggle="tooltip" data-placement="bottom" title="{tmpl_var name='used_percentage'}%">
                    <span class='sr-only'>{tmpl_var name='used'} {tmpl_var name='of_txt'} {tmpl_var name='quota'}</span>
                    </div>
                </div>
interface/web/dashboard/dashlets/templates/quota.htm
@@ -18,7 +18,7 @@
                <td>{tmpl_var name='hard'}</td>
                <td>
                <div class='progress'>
                    <div class='progress-bar progress-bar-{tmpl_if name="used_percentage" op="<" value="50"}success{tmpl_elseif name="used_percentage" op="<" value="75"}warning{tmpl_else}danger{/tmpl_if}' role='progressbar' aria-valuemin='0' aria-valuemax='100' aria-valuenow='{tmpl_var name="used_percentage"}' style='width:{tmpl_var name="used_percentage"}%'>
                    <div class='progress-bar progress-bar-{tmpl_if name="used_percentage" op="<" value="50"}success{tmpl_elseif name="used_percentage" op="<" value="75"}warning{tmpl_else}danger{/tmpl_if}' role='progressbar' aria-valuemin='0' aria-valuemax='100' aria-valuenow='{tmpl_var name="used_percentage"}' style='width:{tmpl_var name="used_percentage"}%' data-toggle="tooltip" data-placement="bottom" title="{tmpl_var name='used_percentage'}%">
                    <span class='sr-only'>{tmpl_var name='used'} {tmpl_var name='of_txt'} {tmpl_var name='soft'}</span>
                    </div>
                </div>
interface/web/dashboard/lib/lang/nl_dashlet_customer.lng
@@ -1,4 +1,4 @@
<?php
$wb['customerdata_txt'] = 'My Data';
$wb['edit_txt'] = 'Edit';
$wb['customerdata_txt'] = 'Mijn gegevens';
$wb['edit_txt'] = 'Bewerken';
?>
interface/web/dashboard/lib/lang/nl_dashlet_databasequota.lng
@@ -1,7 +1,7 @@
<?php
$wb['databasequota_txt'] = 'Database Quota';
$wb['database_txt'] = 'Database Name';
$wb['used_txt'] = 'Used Space';
$wb['database_txt'] = 'Database naam';
$wb['used_txt'] = 'Gebruikte ruimte';
$wb['quota_txt'] = 'Quota';
$wb['no_database_accounts_txt'] = 'No databases found.';
$wb['no_database_accounts_txt'] = 'Geen databases gevonden.';
?>
interface/web/dashboard/lib/lang/nl_dashlet_invoice_client_settings.lng
@@ -1,4 +1,4 @@
<?php
$wb['invoice_client_settings_txt'] = 'Invoice Client Settings';
$wb['edit_txt'] = 'Edit';
$wb['edit_txt'] = 'Bewerken';
?>
interface/web/dashboard/lib/lang/nl_dashlet_invoices.lng
@@ -1,18 +1,18 @@
<?php
$wb['invoices_txt'] = 'Invoices';
$wb['invoice_no_txt'] = 'Invoice No.';
$wb['amount_txt'] = 'Amount';
$wb['date_txt'] = 'Date';
$wb['invoices_txt'] = 'Facturen';
$wb['invoice_no_txt'] = 'Factuur nr.';
$wb['amount_txt'] = 'Aantal';
$wb['date_txt'] = 'Datum';
$wb['invoice_status_txt'] = 'Status';
$wb['no_invoices_txt'] = 'No Invoices available.';
$wb['paid_txt'] = 'Paid';
$wb['unpaid_txt'] = 'Unpaid';
$wb['paynow_txt'] = 'pay now';
$wb['no_invoices_txt'] = 'Geen facturen beschikbaar.';
$wb['paid_txt'] = 'Betaald';
$wb['unpaid_txt'] = 'Niet betaald';
$wb['paynow_txt'] = 'betaal nu';
$wb['proforma_txt'] = 'Proforma';
$wb['refunded_txt'] = 'Refunded';
$wb['not_refunded_txt'] = 'Not refunded';
$wb['invoice_type_invoice_txt'] = 'Invoice';
$wb['invoice_type_invoice_txt'] = 'Factuur';
$wb['invoice_type_proforma_txt'] = 'Proforma';
$wb['invoice_type_refund_txt'] = 'Refund';
$wb['invoice_type_reminder_txt'] = 'Reminder';
$wb['invoice_type_reminder_txt'] = 'Herinnering';
?>
interface/web/dashboard/lib/lang/nl_dashlet_limits.lng
@@ -26,6 +26,6 @@
$wb['limit_webdav_user_txt'] = 'Aantal Webdav users';
$wb['limit_client_txt'] = 'Aantal klanten';
$wb['limit_database_txt'] = 'Aantal databases';
$wb['limit_mailmailinglist_txt'] = 'Number of mailing lists';
$wb['limit_domain_txt'] = 'Number of Domains';
$wb['limit_mailmailinglist_txt'] = 'Aantal mailing lijsten';
$wb['limit_domain_txt'] = 'Aantal domeinen';
?>
interface/web/dashboard/lib/lang/nl_dashlet_mailquota.lng
@@ -1,8 +1,8 @@
<?php
$wb['mailquota_txt'] = 'Mailbox Quota';
$wb['email_txt'] = 'Email Address';
$wb['name_txt'] = 'Name';
$wb['used_txt'] = 'Used Space';
$wb['email_txt'] = 'Email adres';
$wb['name_txt'] = 'Naam';
$wb['used_txt'] = 'Gebruikte ruimte';
$wb['quota_txt'] = 'Quota';
$wb['no_email_accounts_txt'] = 'No email accounts found.';
$wb['no_email_accounts_txt'] = 'Geen e-mail accounts gevonden.';
?>
interface/web/dashboard/lib/lang/nl_dashlet_modules.lng
@@ -1,4 +1,4 @@
<?php
$wb['available_modules_txt'] = 'Beschikbare modules';
$wb['go_to_txt'] = 'Go to';
$wb['go_to_txt'] = 'Ga naar';
?>
interface/web/dashboard/lib/lang/nl_dashlet_products.lng
@@ -1,9 +1,9 @@
<?php
$wb['products_txt'] = 'My Products';
$wb['name_txt'] = 'Name';
$wb['price_txt'] = 'Price';
$wb['next_payment_date_txt'] = 'Next Invoice';
$wb['no_products_txt'] = 'No products found.';
$wb['edit_txt'] = 'Edit';
$wb['cancellation_date_txt'] = 'Cancelled by';
$wb['products_txt'] = 'Mijn producten';
$wb['name_txt'] = 'Naam';
$wb['price_txt'] = 'Prijs';
$wb['next_payment_date_txt'] = 'Volgende factuur';
$wb['no_products_txt'] = 'Geen producten gevonden.';
$wb['edit_txt'] = 'Bewerken';
$wb['cancellation_date_txt'] = 'Geannuleerd door';
?>
interface/web/dashboard/lib/lang/nl_dashlet_quota.lng
@@ -1,8 +1,8 @@
<?php
$wb['quota_txt'] = 'Website Harddisk Quota';
$wb['domain_txt'] = 'Domain / Website';
$wb['used_txt'] = 'Used space';
$wb['hard_txt'] = 'Hard limit';
$wb['soft_txt'] = 'Soft limit';
$wb['no_sites_txt'] = 'No web sites found.';
$wb['quota_txt'] = 'Website harddisk Quota';
$wb['domain_txt'] = 'Domein / Website';
$wb['used_txt'] = 'Gebruikte ruimte';
$wb['hard_txt'] = 'Harde limiet';
$wb['soft_txt'] = 'Zachte limiet';
$wb['no_sites_txt'] = 'Geen websites gevonden.';
?>
interface/web/dashboard/lib/lang/nl_dashlet_shop.lng
@@ -1,8 +1,8 @@
<?php
$wb['shop_txt'] = 'Order';
$wb['name_txt'] = 'Name';
$wb['price_txt'] = 'Price';
$wb['name_txt'] = 'Naam';
$wb['price_txt'] = 'Prijs';
$wb['setup_fee_txt'] = 'Setup Fee';
$wb['no_products_txt'] = 'No products found.';
$wb['no_products_txt'] = 'Geen producten gevonden.';
$wb['order_txt'] = 'Order';
?>
interface/web/dashboard/lib/lang/pl_dashlet_modules.lng
@@ -1,4 +1,4 @@
<?php
$wb['available_modules_txt'] = 'Dostępne moduły';
$wb['go_to_txt'] = 'Go to';
$wb['go_to_txt'] = 'Idź do';
?>
interface/web/dashboard/templates/dashboard.htm
@@ -1,5 +1,5 @@
<div class='page-header'>
  <h1>Welcome Admin</h1>
  <h1>{tmpl_var name='welcome_user'}</h1>
</div>
<tmpl_if name='error'>
interface/web/dns/dns_import.php
@@ -38,10 +38,22 @@
$error = '';
// Loading the template
$app->uses('tpl,validate_dns');
$app->uses('tform,tpl,validate_dns');
$app->tpl->newTemplate("form.tpl.htm");
$app->tpl->setInclude('content_tpl', 'templates/dns_import.htm');
$app->load_language_file('/web/dns/lib/lang/'.$_SESSION['s']['language'].'_dns_wizard.lng');
// Check if dns record limit has been reached. We will check only users, not admins
if($_SESSION["s"]["user"]["typ"] == 'user') {
    $app->tform->formDef['db_table_idx'] = 'id';
    $app->tform->formDef['db_table'] = 'dns_soa';
    if(!$app->tform->checkClientLimit('limit_dns_zone')) {
        $app->error($app->lng('limit_dns_zone_txt'));
    }
    if(!$app->tform->checkResellerLimit('limit_dns_zone')) {
        $app->error('Reseller: '.$app->lng('limit_dns_zone_txt'));
    }
}
// import variables
$template_id = (isset($_POST['template_id']))?$app->functions->intval($_POST['template_id']):0;
@@ -216,7 +228,7 @@
        $line = trim($line);
        if ($line != '' && substr($line, 0, 1) != ';'){
            if(strpos($line, ";") !== FALSE) {
                if (!preg_match("/v=DKIM|v=DMARC/",$line)) {
                if(!preg_match("/\"[^\"]+;[^\"]*\"/", $line)) {
                    $line = substr($line, 0, strpos($line, ";"));
                }
            }
@@ -267,12 +279,13 @@
        $parts = explode(' ', $line);
        // make elements lowercase
        $dkim=@($parts[3]=='"v=DKIM1;')?true:false;
        $dmarc=@($parts[3]=='"v=DMARC1;')?true:false;
        $new_parts = array();
        foreach($parts as $part){
            if(!$dkim && !$dmarc) {
        if(
            (strpos($part, ';') === false) &&
            (!preg_match("/^\"/", $part)) &&
            (!preg_match("/\"$/", $part))
        ) {
                $new_parts[] = strtolower($part);
            } else {
                $new_parts[] = $part;
interface/web/dns/dns_spf_edit.php
@@ -163,7 +163,7 @@
        }
        $spf_ip = trim($this->dataRecord['spf_ip']);
        if (!empty($spf_ip)) {
            $rec = split(' ', $spf_ip);
            $rec = explode(' ', $spf_ip);
            foreach ($rec as $ip) {
                $temp_ip = explode('/', $ip);
                if (filter_var($temp_ip[0], FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)) {
@@ -187,7 +187,7 @@
        }
        $spf_hostname = trim($this->dataRecord['spf_hostname']);
        if (!empty($spf_hostname)) {
            $rec = split(' ', $spf_hostname);
            $rec = explode(' ', $spf_hostname);
            foreach ($rec as $hostname) { 
                if (preg_match('/^[a-zA-Z0-9\\.\\-\\*]{0,64}$/', $hostname)) 
                    $spf_record[] = 'a:' . $hostname;
@@ -200,7 +200,7 @@
        }
        $spf_domain = trim($this->dataRecord['spf_domain']);
        if (!empty($spf_domain)) {
            $rec = split(' ', $spf_domain);
            $rec = explode(' ', $spf_domain);
            foreach ($rec as $domain) {
                if (preg_match('/^[_a-zA-Z0-9\\.\\-\\*]{0,64}$/', $domain))
                    $spf_record[] = 'include:' . $domain;
interface/web/dns/dns_wizard.php
@@ -36,11 +36,23 @@
// Loading the template
$app->uses('tpl,validate_dns');
$app->uses('tpl,validate_dns,tform');
$app->tpl->newTemplate("form.tpl.htm");
$app->tpl->setInclude('content_tpl', 'templates/dns_wizard.htm');
$app->load_language_file('/web/dns/lib/lang/'.$_SESSION['s']['language'].'_dns_wizard.lng');
// Check if dns record limit has been reached. We will check only users, not admins
if($_SESSION["s"]["user"]["typ"] == 'user') {
    $app->tform->formDef['db_table_idx'] = 'id';
    $app->tform->formDef['db_table'] = 'dns_soa';
    if(!$app->tform->checkClientLimit('limit_dns_zone')) {
        $app->error($app->lng('limit_dns_zone_txt'));
    }
    if(!$app->tform->checkResellerLimit('limit_dns_zone')) {
        $app->error('Reseller: '.$app->lng('limit_dns_zone_txt'));
    }
}
// import variables
$template_id = (isset($_POST['template_id']))?$app->functions->intval($_POST['template_id']):0;
$sys_groupid = (isset($_POST['client_group_id']))?$app->functions->intval($_POST['client_group_id']):0;
interface/web/dns/lib/lang/de_dns_wizard.lng
@@ -40,5 +40,6 @@
$wb['globalsearch_searchfield_watermark_txt'] = 'Suche';
$wb['globalsearch_suggestions_text_txt'] = 'Vorschläge';
$wb['error_no_server_id'] = 'No server provided.';
$wb['error_not_allowed_server_id'] = 'The selected server is not allowed for this account.';
$wb['error_not_allowed_server_id'] = 'Der ausgewählte Server ist in diesem Konto nicht verfügbar.';
$wb['limit_dns_zone_txt'] = 'Die maximale Anzahl an DNS Einträgen für Ihr Konto wurde erreicht.';
?>
interface/web/dns/lib/lang/en_dns_wizard.lng
@@ -41,4 +41,5 @@
$wb['globalsearch_suggestions_text_txt'] = "Suggestions";
$wb['error_no_server_id'] = 'No server provided.';
$wb['error_not_allowed_server_id'] = 'The selected server is not allowed for this account.';
$wb["limit_dns_zone_txt"] = 'The max. number of DNS zones for your account is reached.';
?>
interface/web/dns/lib/lang/nl.lng
@@ -18,5 +18,5 @@
$wb['Add DNS Zone'] = 'Add DNS Zone';
$wb['Templates'] = 'Templates';
$wb['Secondary Zones'] = 'Secondary Zones';
$wb['Import Zone File'] = 'Import Zone File';
$wb['Import Zone File'] = 'Zone bestanden importeren';
?>
interface/web/dns/lib/lang/nl_dns_soa_admin_list.lng
@@ -1,11 +1,11 @@
<?php
$wb['list_head_txt'] = 'DNS-Zones';
$wb['active_txt'] = 'Active';
$wb['active_txt'] = 'Actief';
$wb['server_id_txt'] = 'Server';
$wb['origin_txt'] = 'Zone';
$wb['ns_txt'] = 'NS';
$wb['mbox_txt'] = 'Email';
$wb['add_new_record_wizard_txt'] = 'Add new DNS Zone with Wizard';
$wb['add_new_record_txt'] = 'Add new DNS Zone manually';
$wb['sys_groupid_txt'] = 'Client';
$wb['mbox_txt'] = 'E-mail';
$wb['add_new_record_wizard_txt'] = 'DNS Zone via wizard toevoegen';
$wb['add_new_record_txt'] = 'DNS Zone manueel toevoegen';
$wb['sys_groupid_txt'] = 'Klant';
?>
interface/web/dns/lib/lang/nl_dns_soa_list.lng
@@ -5,7 +5,7 @@
$wb['origin_txt'] = 'Zone';
$wb['ns_txt'] = 'NS';
$wb['mbox_txt'] = 'E-mail';
$wb['add_new_record_wizard_txt'] = 'Toevoegen nieuw DNS Zone met wizard';
$wb['add_new_record_wizard_txt'] = 'Toevoegen nieuwe DNS Zone met wizard';
$wb['add_new_record_txt'] = 'Toevoegen nieuwe DNS Zone (handmatig)';
$wb['import_zone_file_txt'] = 'Import Zone File';
$wb['import_zone_file_txt'] = 'Importeer zone bestand';
?>
interface/web/dns/lib/lang/nl_dns_wizard.lng
@@ -1,5 +1,5 @@
<?php
$wb['template_id_txt'] = 'Template';
$wb['template_id_txt'] = 'Sjabloon';
$wb['server_id_txt'] = 'Server';
$wb['client_txt'] = 'Klant';
$wb['btn_save_txt'] = 'Aanmaken DNS Record';
@@ -10,35 +10,35 @@
$wb['ns2_txt'] = 'NS 2';
$wb['ip_txt'] = 'IP-adres';
$wb['ipv6_txt'] = 'IPv6-adres';
$wb['error_origin_empty'] = 'Oorspong is niet ingvuld.';
$wb['error_ns_empty'] = 'NS is niet ingvuld.';
$wb['error_mbox_empty'] = 'Mbox is niet ingvuld.';
$wb['error_refresh_empty'] = 'Ververs is niet ingvuld.';
$wb['error_retry_empty'] = 'Opnieuw proberen is niet ingvuld.';
$wb['error_expire_empty'] = 'Verlopen is niet ingvuld.';
$wb['error_minimum_empty'] = 'Minimum is niet ingvuld.';
$wb['error_ttl_empty'] = 'TTL is niet ingvuld.';
$wb['error_domain_empty'] = 'Domein is niet ingvuld';
$wb['error_ip_empty'] = 'IP is niet ingvuld.';
$wb['error_ipv6_empty'] = 'IPv6 is niet ingvuld.';
$wb['error_ns1_empty'] = 'NS1 is niet ingvuld.';
$wb['error_ns2_empty'] = 'NS2 is niet ingvuld.';
$wb['error_email_empty'] = 'E-mail is niet ingvuld.';
$wb['error_origin_empty'] = 'Oorspong is niet ingevuld.';
$wb['error_ns_empty'] = 'NS is niet ingevuld.';
$wb['error_mbox_empty'] = 'Mbox is niet ingevuld.';
$wb['error_refresh_empty'] = 'Ververs is niet ingevuld.';
$wb['error_retry_empty'] = 'Opnieuw proberen is niet ingevuld.';
$wb['error_expire_empty'] = 'Verlopen is niet ingevuld.';
$wb['error_minimum_empty'] = 'Minimum is niet ingevuld.';
$wb['error_ttl_empty'] = 'TTL is niet ingevuld.';
$wb['error_domain_empty'] = 'Domein is niet ingevuld';
$wb['error_ip_empty'] = 'IP is niet ingevuld.';
$wb['error_ipv6_empty'] = 'IPv6 is niet ingevuld.';
$wb['error_ns1_empty'] = 'NS1 is niet ingevuld.';
$wb['error_ns2_empty'] = 'NS2 is niet ingevuld.';
$wb['error_email_empty'] = 'E-mail is niet ingevuld.';
$wb['error_domain_regex'] = 'Domein bevat ongeldige karakters.';
$wb['error_ns1_regex'] = 'NS1 bevat ongeldige karakters.';
$wb['error_ns2_regex'] = 'NS2 bevat ongeldige karakters.';
$wb['error_email_regex'] = 'E-mail bevat geen geldig e-mailadres.';
$wb['dns_zone_txt'] = 'DNS Zone';
$wb['globalsearch_resultslimit_of_txt'] = 'of';
$wb['globalsearch_resultslimit_results_txt'] = 'results';
$wb['globalsearch_noresults_text_txt'] = 'No results.';
$wb['globalsearch_noresults_limit_txt'] = '0 results';
$wb['globalsearch_searchfield_watermark_txt'] = 'Search';
$wb['globalsearch_suggestions_text_txt'] = 'Suggestions';
$wb['globalsearch_resultslimit_of_txt'] = 'van';
$wb['globalsearch_resultslimit_results_txt'] = 'resultaten';
$wb['globalsearch_noresults_text_txt'] = 'Geen resultaten.';
$wb['globalsearch_noresults_limit_txt'] = '0 resultaten';
$wb['globalsearch_searchfield_watermark_txt'] = 'Zoeken';
$wb['globalsearch_suggestions_text_txt'] = 'Suggesties';
$wb['list_head_txt'] = 'DNS Zone Wizard';
$wb['list_desc_txt'] = 'Create a DNS Zone via a wizard';
$wb['dkim_txt'] = 'DKIM enabled';
$wb['error_no_server_id'] = 'No server provided.';
$wb['error_not_allowed_server_id'] = 'The selected server is not allowed for this account.';
$wb['dnssec_txt'] = 'Sign zone (DNSSEC)';
$wb['list_desc_txt'] = 'DNS Zone via de wizard toevoegen';
$wb['dkim_txt'] = 'DKIM ingeschakeld';
$wb['error_no_server_id'] = 'Geen server opgegeven.';
$wb['error_not_allowed_server_id'] = 'De geselecteerde server mag niet voor dit account gebruikt worden.';
$wb['dnssec_txt'] = 'Zone signeren (DNSSEC)';
?>
interface/web/dns/templates/dns_a_list.htm
@@ -69,8 +69,8 @@
                    <tr>
                        <td><a href="#" data-load-content="dns/dns_{tmpl_var name='type_lowercase'}_edit.php?id={tmpl_var name='id'}">{tmpl_var name="active"}</a></td>
                        <td><a href="#" data-load-content="dns/dns_{tmpl_var name='type_lowercase'}_edit.php?id={tmpl_var name='id'}">{tmpl_var name="type"}</a></td>
                        <td><a href="#" data-load-content="dns/dns_{tmpl_var name='type_lowercase'}_edit.php?id={tmpl_var name='id'}">{tmpl_var name="name"}</a></td>
                        <td><a href="#" data-load-content="dns/dns_{tmpl_var name='type_lowercase'}_edit.php?id={tmpl_var name='id'}">{tmpl_var name="data"}</a></td>
                        <td><a href="#" data-load-content="dns/dns_{tmpl_var name='type_lowercase'}_edit.php?id={tmpl_var name='id'}" data-toggle="tooltip" data-placement="bottom" title="{tmpl_var name='name'}">{tmpl_var name="name"}</a></td>
                        <td><a href="#" data-load-content="dns/dns_{tmpl_var name='type_lowercase'}_edit.php?id={tmpl_var name='id'}" data-toggle="tooltip" data-placement="bottom" title="{tmpl_var name='data'}">{tmpl_var name="data"}</a></td>
                        <td><a href="#" data-load-content="dns/dns_{tmpl_var name='type_lowercase'}_edit.php?id={tmpl_var name='id'}">{tmpl_var name="aux"}</a></td>
                        <td><a href="#" data-load-content="dns/dns_{tmpl_var name='type_lowercase'}_edit.php?id={tmpl_var name='id'}">{tmpl_var name="ttl"}</a></td>
                        <td class="text-right">
interface/web/dns/templates/dns_soa_admin_list.htm
@@ -59,10 +59,10 @@
                    <tr>
                        <td><a href="#" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='id'}">{tmpl_var name="active"}</td>
                        <td><a href="#" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='id'}">{tmpl_var name="sys_groupid"}</a></td>
                        <td><a href="#" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='id'}">{tmpl_var name="server_id"}</a></td>
                        <td><a href="#" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='id'}">{tmpl_var name="origin"}</a></td>
                        <td><a href="#" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='id'}">{tmpl_var name="ns"}</a></td>
                        <td><a href="#" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='id'}">{tmpl_var name="mbox"}</a></td>
                        <td><a href="#" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='id'}" data-toggle="tooltip" data-placement="bottom" title="{tmpl_var name='server_id'}">{tmpl_var name="server_id"}</a></td>
                        <td><a href="#" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='id'}" data-toggle="tooltip" data-placement="bottom" title="{tmpl_var name='origin'}">{tmpl_var name="origin"}</a></td>
                        <td><a href="#" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='id'}" data-toggle="tooltip" data-placement="bottom" title="{tmpl_var name='ns'}">{tmpl_var name="ns"}</a></td>
                        <td><a href="#" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='id'}" data-toggle="tooltip" data-placement="bottom" title="{tmpl_var name='mbox'}">{tmpl_var name="mbox"}</a></td>
                        <td class="text-right">   
                            <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('dns/dns_soa_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                        </td>
@@ -81,5 +81,3 @@
            </tfoot>
            </table>
</div>
interface/web/dns/templates/dns_soa_edit.htm
@@ -170,4 +170,4 @@
        searchFieldWatermark: '',
        resultBoxPosition: ''
    });
</script>
</script>
interface/web/dns/templates/dns_soa_list.htm
@@ -56,10 +56,10 @@
                <tmpl_loop name="records">
                    <tr>
                        <td><a href="#" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='id'}">{tmpl_var name="active"}</td>
                        <td><a href="#" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='id'}">{tmpl_var name="server_id"}</a></td>
                        <td><a href="#" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='id'}">{tmpl_var name="origin"}</a></td>
                        <td><a href="#" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='id'}">{tmpl_var name="ns"}</a></td>
                        <td><a href="#" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='id'}">{tmpl_var name="mbox"}</a></td>
                        <td><a href="#" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='id'}" data-toggle="tooltip" data-placement="bottom" title="{tmpl_var name='server_id'}">{tmpl_var name="server_id"}</a></td>
                        <td><a href="#" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='id'}" data-toggle="tooltip" data-placement="bottom" title="{tmpl_var name='origin'}">{tmpl_var name="origin"}</a></td>
                        <td><a href="#" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='id'}" data-toggle="tooltip" data-placement="bottom" title="{tmpl_var name='ns'}">{tmpl_var name="ns"}</a></td>
                        <td><a href="#" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='id'}" data-toggle="tooltip" data-placement="bottom" title="{tmpl_var name='mbox'}">{tmpl_var name="mbox"}</a></td>
                        <td class="text-right">   
                            <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('dns/dns_soa_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
                        </td>
@@ -78,5 +78,3 @@
            </tfoot>
            </table>
</div>
interface/web/help/list/support_message.list.php
@@ -43,7 +43,8 @@
    'suffix' => '',
    'width'  => '',
    'datasource'=> array (  'type' => 'SQL',
        'querystring'  => 'SELECT userid,username FROM sys_user WHERE {AUTHSQL} ORDER BY username',
//        'querystring'  => 'SELECT userid,username FROM sys_user WHERE {AUTHSQL} ORDER BY username',
        'querystring'  => 'SELECT userid,username FROM sys_user ORDER BY username',
        'keyfield'  => 'userid',
        'valuefield' => 'username'
    ),
interface/web/help/support_message_edit.php
@@ -73,7 +73,7 @@
            }
            $confirmation_message .= "\n\n".$app->tform->lng('message_txt').": \"".$this->dataRecord['message']."\"";
            $confirmation_message .= "\n\nISPConfig: ".($_SERVER['HTTPS'] == 'on' ? 'https://' : 'http://').$_SERVER['HTTP_HOST'];
            $app->functions->mail($sender_email, $subject, $confirmation_message, $recipient_email);
            if ($this->dataRecord['subject'] != '' && $this->dataRecord['message'] != '') $app->functions->mail($sender_email, $subject, $confirmation_message, $recipient_email);
        } else {
            $app->tform->errorMessage .= $app->tform->lng("recipient_or_sender_email_address_not_valid_txt")."<br />";
        }
interface/web/login/index.php
@@ -217,6 +217,7 @@
                        $_SESSION['s']['user']['theme'] = isset($user['app_theme']) ? $user['app_theme'] : 'default';
                        $_SESSION['s']['language'] = $user['language'];
                        $_SESSION["s"]['theme'] = $_SESSION['s']['user']['theme'];
                        if ($loginAs) $_SESSION['s']['plugin_cache'] = $_SESSION['s_old']['plugin_cache'];
                        
                        if(is_file(ISPC_WEB_PATH . '/' . $_SESSION['s']['user']['startmodule'].'/lib/module.conf.php')) {
                            include_once ISPC_WEB_PATH . '/' . $_SESSION['s']['user']['startmodule'].'/lib/module.conf.php';
interface/web/login/lib/lang/nl.lng
@@ -1,5 +1,5 @@
<?php
$wb['error_user_password_empty'] = 'Gebruikersnaam of wachtwoord is niet ingvuld.';
$wb['error_user_password_empty'] = 'Gebruikersnaam of wachtwoord is niet ingevuld.';
$wb['error_user_password_incorrect'] = 'Gebruikersnaam of wachtwoord onjuist.';
$wb['error_user_blocked'] = 'Gebruiker is geblokkeerd.';
$wb['error_user_too_many_logins'] = 'Teveel onjuiste login pogingen, Probeer het nogmaals na 15 minutes';
@@ -13,12 +13,12 @@
$wb['pw_error_length'] = 'De lengte van het wachtwoord is > 256 karakters.';
$wb['username_txt'] = 'Gebruikersnaam';
$wb['password_txt'] = 'Wachtwoord';
$wb['login_button_txt'] = 'Login';
$wb['pw_lost_txt'] = 'Password lost';
$wb['login_button_txt'] = 'Inloggen';
$wb['pw_lost_txt'] = 'Wachtwoord vergeten';
$wb['error_maintenance_mode'] = 'This ISPConfig installation is currently under maintenance. We should be back shortly. Thank you for your patience.';
$wb['login_txt'] = 'Login';
$wb['pw_reset_txt'] = 'Password reset';
$wb['pw_button_txt'] = 'Resend password';
$wb['login_txt'] = 'Inloggen';
$wb['pw_reset_txt'] = 'Wachtwoord herstellen';
$wb['pw_button_txt'] = 'Wachtwoord versturen';
$wb['email_txt'] = 'Email';
$wb['theme_not_compatible'] = 'The chosen theme is not compatible with the current ISPConfig version. Please check for a new version of the theme.<br />The default theme as been activated automatically.';
$wb['back_txt'] = 'Back';
interface/web/login/lib/lang/nl_login_as.lng
@@ -1,9 +1,9 @@
<?php
$wb['login_1_txt'] = 'Do you want to login as user';
$wb['login_2_txt'] = 'If you do so, you can \\"go back\\" by clicking at logout.';
$wb['btn_yes_txt'] = 'Yes, login as Client';
$wb['btn_back_txt'] = 'No, back to list';
$wb['udp_port_help_txt'] = 'Separated by comma';
$wb['login_1_txt'] = 'Wil je inloggen als gebruiker';
$wb['login_2_txt'] = 'Wanneer je doorgaat kun je terugkeren door op afmelden te klikken.';
$wb['btn_yes_txt'] = 'Ja, log me in als deze klant';
$wb['btn_back_txt'] = 'Nee, terug naar het overzicht';
$wb['udp_port_help_txt'] = 'Gescheiden door komma';
$wb['active_txt'] = 'Active';
$wb['firewall_error_unique'] = 'There is already a firewall record for this server.';
$wb['tcp_ports_error_regex'] = 'Character not allowed in tcp port definition. Allowed characters are numbers, \\":\\" and \\",\\".';
interface/web/login/login_as.php
@@ -98,8 +98,8 @@
    <input type="hidden" name="s_pg" value="dashboard" />
    <input type="hidden" name="login_as" value="1" />
    <div class="wf_actions buttons">
      <button class="positive iconstxt icoPositive" type="button" value="'.$wb['btn_yes_txt'].'" data-submit-form="pageForm" data-form-action="/login/index.php"><span>'.$wb['btn_yes_txt'].'</span></button>
      <button class="negative iconstxt icoNegative" type="button" value="'.$wb['btn_back_txt'].'" data-load-content="'.$backlink.'"><span>'.$wb['btn_back_txt'].'</span></button>
      <button class="btn btn-default formbutton-success" type="button" value="'.$wb['btn_yes_txt'].'" data-submit-form="pageForm" data-form-action="/login/index.php"><span>'.$wb['btn_yes_txt'].'</span></button>
      <button class="btn btn-default formbutton-default" value="'.$wb['btn_back_txt'].'" data-load-content="'.$backlink.'"><span>'.$wb['btn_back_txt'].'</span></button>
    </div>
';
?>
interface/web/login/logout.php
@@ -56,8 +56,8 @@
        <input type="hidden" name="s_pg" value="index" />
        <input type="hidden" name="login_as" value="1" />
        <div class="wf_actions buttons">
          <button class="positive iconstxt icoPositive" type="button" value="Yes, re-login as ' . $utype . '" data-submit-form="pageForm" data-form-action="/login/index.php"><span>Yes, re-login as ' . $utype . '</span></button>
          <button class="negative iconstxt icoNegative" type="button" value="No, logout" data-load-content="login/logout.php?l=1"><span>No, logout</span></button>
          <button class="btn btn-default formbutton-success" type="button" value="Yes, re-login as ' . $utype . '" data-submit-form="pageForm" data-form-action="/login/index.php"><span>Yes, re-login as ' . $utype . '</span></button>
          <button class="btn btn-default formbutton-default" type="button" value="No, logout" data-load-content="login/logout.php?l=1"><span>No, logout</span></button>
        </div>
    ';
    exit;
interface/web/mail/lib/lang/nl_mail_user.lng
@@ -4,23 +4,23 @@
$wb['cryptpwd_txt'] = 'Wachtwoord';
$wb['password_strength_txt'] = 'Wachtwoord sterkte';
$wb['active_txt'] = 'Actief';
$wb['email_error_isemail'] = 'Email adress is ongeldig.';
$wb['email_error_isemail'] = 'E-mail adres is ongeldig.';
$wb['email_error_unique'] = 'Duplicaat e-mail adres.';
$wb['autoresponder_text_txt'] = 'Tekst';
$wb['autoresponder_txt'] = 'Actief';
$wb['autoresponder_start_date_txt'] = 'Start op';
$wb['autoresponder_start_date_ispast'] = 'Start datum mag niet in het verleden liggen.';
$wb['autoresponder_end_date_txt'] = 'Eindigd op';
$wb['autoresponder_end_date_txt'] = 'Eindigt op';
$wb['autoresponder_end_date_isgreater'] = 'Einddatum moet later zijn dan de startdatum.';
$wb['no_domain_perm'] = 'U heeft geen toestemming voor dit domein.';
$wb['error_no_pwd'] = 'Wachtwoord is niet ingvuld.';
$wb['error_no_pwd'] = 'Wachtwoord is niet ingevuld.';
$wb['quota_error_isint'] = 'Mailbox grootte moet een numerieke waarde zijn.';
$wb['quota_txt'] = 'Quota';
$wb['server_id_txt'] = 'Server_id';
$wb['password_txt'] = 'Wachtwoord';
$wb['maildir_txt'] = 'Maildir';
$wb['postfix_txt'] = 'Ontvangen inschakelen';
$wb['greylisting_txt'] = 'Enable greylisting';
$wb['greylisting_txt'] = 'Greylisting inschakelen';
$wb['access_txt'] = 'Toegang inschakelen';
$wb['policy_txt'] = 'Spamfilter';
$wb['no_policy'] = '- niet ingeschakeld -';
@@ -30,24 +30,24 @@
$wb['disablepop3_txt'] = 'Uitschakelen POP3';
$wb['duplicate_alias_or_forward_txt'] = 'Er is al een alias of forward met dir e-mailadres.';
$wb['quota_error_value'] = 'Ongeldige quota waarde. Toegestane waarden zijn: 0 = ongelimiteerd of nummerieke waarde > 1';
$wb['move_junk_txt'] = 'Verplaats Spam e-mails naar junk directory';
$wb['move_junk_txt'] = 'Verplaats SPAM e-mails naar junk folder';
$wb['name_txt'] = 'Echte naam';
$wb['name_optional_txt'] = '(Optioneel)';
$wb['autoresponder_active'] = 'Inschakelen autoresponder';
$wb['cc_txt'] = 'Stuur kopie naar';
$wb['cc_error_isemail'] = 'Het  Stuur kopie naar veld bevat geen geldig e-mailadres';
$wb['cc_error_isemail'] = 'Het "Stuur kopie naar" veld bevat geen geldig e-mail adres';
$wb['domain_txt'] = 'Domain';
$wb['now_txt'] = 'Now';
$wb['login_error_unique'] = 'Login is already taken.';
$wb['login_error_regex'] = 'Valid characters are A-Z, a-z, 0-9, ., _ and -.';
$wb['login_txt'] = 'Login (optional)';
$wb['error_login_email_txt'] = 'This login is not allowed. Please enter a different login or use the mail address as login.';
$wb['autoresponder_subject_txt'] = 'Email Subject';
$wb['autoresponder_subject'] = 'Out of office reply';
$wb['generate_password_txt'] = 'Generate Password';
$wb['repeat_password_txt'] = 'Repeat Password';
$wb['password_mismatch_txt'] = 'The passwords do not match.';
$wb['password_match_txt'] = 'The passwords do match.';
$wb['autoresponder_subject_txt'] = 'E-mail onderwerp';
$wb['autoresponder_subject'] = 'Out of office antwoord';
$wb['generate_password_txt'] = 'Genereer wachtwoord';
$wb['repeat_password_txt'] = 'Herhaal wachtwoord';
$wb['password_mismatch_txt'] = 'De wachtwoorden zijn niet gelijk.';
$wb['password_match_txt'] = 'De wachtwoord zijn gelijk.';
$wb['backup_interval_txt'] = 'Backup interval';
$wb['backup_copies_txt'] = 'Number of backup copies';
$wb['no_backup_txt'] = 'No backup';
@@ -55,10 +55,10 @@
$wb['weekly_backup_txt'] = 'Weekly';
$wb['monthly_backup_txt'] = 'Monthly';
$wb['email_error_isascii'] = 'Please do not use special unicode characters for your password. This could lead to problems with your mail client.';
$wb['cc_note_txt'] = '(Separate multiple email addresses with commas)';
$wb['disablesmtp_txt'] = 'Disable SMTP (sending)';
$wb['cc_note_txt'] = '(Meerdere e-mail adressen scheiden met een komma)';
$wb['disablesmtp_txt'] = 'Uitschakelen SMTP (versturen)';
$wb['autoresponder_start_date_is_required'] = 'Start date must be set when Autoresponder is enabled.';
$wb['sender_cc_txt'] = 'Send outgoing copy to';
$wb['sender_cc_error_isemail'] = 'The -Send outgoing copy to- field does not contain a valid email address';
$wb['sender_cc_note_txt'] = '(Separate multiple email addresses with commas)';
$wb['sender_cc_txt'] = 'Stuur uitgaande kopie aan';
$wb['sender_cc_error_isemail'] = 'Het "Stuur uitgaande kopie aan" veld bevat geen geldig e-mail adres';
$wb['sender_cc_note_txt'] = '(Meerdere e-mail adressen scheiden met een komma)';
?>
interface/web/mail/list/mail_alias.list.php
@@ -54,7 +54,7 @@
    'prefix' => "",
    'suffix' => "",
    'width'  => "",
    'value'  => array('y' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('Yes')."</span></div>", 'n' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('No')."</span></div>"));
    'value'  => array('y' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('yes_txt')."</span></div>", 'n' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('no_txt')."</span></div>"));
$liste["item"][] = array( 'field'  => "source",
interface/web/mail/list/mail_aliasdomain.list.php
@@ -54,7 +54,7 @@
    'prefix' => "",
    'suffix' => "",
    'width'  => "",
    'value'  => array('y' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('Yes')."</span></div>", 'n' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('No')."</span></div>"));
    'value'  => array('y' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('yes_txt')."</span></div>", 'n' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('no_txt')."</span></div>"));
$liste["item"][] = array( 'field'  => "source",
interface/web/mail/list/mail_blacklist.list.php
@@ -54,7 +54,7 @@
    'prefix' => "",
    'suffix' => "",
    'width'  => "",
    'value'  => array('y' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('Yes')."</span></div>", 'n' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('No')."</span></div>"));
    'value'  => array('y' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('yes_txt')."</span></div>", 'n' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('no_txt')."</span></div>"));
interface/web/mail/list/mail_content_filter.list.php
@@ -55,7 +55,7 @@
    'prefix' => "",
    'suffix' => "",
    'width'  => "",
    'value'  => array('y' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('Yes')."</span></div>", 'n' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('No')."</span></div>"));
    'value'  => array('y' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('yes_txt')."</span></div>", 'n' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('no_txt')."</span></div>"));
interface/web/mail/list/mail_domain.list.php
@@ -59,7 +59,7 @@
    'prefix' => "",
    'suffix' => "",
    'width'  => "",
    'value'  => array('y' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('Yes')."</span></div>", 'n' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('No')."</span></div>"));
    'value'  => array('y' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('yes_txt')."</span></div>", 'n' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('no_txt')."</span></div>"));
if($_SESSION['s']['user']['typ'] == 'admin') {
interface/web/mail/list/mail_domain_catchall.list.php
@@ -54,7 +54,7 @@
    'prefix' => "",
    'suffix' => "",
    'width'  => "",
    'value'  => array('y' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('Yes')."</span></div>", 'n' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('No')."</span></div>"));
    'value'  => array('y' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('yes_txt')."</span></div>", 'n' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('no_txt')."</span></div>"));
$liste["item"][] = array( 'field'  => "source",
interface/web/mail/list/mail_forward.list.php
@@ -54,7 +54,7 @@
    'prefix' => "",
    'suffix' => "",
    'width'  => "",
    'value'  => array('y' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('Yes')."</span></div>", 'n' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('No')."</span></div>"));
    'value'  => array('y' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('yes_txt')."</span></div>", 'n' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('no_txt')."</span></div>"));
$liste["item"][] = array( 'field'  => "source",
interface/web/mail/list/mail_get.list.php
@@ -54,7 +54,7 @@
    'prefix' => "",
    'suffix' => "",
    'width'  => "",
    'value'  => array('y' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('Yes')."</span></div>", 'n' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('No')."</span></div>"));
    'value'  => array('y' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('yes_txt')."</span></div>", 'n' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('no_txt')."</span></div>"));
$liste["item"][] = array( 'field'  => "server_id",
interface/web/mail/list/mail_relay_recipient.list.php
@@ -54,7 +54,7 @@
    'prefix' => "",
    'suffix' => "",
    'width'  => "",
    'value'  => array('y' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('Yes')."</span></div>", 'n' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('No')."</span></div>"));
    'value'  => array('y' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('yes_txt')."</span></div>", 'n' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('no_txt')."</span></div>"));
$liste["item"][] = array( 'field'  => "server_id",
interface/web/mail/list/mail_spamfilter.list.php
@@ -54,7 +54,7 @@
    'prefix' => "",
    'suffix' => "",
    'width'  => "",
    'value'  => array('1' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('Yes')."</span></div>", '0' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('No')."</span></div>"));
    'value'  => array('1' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('yes_txt')."</span></div>", '0' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('no_txt')."</span></div>"));
$liste["item"][] = array( 'field'  => "server_id",
interface/web/mail/list/mail_transport.list.php
@@ -55,7 +55,7 @@
    'prefix' => "",
    'suffix' => "",
    'width'  => "",
    'value'  => array('y' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('Yes')."</span></div>", 'n' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('No')."</span></div>"));
    'value'  => array('y' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('yes_txt')."</span></div>", 'n' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('no_txt')."</span></div>"));
$liste["item"][] = array( 'field'  => "server_id",
interface/web/mail/list/mail_user.list.php
@@ -87,7 +87,7 @@
    'prefix' => "",
    'suffix' => "",
    'width' => "",
    'value' => array('y' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('Yes')."</span></div>", 'n' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('No')."</span></div>"));
    'value' => array('y' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('yes_txt')."</span></div>", 'n' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('no_txt')."</span></div>"));
$liste["item"][] = array( 'field'  => "postfix",
    'datatype' => "VARCHAR",
@@ -96,7 +96,7 @@
    'prefix' => "",
    'suffix' => "",
    'width'  => "",
    'value'  => array('y' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('Yes')."</span></div>", 'n' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('No')."</span></div>"));
    'value'  => array('y' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('yes_txt')."</span></div>", 'n' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('no_txt')."</span></div>"));
$liste["item"][] = array( 'field'  => "disablesmtp",
    'datatype' => "VARCHAR",
@@ -105,7 +105,7 @@
    'prefix' => "",
    'suffix' => "",
    'width'  => "",
    'value'  => array('n' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('Yes')."</span></div>", 'y' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('No')."</span></div>"));
    'value'  => array('n' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('yes_txt')."</span></div>", 'y' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('no_txt')."</span></div>"));
$liste["item"][] = array( 'field'  => "disableimap",
    'datatype' => "VARCHAR",
@@ -114,7 +114,7 @@
    'prefix' => "",
    'suffix' => "",
    'width'  => "",
    'value'  => array('n' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('Yes')."</span></div>", 'y' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('No')."</span></div>"));
    'value'  => array('n' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('yes_txt')."</span></div>", 'y' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('no_txt')."</span></div>"));
$liste["item"][] = array( 'field'  => "disablepop3",
    'datatype' => "VARCHAR",
@@ -123,6 +123,6 @@
    'prefix' => "",
    'suffix' => "",
    'width'  => "",
    'value'  => array('n' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('Yes')."</span></div>", 'y' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('No')."</span></div>"));
    'value'  => array('n' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('yes_txt')."</span></div>", 'y' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('no_txt')."</span></div>"));
?>
interface/web/mail/list/mail_whitelist.list.php
@@ -54,7 +54,7 @@
    'prefix' => "",
    'suffix' => "",
    'width'  => "",
    'value'  => array('y' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('Yes')."</span></div>", 'n' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('No')."</span></div>"));
    'value'  => array('y' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('yes_txt')."</span></div>", 'n' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('no_txt')."</span></div>"));
$liste["item"][] = array( 'field'  => "server_id",
interface/web/mail/list/spamfilter_blacklist.list.php
@@ -54,7 +54,7 @@
    'prefix' => "",
    'suffix' => "",
    'width'  => "",
    'value'  => array('y' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('Yes')."</span></div>", 'n' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('No')."</span></div>"));
    'value'  => array('y' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('yes_txt')."</span></div>", 'n' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('no_txt')."</span></div>"));
$liste["item"][] = array( 'field'  => "server_id",
interface/web/mail/list/spamfilter_policy.list.php
@@ -65,7 +65,7 @@
    'prefix' => "",
    'suffix' => "",
    'width'  => "",
    'value'  => array('Y' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('Yes')."</span></div>", 'N' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('No')."</span></div>"));
    'value'  => array('Y' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('yes_txt')."</span></div>", 'N' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('no_txt')."</span></div>"));
$liste["item"][] = array( 'field'  => "spam_lover",
@@ -75,7 +75,7 @@
    'prefix' => "",
    'suffix' => "",
    'width'  => "",
    'value'  => array('Y' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('Yes')."</span></div>", 'N' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('No')."</span></div>"));
    'value'  => array('Y' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('yes_txt')."</span></div>", 'N' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('no_txt')."</span></div>"));
$liste["item"][] = array( 'field'  => "banned_files_lover",
@@ -85,7 +85,7 @@
    'prefix' => "",
    'suffix' => "",
    'width'  => "",
    'value'  => array('Y' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('Yes')."</span></div>", 'N' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('No')."</span></div>"));
    'value'  => array('Y' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('yes_txt')."</span></div>", 'N' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('no_txt')."</span></div>"));
$liste["item"][] = array( 'field'  => "bad_header_lover",
@@ -95,7 +95,7 @@
    'prefix' => "",
    'suffix' => "",
    'width'  => "",
    'value'  => array('Y' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('Yes')."</span></div>", 'N' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('No')."</span></div>"));
    'value'  => array('Y' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('yes_txt')."</span></div>", 'N' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('no_txt')."</span></div>"));
interface/web/mail/list/spamfilter_users.list.php
@@ -54,7 +54,7 @@
    'prefix' => "",
    'suffix' => "",
    'width'  => "",
    'value'  => array('Y' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('Yes')."</span></div>", 'N' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('No')."</span></div>"));
    'value'  => array('Y' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('yes_txt')."</span></div>", 'N' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('no_txt')."</span></div>"));
$liste["item"][] = array( 'field'  => "server_id",
interface/web/mail/list/spamfilter_whitelist.list.php
@@ -54,7 +54,7 @@
    'prefix' => "",
    'suffix' => "",
    'width'  => "",
    'value'  => array('y' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('Yes')."</span></div>", 'n' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('No')."</span></div>"));
    'value'  => array('y' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('yes_txt')."</span></div>", 'n' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('no_txt')."</span></div>"));
$liste["item"][] = array( 'field'  => "server_id",
interface/web/mail/list/xmpp_domain.list.php
@@ -59,7 +59,7 @@
    'prefix' => "",
    'suffix' => "",
    'width'  => "",
    'value'  => array('y' => "<div id=\"ir-Yes\" class=\"swap\"><span>Yes</span></div>", 'n' => "<div class=\"swap\" id=\"ir-No\"><span>No</span></div>"));
    'value'  => array('y' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('yes_txt')."</span></div>", 'n' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('no_txt')."</span></div>"));
if($_SESSION['s']['user']['typ'] == 'admin') {
interface/web/mail/mail_domain_edit.php
@@ -241,7 +241,7 @@
        if($_SESSION["s"]["user"]["typ"] != 'admin') {
            // Get the limits of the client
            $client_group_id = $app->functions->intval($_SESSION["s"]["user"]["default_group"]);
            $client = $app->db->queryOneRecord("SELECT limit_maildomain, default_mailserver FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id);
            $client = $app->db->queryOneRecord("SELECT client.mail_servers, limit_maildomain, default_mailserver FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id);
            // When the record is updated
            if($this->id > 0) {
                // restore the server ID if the user is not admin and record is edited
interface/web/mail/mail_user_edit.php
@@ -237,8 +237,13 @@
            $this->dataRecord["homedir"] = $mail_config["homedir_path"];
            
            // Will be overwritten by mail_plugin
            $this->dataRecord['uid'] = -1;
            $this->dataRecord['gid'] = -1;
            if ($mail_config["mailbox_virtual_uidgid_maps"] == 'y') {
                $this->dataRecord['uid'] = -1;
                $this->dataRecord['gid'] = -1;
            } else {
                $this->dataRecord['uid'] = intval($mail_config["mailuser_uid"]);
                $this->dataRecord['gid'] = intval($mail_config["mailuser_gid"]);
            }
                
            //* Check if there is no alias or forward with this address
            $tmp = $app->db->queryOneRecord("SELECT count(forwarding_id) as number FROM mail_forwarding WHERE active = 'y' AND source = ?", $this->dataRecord["email"]);
interface/web/mail/templates/mail_user_list.htm
@@ -59,7 +59,7 @@
                <tbody>
                <tmpl_loop name="records">
                    <tr>
                        <td><a href="#" data-load-content="mail/mail_user_edit.php?id={tmpl_var name='id'}">{tmpl_var name="email"}</a></td>
                        <td><a href="#" data-load-content="mail/mail_user_edit.php?id={tmpl_var name='id'}" data-toggle="tooltip" data-placement="bottom" title="{tmpl_var name='email'}">{tmpl_var name="email"}</a></td>
                        <tmpl_if name="enable_custom_login">
                            <td>
                                <a href="#" data-load-content="mail/mail_user_edit.php?id={tmpl_var name='id'}">{tmpl_var name="login"}</a>
@@ -92,5 +92,3 @@
                </tfoot>
            </table>
</div>
interface/web/mail/xmpp_domain_edit.php
@@ -402,7 +402,7 @@
        //    $this->desyncMailusers($this->dataRecord['domain']);
        // Update DNS Records
        // TODO: Update gets only triggered from main form. WHY?
        $soa = $app->db->queryOneRecord("SELECT id AS zone, sys_userid, sys_groupid, sys_perm_user, sys_perm_group, sys_perm_other FROM dns_soa WHERE active = 'Y' AND  = ?", $this->dataRecord['domain'].'.');
        $soa = $app->db->queryOneRecord("SELECT id AS zone, sys_userid, sys_groupid, sys_perm_user, sys_perm_group, sys_perm_other FROM dns_soa WHERE active = 'Y' AND `origin` = ?", $this->dataRecord['domain'].'.');
        if ( isset($soa) && !empty($soa) ) $this->update_dns($this->dataRecord, $soa);
    }
interface/web/monitor/lib/lang/pl.lng
@@ -24,7 +24,7 @@
$wb['No Refresh'] = 'Nie odświeżaj';
$wb['minutes'] = 'minuty';
$wb['Show Overview'] = 'Pokaż wszystko';
$wb['System State (All Servers)'] = 'Status systemu (Wszystkie serwery)';
$wb['System State (All Servers)'] = 'Status systemu';
$wb['Hardware-Information'] = 'Informacje o sprzęcie';
$wb['Show CPU info'] = 'Pokaż informacje o procesorze';
$wb['Server State'] = 'Status serwera';
interface/web/sites/ajax_get_ip.php
@@ -39,13 +39,15 @@
$client_group_id = $app->functions->intval($_GET["client_group_id"]);
$ip_type = $_GET['ip_type'];
if($_SESSION["s"]["user"]["typ"] == 'admin' or $app->auth->has_clients($_SESSION['s']['user']['userid'])) {
//if($_SESSION["s"]["user"]["typ"] == 'admin' or $app->auth->has_clients($_SESSION['s']['user']['userid'])) {
    //* Get global web config
    $web_config = $app->getconf->get_server_config($server_id, 'web');
    $tmp = $app->db->queryOneRecord("SELECT client_id FROM sys_group WHERE groupid = ?", $client_group_id);
    $sql = "SELECT ip_address FROM server_ip WHERE ip_type = ? AND server_id = ? AND (client_id = 0 OR client_id=?)";
    $sql = "SELECT ip_address FROM server_ip WHERE ip_type = ? AND server_id = ?";
    $ips = $app->db->queryAllRecords($sql, $ip_type, $server_id);
    $ips = $app->db->queryAllRecords($sql, $ip_type, $server_id, $tmp['groupid']);
    // $ip_select = "<option value=''></option>";
    if($ip_type == 'IPv4'){
        $ip_select = ($web_config['enable_ip_wildcard'] == 'y')?"*#":"";
@@ -60,7 +62,7 @@
    }
    unset($tmp);
    unset($ips);
}
//}
echo substr($ip_select, 0, -1);
?>
interface/web/sites/aps_install_package.php
@@ -129,7 +129,7 @@
if(!empty($domains))
{
    $set = array();
    $set[] = '<select name="main_domain" id="main_domain" class="form-control">';
    $set[] = '<select name="main_domain" id="main_domain" class="form-control" style="width:100%; height:100%; min-width:170px;">';
    foreach($domains as $domain)
    {
        $selected = '';
interface/web/sites/database_quota_stats.php
@@ -29,7 +29,7 @@
        foreach($tmp_array as $database_name => $data) {
            $db_name = $data['database_name'];
            $temp = $app->db->queryOneRecord("SELECT client.username, web_database.database_quota FROM web_database, sys_group, client WHERE sys_group.client_id = client.client_id AND web_database.database_name = ?", $db_name);
            $temp = $app->db->queryOneRecord("SELECT client.username, web_database.database_quota FROM web_database, sys_group, client WHERE sys_group.groupid = web_database.sys_groupid AND sys_group.client_id = client.client_id AND web_database.database_name = ?", $db_name);
            if(is_array($temp) && !empty($temp)) {
                $monitor_data[$server_id.'.'.$db_name]['database_name'] = $data['database_name'];
                $monitor_data[$server_id.'.'.$db_name]['client'] = isset($temp['username']) ? $temp['username'] : '';
@@ -57,7 +57,9 @@
        if(!empty($monitor_data[$rec['server_id'].'.'.$database_name])){
            $rec['database'] = $monitor_data[$rec['server_id'].'.'.$database_name]['database_name'];
            $rec['client'] = $monitor_data[$rec['server_id'].'.'.$database_name]['client'];
            $rec['server_name'] = $app->db->queryOneRecord("SELECT server_name FROM server WHERE server_id = ?", $rec['server_id'])['server_name'];
            $tmp = $app->db->queryOneRecord("SELECT server_name FROM server WHERE server_id = ?", $rec['server_id']);
            $rec['server_name'] = $tmp['server_name'];
            unset($tmp);
            $rec['used'] = $monitor_data[$rec['server_id'].'.'.$database_name]['used'];
            $rec['quota'] = $monitor_data[$rec['server_id'].'.'.$database_name]['quota'];
@@ -78,7 +80,8 @@
            $client = $app->db->queryOneRecord("SELECT * FROM client WHERE client_id = ?", $sys_group['client_id']);
            $rec['client'] = $client['username'];
            $rec['used'] = 'n/a';
            $rec['quota'] = 'n/a';
            if (empty($rec['database_quota'])) $rec['database_quota'] = 0;
            $rec['quota'] = $rec['database_quota'];
        }
        $rec['id'] = $rec[$this->idx_key];
interface/web/sites/lib/lang/nl.lng
@@ -9,27 +9,27 @@
$wb['Webdav-User'] = 'Webdav-gebruiker';
$wb['Folder'] = 'Protected Folders';
$wb['Folder users'] = 'Protected Folder Users';
$wb['Command Line'] = 'Command Line';
$wb['Command Line'] = 'Opdrachtregel';
$wb['Shell-User'] = 'Shell-gebruiker';
$wb['Cron Jobs'] = 'Cron Jobs';
$wb['Statistics'] = 'Statististieken';
$wb['Statistics'] = 'Statistieken';
$wb['Web traffic'] = 'Web Traffic';
$wb['Website quota (Harddisk)'] = 'Website quota (Harddisk)';
$wb['Cron'] = 'Cron';
$wb['Stats'] = 'Statististieken';
$wb['Stats'] = 'Statistieken';
$wb['Shell'] = 'Shell';
$wb['Webdav'] = 'WebDAV';
$wb['FTP'] = 'FTP';
$wb['Options'] = 'Opties';
$wb['Domain'] = 'Domain';
$wb['Domain'] = 'Domein';
$wb['Redirect'] = 'Redirect';
$wb['SSL'] = 'SSL';
$wb['Sites'] = 'Sites';
$wb['Database User'] = 'Database Users';
$wb['Database User'] = 'Database gebruikers';
$wb['APS Installer'] = 'APS Installer';
$wb['Available packages'] = 'Available packages';
$wb['Installed packages'] = 'Installed packages';
$wb['Update Packagelist'] = 'Update Packagelist';
$wb['Subdomain (Vhost)'] = 'Subdomain (Vhost)';
$wb['Available packages'] = 'Beschikbare pakketten';
$wb['Installed packages'] = 'Geïnstalleerde pakketten';
$wb['Update Packagelist'] = 'Pakkettenlijst bijwerken';
$wb['Subdomain (Vhost)'] = 'Subdomein (Vhost)';
$wb['error_proxy_requires_url'] = 'Redirect Type \\"proxy\\" requires a URL as the redirect path.';
?>
interface/web/sites/lib/lang/nl_aps.lng
@@ -1,29 +1,29 @@
<?php
$wb['overview_txt'] = 'Overview';
$wb['overview_txt'] = 'Overzicht';
$wb['administration_txt'] = 'Administration';
$wb['available_packages_txt'] = 'Available packages';
$wb['installed_packages_txt'] = 'Installed packages';
$wb['yes_txt'] = 'Yes';
$wb['no_txt'] = 'No';
$wb['available_packages_txt'] = 'Beschikbare pakketten';
$wb['installed_packages_txt'] = 'Geïnstalleerde pakketten';
$wb['yes_txt'] = 'Ja';
$wb['no_txt'] = 'Nee';
$wb['invalid_id_txt'] = 'No valid ID has been provided.';
$wb['details_txt'] = 'Details';
$wb['version_txt'] = 'Version';
$wb['category_txt'] = 'Category';
$wb['version_txt'] = 'Versie';
$wb['category_txt'] = 'Categorie';
$wb['homepage_txt'] = 'Homepage';
$wb['supported_languages_txt'] = 'Supported languages';
$wb['description_txt'] = 'Description';
$wb['config_script_txt'] = 'Configuration script';
$wb['installed_size_txt'] = 'Size after installation';
$wb['license_txt'] = 'License';
$wb['screenshots_txt'] = 'Screenshots';
$wb['supported_languages_txt'] = 'Ondersteunde talen';
$wb['description_txt'] = 'Omschrijving';
$wb['config_script_txt'] = 'Configuratie script';
$wb['installed_size_txt'] = 'Grootte na installatie';
$wb['license_txt'] = 'Licentie';
$wb['screenshots_txt'] = 'Schermafbeeldingen';
$wb['changelog_txt'] = 'Changelog';
$wb['server_requirements_txt'] = 'Server requirements';
$wb['php_extensions_txt'] = 'PHP extensions';
$wb['php_settings_txt'] = 'PHP settings';
$wb['supported_php_versions_txt'] = 'Supported PHP versions';
$wb['php_extensions_txt'] = 'PHP extensies';
$wb['php_settings_txt'] = 'PHP instellingen';
$wb['supported_php_versions_txt'] = 'Ondersteunde PHP versies';
$wb['database_txt'] = 'Database';
$wb['settings_txt'] = 'Settings';
$wb['install_package_txt'] = 'Install this package';
$wb['settings_txt'] = 'Instellingen';
$wb['install_package_txt'] = 'Installeer dit pakket';
$wb['installation_txt'] = 'Installation';
$wb['install_location_txt'] = 'Install location';
$wb['acceptance_txt'] = 'Acceptance';
@@ -52,7 +52,7 @@
$wb['installation_success_txt'] = 'Installed';
$wb['installation_remove_txt'] = 'Removal planned';
$wb['packagelist_update_finished_txt'] = 'APS Packagelist update finished.';
$wb['btn_install_txt'] = 'Install';
$wb['btn_cancel_txt'] = 'Cancel';
$wb['btn_install_txt'] = 'Installeren';
$wb['btn_cancel_txt'] = 'Annuleren';
$wb['limit_aps_txt'] = 'The max. number of APS instances for your account is reached.';
?>
interface/web/sites/lib/lang/nl_aps_instances_list.lng
@@ -1,11 +1,11 @@
<?php
$wb['list_head_txt'] = 'Installed packages';
$wb['name_txt'] = 'Name';
$wb['version_txt'] = 'Version';
$wb['customer_txt'] = 'Client';
$wb['list_head_txt'] = 'Geïnstalleerde pakketten';
$wb['name_txt'] = 'Naam';
$wb['version_txt'] = 'Versie';
$wb['customer_txt'] = 'Klant';
$wb['status_txt'] = 'Status';
$wb['install_location_txt'] = 'Install location';
$wb['pkg_delete_confirmation'] = 'Do you really want to delete this installation?';
$wb['filter_txt'] = 'Search';
$wb['delete_txt'] = 'Delete';
$wb['install_location_txt'] = 'Installatie pad';
$wb['pkg_delete_confirmation'] = 'Weet je zeker dat je deze installatie wilt verwijderen ?';
$wb['filter_txt'] = 'Zoeken';
$wb['delete_txt'] = 'Verwijderen';
?>
interface/web/sites/lib/lang/nl_aps_packages_list.lng
@@ -1,8 +1,8 @@
<?php
$wb['list_head_txt'] = 'Available packages';
$wb['name_txt'] = 'Name';
$wb['version_txt'] = 'Version';
$wb['category_txt'] = 'Category';
$wb['status_txt'] = 'Unlocked';
$wb['filter_txt'] = 'Search';
$wb['list_head_txt'] = 'Beschikbare pakketten';
$wb['name_txt'] = 'Naam';
$wb['version_txt'] = 'Versie';
$wb['category_txt'] = 'Categorie';
$wb['status_txt'] = 'Beschikbaar';
$wb['filter_txt'] = 'Zoeken';
?>
interface/web/sites/lib/lang/nl_aps_update_packagelist.lng
@@ -1,7 +1,7 @@
<?php
$wb['head_txt'] = 'Update Packagelist';
$wb['head_txt'] = 'Pakketten bijwerken';
$wb['list_desc_txt'] = '';
$wb['btn_start_txt'] = 'Update Packagelist';
$wb['btn_cancel_txt'] = 'Cancel';
$wb['legend_txt'] = 'Here you can update the list of available packages. Please note that this can take up to five minutes. You can leave this page if you like; the process will continue in the background.';
$wb['btn_start_txt'] = 'Pakketten bijwerken';
$wb['btn_cancel_txt'] = 'Annuleren';
$wb['legend_txt'] = 'Via deze pagina is het mogelijk om de pakkettenlijst bij te werken. Let op dat het bijwerken meer dan 5 minuten kan duren. Je kunt deze pagina verlaten, op de achtergrond zal het bijwerken dan afgerond worden.';
?>
interface/web/sites/lib/lang/nl_backup_stats_list.lng
@@ -1,10 +1,10 @@
<?php
$wb['list_head_txt'] = 'Backup Stats';
$wb['list_head_txt'] = 'Backup statistieken';
$wb['database_name_txt'] = '';
$wb['active_txt'] = 'Active';
$wb['domain_txt'] = 'Domain';
$wb['backup_count_txt'] = 'Backup count';
$wb['active_txt'] = 'Actief';
$wb['domain_txt'] = 'Domein';
$wb['backup_count_txt'] = 'Backup aantal';
$wb['backup_server_txt'] = 'Server';
$wb['backup_interval_txt'] = 'Interval / cnt.';
$wb['backup_size_txt'] = 'Backupsize';
$wb['backup_size_txt'] = 'Backup grootte';
?>
interface/web/sites/lib/lang/nl_database.lng
@@ -6,9 +6,9 @@
$wb['database_password_txt'] = 'Database wachtwoord';
$wb['password_strength_txt'] = 'Wachtwoord sterkte';
$wb['database_charset_txt'] = 'Database karkakterset';
$wb['remote_access_txt'] = 'Remote toegang';
$wb['remote_ips_txt'] = 'Remote toegang IPs (IP adressen gescheiden door een komma, niet ingevuld betekend toegang voor <i>elk IP-adres</i>)';
$wb['database_remote_error_ips'] = 'Ten minste Ã©Ã©n van de ingevulde IP-adressen is ongeldig.';
$wb['remote_access_txt'] = 'Externe toegang';
$wb['remote_ips_txt'] = 'Externe toegang IPs (IP adressen gescheiden door een komma, niet ingevuld betekent toegang voor <i>elk IP-adres</i>)';
$wb['database_remote_error_ips'] = 'Ten minste één van de ingevulde IP-adressen is ongeldig.';
$wb['client_txt'] = 'Klant';
$wb['active_txt'] = 'Actief';
$wb['database_name_error_empty'] = 'Databasenaam is niet ingvuld.';
@@ -23,24 +23,24 @@
$wb['database_name_error_len'] = 'Databasenaam - {db} - is te lang. De max. lengte van de databasenaam incl. voorvoegsel is 64 karakters.';
$wb['database_user_error_len'] = 'Databasenaam - {user}- is te lang. De max. lengte van de database gebruikersnaam incl. voorvoegsel is 16 karakters.';
$wb['parent_domain_id_txt'] = 'Site';
$wb['database_site_error_empty'] = 'Select the site to which the database belongs.';
$wb['select_site_txt'] = '- Select Site -';
$wb['btn_save_txt'] = 'Save';
$wb['btn_cancel_txt'] = 'Cancel';
$wb['generate_password_txt'] = 'Generate Password';
$wb['database_site_error_empty'] = 'Selecteer de site waar deze database aan gelinkt moet worden.';
$wb['select_site_txt'] = '- Selecteer Site -';
$wb['btn_save_txt'] = 'Opslaan';
$wb['btn_cancel_txt'] = 'Annuleren';
$wb['generate_password_txt'] = 'Genereer wachtwoord';
$wb['repeat_password_txt'] = 'Repeat Password';
$wb['password_mismatch_txt'] = 'The passwords do not match.';
$wb['password_match_txt'] = 'The passwords do match.';
$wb['globalsearch_resultslimit_of_txt'] = 'of';
$wb['globalsearch_resultslimit_results_txt'] = 'results';
$wb['globalsearch_noresults_text_txt'] = 'No results.';
$wb['globalsearch_noresults_limit_txt'] = '0 results';
$wb['globalsearch_searchfield_watermark_txt'] = 'Search';
$wb['globalsearch_suggestions_text_txt'] = 'Suggestions';
$wb['database_ro_user_txt'] = 'Read-only database user';
$wb['optional_txt'] = 'optional';
$wb['select_dbuser_txt'] = 'Select database user';
$wb['no_dbuser_txt'] = 'None';
$wb['globalsearch_noresults_text_txt'] = 'Geen resultaten.';
$wb['globalsearch_noresults_limit_txt'] = '0 resultaten';
$wb['globalsearch_searchfield_watermark_txt'] = 'Zoeken';
$wb['globalsearch_suggestions_text_txt'] = 'Suggesties';
$wb['database_ro_user_txt'] = 'Read-only database gebruiker';
$wb['optional_txt'] = 'optioneel';
$wb['select_dbuser_txt'] = 'Selecteer database gebruiker';
$wb['no_dbuser_txt'] = 'Geen';
$wb['database_client_differs_txt'] = 'The client of the parent web and the database do not match.';
$wb['database_user_missing_txt'] = 'Please select a database user for this database.';
$wb['limit_database_quota_txt'] = 'Database quota';
interface/web/sites/lib/lang/nl_database_admin_list.lng
@@ -1,7 +1,7 @@
<?php
$wb['list_head_txt'] = 'Database';
$wb['active_txt'] = 'Actief';
$wb['remote_access_txt'] = 'Remote toegang';
$wb['remote_access_txt'] = 'Externe toegang';
$wb['server_id_txt'] = 'Server';
$wb['database_user_txt'] = 'Database gebruiker';
$wb['database_name_txt'] = 'Database naam';
interface/web/sites/lib/lang/nl_database_list.lng
@@ -1,7 +1,7 @@
<?php
$wb['list_head_txt'] = 'Database';
$wb['active_txt'] = 'Actief';
$wb['remote_access_txt'] = 'Remote toegang';
$wb['remote_access_txt'] = 'Externe toegang';
$wb['server_id_txt'] = 'Server';
$wb['database_user_txt'] = 'Database gebruiker';
$wb['database_name_txt'] = 'Database naam';
interface/web/sites/lib/lang/nl_database_quota_stats_list.lng
@@ -1,8 +1,8 @@
<?php
$wb['database_txt'] = 'Database';
$wb['server_name_txt'] = 'Server';
$wb['client_txt'] = 'Client';
$wb['used_txt'] = 'Used space';
$wb['client_txt'] = 'Klant';
$wb['used_txt'] = 'Gebruikte ruimte';
$wb['quota_txt'] = 'Quota';
$wb['percentage_txt'] = 'Used in %';
$wb['percentage_txt'] = 'Gebruikt in %';
?>
interface/web/sites/lib/lang/nl_database_user.lng
@@ -1,24 +1,24 @@
<?php
$wb['database_user_txt'] = 'Database user';
$wb['database_password_txt'] = 'Database password';
$wb['password_strength_txt'] = 'Password strength';
$wb['client_txt'] = 'Client';
$wb['active_txt'] = 'Active';
$wb['database_user_error_empty'] = 'Database user is empty.';
$wb['database_user_error_unique'] = 'There is already a database user with this name on the server. To get a unique name, e.g. prepend your domain name to the username.';
$wb['database_user_error_regex'] = 'Invalid database user name. The username may contain these characters: a-z, A-Z, 0-9 and the underscore. Length: 2 - 64 characters.';
$wb['database_user_error_len'] = 'Database username - {user} - too long. The max. database username length incl. prefix is 16 chars.';
$wb['btn_save_txt'] = 'Save';
$wb['btn_cancel_txt'] = 'Cancel';
$wb['generate_password_txt'] = 'Generate Password';
$wb['repeat_password_txt'] = 'Repeat Password';
$wb['password_mismatch_txt'] = 'The passwords do not match.';
$wb['password_match_txt'] = 'The passwords do match.';
$wb['globalsearch_resultslimit_of_txt'] = 'of';
$wb['globalsearch_resultslimit_results_txt'] = 'results';
$wb['globalsearch_noresults_text_txt'] = 'No results.';
$wb['globalsearch_noresults_limit_txt'] = '0 results';
$wb['globalsearch_searchfield_watermark_txt'] = 'Search';
$wb['globalsearch_suggestions_text_txt'] = 'Suggestions';
$wb['limit_database_user_txt'] = 'The max. number of database users is reached.';
$wb['database_user_txt'] = 'Database gebruiker';
$wb['database_password_txt'] = 'Database wachtwoord';
$wb['password_strength_txt'] = 'Wachtwoord sterkte';
$wb['client_txt'] = 'Klant';
$wb['active_txt'] = 'Actief';
$wb['database_user_error_empty'] = 'Database gebruiker is leeg.';
$wb['database_user_error_unique'] = 'Er bestaat al een database gebruiker met deze naam op deze server. Voeg bv. de domeinnaam toe aan de gebruikersnaam om een unieke combinatie te krijgen.';
$wb['database_user_error_regex'] = 'Database gebruiker is niet correct. De gebruikersnaam mag de volgende karakters bevatten: a-z. A-Z. 0-9 en evt. een underscore. De lengte mag tussen de 2 en 64 karakters bedragen.';
$wb['database_user_error_len'] = 'Database gebruikernaam - {user} - is te lang. De max. database gebruikernaam lengte incl. prefix is 16 karakters.';
$wb['btn_save_txt'] = 'Opslaan';
$wb['btn_cancel_txt'] = 'Annuleren';
$wb['generate_password_txt'] = 'Genereer wachtwoord';
$wb['repeat_password_txt'] = 'Herhaal wachtwoord';
$wb['password_mismatch_txt'] = 'De wachtwoorden zijn niet gelijk.';
$wb['password_match_txt'] = 'De wachtwoorden zijn gelijk.';
$wb['globalsearch_resultslimit_of_txt'] = 'van';
$wb['globalsearch_resultslimit_results_txt'] = 'resultaten';
$wb['globalsearch_noresults_text_txt'] = 'Geen resultaten.';
$wb['globalsearch_noresults_limit_txt'] = '0 resultaten';
$wb['globalsearch_searchfield_watermark_txt'] = 'Zoeken';
$wb['globalsearch_suggestions_text_txt'] = 'Suggesties';
$wb['limit_database_user_txt'] = 'Het max. aantal database gebruikers is bereikt.';
?>
interface/web/sites/lib/lang/nl_database_user_admin_list.lng
@@ -1,6 +1,6 @@
<?php
$wb['list_head_txt'] = 'Database User';
$wb['database_user_txt'] = 'Database user';
$wb['add_new_record_txt'] = 'Add new User';
$wb['sys_groupid_txt'] = 'Client';
$wb['list_head_txt'] = 'Database gebruikers';
$wb['database_user_txt'] = 'Database gebruiker';
$wb['add_new_record_txt'] = 'Toevoegen nieuwe gebruiker';
$wb['sys_groupid_txt'] = 'Klant';
?>
interface/web/sites/lib/lang/nl_database_user_list.lng
@@ -1,5 +1,5 @@
<?php
$wb['list_head_txt'] = 'Database user';
$wb['database_user_txt'] = 'Database user';
$wb['add_new_record_txt'] = 'Add new user';
$wb['list_head_txt'] = 'Database gebruikers';
$wb['database_user_txt'] = 'Database gebruiker';
$wb['add_new_record_txt'] = 'Toevoegen nieuwe gebruiker';
?>
interface/web/sites/lib/lang/nl_user_quota_stats_list.lng
@@ -1,9 +1,9 @@
<?php
$wb['list_head_txt'] = 'Website harddisk quota';
$wb['domain_txt'] = 'Domain / Website';
$wb['domain_txt'] = 'Domein / Website';
$wb['system_user_txt'] = 'Linux gebruiker';
$wb['used_txt'] = 'Gebruikte ruimte';
$wb['hard_txt'] = 'Harde limiet';
$wb['soft_txt'] = 'Zachte limiet';
$wb['files_txt'] = 'Single files';
$wb['files_txt'] = 'Aantal bestanden';
?>
interface/web/sites/lib/lang/nl_web_domain.lng
@@ -27,7 +27,7 @@
$wb['traffic_quota_txt'] = 'Traffic quota';
$wb['cgi_txt'] = 'CGI';
$wb['ssi_txt'] = 'SSI';
$wb['errordocs_txt'] = 'Own Error-documenten';
$wb['errordocs_txt'] = 'Eigen error documenten';
$wb['subdomain_txt'] = 'Auto-subdomein';
$wb['ssl_txt'] = 'SSL';
$wb['suexec_txt'] = 'SuEXEC';
@@ -72,7 +72,7 @@
$wb['save_certificate_txt'] = 'Save certificate';
$wb['create_certificate_txt'] = 'Create certificate';
$wb['delete_certificate_txt'] = 'Delete certificate';
$wb['ipv6_address_txt'] = 'IPv6-Address';
$wb['ipv6_address_txt'] = 'IPv6-Adres';
$wb['nginx_directives_txt'] = 'nginx Directives';
$wb['seo_redirect_txt'] = 'SEO Redirect';
$wb['non_www_to_www_txt'] = 'Non-www -&gt; www';
@@ -93,7 +93,7 @@
$wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
$wb['ssl_key_txt'] = 'SSL Key';
$wb['perl_txt'] = 'Perl';
$wb['fastcgi_php_version_txt'] = 'PHP Version';
$wb['fastcgi_php_version_txt'] = 'PHP Versie';
$wb['pm_txt'] = 'PHP-FPM Process Manager';
$wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
$wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
interface/web/sites/lib/lang/nl_web_folder.lng
@@ -1,8 +1,8 @@
<?php
$wb['server_id_txt'] = 'Server';
$wb['parent_domain_id_txt'] = 'Website';
$wb['path_txt'] = 'Path';
$wb['active_txt'] = 'Active';
$wb['path_error_regex'] = 'Invalid folder path.';
$wb['error_folder_already_protected_txt'] = 'There is already a record for this folder.';
$wb['path_txt'] = 'Pad';
$wb['active_txt'] = 'Actief';
$wb['path_error_regex'] = 'Folder pad is niet correct.';
$wb['error_folder_already_protected_txt'] = 'Deze folder bestaat al.';
?>
interface/web/sites/lib/lang/nl_web_folder_list.lng
@@ -1,8 +1,8 @@
<?php
$wb['list_head_txt'] = 'Folder';
$wb['active_txt'] = 'Active';
$wb['active_txt'] = 'Actief';
$wb['server_id_txt'] = 'Server';
$wb['parent_domain_id_txt'] = 'Website';
$wb['path_txt'] = 'Path';
$wb['add_new_record_txt'] = 'Add new Folder';
$wb['add_new_record_txt'] = 'Toevoegen nieuwe folder';
?>
interface/web/sites/lib/lang/nl_web_folder_user.lng
@@ -1,14 +1,14 @@
<?php
$wb['web_folder_id_txt'] = 'Folder';
$wb['username_txt'] = 'Username';
$wb['password_txt'] = 'Password';
$wb['active_txt'] = 'Active';
$wb['folder_error_empty'] = 'No web folder selecetd.';
$wb['password_strength_txt'] = 'Password strength';
$wb['generate_password_txt'] = 'Generate Password';
$wb['repeat_password_txt'] = 'Repeat Password';
$wb['password_mismatch_txt'] = 'The passwords do not match.';
$wb['password_match_txt'] = 'The passwords do match.';
$wb['no_folder_perm'] = 'You have no permission for this folder.';
$wb['error_user_exists_already_txt'] = 'There is already a record for this user.';
$wb['username_txt'] = 'Gebruikersnaam';
$wb['password_txt'] = 'Wachtwoord';
$wb['active_txt'] = 'Actief';
$wb['folder_error_empty'] = 'Geen webfolder geselecteerd.';
$wb['password_strength_txt'] = 'Wachtwoord sterkte';
$wb['generate_password_txt'] = 'Genereer wachtwoord';
$wb['repeat_password_txt'] = 'Herhaal wachtwoord';
$wb['password_mismatch_txt'] = 'De wachtwoorden zijn niet gelijk.';
$wb['password_match_txt'] = 'De wachtwoorden zijn gelijk.';
$wb['no_folder_perm'] = 'Je hebt geen toegang tot deze folder.';
$wb['error_user_exists_already_txt'] = 'Deze gebruiker bestaat al.';
?>
interface/web/sites/lib/lang/nl_web_folder_user_list.lng
@@ -1,7 +1,7 @@
<?php
$wb['list_head_txt'] = 'Folder User';
$wb['active_txt'] = 'Active';
$wb['list_head_txt'] = 'Folder gebruiker';
$wb['active_txt'] = 'Actief';
$wb['web_folder_id_txt'] = 'Folder';
$wb['username_txt'] = 'Username';
$wb['add_new_record_txt'] = 'Add new Folder User';
$wb['username_txt'] = 'Gebruikersnaam';
$wb['add_new_record_txt'] = 'Toevoegen nieuwe folder gebruiker';
?>
interface/web/sites/lib/lang/nl_web_sites_stats_list.lng
@@ -1,9 +1,9 @@
<?php
$wb['list_head_txt'] = 'Web traffic';
$wb['list_head_txt'] = 'Web verkeer';
$wb['domain_txt'] = 'Domein';
$wb['this_month_txt'] = 'Deze maand';
$wb['last_month_txt'] = 'Vorige maand';
$wb['this_year_txt'] = 'Dit jaar';
$wb['last_year_txt'] = 'Vorig jaar';
$wb['sum_txt'] = 'Sum';
$wb['sum_txt'] = 'Som';
?>
interface/web/sites/lib/lang/nl_web_subdomain.lng
@@ -4,7 +4,7 @@
$wb['ssl_organisation_txt'] = 'Organisatie';
$wb['ssl_organisation_unit_txt'] = 'Organisatie afdeling';
$wb['ssl_country_txt'] = 'Land';
$wb['ssl_request_txt'] = 'SSL Request';
$wb['ssl_request_txt'] = 'SSL aanvraag';
$wb['ssl_cert_txt'] = 'SSL Certificaat';
$wb['ssl_bundle_txt'] = 'SSL Bundel';
$wb['ssl_action_txt'] = 'SSL Actie';
@@ -33,18 +33,18 @@
$wb['limit_web_subdomain_txt'] = 'Het max. aantal web subdomeinen voor uw account is bereikt.';
$wb['apache_directives_txt'] = 'Apache directives';
$wb['domain_error_empty'] = 'Domein is niet ingvuld.';
$wb['domain_error_unique'] = 'Er is al eenwebsite of sub / aliasdomein met deze domeinnaam.';
$wb['domain_error_unique'] = 'Er is al een website of sub / aliasdomein met deze domeinnaam.';
$wb['domain_error_regex'] = 'Domainnaam ongeldig.';
$wb['host_txt'] = 'Host';
$wb['redirect_error_regex'] = 'Ongeldig redirect pad. Geldige redirects zijn bijvoorbeeld: /test/ or http://www.domain.tld/test/';
$wb['no_redirect_txt'] = 'No redirect';
$wb['no_flag_txt'] = 'No flag';
$wb['domain_error_wildcard'] = 'Wildcard subdomains are not allowed.';
$wb['no_redirect_txt'] = 'Geen redirect';
$wb['no_flag_txt'] = 'Geen flag';
$wb['domain_error_wildcard'] = 'Wildcard subdomeinen zijn niet toegestaan.';
$wb['proxy_directives_txt'] = 'Proxy Directives';
$wb['available_proxy_directive_snippets_txt'] = 'Available Proxy Directive Snippets:';
$wb['error_proxy_requires_url'] = 'Redirect Type \\"proxy\\" requires a URL as the redirect path.';
$wb['http_port_txt'] = 'HTTP Port';
$wb['https_port_txt'] = 'HTTPS Port';
$wb['http_port_error_regex'] = 'HTTP Port invalid.';
$wb['https_port_error_regex'] = 'HTTPS Port invalid.';
$wb['http_port_error_regex'] = 'HTTP Port niet correct.';
$wb['https_port_error_regex'] = 'HTTPS Port niet correct.';
?>
interface/web/sites/lib/lang/nl_web_vhost_domain.lng
@@ -70,10 +70,10 @@
$wb['disabled_txt'] = 'Disabled';
$wb['no_redirect_txt'] = 'No redirect';
$wb['no_flag_txt'] = 'No flag';
$wb['save_certificate_txt'] = 'Save certificate';
$wb['save_certificate_txt'] = 'Certificaat opslaan';
$wb['create_certificate_txt'] = 'Create certificate';
$wb['delete_certificate_txt'] = 'Delete certificate';
$wb['ipv6_address_txt'] = 'IPv6-Address';
$wb['delete_certificate_txt'] = 'Certificaat verwijderen';
$wb['ipv6_address_txt'] = 'IPv6-Adres';
$wb['nginx_directives_txt'] = 'nginx Directives';
$wb['seo_redirect_txt'] = 'SEO Redirect';
$wb['non_www_to_www_txt'] = 'Non-www -&gt; www';
@@ -90,11 +90,11 @@
$wb['pm_start_servers_error_regex'] = 'PHP-FPM pm.start_servers must be a positive integer value.';
$wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM pm.min_spare_servers must be a positive integer value.';
$wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM pm.max_spare_servers must be a positive integer value.';
$wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
$wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
$wb['hd_quota_error_regex'] = 'Harddisk quota is niet correct.';
$wb['traffic_quota_error_regex'] = 'Traffic quota is niet correct.';
$wb['ssl_key_txt'] = 'SSL Key';
$wb['perl_txt'] = 'Perl';
$wb['fastcgi_php_version_txt'] = 'PHP Version';
$wb['fastcgi_php_version_txt'] = 'PHP Versie';
$wb['pm_txt'] = 'PHP-FPM Process Manager';
$wb['pm_process_idle_timeout_txt'] = 'PHP-FPM pm.process_idle_timeout';
$wb['pm_max_requests_txt'] = 'PHP-FPM pm.max_requests';
@@ -113,38 +113,38 @@
$wb['proxy_directives_txt'] = 'Proxy Directives';
$wb['available_proxy_directive_snippets_txt'] = 'Available Proxy Directive Snippets:';
$wb['no_server_error'] = 'No server selected.';
$wb['no_backup_txt'] = 'No backup';
$wb['daily_backup_txt'] = 'Daily';
$wb['weekly_backup_txt'] = 'Weekly';
$wb['monthly_backup_txt'] = 'Monthly';
$wb['no_backup_txt'] = 'Geen backup';
$wb['daily_backup_txt'] = 'Dagelijks';
$wb['weekly_backup_txt'] = 'Wekelijks';
$wb['monthly_backup_txt'] = 'Maandelijks';
$wb['rewrite_rules_txt'] = 'Rewrite Rules';
$wb['invalid_rewrite_rules_txt'] = 'Invalid Rewrite Rules';
$wb['allowed_rewrite_rule_directives_txt'] = 'Allowed Directives:';
$wb['configuration_error_txt'] = 'CONFIGURATION ERROR';
$wb['configuration_error_txt'] = 'CONFIGURATIE FOUT';
$wb['web_folder_txt'] = 'Web folder';
$wb['web_folder_invalid_txt'] = 'The web folder is invalid, please choose a different one.';
$wb['web_folder_unique_txt'] = 'The web folder is already used, please choose a different one.';
$wb['host_txt'] = 'Hostname';
$wb['domain_error_wildcard'] = 'Wildcard subdomains are not allowed.';
$wb['variables_txt'] = 'Variables';
$wb['added_by_txt'] = 'Added by';
$wb['added_date_txt'] = 'Added date';
$wb['backup_excludes_txt'] = 'Excluded Directories';
$wb['added_by_txt'] = 'Toegevoegd door';
$wb['added_date_txt'] = 'Datum toegevoegd';
$wb['backup_excludes_txt'] = 'Uitgesloten directories';
$wb['backup_excludes_note_txt'] = '(Separate multiple directories with commas. Example: web/cache/*,web/backup)';
$wb['backup_excludes_error_regex'] = 'The excluded directories contain invalid characters.';
$wb['server_chosen_not_ok'] = 'The selected server is not allowed for this account.';
$wb['subdomain_error_empty'] = 'The subdommain field is empty or contains invalid characters.';
$wb['btn_save_txt'] = 'Save';
$wb['btn_cancel_txt'] = 'Cancel';
$wb['enable_spdy_txt'] = 'Enable SPDY';
$wb['btn_save_txt'] = 'Opslaan';
$wb['btn_cancel_txt'] = 'Annuleren';
$wb['enable_spdy_txt'] = 'SPDY inschakelen';
$wb['load_client_data_txt'] = 'Load client details';
$wb['load_my_data_txt'] = 'Load my contact details';
$wb['reset_client_data_txt'] = 'Reset data';
$wb['rewrite_to_https_txt'] = 'Rewrite HTTP to HTTPS';
$wb['password_strength_txt'] = 'Password strength';
$wb['directive_snippets_id_txt'] = 'Web server config';
$wb['http_port_txt'] = 'HTTP Port';
$wb['https_port_txt'] = 'HTTPS Port';
$wb['http_port_error_regex'] = 'HTTP Port invalid.';
$wb['https_port_error_regex'] = 'HTTPS Port invalid.';
$wb['rewrite_to_https_txt'] = 'Herschrijf HTTP naar HTTPS';
$wb['password_strength_txt'] = 'Wachtwoord sterkte';
$wb['directive_snippets_id_txt'] = 'Web server configuratie';
$wb['http_port_txt'] = 'HTTP Poort';
$wb['https_port_txt'] = 'HTTPS Poort';
$wb['http_port_error_regex'] = 'HTTP Poort niet correct.';
$wb['https_port_error_regex'] = 'HTTPS Poort niet correct.';
?>
interface/web/sites/lib/lang/nl_web_vhost_domain_admin_list.lng
@@ -6,6 +6,6 @@
$wb['server_id_txt'] = 'Server';
$wb['domain_txt'] = 'Domein';
$wb['add_new_record_txt'] = 'Toevoegen nieuwe website';
$wb['add_new_subdomain_txt'] = 'Add new subdomain';
$wb['add_new_aliasdomain_txt'] = 'Add new aliasdomain';
$wb['add_new_subdomain_txt'] = 'Toevoegen nieuw subdomain';
$wb['add_new_aliasdomain_txt'] = 'Toevoegen nieuw aliasdomain';
?>
interface/web/sites/lib/lang/nl_web_vhost_domain_list.lng
@@ -6,6 +6,6 @@
$wb['domain_txt'] = 'Domein';
$wb['add_new_record_txt'] = 'Toevoegen nieuwe website';
$wb['parent_domain_id_txt'] = 'Website';
$wb['add_new_subdomain_txt'] = 'Add new subdomain';
$wb['add_new_aliasdomain_txt'] = 'Add new aliasdomain';
$wb['add_new_subdomain_txt'] = 'Toevoegen nieuw subdomain';
$wb['add_new_aliasdomain_txt'] = 'Toevoegen nieuw aliasdomain';
?>
interface/web/sites/lib/lang/nl_web_vhost_subdomain_list.lng
@@ -1,8 +1,8 @@
<?php
$wb['list_head_txt'] = 'Subdomains';
$wb['active_txt'] = 'Active';
$wb['list_head_txt'] = 'Subdomeinen';
$wb['active_txt'] = 'Actief';
$wb['server_id_txt'] = 'Server';
$wb['parent_domain_id_txt'] = 'Website';
$wb['domain_txt'] = 'Subdomain';
$wb['add_new_record_txt'] = 'Add new subdomain';
$wb['domain_txt'] = 'Subdomein';
$wb['add_new_record_txt'] = 'Toevoegen nieuw subdomain';
?>
interface/web/sites/list/cron.list.php
@@ -55,7 +55,7 @@
    'prefix' => "",
    'suffix' => "",
    'width'  => "",
    'value'  => array('y' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('Yes')."</span></div>", 'n' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('No')."</span></div>"));
    'value'  => array('y' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('yes_txt')."</span></div>", 'n' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('no_txt')."</span></div>"));
$liste["item"][] = array( 'field'  => "server_id",
interface/web/sites/list/database.list.php
@@ -59,7 +59,7 @@
    'prefix' => "",
    'suffix' => "",
    'width'  => "",
    'value'  => array('y' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('Yes')."</span></div>", 'n' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('No')."</span></div>"));
    'value'  => array('y' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('yes_txt')."</span></div>", 'n' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('no_txt')."</span></div>"));
$liste["item"][] = array( 'field'  => "remote_access",
    'datatype' => "VARCHAR",
@@ -68,7 +68,7 @@
    'prefix' => "",
    'suffix' => "",
    'width'  => "",
    'value'  => array('y' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('Yes')."</span></div>", 'n' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('No')."</span></div>"));
    'value'  => array('y' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('yes_txt')."</span></div>", 'n' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('no_txt')."</span></div>"));
$liste["item"][] = array( 'field'  => "type",
    'datatype' => "VARCHAR",
interface/web/sites/list/ftp_user.list.php
@@ -55,7 +55,7 @@
    'prefix' => "",
    'suffix' => "",
    'width'  => "",
    'value'  => array('y' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('Yes')."</span></div>", 'n' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('No')."</span></div>"));
    'value'  => array('y' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('yes_txt')."</span></div>", 'n' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('no_txt')."</span></div>"));
$liste["item"][] = array( 'field'  => "server_id",
interface/web/sites/list/shell_user.list.php
@@ -55,7 +55,7 @@
    'prefix' => "",
    'suffix' => "",
    'width'  => "",
    'value'  => array('y' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('Yes')."</span></div>", 'n' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('No')."</span></div>"));
    'value'  => array('y' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('yes_txt')."</span></div>", 'n' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('no_txt')."</span></div>"));
$liste["item"][] = array( 'field'  => "server_id",
interface/web/sites/list/web_childdomain.list.php
@@ -55,7 +55,7 @@
    'prefix' => "",
    'suffix' => "",
    'width'  => "",
    'value'  => array('y' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('Yes')."</span></div>", 'n' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('No')."</span></div>"));
    'value'  => array('y' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('yes_txt')."</span></div>", 'n' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('no_txt')."</span></div>"));
$liste["item"][] = array( 'field'  => "server_id",
interface/web/sites/list/web_folder.list.php
@@ -55,7 +55,7 @@
    'prefix' => "",
    'suffix' => "",
    'width'  => "",
    'value'  => array('y' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('Yes')."</span></div>", 'n' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('No')."</span></div>"));
    'value'  => array('y' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('yes_txt')."</span></div>", 'n' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('no_txt')."</span></div>"));
$liste["item"][] = array( 'field'  => "server_id",
interface/web/sites/list/web_folder_user.list.php
@@ -57,7 +57,7 @@
    'prefix' => "",
    'suffix' => "",
    'width'  => "",
    'value'  => array('y' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('Yes')."</span></div>", 'n' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('No')."</span></div>"));
    'value'  => array('y' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('yes_txt')."</span></div>", 'n' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('no_txt')."</span></div>"));
$liste["item"][] = array( 'field'  => "web_folder_id",
interface/web/sites/list/web_vhost_domain.list.php
@@ -78,7 +78,7 @@
    'prefix' => "",
    'suffix' => "",
    'width'  => "",
    'value'  => array('y' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('Yes')."</span></div>", 'n' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('No')."</span></div>"));
    'value'  => array('y' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('yes_txt')."</span></div>", 'n' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('no_txt')."</span></div>"));
if($_SESSION['s']['user']['typ'] == 'admin' && $vhostdomain_type == 'domain') {
    $liste["item"][] = array( 'field'  => "sys_groupid",
interface/web/sites/list/webdav_user.list.php
@@ -55,7 +55,7 @@
    'prefix' => "",
    'suffix' => "",
    'width'  => "",
    'value'  => array('y' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('Yes')."</span></div>", 'n' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('No')."</span></div>"));
    'value'  => array('y' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('yes_txt')."</span></div>", 'n' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('no_txt')."</span></div>"));
$liste["item"][] = array( 'field'  => "server_id",
interface/web/sites/templates/backup_stats_list.htm
@@ -20,12 +20,12 @@
                <tbody>
                    <tmpl_loop name="records">
                    <tr class="tbl_row_{tmpl_if name='__EVEN__'}even{tmpl_else}uneven{/tmpl_if}">
                        <td> <a href="#" data-load-content="sites/web_<tmpl_if name='type' op='==' value='vhostsubdomain'>vhost_sub</tmpl_if><tmpl_if name='type' op='==' value='vhostalias'>vhost_alias</tmpl_if>domain_edit.php?id={tmpl_var name='id'}">{tmpl_var name="active"}</a> </td>
                        <td> <a href="#" data-load-content="sites/web_<tmpl_if name='type' op='==' value='vhostsubdomain'>vhost_sub</tmpl_if><tmpl_if name='type' op='==' value='vhostalias'>vhost_alias</tmpl_if>domain_edit.php?id={tmpl_var name='id'}">{tmpl_var name="domain"}</a> </td>
                        <td> <a href="#" data-load-content="sites/web_<tmpl_if name='type' op='==' value='vhostsubdomain'>vhost_sub</tmpl_if><tmpl_if name='type' op='==' value='vhostalias'>vhost_alias</tmpl_if>domain_edit.php?id={tmpl_var name='id'}">{tmpl_var name="server_id"}</a> </td>
                        <td> <a href="#" data-load-content="sites/web_<tmpl_if name='type' op='==' value='vhostsubdomain'>vhost_sub</tmpl_if><tmpl_if name='type' op='==' value='vhostalias'>vhost_alias</tmpl_if>domain_edit.php?id={tmpl_var name='id'}">{tmpl_var name="backup_interval"}</a> /  <a href="#" data-load-content="sites/web_<tmpl_if name='type' op='==' value='vhostsubdomain'>vhost_sub</tmpl_if><tmpl_if name='type' op='==' value='vhostalias'>vhost_alias</tmpl_if>domain_edit.php?id={tmpl_var name='id'}">{tmpl_var name="backup_copies"}</a> </td>
                        <td> <a href="#" data-load-content="sites/web_<tmpl_if name='type' op='==' value='vhostsubdomain'>vhost_sub</tmpl_if><tmpl_if name='type' op='==' value='vhostalias'>vhost_alias</tmpl_if>domain_edit.php?id={tmpl_var name='id'}">{tmpl_var name="backup_copies_exists"}</a> </td>
                        <td> <a href="#" data-load-content="sites/web_<tmpl_if name='type' op='==' value='vhostsubdomain'>vhost_sub</tmpl_if><tmpl_if name='type' op='==' value='vhostalias'>vhost_alias</tmpl_if>domain_edit.php?id={tmpl_var name='id'}">{tmpl_var name="backup_size"}</a> </td>
                        <td> <a href="#" data-load-content="sites/web_vhost_domain_edit.php?id={tmpl_var name='id'}&type=<tmpl_if name='type' op='==' value='vhost'>domain</tmpl_if><tmpl_if name='type' op='==' value='vhostsubdomain'>vhost_sub</tmpl_if><tmpl_if name='type' op='==' value='vhostalias'>vhost_alias</tmpl_if>">{tmpl_var name="active"}</a> </td>
                        <td> <a href="#" data-load-content="sites/web_vhost_domain_edit.php?id={tmpl_var name='id'}&type=<tmpl_if name='type' op='==' value='vhost'>domain</tmpl_if><tmpl_if name='type' op='==' value='vhostsubdomain'>vhost_sub</tmpl_if><tmpl_if name='type' op='==' value='vhostalias'>vhost_alias</tmpl_if>">{tmpl_var name="domain"}</a> </td>
                        <td> <a href="#" data-load-content="sites/web_vhost_domain_edit.php?id={tmpl_var name='id'}&type=<tmpl_if name='type' op='==' value='vhost'>domain</tmpl_if><tmpl_if name='type' op='==' value='vhostsubdomain'>vhost_sub</tmpl_if><tmpl_if name='type' op='==' value='vhostalias'>vhost_alias</tmpl_if>">{tmpl_var name="server_id"}</a> </td>
                        <td> <a href="#" data-load-content="sites/web_vhost_domain_edit.php?id={tmpl_var name='id'}&type=<tmpl_if name='type' op='==' value='vhost'>domain</tmpl_if><tmpl_if name='type' op='==' value='vhostsubdomain'>vhost_sub</tmpl_if><tmpl_if name='type' op='==' value='vhostalias'>vhost_alias</tmpl_if>">{tmpl_var name="backup_interval"}</a> /  <a href="#" data-load-content="sites/web_vhost_domain_edit.php?id={tmpl_var name='id'}&type=<tmpl_if name='type' op='==' value='vhost'>domain</tmpl_if><tmpl_if name='type' op='==' value='vhostsubdomain'>vhost_sub</tmpl_if><tmpl_if name='type' op='==' value='vhostalias'>vhost_alias</tmpl_if>">{tmpl_var name="backup_copies"}</a> </td>
                        <td> <a href="#" data-load-content="sites/web_vhost_domain_edit.php?id={tmpl_var name='id'}&type=<tmpl_if name='type' op='==' value='vhost'>domain</tmpl_if><tmpl_if name='type' op='==' value='vhostsubdomain'>vhost_sub</tmpl_if><tmpl_if name='type' op='==' value='vhostalias'>vhost_alias</tmpl_if>">{tmpl_var name="backup_copies_exists"}</a> </td>
                        <td> <a href="#" data-load-content="sites/web_vhost_domain_edit.php?id={tmpl_var name='id'}&type=<tmpl_if name='type' op='==' value='vhost'>domain</tmpl_if><tmpl_if name='type' op='==' value='vhostsubdomain'>vhost_sub</tmpl_if><tmpl_if name='type' op='==' value='vhostalias'>vhost_alias</tmpl_if>">{tmpl_var name="backup_size"}</a> </td>
                    </tr>
                    </tmpl_loop>
                </tbody>
interface/web/sites/templates/cron_list.htm
@@ -46,14 +46,14 @@
                    <tmpl_loop name="records">
                        <tr>
                            <td><a href="#" data-load-content="sites/cron_edit.php?id={tmpl_var name='id'}">{tmpl_var name="active"}</a></td>
                            <td><a href="#" data-load-content="sites/cron_edit.php?id={tmpl_var name='id'}">{tmpl_var name="server_id"}</a></td>
                            <td><a href="#" data-load-content="sites/cron_edit.php?id={tmpl_var name='id'}">{tmpl_var name="parent_domain_id"}</a></td>
                            <td><a href="#" data-load-content="sites/cron_edit.php?id={tmpl_var name='id'}" data-toggle="tooltip" data-placement="bottom" title="{tmpl_var name='server_id'}">{tmpl_var name="server_id"}</a></td>
                            <td><a href="#" data-load-content="sites/cron_edit.php?id={tmpl_var name='id'}" data-toggle="tooltip" data-placement="bottom" title="{tmpl_var name='parent_domain_id'}">{tmpl_var name="parent_domain_id"}</a></td>
                            <td><a href="#" data-load-content="sites/cron_edit.php?id={tmpl_var name='id'}">{tmpl_var name="run_min"}</a></td>
                            <td><a href="#" data-load-content="sites/cron_edit.php?id={tmpl_var name='id'}">{tmpl_var name="run_hour"}</a></td>
                            <td><a href="#" data-load-content="sites/cron_edit.php?id={tmpl_var name='id'}">{tmpl_var name="run_mday"}</a></td>
                            <td><a href="#" data-load-content="sites/cron_edit.php?id={tmpl_var name='id'}">{tmpl_var name="run_month"}</a></td>
                            <td><a href="#" data-load-content="sites/cron_edit.php?id={tmpl_var name='id'}">{tmpl_var name="run_wday"}</a></td>
                            <td><a href="#" data-load-content="sites/cron_edit.php?id={tmpl_var name='id'}">{tmpl_var name="command"}</a></td>
                            <td><a href="#" data-load-content="sites/cron_edit.php?id={tmpl_var name='id'}" data-toggle="tooltip" data-placement="bottom" title="{tmpl_var name='command'}">{tmpl_var name="command"}</a></td>
                            <td class="text-right">
                                <div class="buttons icons16">    
                                    <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('sites/cron_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span class="icon icon-delete"></span></a>
@@ -74,5 +74,3 @@
                </tfoot>
            </table>
</div>
interface/web/sites/templates/database_admin_list.htm
@@ -46,8 +46,8 @@
                            <td><a href="#" data-load-content="sites/database_edit.php?id={tmpl_var name='id'}">{tmpl_var name="remote_access"}</a></td>
                            <td><a href="#" data-load-content="sites/database_edit.php?id={tmpl_var name='id'}">{tmpl_var name="type"}</a></td>
                            <td><a href="#" data-load-content="sites/database_edit.php?id={tmpl_var name='id'}">{tmpl_var name="sys_groupid"}</a></td>
                            <td><a href="#" data-load-content="sites/database_edit.php?id={tmpl_var name='id'}">{tmpl_var name="server_id"}</a></td>
                            <td><a href="#" data-load-content="sites/database_edit.php?id={tmpl_var name='id'}">{tmpl_var name="parent_domain_id"}</a></td>
                            <td><a href="#" data-load-content="sites/database_edit.php?id={tmpl_var name='id'}" data-toggle="tooltip" data-placement="bottom" title="{tmpl_var name='server_id'}">{tmpl_var name="server_id"}</a></td>
                            <td><a href="#" data-load-content="sites/database_edit.php?id={tmpl_var name='id'}" data-toggle="tooltip" data-placement="bottom" title="{tmpl_var name='parent_domain_id'}">{tmpl_var name="parent_domain_id"}</a></td>
                            <td><a href="#" data-load-content="sites/database_edit.php?id={tmpl_var name='id'}">{tmpl_var name="database_user_id"}</a></td>
                            <td><a href="#" data-load-content="sites/database_edit.php?id={tmpl_var name='id'}">{tmpl_var name="database_name"}</a></td>
                            <td class="text-right">
@@ -72,5 +72,3 @@
                </tfoot>
            </table>
</div>
interface/web/sites/templates/database_list.htm
@@ -60,9 +60,9 @@
                            <td><a href="#" data-load-content="sites/database_edit.php?id={tmpl_var name='id'}">{tmpl_var name="active"}</a></td>
                            <td><a href="#" data-load-content="sites/database_edit.php?id={tmpl_var name='id'}">{tmpl_var name="remote_access"}</a></td>
                            <td><a href="#" data-load-content="sites/database_edit.php?id={tmpl_var name='id'}">{tmpl_var name="type"}</a></td>
                            <td><a href="#" data-load-content="sites/database_edit.php?id={tmpl_var name='id'}">{tmpl_var name="server_id"}</a></td>
                            <td><a href="#" data-load-content="sites/database_edit.php?id={tmpl_var name='id'}">{tmpl_var name="parent_domain_id"}</a></td>
                            <td><a href="#" data-load-content="sites/database_edit.php?id={tmpl_var name='id'}">{tmpl_var name="database_user_id"}</a></td>
                            <td><a href="#" data-load-content="sites/database_edit.php?id={tmpl_var name='id'}" data-toggle="tooltip" data-placement="bottom" title="{tmpl_var name='server_id'}">{tmpl_var name="server_id"}</a></td>
                            <td><a href="#" data-load-content="sites/database_edit.php?id={tmpl_var name='id'}" data-toggle="tooltip" data-placement="bottom" title="{tmpl_var name='parent_domain_id'}">{tmpl_var name="parent_domain_id"}</a></td>
                            <td><a href="#" data-load-content="sites/database_edit.php?id={tmpl_var name='id'}" data-toggle="tooltip" data-placement="bottom" title="{tmpl_var name='database_user_id'}">{tmpl_var name="database_user_id"}</a></td>
                            <td><a href="#" data-load-content="sites/database_edit.php?id={tmpl_var name='id'}">{tmpl_var name="database_name"}</a></td>
                            <td class="text-right">
                                <tmpl_if name="dblist_phpmyadmin_link">
@@ -86,5 +86,3 @@
                </tfoot>
            </table>
</div>
interface/web/sites/templates/database_user_edit.htm
@@ -34,7 +34,7 @@
                <label for="database_password" class="col-sm-3 control-label">{tmpl_var name='database_password_txt'}</label>
                <div class="col-sm-9">
                <div class="input-group">
                    <input type="database_password" name="database_password" id="database_password" value="{tmpl_var name='database_password'}" class="form-control" autocomplete="off" onkeyup="pass_check(this.value);checkPassMatch('database_password','repeat_password');" />
                    <input type="password" name="database_password" id="database_password" value="{tmpl_var name='database_password'}" class="form-control" autocomplete="off" onkeyup="pass_check(this.value);checkPassMatch('database_password','repeat_password');" />
                    <span class="input-group-btn">
                        <button class="btn btn-default" type="button" onclick="generatePassword('database_password','repeat_password');">{tmpl_var name='generate_password_txt'}</button>
                    </span>
interface/web/sites/templates/web_vhost_domain_admin_list.htm
@@ -42,8 +42,8 @@
                        <td><a href="#" data-load-content="sites/web_vhost_domain_edit.php?id={tmpl_var name='id'}&type={tmpl_var name='vhostdomain_type'}">{tmpl_var name="active"}</a></td>
                        <tmpl_if name="vhostdomain_type" value="domain"><td><a href="#" data-load-content="sites/web_vhost_domain_edit.php?id={tmpl_var name='id'}&type={tmpl_var name='vhostdomain_type'}">{tmpl_var name="sys_groupid"}</a></td></tmpl_if>
                        <td><a href="#" data-load-content="sites/web_vhost_domain_edit.php?id={tmpl_var name='id'}&type={tmpl_var name='vhostdomain_type'}">{tmpl_var name="server_id"}</a></td>
                        <tmpl_if name="vhostdomain_type" op="!=" value="domain"><td><a href="#" data-load-content="sites/web_vhost_aliasdomain_edit.php?id={tmpl_var name='id'}">{tmpl_var name="parent_domain_id"}</a></td></tmpl_if>
                        <td><a href="#" data-load-content="sites/web_vhost_domain_edit.php?id={tmpl_var name='id'}&type={tmpl_var name='vhostdomain_type'}">{tmpl_var name="domain"}</a></td>
                        <tmpl_if name="vhostdomain_type" op="!=" value="domain"><td><a href="#" data-load-content="sites/web_vhost_aliasdomain_edit.php?id={tmpl_var name='id'}" data-toggle="tooltip" data-placement="bottom" title="{tmpl_var name='parent_domain_id'}">{tmpl_var name="parent_domain_id"}</a></td></tmpl_if>
                        <td><a href="#" data-load-content="sites/web_vhost_domain_edit.php?id={tmpl_var name='id'}&type={tmpl_var name='vhostdomain_type'}" data-toggle="tooltip" data-placement="bottom" title="{tmpl_var name='domain'}">{tmpl_var name="domain"}</a></td>
                        <td class="text-right">
                            <a href="http://{tmpl_var name="domain"}" target="_blank" class="btn btn-default formbutton-default formbutton-narrow"><span class="icon icon-link"></span></a>
                            <a href="http://{tmpl_var name="domain"}/stats/" target="_blank" class="btn btn-default formbutton-default formbutton-narrow"><span class="glyphicon glyphicon-signal"></span></a>
@@ -64,5 +64,3 @@
                </tfoot>
            </table>
</div>
interface/web/sites/templates/web_vhost_domain_edit.htm
@@ -432,8 +432,8 @@
        
    function reloadFastcgiPHPVersions(noFormChange) {
        jQuery.getJSON('sites/ajax_get_json.php'+ '?' + Math.round(new Date().getTime()), {server_id : serverId, php_type : jQuery('#php').val(), type : "getphpfastcgi", client_group_id : clientGroupId}, function(data) {
            //var options = '<option value="">Default</option>';
            var options = '';
            var options = '<option value="">Default</option>';
            //var options = '';
            var phpfastcgiselected = '';
            $.each(data, function(key, val) {
                <tmpl_if name="id">
interface/web/sites/templates/web_vhost_domain_list.htm
@@ -55,9 +55,9 @@
                    <tr>
                        <tmpl_if name="vhostdomain_type" value="domain"><td><a href="#" data-load-content="sites/web_vhost_domain_edit.php?id={tmpl_var name='id'}&type={tmpl_var name='vhostdomain_type'}">{tmpl_var name="domain_id"}</a></td></tmpl_if>
                        <td><a href="#" data-load-content="sites/web_vhost_domain_edit.php?id={tmpl_var name='id'}&type={tmpl_var name='vhostdomain_type'}">{tmpl_var name="active"}</a></td>
                        <td><a href="#" data-load-content="sites/web_vhost_domain_edit.php?id={tmpl_var name='id'}&type={tmpl_var name='vhostdomain_type'}">{tmpl_var name="server_id"}</a></td>
                        <td><a href="#" data-load-content="sites/web_vhost_domain_edit.php?id={tmpl_var name='id'}&type={tmpl_var name='vhostdomain_type'}" data-toggle="tooltip" data-placement="bottom" title="{tmpl_var name='server_id'}">{tmpl_var name="server_id"}</a></td>
                        <tmpl_if name="vhostdomain_type" op="!=" value="domain"><td><a href="#" data-load-content="sites/web_vhost_aliasdomain_edit.php?id={tmpl_var name='id'}">{tmpl_var name="parent_domain_id"}</a></td></tmpl_if>
                        <td><a href="#" data-load-content="sites/web_vhost_domain_edit.php?id={tmpl_var name='id'}&type={tmpl_var name='vhostdomain_type'}">{tmpl_var name="domain"}</a></td>
                        <td><a href="#" data-load-content="sites/web_vhost_domain_edit.php?id={tmpl_var name='id'}&type={tmpl_var name='vhostdomain_type'}" data-toggle="tooltip" data-placement="bottom" title="{tmpl_var name='domain'}">{tmpl_var name="domain"}</a></td>
                        <td class="text-right">
                            <a href="http://{tmpl_var name="domain"}" target="_blank" class="btn btn-default formbutton-default formbutton-narrow"><span class="icon icon-link"></span></button>
                            <a href="http://{tmpl_var name="domain"}/stats/" target="_blank" class="btn btn-default formbutton-default formbutton-narrow"><span class="glyphicon glyphicon-signal"></span></a>
@@ -78,5 +78,3 @@
                </tfoot>
            </table>
</div>
interface/web/sites/web_vhost_domain_edit.php
@@ -50,6 +50,7 @@
class page_action extends tform_actions {
    var $_vhostdomain_type = 'domain';
    var $_letsencrypt_on_insert = false;
    //* Returna a "3/2/1" path hash from a numeric id '123'
    function id_hash($id, $levels) {
@@ -187,7 +188,7 @@
                }
                $server_id = intval(@$this->dataRecord["server_id"]);
            } else {
                $server_id = (isset($web_servers[0])) ? intval($web_servers[0]) : 0;
                $server_id = (isset($web_servers[0])) ? intval($web_servers[0]['server_id']) : 0;
            }
            
            if($app->functions->intval($this->dataRecord["server_id"]) > 0) {
@@ -199,9 +200,9 @@
                }
            }
            
            //* Fill the IPv4 select field with the IP addresses that are allowed for this client
            $sql = "SELECT ip_address FROM server_ip WHERE server_id IN ? AND ip_type = 'IPv4' AND (client_id = 0 OR client_id=".$_SESSION['s']['user']['client_id'].")";
            $ips = $app->db->queryAllRecords($sql, explode(',', $client['web_servers']));
            //* Fill the IPv4 select field with the IP addresses that are allowed for this client on the current server
            $sql = "SELECT ip_address FROM server_ip WHERE server_id = ? AND ip_type = 'IPv4' AND (client_id = 0 OR client_id=".$_SESSION['s']['user']['client_id'].")";
            $ips = $app->db->queryAllRecords($sql, $server_id);
            $ip_select = ($web_config[$server_id]['enable_ip_wildcard'] == 'y')?"<option value='*'>*</option>":"";
            //if(!in_array($this->dataRecord["ip_address"], $ips)) $ip_select .= "<option value='".$this->dataRecord["ip_address"]."' SELECTED>".$this->dataRecord["ip_address"]."</option>\r\n";
            //$ip_select = "";
@@ -216,10 +217,11 @@
            unset($ips);
            //* Fill the IPv6 select field with the IP addresses that are allowed for this client
            $sql = "SELECT ip_address FROM server_ip WHERE server_id IN ? AND ip_type = 'IPv6' AND (client_id = 0 OR client_id=?)";
            $ips = $app->db->queryAllRecords($sql, explode(',', $client['web_servers']), $_SESSION['s']['user']['client_id']);
            $ip_select = ($web_config[$server_id]['enable_ip_wildcard'] == 'y')?"<option value='*'>*</option>":"";
            $sql = "SELECT ip_address FROM server_ip WHERE server_id = ? AND ip_type = 'IPv6' AND (client_id = 0 OR client_id=?)";
            $ips = $app->db->queryAllRecords($sql, $server_id, $_SESSION['s']['user']['client_id']);
            //$ip_select = ($web_config[$server_id]['enable_ip_wildcard'] == 'y')?"<option value='*'>*</option>":"";
            //$ip_select = "";
            $ip_select = "<option value=''></option>";
            if(is_array($ips)) {
                foreach( $ips as $ip) {
                    $selected = ($ip["ip_address"] == $this->dataRecord["ipv6_address"])?'SELECTED':'';
@@ -303,6 +305,17 @@
            $app->tpl->setVar("server_id", $options_web_servers);
            unset($options_web_servers);
            if($this->id > 0) {
                if(!isset($this->dataRecord["server_id"])){
                    $tmp = $app->db->queryOneRecord("SELECT server_id FROM web_domain WHERE domain_id = ?", $this->id);
                    $this->dataRecord["server_id"] = $tmp["server_id"];
                    unset($tmp);
                }
                $server_id = intval(@$this->dataRecord["server_id"]);
            } else {
                $server_id = (isset($web_servers[0])) ? intval($web_servers[0]['server_id']) : 0;
            }
            if ($settings['use_domain_module'] != 'y') {
                // Fill the client select field
@@ -333,8 +346,8 @@
            }
            
            //* Fill the IPv4 select field with the IP addresses that are allowed for this client
            $sql = "SELECT ip_address FROM server_ip WHERE server_id IN ? AND ip_type = 'IPv4' AND (client_id = 0 OR client_id=?)";
            $ips = $app->db->queryAllRecords($sql, explode(',', $client['web_servers']), $_SESSION['s']['user']['client_id']);
            $sql = "SELECT ip_address FROM server_ip WHERE server_id = ? AND ip_type = 'IPv4' AND (client_id = 0 OR client_id=?)";
            $ips = $app->db->queryAllRecords($sql, $server_id, $_SESSION['s']['user']['client_id']);
            $ip_select = ($web_config[$server_id]['enable_ip_wildcard'] == 'y')?"<option value='*'>*</option>":"";
            //if(!in_array($this->dataRecord["ip_address"], $ips)) $ip_select .= "<option value='".$this->dataRecord["ip_address"]."' SELECTED>".$this->dataRecord["ip_address"]."</option>\r\n";
            //$ip_select = "";
@@ -349,8 +362,8 @@
            unset($ips);
            //* Fill the IPv6 select field with the IP addresses that are allowed for this client
            $sql = "SELECT ip_address FROM server_ip WHERE server_id IN ? AND ip_type = 'IPv6' AND (client_id = 0 OR client_id=?)";
            $ips = $app->db->queryAllRecords($sql, $client['web_servers'], $_SESSION['s']['user']['client_id']);
            $sql = "SELECT ip_address FROM server_ip WHERE server_id = ? AND ip_type = 'IPv6' AND (client_id = 0 OR client_id=?)";
            $ips = $app->db->queryAllRecords($sql, $server_id, $_SESSION['s']['user']['client_id']);
            $ip_select = "<option value=''></option>";
            //$ip_select = "";
            if(is_array($ips)) {
@@ -1333,6 +1346,23 @@
        
        parent::onSubmit();
    }
    function onBeforeInsert() {
        global $app, $conf;
        // Letsencrypt can not be activated before the website has been created
        // So we deactivate it here and add a datalog update in onAfterInsert
        if(isset($this->dataRecord['ssl_letsencrypt']) && $this->dataRecord['ssl_letsencrypt'] == 'y' && isset($this->dataRecord['ssl']) && $this->dataRecord['ssl'] == 'y') {
            // Disable letsencrypt and ssl temporarily
            $this->dataRecord['ssl_letsencrypt'] = 'n';
            $this->dataRecord['ssl'] = 'n';
            // Prevent that the datalog history gets written
            $app->tform->formDef['db_history'] = 'no';
            // Set variable that we check in onAfterInsert
            $this->_letsencrypt_on_insert = true;
        }
    }
    function onAfterInsert() {
        global $app, $conf;
@@ -1403,6 +1433,16 @@
            $app->db->query($sql, $this->parent_domain_record['sys_groupid'], $system_user, $system_group, $document_root, $htaccess_allow_override, $php_open_basedir, $added_by, $this->id);
        }
        if(isset($this->dataRecord['folder_directive_snippets'])) $app->db->query("UPDATE web_domain SET folder_directive_snippets = ? WHERE domain_id = ?", $this->dataRecord['folder_directive_snippets'], $this->id);
        // Add a datalog insert without letsencrypt and then an update with letsencrypt enabled (see also onBeforeInsert)
        if($this->_letsencrypt_on_insert == true) {
            $new_data_record = $app->tform->getDataRecord($this->id);
            $app->tform->datalogSave('INSERT', $this->id, array(), $new_data_record);
            $new_data_record['ssl_letsencrypt'] = 'y';
            $new_data_record['ssl'] = 'y';
            $app->db->datalogUpdate('web_domain', $new_data_record, 'domain_id', $this->id);
        }
    }
    function onBeforeUpdate () {
@@ -1431,9 +1471,13 @@
                    $this->dataRecord["domain"] = $rec['domain'];
                }
                if(isset($this->dataRecord["ip_address"]) && $rec['ip_address'] != $this->dataRecord["ip_address"] && $rec['sys_perm_group'] != 'riud') {
                    //* Add a error message and switch back to old server
                    $app->tform->errorMessage .= $app->lng('The IP can not be changed. Please ask your Administrator if you want to change the IPv4-Address.');
                    $this->dataRecord["ip_address"] = $rec['ip_address'];
                }
                if(isset($this->dataRecord["ipv6_address"]) && $rec['ipv6_address'] != $this->dataRecord["ipv6_address"] && $rec['sys_perm_group'] != 'riud') {
                    //* Add a error message and switch back to old server
                    $app->tform->errorMessage .= $app->lng('The IP can not be changed. Please ask your Administrator if you want to change the IPv6-Address.');
                    $this->dataRecord["ipv6_address"] = $rec['ipv6_address'];
                }
                unset($rec);
interface/web/themes/default/assets/fonts/glyphicons-halflings-regular.eot
Binary files differ
interface/web/themes/default/assets/fonts/glyphicons-halflings-regular.svg
New file
@@ -0,0 +1,229 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
<svg xmlns="http://www.w3.org/2000/svg">
<metadata></metadata>
<defs>
<font id="glyphicons_halflingsregular" horiz-adv-x="1200" >
<font-face units-per-em="1200" ascent="960" descent="-240" />
<missing-glyph horiz-adv-x="500" />
<glyph />
<glyph />
<glyph unicode="&#xd;" />
<glyph unicode=" " />
<glyph unicode="*" d="M100 500v200h259l-183 183l141 141l183 -183v259h200v-259l183 183l141 -141l-183 -183h259v-200h-259l183 -183l-141 -141l-183 183v-259h-200v259l-183 -183l-141 141l183 183h-259z" />
<glyph unicode="+" d="M0 400v300h400v400h300v-400h400v-300h-400v-400h-300v400h-400z" />
<glyph unicode="&#xa0;" />
<glyph unicode="&#x2000;" horiz-adv-x="652" />
<glyph unicode="&#x2001;" horiz-adv-x="1304" />
<glyph unicode="&#x2002;" horiz-adv-x="652" />
<glyph unicode="&#x2003;" horiz-adv-x="1304" />
<glyph unicode="&#x2004;" horiz-adv-x="434" />
<glyph unicode="&#x2005;" horiz-adv-x="326" />
<glyph unicode="&#x2006;" horiz-adv-x="217" />
<glyph unicode="&#x2007;" horiz-adv-x="217" />
<glyph unicode="&#x2008;" horiz-adv-x="163" />
<glyph unicode="&#x2009;" horiz-adv-x="260" />
<glyph unicode="&#x200a;" horiz-adv-x="72" />
<glyph unicode="&#x202f;" horiz-adv-x="260" />
<glyph unicode="&#x205f;" horiz-adv-x="326" />
<glyph unicode="&#x20ac;" d="M100 500l100 100h113q0 47 5 100h-218l100 100h135q37 167 112 257q117 141 297 141q242 0 354 -189q60 -103 66 -209h-181q0 55 -25.5 99t-63.5 68t-75 36.5t-67 12.5q-24 0 -52.5 -10t-62.5 -32t-65.5 -67t-50.5 -107h379l-100 -100h-300q-6 -46 -6 -100h406l-100 -100 h-300q9 -74 33 -132t52.5 -91t62 -54.5t59 -29t46.5 -7.5q29 0 66 13t75 37t63.5 67.5t25.5 96.5h174q-31 -172 -128 -278q-107 -117 -274 -117q-205 0 -324 158q-36 46 -69 131.5t-45 205.5h-217z" />
<glyph unicode="&#x2212;" d="M200 400h900v300h-900v-300z" />
<glyph unicode="&#x25fc;" horiz-adv-x="500" d="M0 0z" />
<glyph unicode="&#x2601;" d="M-14 494q0 -80 56.5 -137t135.5 -57h750q120 0 205 86.5t85 207.5t-85 207t-205 86q-46 0 -90 -14q-44 97 -134.5 156.5t-200.5 59.5q-152 0 -260 -107.5t-108 -260.5q0 -25 2 -37q-66 -14 -108.5 -67.5t-42.5 -122.5z" />
<glyph unicode="&#x2709;" d="M0 100l400 400l200 -200l200 200l400 -400h-1200zM0 300v600l300 -300zM0 1100l600 -603l600 603h-1200zM900 600l300 300v-600z" />
<glyph unicode="&#x270f;" d="M-13 -13l333 112l-223 223zM187 403l214 -214l614 614l-214 214zM887 1103l214 -214l99 92q13 13 13 32.5t-13 33.5l-153 153q-15 13 -33 13t-33 -13z" />
<glyph unicode="&#xe001;" d="M0 1200h1200l-500 -550v-550h300v-100h-800v100h300v550z" />
<glyph unicode="&#xe002;" d="M14 84q18 -55 86 -75.5t147 5.5q65 21 109 69t44 90v606l600 155v-521q-64 16 -138 -7q-79 -26 -122.5 -83t-25.5 -111q18 -55 86 -75.5t147 4.5q70 23 111.5 63.5t41.5 95.5v881q0 10 -7 15.5t-17 2.5l-752 -193q-10 -3 -17 -12.5t-7 -19.5v-689q-64 17 -138 -7 q-79 -25 -122.5 -82t-25.5 -112z" />
<glyph unicode="&#xe003;" d="M23 693q0 200 142 342t342 142t342 -142t142 -342q0 -142 -78 -261l300 -300q7 -8 7 -18t-7 -18l-109 -109q-8 -7 -18 -7t-18 7l-300 300q-119 -78 -261 -78q-200 0 -342 142t-142 342zM176 693q0 -136 97 -233t234 -97t233.5 96.5t96.5 233.5t-96.5 233.5t-233.5 96.5 t-234 -97t-97 -233z" />
<glyph unicode="&#xe005;" d="M100 784q0 64 28 123t73 100.5t104.5 64t119 20.5t120 -38.5t104.5 -104.5q48 69 109.5 105t121.5 38t118.5 -20.5t102.5 -64t71 -100.5t27 -123q0 -57 -33.5 -117.5t-94 -124.5t-126.5 -127.5t-150 -152.5t-146 -174q-62 85 -145.5 174t-149.5 152.5t-126.5 127.5 t-94 124.5t-33.5 117.5z" />
<glyph unicode="&#xe006;" d="M-72 800h479l146 400h2l146 -400h472l-382 -278l145 -449l-384 275l-382 -275l146 447zM168 71l2 1z" />
<glyph unicode="&#xe007;" d="M-72 800h479l146 400h2l146 -400h472l-382 -278l145 -449l-384 275l-382 -275l146 447zM168 71l2 1zM237 700l196 -142l-73 -226l192 140l195 -141l-74 229l193 140h-235l-77 211l-78 -211h-239z" />
<glyph unicode="&#xe008;" d="M0 0v143l400 257v100q-37 0 -68.5 74.5t-31.5 125.5v200q0 124 88 212t212 88t212 -88t88 -212v-200q0 -51 -31.5 -125.5t-68.5 -74.5v-100l400 -257v-143h-1200z" />
<glyph unicode="&#xe009;" d="M0 0v1100h1200v-1100h-1200zM100 100h100v100h-100v-100zM100 300h100v100h-100v-100zM100 500h100v100h-100v-100zM100 700h100v100h-100v-100zM100 900h100v100h-100v-100zM300 100h600v400h-600v-400zM300 600h600v400h-600v-400zM1000 100h100v100h-100v-100z M1000 300h100v100h-100v-100zM1000 500h100v100h-100v-100zM1000 700h100v100h-100v-100zM1000 900h100v100h-100v-100z" />
<glyph unicode="&#xe010;" d="M0 50v400q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5zM0 650v400q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5zM600 50v400q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5zM600 650v400q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-400 q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5z" />
<glyph unicode="&#xe011;" d="M0 50v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM0 450v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200 q-21 0 -35.5 14.5t-14.5 35.5zM0 850v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM400 50v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5 t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM400 450v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM400 850v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5 v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM800 50v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM800 450v200q0 21 14.5 35.5t35.5 14.5h200 q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM800 850v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5z" />
<glyph unicode="&#xe012;" d="M0 50v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM0 450q0 -21 14.5 -35.5t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5v200q0 21 -14.5 35.5t-35.5 14.5h-200q-21 0 -35.5 -14.5 t-14.5 -35.5v-200zM0 850v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM400 50v200q0 21 14.5 35.5t35.5 14.5h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5 t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5zM400 450v200q0 21 14.5 35.5t35.5 14.5h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5zM400 850v200q0 21 14.5 35.5t35.5 14.5h700q21 0 35.5 -14.5t14.5 -35.5 v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5z" />
<glyph unicode="&#xe013;" d="M29 454l419 -420l818 820l-212 212l-607 -607l-206 207z" />
<glyph unicode="&#xe014;" d="M106 318l282 282l-282 282l212 212l282 -282l282 282l212 -212l-282 -282l282 -282l-212 -212l-282 282l-282 -282z" />
<glyph unicode="&#xe015;" d="M23 693q0 200 142 342t342 142t342 -142t142 -342q0 -142 -78 -261l300 -300q7 -8 7 -18t-7 -18l-109 -109q-8 -7 -18 -7t-18 7l-300 300q-119 -78 -261 -78q-200 0 -342 142t-142 342zM176 693q0 -136 97 -233t234 -97t233.5 96.5t96.5 233.5t-96.5 233.5t-233.5 96.5 t-234 -97t-97 -233zM300 600v200h100v100h200v-100h100v-200h-100v-100h-200v100h-100z" />
<glyph unicode="&#xe016;" d="M23 694q0 200 142 342t342 142t342 -142t142 -342q0 -141 -78 -262l300 -299q7 -7 7 -18t-7 -18l-109 -109q-8 -8 -18 -8t-18 8l-300 300q-119 -78 -261 -78q-200 0 -342 142t-142 342zM176 694q0 -136 97 -233t234 -97t233.5 97t96.5 233t-96.5 233t-233.5 97t-234 -97 t-97 -233zM300 601h400v200h-400v-200z" />
<glyph unicode="&#xe017;" d="M23 600q0 183 105 331t272 210v-166q-103 -55 -165 -155t-62 -220q0 -177 125 -302t302 -125t302 125t125 302q0 120 -62 220t-165 155v166q167 -62 272 -210t105 -331q0 -118 -45.5 -224.5t-123 -184t-184 -123t-224.5 -45.5t-224.5 45.5t-184 123t-123 184t-45.5 224.5 zM500 750q0 -21 14.5 -35.5t35.5 -14.5h100q21 0 35.5 14.5t14.5 35.5v400q0 21 -14.5 35.5t-35.5 14.5h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-400z" />
<glyph unicode="&#xe018;" d="M100 1h200v300h-200v-300zM400 1v500h200v-500h-200zM700 1v800h200v-800h-200zM1000 1v1200h200v-1200h-200z" />
<glyph unicode="&#xe019;" d="M26 601q0 -33 6 -74l151 -38l2 -6q14 -49 38 -93l3 -5l-80 -134q45 -59 105 -105l133 81l5 -3q45 -26 94 -39l5 -2l38 -151q40 -5 74 -5q27 0 74 5l38 151l6 2q46 13 93 39l5 3l134 -81q56 44 104 105l-80 134l3 5q24 44 39 93l1 6l152 38q5 40 5 74q0 28 -5 73l-152 38 l-1 6q-16 51 -39 93l-3 5l80 134q-44 58 -104 105l-134 -81l-5 3q-45 25 -93 39l-6 1l-38 152q-40 5 -74 5q-27 0 -74 -5l-38 -152l-5 -1q-50 -14 -94 -39l-5 -3l-133 81q-59 -47 -105 -105l80 -134l-3 -5q-25 -47 -38 -93l-2 -6l-151 -38q-6 -48 -6 -73zM385 601 q0 88 63 151t152 63t152 -63t63 -151q0 -89 -63 -152t-152 -63t-152 63t-63 152z" />
<glyph unicode="&#xe020;" d="M100 1025v50q0 10 7.5 17.5t17.5 7.5h275v100q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5v-100h275q10 0 17.5 -7.5t7.5 -17.5v-50q0 -11 -7 -18t-18 -7h-1050q-11 0 -18 7t-7 18zM200 100v800h900v-800q0 -41 -29.5 -71t-70.5 -30h-700q-41 0 -70.5 30 t-29.5 71zM300 100h100v700h-100v-700zM500 100h100v700h-100v-700zM500 1100h300v100h-300v-100zM700 100h100v700h-100v-700zM900 100h100v700h-100v-700z" />
<glyph unicode="&#xe021;" d="M1 601l656 644l644 -644h-200v-600h-300v400h-300v-400h-300v600h-200z" />
<glyph unicode="&#xe022;" d="M100 25v1150q0 11 7 18t18 7h475v-500h400v-675q0 -11 -7 -18t-18 -7h-850q-11 0 -18 7t-7 18zM700 800v300l300 -300h-300z" />
<glyph unicode="&#xe023;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM500 500v400h100 v-300h200v-100h-300z" />
<glyph unicode="&#xe024;" d="M-100 0l431 1200h209l-21 -300h162l-20 300h208l431 -1200h-538l-41 400h-242l-40 -400h-539zM488 500h224l-27 300h-170z" />
<glyph unicode="&#xe025;" d="M0 0v400h490l-290 300h200v500h300v-500h200l-290 -300h490v-400h-1100zM813 200h175v100h-175v-100z" />
<glyph unicode="&#xe026;" d="M1 600q0 122 47.5 233t127.5 191t191 127.5t233 47.5t233 -47.5t191 -127.5t127.5 -191t47.5 -233t-47.5 -233t-127.5 -191t-191 -127.5t-233 -47.5t-233 47.5t-191 127.5t-127.5 191t-47.5 233zM188 600q0 -170 121 -291t291 -121t291 121t121 291t-121 291t-291 121 t-291 -121t-121 -291zM350 600h150v300h200v-300h150l-250 -300z" />
<glyph unicode="&#xe027;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM350 600l250 300 l250 -300h-150v-300h-200v300h-150z" />
<glyph unicode="&#xe028;" d="M0 25v475l200 700h800l199 -700l1 -475q0 -11 -7 -18t-18 -7h-1150q-11 0 -18 7t-7 18zM200 500h200l50 -200h300l50 200h200l-97 500h-606z" />
<glyph unicode="&#xe029;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -172 121.5 -293t292.5 -121t292.5 121t121.5 293q0 171 -121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM500 397v401 l297 -200z" />
<glyph unicode="&#xe030;" d="M23 600q0 -118 45.5 -224.5t123 -184t184 -123t224.5 -45.5t224.5 45.5t184 123t123 184t45.5 224.5h-150q0 -177 -125 -302t-302 -125t-302 125t-125 302t125 302t302 125q136 0 246 -81l-146 -146h400v400l-145 -145q-157 122 -355 122q-118 0 -224.5 -45.5t-184 -123 t-123 -184t-45.5 -224.5z" />
<glyph unicode="&#xe031;" d="M23 600q0 118 45.5 224.5t123 184t184 123t224.5 45.5q198 0 355 -122l145 145v-400h-400l147 147q-112 80 -247 80q-177 0 -302 -125t-125 -302h-150zM100 0v400h400l-147 -147q112 -80 247 -80q177 0 302 125t125 302h150q0 -118 -45.5 -224.5t-123 -184t-184 -123 t-224.5 -45.5q-198 0 -355 122z" />
<glyph unicode="&#xe032;" d="M100 0h1100v1200h-1100v-1200zM200 100v900h900v-900h-900zM300 200v100h100v-100h-100zM300 400v100h100v-100h-100zM300 600v100h100v-100h-100zM300 800v100h100v-100h-100zM500 200h500v100h-500v-100zM500 400v100h500v-100h-500zM500 600v100h500v-100h-500z M500 800v100h500v-100h-500z" />
<glyph unicode="&#xe033;" d="M0 100v600q0 41 29.5 70.5t70.5 29.5h100v200q0 82 59 141t141 59h300q82 0 141 -59t59 -141v-200h100q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-900q-41 0 -70.5 29.5t-29.5 70.5zM400 800h300v150q0 21 -14.5 35.5t-35.5 14.5h-200 q-21 0 -35.5 -14.5t-14.5 -35.5v-150z" />
<glyph unicode="&#xe034;" d="M100 0v1100h100v-1100h-100zM300 400q60 60 127.5 84t127.5 17.5t122 -23t119 -30t110 -11t103 42t91 120.5v500q-40 -81 -101.5 -115.5t-127.5 -29.5t-138 25t-139.5 40t-125.5 25t-103 -29.5t-65 -115.5v-500z" />
<glyph unicode="&#xe035;" d="M0 275q0 -11 7 -18t18 -7h50q11 0 18 7t7 18v300q0 127 70.5 231.5t184.5 161.5t245 57t245 -57t184.5 -161.5t70.5 -231.5v-300q0 -11 7 -18t18 -7h50q11 0 18 7t7 18v300q0 116 -49.5 227t-131 192.5t-192.5 131t-227 49.5t-227 -49.5t-192.5 -131t-131 -192.5 t-49.5 -227v-300zM200 20v460q0 8 6 14t14 6h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14zM800 20v460q0 8 6 14t14 6h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14z" />
<glyph unicode="&#xe036;" d="M0 400h300l300 -200v800l-300 -200h-300v-400zM688 459l141 141l-141 141l71 71l141 -141l141 141l71 -71l-141 -141l141 -141l-71 -71l-141 141l-141 -141z" />
<glyph unicode="&#xe037;" d="M0 400h300l300 -200v800l-300 -200h-300v-400zM700 857l69 53q111 -135 111 -310q0 -169 -106 -302l-67 54q86 110 86 248q0 146 -93 257z" />
<glyph unicode="&#xe038;" d="M0 401v400h300l300 200v-800l-300 200h-300zM702 858l69 53q111 -135 111 -310q0 -170 -106 -303l-67 55q86 110 86 248q0 145 -93 257zM889 951l7 -8q123 -151 123 -344q0 -189 -119 -339l-7 -8l81 -66l6 8q142 178 142 405q0 230 -144 408l-6 8z" />
<glyph unicode="&#xe039;" d="M0 0h500v500h-200v100h-100v-100h-200v-500zM0 600h100v100h400v100h100v100h-100v300h-500v-600zM100 100v300h300v-300h-300zM100 800v300h300v-300h-300zM200 200v100h100v-100h-100zM200 900h100v100h-100v-100zM500 500v100h300v-300h200v-100h-100v-100h-200v100 h-100v100h100v200h-200zM600 0v100h100v-100h-100zM600 1000h100v-300h200v-300h300v200h-200v100h200v500h-600v-200zM800 800v300h300v-300h-300zM900 0v100h300v-100h-300zM900 900v100h100v-100h-100zM1100 200v100h100v-100h-100z" />
<glyph unicode="&#xe040;" d="M0 200h100v1000h-100v-1000zM100 0v100h300v-100h-300zM200 200v1000h100v-1000h-100zM500 0v91h100v-91h-100zM500 200v1000h200v-1000h-200zM700 0v91h100v-91h-100zM800 200v1000h100v-1000h-100zM900 0v91h200v-91h-200zM1000 200v1000h200v-1000h-200z" />
<glyph unicode="&#xe041;" d="M0 700l1 475q0 10 7.5 17.5t17.5 7.5h474l700 -700l-500 -500zM148 953q0 -42 29 -71q30 -30 71.5 -30t71.5 30q29 29 29 71t-29 71q-30 30 -71.5 30t-71.5 -30q-29 -29 -29 -71z" />
<glyph unicode="&#xe042;" d="M1 700l1 475q0 11 7 18t18 7h474l700 -700l-500 -500zM148 953q0 -42 30 -71q29 -30 71 -30t71 30q30 29 30 71t-30 71q-29 30 -71 30t-71 -30q-30 -29 -30 -71zM701 1200h100l700 -700l-500 -500l-50 50l450 450z" />
<glyph unicode="&#xe043;" d="M100 0v1025l175 175h925v-1000l-100 -100v1000h-750l-100 -100h750v-1000h-900z" />
<glyph unicode="&#xe044;" d="M200 0l450 444l450 -443v1150q0 20 -14.5 35t-35.5 15h-800q-21 0 -35.5 -15t-14.5 -35v-1151z" />
<glyph unicode="&#xe045;" d="M0 100v700h200l100 -200h600l100 200h200v-700h-200v200h-800v-200h-200zM253 829l40 -124h592l62 124l-94 346q-2 11 -10 18t-18 7h-450q-10 0 -18 -7t-10 -18zM281 24l38 152q2 10 11.5 17t19.5 7h500q10 0 19.5 -7t11.5 -17l38 -152q2 -10 -3.5 -17t-15.5 -7h-600 q-10 0 -15.5 7t-3.5 17z" />
<glyph unicode="&#xe046;" d="M0 200q0 -41 29.5 -70.5t70.5 -29.5h1000q41 0 70.5 29.5t29.5 70.5v600q0 41 -29.5 70.5t-70.5 29.5h-150q-4 8 -11.5 21.5t-33 48t-53 61t-69 48t-83.5 21.5h-200q-41 0 -82 -20.5t-70 -50t-52 -59t-34 -50.5l-12 -20h-150q-41 0 -70.5 -29.5t-29.5 -70.5v-600z M356 500q0 100 72 172t172 72t172 -72t72 -172t-72 -172t-172 -72t-172 72t-72 172zM494 500q0 -44 31 -75t75 -31t75 31t31 75t-31 75t-75 31t-75 -31t-31 -75zM900 700v100h100v-100h-100z" />
<glyph unicode="&#xe047;" d="M53 0h365v66q-41 0 -72 11t-49 38t1 71l92 234h391l82 -222q16 -45 -5.5 -88.5t-74.5 -43.5v-66h417v66q-34 1 -74 43q-18 19 -33 42t-21 37l-6 13l-385 998h-93l-399 -1006q-24 -48 -52 -75q-12 -12 -33 -25t-36 -20l-15 -7v-66zM416 521l178 457l46 -140l116 -317h-340 z" />
<glyph unicode="&#xe048;" d="M100 0v89q41 7 70.5 32.5t29.5 65.5v827q0 28 -1 39.5t-5.5 26t-15.5 21t-29 14t-49 14.5v71l471 -1q120 0 213 -88t93 -228q0 -55 -11.5 -101.5t-28 -74t-33.5 -47.5t-28 -28l-12 -7q8 -3 21.5 -9t48 -31.5t60.5 -58t47.5 -91.5t21.5 -129q0 -84 -59 -156.5t-142 -111 t-162 -38.5h-500zM400 200h161q89 0 153 48.5t64 132.5q0 90 -62.5 154.5t-156.5 64.5h-159v-400zM400 700h139q76 0 130 61.5t54 138.5q0 82 -84 130.5t-239 48.5v-379z" />
<glyph unicode="&#xe049;" d="M200 0v57q77 7 134.5 40.5t65.5 80.5l173 849q10 56 -10 74t-91 37q-6 1 -10.5 2.5t-9.5 2.5v57h425l2 -57q-33 -8 -62 -25.5t-46 -37t-29.5 -38t-17.5 -30.5l-5 -12l-128 -825q-10 -52 14 -82t95 -36v-57h-500z" />
<glyph unicode="&#xe050;" d="M-75 200h75v800h-75l125 167l125 -167h-75v-800h75l-125 -167zM300 900v300h150h700h150v-300h-50q0 29 -8 48.5t-18.5 30t-33.5 15t-39.5 5.5t-50.5 1h-200v-850l100 -50v-100h-400v100l100 50v850h-200q-34 0 -50.5 -1t-40 -5.5t-33.5 -15t-18.5 -30t-8.5 -48.5h-49z " />
<glyph unicode="&#xe051;" d="M33 51l167 125v-75h800v75l167 -125l-167 -125v75h-800v-75zM100 901v300h150h700h150v-300h-50q0 29 -8 48.5t-18 30t-33.5 15t-40 5.5t-50.5 1h-200v-650l100 -50v-100h-400v100l100 50v650h-200q-34 0 -50.5 -1t-39.5 -5.5t-33.5 -15t-18.5 -30t-8 -48.5h-50z" />
<glyph unicode="&#xe052;" d="M0 50q0 -20 14.5 -35t35.5 -15h1100q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM0 350q0 -20 14.5 -35t35.5 -15h800q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-800q-21 0 -35.5 -14.5t-14.5 -35.5 v-100zM0 650q0 -20 14.5 -35t35.5 -15h1000q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-1000q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM0 950q0 -20 14.5 -35t35.5 -15h600q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-600q-21 0 -35.5 -14.5 t-14.5 -35.5v-100z" />
<glyph unicode="&#xe053;" d="M0 50q0 -20 14.5 -35t35.5 -15h1100q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM0 650q0 -20 14.5 -35t35.5 -15h1100q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5 v-100zM200 350q0 -20 14.5 -35t35.5 -15h700q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-700q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM200 950q0 -20 14.5 -35t35.5 -15h700q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-700q-21 0 -35.5 -14.5 t-14.5 -35.5v-100z" />
<glyph unicode="&#xe054;" d="M0 50v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15t-14.5 35zM100 650v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1000q-21 0 -35.5 15 t-14.5 35zM300 350v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800q-21 0 -35.5 15t-14.5 35zM500 950v100q0 21 14.5 35.5t35.5 14.5h600q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-600 q-21 0 -35.5 15t-14.5 35z" />
<glyph unicode="&#xe055;" d="M0 50v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15t-14.5 35zM0 350v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15 t-14.5 35zM0 650v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15t-14.5 35zM0 950v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100 q-21 0 -35.5 15t-14.5 35z" />
<glyph unicode="&#xe056;" d="M0 50v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15t-14.5 35zM0 350v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15 t-14.5 35zM0 650v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15t-14.5 35zM0 950v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15 t-14.5 35zM300 50v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800q-21 0 -35.5 15t-14.5 35zM300 350v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800 q-21 0 -35.5 15t-14.5 35zM300 650v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800q-21 0 -35.5 15t-14.5 35zM300 950v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15 h-800q-21 0 -35.5 15t-14.5 35z" />
<glyph unicode="&#xe057;" d="M-101 500v100h201v75l166 -125l-166 -125v75h-201zM300 0h100v1100h-100v-1100zM500 50q0 -20 14.5 -35t35.5 -15h600q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-600q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM500 350q0 -20 14.5 -35t35.5 -15h300q20 0 35 15t15 35 v100q0 21 -15 35.5t-35 14.5h-300q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM500 650q0 -20 14.5 -35t35.5 -15h500q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM500 950q0 -20 14.5 -35t35.5 -15h100q20 0 35 15t15 35v100 q0 21 -15 35.5t-35 14.5h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-100z" />
<glyph unicode="&#xe058;" d="M1 50q0 -20 14.5 -35t35.5 -15h600q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-600q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM1 350q0 -20 14.5 -35t35.5 -15h300q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-300q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM1 650 q0 -20 14.5 -35t35.5 -15h500q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM1 950q0 -20 14.5 -35t35.5 -15h100q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM801 0v1100h100v-1100 h-100zM934 550l167 -125v75h200v100h-200v75z" />
<glyph unicode="&#xe059;" d="M0 275v650q0 31 22 53t53 22h750q31 0 53 -22t22 -53v-650q0 -31 -22 -53t-53 -22h-750q-31 0 -53 22t-22 53zM900 600l300 300v-600z" />
<glyph unicode="&#xe060;" d="M0 44v1012q0 18 13 31t31 13h1112q19 0 31.5 -13t12.5 -31v-1012q0 -18 -12.5 -31t-31.5 -13h-1112q-18 0 -31 13t-13 31zM100 263l247 182l298 -131l-74 156l293 318l236 -288v500h-1000v-737zM208 750q0 56 39 95t95 39t95 -39t39 -95t-39 -95t-95 -39t-95 39t-39 95z " />
<glyph unicode="&#xe062;" d="M148 745q0 124 60.5 231.5t165 172t226.5 64.5q123 0 227 -63t164.5 -169.5t60.5 -229.5t-73 -272q-73 -114 -166.5 -237t-150.5 -189l-57 -66q-10 9 -27 26t-66.5 70.5t-96 109t-104 135.5t-100.5 155q-63 139 -63 262zM342 772q0 -107 75.5 -182.5t181.5 -75.5 q107 0 182.5 75.5t75.5 182.5t-75.5 182t-182.5 75t-182 -75.5t-75 -181.5z" />
<glyph unicode="&#xe063;" d="M1 600q0 122 47.5 233t127.5 191t191 127.5t233 47.5t233 -47.5t191 -127.5t127.5 -191t47.5 -233t-47.5 -233t-127.5 -191t-191 -127.5t-233 -47.5t-233 47.5t-191 127.5t-127.5 191t-47.5 233zM173 600q0 -177 125.5 -302t301.5 -125v854q-176 0 -301.5 -125 t-125.5 -302z" />
<glyph unicode="&#xe064;" d="M117 406q0 94 34 186t88.5 172.5t112 159t115 177t87.5 194.5q21 -71 57.5 -142.5t76 -130.5t83 -118.5t82 -117t70 -116t50 -125.5t18.5 -136q0 -89 -39 -165.5t-102 -126.5t-140 -79.5t-156 -33.5q-114 6 -211.5 53t-161.5 139t-64 210zM243 414q14 -82 59.5 -136 t136.5 -80l16 98q-7 6 -18 17t-34 48t-33 77q-15 73 -14 143.5t10 122.5l9 51q-92 -110 -119.5 -185t-12.5 -156z" />
<glyph unicode="&#xe065;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5q366 -6 397 -14l-186 -186h-311q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v125l200 200v-225q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5 t-117.5 282.5zM436 341l161 50l412 412l-114 113l-405 -405zM995 1015l113 -113l113 113l-21 85l-92 28z" />
<glyph unicode="&#xe066;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h261l2 -80q-133 -32 -218 -120h-145q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5l200 153v-53q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5t-117.5 282.5 zM423 524q30 38 81.5 64t103 35.5t99 14t77.5 3.5l29 -1v-209l360 324l-359 318v-216q-7 0 -19 -1t-48 -8t-69.5 -18.5t-76.5 -37t-76.5 -59t-62 -88t-39.5 -121.5z" />
<glyph unicode="&#xe067;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h300q61 0 127 -23l-178 -177h-349q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v69l200 200v-169q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5 t-117.5 282.5zM342 632l283 -284l567 567l-137 137l-430 -431l-146 147z" />
<glyph unicode="&#xe068;" d="M0 603l300 296v-198h200v200h-200l300 300l295 -300h-195v-200h200v198l300 -296l-300 -300v198h-200v-200h195l-295 -300l-300 300h200v200h-200v-198z" />
<glyph unicode="&#xe069;" d="M200 50v1000q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-437l500 487v-1100l-500 488v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5z" />
<glyph unicode="&#xe070;" d="M0 50v1000q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-437l500 487v-487l500 487v-1100l-500 488v-488l-500 488v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5z" />
<glyph unicode="&#xe071;" d="M136 550l564 550v-487l500 487v-1100l-500 488v-488z" />
<glyph unicode="&#xe072;" d="M200 0l900 550l-900 550v-1100z" />
<glyph unicode="&#xe073;" d="M200 150q0 -21 14.5 -35.5t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5v800q0 21 -14.5 35.5t-35.5 14.5h-200q-21 0 -35.5 -14.5t-14.5 -35.5v-800zM600 150q0 -21 14.5 -35.5t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5v800q0 21 -14.5 35.5t-35.5 14.5h-200 q-21 0 -35.5 -14.5t-14.5 -35.5v-800z" />
<glyph unicode="&#xe074;" d="M200 150q0 -20 14.5 -35t35.5 -15h800q21 0 35.5 15t14.5 35v800q0 21 -14.5 35.5t-35.5 14.5h-800q-21 0 -35.5 -14.5t-14.5 -35.5v-800z" />
<glyph unicode="&#xe075;" d="M0 0v1100l500 -487v487l564 -550l-564 -550v488z" />
<glyph unicode="&#xe076;" d="M0 0v1100l500 -487v487l500 -487v437q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-1000q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v438l-500 -488v488z" />
<glyph unicode="&#xe077;" d="M300 0v1100l500 -487v437q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-1000q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v438z" />
<glyph unicode="&#xe078;" d="M100 250v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5zM100 500h1100l-550 564z" />
<glyph unicode="&#xe079;" d="M185 599l592 -592l240 240l-353 353l353 353l-240 240z" />
<glyph unicode="&#xe080;" d="M272 194l353 353l-353 353l241 240l572 -571l21 -22l-1 -1v-1l-592 -591z" />
<glyph unicode="&#xe081;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM300 500h200v-200h200v200h200v200h-200v200h-200v-200h-200v-200z" />
<glyph unicode="&#xe082;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM300 500h600v200h-600v-200z" />
<glyph unicode="&#xe083;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM246 459l213 -213l141 142l141 -142l213 213l-142 141l142 141l-213 212l-141 -141l-141 142l-212 -213l141 -141 z" />
<glyph unicode="&#xe084;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM270 551l276 -277l411 411l-175 174l-236 -236l-102 102z" />
<glyph unicode="&#xe085;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM364 700h143q4 0 11.5 -1t11 -1t6.5 3t3 9t1 11t3.5 8.5t3.5 6t5.5 4t6.5 2.5t9 1.5t9 0.5h11.5h12.5 q19 0 30 -10t11 -26q0 -22 -4 -28t-27 -22q-5 -1 -12.5 -3t-27 -13.5t-34 -27t-26.5 -46t-11 -68.5h200q5 3 14 8t31.5 25.5t39.5 45.5t31 69t14 94q0 51 -17.5 89t-42 58t-58.5 32t-58.5 15t-51.5 3q-50 0 -90.5 -12t-75 -38.5t-53.5 -74.5t-19 -114zM500 300h200v100h-200 v-100z" />
<glyph unicode="&#xe086;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM400 300h400v100h-100v300h-300v-100h100v-200h-100v-100zM500 800h200v100h-200v-100z" />
<glyph unicode="&#xe087;" d="M0 500v200h195q31 125 98.5 199.5t206.5 100.5v200h200v-200q54 -20 113 -60t112.5 -105.5t71.5 -134.5h203v-200h-203q-25 -102 -116.5 -186t-180.5 -117v-197h-200v197q-140 27 -208 102.5t-98 200.5h-194zM290 500q24 -73 79.5 -127.5t130.5 -78.5v206h200v-206 q149 48 201 206h-201v200h200q-25 74 -75.5 127t-124.5 77v-204h-200v203q-75 -23 -130 -77t-79 -126h209v-200h-210z" />
<glyph unicode="&#xe088;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM356 465l135 135 l-135 135l109 109l135 -135l135 135l109 -109l-135 -135l135 -135l-109 -109l-135 135l-135 -135z" />
<glyph unicode="&#xe089;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM322 537l141 141 l87 -87l204 205l142 -142l-346 -345z" />
<glyph unicode="&#xe090;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -115 62 -215l568 567q-100 62 -216 62q-171 0 -292.5 -121.5t-121.5 -292.5zM391 245q97 -59 209 -59q171 0 292.5 121.5t121.5 292.5 q0 112 -59 209z" />
<glyph unicode="&#xe091;" d="M0 547l600 453v-300h600v-300h-600v-301z" />
<glyph unicode="&#xe092;" d="M0 400v300h600v300l600 -453l-600 -448v301h-600z" />
<glyph unicode="&#xe093;" d="M204 600l450 600l444 -600h-298v-600h-300v600h-296z" />
<glyph unicode="&#xe094;" d="M104 600h296v600h300v-600h298l-449 -600z" />
<glyph unicode="&#xe095;" d="M0 200q6 132 41 238.5t103.5 193t184 138t271.5 59.5v271l600 -453l-600 -448v301q-95 -2 -183 -20t-170 -52t-147 -92.5t-100 -135.5z" />
<glyph unicode="&#xe096;" d="M0 0v400l129 -129l294 294l142 -142l-294 -294l129 -129h-400zM635 777l142 -142l294 294l129 -129v400h-400l129 -129z" />
<glyph unicode="&#xe097;" d="M34 176l295 295l-129 129h400v-400l-129 130l-295 -295zM600 600v400l129 -129l295 295l142 -141l-295 -295l129 -130h-400z" />
<glyph unicode="&#xe101;" d="M23 600q0 118 45.5 224.5t123 184t184 123t224.5 45.5t224.5 -45.5t184 -123t123 -184t45.5 -224.5t-45.5 -224.5t-123 -184t-184 -123t-224.5 -45.5t-224.5 45.5t-184 123t-123 184t-45.5 224.5zM456 851l58 -302q4 -20 21.5 -34.5t37.5 -14.5h54q20 0 37.5 14.5 t21.5 34.5l58 302q4 20 -8 34.5t-32 14.5h-207q-21 0 -33 -14.5t-8 -34.5zM500 300h200v100h-200v-100z" />
<glyph unicode="&#xe102;" d="M0 800h100v-200h400v300h200v-300h400v200h100v100h-111q1 1 1 6.5t-1.5 15t-3.5 17.5l-34 172q-11 39 -41.5 63t-69.5 24q-32 0 -61 -17l-239 -144q-22 -13 -40 -35q-19 24 -40 36l-238 144q-33 18 -62 18q-39 0 -69.5 -23t-40.5 -61l-35 -177q-2 -8 -3 -18t-1 -15v-6 h-111v-100zM100 0h400v400h-400v-400zM200 900q-3 0 14 48t36 96l18 47l213 -191h-281zM700 0v400h400v-400h-400zM731 900l202 197q5 -12 12 -32.5t23 -64t25 -72t7 -28.5h-269z" />
<glyph unicode="&#xe103;" d="M0 -22v143l216 193q-9 53 -13 83t-5.5 94t9 113t38.5 114t74 124q47 60 99.5 102.5t103 68t127.5 48t145.5 37.5t184.5 43.5t220 58.5q0 -189 -22 -343t-59 -258t-89 -181.5t-108.5 -120t-122 -68t-125.5 -30t-121.5 -1.5t-107.5 12.5t-87.5 17t-56.5 7.5l-99 -55z M238.5 300.5q19.5 -6.5 86.5 76.5q55 66 367 234q70 38 118.5 69.5t102 79t99 111.5t86.5 148q22 50 24 60t-6 19q-7 5 -17 5t-26.5 -14.5t-33.5 -39.5q-35 -51 -113.5 -108.5t-139.5 -89.5l-61 -32q-369 -197 -458 -401q-48 -111 -28.5 -117.5z" />
<glyph unicode="&#xe104;" d="M111 408q0 -33 5 -63q9 -56 44 -119.5t105 -108.5q31 -21 64 -16t62 23.5t57 49.5t48 61.5t35 60.5q32 66 39 184.5t-13 157.5q79 -80 122 -164t26 -184q-5 -33 -20.5 -69.5t-37.5 -80.5q-10 -19 -14.5 -29t-12 -26t-9 -23.5t-3 -19t2.5 -15.5t11 -9.5t19.5 -5t30.5 2.5 t42 8q57 20 91 34t87.5 44.5t87 64t65.5 88.5t47 122q38 172 -44.5 341.5t-246.5 278.5q22 -44 43 -129q39 -159 -32 -154q-15 2 -33 9q-79 33 -120.5 100t-44 175.5t48.5 257.5q-13 -8 -34 -23.5t-72.5 -66.5t-88.5 -105.5t-60 -138t-8 -166.5q2 -12 8 -41.5t8 -43t6 -39.5 t3.5 -39.5t-1 -33.5t-6 -31.5t-13.5 -24t-21 -20.5t-31 -12q-38 -10 -67 13t-40.5 61.5t-15 81.5t10.5 75q-52 -46 -83.5 -101t-39 -107t-7.5 -85z" />
<glyph unicode="&#xe105;" d="M-61 600l26 40q6 10 20 30t49 63.5t74.5 85.5t97 90t116.5 83.5t132.5 59t145.5 23.5t145.5 -23.5t132.5 -59t116.5 -83.5t97 -90t74.5 -85.5t49 -63.5t20 -30l26 -40l-26 -40q-6 -10 -20 -30t-49 -63.5t-74.5 -85.5t-97 -90t-116.5 -83.5t-132.5 -59t-145.5 -23.5 t-145.5 23.5t-132.5 59t-116.5 83.5t-97 90t-74.5 85.5t-49 63.5t-20 30zM120 600q7 -10 40.5 -58t56 -78.5t68 -77.5t87.5 -75t103 -49.5t125 -21.5t123.5 20t100.5 45.5t85.5 71.5t66.5 75.5t58 81.5t47 66q-1 1 -28.5 37.5t-42 55t-43.5 53t-57.5 63.5t-58.5 54 q49 -74 49 -163q0 -124 -88 -212t-212 -88t-212 88t-88 212q0 85 46 158q-102 -87 -226 -258zM377 656q49 -124 154 -191l105 105q-37 24 -75 72t-57 84l-20 36z" />
<glyph unicode="&#xe106;" d="M-61 600l26 40q6 10 20 30t49 63.5t74.5 85.5t97 90t116.5 83.5t132.5 59t145.5 23.5q61 0 121 -17l37 142h148l-314 -1200h-148l37 143q-82 21 -165 71.5t-140 102t-109.5 112t-72 88.5t-29.5 43zM120 600q210 -282 393 -336l37 141q-107 18 -178.5 101.5t-71.5 193.5 q0 85 46 158q-102 -87 -226 -258zM377 656q49 -124 154 -191l47 47l23 87q-30 28 -59 69t-44 68l-14 26zM780 161l38 145q22 15 44.5 34t46 44t40.5 44t41 50.5t33.5 43.5t33 44t24.5 34q-97 127 -140 175l39 146q67 -54 131.5 -125.5t87.5 -103.5t36 -52l26 -40l-26 -40 q-7 -12 -25.5 -38t-63.5 -79.5t-95.5 -102.5t-124 -100t-146.5 -79z" />
<glyph unicode="&#xe107;" d="M-97.5 34q13.5 -34 50.5 -34h1294q37 0 50.5 35.5t-7.5 67.5l-642 1056q-20 34 -48 36.5t-48 -29.5l-642 -1066q-21 -32 -7.5 -66zM155 200l445 723l445 -723h-345v100h-200v-100h-345zM500 600l100 -300l100 300v100h-200v-100z" />
<glyph unicode="&#xe108;" d="M100 262v41q0 20 11 44.5t26 38.5l363 325v339q0 62 44 106t106 44t106 -44t44 -106v-339l363 -325q15 -14 26 -38.5t11 -44.5v-41q0 -20 -12 -26.5t-29 5.5l-359 249v-263q100 -91 100 -113v-64q0 -20 -13 -28.5t-32 0.5l-94 78h-222l-94 -78q-19 -9 -32 -0.5t-13 28.5 v64q0 22 100 113v263l-359 -249q-17 -12 -29 -5.5t-12 26.5z" />
<glyph unicode="&#xe109;" d="M0 50q0 -20 14.5 -35t35.5 -15h1000q21 0 35.5 15t14.5 35v750h-1100v-750zM0 900h1100v150q0 21 -14.5 35.5t-35.5 14.5h-150v100h-100v-100h-500v100h-100v-100h-150q-21 0 -35.5 -14.5t-14.5 -35.5v-150zM100 100v100h100v-100h-100zM100 300v100h100v-100h-100z M100 500v100h100v-100h-100zM300 100v100h100v-100h-100zM300 300v100h100v-100h-100zM300 500v100h100v-100h-100zM500 100v100h100v-100h-100zM500 300v100h100v-100h-100zM500 500v100h100v-100h-100zM700 100v100h100v-100h-100zM700 300v100h100v-100h-100zM700 500 v100h100v-100h-100zM900 100v100h100v-100h-100zM900 300v100h100v-100h-100zM900 500v100h100v-100h-100z" />
<glyph unicode="&#xe110;" d="M0 200v200h259l600 600h241v198l300 -295l-300 -300v197h-159l-600 -600h-341zM0 800h259l122 -122l141 142l-181 180h-341v-200zM678 381l141 142l122 -123h159v198l300 -295l-300 -300v197h-241z" />
<glyph unicode="&#xe111;" d="M0 400v600q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-596l-304 -300v300h-100q-41 0 -70.5 29.5t-29.5 70.5z" />
<glyph unicode="&#xe112;" d="M100 600v200h300v-250q0 -113 6 -145q17 -92 102 -117q39 -11 92 -11q37 0 66.5 5.5t50 15.5t36 24t24 31.5t14 37.5t7 42t2.5 45t0 47v25v250h300v-200q0 -42 -3 -83t-15 -104t-31.5 -116t-58 -109.5t-89 -96.5t-129 -65.5t-174.5 -25.5t-174.5 25.5t-129 65.5t-89 96.5 t-58 109.5t-31.5 116t-15 104t-3 83zM100 900v300h300v-300h-300zM800 900v300h300v-300h-300z" />
<glyph unicode="&#xe113;" d="M-30 411l227 -227l352 353l353 -353l226 227l-578 579z" />
<glyph unicode="&#xe114;" d="M70 797l580 -579l578 579l-226 227l-353 -353l-352 353z" />
<glyph unicode="&#xe115;" d="M-198 700l299 283l300 -283h-203v-400h385l215 -200h-800v600h-196zM402 1000l215 -200h381v-400h-198l299 -283l299 283h-200v600h-796z" />
<glyph unicode="&#xe116;" d="M18 939q-5 24 10 42q14 19 39 19h896l38 162q5 17 18.5 27.5t30.5 10.5h94q20 0 35 -14.5t15 -35.5t-15 -35.5t-35 -14.5h-54l-201 -961q-2 -4 -6 -10.5t-19 -17.5t-33 -11h-31v-50q0 -20 -14.5 -35t-35.5 -15t-35.5 15t-14.5 35v50h-300v-50q0 -20 -14.5 -35t-35.5 -15 t-35.5 15t-14.5 35v50h-50q-21 0 -35.5 15t-14.5 35q0 21 14.5 35.5t35.5 14.5h535l48 200h-633q-32 0 -54.5 21t-27.5 43z" />
<glyph unicode="&#xe117;" d="M0 0v800h1200v-800h-1200zM0 900v100h200q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5h500v-100h-1200z" />
<glyph unicode="&#xe118;" d="M1 0l300 700h1200l-300 -700h-1200zM1 400v600h200q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5h500v-200h-1000z" />
<glyph unicode="&#xe119;" d="M302 300h198v600h-198l298 300l298 -300h-198v-600h198l-298 -300z" />
<glyph unicode="&#xe120;" d="M0 600l300 298v-198h600v198l300 -298l-300 -297v197h-600v-197z" />
<glyph unicode="&#xe121;" d="M0 100v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM31 400l172 739q5 22 23 41.5t38 19.5h672q19 0 37.5 -22.5t23.5 -45.5l172 -732h-1138zM800 100h100v100h-100v-100z M1000 100h100v100h-100v-100z" />
<glyph unicode="&#xe122;" d="M-101 600v50q0 24 25 49t50 38l25 13v-250l-11 5.5t-24 14t-30 21.5t-24 27.5t-11 31.5zM100 500v250v8v8v7t0.5 7t1.5 5.5t2 5t3 4t4.5 3.5t6 1.5t7.5 0.5h200l675 250v-850l-675 200h-38l47 -276q2 -12 -3 -17.5t-11 -6t-21 -0.5h-8h-83q-20 0 -34.5 14t-18.5 35 q-55 337 -55 351zM1100 200v850q0 21 14.5 35.5t35.5 14.5q20 0 35 -14.5t15 -35.5v-850q0 -20 -15 -35t-35 -15q-21 0 -35.5 15t-14.5 35z" />
<glyph unicode="&#xe123;" d="M74 350q0 21 13.5 35.5t33.5 14.5h18l117 173l63 327q15 77 76 140t144 83l-18 32q-6 19 3 32t29 13h94q20 0 29 -10.5t3 -29.5q-18 -36 -18 -37q83 -19 144 -82.5t76 -140.5l63 -327l118 -173h17q20 0 33.5 -14.5t13.5 -35.5q0 -20 -13 -40t-31 -27q-8 -3 -23 -8.5 t-65 -20t-103 -25t-132.5 -19.5t-158.5 -9q-125 0 -245.5 20.5t-178.5 40.5l-58 20q-18 7 -31 27.5t-13 40.5zM497 110q12 -49 40 -79.5t63 -30.5t63 30.5t39 79.5q-48 -6 -102 -6t-103 6z" />
<glyph unicode="&#xe124;" d="M21 445l233 -45l-78 -224l224 78l45 -233l155 179l155 -179l45 233l224 -78l-78 224l234 45l-180 155l180 156l-234 44l78 225l-224 -78l-45 233l-155 -180l-155 180l-45 -233l-224 78l78 -225l-233 -44l179 -156z" />
<glyph unicode="&#xe125;" d="M0 200h200v600h-200v-600zM300 275q0 -75 100 -75h61q124 -100 139 -100h250q46 0 83 57l238 344q29 31 29 74v100q0 44 -30.5 84.5t-69.5 40.5h-328q28 118 28 125v150q0 44 -30.5 84.5t-69.5 40.5h-50q-27 0 -51 -20t-38 -48l-96 -198l-145 -196q-20 -26 -20 -63v-400z M400 300v375l150 213l100 212h50v-175l-50 -225h450v-125l-250 -375h-214l-136 100h-100z" />
<glyph unicode="&#xe126;" d="M0 400v600h200v-600h-200zM300 525v400q0 75 100 75h61q124 100 139 100h250q46 0 83 -57l238 -344q29 -31 29 -74v-100q0 -44 -30.5 -84.5t-69.5 -40.5h-328q28 -118 28 -125v-150q0 -44 -30.5 -84.5t-69.5 -40.5h-50q-27 0 -51 20t-38 48l-96 198l-145 196 q-20 26 -20 63zM400 525l150 -212l100 -213h50v175l-50 225h450v125l-250 375h-214l-136 -100h-100v-375z" />
<glyph unicode="&#xe127;" d="M8 200v600h200v-600h-200zM308 275v525q0 17 14 35.5t28 28.5l14 9l362 230q14 6 25 6q17 0 29 -12l109 -112q14 -14 14 -34q0 -18 -11 -32l-85 -121h302q85 0 138.5 -38t53.5 -110t-54.5 -111t-138.5 -39h-107l-130 -339q-7 -22 -20.5 -41.5t-28.5 -19.5h-341 q-7 0 -90 81t-83 94zM408 289l100 -89h293l131 339q6 21 19.5 41t28.5 20h203q16 0 25 15t9 36q0 20 -9 34.5t-25 14.5h-457h-6.5h-7.5t-6.5 0.5t-6 1t-5 1.5t-5.5 2.5t-4 4t-4 5.5q-5 12 -5 20q0 14 10 27l147 183l-86 83l-339 -236v-503z" />
<glyph unicode="&#xe128;" d="M-101 651q0 72 54 110t139 38l302 -1l-85 121q-11 16 -11 32q0 21 14 34l109 113q13 12 29 12q11 0 25 -6l365 -230q7 -4 17 -10.5t26.5 -26t16.5 -36.5v-526q0 -13 -86 -93.5t-94 -80.5h-341q-16 0 -29.5 20t-19.5 41l-130 339h-107q-84 0 -139 39t-55 111zM-1 601h222 q15 0 28.5 -20.5t19.5 -40.5l131 -339h293l107 89v502l-343 237l-87 -83l145 -184q10 -11 10 -26q0 -11 -5 -20q-1 -3 -3.5 -5.5l-4 -4t-5 -2.5t-5.5 -1.5t-6.5 -1t-6.5 -0.5h-7.5h-6.5h-476v-100zM1000 201v600h200v-600h-200z" />
<glyph unicode="&#xe129;" d="M97 719l230 -363q4 -6 10.5 -15.5t26 -25t36.5 -15.5h525q13 0 94 83t81 90v342q0 15 -20 28.5t-41 19.5l-339 131v106q0 84 -39 139t-111 55t-110 -53.5t-38 -138.5v-302l-121 84q-15 12 -33.5 11.5t-32.5 -13.5l-112 -110q-22 -22 -6 -53zM172 739l83 86l183 -146 q22 -18 47 -5q3 1 5.5 3.5l4 4t2.5 5t1.5 5.5t1 6.5t0.5 6.5v7.5v6.5v456q0 22 25 31t50 -0.5t25 -30.5v-202q0 -16 20 -29.5t41 -19.5l339 -130v-294l-89 -100h-503zM400 0v200h600v-200h-600z" />
<glyph unicode="&#xe130;" d="M2 585q-16 -31 6 -53l112 -110q13 -13 32 -13.5t34 10.5l121 85q0 -51 -0.5 -153.5t-0.5 -148.5q0 -84 38.5 -138t110.5 -54t111 55t39 139v106l339 131q20 6 40.5 19.5t20.5 28.5v342q0 7 -81 90t-94 83h-525q-17 0 -35.5 -14t-28.5 -28l-10 -15zM77 565l236 339h503 l89 -100v-294l-340 -130q-20 -6 -40 -20t-20 -29v-202q0 -22 -25 -31t-50 0t-25 31v456v14.5t-1.5 11.5t-5 12t-9.5 7q-24 13 -46 -5l-184 -146zM305 1104v200h600v-200h-600z" />
<glyph unicode="&#xe131;" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q162 0 299.5 -80t217.5 -218t80 -300t-80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM298 701l2 -201h300l-2 -194l402 294l-402 298v-197h-300z" />
<glyph unicode="&#xe132;" d="M0 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t231.5 47.5q122 0 232.5 -47.5t190.5 -127.5t127.5 -190.5t47.5 -232.5q0 -162 -80 -299.5t-218 -217.5t-300 -80t-299.5 80t-217.5 217.5t-80 299.5zM200 600l402 -294l-2 194h300l2 201h-300v197z" />
<glyph unicode="&#xe133;" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q162 0 299.5 -80t217.5 -218t80 -300t-80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM300 600h200v-300h200v300h200l-300 400z" />
<glyph unicode="&#xe134;" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q162 0 299.5 -80t217.5 -218t80 -300t-80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM300 600l300 -400l300 400h-200v300h-200v-300h-200z" />
<glyph unicode="&#xe135;" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q121 0 231.5 -47.5t190.5 -127.5t127.5 -190.5t47.5 -232.5q0 -162 -80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM254 780q-8 -33 5.5 -92.5t7.5 -87.5q0 -9 17 -44t16 -60 q12 0 23 -5.5t23 -15t20 -13.5q24 -12 108 -42q22 -8 53 -31.5t59.5 -38.5t57.5 -11q8 -18 -15 -55t-20 -57q42 -71 87 -80q0 -6 -3 -15.5t-3.5 -14.5t4.5 -17q104 -3 221 112q30 29 47 47t34.5 49t20.5 62q-14 9 -37 9.5t-36 7.5q-14 7 -49 15t-52 19q-9 0 -39.5 -0.5 t-46.5 -1.5t-39 -6.5t-39 -16.5q-50 -35 -66 -12q-4 2 -3.5 25.5t0.5 25.5q-6 13 -26.5 17t-24.5 7q2 22 -2 41t-16.5 28t-38.5 -20q-23 -25 -42 4q-19 28 -8 58q6 16 22 22q6 -1 26 -1.5t33.5 -4t19.5 -13.5q12 -19 32 -37.5t34 -27.5l14 -8q0 3 9.5 39.5t5.5 57.5 q-4 23 14.5 44.5t22.5 31.5q5 14 10 35t8.5 31t15.5 22.5t34 21.5q-6 18 10 37q8 0 23.5 -1.5t24.5 -1.5t20.5 4.5t20.5 15.5q-10 23 -30.5 42.5t-38 30t-49 26.5t-43.5 23q11 39 2 44q31 -13 58 -14.5t39 3.5l11 4q7 36 -16.5 53.5t-64.5 28.5t-56 23q-19 -3 -37 0 q-15 -12 -36.5 -21t-34.5 -12t-44 -8t-39 -6q-15 -3 -45.5 0.5t-45.5 -2.5q-21 -7 -52 -26.5t-34 -34.5q-3 -11 6.5 -22.5t8.5 -18.5q-3 -34 -27.5 -90.5t-29.5 -79.5zM518 916q3 12 16 30t16 25q10 -10 18.5 -10t14 6t14.5 14.5t16 12.5q0 -24 17 -66.5t17 -43.5 q-9 2 -31 5t-36 5t-32 8t-30 14zM692 1003h1h-1z" />
<glyph unicode="&#xe136;" d="M0 164.5q0 21.5 15 37.5l600 599q-33 101 6 201.5t135 154.5q164 92 306 -9l-259 -138l145 -232l251 126q13 -175 -151 -267q-123 -70 -253 -23l-596 -596q-15 -16 -36.5 -16t-36.5 16l-111 110q-15 15 -15 36.5z" />
<glyph unicode="&#xe137;" horiz-adv-x="1220" d="M0 196v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM0 596v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000 q-41 0 -70.5 29.5t-29.5 70.5zM0 996v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM600 596h500v100h-500v-100zM800 196h300v100h-300v-100zM900 996h200v100h-200v-100z" />
<glyph unicode="&#xe138;" d="M100 1100v100h1000v-100h-1000zM150 1000h900l-350 -500v-300l-200 -200v500z" />
<glyph unicode="&#xe139;" d="M0 200v200h1200v-200q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM0 500v400q0 41 29.5 70.5t70.5 29.5h300v100q0 41 29.5 70.5t70.5 29.5h200q41 0 70.5 -29.5t29.5 -70.5v-100h300q41 0 70.5 -29.5t29.5 -70.5v-400h-500v100h-200v-100h-500z M500 1000h200v100h-200v-100z" />
<glyph unicode="&#xe140;" d="M0 0v400l129 -129l200 200l142 -142l-200 -200l129 -129h-400zM0 800l129 129l200 -200l142 142l-200 200l129 129h-400v-400zM729 329l142 142l200 -200l129 129v-400h-400l129 129zM729 871l200 200l-129 129h400v-400l-129 129l-200 -200z" />
<glyph unicode="&#xe141;" d="M0 596q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM182 596q0 -172 121.5 -293t292.5 -121t292.5 121t121.5 293q0 171 -121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM291 655 q0 23 15.5 38.5t38.5 15.5t39 -16t16 -38q0 -23 -16 -39t-39 -16q-22 0 -38 16t-16 39zM400 850q0 22 16 38.5t39 16.5q22 0 38 -16t16 -39t-16 -39t-38 -16q-23 0 -39 16.5t-16 38.5zM514 609q0 32 20.5 56.5t51.5 29.5l122 126l1 1q-9 14 -9 28q0 22 16 38.5t39 16.5 q22 0 38 -16t16 -39t-16 -39t-38 -16q-14 0 -29 10l-55 -145q17 -22 17 -51q0 -36 -25.5 -61.5t-61.5 -25.5t-61.5 25.5t-25.5 61.5zM800 655q0 22 16 38t39 16t38.5 -15.5t15.5 -38.5t-16 -39t-38 -16q-23 0 -39 16t-16 39z" />
<glyph unicode="&#xe142;" d="M-40 375q-13 -95 35 -173q35 -57 94 -89t129 -32q63 0 119 28q33 16 65 40.5t52.5 45.5t59.5 64q40 44 57 61l394 394q35 35 47 84t-3 96q-27 87 -117 104q-20 2 -29 2q-46 0 -78.5 -16.5t-67.5 -51.5l-389 -396l-7 -7l69 -67l377 373q20 22 39 38q23 23 50 23 q38 0 53 -36q16 -39 -20 -75l-547 -547q-52 -52 -125 -52q-55 0 -100 33t-54 96q-5 35 2.5 66t31.5 63t42 50t56 54q24 21 44 41l348 348q52 52 82.5 79.5t84 54t107.5 26.5q25 0 48 -4q95 -17 154 -94.5t51 -175.5q-7 -101 -98 -192l-252 -249l-253 -256l7 -7l69 -60 l517 511q67 67 95 157t11 183q-16 87 -67 154t-130 103q-69 33 -152 33q-107 0 -197 -55q-40 -24 -111 -95l-512 -512q-68 -68 -81 -163z" />
<glyph unicode="&#xe143;" d="M80 784q0 131 98.5 229.5t230.5 98.5q143 0 241 -129q103 129 246 129q129 0 226 -98.5t97 -229.5q0 -46 -17.5 -91t-61 -99t-77 -89.5t-104.5 -105.5q-197 -191 -293 -322l-17 -23l-16 23q-43 58 -100 122.5t-92 99.5t-101 100q-71 70 -104.5 105.5t-77 89.5t-61 99 t-17.5 91zM250 784q0 -27 30.5 -70t61.5 -75.5t95 -94.5l22 -22q93 -90 190 -201q82 92 195 203l12 12q64 62 97.5 97t64.5 79t31 72q0 71 -48 119.5t-105 48.5q-74 0 -132 -83l-118 -171l-114 174q-51 80 -123 80q-60 0 -109.5 -49.5t-49.5 -118.5z" />
<glyph unicode="&#xe144;" d="M57 353q0 -95 66 -159l141 -142q68 -66 159 -66q93 0 159 66l283 283q66 66 66 159t-66 159l-141 141q-8 9 -19 17l-105 -105l212 -212l-389 -389l-247 248l95 95l-18 18q-46 45 -75 101l-55 -55q-66 -66 -66 -159zM269 706q0 -93 66 -159l141 -141q7 -7 19 -17l105 105 l-212 212l389 389l247 -247l-95 -96l18 -17q47 -49 77 -100l29 29q35 35 62.5 88t27.5 96q0 93 -66 159l-141 141q-66 66 -159 66q-95 0 -159 -66l-283 -283q-66 -64 -66 -159z" />
<glyph unicode="&#xe145;" d="M200 100v953q0 21 30 46t81 48t129 38t163 15t162 -15t127 -38t79 -48t29 -46v-953q0 -41 -29.5 -70.5t-70.5 -29.5h-600q-41 0 -70.5 29.5t-29.5 70.5zM300 300h600v700h-600v-700zM496 150q0 -43 30.5 -73.5t73.5 -30.5t73.5 30.5t30.5 73.5t-30.5 73.5t-73.5 30.5 t-73.5 -30.5t-30.5 -73.5z" />
<glyph unicode="&#xe146;" d="M0 0l303 380l207 208l-210 212h300l267 279l-35 36q-15 14 -15 35t15 35q14 15 35 15t35 -15l283 -282q15 -15 15 -36t-15 -35q-14 -15 -35 -15t-35 15l-36 35l-279 -267v-300l-212 210l-208 -207z" />
<glyph unicode="&#xe148;" d="M295 433h139q5 -77 48.5 -126.5t117.5 -64.5v335q-6 1 -15.5 4t-11.5 3q-46 14 -79 26.5t-72 36t-62.5 52t-40 72.5t-16.5 99q0 92 44 159.5t109 101t144 40.5v78h100v-79q38 -4 72.5 -13.5t75.5 -31.5t71 -53.5t51.5 -84t24.5 -118.5h-159q-8 72 -35 109.5t-101 50.5 v-307l64 -14q34 -7 64 -16.5t70 -31.5t67.5 -52t47.5 -80.5t20 -112.5q0 -139 -89 -224t-244 -96v-77h-100v78q-152 17 -237 104q-40 40 -52.5 93.5t-15.5 139.5zM466 889q0 -29 8 -51t16.5 -34t29.5 -22.5t31 -13.5t38 -10q7 -2 11 -3v274q-61 -8 -97.5 -37.5t-36.5 -102.5 zM700 237q170 18 170 151q0 64 -44 99.5t-126 60.5v-311z" />
<glyph unicode="&#xe149;" d="M100 600v100h166q-24 49 -44 104q-10 26 -14.5 55.5t-3 72.5t25 90t68.5 87q97 88 263 88q129 0 230 -89t101 -208h-153q0 52 -34 89.5t-74 51.5t-76 14q-37 0 -79 -14.5t-62 -35.5q-41 -44 -41 -101q0 -28 16.5 -69.5t28 -62.5t41.5 -72h241v-100h-197q8 -50 -2.5 -115 t-31.5 -94q-41 -59 -99 -113q35 11 84 18t70 7q33 1 103 -16t103 -17q76 0 136 30l50 -147q-41 -25 -80.5 -36.5t-59 -13t-61.5 -1.5q-23 0 -128 33t-155 29q-39 -4 -82 -17t-66 -25l-24 -11l-55 145l16.5 11t15.5 10t13.5 9.5t14.5 12t14.5 14t17.5 18.5q48 55 54 126.5 t-30 142.5h-221z" />
<glyph unicode="&#xe150;" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM602 900l298 300l298 -300h-198v-900h-200v900h-198z" />
<glyph unicode="&#xe151;" d="M2 300h198v900h200v-900h198l-298 -300zM700 0v200h100v-100h200v-100h-300zM700 400v100h300v-200h-99v-100h-100v100h99v100h-200zM700 700v500h300v-500h-100v100h-100v-100h-100zM801 900h100v200h-100v-200z" />
<glyph unicode="&#xe152;" d="M2 300h198v900h200v-900h198l-298 -300zM700 0v500h300v-500h-100v100h-100v-100h-100zM700 700v200h100v-100h200v-100h-300zM700 1100v100h300v-200h-99v-100h-100v100h99v100h-200zM801 200h100v200h-100v-200z" />
<glyph unicode="&#xe153;" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM800 100v400h300v-500h-100v100h-200zM800 1100v100h200v-500h-100v400h-100zM901 200h100v200h-100v-200z" />
<glyph unicode="&#xe154;" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM800 400v100h200v-500h-100v400h-100zM800 800v400h300v-500h-100v100h-200zM901 900h100v200h-100v-200z" />
<glyph unicode="&#xe155;" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM700 100v200h500v-200h-500zM700 400v200h400v-200h-400zM700 700v200h300v-200h-300zM700 1000v200h200v-200h-200z" />
<glyph unicode="&#xe156;" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM700 100v200h200v-200h-200zM700 400v200h300v-200h-300zM700 700v200h400v-200h-400zM700 1000v200h500v-200h-500z" />
<glyph unicode="&#xe157;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h300q162 0 281 -118.5t119 -281.5v-300q0 -165 -118.5 -282.5t-281.5 -117.5h-300q-165 0 -282.5 117.5t-117.5 282.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500z" />
<glyph unicode="&#xe158;" d="M0 400v300q0 163 119 281.5t281 118.5h300q165 0 282.5 -117.5t117.5 -282.5v-300q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-163 0 -281.5 117.5t-118.5 282.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM400 300l333 250l-333 250v-500z" />
<glyph unicode="&#xe159;" d="M0 400v300q0 163 117.5 281.5t282.5 118.5h300q163 0 281.5 -119t118.5 -281v-300q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5t-117.5 282.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM300 700l250 -333l250 333h-500z" />
<glyph unicode="&#xe160;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h300q165 0 282.5 -117.5t117.5 -282.5v-300q0 -162 -118.5 -281t-281.5 -119h-300q-165 0 -282.5 118.5t-117.5 281.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM300 400h500l-250 333z" />
<glyph unicode="&#xe161;" d="M0 400v300h300v200l400 -350l-400 -350v200h-300zM500 0v200h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5h-500v200h400q165 0 282.5 -117.5t117.5 -282.5v-300q0 -165 -117.5 -282.5t-282.5 -117.5h-400z" />
<glyph unicode="&#xe162;" d="M217 519q8 -19 31 -19h302q-155 -438 -160 -458q-5 -21 4 -32l9 -8h9q14 0 26 15q11 13 274.5 321.5t264.5 308.5q14 19 5 36q-8 17 -31 17l-301 -1q1 4 78 219.5t79 227.5q2 15 -5 27l-9 9h-9q-15 0 -25 -16q-4 -6 -98 -111.5t-228.5 -257t-209.5 -237.5q-16 -19 -6 -41 z" />
<glyph unicode="&#xe163;" d="M0 400q0 -165 117.5 -282.5t282.5 -117.5h300q47 0 100 15v185h-500q-41 0 -70.5 29.5t-29.5 70.5v500q0 41 29.5 70.5t70.5 29.5h500v185q-14 4 -114 7.5t-193 5.5l-93 2q-165 0 -282.5 -117.5t-117.5 -282.5v-300zM600 400v300h300v200l400 -350l-400 -350v200h-300z " />
<glyph unicode="&#xe164;" d="M0 400q0 -165 117.5 -282.5t282.5 -117.5h300q163 0 281.5 117.5t118.5 282.5v98l-78 73l-122 -123v-148q0 -41 -29.5 -70.5t-70.5 -29.5h-500q-41 0 -70.5 29.5t-29.5 70.5v500q0 41 29.5 70.5t70.5 29.5h156l118 122l-74 78h-100q-165 0 -282.5 -117.5t-117.5 -282.5 v-300zM496 709l353 342l-149 149h500v-500l-149 149l-342 -353z" />
<glyph unicode="&#xe165;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM406 600 q0 80 57 137t137 57t137 -57t57 -137t-57 -137t-137 -57t-137 57t-57 137z" />
<glyph unicode="&#xe166;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 800l445 -500l450 500h-295v400h-300v-400h-300zM900 150h100v50h-100v-50z" />
<glyph unicode="&#xe167;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 700h300v-300h300v300h295l-445 500zM900 150h100v50h-100v-50z" />
<glyph unicode="&#xe168;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 705l305 -305l596 596l-154 155l-442 -442l-150 151zM900 150h100v50h-100v-50z" />
<glyph unicode="&#xe169;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 988l97 -98l212 213l-97 97zM200 400l697 1l3 699l-250 -239l-149 149l-212 -212l149 -149zM900 150h100v50h-100v-50z" />
<glyph unicode="&#xe170;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM200 612l212 -212l98 97l-213 212zM300 1200l239 -250l-149 -149l212 -212l149 148l249 -237l-1 697zM900 150h100v50h-100v-50z" />
<glyph unicode="&#xe171;" d="M23 415l1177 784v-1079l-475 272l-310 -393v416h-392zM494 210l672 938l-672 -712v-226z" />
<glyph unicode="&#xe172;" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-850q0 -21 -15 -35.5t-35 -14.5h-150v400h-700v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM600 1000h100v200h-100v-200z" />
<glyph unicode="&#xe173;" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-218l-276 -275l-120 120l-126 -127h-378v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM581 306l123 123l120 -120l353 352l123 -123l-475 -476zM600 1000h100v200h-100v-200z" />
<glyph unicode="&#xe174;" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-269l-103 -103l-170 170l-298 -298h-329v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM600 1000h100v200h-100v-200zM700 133l170 170l-170 170l127 127l170 -170l170 170l127 -128l-170 -169l170 -170 l-127 -127l-170 170l-170 -170z" />
<glyph unicode="&#xe175;" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-300h-400v-200h-500v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM600 300l300 -300l300 300h-200v300h-200v-300h-200zM600 1000v200h100v-200h-100z" />
<glyph unicode="&#xe176;" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-402l-200 200l-298 -298h-402v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM600 300h200v-300h200v300h200l-300 300zM600 1000v200h100v-200h-100z" />
<glyph unicode="&#xe177;" d="M0 250q0 -21 14.5 -35.5t35.5 -14.5h1100q21 0 35.5 14.5t14.5 35.5v550h-1200v-550zM0 900h1200v150q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5v-150zM100 300v200h400v-200h-400z" />
<glyph unicode="&#xe178;" d="M0 400l300 298v-198h400v-200h-400v-198zM100 800v200h100v-200h-100zM300 800v200h100v-200h-100zM500 800v200h400v198l300 -298l-300 -298v198h-400zM800 300v200h100v-200h-100zM1000 300h100v200h-100v-200z" />
<glyph unicode="&#xe179;" d="M100 700v400l50 100l50 -100v-300h100v300l50 100l50 -100v-300h100v300l50 100l50 -100v-400l-100 -203v-447q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v447zM800 597q0 -29 10.5 -55.5t25 -43t29 -28.5t25.5 -18l10 -5v-397q0 -21 14.5 -35.5 t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5v1106q0 31 -18 40.5t-44 -7.5l-276 -116q-25 -17 -43.5 -51.5t-18.5 -65.5v-359z" />
<glyph unicode="&#xe180;" d="M100 0h400v56q-75 0 -87.5 6t-12.5 44v394h500v-394q0 -38 -12.5 -44t-87.5 -6v-56h400v56q-4 0 -11 0.5t-24 3t-30 7t-24 15t-11 24.5v888q0 22 25 34.5t50 13.5l25 2v56h-400v-56q75 0 87.5 -6t12.5 -44v-394h-500v394q0 38 12.5 44t87.5 6v56h-400v-56q4 0 11 -0.5 t24 -3t30 -7t24 -15t11 -24.5v-888q0 -22 -25 -34.5t-50 -13.5l-25 -2v-56z" />
<glyph unicode="&#xe181;" d="M0 300q0 -41 29.5 -70.5t70.5 -29.5h300q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5h-300q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM100 100h400l200 200h105l295 98v-298h-425l-100 -100h-375zM100 300v200h300v-200h-300zM100 600v200h300v-200h-300z M100 1000h400l200 -200v-98l295 98h105v200h-425l-100 100h-375zM700 402v163l400 133v-163z" />
<glyph unicode="&#xe182;" d="M16.5 974.5q0.5 -21.5 16 -90t46.5 -140t104 -177.5t175 -208q103 -103 207.5 -176t180 -103.5t137 -47t92.5 -16.5l31 1l163 162q17 18 13.5 41t-22.5 37l-192 136q-19 14 -45 12t-42 -19l-118 -118q-142 101 -268 227t-227 268l118 118q17 17 20 41.5t-11 44.5 l-139 194q-14 19 -36.5 22t-40.5 -14l-162 -162q-1 -11 -0.5 -32.5z" />
<glyph unicode="&#xe183;" d="M0 50v212q0 20 10.5 45.5t24.5 39.5l365 303v50q0 4 1 10.5t12 22.5t30 28.5t60 23t97 10.5t97 -10t60 -23.5t30 -27.5t12 -24l1 -10v-50l365 -303q14 -14 24.5 -39.5t10.5 -45.5v-212q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-20 0 -35 14.5t-15 35.5zM0 712 q0 -21 14.5 -33.5t34.5 -8.5l202 33q20 4 34.5 21t14.5 38v146q141 24 300 24t300 -24v-146q0 -21 14.5 -38t34.5 -21l202 -33q20 -4 34.5 8.5t14.5 33.5v200q-6 8 -19 20.5t-63 45t-112 57t-171 45t-235 20.5q-92 0 -175 -10.5t-141.5 -27t-108.5 -36.5t-81.5 -40 t-53.5 -36.5t-31 -27.5l-9 -10v-200z" />
<glyph unicode="&#xe184;" d="M100 0v100h1100v-100h-1100zM175 200h950l-125 150v250l100 100v400h-100v-200h-100v200h-200v-200h-100v200h-200v-200h-100v200h-100v-400l100 -100v-250z" />
<glyph unicode="&#xe185;" d="M100 0h300v400q0 41 -29.5 70.5t-70.5 29.5h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-400zM500 0v1000q0 41 29.5 70.5t70.5 29.5h100q41 0 70.5 -29.5t29.5 -70.5v-1000h-300zM900 0v700q0 41 29.5 70.5t70.5 29.5h100q41 0 70.5 -29.5t29.5 -70.5v-700h-300z" />
<glyph unicode="&#xe186;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h300v300h-200v100h200v100h-300v-300h200v-100h-200v-100zM600 300h200v100h100v300h-100v100h-200v-500 zM700 400v300h100v-300h-100z" />
<glyph unicode="&#xe187;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h100v200h100v-200h100v500h-100v-200h-100v200h-100v-500zM600 300h200v100h100v300h-100v100h-200v-500 zM700 400v300h100v-300h-100z" />
<glyph unicode="&#xe188;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h300v100h-200v300h200v100h-300v-500zM600 300h300v100h-200v300h200v100h-300v-500z" />
<glyph unicode="&#xe189;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 550l300 -150v300zM600 400l300 150l-300 150v-300z" />
<glyph unicode="&#xe190;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300v500h700v-500h-700zM300 400h130q41 0 68 42t27 107t-28.5 108t-66.5 43h-130v-300zM575 549 q0 -65 27 -107t68 -42h130v300h-130q-38 0 -66.5 -43t-28.5 -108z" />
<glyph unicode="&#xe191;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h300v300h-200v100h200v100h-300v-300h200v-100h-200v-100zM601 300h100v100h-100v-100zM700 700h100 v-400h100v500h-200v-100z" />
<glyph unicode="&#xe192;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h300v400h-200v100h-100v-500zM301 400v200h100v-200h-100zM601 300h100v100h-100v-100zM700 700h100 v-400h100v500h-200v-100z" />
<glyph unicode="&#xe193;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 700v100h300v-300h-99v-100h-100v100h99v200h-200zM201 300v100h100v-100h-100zM601 300v100h100v-100h-100z M700 700v100h200v-500h-100v400h-100z" />
<glyph unicode="&#xe194;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM400 500v200 l100 100h300v-100h-300v-200h300v-100h-300z" />
<glyph unicode="&#xe195;" d="M0 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM182 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM400 400v400h300 l100 -100v-100h-100v100h-200v-100h200v-100h-200v-100h-100zM700 400v100h100v-100h-100z" />
<glyph unicode="&#xe197;" d="M-14 494q0 -80 56.5 -137t135.5 -57h222v300h400v-300h128q120 0 205 86.5t85 207.5t-85 207t-205 86q-46 0 -90 -14q-44 97 -134.5 156.5t-200.5 59.5q-152 0 -260 -107.5t-108 -260.5q0 -25 2 -37q-66 -14 -108.5 -67.5t-42.5 -122.5zM300 200h200v300h200v-300h200 l-300 -300z" />
<glyph unicode="&#xe198;" d="M-14 494q0 -80 56.5 -137t135.5 -57h8l414 414l403 -403q94 26 154.5 104.5t60.5 178.5q0 120 -85 206.5t-205 86.5q-46 0 -90 -14q-44 97 -134.5 156.5t-200.5 59.5q-152 0 -260 -107.5t-108 -260.5q0 -25 2 -37q-66 -14 -108.5 -67.5t-42.5 -122.5zM300 200l300 300 l300 -300h-200v-300h-200v300h-200z" />
<glyph unicode="&#xe199;" d="M100 200h400v-155l-75 -45h350l-75 45v155h400l-270 300h170l-270 300h170l-300 333l-300 -333h170l-270 -300h170z" />
<glyph unicode="&#xe200;" d="M121 700q0 -53 28.5 -97t75.5 -65q-4 -16 -4 -38q0 -74 52.5 -126.5t126.5 -52.5q56 0 100 30v-306l-75 -45h350l-75 45v306q46 -30 100 -30q74 0 126.5 52.5t52.5 126.5q0 24 -9 55q50 32 79.5 83t29.5 112q0 90 -61.5 155.5t-150.5 71.5q-26 89 -99.5 145.5 t-167.5 56.5q-116 0 -197.5 -81.5t-81.5 -197.5q0 -4 1 -11.5t1 -11.5q-14 2 -23 2q-74 0 -126.5 -52.5t-52.5 -126.5z" />
</font>
</defs></svg>
interface/web/themes/default/assets/fonts/glyphicons-halflings-regular.ttf
Binary files differ
interface/web/themes/default/assets/fonts/glyphicons-halflings-regular.woff
Binary files differ
interface/web/themes/default/assets/javascripts/ispconfig.js
@@ -23,11 +23,7 @@
    },
    
    reportError: function(request) {
        /* Error reporting is disabled by default as some browsers like safari
           sometimes throw errors when a ajax request is delayed even if the
           ajax request worked. */
        /*alert(request);*/
    },
    
    registerHook: function(name, callback) {
@@ -138,58 +134,11 @@
            'fontAwesome': true,
            'autoclose': true
        });
        $('[data-toggle="tooltip"]').tooltip({
        });
        
        ISPConfig.callHook('onAfterContentLoad', {'url': url, 'data': data });
    },
    /* THIS ONE SHOULD BE REMOVED AFTER CREATING THE STATIC LOGIN PAGE!!! */
    /*submitLoginForm: function(formname) {
        //* Validate form. TODO: username and password with strip();
        var frm = document.getElementById(formname);
        var userNameObj = frm.username;
        if(userNameObj.value == ''){
            userNameObj.focus();
            return;
        }
        var passwordObj = frm.passwort;
        if(passwordObj.value == ''){
            passwordObj.focus();
            return;
        }
        $('#dummy_username').val(userNameObj.value);
        $('#dummy_passwort').val(passwordObj.value);
        $('#dummy_login_form').submit();
        var submitFormObj = $.ajax({
            type: "POST",
            url: "content.php",
            data: $('#'+formname).serialize(),
            dataType: "html",
            beforeSend: function() {
                ISPConfig.showLoadIndicator();
            },
            success: function(data, textStatus, jqXHR) {
                if(jqXHR.responseText.indexOf('HEADER_REDIRECT:') > -1) {
                    var parts = jqXHR.responseText.split(':');
                    ISPConfig.loadContent(parts[1]);
                } else if (jqXHR.responseText.indexOf('LOGIN_REDIRECT:') > -1) {
                    // Go to the login page
                    document.location.href = 'index.php';
                } else {
                    $('#pageContent').html(jqXHR.responseText);
                    ISPConfig.onAfterContentLoad('content.php', $('#'+formname).serialize());
                    ISPConfig.pageFormChanged = false;
                }
                ISPConfig.loadMenus();
                ISPConfig.hideLoadIndicator();
            },
            error: function() {
                ISPConfig.hideLoadIndicator();
                ISPConfig.reportError('Ajax Request was not successful.110');
            }
        });
    },*/
    submitForm: function(formname, target, confirmation) {
        var successMessage = arguments[3];
@@ -320,11 +269,6 @@
                    var newUrl= jqXHR.responseText.substr(jqXHR.responseText.indexOf('URL_REDIRECT:') + "URL_REDIRECT:".length);
                    document.location.href = newUrl;
                } else {
                    //document.getElementById('pageContent').innerHTML = jqXHR.responseText;
                    //var reponse = $(jqXHR.responseText);
                    //var reponseScript = reponse.filter("script");
                    //$.each(reponseScript, function(idx, val) { eval(val.text); } );
                    $('#pageContent').html(jqXHR.responseText);
                    ISPConfig.onAfterContentLoad(pagename, (params ? params : null));
                    ISPConfig.pageFormChanged = false;
@@ -444,7 +388,10 @@
    },
    changeTab: function(tab, target, force) {
        if(ISPConfig.requestsRunning > 0) return false;
        if(ISPConfig.requestsRunning > 0) {
            console.log('tab change interrupted, request still running.');
            return false;
        }
    
        document.pageForm.next_tab.value = tab;
@@ -618,9 +565,17 @@
    }
});
var $page = $('html, body');
$(document).on('click', 'a[data-load-content],button[data-load-content]', function(e) {
    e.preventDefault();
    $('html, body').animate({scrollTop: 0}, 1000);
    if(ISPConfig.requestsRunning > 0) {
        console.log('preventing click because there is still a request running.');
        return;
    }
    $page.on('scroll mousedown wheel DOMMouseScroll mousewheel keyup touchmove', function() { $page.stop(); });
    $page.animate({scrollTop: 0}, 1000, function() { $page.off('scroll mousedown wheel DOMMouseScroll mousewheel keyup touchmove', function() { $page.stop(); }); });
    
    var content_to_load = $(this).attr('data-load-content');
    if(!content_to_load) return this;
@@ -630,7 +585,13 @@
$(document).on('click', 'a[data-capp],button[data-capp]', function(e) {
    e.preventDefault();
    $('html, body').animate({scrollTop: 0}, 1000);
    if(ISPConfig.requestsRunning > 0) {
        console.log('preventing click because there is still a request running.');
        return;
    }
    $page.on('scroll mousedown wheel DOMMouseScroll mousewheel keyup touchmove', function() { $page.stop(); });
    $page.animate({scrollTop: 0}, 1000, function() { $page.off('scroll mousedown wheel DOMMouseScroll mousewheel keyup touchmove', function() { $page.stop(); }); });
    
    var content_to_load = $(this).attr('data-capp');
    if(!content_to_load) return this;
@@ -640,7 +601,13 @@
$(document).on('click', 'a[data-submit-form],button[data-submit-form]', function(e) {
    e.preventDefault();
    $('html, body').animate({scrollTop: 0}, 1000);
    if(ISPConfig.requestsRunning > 0) {
        console.log('preventing click because there is still a request running.');
        return;
    }
    $page.on('scroll mousedown wheel DOMMouseScroll mousewheel keyup touchmove', function() { $page.stop(); });
    $page.animate({scrollTop: 0}, 1000, function() { $page.off('scroll mousedown wheel DOMMouseScroll mousewheel keyup touchmove', function() { $page.stop(); }); });
    
    var $el = $(this);
    var act = $el.attr('data-form-action');
interface/web/themes/default/assets/stylesheets/ispconfig.css
@@ -231,6 +231,9 @@
    transition: background ease 500ms; }
    .table tbody tr:last-child {
      border-radius: 4px; }
    .table tbody tr td {
      text-overflow: ellipsis;
      overflow-x: hidden; }
.tfooter {
  margin-top: -1px;
interface/web/themes/default/assets/stylesheets/ispconfig.min.css
@@ -1 +1 @@
body{overflow-y:scroll}.left{float:left}.right{float:right}.clear:after{content:"";display:table;clear:both}.marginTop15{margin-top:15px}.paddingX5{padding-left:5px!important;padding-right:5px!important}.width65{width:65px}.form-group input[type='checkbox']{margin-top:10px}.control-label{font-weight:normal}.control-label:after{content:":"}.formbutton-default{padding:6px 30px;border-bottom-style:solid;border-bottom-width:2px;font-size:12px;font-weight:bold;transition:all ease 500ms}.formbutton-success,.formbutton-danger{padding:6px 30px;border-style:solid;border-width:1px;border-bottom-width:solid;font-size:12px;font-weight:bold;transition:all ease 500ms}.formbutton-narrow{padding:6px 8px;margin-left:2px;margin-right:2px}.formbutton-narrower{padding:4px 6px}#main-wrapper{margin:0 auto;width:95%;max-width:1260px}#logo{float:left;width:200px;height:65px;margin-top:10px}#logo a{display:block;width:100%;height:100%}#headerbar{float:right}#searchform{float:right;margin-top:16px}#searchform>div{position:relative;display:table}#searchform>div>div{display:table-cell;padding-right:8px;vertical-align:top}#searchform .icon{padding:0 2px;font-size:16px}#logout-button{float:right;margin-top:16px;margin-left:25px;border-bottom-style:solid;border-bottom-width:2px;transition:all ease 500ms}#main-navigation{margin-top:24px}#main-navigation a{padding:0 12px;height:70px;border-bottom-style:solid;botder-bottom-width:2px;transition:all ease 500ms}#main-navigation .icon{font-size:32px}#main-navigation .title{margin-top:2px;font-weight:bold}.btn-group-justified .btn{border-right-width:0}.btn-group-justified .btn:last-of-type{border-right-width:1px}#content{width:78%}#passBar,#passText{display:inline-block;vertical-align:middle}#passBar{height:11px;padding:0}#passBar>div{height:100%;padding:0}#sidebar{margin-top:27px;width:18%;border-style:solid;border-width:1px;border-radius:4px}#sidebar header{margin:1px;padding:0 10px;height:40px;line-height:40px;font-weight:bold;border-top-left-radius:2px;border-top-right-radius:2px}#sidebar ul{margin:0;padding:0;list-style:none}#sidebar li{padding:10px;border-top-style:solid;border-top-width:1px;font-size:12px}#sidebar a{text-decoration:none;transition:color ease 500ms}.page-header{margin:20px 0;padding:0}.alert-notification a{font-weight:bold;text-decoration:none;transition:color ease 500ms}.alert-label,.alert-content{display:inline-block;vertical-align:top}.alert-label{width:60px}.modules{margin:0;padding:0;list-style:none}.modules li{float:left;margin-right:15px;margin-bottom:15px;padding:8px;width:200px;border-radius:4px;border-style:solid;border-width:1px}.modules .icon{float:left;margin-right:15px;font-size:50px}.modules .left{margin-top:5px}.modules .title{margin-top:6px;margin-left:20px;font-size:16px;font-weight:bold}.modules .button{margin-top:10px;width:100%;border-bottom-style:solid;border-bottom-width:2px;font-size:12px;font-weight:bold;transition:all ease 500ms}.modules a{text-decoration:none}.table-wrapper{margin-bottom:20px;border-radius:4px;border-style:solid;border-width:1px}.table{table-layout:fixed;margin-bottom:1px}.table caption{padding:5px 10px;text-align:left;font-weight:bold;font-size:18px;border-bottom-style:solid;border-bottom-width:1px}.table tbody tr{border-top-style:solid;border-top-width:1px;transition:background ease 500ms}.table tbody tr:last-child{border-radius:4px}.tfooter{margin-top:-1px;height:40px;border-top-style:solid;border-top-width:1px}.pagination{margin:10px 0}.progress{display:inline-block;margin-bottom:0;width:150px;height:10px}p.fieldset-legend{display:none}.content-tab-wrapper{border-style:solid;border-width:1px;border-radius:4px}.content-tab-wrapper .nav-tabs>li>a{border-radius:0;border:none!important;border-right-style:solid!important;border-right-width:1px!important;outline:0;font-weight:bold;transition:background ease 500ms}.content-tab-wrapper .nav-tabs li:not(:first-child) a{margin-left:-2px}.tab-content{padding:25px 10px}.input-group-btn .icon-calendar{font-size:18px}thead.dark th{height:40px;line-height:40px;font-weight:normal}thead.dark th.small-col{width:14%}thead.dark th.tiny-col{width:8%;overflow:hidden;text-overflow:ellipsis}thead.dark th[data-column]{cursor:pointer}thead.dark th[data-column][data-ordered]{font-weight:bold;position:relative}thead.dark th[data-column][data-ordered]:before{content:"";display:block;position:absolute;right:5px;top:16px;width:0;height:0;vertical-align:middle;border-bottom:5px solid #fff;border-top:5px solid transparent;border-right:5px solid transparent;border-left:6px solid transparent;line-height:inherit}thead.dark th[data-column][data-ordered="desc"]:before{top:21px;border-bottom:5px solid transparent;border-top:5px solid #fff}thead.dark td input,thead.dark td select{width:100%}#footer{margin:20px 0;padding-top:20px;border-top-style:solid;border-top-width:1px;text-align:center;font-size:10px}.menu-btn{display:none;cursor:pointer}.df-container,.gs-container{position:relative}.gs-container:after{content:"";display:table;clear:both}ul.df-resultbox,ul.gs-resultbox{display:block;position:absolute;left:0;top:100%;margin:0;padding:0 0 10px;min-width:250px;max-width:500px;z-index:999999;background:#fff;list-style:none;box-shadow:2px 2px 5px #c5c5c5;border-radius:5px}ul.df-resultbox li,ul.gs-resultbox li{float:none;display:block;cursor:pointer;padding:0 10px}ul.gs-resultbox li{padding:3px 10px;line-height:1.1;font-size:.9em}ul.df-resultbox li:nth-child(even),ul.gs-resultbox li:nth-child(even){background:#f2f5f7}ul.df-resultbox li.df-cheader,ul.gs-resultbox li.gs-cheader{background:#fff;padding-top:10px;margin-bottom:10px}ul.df-resultbox li p,ul.gs-resultbox li p{margin-bottom:0;color:inherit}ul.df-resultbox li.df-cheader p.df-cheader-title,ul.gs-resultbox li.gs-cheader p.gs-cheader-title{font-weight:bold;margin-bottom:0}ul.df-resultbox li.df-cheader p.df-cheader-limit,ul.gs-resultbox li.gs-cheader p.gs-cheader-limit{font-weight:normal}ul.df-resultbox li.df-cdata img,ul.gs-resultbox li.gs-cdata img{margin-right:12px}ul.df-resultbox li.df-cdata p span.df-cdata-title,ul.gs-resultbox li.gs-cdata p span.gs-cdata-title{font-weight:bold}ul.gs-resultbox li.gs-cdata p span.gs-cdata-title{display:block}ul.df-resultbox li:first-child,ul.gs-resultbox li:first-child{border-top-left-radius:5px;border-top-right-radius:5px}ul.df-resultbox li:last-child,ul.gs-resultbox li:last-child{border-bottom-left-radius:5px;border-bottom-right-radius:5px}span.flags{background-image:url("../images/flags_sprite.png");background-repeat:no-repeat;min-height:20px;padding-left:27px;vertical-align:middle}span.flag-el{background-position:0 -1475px}span.flag-ad{background-position:0 -1px}span.flag-ae{background-position:0 -23px}span.flag-af{background-position:0 -45px}span.flag-ag{background-position:0 -67px}span.flag-ai{background-position:0 -89px}span.flag-al{background-position:0 -111px}span.flag-am{background-position:0 -133px}span.flag-an{background-position:0 -155px}span.flag-ao{background-position:0 -177px}span.flag-aq{background-position:0 -199px}span.flag-ar{background-position:0 -221px}span.flag-as{background-position:0 -243px}span.flag-at{background-position:0 -265px}span.flag-au{background-position:0 -287px}span.flag-aw{background-position:0 -309px}span.flag-ax{background-position:0 -331px}span.flag-az{background-position:0 -353px}span.flag-ba{background-position:0 -375px}span.flag-bb{background-position:0 -397px}span.flag-bd{background-position:0 -419px}span.flag-be{background-position:0 -441px}span.flag-bf{background-position:0 -463px}span.flag-bg{background-position:0 -485px}span.flag-bh{background-position:0 -507px}span.flag-bi{background-position:0 -529px}span.flag-bj{background-position:0 -551px}span.flag-bm{background-position:0 -573px}span.flag-bn{background-position:0 -595px}span.flag-bo{background-position:0 -617px}span.flag-br{background-position:0 -639px}span.flag-bs{background-position:0 -661px}span.flag-bt{background-position:0 -683px}span.flag-bv{background-position:0 -705px}span.flag-bw{background-position:0 -727px}span.flag-by{background-position:0 -749px}span.flag-bz{background-position:0 -771px}span.flag-ca{background-position:0 -793px}span.flag-cc{background-position:0 -837px}span.flag-cd{background-position:0 -859px}span.flag-cf{background-position:0 -881px}span.flag-cg{background-position:0 -903px}span.flag-ch{background-position:0 -925px}span.flag-ci{background-position:0 -947px}span.flag-ck{background-position:0 -969px}span.flag-cl{background-position:0 -991px}span.flag-cm{background-position:0 -1013px}span.flag-cn{background-position:0 -1035px}span.flag-co{background-position:0 -1057px}span.flag-cr{background-position:0 -1079px}span.flag-cs{background-position:0 -1101px}span.flag-cu{background-position:0 -1123px}span.flag-cv{background-position:0 -1145px}span.flag-cx{background-position:0 -1167px}span.flag-cy{background-position:0 -1189px}span.flag-cz{background-position:0 -1211px}span.flag-de{background-position:0 -1233px}span.flag-dj{background-position:0 -1255px}span.flag-dk{background-position:0 -1277px}span.flag-dm{background-position:0 -1299px}span.flag-do{background-position:0 -1321px}span.flag-dz{background-position:0 -1343px}span.flag-ec{background-position:0 -1365px}span.flag-ee{background-position:0 -1387px}span.flag-eg{background-position:0 -1409px}span.flag-eh{background-position:0 -1431px}span.flag-er{background-position:0 -1475px}span.flag-es{background-position:0 -1497px}span.flag-et{background-position:0 -1519px}span.flag-fi{background-position:0 -1585px}span.flag-fj{background-position:0 -1607px}span.flag-fk{background-position:0 -1629px}span.flag-fm{background-position:0 -1651px}span.flag-fo{background-position:0 -1673px}span.flag-fr{background-position:0 -1695px}span.flag-ga{background-position:0 -1717px}span.flag-gb,span.flag-en{background-position:0 -1739px}span.flag-gd{background-position:0 -1761px}span.flag-ge{background-position:0 -1783px}span.flag-gf{background-position:0 -1805px}span.flag-gh{background-position:0 -1827px}span.flag-gi{background-position:0 -1849px}span.flag-gl{background-position:0 -1871px}span.flag-gm{background-position:0 -1893px}span.flag-gn{background-position:0 -1915px}span.flag-gp{background-position:0 -1937px}span.flag-gq{background-position:0 -1959px}span.flag-gr{background-position:0 -1981px}span.flag-gs{background-position:0 -2003px}span.flag-gt{background-position:0 -2025px}span.flag-gu{background-position:0 -2047px}span.flag-gw{background-position:0 -2069px}span.flag-gy{background-position:0 -2091px}span.flag-hk{background-position:0 -2113px}span.flag-hm{background-position:0 -2135px}span.flag-hn{background-position:0 -2157px}span.flag-hr{background-position:0 -2179px}span.flag-ht{background-position:0 -2201px}span.flag-hu{background-position:0 -2223px}span.flag-id{background-position:0 -2245px}span.flag-ie{background-position:0 -2267px}span.flag-il{background-position:0 -2289px}span.flag-in{background-position:0 -2311px}span.flag-io{background-position:0 -2333px}span.flag-iq{background-position:0 -2355px}span.flag-ir{background-position:0 -2377px}span.flag-is{background-position:0 -2399px}span.flag-it{background-position:0 -2421px}span.flag-jm{background-position:0 -2443px}span.flag-jo{background-position:0 -2465px}span.flag-jp{background-position:0 -2487px}span.flag-ke{background-position:0 -2509px}span.flag-kg{background-position:0 -2531px}span.flag-kh{background-position:0 -2553px}span.flag-ki{background-position:0 -2575px}span.flag-km{background-position:0 -2597px}span.flag-kn{background-position:0 -2619px}span.flag-kp{background-position:0 -2641px}span.flag-kr{background-position:0 -2663px}span.flag-kw{background-position:0 -2685px}span.flag-ky{background-position:0 -2707px}span.flag-kz{background-position:0 -2729px}span.flag-la{background-position:0 -2751px}span.flag-lb{background-position:0 -2773px}span.flag-lc{background-position:0 -2795px}span.flag-li{background-position:0 -2817px}span.flag-lk{background-position:0 -2839px}span.flag-lr{background-position:0 -2861px}span.flag-ls{background-position:0 -2883px}span.flag-lt{background-position:0 -2905px}span.flag-lu{background-position:0 -2927px}span.flag-lv{background-position:0 -2949px}span.flag-ly{background-position:0 -2971px}span.flag-ma{background-position:0 -2993px}span.flag-mc{background-position:0 -3015px}span.flag-md{background-position:0 -3037px}span.flag-me{background-position:0 -3059px}span.flag-mg{background-position:0 -3081px}span.flag-mh{background-position:0 -3103px}span.flag-mk{background-position:0 -3125px}span.flag-ml{background-position:0 -3147px}span.flag-mm{background-position:0 -3169px}span.flag-mn{background-position:0 -3191px}span.flag-mo{background-position:0 -3213px}span.flag-mp{background-position:0 -3235px}span.flag-mq{background-position:0 -3257px}span.flag-mr{background-position:0 -3279px}span.flag-ms{background-position:0 -3301px}span.flag-mt{background-position:0 -3323px}span.flag-mu{background-position:0 -3345px}span.flag-mv{background-position:0 -3367px}span.flag-mw{background-position:0 -3389px}span.flag-mx{background-position:0 -3411px}span.flag-my{background-position:0 -3433px}span.flag-mz{background-position:0 -3455px}span.flag-na{background-position:0 -3477px}span.flag-nc{background-position:0 -3499px}span.flag-ne{background-position:0 -3521px}span.flag-nf{background-position:0 -3543px}span.flag-ng{background-position:0 -3565px}span.flag-ni{background-position:0 -3587px}span.flag-nl{background-position:0 -3609px}span.flag-no{background-position:0 -3631px}span.flag-np{background-position:0 -3653px}span.flag-nr{background-position:0 -3675px}span.flag-nu{background-position:0 -3697px}span.flag-nz{background-position:0 -3719px}span.flag-om{background-position:0 -3741px}span.flag-pa{background-position:0 -3763px}span.flag-pe{background-position:0 -3785px}span.flag-pf{background-position:0 -3807px}span.flag-pg{background-position:0 -3829px}span.flag-ph{background-position:0 -3851px}span.flag-pk{background-position:0 -3873px}span.flag-pl{background-position:0 -3895px}span.flag-pm{background-position:0 -3917px}span.flag-pn{background-position:0 -3939px}span.flag-pr{background-position:0 -3961px}span.flag-ps{background-position:0 -3983px}span.flag-pt{background-position:0 -4005px}span.flag-pw{background-position:0 -4027px}span.flag-py{background-position:0 -4049px}span.flag-qa{background-position:0 -4071px}span.flag-re{background-position:0 -4093px}span.flag-ro{background-position:0 -4115px}span.flag-rs{background-position:0 -4137px}span.flag-ru{background-position:0 -4159px}span.flag-rw{background-position:0 -4181px}span.flag-sa{background-position:0 -4203px}span.flag-sb{background-position:0 -4225px}span.flag-sc{background-position:0 -4247px}span.flag-sd{background-position:0 -4291px}span.flag-se{background-position:0 -4313px}span.flag-sg{background-position:0 -4335px}span.flag-sh{background-position:0 -4357px}span.flag-si{background-position:0 -4379px}span.flag-sj{background-position:0 -4401px}span.flag-sk{background-position:0 -4423px}span.flag-sl{background-position:0 -4445px}span.flag-sm{background-position:0 -4467px}span.flag-sn{background-position:0 -4489px}span.flag-so{background-position:0 -4511px}span.flag-sr{background-position:0 -4533px}span.flag-st{background-position:0 -4555px}span.flag-sv{background-position:0 -4577px}span.flag-sy{background-position:0 -4599px}span.flag-sz{background-position:0 -4621px}span.flag-tc{background-position:0 -4643px}span.flag-td{background-position:0 -4665px}span.flag-tf{background-position:0 -4687px}span.flag-tg{background-position:0 -4709px}span.flag-th{background-position:0 -4731px}span.flag-tj{background-position:0 -4753px}span.flag-tk{background-position:0 -4775px}span.flag-tl{background-position:0 -4797px}span.flag-tm{background-position:0 -4819px}span.flag-tn{background-position:0 -4841px}span.flag-to{background-position:0 -4863px}span.flag-tr{background-position:0 -4885px}span.flag-tt{background-position:0 -4907px}span.flag-tv{background-position:0 -4929px}span.flag-tw{background-position:0 -4951px}span.flag-tz{background-position:0 -4973px}span.flag-ua{background-position:0 -4995px}span.flag-ug{background-position:0 -5017px}span.flag-um{background-position:0 -5039px}span.flag-us{background-position:0 -5061px}span.flag-uy{background-position:0 -5083px}span.flag-uz{background-position:0 -5105px}span.flag-va{background-position:0 -5127px}span.flag-vc{background-position:0 -5149px}span.flag-ve{background-position:0 -5171px}span.flag-vg{background-position:0 -5193px}span.flag-vi{background-position:0 -5215px}span.flag-vn{background-position:0 -5237px}span.flag-vu{background-position:0 -5259px}span.flag-wf{background-position:0 -5303px}span.flag-ws{background-position:0 -5325px}span.flag-ye{background-position:0 -5347px}span.flag-yt{background-position:0 -5369px}span.flag-za{background-position:0 -5391px}span.flag-zm{background-position:0 -5413px}span.flag-zw{background-position:0 -5435px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#logo{background-image:url("../images/logo@2x.png");background-size:200px 65px}}.input-group-field{display:table-cell;vertical-align:middle;border-radius:4px;min-width:1%;white-space:nowrap}.input-group-field .form-control{border-radius:inherit!important}.input-group-field:not(:first-child):not(:last-child){border-radius:0}.input-group-field:not(:first-child):not(:last-child) .form-control{border-left-width:0;border-right-width:0}.input-group-field:last-child{border-top-left-radius:0;border-bottom-left-radius:0}
body{overflow-y:scroll}.left{float:left}.right{float:right}.clear:after{content:"";display:table;clear:both}.marginTop15{margin-top:15px}.paddingX5{padding-left:5px!important;padding-right:5px!important}.width65{width:65px}.form-group input[type='checkbox']{margin-top:10px}.control-label{font-weight:normal}.control-label:after{content:":"}.formbutton-default{padding:6px 30px;border-bottom-style:solid;border-bottom-width:2px;font-size:12px;font-weight:bold;transition:all ease 500ms}.formbutton-success,.formbutton-danger{padding:6px 30px;border-style:solid;border-width:1px;border-bottom-width:solid;font-size:12px;font-weight:bold;transition:all ease 500ms}.formbutton-narrow{padding:6px 8px;margin-left:2px;margin-right:2px}.formbutton-narrower{padding:4px 6px}#main-wrapper{margin:0 auto;width:95%;max-width:1260px}#logo{float:left;width:200px;height:65px;margin-top:10px}#logo a{display:block;width:100%;height:100%}#headerbar{float:right}#searchform{float:right;margin-top:16px}#searchform>div{position:relative;display:table}#searchform>div>div{display:table-cell;padding-right:8px;vertical-align:top}#searchform .icon{padding:0 2px;font-size:16px}#logout-button{float:right;margin-top:16px;margin-left:25px;border-bottom-style:solid;border-bottom-width:2px;transition:all ease 500ms}#main-navigation{margin-top:24px}#main-navigation a{padding:0 12px;height:70px;border-bottom-style:solid;botder-bottom-width:2px;transition:all ease 500ms}#main-navigation .icon{font-size:32px}#main-navigation .title{margin-top:2px;font-weight:bold}.btn-group-justified .btn{border-right-width:0}.btn-group-justified .btn:last-of-type{border-right-width:1px}#content{width:78%}#passBar,#passText{display:inline-block;vertical-align:middle}#passBar{height:11px;padding:0}#passBar>div{height:100%;padding:0}#sidebar{margin-top:27px;width:18%;border-style:solid;border-width:1px;border-radius:4px}#sidebar header{margin:1px;padding:0 10px;height:40px;line-height:40px;font-weight:bold;border-top-left-radius:2px;border-top-right-radius:2px}#sidebar ul{margin:0;padding:0;list-style:none}#sidebar li{padding:10px;border-top-style:solid;border-top-width:1px;font-size:12px}#sidebar a{text-decoration:none;transition:color ease 500ms}.page-header{margin:20px 0;padding:0}.alert-notification a{font-weight:bold;text-decoration:none;transition:color ease 500ms}.alert-label,.alert-content{display:inline-block;vertical-align:top}.alert-label{width:60px}.modules{margin:0;padding:0;list-style:none}.modules li{float:left;margin-right:15px;margin-bottom:15px;padding:8px;width:200px;border-radius:4px;border-style:solid;border-width:1px}.modules .icon{float:left;margin-right:15px;font-size:50px}.modules .left{margin-top:5px}.modules .title{margin-top:6px;margin-left:20px;font-size:16px;font-weight:bold}.modules .button{margin-top:10px;width:100%;border-bottom-style:solid;border-bottom-width:2px;font-size:12px;font-weight:bold;transition:all ease 500ms}.modules a{text-decoration:none}.table-wrapper{margin-bottom:20px;border-radius:4px;border-style:solid;border-width:1px}.table{table-layout:fixed;margin-bottom:1px}.table caption{padding:5px 10px;text-align:left;font-weight:bold;font-size:18px;border-bottom-style:solid;border-bottom-width:1px}.table tbody tr{border-top-style:solid;border-top-width:1px;transition:background ease 500ms}.table tbody tr:last-child{border-radius:4px}.table tbody tr td{text-overflow:ellipsis;overflow-x:hidden}.tfooter{margin-top:-1px;height:40px;border-top-style:solid;border-top-width:1px}.pagination{margin:10px 0}.progress{display:inline-block;margin-bottom:0;width:150px;height:10px}p.fieldset-legend{display:none}.content-tab-wrapper{border-style:solid;border-width:1px;border-radius:4px}.content-tab-wrapper .nav-tabs>li>a{border-radius:0;border:none!important;border-right-style:solid!important;border-right-width:1px!important;outline:0;font-weight:bold;transition:background ease 500ms}.content-tab-wrapper .nav-tabs li:not(:first-child) a{margin-left:-2px}.tab-content{padding:25px 10px}.input-group-btn .icon-calendar{font-size:18px}thead.dark th{height:40px;line-height:40px;font-weight:normal}thead.dark th.small-col{width:14%}thead.dark th.tiny-col{width:8%;overflow:hidden;text-overflow:ellipsis}thead.dark th[data-column]{cursor:pointer}thead.dark th[data-column][data-ordered]{font-weight:bold;position:relative}thead.dark th[data-column][data-ordered]:before{content:"";display:block;position:absolute;right:5px;top:16px;width:0;height:0;vertical-align:middle;border-bottom:5px solid #fff;border-top:5px solid transparent;border-right:5px solid transparent;border-left:6px solid transparent;line-height:inherit}thead.dark th[data-column][data-ordered="desc"]:before{top:21px;border-bottom:5px solid transparent;border-top:5px solid #fff}thead.dark td input,thead.dark td select{width:100%}#footer{margin:20px 0;padding-top:20px;border-top-style:solid;border-top-width:1px;text-align:center;font-size:10px}.menu-btn{display:none;cursor:pointer}.df-container,.gs-container{position:relative}.gs-container:after{content:"";display:table;clear:both}ul.df-resultbox,ul.gs-resultbox{display:block;position:absolute;left:0;top:100%;margin:0;padding:0 0 10px;min-width:250px;max-width:500px;z-index:999999;background:#fff;list-style:none;box-shadow:2px 2px 5px #c5c5c5;border-radius:5px}ul.df-resultbox li,ul.gs-resultbox li{float:none;display:block;cursor:pointer;padding:0 10px}ul.gs-resultbox li{padding:3px 10px;line-height:1.1;font-size:.9em}ul.df-resultbox li:nth-child(even),ul.gs-resultbox li:nth-child(even){background:#f2f5f7}ul.df-resultbox li.df-cheader,ul.gs-resultbox li.gs-cheader{background:#fff;padding-top:10px;margin-bottom:10px}ul.df-resultbox li p,ul.gs-resultbox li p{margin-bottom:0;color:inherit}ul.df-resultbox li.df-cheader p.df-cheader-title,ul.gs-resultbox li.gs-cheader p.gs-cheader-title{font-weight:bold;margin-bottom:0}ul.df-resultbox li.df-cheader p.df-cheader-limit,ul.gs-resultbox li.gs-cheader p.gs-cheader-limit{font-weight:normal}ul.df-resultbox li.df-cdata img,ul.gs-resultbox li.gs-cdata img{margin-right:12px}ul.df-resultbox li.df-cdata p span.df-cdata-title,ul.gs-resultbox li.gs-cdata p span.gs-cdata-title{font-weight:bold}ul.gs-resultbox li.gs-cdata p span.gs-cdata-title{display:block}ul.df-resultbox li:first-child,ul.gs-resultbox li:first-child{border-top-left-radius:5px;border-top-right-radius:5px}ul.df-resultbox li:last-child,ul.gs-resultbox li:last-child{border-bottom-left-radius:5px;border-bottom-right-radius:5px}span.flags{background-image:url("../images/flags_sprite.png");background-repeat:no-repeat;min-height:20px;padding-left:27px;vertical-align:middle}span.flag-el{background-position:0 -1475px}span.flag-ad{background-position:0 -1px}span.flag-ae{background-position:0 -23px}span.flag-af{background-position:0 -45px}span.flag-ag{background-position:0 -67px}span.flag-ai{background-position:0 -89px}span.flag-al{background-position:0 -111px}span.flag-am{background-position:0 -133px}span.flag-an{background-position:0 -155px}span.flag-ao{background-position:0 -177px}span.flag-aq{background-position:0 -199px}span.flag-ar{background-position:0 -221px}span.flag-as{background-position:0 -243px}span.flag-at{background-position:0 -265px}span.flag-au{background-position:0 -287px}span.flag-aw{background-position:0 -309px}span.flag-ax{background-position:0 -331px}span.flag-az{background-position:0 -353px}span.flag-ba{background-position:0 -375px}span.flag-bb{background-position:0 -397px}span.flag-bd{background-position:0 -419px}span.flag-be{background-position:0 -441px}span.flag-bf{background-position:0 -463px}span.flag-bg{background-position:0 -485px}span.flag-bh{background-position:0 -507px}span.flag-bi{background-position:0 -529px}span.flag-bj{background-position:0 -551px}span.flag-bm{background-position:0 -573px}span.flag-bn{background-position:0 -595px}span.flag-bo{background-position:0 -617px}span.flag-br{background-position:0 -639px}span.flag-bs{background-position:0 -661px}span.flag-bt{background-position:0 -683px}span.flag-bv{background-position:0 -705px}span.flag-bw{background-position:0 -727px}span.flag-by{background-position:0 -749px}span.flag-bz{background-position:0 -771px}span.flag-ca{background-position:0 -793px}span.flag-cc{background-position:0 -837px}span.flag-cd{background-position:0 -859px}span.flag-cf{background-position:0 -881px}span.flag-cg{background-position:0 -903px}span.flag-ch{background-position:0 -925px}span.flag-ci{background-position:0 -947px}span.flag-ck{background-position:0 -969px}span.flag-cl{background-position:0 -991px}span.flag-cm{background-position:0 -1013px}span.flag-cn{background-position:0 -1035px}span.flag-co{background-position:0 -1057px}span.flag-cr{background-position:0 -1079px}span.flag-cs{background-position:0 -1101px}span.flag-cu{background-position:0 -1123px}span.flag-cv{background-position:0 -1145px}span.flag-cx{background-position:0 -1167px}span.flag-cy{background-position:0 -1189px}span.flag-cz{background-position:0 -1211px}span.flag-de{background-position:0 -1233px}span.flag-dj{background-position:0 -1255px}span.flag-dk{background-position:0 -1277px}span.flag-dm{background-position:0 -1299px}span.flag-do{background-position:0 -1321px}span.flag-dz{background-position:0 -1343px}span.flag-ec{background-position:0 -1365px}span.flag-ee{background-position:0 -1387px}span.flag-eg{background-position:0 -1409px}span.flag-eh{background-position:0 -1431px}span.flag-er{background-position:0 -1475px}span.flag-es{background-position:0 -1497px}span.flag-et{background-position:0 -1519px}span.flag-fi{background-position:0 -1585px}span.flag-fj{background-position:0 -1607px}span.flag-fk{background-position:0 -1629px}span.flag-fm{background-position:0 -1651px}span.flag-fo{background-position:0 -1673px}span.flag-fr{background-position:0 -1695px}span.flag-ga{background-position:0 -1717px}span.flag-gb,span.flag-en{background-position:0 -1739px}span.flag-gd{background-position:0 -1761px}span.flag-ge{background-position:0 -1783px}span.flag-gf{background-position:0 -1805px}span.flag-gh{background-position:0 -1827px}span.flag-gi{background-position:0 -1849px}span.flag-gl{background-position:0 -1871px}span.flag-gm{background-position:0 -1893px}span.flag-gn{background-position:0 -1915px}span.flag-gp{background-position:0 -1937px}span.flag-gq{background-position:0 -1959px}span.flag-gr{background-position:0 -1981px}span.flag-gs{background-position:0 -2003px}span.flag-gt{background-position:0 -2025px}span.flag-gu{background-position:0 -2047px}span.flag-gw{background-position:0 -2069px}span.flag-gy{background-position:0 -2091px}span.flag-hk{background-position:0 -2113px}span.flag-hm{background-position:0 -2135px}span.flag-hn{background-position:0 -2157px}span.flag-hr{background-position:0 -2179px}span.flag-ht{background-position:0 -2201px}span.flag-hu{background-position:0 -2223px}span.flag-id{background-position:0 -2245px}span.flag-ie{background-position:0 -2267px}span.flag-il{background-position:0 -2289px}span.flag-in{background-position:0 -2311px}span.flag-io{background-position:0 -2333px}span.flag-iq{background-position:0 -2355px}span.flag-ir{background-position:0 -2377px}span.flag-is{background-position:0 -2399px}span.flag-it{background-position:0 -2421px}span.flag-jm{background-position:0 -2443px}span.flag-jo{background-position:0 -2465px}span.flag-jp{background-position:0 -2487px}span.flag-ke{background-position:0 -2509px}span.flag-kg{background-position:0 -2531px}span.flag-kh{background-position:0 -2553px}span.flag-ki{background-position:0 -2575px}span.flag-km{background-position:0 -2597px}span.flag-kn{background-position:0 -2619px}span.flag-kp{background-position:0 -2641px}span.flag-kr{background-position:0 -2663px}span.flag-kw{background-position:0 -2685px}span.flag-ky{background-position:0 -2707px}span.flag-kz{background-position:0 -2729px}span.flag-la{background-position:0 -2751px}span.flag-lb{background-position:0 -2773px}span.flag-lc{background-position:0 -2795px}span.flag-li{background-position:0 -2817px}span.flag-lk{background-position:0 -2839px}span.flag-lr{background-position:0 -2861px}span.flag-ls{background-position:0 -2883px}span.flag-lt{background-position:0 -2905px}span.flag-lu{background-position:0 -2927px}span.flag-lv{background-position:0 -2949px}span.flag-ly{background-position:0 -2971px}span.flag-ma{background-position:0 -2993px}span.flag-mc{background-position:0 -3015px}span.flag-md{background-position:0 -3037px}span.flag-me{background-position:0 -3059px}span.flag-mg{background-position:0 -3081px}span.flag-mh{background-position:0 -3103px}span.flag-mk{background-position:0 -3125px}span.flag-ml{background-position:0 -3147px}span.flag-mm{background-position:0 -3169px}span.flag-mn{background-position:0 -3191px}span.flag-mo{background-position:0 -3213px}span.flag-mp{background-position:0 -3235px}span.flag-mq{background-position:0 -3257px}span.flag-mr{background-position:0 -3279px}span.flag-ms{background-position:0 -3301px}span.flag-mt{background-position:0 -3323px}span.flag-mu{background-position:0 -3345px}span.flag-mv{background-position:0 -3367px}span.flag-mw{background-position:0 -3389px}span.flag-mx{background-position:0 -3411px}span.flag-my{background-position:0 -3433px}span.flag-mz{background-position:0 -3455px}span.flag-na{background-position:0 -3477px}span.flag-nc{background-position:0 -3499px}span.flag-ne{background-position:0 -3521px}span.flag-nf{background-position:0 -3543px}span.flag-ng{background-position:0 -3565px}span.flag-ni{background-position:0 -3587px}span.flag-nl{background-position:0 -3609px}span.flag-no{background-position:0 -3631px}span.flag-np{background-position:0 -3653px}span.flag-nr{background-position:0 -3675px}span.flag-nu{background-position:0 -3697px}span.flag-nz{background-position:0 -3719px}span.flag-om{background-position:0 -3741px}span.flag-pa{background-position:0 -3763px}span.flag-pe{background-position:0 -3785px}span.flag-pf{background-position:0 -3807px}span.flag-pg{background-position:0 -3829px}span.flag-ph{background-position:0 -3851px}span.flag-pk{background-position:0 -3873px}span.flag-pl{background-position:0 -3895px}span.flag-pm{background-position:0 -3917px}span.flag-pn{background-position:0 -3939px}span.flag-pr{background-position:0 -3961px}span.flag-ps{background-position:0 -3983px}span.flag-pt{background-position:0 -4005px}span.flag-pw{background-position:0 -4027px}span.flag-py{background-position:0 -4049px}span.flag-qa{background-position:0 -4071px}span.flag-re{background-position:0 -4093px}span.flag-ro{background-position:0 -4115px}span.flag-rs{background-position:0 -4137px}span.flag-ru{background-position:0 -4159px}span.flag-rw{background-position:0 -4181px}span.flag-sa{background-position:0 -4203px}span.flag-sb{background-position:0 -4225px}span.flag-sc{background-position:0 -4247px}span.flag-sd{background-position:0 -4291px}span.flag-se{background-position:0 -4313px}span.flag-sg{background-position:0 -4335px}span.flag-sh{background-position:0 -4357px}span.flag-si{background-position:0 -4379px}span.flag-sj{background-position:0 -4401px}span.flag-sk{background-position:0 -4423px}span.flag-sl{background-position:0 -4445px}span.flag-sm{background-position:0 -4467px}span.flag-sn{background-position:0 -4489px}span.flag-so{background-position:0 -4511px}span.flag-sr{background-position:0 -4533px}span.flag-st{background-position:0 -4555px}span.flag-sv{background-position:0 -4577px}span.flag-sy{background-position:0 -4599px}span.flag-sz{background-position:0 -4621px}span.flag-tc{background-position:0 -4643px}span.flag-td{background-position:0 -4665px}span.flag-tf{background-position:0 -4687px}span.flag-tg{background-position:0 -4709px}span.flag-th{background-position:0 -4731px}span.flag-tj{background-position:0 -4753px}span.flag-tk{background-position:0 -4775px}span.flag-tl{background-position:0 -4797px}span.flag-tm{background-position:0 -4819px}span.flag-tn{background-position:0 -4841px}span.flag-to{background-position:0 -4863px}span.flag-tr{background-position:0 -4885px}span.flag-tt{background-position:0 -4907px}span.flag-tv{background-position:0 -4929px}span.flag-tw{background-position:0 -4951px}span.flag-tz{background-position:0 -4973px}span.flag-ua{background-position:0 -4995px}span.flag-ug{background-position:0 -5017px}span.flag-um{background-position:0 -5039px}span.flag-us{background-position:0 -5061px}span.flag-uy{background-position:0 -5083px}span.flag-uz{background-position:0 -5105px}span.flag-va{background-position:0 -5127px}span.flag-vc{background-position:0 -5149px}span.flag-ve{background-position:0 -5171px}span.flag-vg{background-position:0 -5193px}span.flag-vi{background-position:0 -5215px}span.flag-vn{background-position:0 -5237px}span.flag-vu{background-position:0 -5259px}span.flag-wf{background-position:0 -5303px}span.flag-ws{background-position:0 -5325px}span.flag-ye{background-position:0 -5347px}span.flag-yt{background-position:0 -5369px}span.flag-za{background-position:0 -5391px}span.flag-zm{background-position:0 -5413px}span.flag-zw{background-position:0 -5435px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#logo{background-image:url("../images/logo@2x.png");background-size:200px 65px}}.input-group-field{display:table-cell;vertical-align:middle;border-radius:4px;min-width:1%;white-space:nowrap}.input-group-field .form-control{border-radius:inherit!important}.input-group-field:not(:first-child):not(:last-child){border-radius:0}.input-group-field:not(:first-child):not(:last-child) .form-control{border-left-width:0;border-right-width:0}.input-group-field:last-child{border-top-left-radius:0;border-bottom-left-radius:0}
interface/web/themes/default/assets/stylesheets/select2x2.png
interface/web/themes/default/templates/error.tpl.htm
@@ -4,6 +4,5 @@
    <ol>
        <li>###ERRORMSG###</li>
    </ol>
    <div>TODO: WRONG HTML ELEMENTS</div>
  </div>
</div>
interface/web/themes/default/templates/main.tpl.htm
@@ -84,7 +84,7 @@
  <script type="text/javascript" src="js/jquery.min.js"></script>
  <script src='themes/<tmpl_var name='current_theme'>/assets/javascripts/bootstrap.min.js'></script>
  <script src='themes/<tmpl_var name='current_theme'>/assets/javascripts/bootstrap-datetimepicker.min.js'></script>
  <script src='themes/<tmpl_var name='current_theme'>/assets/javascripts/ispconfig.min.js'></script>
  <script src='themes/<tmpl_var name='current_theme'>/assets/javascripts/ispconfig.js'></script>
  <script src='themes/<tmpl_var name='current_theme'>/assets/javascripts/modernizr.custom.min.js'></script>
  <script src='themes/<tmpl_var name='current_theme'>/assets/javascripts/pushy.min.js'></script>
  <script src='themes/<tmpl_var name='current_theme'>/assets/javascripts/responsive.min.js'></script>
interface/web/themes/default/templates/main_login.tpl.htm
@@ -27,7 +27,7 @@
  <div class="row" style="margin: auto; width:100%;">
        <div class="col-md-4 col-md-offset-4">
            <div class="panel panel-default">
                  <div class="panel-heading" style="background: linear-gradient(to bottom, white, #eef0f2);">
                  <div class="panel-heading" style="background: linear-gradient(to bottom, white, #eef0f2);text-align:center;">
                    <img src="{tmpl_var name='base64_logo_txt'}">
                 </div>
                  <div class="panel-body">
@@ -41,7 +41,7 @@
  <script type="text/javascript" src="../js/jquery.min.js"></script>
  <script src='../themes/<tmpl_var name='current_theme'>/assets/javascripts/bootstrap.min.js'></script>
  <script src='../themes/<tmpl_var name='current_theme'>/assets/javascripts/bootstrap-datetimepicker.min.js'></script>
  <script src='../themes/<tmpl_var name='current_theme'>/assets/javascripts/ispconfig.min.js'></script>
  <script src='../themes/<tmpl_var name='current_theme'>/assets/javascripts/ispconfig.js'></script>
  <script src='../themes/<tmpl_var name='current_theme'>/assets/javascripts/modernizr.custom.min.js'></script>
  <script src='../themes/<tmpl_var name='current_theme'>/assets/javascripts/pushy.min.js'></script>
  <script src='../themes/<tmpl_var name='current_theme'>/assets/javascripts/responsive.min.js'></script>
interface/web/tools/lib/lang/ar_usersettings.lng
@@ -1,5 +1,5 @@
<?php
$wb['passwort_txt'] = 'Password';
$wb['password_txt'] = 'Password';
$wb['password_strength_txt'] = 'Password strength';
$wb['language_txt'] = 'Language';
$wb['password_mismatch'] = 'The password in the second password field does not match the first password.';
interface/web/tools/lib/lang/bg_usersettings.lng
@@ -1,5 +1,5 @@
<?php
$wb['passwort_txt'] = 'Парола';
$wb['password_txt'] = 'Парола';
$wb['password_strength_txt'] = 'Сила на паролата';
$wb['language_txt'] = 'Език';
$wb['password_mismatch'] = 'Паролите в двете полета не съвпадат.';
interface/web/tools/lib/lang/br_usersettings.lng
@@ -1,5 +1,5 @@
<?php
$wb['passwort_txt'] = 'Senha';
$wb['password_txt'] = 'Senha';
$wb['password_strength_txt'] = 'Segurança de Senha';
$wb['language_txt'] = 'Idioma';
$wb['password_mismatch'] = 'As senhas não conhecidem';
interface/web/tools/lib/lang/ca_usersettings.lng
@@ -1,5 +1,5 @@
<?php
$wb['passwort_txt'] = 'Mot de passe';
$wb['password_txt'] = 'Mot de passe';
$wb['password_strength_txt'] = 'Force du mot de passe';
$wb['language_txt'] = 'Langue';
$wb['password_mismatch'] = 'Le mot de passe de confirmation ne correspond avec le premier.';
interface/web/tools/lib/lang/cz_usersettings.lng
@@ -1,5 +1,5 @@
<?php
$wb['passwort_txt'] = 'Heslo';
$wb['password_txt'] = 'Heslo';
$wb['password_strength_txt'] = 'Bezpečnost hesla';
$wb['language_txt'] = 'Jazyk';
$wb['password_mismatch'] = 'Hesla se neshodují.';
interface/web/tools/lib/lang/de_usersettings.lng
@@ -1,5 +1,5 @@
<?php
$wb['passwort_txt'] = 'Passwort';
$wb['password_txt'] = 'Passwort';
$wb['language_txt'] = 'Sprache';
$wb['password_mismatch'] = 'Die Passwörter stimmen nicht überein.';
$wb['password_strength_txt'] = 'Passwortkomplexität';
interface/web/tools/lib/lang/el_usersettings.lng
@@ -1,5 +1,5 @@
<?php
$wb['passwort_txt'] = 'Συνθηματικό';
$wb['password_txt'] = 'Συνθηματικό';
$wb['password_strength_txt'] = 'Δύναμη συνθηματικού';
$wb['language_txt'] = 'Γλώσσα';
$wb['password_mismatch'] = 'Το συνθηματικό στο δεύτερο πεδίο δεν ταιριάζει με το συνθηματικό στο πρώτο πεδίο.';
interface/web/tools/lib/lang/en_usersettings.lng
@@ -1,5 +1,5 @@
<?php
$wb["passwort_txt"] = 'Password';
$wb["password_txt"] = 'Password';
$wb["password_strength_txt"] = 'Password strength';
$wb["language_txt"] = 'Language';
$wb["password_mismatch"] = 'The password in the second password field does not match the first password.';
interface/web/tools/lib/lang/es_usersettings.lng
@@ -1,5 +1,5 @@
<?php
$wb['passwort_txt'] = 'Contraseña';
$wb['password_txt'] = 'Contraseña';
$wb['password_strength_txt'] = 'Fortaleza de la contraseña';
$wb['language_txt'] = 'Idioma';
$wb['password_mismatch'] = 'La contraseña del primer y segundo campo no coinciden.';
interface/web/tools/lib/lang/fi_usersettings.lng
@@ -1,5 +1,5 @@
<?php
$wb['passwort_txt'] = 'Salasana';
$wb['password_txt'] = 'Salasana';
$wb['language_txt'] = 'Kieli';
$wb['password_mismatch'] = 'Salasanat eivät täsmää.';
$wb['password_strength_txt'] = 'Salasanan vahvuus';
interface/web/tools/lib/lang/fr_usersettings.lng
@@ -1,5 +1,5 @@
<?php
$wb['passwort_txt'] = 'Mot de passe';
$wb['password_txt'] = 'Mot de passe';
$wb['password_strength_txt'] = 'Force du mot de passe';
$wb['language_txt'] = 'Langue';
$wb['password_mismatch'] = 'Le mot de passe de confirmation ne correspond avec le premier.';
interface/web/tools/lib/lang/hr_usersettings.lng
@@ -1,5 +1,5 @@
<?php
$wb['passwort_txt'] = 'Šifra';
$wb['password_txt'] = 'Šifra';
$wb['password_strength_txt'] = 'Jačina šifre';
$wb['language_txt'] = 'Jezik';
$wb['password_mismatch'] = 'Šifra u drugom polju ne odgovara šifri iz prvog polja.';
interface/web/tools/lib/lang/hu_usersettings.lng
@@ -1,5 +1,5 @@
<?php
$wb['passwort_txt'] = 'Jelszó';
$wb['password_txt'] = 'Jelszó';
$wb['language_txt'] = 'Nyelv';
$wb['password_mismatch'] = 'Jelszavak nem egyeznek meg.';
$wb['Form to edit the user password and language.'] = 'Jelszó, nyelv és hitelesítés beállító oldal.';
interface/web/tools/lib/lang/id_usersettings.lng
@@ -1,5 +1,5 @@
<?php
$wb['passwort_txt'] = 'Kata Sandi';
$wb['password_txt'] = 'Kata Sandi';
$wb['password_strength_txt'] = 'Kekuatan Sandi';
$wb['language_txt'] = 'Bahasa';
$wb['password_mismatch'] = 'Kata sandi di kolom kata sandi kedua tidak cocok dengan kata sandi pertama.';
interface/web/tools/lib/lang/it_usersettings.lng
@@ -1,5 +1,5 @@
<?php
$wb['passwort_txt'] = 'Password';
$wb['password_txt'] = 'Password';
$wb['language_txt'] = 'Lingua';
$wb['password_mismatch'] = 'Il secondo campo password non corrisponde con il primo.';
$wb['Form to edit the user password and language.'] = 'Form per modificare la password e la lingua dellutente.';
interface/web/tools/lib/lang/ja_usersettings.lng
@@ -1,5 +1,5 @@
<?php
$wb['passwort_txt'] = 'パスワード';
$wb['password_txt'] = 'パスワード';
$wb['password_strength_txt'] = 'パスワードの強度';
$wb['language_txt'] = '言語';
$wb['password_mismatch'] = 'パスワードの1つめの欄と2つめの欄が一致していません。';
interface/web/tools/lib/lang/nl_usersettings.lng
@@ -1,5 +1,5 @@
<?php
$wb['passwort_txt'] = 'Wachtwoord';
$wb['password_txt'] = 'Wachtwoord';
$wb['password_strength_txt'] = 'Wachtwoord sterkte';
$wb['language_txt'] = 'Taal';
$wb['password_mismatch'] = 'De door u ingevulde wachtwoorden komen niet overeen.';
interface/web/tools/lib/lang/pl_usersettings.lng
@@ -1,5 +1,5 @@
<?php
$wb['passwort_txt'] = 'Hasło';
$wb['password_txt'] = 'Hasło';
$wb['password_strength_txt'] = 'Siła hasła';
$wb['language_txt'] = 'Język';
$wb['password_mismatch'] = 'Hasła nie pasują do siebie.';
interface/web/tools/lib/lang/pt_usersettings.lng
@@ -1,5 +1,5 @@
<?php
$wb['passwort_txt'] = 'Senha';
$wb['password_txt'] = 'Senha';
$wb['password_strength_txt'] = 'Segurança de Senha';
$wb['language_txt'] = 'Idioma';
$wb['password_mismatch'] = 'As senhas não coincidem';
interface/web/tools/lib/lang/ro_usersettings.lng
@@ -1,5 +1,5 @@
<?php
$wb['passwort_txt'] = 'Password';
$wb['password_txt'] = 'Password';
$wb['password_strength_txt'] = 'Password strength';
$wb['language_txt'] = 'Limba';
$wb['password_mismatch'] = 'Parola in al doilea camp nu coincide cu primul.';
interface/web/tools/lib/lang/ru_usersettings.lng
@@ -1,5 +1,5 @@
<?php
$wb['passwort_txt'] = 'Пароль';
$wb['password_txt'] = 'Пароль';
$wb['password_strength_txt'] = 'Сложность пароля';
$wb['language_txt'] = 'Язык';
$wb['password_mismatch'] = 'Введенные пароли не совпадают.';
interface/web/tools/lib/lang/se_usersettings.lng
@@ -1,5 +1,5 @@
<?php
$wb['passwort_txt'] = 'Lösenord';
$wb['password_txt'] = 'Lösenord';
$wb['password_strength_txt'] = 'Lösenordsstyrka';
$wb['language_txt'] = 'Språk';
$wb['password_mismatch'] = 'The password in the second password field does not match the first password.';
interface/web/tools/lib/lang/sk_usersettings.lng
@@ -1,5 +1,5 @@
<?php
$wb['passwort_txt'] = 'Heslo';
$wb['password_txt'] = 'Heslo';
$wb['password_strength_txt'] = 'Pevnosť hesla';
$wb['language_txt'] = 'Jazyk';
$wb['password_mismatch'] = 'Heslo v overovacom poli nezodpovedá prvému heslu.';
interface/web/tools/lib/lang/tr_usersettings.lng
@@ -1,5 +1,5 @@
<?php
$wb['passwort_txt'] = 'Parola';
$wb['password_txt'] = 'Parola';
$wb['password_strength_txt'] = 'Parola Güçlüğü';
$wb['language_txt'] = 'Dil';
$wb['password_mismatch'] = 'Parola ile onayı aynı değil.';
interface/web/tools/templates/import_ispconfig.htm
@@ -3,15 +3,13 @@
</div>
<p><tmpl_var name="list_desc_txt"></p>
<div class="panel panel_language_import">
<div class="panel panel_language_import" style="padding:20px;">
  
    <div class="pnl_formsarea">
        <legend>{tmpl_var name="legend_txt"}</legend>
            <div class="form-group">
                <label class="col-sm-3 control-label">Remote API URL</label>
                <div class="col-sm-9">
                    <div class="col-sm-6"><input class="form-control" type="text" id="remote_server" value="{tmpl_var name='remote_server'}" name="remote_server" /></div><div class="col-sm-3 input-sm"> (e.g. https://www.example.com:8080/remote/ )
                </div></div>
                <div class="col-sm-9"><input class="form-control" type="text" id="remote_server" value="{tmpl_var name='remote_server'}" placeholder="https://www.example.com:8080/remote/" name="remote_server" /></div>
            </div>
            <div class="form-group">
                <label class="col-sm-3 control-label">Remote User</label>
interface/web/vm/list/openvz_ip.list.php
@@ -91,7 +91,7 @@
    'prefix' => "",
    'suffix' => "",
    'width'  => "",
    'value'  => array('y' => "<div id=\"ir-Yes\" class=\"swap\"><span>Yes</span></div>", 'n' => "<div class=\"swap\" id=\"ir-No\"><span>No</span></div>"));
    'value'  => array('y' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('yes_txt')."</span></div>", 'n' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('no_txt')."</span></div>"));
interface/web/vm/list/openvz_ostemplate.list.php
@@ -54,7 +54,7 @@
    'prefix' => "",
    'suffix' => "",
    'width'  => "",
    'value'  => array('y' => "<div id=\"ir-Yes\" class=\"swap\"><span>Yes</span></div>", 'n' => "<div class=\"swap\" id=\"ir-No\"><span>No</span></div>"));
    'value'  => array('y' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('yes_txt')."</span></div>", 'n' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('no_txt')."</span></div>"));
$liste["item"][] = array( 'field'  => "ostemplate_id",
    'datatype' => "INTEGER",
@@ -96,7 +96,7 @@
    'prefix' => "",
    'suffix' => "",
    'width'  => "",
    'value'  => array('y' => "<div id=\"ir-Yes\" class=\"swap\"><span>Yes</span></div>", 'n' => "<div class=\"swap\" id=\"ir-No\"><span>No</span></div>"));
    'value'  => array('y' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('yes_txt')."</span></div>", 'n' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('no_txt')."</span></div>"));
interface/web/vm/list/openvz_template.list.php
@@ -54,7 +54,7 @@
    'prefix' => "",
    'suffix' => "",
    'width'  => "",
    'value'  => array('y' => "<div id=\"ir-Yes\" class=\"swap\"><span>Yes</span></div>", 'n' => "<div class=\"swap\" id=\"ir-No\"><span>No</span></div>"));
    'value'  => array('y' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('yes_txt')."</span></div>", 'n' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('no_txt')."</span></div>"));
$liste["item"][] = array( 'field'  => "template_name",
interface/web/vm/list/openvz_vm.list.php
@@ -54,7 +54,7 @@
    'prefix' => "",
    'suffix' => "",
    'width'  => "",
    'value'  => array('y' => "<div id=\"ir-Yes\" class=\"swap\"><span>Yes</span></div>", 'n' => "<div class=\"swap\" id=\"ir-No\"><span>No</span></div>"));
    'value'  => array('y' => "<div id=\"ir-Yes\" class=\"swap\"><span>".$app->lng('yes_txt')."</span></div>", 'n' => "<div class=\"swap\" id=\"ir-No\"><span>".$app->lng('no_txt')."</span></div>"));
$liste["item"][] = array( 'field'  => "veid",
    'datatype' => "VARCHAR",
remoting_client/examples/rest_example.php
New file
@@ -0,0 +1,57 @@
<?php
$remote_user = 'test';
$remote_pass = 'apipassword';
$remote_url = 'https://yourserver.com:8080/remote/json.php';
function restCall($method, $data) {
    global $remote_url;
    if(!is_array($data)) return false;
    $json = json_encode($data);
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_POST, 1);
    if($data) curl_setopt($curl, CURLOPT_POSTFIELDS, $json);
    // needed for self-signed cert
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
    // end of needed for self-signed cert
    curl_setopt($curl, CURLOPT_URL, $remote_url . '?' . $method);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    $result = curl_exec($curl);
    curl_close($curl);
    return $result;
}
$result = restCall('login', array('username' => $remote_user, 'password' => $remote_pass, 'client_login' => false));
if($result) {
    $data = json_decode($result, true);
    if(!$data) die("ERROR!\n");
    $session_id = $data['response'];
    $result = restCall('client_get', array('session_id' => $session_id, 'client_id' => array('username' => 'abcde')));
    if($result) var_dump(json_decode($result, true));
    else print "Could not get client_get result\n";
    // or by id
    $result = restCall('client_get', array('session_id' => $session_id, 'client_id' => 2));
    if($result) var_dump(json_decode($result, true));
    else print "Could not get client_get result\n";
    // or all
    $result = restCall('client_get', array('session_id' => $session_id, 'client_id' => array()));
    if($result) var_dump(json_decode($result, true));
    else print "Could not get client_get result\n";
    $result = restCall('logout', array('session_id' => $session_id));
    if($result) var_dump(json_decode($result, true));
    else print "Could not get logout result\n";
}
server/conf/php_fpm_pool.conf.master
@@ -28,9 +28,11 @@
chdir = /
env[HOSTNAME] = $HOSTNAME
env[TMP] = <tmpl_var name='document_root'>/tmp
env[TMPDIR] = <tmpl_var name='document_root'>/tmp
env[TEMP] = <tmpl_var name='document_root'>/tmp
env[PATH] = /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
<tmpl_if name='security_level' op='==' value='20'>
<tmpl_var name='enable_php_open_basedir'>php_admin_value[open_basedir] = <tmpl_var name='php_open_basedir'>
server/conf/vhost.conf.master
@@ -57,9 +57,9 @@
        SSLProtocol All -SSLv2 -SSLv3
        SSLCipherSuite          ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA
        SSLHonorCipherOrder     on
        <IfModule mod_headers.c>
        Header always add Strict-Transport-Security "max-age=15768000"
        </IfModule>
        # <IfModule mod_headers.c>
        # Header always add Strict-Transport-Security "max-age=15768000"
        # </IfModule>
        SSLCertificateFile <tmpl_var name='document_root'>/ssl/<tmpl_var name='ssl_domain'>.crt
        SSLCertificateKeyFile <tmpl_var name='document_root'>/ssl/<tmpl_var name='ssl_domain'>.key
<tmpl_if name='has_bundle_cert'>
@@ -350,15 +350,20 @@
                Action php5-fcgi /php5-fcgi virtual
                Alias /php5-fcgi {tmpl_var name='document_root'}/cgi-bin/php5-fcgi-{tmpl_var name='ip_address'}-{tmpl_var name='port'}-{tmpl_var name='domain'}
<tmpl_if name='use_tcp'>
                FastCgiExternalServer {tmpl_var name='document_root'}/cgi-bin/php5-fcgi-{tmpl_var name='ip_address'}-{tmpl_var name='port'}-{tmpl_var name='domain'} -idle-timeout 300 -host 127.0.0.1:<tmpl_var name='fpm_port'> -pass-header Authorization
                <IfModule mod_proxy_fcgi.c>
            ProxyPassMatch ^/(.*\.php[345]?(/.*)?)$ fcgi://127.0.0.1:<tmpl_var name='fpm_port'><tmpl_var name='web_document_root'>/$1
                </IfModule>
                FastCgiExternalServer {tmpl_var name='document_root'}/cgi-bin/php5-fcgi-{tmpl_var name='ip_address'}-{tmpl_var name='port'}-{tmpl_var name='domain'} -idle-timeout 300 -host 127.0.0.1:<tmpl_var name='fpm_port'> -pass-header Authorization
</tmpl_if>
<tmpl_if name='use_socket'>
                FastCgiExternalServer {tmpl_var name='document_root'}/cgi-bin/php5-fcgi-{tmpl_var name='ip_address'}-{tmpl_var name='port'}-{tmpl_var name='domain'} -idle-timeout 300 -socket <tmpl_var name='fpm_socket'> -pass-header Authorization
</tmpl_if>
        </IfModule>
        <IfModule mod_proxy_fcgi.c>
<tmpl_if name='use_tcp'>
            ProxyPassMatch ^/(.*\.php[345]?(/.*)?)$ fcgi://127.0.0.1:<tmpl_var name='fpm_port'><tmpl_var name='web_document_root'>/$1
</tmpl_if>
<tmpl_if name='use_socket'>
            ProxyPassMatch ^/(.*\.php[345]?(/.*)?)$ unix://<tmpl_var name='fpm_socket'>|fcgi://localhost/<tmpl_var name='web_document_root'>/$1
</tmpl_if>
            </IfModule>
</tmpl_if>
<tmpl_if name='php' op='==' value='hhvm'>
@@ -396,7 +401,6 @@
<tmpl_if name="rewrite_enabled">
        RewriteEngine on
<tmpl_if name='apache_version' op='>' value='2.2' format='version'>
        RewriteEngine on
        RewriteCond %{REQUEST_URI} ^/\.well-known/acme-challenge/
        RewriteRule ^ - [END]
</tmpl_if>
server/cron.php
@@ -30,6 +30,26 @@
define('SCRIPT_PATH', dirname($_SERVER["SCRIPT_FILENAME"]));
require SCRIPT_PATH."/lib/config.inc.php";
// Check whether another instance of this script is already running
if (is_file($conf['temppath'] . $conf['fs_div'] . '.ispconfig_cron_lock')) {
    clearstatcache();
    $pid = trim(file_get_contents($conf['temppath'] . $conf['fs_div'] . '.ispconfig_cron_lock'));
    if(preg_match('/^[0-9]+$/', $pid)) {
        if(file_exists('/proc/' . $pid)) {
            print @date('d.m.Y-H:i').' - WARNING - There is already an instance of server.php running with pid ' . $pid . '.' . "\n";
            exit;
        }
    }
    print @date('d.m.Y-H:i').' - WARNING - There is already a lockfile set, but no process running with this pid (' . $pid . '). Continuing.' . "\n";
}
// Set Lockfile
@file_put_contents($conf['temppath'] . $conf['fs_div'] . '.ispconfig_cron_lock', getmypid());
if($conf['log_priority'] <= LOGLEVEL_DEBUG) print 'Set Lock: ' . $conf['temppath'] . $conf['fs_div'] . '.ispconfig_cron_lock' . "\n";
require SCRIPT_PATH."/lib/app.inc.php";
set_time_limit(0);
@@ -85,6 +105,10 @@
}
unset($files);
// Remove lock
@unlink($conf['temppath'] . $conf['fs_div'] . '.ispconfig_cron_lock');
$app->log('Remove Lock: ' . $conf['temppath'] . $conf['fs_div'] . '.ispconfig_cron_lock', LOGLEVEL_DEBUG);
die("finished.\n");
?>
server/lib/classes/cron.d/500-backup_mail.inc.php
@@ -176,7 +176,7 @@
                        $dir_handle = dir($mail_backup_dir);
                        $files = array();
                        while (false !== ($entry = $dir_handle->read())) {
                            if($entry != '.' && $entry != '..' && substr($entry,0,4+strlen($rec['mailuser_id'])) == 'mail'.$rec['mailuser_id'] && is_file($mail_backup_dir.'/'.$entry)) {
                            if($entry != '.' && $entry != '..' && substr($entry,0,5+strlen($rec['mailuser_id'])) == 'mail'.$rec['mailuser_id'].'_' && is_file($mail_backup_dir.'/'.$entry)) {
                                $files[] = $entry;
                            }
                        }
server/lib/classes/cron.d/900-letsencrypt.inc.php
@@ -36,8 +36,28 @@
    public function onRunJob() {
        global $app, $conf;
        if(file_exists("/root/.local/share/letsencrypt/bin/letsencrypt")) {
            exec('/root/.local/share/letsencrypt/bin/letsencrypt renew');
        $letsencrypt = array_shift( explode("\n", shell_exec('which letsencrypt certbot /root/.local/share/letsencrypt/bin/letsencrypt')) );
        if(is_executable($letsencrypt)) {
            $version = trim(exec($letsencrypt . ' --version 2>/dev/null'));
            if(preg_match('/^(\S+)\s+(\d+(\.\d+)+)$/', $version, $matches)) {
                $type = strtolower($matches[1]);
                $version = $matches[2];
                if(($type != 'letsencrypt' && $type != 'certbot') || version_compare($version, '0.7.0', '<')) {
                    exec($letsencrypt . ' -n renew');
                    $app->services->restartServiceDelayed('httpd', 'reload');
                } else {
                    $marker_file = '/usr/local/ispconfig/server/le.restart';
                    $cmd = "echo '1' > " . $marker_file;
                    exec($letsencrypt . ' -n renew --post-hook ' . escapeshellarg($cmd));
                    if(file_exists($marker_file) && trim(file_get_contents($marker_file)) == '1') {
                        unlink($marker_file);
                        $app->services->restartServiceDelayed('httpd', 'reload');
                    }
                }
            } else {
                exec($letsencrypt . ' -n renew');
                $app->services->restartServiceDelayed('httpd', 'reload');
            }
        }
        
        parent::onRunJob();
server/lib/classes/db_mysql.inc.php
@@ -87,12 +87,12 @@
        if(!is_object($this->_iConnId) || mysqli_connect_error()) {
            $this->_iConnId = null;
            $this->_sqlerror('Zugriff auf Datenbankserver fehlgeschlagen! / Database server not accessible!');
            $this->_sqlerror('Zugriff auf Datenbankserver fehlgeschlagen! / Database server not accessible!', '', true);
            return false;
        }
        if(!((bool)mysqli_query( $this->_iConnId, 'USE `' . $this->dbName . '`'))) {
            $this->close();
            $this->_sqlerror('Datenbank nicht gefunden / Database not found');
            $this->_sqlerror('Datenbank nicht gefunden / Database not found', '', true);
            return false;
        }
@@ -210,7 +210,7 @@
                    }
                    if($try > 9) {
                        $this->_sqlerror('DB::query -> reconnect');
                        $this->_sqlerror('DB::query -> reconnect', '', true);
                        return false;
                    } else {
                        sleep(($try > 7 ? 5 : 1));
@@ -464,7 +464,7 @@
     *
     * @access private
     */
    private function _sqlerror($sErrormsg = 'Unbekannter Fehler', $sAddMsg = '') {
    private function _sqlerror($sErrormsg = 'Unbekannter Fehler', $sAddMsg = '', $bNoLog = false) {
        global $app, $conf;
        $mysql_error = (is_object($this->_iConnId) ? mysqli_error($this->_iConnId) : mysqli_connect_error());
@@ -475,9 +475,11 @@
        if($this->show_error_messages && $conf['demo_mode'] === false) {
            echo $sErrormsg . $sAddMsg;
        } else if(is_object($app) && method_exists($app, 'log')) {
                $app->log($sErrormsg . $sAddMsg . ' -> ' . $mysql_errno . ' (' . $mysql_error . ')', LOGLEVEL_WARN);
            }
        } elseif(is_object($app) && method_exists($app, 'log') && $bNoLog == false) {
            $app->log($sErrormsg . $sAddMsg . ' -> ' . $mysql_errno . ' (' . $mysql_error . ')', LOGLEVEL_WARN);
        } elseif(php_sapi_name() == 'cli') {
            echo $sErrormsg . $sAddMsg;
        }
    }
    public function affectedRows() {
server/lib/classes/monitor_tools.inc.php
@@ -35,23 +35,29 @@
    //   This is the same code as in install/lib/install.lib.php
    //   So if you change it here, you also have to change it in there!
    //   Please do not forget to remove the swriteln(); - lines here at this file
    public function get_distname() {
    function get_distname() {
        $distname = '';
        $distver = '';
        $distid = '';
        $distbaseid = '';
    $distname = '';
    $distver = '';
    $distid = '';
    $distbaseid = '';
        //** Debian or Ubuntu
        if (file_exists('/etc/debian_version')) {
            if (strstr(trim(file_get_contents('/etc/issue')), 'Ubuntu')) {
                if (strstr(trim(file_get_contents('/etc/issue')), 'LTS')) {
    //** Debian or Ubuntu
    if(file_exists('/etc/debian_version')) {
        // Check if this is Ubuntu and not Debian
        if (strstr(trim(file_get_contents('/etc/issue')), 'Ubuntu') || (is_file('/etc/os-release') && stristr(file_get_contents('/etc/os-release'), 'Ubuntu'))) {
            $issue = file_get_contents('/etc/issue');
            // Use content of /etc/issue file
            if(strstr($issue,'Ubuntu')) {
                if (strstr(trim($issue), 'LTS')) {
                    $lts=" LTS";
                } else {
                    $lts="";
                }
                $issue=file_get_contents('/etc/issue');
                $distname = 'Ubuntu';
                $distid = 'debian40';
                $distbaseid = 'debian';
@@ -61,206 +67,246 @@
                $mainver = explode('.', $ver);
                $mainver = array_filter($mainver);
                $mainver = current($mainver).'.'.next($mainver);
                switch ($mainver){
                case "16.04":
                    $relname = "(Xenial Xerus)";
                    $distid = 'ubuntu1604';
                    break;
                case "15.10":
                    $relname = "(Wily Werewolf)";
                    break;
                case "15.04":
                    $relname = "(Vivid Vervet)";
                    break;
                case "14.10":
                    $relname = "(Utopic Unicorn)";
                    break;
                case "14.04":
                    $relname = "(Trusty Tahr)";
                    break;
                case "13.10":
                    $relname = "(Saucy Salamander)";
                    break;
                case "13.04":
                    $relname = "(Raring Ringtail)";
                    break;
                case "12.10":
                    $relname = "(Quantal Quetzal)";
                    break;
                case "12.04":
                    $relname = "(Precise Pangolin)";
                    break;
                case "11.10":
                    $relname = "(Oneiric Ocelot)";
                    break;
                case "11.14":
                    $relname = "(Natty Narwhal)";
                    break;
                case "10.10":
                    $relname = "(Maverick Meerkat)";
                    break;
                case "10.04":
                    $relname = "(Lucid Lynx)";
                    break;
                case "9.10":
                    $relname = "(Karmic Koala)";
                    break;
                case "9.04":
                    $relname = "(Jaunty Jackpole)";
                    break;
                case "8.10":
                    $relname = "(Intrepid Ibex)";
                    break;
                case "8.04":
                    $relname = "(Hardy Heron)";
                    break;
                case "7.10":
                    $relname = "(Gutsy Gibbon)";
                    break;
                case "7.04":
                    $relname = "(Feisty Fawn)";
                    break;
                case "6.10":
                    $relname = "(Edgy Eft)";
                    break;
                case "6.06":
                    $relname = "(Dapper Drake)";
                    break;
                case "5.10":
                    $relname = "(Breezy Badger)";
                    break;
                case "5.04":
                    $relname = "(Hoary Hedgehog)";
                    break;
                case "4.10":
                    $relname = "(Warty Warthog)";
                    break;
                default:
                    $relname = "UNKNOWN";
            // Use content of /etc/os-release file
            } else {
                $os_release = file_get_contents('/etc/os-release');
                if (strstr(trim($os_release), 'LTS')) {
                    $lts = " LTS";
                } else {
                    $lts = "";
                }
                $distver = $ver.$lts." ".$relname;
            } elseif(trim(file_get_contents('/etc/debian_version')) == '4.0') {
                $distname = 'Debian';
                $distver = '4.0';
                $distname = 'Ubuntu';
                $distid = 'debian40';
                $distbaseid = 'debian';
            } elseif (strstr(trim(file_get_contents('/etc/debian_version')), '5.0')) {
                $distname = 'Debian';
                $distver = 'Lenny';
                $distid = 'debian40';
                $distbaseid = 'debian';
            } elseif (strstr(trim(file_get_contents('/etc/debian_version')), '6.0') || trim(file_get_contents('/etc/debian_version')) == 'squeeze/sid') {
                $distname = 'Debian';
                $distver = 'Squeeze/Sid';
                $distid = 'debian60';
                $distbaseid = 'debian';
            } elseif (strstr(trim(file_get_contents('/etc/debian_version')), '7.0') || substr(trim(file_get_contents('/etc/debian_version')),0,2) == '7.' || trim(file_get_contents('/etc/debian_version')) == 'wheezy/sid') {
                $distname = 'Debian';
                $distver = 'Wheezy/Sid';
                $distid = 'debian60';
                $distbaseid = 'debian';
            } elseif(strstr(trim(file_get_contents('/etc/debian_version')), '8') || substr(trim(file_get_contents('/etc/debian_version')),0,1) == '8') {
                $distname = 'Debian';
                $distver = 'Jessie';
                $distid = 'debian60';
                $distbaseid = 'debian';
            } else {
                $distname = 'Debian';
                $distver = 'Unknown';
                $distid = 'debian40';
                $distbaseid = 'debian';
                preg_match("/.*VERSION=\"(.*)\".*/ui", $os_release, $ver);
                $ver = str_replace("LTS", "", $ver[1]);
                $ver = explode(" ", $ver, 2);
                $ver = reset($ver);
                $mainver = $ver;
            }
        }
        //** OpenSuSE
        elseif (file_exists('/etc/SuSE-release')) {
            if (stristr(file_get_contents('/etc/SuSE-release'), '11.0')) {
                $distname = 'openSUSE';
                $distver = '11.0';
                $distid = 'opensuse110';
                $distbaseid = 'opensuse';
            } elseif (stristr(file_get_contents('/etc/SuSE-release'), '11.1')) {
                $distname = 'openSUSE';
                $distver = '11.1';
                $distid = 'opensuse110';
                $distbaseid = 'opensuse';
            } elseif (stristr(file_get_contents('/etc/SuSE-release'), '11.2')) {
                $distname = 'openSUSE';
                $distver = '11.1';
                $distid = 'opensuse110';
                $distbaseid = 'opensuse';
            } else {
                $distname = 'openSUSE';
                $distver = 'Unknown';
                $distid = 'opensuse110';
                $distbaseid = 'opensuse';
            switch ($mainver){
            case "16.04":
                $relname = "(Xenial Xerus)";
                $distconfid = 'ubuntu1604';
                break;
            case "15.10":
                $relname = "(Wily Werewolf)";
                break;
            case "15.04":
                $relname = "(Vivid Vervet)";
                break;
            case "14.10":
                $relname = "(Utopic Unicorn)";
                break;
            case "14.04":
                $relname = "(Trusty Tahr)";
                break;
            case "13.10":
                $relname = "(Saucy Salamander)";
                break;
            case "13.04":
                $relname = "(Raring Ringtail)";
                break;
            case "12.10":
                $relname = "(Quantal Quetzal)";
                break;
            case "12.04":
                $relname = "(Precise Pangolin)";
                break;
            case "11.10":
                $relname = "(Oneiric Ocelot)";
                break;
            case "11.14":
                $relname = "(Natty Narwhal)";
                break;
            case "10.10":
                $relname = "(Maverick Meerkat)";
                break;
            case "10.04":
                $relname = "(Lucid Lynx)";
                break;
            case "9.10":
                $relname = "(Karmic Koala)";
                break;
            case "9.04":
                $relname = "(Jaunty Jackpole)";
                break;
            case "8.10":
                $relname = "(Intrepid Ibex)";
                break;
            case "8.04":
                $relname = "(Hardy Heron)";
                break;
            case "7.10":
                $relname = "(Gutsy Gibbon)";
                break;
            case "7.04":
                $relname = "(Feisty Fawn)";
                break;
            case "6.10":
                $relname = "(Edgy Eft)";
                break;
            case "6.06":
                $relname = "(Dapper Drake)";
                break;
            case "5.10":
                $relname = "(Breezy Badger)";
                break;
            case "5.04":
                $relname = "(Hoary Hedgehog)";
                break;
            case "4.10":
                $relname = "(Warty Warthog)";
                break;
            default:
                $relname = "UNKNOWN";
            }
        }
        //** Redhat
        elseif (file_exists('/etc/redhat-release')) {
            $content = file_get_contents('/etc/redhat-release');
            if (stristr($content, 'Fedora release 9 (Sulphur)')) {
                $distname = 'Fedora';
                $distver = '9';
                $distid = 'fedora9';
                $distbaseid = 'fedora';
            } elseif (stristr($content, 'Fedora release 10 (Cambridge)')) {
                $distname = 'Fedora';
                $distver = '10';
                $distid = 'fedora9';
                $distbaseid = 'fedora';
            } elseif (stristr($content, 'Fedora release 10')) {
                $distname = 'Fedora';
                $distver = '11';
                $distid = 'fedora9';
                $distbaseid = 'fedora';
            } elseif (stristr($content, 'CentOS release 5.2 (Final)')) {
                $distname = 'CentOS';
                $distver = '5.2';
                $distid = 'centos52';
                $distbaseid = 'fedora';
            } elseif (stristr($content, 'CentOS release 5.3 (Final)')) {
                $distname = 'CentOS';
                $distver = '5.3';
                $distid = 'centos53';
                $distbaseid = 'fedora';
            } elseif(stristr($content, 'CentOS Linux release 6')) {
                $distname = 'CentOS';
                $distver = 'Unknown';
                $distid = 'centos53';
                $distbaseid = 'fedora';
            } elseif(stristr($content, 'CentOS Linux release 7')) {
                $distname = 'CentOS';
                $distver = 'Unknown';
                $distid = 'centos53';
                $distbaseid = 'fedora';
            } else {
                $distname = 'Redhat';
                $distver = 'Unknown';
                $distid = 'fedora9';
                $distbaseid = 'fedora';
            }
        }
        //** Gentoo
        elseif (file_exists('/etc/gentoo-release')) {
            $content = file_get_contents('/etc/gentoo-release');
            preg_match_all('/([0-9]{1,2})/', $content, $version);
            $distname = 'Gentoo';
            $distver = $version[0][0] . $version[0][1];
            $distid = 'gentoo';
            $distbaseid = 'gentoo';
            $distver = $ver.$lts." ".$relname;
        } elseif(trim(file_get_contents('/etc/debian_version')) == '4.0') {
            $distname = 'Debian';
            $distver = '4.0';
            $distid = 'debian40';
            $distbaseid = 'debian';
        } elseif(strstr(trim(file_get_contents('/etc/debian_version')), '5.0')) {
            $distname = 'Debian';
            $distver = 'Lenny';
            $distid = 'debian40';
            $distbaseid = 'debian';
        } elseif(strstr(trim(file_get_contents('/etc/debian_version')), '6.0') || trim(file_get_contents('/etc/debian_version')) == 'squeeze/sid') {
            $distname = 'Debian';
            $distver = 'Squeeze/Sid';
            $distid = 'debian60';
            $distbaseid = 'debian';
        } elseif(strstr(trim(file_get_contents('/etc/debian_version')), '7.0') || substr(trim(file_get_contents('/etc/debian_version')),0,2) == '7.' || trim(file_get_contents('/etc/debian_version')) == 'wheezy/sid') {
            $distname = 'Debian';
            $distver = 'Wheezy/Sid';
            $distid = 'debian60';
            $distbaseid = 'debian';
        } elseif(strstr(trim(file_get_contents('/etc/debian_version')), '8') || substr(trim(file_get_contents('/etc/debian_version')),0,1) == '8') {
            $distname = 'Debian';
            $distver = 'Jessie';
            $distid = 'debian60';
            $distbaseid = 'debian';
        } elseif(strstr(trim(file_get_contents('/etc/debian_version')), '/sid')) {
            $distname = 'Debian';
            $distver = 'Testing';
            $distid = 'debian60';
            $distconfid = 'debiantesting';
            $distbaseid = 'debian';
        } else {
            die('Unrecognized GNU/Linux distribution');
            $distname = 'Debian';
            $distver = 'Unknown';
            $distid = 'debian40';
            $distbaseid = 'debian';
        }
    }
        return array('name' => $distname, 'version' => $distver, 'id' => $distid, 'baseid' => $distbaseid);
    //** OpenSuSE
    elseif(file_exists('/etc/SuSE-release')) {
        if(stristr(file_get_contents('/etc/SuSE-release'), '11.0')) {
            $distname = 'openSUSE';
            $distver = '11.0';
            $distid = 'opensuse110';
            $distbaseid = 'opensuse';
        } elseif(stristr(file_get_contents('/etc/SuSE-release'), '11.1')) {
            $distname = 'openSUSE';
            $distver = '11.1';
            $distid = 'opensuse110';
            $distbaseid = 'opensuse';
        } elseif(stristr(file_get_contents('/etc/SuSE-release'), '11.2')) {
            $distname = 'openSUSE';
            $distver = '11.2';
            $distid = 'opensuse112';
            $distbaseid = 'opensuse';
        }  else {
            $distname = 'openSUSE';
            $distver = 'Unknown';
            $distid = 'opensuse112';
            $distbaseid = 'opensuse';
        }
    }
    //** Redhat
    elseif(file_exists('/etc/redhat-release')) {
        $content = file_get_contents('/etc/redhat-release');
        if(stristr($content, 'Fedora release 9 (Sulphur)')) {
            $distname = 'Fedora';
            $distver = '9';
            $distid = 'fedora9';
            $distbaseid = 'fedora';
        } elseif(stristr($content, 'Fedora release 10 (Cambridge)')) {
            $distname = 'Fedora';
            $distver = '10';
            $distid = 'fedora9';
            $distbaseid = 'fedora';
        } elseif(stristr($content, 'Fedora release 10')) {
            $distname = 'Fedora';
            $distver = '11';
            $distid = 'fedora9';
            $distbaseid = 'fedora';
        } elseif(stristr($content, 'CentOS release 5.2 (Final)')) {
            $distname = 'CentOS';
            $distver = '5.2';
            $distid = 'centos52';
            $distbaseid = 'fedora';
        } elseif(stristr($content, 'CentOS release 5.3 (Final)')) {
            $distname = 'CentOS';
            $distver = '5.3';
            $distid = 'centos53';
            $distbaseid = 'fedora';
        } elseif(stristr($content, 'CentOS release 5')) {
            $distname = 'CentOS';
            $distver = 'Unknown';
            $distid = 'centos53';
            $distbaseid = 'fedora';
        } elseif(stristr($content, 'CentOS Linux release 6')) {
            $distname = 'CentOS';
            $distver = 'Unknown';
            $distid = 'centos53';
            $distbaseid = 'fedora';
        } elseif(stristr($content, 'CentOS Linux release 7.2')) {
            $distname = 'CentOS';
            $distver = 'Unknown';
            $distid = 'centos70';
            $distconfid = 'centos72';
            $distbaseid = 'fedora';
        } elseif(stristr($content, 'CentOS Linux release 7')) {
            $distname = 'CentOS';
            $distver = 'Unknown';
            $distid = 'centos70';
            $distbaseid = 'fedora';
        } else {
            $distname = 'Redhat';
            $distver = 'Unknown';
            $distid = 'fedora9';
            $distbaseid = 'fedora';
        }
    }
    //** Gentoo
    elseif(file_exists('/etc/gentoo-release')) {
        $content = file_get_contents('/etc/gentoo-release');
        preg_match_all('/([0-9]{1,2})/', $content, $version);
        $distname = 'Gentoo';
        $distver = $version[0][0].$version[0][1];
        $distid = 'gentoo';
        $distbaseid = 'gentoo';
    } else {
        die('Unrecognized GNU/Linux distribution');
    }
    // Set $distconfid to distid, if no different id for the config is defined
    if(!isset($distconfid)) $distconfid = $distid;
    return array('name' => $distname, 'version' => $distver, 'id' => $distid, 'confid' => $distconfid, 'baseid' => $distbaseid);
    }
    // this function remains in the tools class, because it is used by cron AND rescue
server/lib/classes/system.inc.php
@@ -1803,7 +1803,9 @@
    function mount_backup_dir($backup_dir, $mount_cmd = '/usr/local/ispconfig/server/scripts/backup_dir_mount.sh'){
        global $app, $conf;
        if($this->is_mounted($backup_dir)) return true;
        $mounted = true;
        if (     is_file($mount_cmd) &&
                is_executable($mount_cmd) &&
@@ -1856,23 +1858,46 @@
    }
    function getinitcommand($servicename, $action, $init_script_directory = ''){
    function _getinitcommand($servicename, $action, $init_script_directory = '', $check_service) {
        global $conf;
        // upstart
        if(is_executable('/sbin/initctl')){
            exec('/sbin/initctl version 2>/dev/null | /bin/grep -q upstart', $retval['output'], $retval['retval']);
            if(intval($retval['retval']) == 0) return 'service '.$servicename.' '.$action;
        }
        // systemd
        if(is_executable('/bin/systemd') || is_executable('/usr/bin/systemctl')){
            return 'systemctl '.$action.' '.$servicename.'.service';
            if ($check_service) {
                exec("systemctl is-enabled ".$servicename." 2>&1", $out, $ret_val);
            }
            if ($ret_val == 0 || !$check_service) {
                return 'systemctl '.$action.' '.$servicename.'.service';
            }
        }
        // sysvinit
        if($init_script_directory == '') $init_script_directory = $conf['init_scripts'];
        if(substr($init_script_directory, -1) === '/') $init_script_directory = substr($init_script_directory, 0, -1);
        return $init_script_directory.'/'.$servicename.' '.$action;
        if($check_service && is_executable($init_script_directory.'/'.$servicename)) {
            return $init_script_directory.'/'.$servicename.' '.$action;
        }
        if (!$check_service) {
            return $init_script_directory.'/'.$servicename.' '.$action;
        }
    }
    function getinitcommand($servicename, $action, $init_script_directory = '', $check_service=false) {
        if (is_array($servicename)) {
            foreach($servicename as $service) {
                $out = $this->_getinitcommand($service, $action, $init_script_directory, true);
                if ($out != '') return $out;
            }
        } else {
            return $this->_getinitcommand($servicename, $action, $init_script_directory, $check_service);
        }
    }
    function getapacheversion($get_minor = false) {
        global $app;
        
server/plugins-available/apache2_plugin.inc.php
@@ -36,6 +36,7 @@
    // private variables
    var $action = '';
    var $ssl_certificate_changed = false;
    var $update_letsencrypt = false;
    //* This function is called during ispconfig installation to determine
    //  if a symlink shall be created for this plugin.
@@ -504,6 +505,7 @@
            $data['new'] = $tmp;
            $data['old'] = $tmp;
            $this->action = 'update';
            $this->update_letsencrypt = true;
        }
        // load the server configuration options
@@ -882,9 +884,9 @@
            }
            
          // get the primitive folder for document_root and the filesystem, will need it later.
          $df_output=exec("df -T $document_root|awk 'END{print \$2,\$NF}'");
          $file_system = explode(" ", $df_output)[0];
          $primitive_root = explode(" ", $df_output)[1];
          $df_output=explode(" ", exec("df -T " . escapeshellarg($data['new']['document_root']) . "|awk 'END{print \$2,\$NF}'"));
          $file_system = $df_output[0];
          $primitive_root = $df_output[1];
          if ( in_array($file_system , array('ext2','ext3','ext4'), true) ) {
            exec('setquota -u '. $username . ' ' . $blocks_soft . ' ' . $blocks_hard . ' 0 0 -a &> /dev/null');
@@ -1177,8 +1179,7 @@
            ($data['old']['ssl'] == 'n' || $data['old']['ssl_letsencrypt'] == 'n') // we have new let's encrypt configuration
            || ($data['old']['domain'] != $data['new']['domain']) // we have domain update
            || ($data['old']['subdomain'] != $data['new']['subdomain']) // we have new or update on "auto" subdomain
            || ($data['new']['type'] == 'subdomain') // we have new or update on subdomain
            || ($data['old']['type'] == 'alias' || $data['new']['type'] == 'alias') // we have new or update on aliasdomain
            || $this->update_letsencrypt == true
        )) {
            // default values
            $temp_domains = array();
@@ -1206,8 +1207,8 @@
            if(is_array($aliasdomains)) {
                foreach($aliasdomains as $aliasdomain) {
                    $temp_domains[] = $aliasdomain['domain'];
                    if(isset($aliasdomain['subdomain']) && ! empty($aliasdomain['subdomain'])) {
                        $temp_domains[] = $aliasdomain['subdomain'] . "." . $aliasdomain['domain'];
                    if(isset($aliasdomain['subdomain']) && ($aliasdomain['subdomain'] != "none")) {
                        $temp_domains[] = "www." . $aliasdomain['domain'];
                    }
                }
            }
@@ -1230,12 +1231,15 @@
            $webroot = $data['new']['document_root']."/web";
            //* check if we have already a Let's Encrypt cert
            if(!file_exists($crt_tmp_file) && !file_exists($key_tmp_file)) {
            //if(!file_exists($crt_tmp_file) && !file_exists($key_tmp_file)) {
                // we must not skip if cert exists, otherwise changed domains (alias or sub) won't make it to the cert
                $app->log("Create Let's Encrypt SSL Cert for: $domain", LOGLEVEL_DEBUG);
                
                $success = false;
                if(file_exists("/root/.local/share/letsencrypt/bin/letsencrypt")) {
                    $success = $this->_exec("/root/.local/share/letsencrypt/bin/letsencrypt auth --text --agree-tos --authenticator webroot --server https://acme-v01.api.letsencrypt.org/directory --rsa-key-size 4096 --email postmaster@$domain --domains $lddomain --webroot-path /usr/local/ispconfig/interface/acme");
                $letsencrypt = explode("\n", shell_exec('which letsencrypt certbot /root/.local/share/letsencrypt/bin/letsencrypt'));
                $letsencrypt = reset($letsencrypt);
                if(is_executable($letsencrypt)) {
                    $success = $this->_exec($letsencrypt . " certonly -n --text --agree-tos --expand --authenticator webroot --server https://acme-v01.api.letsencrypt.org/directory --rsa-key-size 4096 --email postmaster@$domain --domains $lddomain --webroot-path /usr/local/ispconfig/interface/acme");
                }
                if(!$success) {
                    // error issuing cert
@@ -1247,7 +1251,7 @@
                    /* Update also the master-DB of the Server-Farm */
                    $app->dbmaster->query("UPDATE web_domain SET `ssl` = ?, `ssl_letsencrypt` = ? WHERE `domain` = ?", $data['new']['ssl'], 'n', $data['new']['domain']);
                }
            }
            //}
            //* check is been correctly created
            if(file_exists($crt_tmp_file) OR file_exists($key_tmp_file)) {
@@ -1493,7 +1497,7 @@
        
        if (count($rewrite_wildcard_rules) > 0) $rewrite_rules = array_merge($rewrite_rules, $rewrite_wildcard_rules); // Append wildcard rules to the end of rules
        if(count($rewrite_rules) > 0 || $vhost_data['seo_redirect_enabled'] > 0 || count($alias_seo_redirects) > 0) {
        if(count($rewrite_rules) > 0 || $vhost_data['seo_redirect_enabled'] > 0 || count($alias_seo_redirects) > 0 || $data['new']['rewrite_to_https'] == 'y') {
            $tpl->setVar('rewrite_enabled', 1);
        } else {
            $tpl->setVar('rewrite_enabled', 0);
@@ -2101,6 +2105,19 @@
                //exec('fuser -km '.escapeshellarg($data['old']['document_root'].'/'.$log_folder).' 2>/dev/null');
                exec('umount '.escapeshellarg($data['old']['document_root'].'/'.$log_folder).' 2>/dev/null');
            }
            // remove letsencrypt if it exists (renew will always fail otherwise)
            $domain = $data['old']['ssl_domain'];
            if(!$domain) $domain = $data['old']['domain'];
            if(substr($domain, 0, 2) === '*.') {
                // wildcard domain not yet supported by letsencrypt!
                $domain = substr($domain, 2);
            }
            //$crt_tmp_file = "/etc/letsencrypt/live/".$domain."/cert.pem";
            //$key_tmp_file = "/etc/letsencrypt/live/".$domain."/privkey.pem";
            $le_conf_file = '/etc/letsencrypt/renewal/' . $domain . '.conf';
            @rename('/etc/letsencrypt/renewal/' . $domain . '.conf', '/etc/letsencrypt/renewal/' . $domain . '.conf~backup');
        }
        //* remove mountpoint from fstab
@@ -2122,6 +2139,7 @@
            $data['new'] = $tmp;
            $data['old'] = $tmp;
            $this->action = 'update';
            $this->update_letsencrypt = true;
            // just run the update function
            $this->update($event_name, $data);
@@ -3148,7 +3166,7 @@
        $tpl->setVar('fpm_pool', $pool_name);
        $tpl->setVar('fpm_port', $web_config['php_fpm_start_port'] + $data['new']['domain_id'] - 1);
        $tpl->setVar('fpm_user', $data['new']['system_user']);
        $tpl->setVar('fpm_group', $data['new']['system_group']);
        $tpl->setVar('fpm_group', $web_config['group']);
        $tpl->setVar('fpm_domain', $data['new']['domain']);
        $tpl->setVar('pm', $data['new']['pm']);
        $tpl->setVar('pm_max_children', $data['new']['pm_max_children']);
server/plugins-available/backup_plugin.inc.php
@@ -87,6 +87,7 @@
                    if(file_exists($backup_dir.'/'.$backup['filename']) && file_exists($web['document_root'].'/backup/') && !stristr($backup_dir.'/'.$backup['filename'], '..') && !stristr($backup_dir.'/'.$backup['filename'], 'etc')) {
                        copy($backup_dir.'/'.$backup['filename'], $web['document_root'].'/backup/'.$backup['filename']);
                        chgrp($web['document_root'].'/backup/'.$backup['filename'], $web['system_group']);
                        chmod($web['document_root'].'/backup/'.$backup['filename'],0600);
                        $app->log('cp '.$backup_dir.'/'.$backup['filename'].' '.$web['document_root'].'/backup/'.$backup['filename'], LOGLEVEL_DEBUG);
                    }
                }
server/plugins-available/cron_plugin.inc.php
@@ -136,9 +136,9 @@
            }
            // get the primitive folder for document_root and the filesystem, will need it later.
            $df_output=exec("df -T $document_root|awk 'END{print \$2,\$NF}'");
            $file_system = explode(" ", $df_output)[0];
            $primitive_root = explode(" ", $df_output)[1];
            $df_output=explode(" ", exec("df -T " . escapeshellarg($parent_domain["document_root"]) . "|awk 'END{print \$2,\$NF}'"));
            $file_system = $df_output[0];
            $primitive_root = $df_output[1];
            if ( in_array($file_system , array('ext2','ext3','ext4'),true) ) {
              exec('setquota -u '. $username . ' ' . $blocks_soft . ' ' . $blocks_hard . ' 0 0 -a &> /dev/null');
server/plugins-available/mail_plugin.inc.php
@@ -206,7 +206,9 @@
        }
        //* Send the welcome email message
        $domain = explode('@', $data["new"]["email"])[1];
        $tmp = explode('@', $data["new"]["email"]);
        $domain = $tmp[1];
        unset($tmp);
        $html = false;
        if(file_exists($conf['rootpath'].'/conf-custom/mail/welcome_email_'.$domain.'.html')) {
            $lines = file($conf['rootpath'].'/conf-custom/mail/welcome_email_'.$domain.'.html');
@@ -466,7 +468,9 @@
            if( $server_config['backup_dir_is_mount'] == 'y' && !$app->system->mount_backup_dir($backup_dir) ) $mount_backup = false;
            if($mount_backup){
                $sql = "SELECT * FROM mail_domain WHERE domain = ?";
                $domain_rec = $app->db->queryOneRecord($sql, explode("@",$data['old']['email'])[1]);
                $tmp = explode("@",$data['old']['email']);
                $domain_rec = $app->db->queryOneRecord($sql,$tmp[1]);
                unset($tmp);
                if (is_array($domain_rec)) {
                    $mail_backup_dir = $backup_dir.'/mail'.$domain_rec['domain_id'];
                    $mail_backup_files = 'mail'.$data['old']['mailuser_id'];
server/plugins-available/mail_plugin_dkim.inc.php
@@ -171,22 +171,11 @@
     * This function restarts amavis
     */
    function restart_amavis() {
        global $app, $conf;
        $pos_init=array(
            $conf['init_scripts'].'/amavis',
            $conf['init_scripts'].'/amavisd'
        );
        $initfile='';
        foreach($pos_init as $init) {
            if (is_executable($init)) {
                $initfile=$init;
                break;
                }
        }
        if ( $initfile == '' ) $initfile = 'service amavis';
        $app->log('Restarting amavis: '.$initfile.'.', LOGLEVEL_DEBUG);
        exec(escapeshellarg($initfile).' restart', $output);
        foreach($output as $logline) $app->log($logline, LOGLEVEL_DEBUG);
        global $app;
        $initcommand = $app->system->getinitcommand(array('amavis', 'amavisd'), 'restart');
        $app->log('Restarting amavis: '.$initcommand.'.', LOGLEVEL_DEBUG);
        exec($initcommand, $output);
        foreach($output as $logline) $app->log($logline, LOGLEVEL_DEBUG);
    }
    /**
server/plugins-available/maildeliver_plugin.inc.php
@@ -132,7 +132,7 @@
            // Custom filters
            if($data["new"]["custom_mailfilter"] == 'NULL') $data["new"]["custom_mailfilter"] = '';
            $tpl->setVar('custom_mailfilter', $data["new"]["custom_mailfilter"]);
            $tpl->setVar('custom_mailfilter', str_replace("\r\n","\n",$data["new"]["custom_mailfilter"]));
            // Move junk
            $tpl->setVar('move_junk', $data["new"]["move_junk"]);
server/plugins-available/maildrop_plugin.inc.php
@@ -211,7 +211,7 @@
                        $mailfilter_content .= file_get_contents($conf["rootpath"].'/conf/mailfilter_move_junk.master')."\n";
                    }
                }
                $mailfilter_content .= $data["new"]["custom_mailfilter"];
                $mailfilter_content .= str_replace("\r\n","\n",$data["new"]["custom_mailfilter"]);
                // Replace windows linebreaks in mailfilter file
                $mailfilter_content = str_replace("\r\n", "\n", $mailfilter_content);
server/plugins-available/nginx_plugin.inc.php
@@ -36,6 +36,7 @@
    // private variables
    var $action = '';
    var $ssl_certificate_changed = false;
    var $update_letsencrypt = false;
    //* This function is called during ispconfig installation to determine
    //  if a symlink shall be created for this plugin.
@@ -354,6 +355,7 @@
            $data['new'] = $tmp;
            $data['old'] = $tmp;
            $this->action = 'update';
            $this->update_letsencrypt = true;
        }
        // load the server configuration options
@@ -741,9 +743,9 @@
            }
            
          // get the primitive folder for document_root and the filesystem, will need it later.
          $df_output=exec("df -T $document_root|awk 'END{print \$2,\$NF}'");
          $file_system = explode(" ", $df_output)[0];
          $primitive_root = explode(" ", $df_output)[1];
          $df_output=explode(" ", exec("df -T $document_root|awk 'END{print \$2,\$NF}'"));
          $file_system = $df_output[0];
          $primitive_root = $df_output[1];
          if ( in_array($file_system , array('ext2','ext3','ext4'), true) ) {
            exec('setquota -u '. $username . ' ' . $blocks_soft . ' ' . $blocks_hard . ' 0 0 -a &> /dev/null');
@@ -932,6 +934,7 @@
        $tpl->newTemplate('nginx_vhost.conf.master');
        // IPv4
        if($data['new']['ip_address'] == '') $data['new']['ip_address'] = '*';
        //* use ip-mapping for web-mirror
        if($data['new']['ip_address'] != '*' && $conf['mirror_server_id'] > 0) {
@@ -1250,8 +1253,7 @@
            ($data['old']['ssl'] == 'n' || $data['old']['ssl_letsencrypt'] == 'n') // we have new let's encrypt configuration
            || ($data['old']['domain'] != $data['new']['domain']) // we have domain update
            || ($data['old']['subdomain'] != $data['new']['subdomain']) // we have new or update on "auto" subdomain
            || ($data['new']['type'] == 'subdomain') // we have new or update on subdomain
            || ($data['old']['type'] == 'alias' || $data['new']['type'] == 'alias') // we have new or update on alias domain
            || $this->update_letsencrypt == true
        )) {
            // default values
            $temp_domains = array();
@@ -1279,8 +1281,8 @@
            if(is_array($aliasdomains)) {
                foreach($aliasdomains as $aliasdomain) {
                    $temp_domains[] = $aliasdomain['domain'];
                    if(isset($aliasdomain['subdomain']) && ! empty($aliasdomain['subdomain'])) {
                        $temp_domains[] = $aliasdomain['subdomain'] . "." . $aliasdomain['domain'];
                    if(isset($aliasdomain['subdomain']) && ($aliasdomain['subdomain'] != "none")) {
                        $temp_domains[] = "www." . $aliasdomain['domain'];
                    }
                    
                    foreach($sub_prefixes as $s) {
@@ -1308,12 +1310,15 @@
            $webroot = $data['new']['document_root']."/web";
            //* check if we have already a Let's Encrypt cert
            if(!file_exists($crt_tmp_file) && !file_exists($key_tmp_file)) {
            //if(!file_exists($crt_tmp_file) && !file_exists($key_tmp_file)) {
                // we must not skip if cert exists, otherwise changed domains (alias or sub) won't make it to the cert
                $app->log("Create Let's Encrypt SSL Cert for: $domain", LOGLEVEL_DEBUG);
                
                $success = false;
                if(file_exists("/root/.local/share/letsencrypt/bin/letsencrypt")) {
                    $success = $this->_exec("/root/.local/share/letsencrypt/bin/letsencrypt auth --text --agree-tos --authenticator webroot --server https://acme-v01.api.letsencrypt.org/directory --rsa-key-size 4096 --email postmaster@$domain --domains $lddomain --webroot-path /usr/local/ispconfig/interface/acme");
                $letsencrypt = explode("\n", shell_exec('which letsencrypt certbot /root/.local/share/letsencrypt/bin/letsencrypt'));
                $letsencrypt = reset($letsencrypt);
                if(is_executable($letsencrypt)) {
                    $success = $this->_exec($letsencrypt . " certonly -n --text --agree-tos --expand --authenticator webroot --server https://acme-v01.api.letsencrypt.org/directory --rsa-key-size 4096 --email postmaster@$domain --domains $lddomain --webroot-path /usr/local/ispconfig/interface/acme");
                }
                if(!$success) {
                    // error issuing cert
@@ -1325,7 +1330,7 @@
                    /* Update also the master-DB of the Server-Farm */
                    $app->dbmaster->query("UPDATE web_domain SET `ssl` = ?, `ssl_letsencrypt` = ? WHERE `domain` = ?", $data['new']['ssl'], 'n', $data['new']['domain']);
                }
            }
            //}
            //* check is been correctly created
            if(file_exists($crt_tmp_file) OR file_exists($key_tmp_file)) {
@@ -2122,6 +2127,18 @@
                //exec('fuser -km '.escapeshellarg($data['old']['document_root'].'/'.$log_folder).' 2>/dev/null');
                exec('umount '.escapeshellarg($data['old']['document_root'].'/'.$log_folder).' 2>/dev/null');
            }
            // remove letsencrypt if it exists (renew will always fail otherwise)
            $domain = $data['old']['ssl_domain'];
            if(!$domain) $domain = $data['old']['domain'];
            if(substr($domain, 0, 2) === '*.') {
                // wildcard domain not yet supported by letsencrypt!
                $domain = substr($domain, 2);
            }
            //$crt_tmp_file = "/etc/letsencrypt/live/".$domain."/cert.pem";
            //$key_tmp_file = "/etc/letsencrypt/live/".$domain."/privkey.pem";
            $le_conf_file = '/etc/letsencrypt/renewal/' . $domain . '.conf';
            @rename('/etc/letsencrypt/renewal/' . $domain . '.conf', '/etc/letsencrypt/renewal/' . $domain . '.conf~backup');
        }
        //* remove mountpoint from fstab
@@ -2143,6 +2160,7 @@
            $data['new'] = $tmp;
            $data['old'] = $tmp;
            $this->action = 'update';
            $this->update_letsencrypt = true;
            // just run the update function
            $this->update($event_name, $data);
@@ -2762,7 +2780,7 @@
        $tpl->setVar('fpm_pool', $pool_name);
        $tpl->setVar('fpm_port', $web_config['php_fpm_start_port'] + $data['new']['domain_id'] - 1);
        $tpl->setVar('fpm_user', $data['new']['system_user']);
        $tpl->setVar('fpm_group', $data['new']['system_group']);
        $tpl->setVar('fpm_group', $web_config['group']);
        $tpl->setVar('pm', $data['new']['pm']);
        $tpl->setVar('pm_max_children', $data['new']['pm_max_children']);
        $tpl->setVar('pm_start_servers', $data['new']['pm_start_servers']);
server/plugins-available/shelluser_jailkit_plugin.inc.php
@@ -245,13 +245,17 @@
            //exec('rm -rf '.$data['old']['dir'].$jailkit_chroot_userhome);
            $app->system->web_folder_protection($web['document_root'], false);
            $userid = intval($app->system->getuid($data['old']['username']));
            $command = 'killall -u '.escapeshellcmd($data['old']['username']).' ; ';
            $command .= 'userdel -f '.escapeshellcmd($data['old']['username']).' &> /dev/null';
            exec($command);
            // Remove the jailed user from passwd and shadow file inside the jail
            $app->system->removeLine($data['old']['dir'].'/etc/passwd', $data['old']['username']);
            $app->system->removeLine($data['old']['dir'].'/etc/shadow', $data['old']['username']);
            if(@is_dir($data['old']['dir'].$jailkit_chroot_userhome)) {
                $userid = intval($app->system->getuid($data['old']['username']));
                $command = 'killall -u '.escapeshellcmd($data['old']['username']).' ; userdel -f';
                $command .= ' '.escapeshellcmd($data['old']['username']).' &> /dev/null';
                exec($command);
                $this->_delete_homedir($data['old']['dir'].$jailkit_chroot_userhome,$userid,$data['old']['parent_domain_id']);
                
                $app->log("Jailkit Plugin -> delete chroot home:".$data['old']['dir'].$jailkit_chroot_userhome, LOGLEVEL_DEBUG);
server/scripts/create_jailkit_chroot.sh
@@ -30,6 +30,9 @@
fi
chmod a+rwx $CHROOT_HOMEDIR/tmp
## Fix permissions of the root firectory
chmod g-w $CHROOT_HOMEDIR/bin
# mysql needs the socket in the chrooted environment
mkdir $CHROOT_HOMEDIR/var
server/server.php
@@ -29,6 +29,25 @@
define('SCRIPT_PATH', dirname($_SERVER["SCRIPT_FILENAME"]));
require SCRIPT_PATH."/lib/config.inc.php";
// Check whether another instance of this script is already running
if (is_file($conf['temppath'] . $conf['fs_div'] . '.ispconfig_lock')) {
    clearstatcache();
    $pid = trim(file_get_contents($conf['temppath'] . $conf['fs_div'] . '.ispconfig_lock'));
    if(preg_match('/^[0-9]+$/', $pid)) {
        if(file_exists('/proc/' . $pid)) {
            print @date('d.m.Y-H:i').' - WARNING - There is already an instance of server.php running with pid ' . $pid . '.' . "\n";
            exit;
        }
    }
    print @date('d.m.Y-H:i').' - WARNING - There is already a lockfile set, but no process running with this pid (' . $pid . '). Continuing.' . "\n";
}
// Set Lockfile
@file_put_contents($conf['temppath'] . $conf['fs_div'] . '.ispconfig_lock', getmypid());
if($conf['log_priority'] <= LOGLEVEL_DEBUG) print 'Set Lock: ' . $conf['temppath'] . $conf['fs_div'] . '.ispconfig_lock' . "\n";
require SCRIPT_PATH."/lib/app.inc.php";
$app->setCaller('server');
@@ -124,24 +143,6 @@
    // we do not need this variable anymore
    unset($tmp);
}
// Check whether another instance of this script is already running
if (is_file($conf['temppath'] . $conf['fs_div'] . '.ispconfig_lock')) {
    clearstatcache();
    $pid = trim(file_get_contents($conf['temppath'] . $conf['fs_div'] . '.ispconfig_lock'));
    if(preg_match('/^[0-9]+$/', $pid)) {
        if(file_exists('/proc/' . $pid)) {
            $app->log('There is already an instance of server.php running with pid ' . $pid . '.', LOGLEVEL_DEBUG);
            exit;
        }
    }
    $app->log('There is already a lockfile set, but no process running with this pid (' . $pid . '). Continuing.', LOGLEVEL_WARN);
}
// Set Lockfile
@file_put_contents($conf['temppath'] . $conf['fs_div'] . '.ispconfig_lock', getmypid());
$app->log('Set Lock: ' . $conf['temppath'] . $conf['fs_div'] . '.ispconfig_lock', LOGLEVEL_DEBUG);
/** Do we need to start the core-modules */