tbrehm
2009-07-22 8c4aa39481bbfde2b403f4787c85c057e84f2e12
Merged revisions 1216 - 1279 from trunk
191 files added
230 files modified
1 files deleted
12888 ■■■■ changed files
docs/INSTALL_DEBIAN_4.0.txt 16 ●●●● patch | view | raw | blame | history
docs/INSTALL_DEBIAN_5.0.txt 42 ●●●● patch | view | raw | blame | history
docs/INSTALL_UBUNTU_8.04.txt 17 ●●●● patch | view | raw | blame | history
install/dist/conf/centos52.conf.php 8 ●●●●● patch | view | raw | blame | history
install/dist/conf/centos53.conf.php 8 ●●●●● patch | view | raw | blame | history
install/dist/conf/debian40.conf.php 8 ●●●●● patch | view | raw | blame | history
install/dist/conf/fedora9.conf.php 8 ●●●●● patch | view | raw | blame | history
install/dist/conf/gentoo.conf.php 8 ●●●●● patch | view | raw | blame | history
install/dist/conf/opensuse110.conf.php 8 ●●●●● patch | view | raw | blame | history
install/dist/lib/fedora.lib.php 18 ●●●●● patch | view | raw | blame | history
install/dist/lib/opensuse.lib.php 18 ●●●●● patch | view | raw | blame | history
install/install.php 12 ●●●●● patch | view | raw | blame | history
install/lib/installer_base.lib.php 165 ●●●● patch | view | raw | blame | history
install/sql/ispconfig3.sql 50 ●●●●● patch | view | raw | blame | history
install/tpl/apache_ispconfig.conf.master 2 ●●● patch | view | raw | blame | history
install/tpl/config.inc.php.master 2 ●●● patch | view | raw | blame | history
install/tpl/server.ini.master 12 ●●●●● patch | view | raw | blame | history
install/tpl/vlogger-dbi.conf.master 4 ●●●● patch | view | raw | blame | history
install/update.php 11 ●●●●● patch | view | raw | blame | history
interface/lib/app.inc.php 15 ●●●● patch | view | raw | blame | history
interface/lib/classes/custom_datasource.inc.php 50 ●●●●● patch | view | raw | blame | history
interface/lib/classes/tform.inc.php 84 ●●●●● patch | view | raw | blame | history
interface/lib/classes/tform_actions.inc.php 8 ●●●● patch | view | raw | blame | history
interface/lib/classes/validate_client.inc.php 2 ●●● patch | view | raw | blame | history
interface/lib/classes/validate_cron.inc.php 191 ●●●●● patch | view | raw | blame | history
interface/lib/classes/validate_database.inc.php 72 ●●●●● patch | view | raw | blame | history
interface/lib/classes/validate_ftpuser.inc.php 89 ●●●●● patch | view | raw | blame | history
interface/lib/classes/validate_reseller.inc.php 47 ●●●●● patch | view | raw | blame | history
interface/lib/lang/br.lng 25 ●●●●● patch | view | raw | blame | history
interface/web/admin/form/server.tform.php 4 ●●●● patch | view | raw | blame | history
interface/web/admin/form/server_config.tform.php 110 ●●●●● patch | view | raw | blame | history
interface/web/admin/lib/lang/bg_server_config.lng 6 ●●●●● patch | view | raw | blame | history
interface/web/admin/lib/lang/br.lng 35 ●●●●● patch | view | raw | blame | history
interface/web/admin/lib/lang/br_firewall.lng 10 ●●●●● patch | view | raw | blame | history
interface/web/admin/lib/lang/br_firewall_list.lng 8 ●●●●● patch | view | raw | blame | history
interface/web/admin/lib/lang/br_groups.lng 6 ●●●●● patch | view | raw | blame | history
interface/web/admin/lib/lang/br_groups_list.lng 7 ●●●●● patch | view | raw | blame | history
interface/web/admin/lib/lang/br_language_add.lng 9 ●●●●● patch | view | raw | blame | history
interface/web/admin/lib/lang/br_language_complete.lng 8 ●●●●● patch | view | raw | blame | history
interface/web/admin/lib/lang/br_language_edit.lng 9 ●●●●● patch | view | raw | blame | history
interface/web/admin/lib/lang/br_language_export.lng 7 ●●●●● patch | view | raw | blame | history
interface/web/admin/lib/lang/br_language_import.lng 7 ●●●●● patch | view | raw | blame | history
interface/web/admin/lib/lang/br_language_list.lng 8 ●●●●● patch | view | raw | blame | history
interface/web/admin/lib/lang/br_server.lng 12 ●●●●● patch | view | raw | blame | history
interface/web/admin/lib/lang/br_server_config.lng 42 ●●●●● patch | view | raw | blame | history
interface/web/admin/lib/lang/br_server_config_list.lng 5 ●●●●● patch | view | raw | blame | history
interface/web/admin/lib/lang/br_server_ip.lng 7 ●●●●● patch | view | raw | blame | history
interface/web/admin/lib/lang/br_server_ip_list.lng 7 ●●●●● patch | view | raw | blame | history
interface/web/admin/lib/lang/br_server_list.lng 12 ●●●●● patch | view | raw | blame | history
interface/web/admin/lib/lang/br_software_package_list.lng 8 ●●●●● patch | view | raw | blame | history
interface/web/admin/lib/lang/br_software_repo.lng 8 ●●●●● patch | view | raw | blame | history
interface/web/admin/lib/lang/br_software_repo_list.lng 6 ●●●●● patch | view | raw | blame | history
interface/web/admin/lib/lang/br_software_update_list.lng 9 ●●●●● patch | view | raw | blame | history
interface/web/admin/lib/lang/br_system_config.lng 14 ●●●●● patch | view | raw | blame | history
interface/web/admin/lib/lang/br_users.lng 29 ●●●●● patch | view | raw | blame | history
interface/web/admin/lib/lang/br_users_list.lng 8 ●●●●● patch | view | raw | blame | history
interface/web/admin/lib/lang/de_server_config.lng 6 ●●●●● patch | view | raw | blame | history
interface/web/admin/lib/lang/en_firewall.lng 3 ●●●●● patch | view | raw | blame | history
interface/web/admin/lib/lang/en_server_config.lng 7 ●●●●● patch | view | raw | blame | history
interface/web/admin/lib/lang/es_server_config.lng 6 ●●●●● patch | view | raw | blame | history
interface/web/admin/lib/lang/fi_server_config.lng 6 ●●●●● patch | view | raw | blame | history
interface/web/admin/lib/lang/fr_server_config.lng 6 ●●●●● patch | view | raw | blame | history
interface/web/admin/lib/lang/it_server_config.lng 6 ●●●●● patch | view | raw | blame | history
interface/web/admin/lib/lang/nl_server_config.lng 6 ●●●●● patch | view | raw | blame | history
interface/web/admin/lib/lang/ru_server_config.lng 6 ●●●●● patch | view | raw | blame | history
interface/web/admin/lib/lang/se_server_config.lng 6 ●●●●● patch | view | raw | blame | history
interface/web/admin/software_package_list.php 51 ●●●●● patch | view | raw | blame | history
interface/web/admin/software_update_list.php 4 ●●●● patch | view | raw | blame | history
interface/web/admin/templates/language_export.htm 52 ●●●● patch | view | raw | blame | history
interface/web/admin/templates/language_import.htm 63 ●●●●● patch | view | raw | blame | history
interface/web/admin/templates/server_config_cron_edit.htm 30 ●●●●● patch | view | raw | blame | history
interface/web/admin/templates/server_config_jailkit_edit.htm 4 ●●●● patch | view | raw | blame | history
interface/web/admin/templates/server_config_list.htm 90 ●●●●● patch | view | raw | blame | history
interface/web/admin/templates/server_config_vlogger_edit.htm 22 ●●●●● patch | view | raw | blame | history
interface/web/admin/templates/server_config_web_edit.htm 16 ●●●●● patch | view | raw | blame | history
interface/web/admin/templates/server_list.htm 126 ●●●● patch | view | raw | blame | history
interface/web/admin/templates/users_list.htm 120 ●●●● patch | view | raw | blame | history
interface/web/client/client_list.php 1 ●●●● patch | view | raw | blame | history
interface/web/client/form/client.tform.php 1426 ●●●● patch | view | raw | blame | history
interface/web/client/form/client_template.tform.php 36 ●●●●● patch | view | raw | blame | history
interface/web/client/form/reseller.tform.php 733 ●●●●● patch | view | raw | blame | history
interface/web/client/lib/lang/bg_client.lng 6 ●●●●● patch | view | raw | blame | history
interface/web/client/lib/lang/bg_client_template.lng 5 ●●●●● patch | view | raw | blame | history
interface/web/client/lib/lang/br.lng 10 ●●●●● patch | view | raw | blame | history
interface/web/client/lib/lang/br_client.lng 85 ●●●●● patch | view | raw | blame | history
interface/web/client/lib/lang/br_client_template.lng 48 ●●●●● patch | view | raw | blame | history
interface/web/client/lib/lang/br_client_template_list.lng 6 ●●●●● patch | view | raw | blame | history
interface/web/client/lib/lang/br_clients_list.lng 10 ●●●●● patch | view | raw | blame | history
interface/web/client/lib/lang/de_client.lng 6 ●●●●● patch | view | raw | blame | history
interface/web/client/lib/lang/de_client_template.lng 5 ●●●●● patch | view | raw | blame | history
interface/web/client/lib/lang/en.lng 3 ●●●●● patch | view | raw | blame | history
interface/web/client/lib/lang/en_client.lng 5 ●●●●● patch | view | raw | blame | history
interface/web/client/lib/lang/en_client_template.lng 5 ●●●●● patch | view | raw | blame | history
interface/web/client/lib/lang/en_reseller.lng 93 ●●●●● patch | view | raw | blame | history
interface/web/client/lib/lang/en_resellers_list.lng 9 ●●●●● patch | view | raw | blame | history
interface/web/client/lib/lang/es_client.lng 6 ●●●●● patch | view | raw | blame | history
interface/web/client/lib/lang/es_client_template.lng 5 ●●●●● patch | view | raw | blame | history
interface/web/client/lib/lang/fi_client.lng 6 ●●●●● patch | view | raw | blame | history
interface/web/client/lib/lang/fi_client_template.lng 5 ●●●●● patch | view | raw | blame | history
interface/web/client/lib/lang/fr_client.lng 6 ●●●●● patch | view | raw | blame | history
interface/web/client/lib/lang/fr_client_template.lng 5 ●●●●● patch | view | raw | blame | history
interface/web/client/lib/lang/it_client.lng 6 ●●●●● patch | view | raw | blame | history
interface/web/client/lib/lang/it_client_template.lng 5 ●●●●● patch | view | raw | blame | history
interface/web/client/lib/lang/nl_client.lng 6 ●●●●● patch | view | raw | blame | history
interface/web/client/lib/lang/nl_client_template.lng 5 ●●●●● patch | view | raw | blame | history
interface/web/client/lib/lang/ru_client.lng 6 ●●●●● patch | view | raw | blame | history
interface/web/client/lib/lang/ru_client_template.lng 5 ●●●●● patch | view | raw | blame | history
interface/web/client/lib/lang/se_client.lng 6 ●●●●● patch | view | raw | blame | history
interface/web/client/lib/lang/se_client_template.lng 5 ●●●●● patch | view | raw | blame | history
interface/web/client/lib/module.conf.php 32 ●●●●● patch | view | raw | blame | history
interface/web/client/list/reseller.list.php 87 ●●●●● patch | view | raw | blame | history
interface/web/client/reseller_del.php 81 ●●●●● patch | view | raw | blame | history
interface/web/client/reseller_edit.php 214 ●●●●● patch | view | raw | blame | history
interface/web/client/reseller_list.php 55 ●●●●● patch | view | raw | blame | history
interface/web/client/templates/client_edit_limits.htm 18 ●●●● patch | view | raw | blame | history
interface/web/client/templates/client_template_edit_limits.htm 214 ●●●● patch | view | raw | blame | history
interface/web/client/templates/reseller_edit_address.htm 101 ●●●●● patch | view | raw | blame | history
interface/web/client/templates/reseller_edit_limits.htm 171 ●●●●● patch | view | raw | blame | history
interface/web/client/templates/resellers_list.htm 62 ●●●●● patch | view | raw | blame | history
interface/web/designer/lib/lang/br.lng 3 ●●●●● patch | view | raw | blame | history
interface/web/designer/lib/lang/br_form_edit.lng 26 ●●●●● patch | view | raw | blame | history
interface/web/designer/lib/lang/br_form_list.lng 7 ●●●●● patch | view | raw | blame | history
interface/web/designer/lib/lang/br_form_show.lng 18 ●●●●● patch | view | raw | blame | history
interface/web/designer/lib/lang/br_module_edit.lng 23 ●●●●● patch | view | raw | blame | history
interface/web/designer/lib/lang/br_module_list.lng 5 ●●●●● patch | view | raw | blame | history
interface/web/designer/lib/lang/br_module_nav_edit.lng 6 ●●●●● patch | view | raw | blame | history
interface/web/designer/lib/lang/br_module_nav_item_edit.lng 8 ●●●●● patch | view | raw | blame | history
interface/web/designer/lib/lang/br_module_show.lng 17 ●●●●● patch | view | raw | blame | history
interface/web/dns/dns_a_edit.php 5 ●●●●● patch | view | raw | blame | history
interface/web/dns/dns_soa_edit.php 42 ●●●●● patch | view | raw | blame | history
interface/web/dns/dns_template_edit.php 116 ●●●● patch | view | raw | blame | history
interface/web/dns/dns_wizard.php 35 ●●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/bg_dns_a.lng 1 ●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/bg_dns_aaaa.lng 15 ●●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/bg_dns_wizard.lng 12 ●●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/br.lng 19 ●●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/br_dns_a.lng 15 ●●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/br_dns_a_list.lng 14 ●●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/br_dns_aaaa.lng 15 ●●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/br_dns_alias.lng 15 ●●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/br_dns_cname.lng 15 ●●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/br_dns_hinfo.lng 15 ●●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/br_dns_mx.lng 16 ●●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/br_dns_ns.lng 15 ●●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/br_dns_ptr.lng 15 ●●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/br_dns_rp.lng 15 ●●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/br_dns_soa.lng 24 ●●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/br_dns_soa_list.lng 9 ●●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/br_dns_srv.lng 15 ●●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/br_dns_template.lng 6 ●●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/br_dns_template_list.lng 6 ●●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/br_dns_txt.lng 15 ●●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/br_dns_wizard.lng 16 ●●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/de_dns_a.lng 1 ●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/de_dns_aaaa.lng 15 ●●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/de_dns_wizard.lng 12 ●●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/en_dns_a.lng 1 ●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/es_dns_a.lng 1 ●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/es_dns_aaaa.lng 15 ●●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/es_dns_wizard.lng 12 ●●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/fi_dns_a.lng 1 ●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/fi_dns_aaaa.lng 15 ●●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/fi_dns_wizard.lng 12 ●●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/fr_dns_a.lng 1 ●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/fr_dns_aaaa.lng 15 ●●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/fr_dns_wizard.lng 12 ●●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/it_dns_a.lng 1 ●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/it_dns_aaaa.lng 15 ●●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/it_dns_wizard.lng 12 ●●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/nl_dns_a.lng 1 ●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/nl_dns_aaaa.lng 15 ●●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/nl_dns_wizard.lng 12 ●●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/ru_dns_a.lng 1 ●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/ru_dns_aaaa.lng 15 ●●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/ru_dns_wizard.lng 12 ●●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/se_dns_a.lng 1 ●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/se_dns_aaaa.lng 15 ●●●●● patch | view | raw | blame | history
interface/web/dns/lib/lang/se_dns_wizard.lng 12 ●●●●● patch | view | raw | blame | history
interface/web/dns/lib/module.conf.php 39 ●●●● patch | view | raw | blame | history
interface/web/dns/list/dns_soa.list.php 7 ●●●●● patch | view | raw | blame | history
interface/web/dns/templates/dns_a_edit.htm 78 ●●●● patch | view | raw | blame | history
interface/web/dns/templates/dns_aaaa_edit.htm 2 ●●● patch | view | raw | blame | history
interface/web/dns/templates/dns_alias_edit.htm 76 ●●●● patch | view | raw | blame | history
interface/web/dns/templates/dns_cname_edit.htm 76 ●●●● patch | view | raw | blame | history
interface/web/dns/templates/dns_hinfo_edit.htm 76 ●●●● patch | view | raw | blame | history
interface/web/dns/templates/dns_mx_edit.htm 84 ●●●● patch | view | raw | blame | history
interface/web/dns/templates/dns_ns_edit.htm 76 ●●●● patch | view | raw | blame | history
interface/web/dns/templates/dns_ptr_edit.htm 76 ●●●● patch | view | raw | blame | history
interface/web/dns/templates/dns_rp_edit.htm 76 ●●●● patch | view | raw | blame | history
interface/web/dns/templates/dns_srv_edit.htm 76 ●●●● patch | view | raw | blame | history
interface/web/dns/templates/dns_txt_edit.htm 76 ●●●● patch | view | raw | blame | history
interface/web/dns/templates/dns_wizard.htm 8 ●●●●● patch | view | raw | blame | history
interface/web/help/lib/lang/br.lng 8 ●●●●● patch | view | raw | blame | history
interface/web/help/lib/lang/br_support_message.lng 8 ●●●●● patch | view | raw | blame | history
interface/web/help/lib/lang/br_support_message_list.lng 7 ●●●●● patch | view | raw | blame | history
interface/web/login/lib/lang/br.lng 15 ●●●●● patch | view | raw | blame | history
interface/web/mail/lib/lang/bg_mail_alias.lng 1 ●●●● patch | view | raw | blame | history
interface/web/mail/lib/lang/bg_mail_forward.lng 1 ●●●● patch | view | raw | blame | history
interface/web/mail/lib/lang/bg_mail_user.lng 1 ●●●● patch | view | raw | blame | history
interface/web/mail/lib/lang/bg_mail_user_filter_list.lng 1 ●●●● patch | view | raw | blame | history
interface/web/mail/lib/lang/bg_spamfilter_blacklist.lng 1 ●●●● patch | view | raw | blame | history
interface/web/mail/lib/lang/bg_spamfilter_whitelist.lng 1 ●●●● patch | view | raw | blame | history
interface/web/mail/lib/lang/br.lng 49 ●●●●● patch | view | raw | blame | history
interface/web/mail/lib/lang/br_mail_alias.lng 10 ●●●●● patch | view | raw | blame | history
interface/web/mail/lib/lang/br_mail_alias_list.lng 8 ●●●●● patch | view | raw | blame | history
interface/web/mail/lib/lang/br_mail_blacklist.lng 9 ●●●●● patch | view | raw | blame | history
interface/web/mail/lib/lang/br_mail_blacklist_list.lng 10 ●●●●● patch | view | raw | blame | history
interface/web/mail/lib/lang/br_mail_content_filter.lng 9 ●●●●● patch | view | raw | blame | history
interface/web/mail/lib/lang/br_mail_content_filter_list.lng 8 ●●●●● patch | view | raw | blame | history
interface/web/mail/lib/lang/br_mail_domain.lng 14 ●●●●● patch | view | raw | blame | history
interface/web/mail/lib/lang/br_mail_domain_catchall.lng 9 ●●●●● patch | view | raw | blame | history
interface/web/mail/lib/lang/br_mail_domain_catchall_list.lng 9 ●●●●● patch | view | raw | blame | history
interface/web/mail/lib/lang/br_mail_domain_list.lng 7 ●●●●● patch | view | raw | blame | history
interface/web/mail/lib/lang/br_mail_forward.lng 6 ●●●●● patch | view | raw | blame | history
interface/web/mail/lib/lang/br_mail_forward_list.lng 8 ●●●●● patch | view | raw | blame | history
interface/web/mail/lib/lang/br_mail_get.lng 15 ●●●●● patch | view | raw | blame | history
interface/web/mail/lib/lang/br_mail_get_list.lng 9 ●●●●● patch | view | raw | blame | history
interface/web/mail/lib/lang/br_mail_spamfilter.lng 17 ●●●●● patch | view | raw | blame | history
interface/web/mail/lib/lang/br_mail_spamfilter_list.lng 9 ●●●●● patch | view | raw | blame | history
interface/web/mail/lib/lang/br_mail_transport.lng 10 ●●●●● patch | view | raw | blame | history
interface/web/mail/lib/lang/br_mail_transport_list.lng 9 ●●●●● patch | view | raw | blame | history
interface/web/mail/lib/lang/br_mail_user.lng 31 ●●●●● patch | view | raw | blame | history
interface/web/mail/lib/lang/br_mail_user_filter.lng 9 ●●●●● patch | view | raw | blame | history
interface/web/mail/lib/lang/br_mail_user_filter_list.lng 6 ●●●●● patch | view | raw | blame | history
interface/web/mail/lib/lang/br_mail_user_list.lng 6 ●●●●● patch | view | raw | blame | history
interface/web/mail/lib/lang/br_mail_user_stats_list.lng 8 ●●●●● patch | view | raw | blame | history
interface/web/mail/lib/lang/br_mail_whitelist.lng 9 ●●●●● patch | view | raw | blame | history
interface/web/mail/lib/lang/br_mail_whitelist_list.lng 10 ●●●●● patch | view | raw | blame | history
interface/web/mail/lib/lang/br_spamfilter_blacklist.lng 8 ●●●●● patch | view | raw | blame | history
interface/web/mail/lib/lang/br_spamfilter_blacklist_list.lng 9 ●●●●● patch | view | raw | blame | history
interface/web/mail/lib/lang/br_spamfilter_config.lng 21 ●●●●● patch | view | raw | blame | history
interface/web/mail/lib/lang/br_spamfilter_config_list.lng 5 ●●●●● patch | view | raw | blame | history
interface/web/mail/lib/lang/br_spamfilter_policy.lng 38 ●●●●● patch | view | raw | blame | history
interface/web/mail/lib/lang/br_spamfilter_policy_list.lng 9 ●●●●● patch | view | raw | blame | history
interface/web/mail/lib/lang/br_spamfilter_users.lng 8 ●●●●● patch | view | raw | blame | history
interface/web/mail/lib/lang/br_spamfilter_users_list.lng 10 ●●●●● patch | view | raw | blame | history
interface/web/mail/lib/lang/br_spamfilter_whitelist.lng 8 ●●●●● patch | view | raw | blame | history
interface/web/mail/lib/lang/br_spamfilter_whitelist_list.lng 9 ●●●●● patch | view | raw | blame | history
interface/web/mail/lib/lang/de_mail_alias.lng 1 ●●●● patch | view | raw | blame | history
interface/web/mail/lib/lang/de_mail_forward.lng 1 ●●●● patch | view | raw | blame | history
interface/web/mail/lib/lang/de_mail_user.lng 1 ●●●● patch | view | raw | blame | history
interface/web/mail/lib/lang/de_mail_user_filter_list.lng 1 ●●●● patch | view | raw | blame | history
interface/web/mail/lib/lang/de_spamfilter_blacklist.lng 1 ●●●● patch | view | raw | blame | history
interface/web/mail/lib/lang/de_spamfilter_whitelist.lng 1 ●●●● patch | view | raw | blame | history
interface/web/mail/lib/lang/en_mail_alias.lng 1 ●●●● patch | view | raw | blame | history
interface/web/mail/lib/lang/en_mail_forward.lng 1 ●●●● patch | view | raw | blame | history
interface/web/mail/lib/lang/en_mail_user.lng 1 ●●●● patch | view | raw | blame | history
interface/web/mail/lib/lang/en_mail_user_filter_list.lng 1 ●●●● patch | view | raw | blame | history
interface/web/mail/lib/lang/es_mail_alias.lng 1 ●●●● patch | view | raw | blame | history
interface/web/mail/lib/lang/es_mail_forward.lng 1 ●●●● patch | view | raw | blame | history
interface/web/mail/lib/lang/es_mail_user.lng 1 ●●●● patch | view | raw | blame | history
interface/web/mail/lib/lang/es_mail_user_filter_list.lng 1 ●●●● patch | view | raw | blame | history
interface/web/mail/lib/lang/es_spamfilter_blacklist.lng 1 ●●●● patch | view | raw | blame | history
interface/web/mail/lib/lang/es_spamfilter_whitelist.lng 1 ●●●● patch | view | raw | blame | history
interface/web/mail/lib/lang/fi_mail_alias.lng 1 ●●●● patch | view | raw | blame | history
interface/web/mail/lib/lang/fi_mail_forward.lng 1 ●●●● patch | view | raw | blame | history
interface/web/mail/lib/lang/fi_mail_user.lng 1 ●●●● patch | view | raw | blame | history
interface/web/mail/lib/lang/fi_mail_user_filter_list.lng 1 ●●●● patch | view | raw | blame | history
interface/web/mail/lib/lang/fi_spamfilter_blacklist.lng 1 ●●●● patch | view | raw | blame | history
interface/web/mail/lib/lang/fi_spamfilter_whitelist.lng 1 ●●●● patch | view | raw | blame | history
interface/web/mail/lib/lang/fr_mail_alias.lng 1 ●●●● patch | view | raw | blame | history
interface/web/mail/lib/lang/fr_mail_forward.lng 1 ●●●● patch | view | raw | blame | history
interface/web/mail/lib/lang/fr_mail_user.lng 1 ●●●● patch | view | raw | blame | history
interface/web/mail/lib/lang/fr_mail_user_filter_list.lng 1 ●●●● patch | view | raw | blame | history
interface/web/mail/lib/lang/fr_spamfilter_blacklist.lng 1 ●●●● patch | view | raw | blame | history
interface/web/mail/lib/lang/fr_spamfilter_whitelist.lng 1 ●●●● patch | view | raw | blame | history
interface/web/mail/lib/lang/it_mail_alias.lng 1 ●●●● patch | view | raw | blame | history
interface/web/mail/lib/lang/it_mail_forward.lng 1 ●●●● patch | view | raw | blame | history
interface/web/mail/lib/lang/it_mail_user.lng 1 ●●●● patch | view | raw | blame | history
interface/web/mail/lib/lang/it_mail_user_filter_list.lng 1 ●●●● patch | view | raw | blame | history
interface/web/mail/lib/lang/it_spamfilter_blacklist.lng 1 ●●●● patch | view | raw | blame | history
interface/web/mail/lib/lang/it_spamfilter_whitelist.lng 1 ●●●● patch | view | raw | blame | history
interface/web/mail/lib/lang/nl_mail_alias.lng 1 ●●●● patch | view | raw | blame | history
interface/web/mail/lib/lang/nl_mail_forward.lng 1 ●●●● patch | view | raw | blame | history
interface/web/mail/lib/lang/nl_mail_user.lng 1 ●●●● patch | view | raw | blame | history
interface/web/mail/lib/lang/nl_mail_user_filter_list.lng 1 ●●●● patch | view | raw | blame | history
interface/web/mail/lib/lang/nl_spamfilter_blacklist.lng 1 ●●●● patch | view | raw | blame | history
interface/web/mail/lib/lang/nl_spamfilter_whitelist.lng 1 ●●●● patch | view | raw | blame | history
interface/web/mail/lib/lang/ru_mail_alias.lng 1 ●●●● patch | view | raw | blame | history
interface/web/mail/lib/lang/ru_mail_forward.lng 1 ●●●● patch | view | raw | blame | history
interface/web/mail/lib/lang/ru_mail_user.lng 1 ●●●● patch | view | raw | blame | history
interface/web/mail/lib/lang/ru_mail_user_filter_list.lng 1 ●●●● patch | view | raw | blame | history
interface/web/mail/lib/lang/ru_spamfilter_blacklist.lng 1 ●●●● patch | view | raw | blame | history
interface/web/mail/lib/lang/ru_spamfilter_whitelist.lng 1 ●●●● patch | view | raw | blame | history
interface/web/mail/lib/lang/se_mail_alias.lng 1 ●●●● patch | view | raw | blame | history
interface/web/mail/lib/lang/se_mail_forward.lng 1 ●●●● patch | view | raw | blame | history
interface/web/mail/lib/lang/se_mail_user.lng 1 ●●●● patch | view | raw | blame | history
interface/web/mail/lib/lang/se_mail_user_filter_list.lng 1 ●●●● patch | view | raw | blame | history
interface/web/mail/lib/lang/se_spamfilter_blacklist.lng 1 ●●●● patch | view | raw | blame | history
interface/web/mail/lib/lang/se_spamfilter_whitelist.lng 1 ●●●● patch | view | raw | blame | history
interface/web/mail/mail_alias_edit.php 25 ●●●● patch | view | raw | blame | history
interface/web/mail/mail_blacklist_edit.php 16 ●●●●● patch | view | raw | blame | history
interface/web/mail/mail_domain_catchall_edit.php 16 ●●●●● patch | view | raw | blame | history
interface/web/mail/mail_domain_edit.php 42 ●●●●● patch | view | raw | blame | history
interface/web/mail/mail_forward_edit.php 25 ●●●● patch | view | raw | blame | history
interface/web/mail/mail_get_edit.php 16 ●●●●● patch | view | raw | blame | history
interface/web/mail/mail_transport_edit.php 16 ●●●●● patch | view | raw | blame | history
interface/web/mail/mail_user_edit.php 57 ●●●● patch | view | raw | blame | history
interface/web/mail/mail_user_filter_edit.php 46 ●●●●● patch | view | raw | blame | history
interface/web/mail/mail_whitelist_edit.php 16 ●●●●● patch | view | raw | blame | history
interface/web/mail/spamfilter_blacklist_edit.php 16 ●●●●● patch | view | raw | blame | history
interface/web/mail/spamfilter_policy_edit.php 16 ●●●●● patch | view | raw | blame | history
interface/web/mail/spamfilter_users_edit.php 16 ●●●●● patch | view | raw | blame | history
interface/web/mail/spamfilter_whitelist_edit.php 16 ●●●●● patch | view | raw | blame | history
interface/web/monitor/lib/lang/br.lng 138 ●●●●● patch | view | raw | blame | history
interface/web/monitor/lib/lang/br_syslog_list.lng 8 ●●●●● patch | view | raw | blame | history
interface/web/sites/cron_del.php 64 ●●●●● patch | view | raw | blame | history
interface/web/sites/cron_edit.php 220 ●●●●● patch | view | raw | blame | history
interface/web/sites/cron_list.php 23 ●●●●● patch | view | raw | blame | history
interface/web/sites/database_edit.php 16 ●●●●● patch | view | raw | blame | history
interface/web/sites/form/cron.tform.php 189 ●●●●● patch | view | raw | blame | history
interface/web/sites/form/database.tform.php 12 ●●●●● patch | view | raw | blame | history
interface/web/sites/form/ftp_user.tform.php 208 ●●●●● patch | view | raw | blame | history
interface/web/sites/form/shell_user.tform.php 8 ●●●●● patch | view | raw | blame | history
interface/web/sites/ftp_user_edit.php 35 ●●●●● patch | view | raw | blame | history
interface/web/sites/lib/lang/bg_cron.lng 21 ●●●●● patch | view | raw | blame | history
interface/web/sites/lib/lang/bg_cron_list.lng 12 ●●●●● patch | view | raw | blame | history
interface/web/sites/lib/lang/bg_database.lng 2 ●●●●● patch | view | raw | blame | history
interface/web/sites/lib/lang/bg_ftp_user.lng 1 ●●●● patch | view | raw | blame | history
interface/web/sites/lib/lang/bg_web_sites_stats_list.lng 8 ●●●●● patch | view | raw | blame | history
interface/web/sites/lib/lang/br.lng 17 ●●●●● patch | view | raw | blame | history
interface/web/sites/lib/lang/br_cron.lng 21 ●●●●● patch | view | raw | blame | history
interface/web/sites/lib/lang/br_cron_list.lng 12 ●●●●● patch | view | raw | blame | history
interface/web/sites/lib/lang/br_database.lng 22 ●●●●● patch | view | raw | blame | history
interface/web/sites/lib/lang/br_database_list.lng 8 ●●●●● patch | view | raw | blame | history
interface/web/sites/lib/lang/br_ftp_user.lng 27 ●●●●● patch | view | raw | blame | history
interface/web/sites/lib/lang/br_ftp_user_list.lng 8 ●●●●● patch | view | raw | blame | history
interface/web/sites/lib/lang/br_shell_user.lng 23 ●●●●● patch | view | raw | blame | history
interface/web/sites/lib/lang/br_shell_user_list.lng 8 ●●●●● patch | view | raw | blame | history
interface/web/sites/lib/lang/br_web_aliasdomain_list.lng 11 ●●●●● patch | view | raw | blame | history
interface/web/sites/lib/lang/br_web_domain.lng 50 ●●●●● patch | view | raw | blame | history
interface/web/sites/lib/lang/br_web_domain_list.lng 8 ●●●●● patch | view | raw | blame | history
interface/web/sites/lib/lang/br_web_sites_stats_list.lng 8 ●●●●● patch | view | raw | blame | history
interface/web/sites/lib/lang/br_web_subdomain.lng 39 ●●●●● patch | view | raw | blame | history
interface/web/sites/lib/lang/br_web_subdomain_list.lng 8 ●●●●● patch | view | raw | blame | history
interface/web/sites/lib/lang/de_cron.lng 21 ●●●●● patch | view | raw | blame | history
interface/web/sites/lib/lang/de_cron_list.lng 12 ●●●●● patch | view | raw | blame | history
interface/web/sites/lib/lang/de_database.lng 2 ●●●●● patch | view | raw | blame | history
interface/web/sites/lib/lang/de_ftp_user.lng 1 ●●●● patch | view | raw | blame | history
interface/web/sites/lib/lang/de_web_sites_stats_list.lng 8 ●●●●● patch | view | raw | blame | history
interface/web/sites/lib/lang/en_cron.lng 21 ●●●●● patch | view | raw | blame | history
interface/web/sites/lib/lang/en_cron_list.lng 12 ●●●●● patch | view | raw | blame | history
interface/web/sites/lib/lang/en_database.lng 2 ●●●●● patch | view | raw | blame | history
interface/web/sites/lib/lang/en_ftp_user.lng 2 ●●●●● patch | view | raw | blame | history
interface/web/sites/lib/lang/en_shell_user.lng 1 ●●●● patch | view | raw | blame | history
interface/web/sites/lib/lang/en_web_sites_stats_list.lng 8 ●●●●● patch | view | raw | blame | history
interface/web/sites/lib/lang/es_cron.lng 21 ●●●●● patch | view | raw | blame | history
interface/web/sites/lib/lang/es_cron_list.lng 12 ●●●●● patch | view | raw | blame | history
interface/web/sites/lib/lang/es_database.lng 2 ●●●●● patch | view | raw | blame | history
interface/web/sites/lib/lang/es_ftp_user.lng 1 ●●●● patch | view | raw | blame | history
interface/web/sites/lib/lang/es_web_sites_stats_list.lng 8 ●●●●● patch | view | raw | blame | history
interface/web/sites/lib/lang/fi_cron.lng 21 ●●●●● patch | view | raw | blame | history
interface/web/sites/lib/lang/fi_cron_list.lng 12 ●●●●● patch | view | raw | blame | history
interface/web/sites/lib/lang/fi_database.lng 2 ●●●●● patch | view | raw | blame | history
interface/web/sites/lib/lang/fi_ftp_user.lng 1 ●●●● patch | view | raw | blame | history
interface/web/sites/lib/lang/fi_web_sites_stats_list.lng 8 ●●●●● patch | view | raw | blame | history
interface/web/sites/lib/lang/fr_cron.lng 21 ●●●●● patch | view | raw | blame | history
interface/web/sites/lib/lang/fr_cron_list.lng 12 ●●●●● patch | view | raw | blame | history
interface/web/sites/lib/lang/fr_database.lng 2 ●●●●● patch | view | raw | blame | history
interface/web/sites/lib/lang/fr_ftp_user.lng 1 ●●●● patch | view | raw | blame | history
interface/web/sites/lib/lang/fr_web_sites_stats_list.lng 8 ●●●●● patch | view | raw | blame | history
interface/web/sites/lib/lang/it_cron.lng 21 ●●●●● patch | view | raw | blame | history
interface/web/sites/lib/lang/it_cron_list.lng 12 ●●●●● patch | view | raw | blame | history
interface/web/sites/lib/lang/it_database.lng 2 ●●●●● patch | view | raw | blame | history
interface/web/sites/lib/lang/it_ftp_user.lng 1 ●●●● patch | view | raw | blame | history
interface/web/sites/lib/lang/it_web_sites_stats_list.lng 8 ●●●●● patch | view | raw | blame | history
interface/web/sites/lib/lang/nl_cron.lng 21 ●●●●● patch | view | raw | blame | history
interface/web/sites/lib/lang/nl_cron_list.lng 12 ●●●●● patch | view | raw | blame | history
interface/web/sites/lib/lang/nl_database.lng 2 ●●●●● patch | view | raw | blame | history
interface/web/sites/lib/lang/nl_ftp_user.lng 1 ●●●● patch | view | raw | blame | history
interface/web/sites/lib/lang/nl_web_sites_stats_list.lng 8 ●●●●● patch | view | raw | blame | history
interface/web/sites/lib/lang/ru_cron.lng 21 ●●●●● patch | view | raw | blame | history
interface/web/sites/lib/lang/ru_cron_list.lng 12 ●●●●● patch | view | raw | blame | history
interface/web/sites/lib/lang/ru_database.lng 2 ●●●●● patch | view | raw | blame | history
interface/web/sites/lib/lang/ru_ftp_user.lng 1 ●●●● patch | view | raw | blame | history
interface/web/sites/lib/lang/ru_web_sites_stats_list.lng 8 ●●●●● patch | view | raw | blame | history
interface/web/sites/lib/lang/se_cron.lng 21 ●●●●● patch | view | raw | blame | history
interface/web/sites/lib/lang/se_cron_list.lng 12 ●●●●● patch | view | raw | blame | history
interface/web/sites/lib/lang/se_database.lng 2 ●●●●● patch | view | raw | blame | history
interface/web/sites/lib/lang/se_ftp_user.lng 1 ●●●● patch | view | raw | blame | history
interface/web/sites/lib/lang/se_web_sites_stats_list.lng 8 ●●●●● patch | view | raw | blame | history
interface/web/sites/lib/module.conf.php 36 ●●●●● patch | view | raw | blame | history
interface/web/sites/list/cron.list.php 152 ●●●●● patch | view | raw | blame | history
interface/web/sites/list/web_sites_stats.list.php 60 ●●●●● patch | view | raw | blame | history
interface/web/sites/shell_user_edit.php 21 ●●●●● patch | view | raw | blame | history
interface/web/sites/templates/cron_edit.htm 68 ●●●●● patch | view | raw | blame | history
interface/web/sites/templates/cron_list.htm 71 ●●●●● patch | view | raw | blame | history
interface/web/sites/templates/database_edit.htm 14 ●●●●● patch | view | raw | blame | history
interface/web/sites/templates/ftp_user_advanced_client.htm 22 ●●●●● patch | view | raw | blame | history
interface/web/sites/templates/web_sites_stats_list.htm 52 ●●●●● patch | view | raw | blame | history
interface/web/sites/web_aliasdomain_edit.php 16 ●●●●● patch | view | raw | blame | history
interface/web/sites/web_domain_del.php 6 ●●●●● patch | view | raw | blame | history
interface/web/sites/web_domain_edit.php 38 ●●●●● patch | view | raw | blame | history
interface/web/sites/web_sites_stats.php 64 ●●●●● patch | view | raw | blame | history
interface/web/sites/web_subdomain_edit.php 16 ●●●●● patch | view | raw | blame | history
interface/web/strengthmeter/lib/lang/br_strengthmeter.lng 9 ●●●●● patch | view | raw | blame | history
interface/web/tools/lib/lang/br.lng 7 ●●●●● patch | view | raw | blame | history
interface/web/tools/lib/lang/br_usersettings.lng 9 ●●●●● patch | view | raw | blame | history
server/conf/apache_ispconfig.conf.master 2 ●●● patch | view | raw | blame | history
server/conf/php-fcgi-starter.master 6 ●●●● patch | view | raw | blame | history
server/conf/vhost.conf.master 591 ●●●● patch | view | raw | blame | history
server/cron_daily.php 4 ●●●● patch | view | raw | blame | history
server/mods-available/cron_module.inc.php 97 ●●●●● patch | view | raw | blame | history
server/mods-available/monitor_core_module.inc.php 2 ●●● patch | view | raw | blame | history
server/mods-available/web_module.inc.php 3 ●●●● patch | view | raw | blame | history
server/plugins-available/apache2_plugin.inc.php 90 ●●●● patch | view | raw | blame | history
server/plugins-available/cron_jailkit_plugin.inc.php 272 ●●●●● patch | view | raw | blame | history
server/plugins-available/cron_plugin.inc.php 239 ●●●●● patch | view | raw | blame | history
server/plugins-available/firewall_plugin.inc.php 18 ●●●● patch | view | raw | blame | history
server/plugins-available/ftpuser_base_plugin.inc.php 112 ●●●●● patch | view | raw | blame | history
server/plugins-available/mail_plugin.inc.php 49 ●●●●● patch | view | raw | blame | history
server/plugins-available/mysql_clientdb_plugin.inc.php 79 ●●●● patch | view | raw | blame | history
server/plugins-available/pma_symlink_plugin.inc.php 121 ●●●●● patch | view | raw | blame | history
server/plugins-available/software_update_plugin.inc.php 31 ●●●● patch | view | raw | blame | history
server/plugins-available/webmail_symlink_plugin.inc.php 121 ●●●●● patch | view | raw | blame | history
server/scripts/getmail.sh 2 ●●●●● patch | view | raw | blame | history
server/scripts/ispconfig_update.php 2 ●●●●● patch | view | raw | blame | history
server/scripts/run-getmail.sh 6 ●●●● patch | view | raw | blame | history
server/scripts/update_from_svn.sh 4 ●●● patch | view | raw | blame | history
server/scripts/update_from_tgz.sh 17 ●●●● patch | view | raw | blame | history
server/scripts/vlogger 564 ●●●●● patch | view | raw | blame | history
server/server.php 7 ●●●● patch | view | raw | blame | history
docs/INSTALL_DEBIAN_4.0.txt
@@ -124,15 +124,15 @@
7) Install Jailkit (optional, only needed if you want to use chrroting for SSH users)
apt-get install build-essential autoconf automake1.9 libtool flex bison
apt-get install build-essential autoconf automake1.9 libtool flex bison debhelper
cd /tmp
wget http://olivier.sessink.nl/jailkit/jailkit-2.5.tar.gz
tar xvfz jailkit-2.5.tar.gz
cd jailkit-2.5
./configure
make
make install
rm -rf jailkit-2.5*
wget http://olivier.sessink.nl/jailkit/jailkit-2.7.tar.gz
tar xvfz jailkit-2.7.tar.gz
cd jailkit-2.7
./debian/rules binary
cd ..
dpkg -i jailkit_2.7-1_i386.deb
rm -rf jailkit-2.7*
8) Install fail2ban (optional but recomended, because the monitor tries to show the log)
More info at: http://www.howtoforge.com/fail2ban_debian_etch
docs/INSTALL_DEBIAN_5.0.txt
@@ -82,33 +82,6 @@
a2enmod suexec rewrite ssl actions include
# Secure phpMyAdmin by deleting setuppassword-file
# and removing/commenting Setup Authorization from apache.conf
rm /etc/phpmyadmin/htpasswd.setup
vi /etc/phpmyadmin/apache.conf
# delete/comment following lines (between the ----- lines):
------------------------------------------------------
        # Authorize for setup
       <Files setup.php>
           # For Apache 1.3 and 2.0
           <IfModule mod_auth.c>
               AuthType Basic
               AuthName "phpMyAdmin Setup"
               AuthUserFile /etc/phpmyadmin/htpasswd.setup
           </IfModule>
           # For Apache 2.2
           <IfModule mod_authn_file.c>
               AuthType Basic
               AuthName "phpMyAdmin Setup"
               AuthUserFile /etc/phpmyadmin/htpasswd.setup
           </IfModule>
           Require valid-user
       </Files>
------------------------------------------------------
# restart apache before continuing
/etc/init.d/apache2 restart
@@ -263,16 +236,15 @@
7) Install Jailkit (optional, only needed if you want to use chrroting for SSH users)
apt-get install build-essential autoconf automake1.9 libtool flex bison
apt-get install build-essential autoconf automake1.9 libtool flex bison debhelper
cd /tmp
wget http://olivier.sessink.nl/jailkit/jailkit-2.5.tar.gz
tar xvfz jailkit-2.5.tar.gz
cd jailkit-2.5
./configure
make
make install
wget http://olivier.sessink.nl/jailkit/jailkit-2.7.tar.gz
tar xvfz jailkit-2.7.tar.gz
cd jailkit-2.7
./debian/rules binary
cd ..
rm -rf jailkit-2.5*
dpkg -i jailkit_2.7-1_i386.deb
rm -rf jailkit-2.7*
8) Install fail2ban (optional but recomended, because the monitor tries to show the log)
More info at: http://www.howtoforge.com/fail2ban_debian_etch
docs/INSTALL_UBUNTU_8.04.txt
@@ -115,7 +115,7 @@
set docroot to:
###
docroot=/var/clients
docroot=/var/www/clients
###
Change: application/x-httpd-php=php:/usr/bin/php-cgi to:
@@ -233,14 +233,15 @@
7.1) OPTIONAL: Installing Jailkit
*******************************************************************************
___
apt-get install build-essential autoconf automake1.9 libtool flex bison
apt-get install build-essential autoconf automake1.9 libtool flex bison debhelper
cd /tmp
wget http://olivier.sessink.nl/jailkit/jailkit-2.5.tar.gz
tar xvfz jailkit-2.5.tar.gz
cd jailkit-2.5
./configure
make
make install
wget http://olivier.sessink.nl/jailkit/jailkit-2.7.tar.gz
tar xvfz jailkit-2.7.tar.gz
cd jailkit-2.7
./debian/rules binary
cd ..
dpkg -i jailkit_2.7-1_i386.deb
rm -rf jailkit-2.7*
___
install/dist/conf/centos52.conf.php
@@ -147,6 +147,14 @@
$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';
//* 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';
?>
install/dist/conf/centos53.conf.php
@@ -147,6 +147,14 @@
$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';
//* 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';
?>
install/dist/conf/debian40.conf.php
@@ -147,6 +147,14 @@
$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';
$conf['jailkit']['jailkit_chroot_cron_programs'] = '/usr/bin/php /usr/bin/perl /usr/share/perl /usr/share/php';
//* 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';
?>
install/dist/conf/fedora9.conf.php
@@ -147,6 +147,14 @@
$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';
//* 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';
?>
install/dist/conf/gentoo.conf.php
@@ -96,6 +96,14 @@
$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';
$conf['jailkit']['jailkit_chroot_cron_programs'] = '/usr/bin/php /usr/bin/perl /usr/share/perl /usr/share/php';
//* 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';
?>
install/dist/conf/opensuse110.conf.php
@@ -147,6 +147,14 @@
$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/basename /usr/bin/dirname /usr/bin/nano /usr/bin/pico';
$conf['jailkit']['jailkit_chroot_cron_programs'] = '/usr/bin/php /usr/bin/perl /usr/share/perl /usr/share/php';
//* 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';
?>
install/dist/lib/fedora.lib.php
@@ -409,6 +409,7 @@
        if(is_file('/etc/suphp.conf')) {
            //replaceLine('/etc/suphp.conf','php=php:/usr/bin','x-httpd-suphp=php:/usr/bin/php-cgi',0);
            replaceLine('/etc/suphp.conf','docroot=','docroot=/var/www',0);
            replaceLine('/etc/suphp.conf','umask=0077','umask=0022',0);
        }
        
        //* Create the logging directory for the vhost logfiles
@@ -444,6 +445,23 @@
            exec("ln -s ".$vhost_conf_dir."/ispconfig.conf ".$vhost_conf_enabled_dir."/000-ispconfig.conf");
        }
        
        //* make sure that webalizer finds its config file when it is directly in /etc
        if(@is_file('/etc/webalizer.conf') && !@is_dir('/etc/webalizer')) {
            exec('mkdir /etc/webalizer');
            exec('ln -s /etc/webalizer.conf /etc/webalizer/webalizer.conf');
        }
        if(is_file('/etc/webalizer/webalizer.conf')) {
            // Change webalizer mode to incremental
            replaceLine('/etc/webalizer/webalizer.conf','Incremental     no','Incremental     yes',0,0);
            replaceLine('/etc/webalizer/webalizer.conf','IncrementalName webalizer.current','IncrementalName webalizer.current',0,0);
            replaceLine('/etc/webalizer/webalizer.conf','HistoryName     webalizer.hist','HistoryName     webalizer.hist',0,0);
        }
        //* add a sshusers group
        $command = 'groupadd sshusers';
        if(!is_group('sshusers')) caselog($command.' &> /dev/null 2> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
    }
    
    public function configure_firewall()
install/dist/lib/opensuse.lib.php
@@ -432,6 +432,7 @@
        //if(is_file('/etc/suphp.conf')) {
        replaceLine('/etc/suphp.conf','php=php','x-httpd-suphp=php:/srv/www/cgi-bin/php5',0,0);
        replaceLine('/etc/suphp.conf','docroot=','docroot=/srv/www',0,0);
        replaceLine('/etc/suphp.conf','umask=0077','umask=0022',0);
        //}
        
        // Sites enabled and avaulable dirs
@@ -464,6 +465,23 @@
            exec("ln -s ".$vhost_conf_dir."/ispconfig.conf ".$vhost_conf_enabled_dir."/000-ispconfig.conf");
        }
        
        //* make sure that webalizer finds its config file when it is directly in /etc
        if(@is_file('/etc/webalizer.conf') && !@is_dir('/etc/webalizer')) {
            exec('mkdir /etc/webalizer');
            exec('ln -s /etc/webalizer.conf /etc/webalizer/webalizer.conf');
        }
        if(is_file('/etc/webalizer/webalizer.conf')) {
            // Change webalizer mode to incremental
            replaceLine('/etc/webalizer/webalizer.conf','Incremental     no','Incremental     yes',0,0);
            replaceLine('/etc/webalizer/webalizer.conf','IncrementalName webalizer.current','IncrementalName webalizer.current',0,0);
            replaceLine('/etc/webalizer/webalizer.conf','HistoryName     webalizer.hist','HistoryName     webalizer.hist',0,0);
        }
        //* add a sshusers group
        $command = 'groupadd sshusers';
        if(!is_group('sshusers')) caselog($command.' &> /dev/null 2> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
    }
    
    public function configure_firewall()
install/install.php
@@ -53,6 +53,10 @@
//** Include the base class of the installer class
require_once('lib/installer_base.lib.php');
//** Ensure that current working directory is install directory
$cur_dir = getcwd();
if(realpath(dirname(__FILE__)) != $cur_dir) die("Please run installation/update from _inside_ the install directory!\n");
//** Install logfile
define('ISPC_LOG_FILE', '/var/log/ispconfig_install.log');
define('ISPC_INSTALL_ROOT', realpath(dirname(__FILE__).'/../'));
@@ -191,6 +195,10 @@
    swriteln('Configuring Apache');
    $inst->configure_apache();
    
    //** Configure vlogger
    swriteln('Configuring vlogger');
    $inst->configure_vlogger();
    //* Configure Firewall
    swriteln('Configuring Firewall');
    $inst->configure_firewall();
@@ -355,6 +363,10 @@
        $conf['services']['web'] = true;
        swriteln('Configuring Apache');
        $inst->configure_apache();
        //** Configure vlogger
        swriteln('Configuring vlogger');
        $inst->configure_vlogger();
    }
    
    //** Configure Firewall
install/lib/installer_base.lib.php
@@ -210,7 +210,11 @@
        $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'];
        $tpl_ini_array['cron']['crontab_dir'] = $conf['cron']['crontab_dir'];
        $tpl_ini_array['web']['security_level'] = 20;
        $tpl_ini_array['web']['user'] = $conf['apache']['user'];
        $tpl_ini_array['web']['group'] = $conf['apache']['group'];
        $server_ini_content = array_to_ini($tpl_ini_array);
        $server_ini_content = mysql_real_escape_string($server_ini_content);
        
@@ -233,33 +237,10 @@
            $sql = "INSERT INTO `server` (`server_id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `server_name`, `mail_server`, `web_server`, `dns_server`, `file_server`, `db_server`, `vserver_server`, `config`, `updated`, `active`) VALUES ('".$conf['server_id']."',1, 1, 'riud', 'riud', 'r', '".$conf['hostname']."', '$mail_server_enabled', '$web_server_enabled', '$dns_server_enabled', '$file_server_enabled', '$db_server_enabled', '$vserver_server_enabled', '$server_ini_content', 0, 1);";
            $this->db->query($sql);
            
            //* insert the ispconfig user in the remote server
            $from_host = $conf['hostname'];
            $from_ip = gethostbyname($conf['hostname']);
            //* username for the ispconfig user
            $conf['mysql']['master_ispconfig_user'] = 'ispcsrv'.$conf['server_id'];
            //* Delete ISPConfig user in the master database, in case that it exists
            $this->dbmaster->query("DELETE FROM mysql.user WHERE User = '".$conf['mysql']['master_ispconfig_user']."' AND Host = '".$from_host."';");
            $this->dbmaster->query("DELETE FROM mysql.db WHERE Db = '".$conf['mysql']['master_database']."' AND Host = '".$from_host."';");
            $this->dbmaster->query("DELETE FROM mysql.user WHERE User = '".$conf['mysql']['master_ispconfig_user']."' AND Host = '".$from_ip."';");
            $this->dbmaster->query("DELETE FROM mysql.db WHERE Db = '".$conf['mysql']['master_database']."' AND Host = '".$from_ip."';");
            $this->dbmaster->query('FLUSH PRIVILEGES;');
            //* Create the ISPConfig database user in the remote database
            $query = 'GRANT SELECT, INSERT, UPDATE, DELETE ON '.$conf['mysql']['master_database'].".* "
                    ."TO '".$conf['mysql']['master_ispconfig_user']."'@'".$from_host."' "
                    ."IDENTIFIED BY '".$conf['mysql']['master_ispconfig_password']."';";
            if(!$this->dbmaster->query($query)) {
                $this->error('Unable to create database user in master database: '.$conf['mysql']['master_ispconfig_user'].' Error: '.$this->dbmaster->errorMessage);
            }
            $query = 'GRANT SELECT, INSERT, UPDATE, DELETE ON '.$conf['mysql']['master_database'].".* "
                    ."TO '".$conf['mysql']['master_ispconfig_user']."'@'".$from_ip."' "
                    ."IDENTIFIED BY '".$conf['mysql']['master_ispconfig_password']."';";
            if(!$this->dbmaster->query($query)) {
                $this->error('Unable to create database user in master database: '.$conf['mysql']['master_ispconfig_user'].' Error: '.$this->dbmaster->errorMessage);
            }
            $this->grant_master_database_rights();
        
        } else {
            //* Insert the server, if its not a mster / slave setup
@@ -272,6 +253,93 @@
        
    }
    
    public function grant_master_database_rights()
    {
        global $conf;
        if($conf['mysql']['master_slave_setup'] != 'y') return;
        //* insert the ispconfig user in the remote server
        $from_host = $conf['hostname'];
        $from_ip = gethostbyname($conf['hostname']);
        //* Delete ISPConfig user in the master database, in case that it exists
        $this->dbmaster->query("DELETE FROM mysql.user WHERE User = '".$conf['mysql']['master_ispconfig_user']."' AND Host = '".$from_host."';");
        $this->dbmaster->query("DELETE FROM mysql.db WHERE Db = '".$conf['mysql']['master_database']."' AND Host = '".$from_host."';");
        $this->dbmaster->query("DELETE FROM mysql.user WHERE User = '".$conf['mysql']['master_ispconfig_user']."' AND Host = '".$from_ip."';");
        $this->dbmaster->query("DELETE FROM mysql.db WHERE Db = '".$conf['mysql']['master_database']."' AND Host = '".$from_ip."';");
        $this->dbmaster->query('FLUSH PRIVILEGES;');
        $hosts = array($from_host, $from_ip);
        foreach($hosts as $src_host) {
            //* Create the ISPConfig database user in the remote database
            $query = "GRANT SELECT ON ".$conf['mysql']['master_database'].".`server` "
                    ."TO '".$conf['mysql']['master_ispconfig_user']."'@'".$src_host."' "
                    ."IDENTIFIED BY '".$conf['mysql']['master_ispconfig_password']."';";
            if(!$this->dbmaster->query($query)) {
                $this->error('Unable to create database user in master database: '.$conf['mysql']['master_ispconfig_user'].' Error: '.$this->dbmaster->errorMessage);
            }
            $query = "GRANT SELECT, INSERT ON ".$conf['mysql']['master_database'].".`sys_log` "
                    ."TO '".$conf['mysql']['master_ispconfig_user']."'@'".$src_host."' "
                    ."IDENTIFIED BY '".$conf['mysql']['master_ispconfig_password']."';";
            if(!$this->dbmaster->query($query)) {
                $this->error('Unable to create database user in master database: '.$conf['mysql']['master_ispconfig_user'].' Error: '.$this->dbmaster->errorMessage);
            }
            $query = "GRANT SELECT, UPDATE(`status`) ON ".$conf['mysql']['master_database'].".`sys_datalog` "
                    ."TO '".$conf['mysql']['master_ispconfig_user']."'@'".$src_host."' "
                    ."IDENTIFIED BY '".$conf['mysql']['master_ispconfig_password']."';";
            if(!$this->dbmaster->query($query)) {
                $this->error('Unable to create database user in master database: '.$conf['mysql']['master_ispconfig_user'].' Error: '.$this->dbmaster->errorMessage);
            }
            $query = "GRANT UPDATE(`status`) ON ".$conf['mysql']['master_database'].".`software_update_inst` "
                    ."TO '".$conf['mysql']['master_ispconfig_user']."'@'".$src_host."' "
                    ."IDENTIFIED BY '".$conf['mysql']['master_ispconfig_password']."';";
            if(!$this->dbmaster->query($query)) {
                $this->error('Unable to create database user in master database: '.$conf['mysql']['master_ispconfig_user'].' Error: '.$this->dbmaster->errorMessage);
            }
            $query = "GRANT UPDATE (`ssl_request`, `ssl_cert`, `ssl_action`) ON ".$conf['mysql']['master_database'].".`web_domain` "
                    ."TO '".$conf['mysql']['master_ispconfig_user']."'@'".$src_host."' "
                    ."IDENTIFIED BY '".$conf['mysql']['master_ispconfig_password']."';";
            if(!$this->dbmaster->query($query)) {
                $this->error('Unable to create database user in master database: '.$conf['mysql']['master_ispconfig_user'].' Error: '.$this->dbmaster->errorMessage);
            }
            $query = "GRANT SELECT ON ".$conf['mysql']['master_database'].".`sys_group` "
                    ."TO '".$conf['mysql']['master_ispconfig_user']."'@'".$src_host."' "
                    ."IDENTIFIED BY '".$conf['mysql']['master_ispconfig_password']."';";
            if(!$this->dbmaster->query($query)) {
                $this->error('Unable to create database user in master database: '.$conf['mysql']['master_ispconfig_user'].' Error: '.$this->dbmaster->errorMessage);
            }
            $query = "GRANT INSERT , DELETE ON ".$conf['mysql']['master_database'].".`monitor_data` "
                    ."TO '".$conf['mysql']['master_ispconfig_user']."'@'".$src_host."' "
                    ."IDENTIFIED BY '".$conf['mysql']['master_ispconfig_password']."';";
            if(!$this->dbmaster->query($query)) {
                $this->error('Unable to create database user in master database: '.$conf['mysql']['master_ispconfig_user'].' Error: '.$this->dbmaster->errorMessage);
            }
            $query = "GRANT SELECT, INSERT, UPDATE ON ".$conf['mysql']['master_database'].".`mail_traffic` "
                    ."TO '".$conf['mysql']['master_ispconfig_user']."'@'".$src_host."' "
                    ."IDENTIFIED BY '".$conf['mysql']['master_ispconfig_password']."';";
            if(!$this->dbmaster->query($query)) {
                $this->error('Unable to create database user in master database: '.$conf['mysql']['master_ispconfig_user'].' Error: '.$this->dbmaster->errorMessage);
            }
            $query = "GRANT SELECT, INSERT, UPDATE ON ".$conf['mysql']['master_database'].".`web_traffic` "
                    ."TO '".$conf['mysql']['master_ispconfig_user']."'@'".$src_host."' "
                    ."IDENTIFIED BY '".$conf['mysql']['master_ispconfig_password']."';";
            if(!$this->dbmaster->query($query)) {
                $this->error('Unable to create database user in master database: '.$conf['mysql']['master_ispconfig_user'].' Error: '.$this->dbmaster->errorMessage);
            }
        }
    }
    //** writes postfix configuration files
    public function process_postfix_config($configfile)
@@ -710,6 +778,7 @@
        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','docroot=','docroot=/var/clients',0);
            replaceLine('/etc/suphp/suphp.conf','umask=0077','umask=0022',0);
        }
        
        if(is_file('/etc/apache2/sites-enabled/000-default')) {
@@ -743,6 +812,23 @@
        if(!@is_link($vhost_conf_enabled_dir."/000-ispconfig.conf")) {
            exec("ln -s ".$vhost_conf_dir."/ispconfig.conf ".$vhost_conf_enabled_dir."/000-ispconfig.conf");
        }
        //* make sure that webalizer finds its config file when it is directly in /etc
        if(@is_file('/etc/webalizer.conf') && !@is_dir('/etc/webalizer')) {
            exec('mkdir /etc/webalizer');
            exec('ln -s /etc/webalizer.conf /etc/webalizer/webalizer.conf');
        }
        if(is_file('/etc/webalizer/webalizer.conf')) {
            // Change webalizer mode to incremental
            replaceLine('/etc/webalizer/webalizer.conf','Incremental     no','Incremental     yes',0,0);
            replaceLine('/etc/webalizer/webalizer.conf','IncrementalName webalizer.current','IncrementalName webalizer.current',0,0);
            replaceLine('/etc/webalizer/webalizer.conf','HistoryName     webalizer.hist','HistoryName     webalizer.hist',0,0);
        }
        //* add a sshusers group
        $command = 'groupadd sshusers';
        if(!is_group('sshusers')) caselog($command.' &> /dev/null 2> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
        
    }
    
@@ -807,7 +893,32 @@
    }
    
    public function configure_vlogger()
    {
        global $conf;
        //** Configure vlogger to use traffic logging to mysql (master) db
        $configfile = 'vlogger-dbi.conf';
        if(is_file($conf["vlogger"]["config_dir"].'/'.$configfile)) copy($conf["vlogger"]["config_dir"].'/'.$configfile,$conf["vlogger"]["config_dir"].'/'.$configfile.'~');
        if(is_file($conf["vlogger"]["config_dir"].'/'.$configfile.'~')) exec('chmod 400 '.$conf["vlogger"]["config_dir"].'/'.$configfile.'~');
        $content = rf("tpl/".$configfile.".master");
        if($conf['mysql']['master_slave_setup'] == 'y') {
            $content = str_replace('{mysql_server_ispconfig_user}',$conf['mysql']['master_ispconfig_user'],$content);
            $content = str_replace('{mysql_server_ispconfig_password}',$conf['mysql']['master_ispconfig_password'], $content);
            $content = str_replace('{mysql_server_database}',$conf['mysql']['master_database'],$content);
            $content = str_replace('{mysql_server_ip}',$conf["mysql"]["master_host"],$content);
        } else {
            $content = str_replace('{mysql_server_ispconfig_user}',$conf['mysql']['ispconfig_user'],$content);
            $content = str_replace('{mysql_server_ispconfig_password}',$conf['mysql']['ispconfig_password'], $content);
            $content = str_replace('{mysql_server_database}',$conf['mysql']['database'],$content);
            $content = str_replace('{mysql_server_ip}',$conf["mysql"]["host"],$content);
        }
        wf($conf["vlogger"]["config_dir"].'/'.$configfile,$content);
        exec('chmod 600 '.$conf["vlogger"]["config_dir"].'/'.$configfile);
        exec('chown root:root '.$conf["vlogger"]["config_dir"].'/'.$configfile);
    }
    public function install_ispconfig()
    {
        global $conf;
install/sql/ispconfig3.sql
@@ -92,6 +92,9 @@
  `limit_dns_record` int(11) NOT NULL default '-1',
  `default_dbserver` int(11) NOT NULL default '1',
  `limit_database` int(11) NOT NULL default '-1',
  `limit_cron` int(11) NOT NULL default '0',
  `limit_cron_type` enum('url','chrooted','full') NOT NULL default 'url',
  `limit_cron_frequency` int(11) NOT NULL default '5',
  `limit_client` int(11) NOT NULL default '0',
  `parent_client_id` int(11) unsigned NOT NULL default '0',
  `username` varchar(64) default NULL,
@@ -140,9 +143,39 @@
  `limit_dns_zone` int(11) NOT NULL default '-1',
  `limit_dns_record` int(11) NOT NULL default '-1',
  `limit_database` int(11) NOT NULL default '-1',
  `limit_cron` int(11) NOT NULL default '0',
  `limit_cron_type` enum('url','chrooted','full') NOT NULL default 'url',
  `limit_cron_frequency` int(11) NOT NULL default '5',
  `limit_client` int(11) NOT NULL default '0',
  PRIMARY KEY  (`template_id`)
) ENGINE=MyISAM AUTO_INCREMENT=1;
-- --------------------------------------------------------
--
-- Table structure for table  `dns_rr`
--
CREATE TABLE `cron` (
  `id` int(11) unsigned NOT NULL auto_increment,
  `sys_userid` int(11) unsigned NOT NULL default '0',
  `sys_groupid` int(11) unsigned NOT NULL default '0',
  `sys_perm_user` varchar(5) NULL default NULL,
  `sys_perm_group` varchar(5) NULL default NULL,
  `sys_perm_other` varchar(5) NULL default NULL,
  `server_id` int(11) unsigned NOT NULL default '0',
  `parent_domain_id` int(11) unsigned NOT NULL default '0',
  `type` enum('url','chrooted','full') NOT NULL default 'url',
  `command` varchar(255) NOT NULL,
  `run_min` varchar(100) NULL,
  `run_hour` varchar(100) NULL,
  `run_mday` varchar(100) NULL,
  `run_month` varchar(100) NULL,
  `run_wday` varchar(100) NULL,
  `active` enum('n','y') NOT NULL default 'y',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  AUTO_INCREMENT=1;
-- --------------------------------------------------------
@@ -1010,9 +1043,24 @@
  `database_password` varchar(64) default NULL,
  `database_charset` varchar(64) default NULL,
  `remote_access` enum('n','y') NOT NULL default 'y',
  `remote_ips` text NOT NULL,
  `active` enum('n','y') NOT NULL default 'y',
  PRIMARY KEY  (`database_id`)
) ENGINE=MyISAM AUTO_INCREMENT=1;
-- --------------------------------------------------------
--
-- Table structure for table  `web_traffic`
--
CREATE TABLE `web_traffic` (
  `hostname` varchar(255) NOT NULL,
  `traffic_date` date NOT NULL,
  `traffic_bytes` bigint(32) unsigned NOT NULL default '0',
  PRIMARY KEY  (`hostname`,`traffic_date`)
) ENGINE=MyISAM;
-- --------------------------------------------------------
@@ -1148,7 +1196,7 @@
-- Dumping data for table `sys_config`
--
INSERT INTO sys_config VALUES ('1','db','db_version','3.0.1.3');
INSERT INTO sys_config VALUES ('1','db','db_version','3.0.1.4');
-- --------------------------------------------------------
install/tpl/apache_ispconfig.conf.master
@@ -5,7 +5,7 @@
################################################
LogFormat "%v %h %l %u %t \"%r\" %>s %B \"%{Referer}i\" \"%{User-Agent}i\"" combined_ispconfig
CustomLog "| /usr/sbin/vlogger -s access.log -t \"%Y%m%d-access.log\" /var/log/ispconfig/httpd" combined_ispconfig
CustomLog "| /usr/local/ispconfig/server/scripts/vlogger -s access.log -t \"%Y%m%d-access.log\" -d \"/etc/vlogger-dbi.conf\" /var/log/ispconfig/httpd" combined_ispconfig
<Directory /var/www/clients>
    AllowOverride None
install/tpl/config.inc.php.master
@@ -57,7 +57,7 @@
//** Application
define('ISPC_APP_TITLE', 'ISPConfig');
define('ISPC_APP_VERSION', '3.0.1.3');
define('ISPC_APP_VERSION', '3.0.1.4');
//** Database
install/tpl/server.ini.master
@@ -34,6 +34,9 @@
website_symlinks=/var/www/[website_domain]/:/var/www/clients/client[client_id]/[website_domain]/
vhost_conf_dir=/etc/apache2/sites-available
vhost_conf_enabled_dir=/etc/apache2/sites-enabled
security_level=10
user=www-data
group=www-data
[fastcgi]
fastcgi_starter_path=/var/www/php-fcgi-scripts/[system_user]/
@@ -48,3 +51,12 @@
jailkit_chroot_home=/home/[username]
jailkit_chroot_app_sections=basicshell editors extendedshell netutils ssh sftp scp groups jk_lsh
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
jailkit_chroot_cron_programs=/usr/bin/php /usr/bin/perl /usr/share/perl /usr/share/php
[vlogger]
config_dir=/etc
[cron]
init_script=cron
crontab_dir=/etc/cron.d
wget=/usr/bin/wget
install/tpl/vlogger-dbi.conf.master
New file
@@ -0,0 +1,4 @@
dsn DBI:mysql:database={mysql_server_database};host={mysql_server_ip}:3306
user {mysql_server_ispconfig_user}
pass {mysql_server_ispconfig_password}
dump 30
install/update.php
@@ -53,6 +53,10 @@
//** Include the base class of the installer class
require_once('lib/installer_base.lib.php');
//** Ensure that current working directory is install directory
$cur_dir = getcwd();
if(realpath(dirname(__FILE__)) != $cur_dir) die("Please run installation/update from _inside_ the install directory!\n");
//** Install logfile
define('ISPC_LOG_FILE', '/var/log/ispconfig_install.log');
define('ISPC_INSTALL_ROOT', realpath(dirname(__FILE__).'/../'));
@@ -155,6 +159,9 @@
//** Create the mysql database
$inst->configure_database();
//** Update master database rights
$inst->grant_master_database_rights();
//** empty all databases
$db_tables = $inst->db->getTables();
@@ -284,6 +291,10 @@
        //** Configure Apache
        swriteln('Configuring Apache');
        $inst->configure_apache();
        //** Configure vlogger
        swriteln('Configuring vlogger');
        $inst->configure_vlogger();
    }
    
interface/lib/app.inc.php
@@ -151,17 +151,14 @@
    public function lng($text)
    {
        if($this->_language_inc != 1) {
            //* loading global and module Wordbook
            // TODO: this need to be made clearer somehow - pedro
            //@include_once(ISPC_ROOT_PATH.'/lib/lang/'.$_SESSION['s']['language'].'.lng');
            //* loading global Wordbook
            $this->load_language_file('/lib/lang/'.$_SESSION['s']['language'].'.lng');
            //* Load module wordbook, if it exists
            if(isset($_SESSION['s']['module']['name']) && isset($_SESSION['s']['language'])) {
                $lng_file = '/web/'.$_SESSION['s']['module']['name'].'/lib/lang/'.$_SESSION['s']['language'].'.lng';
                if(!file_exists($lng_file)) $lng_file = '/web/'.$_SESSION['s']['module']['name'].'/lib/lang/en.lng';
                //@include_once($lng_file);
                if(!file_exists(ISPC_ROOT_PATH.$lng_file)) $lng_file = '/web/'.$_SESSION['s']['module']['name'].'/lib/lang/en.lng';
                $this->load_language_file($lng_file);
            }
            //if(isset($wb)) $this->_wb = $wb;
            $this->_language_inc = 1;
        }        
        if(!empty($this->_wb[$text])) {
@@ -189,7 +186,11 @@
    public function tpl_defaults()
    {    
        $this->tpl->setVar('app_title', $this->_conf['app_title']);
        $this->tpl->setVar('app_version', $this->_conf['app_version']);
        if(isset($_SESSION['s']['user'])) {
            $this->tpl->setVar('app_version', $this->_conf['app_version']);
        } else {
            $this->tpl->setVar('app_version', '');
        }
        $this->tpl->setVar('app_link', $this->_conf['app_link']);
        if(isset($this->_conf['app_logo']) && $this->_conf['app_logo'] != '' && @is_file($this->_conf['app_logo'])){
            $this->tpl->setVar('app_logo', '<img src="'.$this->_conf['app_logo'].'">');
interface/lib/classes/custom_datasource.inc.php
@@ -40,6 +40,56 @@
        }
        return $records_new;
    }
    function dns_servers($field, $record) {
        global $app, $conf;
        if($_SESSION["s"]["user"]["typ"] == 'user') {
            // Get the limits of the client
            $client_group_id = $_SESSION["s"]["user"]["default_group"];
            $client = $app->db->queryOneRecord("SELECT default_dnsserver FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
            $sql = "SELECT server_id,server_name FROM server WHERE server_id = ".$client['default_dnsserver'];
        } else {
            $sql = "SELECT server_id,server_name FROM server WHERE dns_server = 1 ORDER BY server_name";
        }
        $records = $app->db->queryAllRecords($sql);
        $records_new = array();
        if(is_array($records)) {
            foreach($records as $rec) {
                $key = $rec['server_id'];
                $records_new[$key] = $rec['server_name'];
            }
        }
        return $records_new;
    }
    function client_servers($field, $record) {
        global $app, $conf;
        $server_type = $field['name'];
        if($_SESSION["s"]["user"]["typ"] == 'user') {
            // Get the limits of the client
            $client_group_id = $_SESSION["s"]["user"]["default_group"];
            $sql = "SELECT $server_type as server_id FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id";
            $client = $app->db->queryOneRecord($sql);
            $sql = "SELECT server_id,server_name FROM server WHERE server_id = ".$client['server_id'];
        } else {
            $sql = "SELECT server_id,server_name FROM server WHERE dns_server = 1 ORDER BY server_name";
        }
        $records = $app->db->queryAllRecords($sql);
        $records_new = array();
        if(is_array($records)) {
            foreach($records as $rec) {
                $key = $rec['server_id'];
                $records_new[$key] = $rec['server_name'];
            }
        }
        return $records_new;
    }
}
interface/lib/classes/tform.inc.php
@@ -276,6 +276,33 @@
                }
            }
            
            //* values are limited to a field in the reseller settings
            if($limit_parts[0] == 'reseller') {
                if($_SESSION["s"]["user"]["typ"] == 'admin') {
                    return $values;
                } else {
                    //* Get the limits of the client that is currently logged in
                    $client_group_id = $_SESSION["s"]["user"]["default_group"];
                    $client = $app->db->queryOneRecord("SELECT parent_client_id FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
                    //echo "SELECT parent_client_id FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id";
                    //* If the client belongs to a reseller, we will check against the reseller Limit too
                    if($client['parent_client_id'] != 0) {
                        //* first we need to know the groups of this reseller
                        $tmp = $app->db->queryOneRecord("SELECT userid, groups FROM sys_user WHERE client_id = ".$client['parent_client_id']);
                        $reseller_groups = $tmp["groups"];
                        $reseller_userid = $tmp["userid"];
                        // Get the limits of the reseller of the logged in client
                        $client_group_id = $_SESSION["s"]["user"]["default_group"];
                        $reseller = $app->db->queryOneRecord("SELECT ".$limit_parts[1]." as lm FROM client WHERE client_id = ".$client['parent_client_id']);
                        $allowed = explode(',',$reseller['lm']);
                    } else {
                        return $values;
                    }
                } // end if admin
            } // end if reseller
            //* values are limited to a field in the system settings
            if($limit_parts[0] == 'system') {
                $app->uses('getconf');
@@ -1148,6 +1175,63 @@
            }
            
        }
        function checkClientLimit($limit_name,$sql_where = '') {
            global $app;
            $check_passed = true;
            $limit_name = $app->db->quote($limit_name);
            if($limit_name == '') $app->error('Limit name missing in function checkClientLimit.');
            // Get the limits of the client that is currently logged in
            $client_group_id = $_SESSION["s"]["user"]["default_group"];
            $client = $app->db->queryOneRecord("SELECT $limit_name as number, parent_client_id FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
            // Check if the user may add another item
            if($client["number"] >= 0) {
                $sql = "SELECT count(".$this->formDef['db_table_idx'].") as number FROM ".$this->formDef['db_table']." WHERE ".$this->getAuthSQL('u');
                if($sql_where != '') $sql .= ' and '.$sql_where;
                $tmp = $app->db->queryOneRecord($sql);
                if($tmp["number"] >= $client["number"]) $check_passed = false;
            }
            return $check_passed;
        }
        function checkResellerLimit($limit_name,$sql_where = '') {
            global $app;
            $check_passed = true;
            $limit_name = $app->db->quote($limit_name);
            if($limit_name == '') $app->error('Limit name missing in function checkClientLimit.');
            // Get the limits of the client that is currently logged in
            $client_group_id = $_SESSION["s"]["user"]["default_group"];
            $client = $app->db->queryOneRecord("SELECT parent_client_id FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
            //* If the client belongs to a reseller, we will check against the reseller Limit too
            if($client['parent_client_id'] != 0) {
                //* first we need to know the groups of this reseller
                $tmp = $app->db->queryOneRecord("SELECT userid, groups FROM sys_user WHERE client_id = ".$client['parent_client_id']);
                $reseller_groups = $tmp["groups"];
                $reseller_userid = $tmp["userid"];
                // Get the limits of the reseller of the logged in client
                $client_group_id = $_SESSION["s"]["user"]["default_group"];
                $reseller = $app->db->queryOneRecord("SELECT $limit_name as number FROM client WHERE client_id = ".$client['parent_client_id']);
                // Check if the user may add another item
                if($reseller["number"] >= 0) {
                    $sql = "SELECT count(".$this->formDef['db_table_idx'].") as number FROM ".$this->formDef['db_table']." WHERE (sys_groupid IN (".$reseller_groups.") or sys_userid = ".$reseller_userid.")";
                    if($sql_where != '') $sql .= ' and '.$sql_where;
                    $tmp = $app->db->queryOneRecord($sql);
                    if($tmp["number"] >= $reseller["number"]) $check_passed = false;
                }
            }
            return $check_passed;
        }
}
interface/lib/classes/tform_actions.inc.php
@@ -359,7 +359,7 @@
            if($app->tform->formDef['auth'] == 'no') {
                $sql = "SELECT * FROM ".$app->tform->formDef['db_table']." WHERE ".$app->tform->formDef['db_table_idx']." = ".$this->id;
            } else {
                $sql = "SELECT * FROM ".$app->tform->formDef['db_table']." WHERE ".$app->tform->formDef['db_table_idx']." = ".$this->id." AND ".$app->tform->getAuthSQL('u');
                $sql = "SELECT * FROM ".$app->tform->formDef['db_table']." WHERE ".$app->tform->formDef['db_table_idx']." = ".$this->id." AND ".$app->tform->getAuthSQL('r');
            }
            if(!$record = $app->db->queryOneRecord($sql)) $app->error($app->lng('error_no_view_permission'));
            
@@ -400,7 +400,7 @@
                if($app->tform->formDef['auth'] == 'no') {
                    $sql = "SELECT * FROM ".$app->tform->formDef['db_table']." WHERE ".$app->tform->formDef['db_table_idx']." = ".$this->id;
                } else {
                    $sql = "SELECT * FROM ".$app->tform->formDef['db_table']." WHERE ".$app->tform->formDef['db_table_idx']." = ".$this->id." AND ".$app->tform->getAuthSQL('u');
                    $sql = "SELECT * FROM ".$app->tform->formDef['db_table']." WHERE ".$app->tform->formDef['db_table_idx']." = ".$this->id." AND ".$app->tform->getAuthSQL('r');
                }
                if(!$record = $app->db->queryOneRecord($sql)) $app->error($app->lng('error_no_view_permission'));
            
@@ -436,7 +436,7 @@
            if($app->tform->formDef['auth'] == 'no') {
                $sql = "SELECT * FROM ".$app->tform->formDef['db_table']." WHERE ".$app->tform->formDef['db_table_idx']." = ".$this->id;
            } else {
                $sql = "SELECT * FROM ".$app->tform->formDef['db_table']." WHERE ".$app->tform->formDef['db_table_idx']." = ".$this->id." AND ".$app->tform->getAuthSQL('u');
                $sql = "SELECT * FROM ".$app->tform->formDef['db_table']." WHERE ".$app->tform->formDef['db_table_idx']." = ".$this->id." AND ".$app->tform->getAuthSQL('r');
            }
            if(!$record = $app->db->queryOneRecord($sql)) $app->error($app->lng('error_no_view_permission'));
            
@@ -527,7 +527,7 @@
                // bestehenden Datensatz anzeigen
                if($app->tform->errorMessage == '') {
                        if($app->tform->formDef['auth'] == 'yes' && $_SESSION["s"]["user"]["typ"] != 'admin') {
                            $sql = "SELECT * FROM ".$app->tform->formDef['db_table']." WHERE ".$app->tform->formDef['db_table_idx']." = ".$this->id." AND ".$app->tform->getAuthSQL('u');
                            $sql = "SELECT * FROM ".$app->tform->formDef['db_table']." WHERE ".$app->tform->formDef['db_table_idx']." = ".$this->id." AND ".$app->tform->getAuthSQL('r');
                        } else {
                            $sql = "SELECT * FROM ".$app->tform->formDef['db_table']." WHERE ".$app->tform->formDef['db_table_idx']." = ".$this->id;
                        }
interface/lib/classes/validate_client.inc.php
@@ -40,7 +40,7 @@
            $num_rec = $app->db->queryOneRecord("SELECT count(*) as number FROM sys_user WHERE username = '".$app->db->quote($field_value)."'");
                if($num_rec["number"] > 0) {
                    $errmsg = $validator['errmsg'];
                    if(isset($this->wordbook[$errmsg])) {
                    if(isset($app->tform->wordbook[$errmsg])) {
                        return $app->tform->wordbook[$errmsg]."<br>\r\n";
                    } else {
                        return $errmsg."<br>\r\n";
interface/lib/classes/validate_cron.inc.php
New file
@@ -0,0 +1,191 @@
<?php
/*
Copyright (c) 2007, Till Brehm, projektfarm Gmbh
Modified 2009, Marius Cramer, pixcept KG
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.
*/
class validate_cron {
    function get_error($errmsg) {
        global $app;
        if(isset($app->tform->wordbook[$errmsg])) {
            return $app->tform->wordbook[$errmsg]."<br>\r\n";
        } else {
            return $errmsg."<br>\r\n";
        }
    }
    /*
        Validator function to check if a given cron command is in correct form (url only).
    */
    function command_format($field_name, $field_value, $validator) {
        if(preg_match("'^(\w+):\/\/'", $field_value, $matches)) {
            $parsed = parse_url($field_value);
            if($parsed === false) return $this->get_error($validator['errmsg']);
            if($parsed["scheme"] != "http" && $parsed["scheme"] != "https") return $this->get_error($validator['errmsg']);
            if(preg_match("'^([a-z0-9][a-z0-9-]{0,62}\.)+([a-z]{2,4})$'i", $parsed["host"]) == false) return $this->get_error($validator['errmsg']);
        }
    }
    /*
        Validator function to check if a given cron time is in correct form.
    */
    function run_time_format($field_name, $field_value, $validator) {
        global $app;
        //* check general form
        $is_ok = true;
        $field_value = str_replace(" ", "", $field_value); // spaces are not needed
        $used_times = array();
        if(preg_match("'^[0-9\-\,\/\*]+$'", $field_value) == false) return $this->get_error($validator['errmsg']); // allowed characters are 0-9, comma, *, -, /
        elseif(preg_match("'[\-\,\/][\-\,\/]'", $field_value) == true) return $this->get_error($validator['errmsg']); // comma, - and / never stand together
        //* now split list and check each entry. store used values in array for later limit-check
        $time_list = split(",", $field_value);
        if(count($time_list) < 1) return $this->get_error($validator['errmsg']);
        $max_entry = 0;
        $min_entry = 0;
        $in_minutes = 1;
        //* get maximum value of entry for each field type (name)
        switch($field_name) {
            case "run_min":
                $max_entry = 59;
                break;
            case "run_hour":
                $max_entry = 23;
                $in_minutes = 60;
                break;
            case "run_mday":
                $max_entry = 31;
                $min_entry = 1;
                $in_minutes = 1440;
                break;
            case "run_month":
                $max_entry = 12;
                $min_entry = 1;
                $in_minutes = 1440 * 28; // not exactly but enough
                break;
            case "run_wday":
                $max_entry = 7;
                $in_minutes = 1440;
                break;
        }
        if($max_entry == 0) return $this->get_error('unknown_fieldtype_error');
        foreach($time_list as $entry) {
            //* possible value combinations:
            //* x               =>      ^(\d+)$
            //* x-y             =>      ^(\d+)\-(\d+)$
            //* x/y             =>      ^(\d+)\/([1-9]\d*)$
            //* x-y/z           =>      ^(\d+)\-(\d+)\/([1-9]\d*)$
            //* */x             =>      ^\*\/([1-9]\d*)$
            //* combined regex  =>      ^(\d+|\*)(\-(\d+))?(\/([1-9]\d*))?$
            if(preg_match("'^(((\d+)(\-(\d+))?)|\*)(\/([1-9]\d*))?$'", $entry, $matches) == false) {
                return $this->get_error($validator['errmsg']);
            }
            //* matches contains:
            //* 1       =>      * or value or x-y range
            //* 2       =>      unused
            //* 3       =>      value if [1] != *
            //* 4       =>      empty if no range was used
            //* 5       =>      2nd value of range if [1] != * and range was used
            //* 6       =>      empty if step was not used
            //* 7       =>      step
            $loop_step = 1;
            $loop_from = $min_entry;
            $loop_to = $max_entry;
            //* calculate used values
            if($matches[1] == "*") {
                //* not to check
            } else {
                if($matches[3] < $min_entry || $matches[3] > $max_entry) {
                    //* check if value is in allowed range
                    return $this->get_error($validator['errmsg']);
                } elseif($matches[4] && ($matches[5] < $min_entry || $matches[5] > $max_entry || $matches[5] <= $matches[3])) {
                    //* check if value is in allowed range and not less or equal to first value
                    return $this->get_error($validator['errmsg']);
                }
                $loop_from = $matches[3];
                $loop_to = $matches[3];
                if($matches[4]) $loop_to = $matches[5];
            }
            if($matches[6] && ($matches[7] < 2 || $matches[7] > $max_entry - 1)) {
                //* check if step value is valid
                return $this->get_error($validator['errmsg']);
            }
            if($matches[7]) $loop_step = $matches[7];
            //* loop through values to set used times
            for($t = $loop_from; $t <= $loop_to; $t = $t + $loop_step) {
                $used_times[] = $t;
            }
        } //* end foreach entry loop
        //* sort used times and erase doubles
        sort($used_times);
        $used_times = array_unique($used_times);
        //* get minimum frequency and store it in $app->tform->cron_min_freq for usage in onUpdateSave and onInsertSave!
        $min_freq = -1;
        $prev_time = -1;
        foreach($used_times as $curtime) {
            if($prev_time != -1) {
                $freq = $curtime - $prev_time;
                if($min_freq == -1 || $freq < $min_freq) $min_freq = $freq;
            }
            $prev_time = $curtime;
        }
        //* check last against first (needed because e.g. wday 1,4,7 has diff 1 not 3
        $prev_time = $used_times[0];
        $freq = ($prev_time - $min_entry) + ($max_entry - $curtime) + 1;
        if($min_freq == -1 || $freq < $min_freq) $min_freq = $freq;
        if($min_freq > 0 && $min_freq <= $max_entry) { //* only store if > 1 && < $max_entry!
            $min_freq = $min_freq * $in_minutes; // we have to overwrite $app->tform->cron_min_freq if this is higher value
            if(!$app->tform->cron_min_freq || $app->tform->cron_min_freq > $min_freq) $app->tform->cron_min_freq = $min_freq;
        }
        //return "DEBUG: " . $app->tform->cron_min_freq . " ($min_freq) --- " . var_export($used_times, true) . "<br />";
    }
}
interface/lib/classes/validate_database.inc.php
New file
@@ -0,0 +1,72 @@
<?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.
*/
class validate_database {
    /*
        Validator function to check if a given list of ips is ok.
    */
    function valid_ip_list($field_name, $field_value, $validator) {
        global $app;
    if($_POST["remote_access"] == "y") {
        if(trim($field_value) == "") return;
        $values = split(",", $field_value);
        foreach($values as $cur_value) {
            $cur_value = trim($cur_value);
            $valid = true;
            if(preg_match("/^[0-9]{1,3}(\.)[0-9]{1,3}(\.)[0-9]{1,3}(\.)[0-9]{1,3}$/", $cur_value)) {
                $groups = explode(".", $cur_value);
                foreach($groups as $group){
                  if($group<0 OR $group>255)
                  $valid=false;
                }
            } else {
                $valid = false;
            }
            if($valid == false) {
                $errmsg = $validator['errmsg'];
                if(isset($app->tform->wordbook[$errmsg])) {
                    return $app->tform->wordbook[$errmsg]."<br>\r\n";
                } else {
                    return $errmsg."<br>\r\n";
                }
            }
        }
    }
  }
}
interface/lib/classes/validate_ftpuser.inc.php
New file
@@ -0,0 +1,89 @@
<?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.
*/
class validate_ftpuser {
    /*
        Validator function to check if a given dir is ok.
    */
    function ftp_dir($field_name, $field_value, $validator) {
        global $app;
        if($app->tform->primary_id == 0) {
            $errmsg = $validator['errmsg'];
            if(isset($app->tform->wordbook[$errmsg])) {
                return $app->tform->wordbook[$errmsg]."<br>\r\n";
            } else {
                return $errmsg."<br>\r\n";
            }
        }
        $ftp_data = $app->db->queryOneRecord("SELECT parent_domain_id FROM ftp_user WHERE ftp_user_id = '".$app->db->quote($app->tform->primary_id)."'");
        if(!$ftp_data["parent_domain_id"]) {
            $errmsg = $validator['errmsg'];
            if(isset($app->tform->wordbook[$errmsg])) {
                return $app->tform->wordbook[$errmsg]."<br>\r\n";
            } else {
                return $errmsg."<br>\r\n";
            }
        }
        $domain_data = $app->db->queryOneRecord("SELECT domain_id, document_root FROM web_domain WHERE domain_id = '".$app->db->quote($ftp_data["parent_domain_id"])."'");
        if(!$domain_data["domain_id"]) {
            $errmsg = $validator['errmsg'];
            if(isset($app->tform->wordbook[$errmsg])) {
                return $app->tform->wordbook[$errmsg]."<br>\r\n";
            } else {
                return $errmsg."<br>\r\n";
            }
        }
        $doc_root = $domain_data["document_root"];
        $is_ok = false;
        if($doc_root == $field_value) $is_ok = true;
        $doc_root .= "/";
        if(substr($field_value, 0, strlen($doc_root)) == $doc_root) $is_ok = true;
        if($is_ok == false) {
            $errmsg = $validator['errmsg'];
            if(isset($app->tform->wordbook[$errmsg])) {
                return $app->tform->wordbook[$errmsg]."<br>\r\n";
            } else {
                return $errmsg."<br>\r\n";
            }
        }
    }
}
interface/lib/classes/validate_reseller.inc.php
New file
@@ -0,0 +1,47 @@
<?php
/*
Copyright (c) 2007 - 2009, 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.
*/
class validate_reseller {
    /*
        Validator function to check if a given cron command is in correct form (url only).
    */
    function limit_client($field_name, $field_value, $validator) {
        global $app;
        if($field_value <= 0) {
            return $app->tform->lng('limit_client_error_positive');
        } else {
            return '';
        }
    }
}
interface/lib/lang/br.lng
New file
@@ -0,0 +1,25 @@
<?php
$wb['conf_format_dateshort'] = 'd/m/Y';
$wb['conf_format_datelong'] = 'l dS of F Y';
$wb['conf_format_timeshort'] = 'H:i';
$wb['conf_format_timelong'] = 'H:i:s';
$wb['conf_format_datetime'] = 'd/m/Y H:i';
$wb['301'] = 'Módulo não permitido para o usuário corrente.';
$wb['302'] = 'Módulo Inválido';
$wb['1001'] = 'O nome de usuário e senha não podem estar em branco!';
$wb['1002'] = 'Nome de usuário ou senha incorretos!';
$wb['1003'] = 'O Usuário está inativo!';
$wb['delete_confirmation'] = 'Tem certeza de que deseja remover este registro?';
$wb['error_no_view_permission'] = 'Você não tem permissão para ver este registro ou o mesmo não existe!';
$wb['error_no_delete_permission'] = 'Você não tem permissão para remover este registro!';
$wb['page_txt'] = 'Página';
$wb['page_of_txt'] = 'de';
$wb['page_next_txt'] = 'Próximo';
$wb['page_back_txt'] = 'Voltar';
$wb['delete_txt'] = 'Remover';
$wb['filter_txt'] = 'Filtrar';
$wb['add_new_record_txt'] = 'Adcionar novo registro';
$wb['btn_save_txt'] = 'Salvar';
$wb['btn_cancel_txt'] = 'Voltar';
?>
interface/web/admin/form/server.tform.php
@@ -122,7 +122,7 @@
    )
);
/*
$form["tabs"]['config'] = array (
    'title'     => "Config",
    'width'     => 100,
@@ -146,6 +146,6 @@
    ##################################
    )
);
*/
?>
interface/web/admin/form/server_config.tform.php
@@ -339,6 +339,34 @@
            'width'        => '40',
            'maxlength'    => '255'
        ),
        'security_level' => array (
            'datatype'    => 'VARCHAR',
            'formtype'    => 'SELECT',
            'default'    => '20',
            'value'        => array('10' => 'Medium', '20' => 'High')
        ),
        'user' => array (
            'datatype'    => 'VARCHAR',
            'formtype'    => 'TEXT',
            'default'    => '',
            'validators'    => array (     0 => array (    'type'    => 'NOTEMPTY',
                                                        'errmsg'=> 'apache_user_error_empty'),
                                    ),
            'value'        => '',
            'width'        => '40',
            'maxlength'    => '255'
        ),
        'group' => array (
            'datatype'    => 'VARCHAR',
            'formtype'    => 'TEXT',
            'default'    => '',
            'validators'    => array (     0 => array (    'type'    => 'NOTEMPTY',
                                                        'errmsg'=> 'apache_group_error_empty'),
                                    ),
            'value'        => '',
            'width'        => '40',
            'maxlength'    => '255'
        ),
    ##################################
    # ENDE Datatable fields
    ##################################
@@ -478,6 +506,17 @@
            'width'        => '40',
            'maxlength'    => '1000'
        ),
        'jailkit_chroot_cron_programs' => array (
            'datatype'  => 'VARCHAR',
            'formtype'  => 'TEXT',
            'default'   => '',
            'validators'    => array (  0 => array (    'type'  => 'NOTEMPTY',
                                                        'errmsg'=> 'jailkit_chroot_cron_programs_error_empty'),
                                    ),
            'value'     => '',
            'width'     => '40',
            'maxlength' => '1000'
        ),
    ##################################
    # ENDE Datatable fields
    ##################################
@@ -485,10 +524,79 @@
);
$form["tabs"]['vlogger'] = array (
    'title'     => "vlogger",
    'width'     => 80,
    'template'  => "templates/server_config_vlogger_edit.htm",
    'fields'    => array (
    ##################################
    # Begin Datatable fields
    ##################################
        'config_dir' => array (
            'datatype'  => 'VARCHAR',
            'formtype'  => 'TEXT',
            'default'   => '',
            'validators'    => array (  0 => array (    'type'  => 'NOTEMPTY',
                                                        'errmsg'=> 'vlogger_config_dir_error_empty'),
                                    ),
            'value'     => '',
            'width'     => '40',
            'maxlength' => '255'
        ),
    ##################################
    # ENDE Datatable fields
    ##################################
    )
);
$form["tabs"]['cron'] = array (
    'title'     => "Cron",
    'width'     => 80,
    'template'  => "templates/server_config_cron_edit.htm",
    'fields'    => array (
    ##################################
    # Begin Datatable fields
    ##################################
        'init_script' => array (
            'datatype'  => 'VARCHAR',
            'formtype'  => 'TEXT',
            'default'   => '',
            'validators'    => array (  0 => array (    'type'  => 'NOTEMPTY',
                                                        'errmsg'=> 'cron_init_script_error_empty'),
                                    ),
            'value'     => '',
            'width'     => '40',
            'maxlength' => '255'
        ),
        'crontab_dir' => array (
            'datatype'  => 'VARCHAR',
            'formtype'  => 'TEXT',
            'default'   => '',
            'validators'    => array (  0 => array (    'type'  => 'NOTEMPTY',
                                                        'errmsg'=> 'crontab_dir_error_empty'),
                                    ),
            'value'     => '',
            'width'     => '40',
            'maxlength' => '255'
        ),
        'wget' => array (
            'datatype'  => 'VARCHAR',
            'formtype'  => 'TEXT',
            'default'   => '',
            'validators'    => array (  0 => array (    'type'  => 'NOTEMPTY',
                                                        'errmsg'=> 'cron_wget_error_empty'),
                                    ),
            'value'     => '',
            'width'     => '40',
            'maxlength' => '255'
        ),
    ##################################
    # ENDE Datatable fields
    ##################################
    )
);
interface/web/admin/lib/lang/bg_server_config.lng
@@ -38,4 +38,10 @@
$wb['gateway_error_wrong'] = 'Invalid Gateway format.';
$wb['hostname_error_empty'] = 'Hostname is empty.';
$wb['nameservers_error_empty'] = 'Nameserver is empty.';
$wb['jailkit_chroot_cron_programs_txt'] = 'Jailkit cron chrooted applications';
$wb['config_dir_txt'] = 'Config directory';
$wb['init_script_txt'] = 'Cron init script name';
$wb['crontab_dir_txt'] = 'Path for individual crontabs';
$wb['wget_txt'] = 'Path to wget program';
$wb['security_level_txt'] = 'Security level';
?>
interface/web/admin/lib/lang/br.lng
New file
@@ -0,0 +1,35 @@
<?php
$wb['1001'] = 'Por favor, preencha o nome do usuário e senha!';
$wb['1002'] = 'Nome do usuário ou senha incorretos!';
$wb['Firewall'] = 'Firewall';
$wb['Groups'] = 'Grupos';
$wb['groups_description'] = 'Formulário para edição dos Grupos de usuários do sistema.';
$wb['Server'] = 'Servidor';
$wb['Services'] = 'Serviços';
$wb['Config'] = 'Configuração';
$wb['Server Config'] = 'Configuração do Servidor';
$wb['Mail'] = 'Mail';
$wb['Getmail'] = 'Getmail';
$wb['Web'] = 'Web';
$wb['FastCGI'] = 'FastCGI';
$wb['Jailkit'] = 'Jailkit';
$wb['System'] = 'Sistema';
$wb['Add user'] = 'Adicionar Usuário';
$wb['Edit user'] = 'Editar Usuário';
$wb['CP Users'] = 'Usuários Visar';
$wb['Add group'] = 'Adicionar Grupo';
$wb['Edit group'] = 'Editar Grupo';
$wb['Edit server'] = 'Editar Servidor';
$wb['Edit Server IP'] = 'Editar Endereço IP do Servidor';
$wb['Servers'] = 'Servidores';
$wb['Sync. Now'] = 'Sincronizar agora';
$wb['DB Sync.'] = 'Sincronizar Bando de Dados';
$wb['Languages'] = 'Idiomas';
$wb['New Language'] = 'Novo Idioma';
$wb['Export'] = 'Exportar';
$wb['Import'] = 'Importar';
$wb['Language Editor'] = 'Editor de Idiomas';
$wb['Software'] = 'Software';
$wb['Repositories'] = 'Repositórios';
?>
interface/web/admin/lib/lang/br_firewall.lng
New file
@@ -0,0 +1,10 @@
<?php
$wb['server_id_txt'] = 'Servidor';
$wb['tcp_port_txt'] = 'Portas TCP abertas';
$wb['udp_port_txt'] = 'Portas UDP abertas';
$wb['tcp_port_help_txt'] = 'Separado por vírgula';
$wb['udp_port_help_txt'] = 'Separado por vírgula';
$wb['active_txt'] = 'Ativo';
$wb['firewall_error_unique'] = 'Já existe uma regra de firewall para este servidor!';
?>
interface/web/admin/lib/lang/br_firewall_list.lng
New file
@@ -0,0 +1,8 @@
<?php
$wb["list_head_txt"] = 'Firewall';
$wb["active_txt"] = 'Ativo';
$wb["server_id_txt"] = 'Servidor';
$wb["tcp_port_txt"] = 'Portas TCP abertas';
$wb["udp_port_txt"] = 'Portas UDP abertas';
$wb["add_new_record_txt"] = 'Adcionar registro de firewall';
?>
interface/web/admin/lib/lang/br_groups.lng
New file
@@ -0,0 +1,6 @@
<?php
$wb['description_txt'] = 'Descrição';
$wb['name_txt'] = 'Grupo';
$wb['name_err'] = 'O Nome do Grupo deve conter de 1 a 30 caracteres!';
?>
interface/web/admin/lib/lang/br_groups_list.lng
New file
@@ -0,0 +1,7 @@
<?php
$wb['list_head_txt'] = 'Grupos de usuários do sistema';
$wb['description_txt'] = 'Descrição';
$wb['name_txt'] = 'Grupo';
$wb['add_new_record_txt'] = 'Adicionar novo Grupo';
?>
interface/web/admin/lib/lang/br_language_add.lng
New file
@@ -0,0 +1,9 @@
<?php
$wb['list_head_txt'] = 'Adcionar novo idioma';
$wb['language_select_txt'] = 'Selecione o idioma base';
$wb['language_new_txt'] = 'Novo Idioma';
$wb['language_new_hint_txt'] = '2 letras código ISO 639-1 (Veja http://en.wikipedia.org/wiki/List_of_ISO_639-1_codes)';
$wb['btn_save_txt'] = 'Criar um novo conjunto de idioma';
$wb['btn_cancel_txt'] = 'Voltar';
?>
interface/web/admin/lib/lang/br_language_complete.lng
New file
@@ -0,0 +1,8 @@
<?php
$wb['list_head_txt'] = 'Mesclar Idioma';
$wb['list_desc_txt'] = 'Mesclar o arquivo de idioma selecionado com o arquivo de idioma principal (em inglês). <br />Isto permite completar qualquer falha de tradução, com o arquivo principal original em inglês.';
$wb['language_select_txt'] = 'Selecionar Idioma';
$wb['btn_save_txt'] = 'Mesclar arquivos agora';
$wb['btn_cancel_txt'] = 'Voltar';
?>
interface/web/admin/lib/lang/br_language_edit.lng
New file
@@ -0,0 +1,9 @@
<?php
$wb['list_head_txt'] = 'Editor de Arquivos de Idioma';
$wb['language_select_txt'] = 'Selecione o idioma';
$wb['module_txt'] = 'Módulo';
$wb['lang_file_txt'] = 'Arquivo de Idioma';
$wb['btn_save_txt'] = 'Salvar';
$wb['btn_cancel_txt'] = 'Voltar';
?>
interface/web/admin/lib/lang/br_language_export.lng
New file
@@ -0,0 +1,7 @@
<?php
$wb['list_head_txt'] = 'Exportar arquivos de idioma';
$wb['language_select_txt'] = 'Selecione o idioma';
$wb['btn_save_txt'] = 'Exportar idioma selecionado para um arquivo';
$wb['btn_cancel_txt'] = 'Voltar';
?>
interface/web/admin/lib/lang/br_language_import.lng
New file
@@ -0,0 +1,7 @@
<?php
$wb["list_head_txt"] = 'Importar arquivo de idioma';
$wb["language_import_txt"] = 'Buscar arquivo de idioma';
$wb['btn_save_txt'] = 'Importar Arquivo de Idioma Selecionado';
$wb["language_overwrite_txt"] = 'Sobre escrever o arquivo se existir.';
$wb['btn_cancel_txt'] = 'Voltar';
?>
interface/web/admin/lib/lang/br_language_list.lng
New file
@@ -0,0 +1,8 @@
<?php
$wb['list_head_txt'] = 'Editor de arquivo de idioma';
$wb['language_select_txt'] = 'Selecione o idioma';
$wb['module_txt'] = 'Módulo';
$wb['lang_file_txt'] = 'Arquido de Idioma';
$wb['lang_file_date_txt'] = 'Ultima Modificação';
?>
interface/web/admin/lib/lang/br_server.lng
New file
@@ -0,0 +1,12 @@
<?php
$wb['config_txt'] = 'Configuração';
$wb['server_name_txt'] = 'Nome do Servidor';
$wb['mail_server_txt'] = 'Servidor de Mail';
$wb['web_server_txt'] = 'Servidor Web';
$wb['dns_server_txt'] = 'Servidor DNS';
$wb['file_server_txt'] = 'Servidor de Arquivo';
$wb['db_server_txt'] = 'Servidor de Banco de Dados';
$wb['vserver_server_txt'] = 'Servidor VServer';
$wb['active_txt'] = 'Ativado';
?>
interface/web/admin/lib/lang/br_server_config.lng
New file
@@ -0,0 +1,42 @@
<?php
$wb['jailkit_chroot_home_txt'] = 'Chroot Jailkit home';
$wb['jailkit_chroot_app_sections_txt'] = 'Aplicações Jailkit chroot (Sessões)';
$wb['jailkit_chroot_app_programs_txt'] = 'Aplicações Jailkit em ambiente chroot';
$wb['website_path_txt'] = 'Website path';
$wb['website_symlinks_txt'] = 'Website symlinks: link simbólico';
$wb['website_basedir_txt'] = 'Website basedir: Diretório base ';
$wb['vhost_conf_dir_txt'] = 'Vhost config dir';
$wb['vhost_conf_enabled_dir_txt'] = 'Vhost diretório de configuração ativo';
$wb['getmail_config_dir_txt'] = 'Getmail config dir';
$wb['fastcgi_starter_path_txt'] = 'FastCGI: Caminho diretório inicial';
$wb['fastcgi_starter_script_txt'] = 'FastCGI: Script inicial';
$wb['fastcgi_alias_txt'] = 'FastCGI: Alias';
$wb['fastcgi_phpini_path_txt'] = 'FastCGI: Caminho do php.ini ';
$wb['fastcgi_children_txt'] = 'FastCGI: Filhos';
$wb['fastcgi_max_requests_txt'] = 'FastCGI: Requisições máximas';
$wb['fastcgi_bin_txt'] = 'FastCGI Bin';
$wb['module_txt'] = 'Módulo';
$wb['maildir_path_txt'] = 'Caminho do diretório Maildir';
$wb['homedir_path_txt'] = 'Caminho do diretório Home';
$wb['mailuser_uid_txt'] = 'UID usuário de email';
$wb['mailuser_gid_txt'] = 'GID usuário de email';
$wb['mailuser_name_txt'] = 'Nome usuário de email';
$wb['mailuser_group_txt'] = 'Grupo usuário de email';
$wb['relayhost_txt'] = 'Host Relay';
$wb['relayhost_user_txt'] = 'Usuário do Host Relay';
$wb['relayhost_password_txt'] = 'Senha do Host Relay';
$wb['mailbox_size_limit_txt'] = 'Tamanho máximo da Caixa Postal';
$wb['message_size_limit_txt'] = 'Tamanho máximo de mensagem';
$wb['ip_address_txt'] = 'Endereço IP';
$wb['netmask_txt'] = 'Máscara de Rede';
$wb['gateway_txt'] = 'Gateway';
$wb['hostname_txt'] = 'Nome do Host';
$wb['nameservers_txt'] = 'Servidores DNS';
$wb['auto_network_configuration_txt'] = 'Configuração de Rede';
$wb['ip_address_error_wrong'] = 'Formato do Endereço IP inválido!';
$wb['netmask_error_wrong'] = 'Formato da Máscara de Rede inválio!';
$wb['gateway_error_wrong'] = 'Gateway inválido!';
$wb['hostname_error_empty'] = 'Por favor, entre com o nome do Host.';
$wb['nameservers_error_empty'] = 'Por favor, entre com  o Servidor DNS.';
?>
interface/web/admin/lib/lang/br_server_config_list.lng
New file
@@ -0,0 +1,5 @@
<?php
$wb['list_head_txt'] = 'Configuração do Servidor';
$wb['server_name_txt'] = 'Servidor';
?>
interface/web/admin/lib/lang/br_server_ip.lng
New file
@@ -0,0 +1,7 @@
<?php
$wb['server_id_txt'] = 'Servidor';
$wb['ip_address_txt'] = 'Endereço IP';
$wb['virtualhost_txt'] = 'Nome VirtualHost HTTP';
$wb['ip_err'] = 'Endereço IP inválido!';
?>
interface/web/admin/lib/lang/br_server_ip_list.lng
New file
@@ -0,0 +1,7 @@
<?php
$wb['list_head_txt'] = 'Endereço IP';
$wb['server_id_txt'] = 'Servidor';
$wb['ip_address_txt'] = 'Endereço IP';
$wb['add_new_record_txt'] = 'Adicionar novo Endereço IP';
?>
interface/web/admin/lib/lang/br_server_list.lng
New file
@@ -0,0 +1,12 @@
<?php
$wb['list_head_txt'] = 'Servidor';
$wb['server_name_txt'] = 'Nome';
$wb['mail_server_txt'] = 'Mail';
$wb['web_server_txt'] = 'Web';
$wb['dns_server_txt'] = 'DNS';
$wb['file_server_txt'] = 'Arquivo';
$wb['db_server_txt'] = 'Banco de Dados';
$wb['vserver_server_txt'] = 'VServer';
$wb['add_new_record_txt'] = 'Adicionar novo Servidor';
?>
interface/web/admin/lib/lang/br_software_package_list.lng
New file
@@ -0,0 +1,8 @@
<?php
$wb['list_head_txt'] = 'Pacotes de Software';
$wb['installed_txt'] = 'Status';
$wb['package_title_txt'] = 'Pacote';
$wb['package_description_txt'] = 'Descrição';
$wb['action_txt'] = 'Acão';
?>
interface/web/admin/lib/lang/br_software_repo.lng
New file
@@ -0,0 +1,8 @@
<?php
$wb['repo_name_txt'] = 'Repositório';
$wb['repo_url_txt'] = 'URL';
$wb['repo_username_txt'] = 'Usuário (opcional)';
$wb['repo_password_txt'] = 'Senha (opcional)';
$wb['active_txt'] = 'Ativo';
?>
interface/web/admin/lib/lang/br_software_repo_list.lng
New file
@@ -0,0 +1,6 @@
<?php
$wb["list_head_txt"] = 'Repositório';
$wb["active_txt"] = 'Ativo';
$wb["repo_name_txt"] = 'Repositório';
$wb["repo_url_txt"] = 'URL';
?>
interface/web/admin/lib/lang/br_software_update_list.lng
New file
@@ -0,0 +1,9 @@
<?php
$wb['list_head_txt'] = 'Atualizações de Programas';
$wb['server_select_txt'] = 'Selecione o servidor';
$wb['installed_txt'] = 'Ações';
$wb['update_title_txt'] = 'Atualizar';
$wb['version_txt'] = 'Versão';
$wb['action_txt'] = 'Ação';
?>
interface/web/admin/lib/lang/br_system_config.lng
New file
@@ -0,0 +1,14 @@
<?php
$wb['warning'] = 'Edite estes valores com cuidado! Não remova os prefixos em um sistema com mais de um cliente!!';
$wb['dbname_prefix_txt'] = 'Prefixo Nome do Banco de Dados';
$wb['dbuser_prefix_txt'] = 'Prefixo Usuário do Banco de Dados';
$wb['shelluser_prefix_txt'] = 'Prefixo Usuário de Shell';
$wb['ftpuser_prefix_txt'] = 'Prefixo Usuário FTP';
$wb['dbname_prefix_error_regex'] = 'Caractere não permitido para o prefixo do nome do Banco de Dados!';
$wb['dbuser_prefix_error_regex'] = 'Caractere não permitido para o prefixo do Usuário do Banco de Dados!';
$wb['ftpuser_prefix_error_regex'] = 'Caractere não permitido para o prefixo do Usuário FTP!';
$wb['shelluser_prefix_error_regex'] = 'Caractere não permitido para o prefixo do Usuário Shell!';
$wb['dblist_phpmyadmin_link_txt'] = 'Link para phpmyadmin';
$wb['mailboxlist_webmail_link_txt'] = 'Link para o webmail';
?>
interface/web/admin/lib/lang/br_users.lng
New file
@@ -0,0 +1,29 @@
<?php
$wb['username_txt'] = 'Usuário';
$wb['username_err'] = 'O Nome do Usuário é muito longo ou contém caracteres inválidos!';
$wb['username_empty'] = 'Por favor, entre com o nome do Usuário.';
$wb['username_unique'] = 'Já existe um Usuário com este nome!';
$wb['passwort_txt'] = 'Senha';
$wb['password_strength_txt'] = 'Segurança da Senha';
$wb['modules_txt'] = 'Módulos';
$wb['startmodule_txt'] = 'Módulo Inicial';
$wb['app_theme_txt'] = 'Tema';
$wb['typ_txt'] = 'Tipo';
$wb['active_txt'] = 'Ativo';
$wb['language_txt'] = 'Idioma';
$wb['name_txt'] = 'Nome';
$wb['vorname_txt'] = 'Sobrenome';
$wb['unternehmen_txt'] = 'Empresa';
$wb['strasse_txt'] = 'Endereço';
$wb['ort_txt'] = 'Cidade';
$wb['plz_txt'] = 'CEP';
$wb['land_txt'] = 'País';
$wb['email_txt'] = 'E-mail';
$wb['url_txt'] = 'Site';
$wb['telefon_txt'] = 'Telefone';
$wb['fax_txt'] = 'Fax';
$wb['groups_txt'] = 'Grupos';
$wb['default_group_txt'] = 'Grupo Padrão';
$wb['startmodule_err'] = 'O módulo inicial não está contido nos módulos.';
?>
interface/web/admin/lib/lang/br_users_list.lng
New file
@@ -0,0 +1,8 @@
<?php
$wb["list_head_txt"] = 'Usuários';
$wb["username_txt"] = 'Nome de Usuário';
$wb["name_txt"] = 'Nome';
$wb["vorname_txt"] = 'Sobrenome';
$wb["ort_txt"] = 'cidade';
$wb["add_new_record_txt"] = 'Adcionar novo usuário';
?>
interface/web/admin/lib/lang/de_server_config.lng
@@ -2,6 +2,7 @@
$wb['jailkit_chroot_home_txt'] = 'Jailkit chroot home';
$wb['jailkit_chroot_app_sections_txt'] = 'Jailkit chroot app sections';
$wb['jailkit_chroot_app_programs_txt'] = 'Jailkit chrooted applications';
$wb['jailkit_chroot_cron_programs_txt'] = 'Jailkit cron chrooted applications';
$wb['website_path_txt'] = 'Website path';
$wb['website_symlinks_txt'] = 'Website symlinks';
$wb['vhost_conf_dir_txt'] = 'Vhost config dir';
@@ -38,4 +39,9 @@
$wb['gateway_error_wrong'] = 'Invalid Gateway format.';
$wb['hostname_error_empty'] = 'Hostname is empty.';
$wb['nameservers_error_empty'] = 'Nameserver is empty.';
$wb['config_dir_txt'] = 'Config directory';
$wb['init_script_txt'] = 'Cron init script name';
$wb['crontab_dir_txt'] = 'Path for individual crontabs';
$wb['wget_txt'] = 'Path to wget program';
$wb['security_level_txt'] = 'Security level';
?>
interface/web/admin/lib/lang/en_firewall.lng
@@ -6,4 +6,7 @@
$wb["udp_port_help_txt"] = 'Separated by comma';
$wb["active_txt"] = 'Active';
$wb["firewall_error_unique"] = 'There is already a firewall record for this server.';
$wb["active_txt"] = 'Active';
$wb["tcp_ports_error_regex"] = 'Character not allowed in tcp port definition. Allowed characters are numbers, ":" and ",".';
$wb["udp_ports_error_regex"] = 'Character not allowed in udp port definition. Allowed characters are numbers, ":" and ",".';
?>
interface/web/admin/lib/lang/en_server_config.lng
@@ -2,6 +2,7 @@
$wb["jailkit_chroot_home_txt"] = 'Jailkit chroot home';
$wb["jailkit_chroot_app_sections_txt"] = 'Jailkit chroot app sections';
$wb["jailkit_chroot_app_programs_txt"] = 'Jailkit chrooted applications';
$wb['jailkit_chroot_cron_programs_txt'] = 'Jailkit cron chrooted applications';
$wb["website_path_txt"] = 'Website path';
$wb["website_symlinks_txt"] = 'Website symlinks';
$wb["website_basedir_txt"] = 'Website basedir';
@@ -38,4 +39,10 @@
$wb["gateway_error_wrong"] = 'Invalid Gateway format.';
$wb["hostname_error_empty"] = 'Hostname is empty.';
$wb["nameservers_error_empty"] = 'Nameserver is empty.';
$wb["config_dir_txt"] = 'Config directory';
$wb["init_script_txt"] = 'Cron init script name';
$wb["crontab_dir_txt"] = 'Path for individual crontabs';
$wb["wget_txt"] = 'Path to wget program';
$wb["web_user_txt"] = 'Apache user';
$wb["web_group_txt"] = 'Apache group';
?>
interface/web/admin/lib/lang/es_server_config.lng
@@ -38,4 +38,10 @@
$wb['gateway_error_wrong'] = 'Invalid Gateway format.';
$wb['hostname_error_empty'] = 'Hostname is empty.';
$wb['nameservers_error_empty'] = 'Nameserver is empty.';
$wb['jailkit_chroot_cron_programs_txt'] = 'Jailkit cron chrooted applications';
$wb['config_dir_txt'] = 'Config directory';
$wb['init_script_txt'] = 'Cron init script name';
$wb['crontab_dir_txt'] = 'Path for individual crontabs';
$wb['wget_txt'] = 'Path to wget program';
$wb['security_level_txt'] = 'Security level';
?>
interface/web/admin/lib/lang/fi_server_config.lng
@@ -38,4 +38,10 @@
$wb['gateway_error_wrong'] = 'Invalid Gateway format.';
$wb['hostname_error_empty'] = 'Hostname is empty.';
$wb['nameservers_error_empty'] = 'Nameserver is empty.';
$wb['jailkit_chroot_cron_programs_txt'] = 'Jailkit cron chrooted applications';
$wb['config_dir_txt'] = 'Config directory';
$wb['init_script_txt'] = 'Cron init script name';
$wb['crontab_dir_txt'] = 'Path for individual crontabs';
$wb['wget_txt'] = 'Path to wget program';
$wb['security_level_txt'] = 'Security level';
?>
interface/web/admin/lib/lang/fr_server_config.lng
@@ -38,4 +38,10 @@
$wb['gateway_error_wrong'] = 'Invalid Gateway format.';
$wb['hostname_error_empty'] = 'Hostname is empty.';
$wb['nameservers_error_empty'] = 'Nameserver is empty.';
$wb['jailkit_chroot_cron_programs_txt'] = 'Jailkit cron chrooted applications';
$wb['config_dir_txt'] = 'Config directory';
$wb['init_script_txt'] = 'Cron init script name';
$wb['crontab_dir_txt'] = 'Path for individual crontabs';
$wb['wget_txt'] = 'Path to wget program';
$wb['security_level_txt'] = 'Security level';
?>
interface/web/admin/lib/lang/it_server_config.lng
@@ -38,4 +38,10 @@
$wb['gateway_error_wrong'] = 'Invalid Gateway format.';
$wb['hostname_error_empty'] = 'Hostname is empty.';
$wb['nameservers_error_empty'] = 'Nameserver is empty.';
$wb['jailkit_chroot_cron_programs_txt'] = 'Jailkit cron chrooted applications';
$wb['config_dir_txt'] = 'Config directory';
$wb['init_script_txt'] = 'Cron init script name';
$wb['crontab_dir_txt'] = 'Path for individual crontabs';
$wb['wget_txt'] = 'Path to wget program';
$wb['security_level_txt'] = 'Security level';
?>
interface/web/admin/lib/lang/nl_server_config.lng
@@ -38,4 +38,10 @@
$wb['gateway_error_wrong'] = 'Invalid Gateway format.';
$wb['hostname_error_empty'] = 'Hostname is empty.';
$wb['nameservers_error_empty'] = 'Nameserver is empty.';
$wb['jailkit_chroot_cron_programs_txt'] = 'Jailkit cron chrooted applications';
$wb['config_dir_txt'] = 'Config directory';
$wb['init_script_txt'] = 'Cron init script name';
$wb['crontab_dir_txt'] = 'Path for individual crontabs';
$wb['wget_txt'] = 'Path to wget program';
$wb['security_level_txt'] = 'Security level';
?>
interface/web/admin/lib/lang/ru_server_config.lng
@@ -38,4 +38,10 @@
$wb['gateway_error_wrong'] = 'Invalid Gateway format.';
$wb['hostname_error_empty'] = 'Hostname is empty.';
$wb['nameservers_error_empty'] = 'Nameserver is empty.';
$wb['jailkit_chroot_cron_programs_txt'] = 'Jailkit cron chrooted applications';
$wb['config_dir_txt'] = 'Config directory';
$wb['init_script_txt'] = 'Cron init script name';
$wb['crontab_dir_txt'] = 'Path for individual crontabs';
$wb['wget_txt'] = 'Path to wget program';
$wb['security_level_txt'] = 'Security level';
?>
interface/web/admin/lib/lang/se_server_config.lng
@@ -38,4 +38,10 @@
$wb['gateway_error_wrong'] = 'Invalid Gateway format.';
$wb['hostname_error_empty'] = 'Hostname is empty.';
$wb['nameservers_error_empty'] = 'Nameserver is empty.';
$wb['jailkit_chroot_cron_programs_txt'] = 'Jailkit cron chrooted applications';
$wb['config_dir_txt'] = 'Config directory';
$wb['init_script_txt'] = 'Cron init script name';
$wb['crontab_dir_txt'] = 'Path for individual crontabs';
$wb['wget_txt'] = 'Path to wget program';
$wb['security_level_txt'] = 'Security level';
?>
interface/web/admin/software_package_list.php
@@ -62,7 +62,46 @@
                }
            }
        }
        $packages = $app->db->queryAllRecords("SELECT software_package.package_name, v1, v2, v3, v4 FROM software_package LEFT JOIN software_update ON ( software_package.package_name = software_update.package_name ) GROUP BY package_name ORDER BY v1 DESC , v2 DESC , v3 DESC , v4 DESC");
        if(is_array($packages)) {
            foreach($packages as $p) {
                $version = $p['v1'].'.'.$p['v2'].'.'.$p['v3'].'.'.$p['v4'];
                $updates = $client->get_updates($p['package_name'], $version,$repo['repo_username'], $repo['repo_password']);
                if(is_array($updates)) {
                    foreach($updates as $u) {
                        $version_array = explode('.',$u['version']);
                        $v1 = intval($version_array[0]);
                        $v2 = intval($version_array[1]);
                        $v3 = intval($version_array[2]);
                        $v4 = intval($version_array[3]);
                        $package_name = $app->db->quote($u['package_name']);
                        $software_repo_id = intval($repo['software_repo_id']);
                        $update_url = $app->db->quote($u['url']);
                        $update_md5 = $app->db->quote($u['md5']);
                        $update_dependencies = (isset($u['dependencies']))?$app->db->quote($u['dependencies']):'';
                        $update_title = $app->db->quote($u['title']);
                        $type = $app->db->quote($u['type']);
                        // Check that we do not have this update in the database yet
                        $sql = "SELECT * FROM software_update WHERE package_name = '$package_name' and v1 = '$v1' and v2 = '$v2' and v3 = '$v3' and v4 = '$v4'";
                        $tmp = $app->db->queryOneRecord($sql);
                        if(!isset($tmp['software_update_id'])) {
                            // Insert the update in the datbase
                            $sql = "INSERT INTO software_update (software_repo_id, package_name, update_url, update_md5, update_dependencies, update_title, v1, v2, v3, v4, type)
                            VALUES ($software_repo_id, '$package_name', '$update_url', '$update_md5', '$update_dependencies', '$update_title', '$v1', '$v2', '$v3', '$v4', '$type')";
                            //die($sql);
                            $app->db->query($sql);
                        }
                    }
                }
            }
        }
    }
}
@@ -74,8 +113,8 @@
    $tmp = $app->db->queryOneRecord($sql);
    $software_update_id = $tmp['software_update_id'];
    
    // $insert_data = "(package_name, server_id, software_update_id, status) VALUES ('$package_name', '$server_id', '$software_update_id','installing')";
    $insert_data = "(package_name, server_id, software_update_id, status) VALUES ('$package_name', '$server_id', '$software_update_id','installed')";
    $insert_data = "(package_name, server_id, software_update_id, status) VALUES ('$package_name', '$server_id', '$software_update_id','installing')";
    // $insert_data = "(package_name, server_id, software_update_id, status) VALUES ('$package_name', '$server_id', '$software_update_id','installed')";
    $app->db->datalogInsert('software_update_inst', $insert_data, 'software_update_inst_id');
    
}
@@ -100,8 +139,10 @@
            
            if($inst['status'] == 'installed') {
                $installed_txt .= $s['server_name'].": Installed version $version<br />";
            } elseif ($inst['status'] == 'installing') {
                $installed_txt .= $s['server_name'].": Installation in progress<br />";
            } elseif ($inst['status'] == 'installing') {
                $installed_txt .= $s['server_name'].": Installation in progress<br />";
            } elseif ($inst['status'] == 'failed') {
                $installed_txt .= $s['server_name'].": Installation failed<br />";
            } elseif ($inst['status'] == 'deleting') {
                $installed_txt .= $s['server_name'].": Deletion in progress<br />";
            } else {
interface/web/admin/software_update_list.php
@@ -104,8 +104,8 @@
    $server_id = intval($_GET['server_id']);
    $software_update_id = intval($_GET['id']);
    
    // $insert_data = "(package_name, server_id, software_update_id, status) VALUES ('$package_name', '$server_id', '$software_update_id','installing')";
    $insert_data = "(package_name, server_id, software_update_id, status) VALUES ('$package_name', '$server_id', '$software_update_id','installed')";
    $insert_data = "(package_name, server_id, software_update_id, status) VALUES ('$package_name', '$server_id', '$software_update_id','installing')";
    // $insert_data = "(package_name, server_id, software_update_id, status) VALUES ('$package_name', '$server_id', '$software_update_id','installed')";
    $app->db->datalogInsert('software_update_inst', $insert_data, 'software_update_inst_id');
    
}
interface/web/admin/templates/language_export.htm
@@ -1,24 +1,28 @@
<h2><tmpl_var name="list_head_txt"></h2>
<p><tmpl_var name="list_desc_txt"></p>
<div class="panel panel_language_export">
  <div class="pnl_formsarea">
    <fieldset class="inlineLabels"><legend>Language Export</legend>
      <div class="ctrlHolder">
          <label for="lng_select">{tmpl_var name='language_select_txt'}</label>
        <select name="lng_select" id="language" class="selectInput withicons">
                    {tmpl_var name='language_option'}
                </select>
      </div>
    </fieldset>
    <input type="hidden" name="id" value="{tmpl_var name='id'}">
    <div class="buttonHolder buttons">
      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','admin/language_export.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('admin/language_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
    </div>
  </div>
</div>
<h2><tmpl_var name="list_head_txt"></h2>
<p><tmpl_var name="list_desc_txt"></p>
<div class="panel panel_language_export">
  <div class="pnl_formsarea">
    <fieldset class="inlineLabels"><legend>Language Export</legend>
      <div class="ctrlHolder">
          <label for="lng_select">{tmpl_var name='language_select_txt'}</label>
        <select name="lng_select" id="lng_select" class="selectInput withicons">
                    {tmpl_var name='language_option'}
                </select>
      </div>
    </fieldset>
    <tmpl_if name="msg">
    <div id="OKMsg"><p><tmpl_var name="msg"></p></div>
    </tmpl_if>
    <input type="hidden" name="id" value="{tmpl_var name='id'}">
    <div class="buttonHolder buttons">
      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','admin/language_export.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('admin/language_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
    </div>
  </div>
</div>
interface/web/admin/templates/language_import.htm
@@ -1,28 +1,35 @@
<h2><tmpl_var name="list_head_txt"></h2>
<p><tmpl_var name="list_desc_txt"></p>
<div class="panel panel_language_import">
  <div class="pnl_formsarea">
    <fieldset class="inlineLabels"><legend>Language Import</legend>
      <div class="ctrlHolder">
          <label for="lng_select"><em>*</em> {tmpl_var name='language_import_txt'}</label>
          <input name="file" id="file" size="30" type="file" class="fileUpload" />
      </div>
      <div class="ctrlHolder">
                <p class="label">{tmpl_var name='language_overwrite_txt'}</p>
                    <div class="multiField">
                        <input id="overwrite" type="checkbox" value="1" name="overwrite"/>
                    </div>
            </div>
    </fieldset>
    <input type="hidden" name="id" value="{tmpl_var name='id'}">
    <div class="buttonHolder buttons">
      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitUploadForm('pageForm','admin/language_import.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('admin/language_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
    </div>
  </div>
</div>
<h2><tmpl_var name="list_head_txt"></h2>
<p><tmpl_var name="list_desc_txt"></p>
<div class="panel panel_language_import">
  <div class="pnl_formsarea">
    <fieldset class="inlineLabels"><legend>Language Import</legend>
      <div class="ctrlHolder">
          <label for="lng_select"><em>*</em> {tmpl_var name='language_import_txt'}</label>
          <input name="file" id="file" size="30" type="file" class="fileUpload" />
      </div>
      <div class="ctrlHolder">
                <p class="label">{tmpl_var name='language_overwrite_txt'}</p>
                    <div class="multiField">
                        <input id="overwrite" type="checkbox" value="1" name="overwrite"/>
                    </div>
            </div>
    </fieldset>
    <tmpl_if name="msg">
    <div id="OKMsg"><p><tmpl_var name="msg"></p></div>
  </tmpl_if>
  <tmpl_if name="error">
    <div id="errorMsg"><h3>ERROR</h3><ol><tmpl_var name="error"></ol></div>
  </tmpl_if>
    <input type="hidden" name="id" value="{tmpl_var name='id'}">
    <div class="buttonHolder buttons">
      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitUploadForm('pageForm','admin/language_import.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('admin/language_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
    </div>
  </div>
</div>
interface/web/admin/templates/server_config_cron_edit.htm
New file
@@ -0,0 +1,30 @@
<h2><tmpl_var name="list_head_txt"></h2>
<p><tmpl_var name="list_desc_txt"></p>
<div class="panel panel_server_config">
  <div class="pnl_formsarea">
    <fieldset class="inlineLabels">
      <div class="ctrlHolder">
        <label for="init_script">{tmpl_var name='init_script_txt'}</label>
        <input name="init_script" id="init_script" value="{tmpl_var name='init_script'}" size="40" maxlength="255" type="text" class="textInput" />
            </div>
      <div class="ctrlHolder">
        <label for="crontab_dir">{tmpl_var name='crontab_dir_txt'}</label>
        <input name="crontab_dir" id="crontab_dir" value="{tmpl_var name='crontab_dir'}" size="40" maxlength="255" type="text" class="textInput" />
            </div>
      <div class="ctrlHolder">
        <label for="wget">{tmpl_var name='wget_txt'}</label>
        <input name="wget" id="wget" value="{tmpl_var name='wget'}" size="40" maxlength="255" type="text" class="textInput" />
            </div>
    </fieldset>
    <input type="hidden" name="id" value="{tmpl_var name='id'}">
    <div class="buttonHolder buttons">
      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','admin/server_config_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('admin/server_config_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
    </div>
  </div>
</div>
interface/web/admin/templates/server_config_jailkit_edit.htm
@@ -17,6 +17,10 @@
          <label for="jailkit_chroot_app_programs">{tmpl_var name='jailkit_chroot_app_programs_txt'}</label>
        <input name="jailkit_chroot_app_programs" id="jailkit_chroot_app_programs" value="{tmpl_var name='jailkit_chroot_app_programs'}" size="40" maxlength="1000" type="text" class="textInput" />
            </div>
      <div class="ctrlHolder">
        <label for="jailkit_chroot_cron_programs">{tmpl_var name='jailkit_chroot_cron_programs_txt'}</label>
        <input name="jailkit_chroot_cron_programs" id="jailkit_chroot_cron_programs" value="{tmpl_var name='jailkit_chroot_cron_programs'}" size="40" maxlength="1000" type="text" class="textInput" />
            </div>
    </fieldset>
    <input type="hidden" name="id" value="{tmpl_var name='id'}">
interface/web/admin/templates/server_config_list.htm
@@ -1,50 +1,40 @@
<h2><tmpl_var name="list_head_txt"></h2>
<p><tmpl_var name="list_desc_txt"></p>
<div class="panel panel_list_server_config">
  <div class="pnl_toolsarea">
    <fieldset><legend>Tools</legend>
      <div class="buttons">
        <button class="iconstxt icoAdd" type="button" onClick="loadContent('admin/server_config_edit.php');">
          <span>{tmpl_var name="add_new_record_txt"}</span>
        </button>
      </div>
    </fieldset>
  </div>
  <div class="pnl_listarea">
    <fieldset><legend><tmpl_var name="list_head_txt"></legend>
      <table class="list">
        <thead>
          <tr>
            <th class="tbl_col_server_name" scope="col"><tmpl_var name="server_name_txt"></th>
            <th class="tbl_col_buttons" scope="col">&nbsp;</th>
          </tr>
          <tr>
            <td class="tbl_col_server_name"><input type="text" name="search_server_name" value="{tmpl_var name='search_server_name'}" /></td>
            <td class="tbl_col_buttons"><div class="buttons"><button type="button" class="icons16 icoFilter" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" onClick="submitForm('pageForm','admin/server_config_list.php');"><span>{tmpl_var name="filter_txt"}</span></button></div></td>
          </tr>
        </thead>
        <tbody>
          <tmpl_loop name="records">
          <tr class="tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
            <td class="tbl_col_server_name"><a href="#" onClick="loadContent('admin/server_config_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="server_name"}</a></td>
            <td class="tbl_col_buttons">
              <div class="buttons icons16">
                <a class="icons16 icoDelete" href="javascript: del_record('admin/server_config_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span>{tmpl_var name='delete_txt'}</span></a>
              </div>
            </td>
          </tr>
          </tmpl_loop>
        </tbody>
        <tfoot>
          <tr>
            <td class="tbl_footer tbl_paging" colspan="2"><tmpl_var name="paging"></td>
          </tr>
        </tfoot>
      </table>
    </fieldset>
  </div>
</div>
<h2><tmpl_var name="list_head_txt"></h2>
<p><tmpl_var name="list_desc_txt"></p>
<div class="panel panel_list_server_config">
  <div class="pnl_listarea">
    <fieldset><legend><tmpl_var name="list_head_txt"></legend>
      <table class="list">
        <thead>
          <tr>
            <th class="tbl_col_server_name" scope="col"><tmpl_var name="server_name_txt"></th>
            <th class="tbl_col_buttons" scope="col">&nbsp;</th>
          </tr>
          <tr>
            <td class="tbl_col_server_name"><input type="text" name="search_server_name" value="{tmpl_var name='search_server_name'}" /></td>
            <td class="tbl_col_buttons"><div class="buttons"><button type="button" class="icons16 icoFilter" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" onClick="submitForm('pageForm','admin/server_config_list.php');"><span>{tmpl_var name="filter_txt"}</span></button></div></td>
          </tr>
        </thead>
        <tbody>
          <tmpl_loop name="records">
          <tr class="tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
            <td class="tbl_col_server_name"><a href="#" onClick="loadContent('admin/server_config_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="server_name"}</a></td>
            <td class="tbl_col_buttons">
              <div class="buttons icons16">
                <a class="icons16 icoDelete" href="javascript: del_record('admin/server_config_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span>{tmpl_var name='delete_txt'}</span></a>
              </div>
            </td>
          </tr>
          </tmpl_loop>
        </tbody>
        <tfoot>
          <tr>
            <td class="tbl_footer tbl_paging" colspan="2"><tmpl_var name="paging"></td>
          </tr>
        </tfoot>
      </table>
    </fieldset>
  </div>
</div>
interface/web/admin/templates/server_config_vlogger_edit.htm
New file
@@ -0,0 +1,22 @@
<h2><tmpl_var name="list_head_txt"></h2>
<p><tmpl_var name="list_desc_txt"></p>
<div class="panel panel_server_config">
  <div class="pnl_formsarea">
    <fieldset class="inlineLabels">
      <div class="ctrlHolder">
          <label for="config_dir">{tmpl_var name='config_dir_txt'}</label>
        <input name="config_dir" id="config_dir" value="{tmpl_var name='config_dir'}" size="40" maxlength="255" type="text" class="textInput" />
            </div>
    </fieldset>
    <input type="hidden" name="id" value="{tmpl_var name='id'}">
    <div class="buttonHolder buttons">
      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','admin/server_config_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('admin/server_config_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
    </div>
  </div>
</div>
interface/web/admin/templates/server_config_web_edit.htm
@@ -25,6 +25,22 @@
          <label for="vhost_conf_enabled_dir">{tmpl_var name='vhost_conf_enabled_dir_txt'}</label>
        <input name="vhost_conf_enabled_dir" id="vhost_conf_enabled_dir" value="{tmpl_var name='vhost_conf_enabled_dir'}" size="40" maxlength="255" type="text" class="textInput" />
            </div>
      <div class="ctrlHolder">
                <p class="label">{tmpl_var name='security_level_txt'}</p>
                    <div class="multiField">
                        <select name="security_level" id="security_level" class="selectInput">
                    {tmpl_var name='security_level'}
                </select>
                    </div>
            </div>
      <div class="ctrlHolder">
          <label for="user">{tmpl_var name='web_user_txt'}</label>
        <input name="user" id="user" value="{tmpl_var name='user'}" size="40" maxlength="255" type="text" class="textInput" />
            </div>
      <div class="ctrlHolder">
          <label for="group">{tmpl_var name='web_group_txt'}</label>
        <input name="group" id="group" value="{tmpl_var name='group'}" size="40" maxlength="255" type="text" class="textInput" />
            </div>
    </fieldset>
    <input type="hidden" name="id" value="{tmpl_var name='id'}">
interface/web/admin/templates/server_list.htm
@@ -1,68 +1,58 @@
<h2><tmpl_var name="list_head_txt"></h2>
<p><tmpl_var name="list_desc_txt"></p>
<div class="panel panel_list_server">
  <div class="pnl_toolsarea">
    <fieldset><legend>Tools</legend>
      <div class="buttons">
        <button class="iconstxt icoAdd" type="button" onClick="loadContent('admin/server_edit.php');">
          <span>{tmpl_var name="add_new_record_txt"}</span>
        </button>
      </div>
    </fieldset>
  </div>
  <div class="pnl_listarea">
    <fieldset><legend><tmpl_var name="list_head_txt"></legend>
      <table class="list">
        <thead>
          <tr>
            <th class="tbl_col_server_name" scope="col"><tmpl_var name="server_name_txt"></th>
            <th class="tbl_col_mail_server" scope="col"><tmpl_var name="mail_server_txt"></th>
            <th class="tbl_col_web_server" scope="col"><tmpl_var name="web_server_txt"></th>
            <th class="tbl_col_dns_server" scope="col"><tmpl_var name="dns_server_txt"></th>
            <th class="tbl_col_file_server" scope="col"><tmpl_var name="file_server_txt"></th>
            <th class="tbl_col_db_server" scope="col"><tmpl_var name="db_server_txt"></th>
            <th class="tbl_col_vserver_server" scope="col"><tmpl_var name="vserver_server_txt"></th>
            <th class="tbl_col_buttons" scope="col">&nbsp;</th>
          </tr>
          <tr>
            <td class="tbl_col_server_name"><input type="text" name="search_server_name" value="{tmpl_var name='search_server_name'}" /></td>
            <td class="tbl_col_mail_server"><select name="search_active" onChange="submitForm('pageForm','admin/server_list.php');">{tmpl_var name='search_mail_server'}</select></td>
            <td class="tbl_col_web_server"><select name="search_active" onChange="submitForm('pageForm','admin/server_list.php');">{tmpl_var name='search_web_server'}</select></td>
            <td class="tbl_col_dns_server"><select name="search_active" onChange="submitForm('pageForm','admin/server_list.php');">{tmpl_var name='search_dns_server'}</select></td>
            <td class="tbl_col_file_server"><select name="search_active" onChange="submitForm('pageForm','admin/server_list.php');">{tmpl_var name='search_file_server'}</select></td>
            <td class="tbl_col_db_server"><select name="search_active" onChange="submitForm('pageForm','admin/server_list.php');">{tmpl_var name='search_db_server'}</select></td>
            <td class="tbl_col_vserver_server"><select name="search_active" onChange="submitForm('pageForm','admin/server_list.php');">{tmpl_var name='search_vserver_server'}</select></td>
            <td class="tbl_col_buttons"><div class="buttons"><button type="button" class="icons16 icoFilter" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" onClick="submitForm('pageForm','admin/server_list.php');"><span>{tmpl_var name="filter_txt"}</span></button></div></td>
          </tr>
        </thead>
        <tbody>
          <tmpl_loop name="records">
          <tr class="tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
            <td class="tbl_col_server_name"><a href="#" onClick="loadContent('admin/server_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="server_name"}</a></td>
            <td class="tbl_col_mail_server">{tmpl_var name="mail_server"}</td>
            <td class="tbl_col_web_server">{tmpl_var name="web_server"}</td>
            <td class="tbl_col_dns_server">{tmpl_var name="dns_server"}</td>
            <td class="tbl_col_file_server">{tmpl_var name="file_server"}</td>
            <td class="tbl_col_db_server">{tmpl_var name="db_server"}</td>
            <td class="tbl_col_vserver_server">{tmpl_var name="vserver_server"}</td>
            <td class="tbl_col_buttons">
              <div class="buttons icons16">
                <a class="icons16 icoDelete" href="javascript: del_record('admin/server_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span>{tmpl_var name='delete_txt'}</span></a>
              </div>
            </td>
          </tr>
          </tmpl_loop>
        </tbody>
        <tfoot>
          <tr>
            <td class="tbl_footer tbl_paging" colspan="8"><tmpl_var name="paging"></td>
          </tr>
        </tfoot>
      </table>
    </fieldset>
  </div>
</div>
<h2><tmpl_var name="list_head_txt"></h2>
<p><tmpl_var name="list_desc_txt"></p>
<div class="panel panel_list_server">
  <div class="pnl_listarea">
    <fieldset><legend><tmpl_var name="list_head_txt"></legend>
      <table class="list">
        <thead>
          <tr>
            <th class="tbl_col_server_name" scope="col"><tmpl_var name="server_name_txt"></th>
            <th class="tbl_col_mail_server" scope="col"><tmpl_var name="mail_server_txt"></th>
            <th class="tbl_col_web_server" scope="col"><tmpl_var name="web_server_txt"></th>
            <th class="tbl_col_dns_server" scope="col"><tmpl_var name="dns_server_txt"></th>
            <th class="tbl_col_file_server" scope="col"><tmpl_var name="file_server_txt"></th>
            <th class="tbl_col_db_server" scope="col"><tmpl_var name="db_server_txt"></th>
            <th class="tbl_col_vserver_server" scope="col"><tmpl_var name="vserver_server_txt"></th>
            <th class="tbl_col_buttons" scope="col">&nbsp;</th>
          </tr>
          <tr>
            <td class="tbl_col_server_name"><input type="text" name="search_server_name" value="{tmpl_var name='search_server_name'}" /></td>
            <td class="tbl_col_mail_server"><select name="search_active" onChange="submitForm('pageForm','admin/server_list.php');">{tmpl_var name='search_mail_server'}</select></td>
            <td class="tbl_col_web_server"><select name="search_active" onChange="submitForm('pageForm','admin/server_list.php');">{tmpl_var name='search_web_server'}</select></td>
            <td class="tbl_col_dns_server"><select name="search_active" onChange="submitForm('pageForm','admin/server_list.php');">{tmpl_var name='search_dns_server'}</select></td>
            <td class="tbl_col_file_server"><select name="search_active" onChange="submitForm('pageForm','admin/server_list.php');">{tmpl_var name='search_file_server'}</select></td>
            <td class="tbl_col_db_server"><select name="search_active" onChange="submitForm('pageForm','admin/server_list.php');">{tmpl_var name='search_db_server'}</select></td>
            <td class="tbl_col_vserver_server"><select name="search_active" onChange="submitForm('pageForm','admin/server_list.php');">{tmpl_var name='search_vserver_server'}</select></td>
            <td class="tbl_col_buttons"><div class="buttons"><button type="button" class="icons16 icoFilter" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" onClick="submitForm('pageForm','admin/server_list.php');"><span>{tmpl_var name="filter_txt"}</span></button></div></td>
          </tr>
        </thead>
        <tbody>
          <tmpl_loop name="records">
          <tr class="tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
            <td class="tbl_col_server_name"><a href="#" onClick="loadContent('admin/server_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="server_name"}</a></td>
            <td class="tbl_col_mail_server">{tmpl_var name="mail_server"}</td>
            <td class="tbl_col_web_server">{tmpl_var name="web_server"}</td>
            <td class="tbl_col_dns_server">{tmpl_var name="dns_server"}</td>
            <td class="tbl_col_file_server">{tmpl_var name="file_server"}</td>
            <td class="tbl_col_db_server">{tmpl_var name="db_server"}</td>
            <td class="tbl_col_vserver_server">{tmpl_var name="vserver_server"}</td>
            <td class="tbl_col_buttons">
              <div class="buttons icons16">
                <a class="icons16 icoDelete" href="javascript: del_record('admin/server_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span>{tmpl_var name='delete_txt'}</span></a>
              </div>
            </td>
          </tr>
          </tmpl_loop>
        </tbody>
        <tfoot>
          <tr>
            <td class="tbl_footer tbl_paging" colspan="8"><tmpl_var name="paging"></td>
          </tr>
        </tfoot>
      </table>
    </fieldset>
  </div>
</div>
interface/web/admin/templates/users_list.htm
@@ -1,60 +1,60 @@
<h2><tmpl_var name="list_head_txt"></h2>
<p><tmpl_var name="list_desc_txt"></p>
<div class="panel panel_list_users">
  <div class="pnl_toolsarea">
    <fieldset><legend>Tools</legend>
      <div class="buttons">
        <button class="iconstxt icoAdd" type="button" onClick="loadContent('admin/users_edit.php');">
          <span>{tmpl_var name="add_new_record_txt"}</span>
        </button>
      </div>
    </fieldset>
  </div>
  <div class="pnl_listarea">
    <fieldset><legend><tmpl_var name="list_head_txt"></legend>
      <table class="list">
        <thead>
          <tr>
            <th class="tbl_col_username" scope="col"><tmpl_var name="username_txt"></th>
            <th class="tbl_col_vorname" scope="col"><tmpl_var name="vorname_txt"></th>
            <th class="tbl_col_name" scope="col"><tmpl_var name="name_txt"></th>
            <th class="tbl_col_ort" scope="col"><tmpl_var name="ort_txt"></th>
            <th class="tbl_col_buttons" scope="col">&nbsp;</th>
          </tr>
          <tr>
            <td class="tbl_col_username"><input type="text" name="search_username" value="{tmpl_var name='search_username'}" /></td>
            <td class="tbl_col_vorname"><input type="text" name="search_vorname" value="{tmpl_var name='search_vorname'}" /></td>
            <td class="tbl_col_name"><input type="text" name="search_name" value="{tmpl_var name='search_name'}" /></td>
            <td class="tbl_col_ort"><input type="text" name="search_ort" value="{tmpl_var name='search_ort'}" /></td>
            <td class="tbl_col_buttons"><div class="buttons"><button type="button" class="icons16 icoFilter" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" onClick="submitForm('pageForm','admin/users_list.php');"><span>{tmpl_var name="filter_txt"}</span></button></div></td>
          </tr>
        </thead>
        <tbody>
          <tmpl_loop name="records">
          <tr class="tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
            <td class="tbl_col_username"><a href="#" onClick="loadContent('admin/users_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="username"}</a></td>
            <td class="tbl_col_vorname"><a href="#" onClick="loadContent('admin/users_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="vorname"}</a></td>
            <td class="tbl_col_name"><a href="#" onClick="loadContent('admin/users_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="name"}</a></td>
            <td class="tbl_col_ort"><a href="#" onClick="loadContent('admin/users_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="ort"}</a></td>
            <td class="tbl_col_buttons">
              <div class="buttons icons16">
                <a class="icons16 icoLoginAs" href="#" onclick="loadContent('admin/login_as.php?id={tmpl_var name='id'}');"><span>{tmpl_var name='login_as_txt'}</span></a>
                <a class="icons16 icoDelete" href="javascript: del_record('admin/users_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span>{tmpl_var name='delete_txt'}</span></a>
              </div>
            </td>
          </tr>
          </tmpl_loop>
        </tbody>
        <tfoot>
          <tr>
            <td class="tbl_footer tbl_paging" colspan="5"><tmpl_var name="paging"></td>
          </tr>
        </tfoot>
      </table>
    </fieldset>
  </div>
</div>
<h2><tmpl_var name="list_head_txt"></h2>
<p><tmpl_var name="list_desc_txt"></p>
<div class="panel panel_list_users">
  <div class="pnl_toolsarea">
    <fieldset><legend>Tools</legend>
      <div class="buttons">
        <button class="iconstxt icoAdd" type="button" onClick="loadContent('admin/users_edit.php');">
          <span>{tmpl_var name="add_new_record_txt"}</span>
        </button>
      </div>
    </fieldset>
  </div>
  <div class="pnl_listarea">
    <fieldset><legend><tmpl_var name="list_head_txt"></legend>
      <table class="list">
        <thead>
          <tr>
            <th class="tbl_col_username" scope="col"><tmpl_var name="username_txt"></th>
            <th class="tbl_col_vorname" scope="col"><tmpl_var name="vorname_txt"></th>
            <th class="tbl_col_name" scope="col"><tmpl_var name="name_txt"></th>
            <th class="tbl_col_ort" scope="col"><tmpl_var name="ort_txt"></th>
            <th class="tbl_col_buttons" scope="col">&nbsp;</th>
          </tr>
          <tr>
            <td class="tbl_col_username"><input type="text" name="search_username" value="{tmpl_var name='search_username'}" /></td>
            <td class="tbl_col_vorname"><input type="text" name="search_vorname" value="{tmpl_var name='search_vorname'}" /></td>
            <td class="tbl_col_name"><input type="text" name="search_name" value="{tmpl_var name='search_name'}" /></td>
            <td class="tbl_col_ort"><input type="text" name="search_ort" value="{tmpl_var name='search_ort'}" /></td>
            <td class="tbl_col_buttons"><div class="buttons"><button type="button" class="icons16 icoFilter" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" onClick="submitForm('pageForm','admin/users_list.php');"><span>{tmpl_var name="filter_txt"}</span></button></div></td>
          </tr>
        </thead>
        <tbody>
          <tmpl_loop name="records">
          <tr class="tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
            <td class="tbl_col_username"><a href="#" onClick="loadContent('admin/users_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="username"}</a></td>
            <td class="tbl_col_vorname"><a href="#" onClick="loadContent('admin/users_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="vorname"}</a></td>
            <td class="tbl_col_name"><a href="#" onClick="loadContent('admin/users_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="name"}</a></td>
            <td class="tbl_col_ort"><a href="#" onClick="loadContent('admin/users_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="ort"}</a></td>
            <td class="tbl_col_buttons">
              <div class="buttons icons16">
                <tmpl_if name="username" op="!=" value="admin"><a class="icons16 icoLoginAs" href="#" onclick="loadContent('admin/login_as.php?id={tmpl_var name='id'}');"><span>{tmpl_var name='login_as_txt'}</span></a>
                <a class="icons16 icoDelete" href="javascript: del_record('admin/users_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span>{tmpl_var name='delete_txt'}</span></a></tmpl_if>
              </div>
            </td>
          </tr>
          </tmpl_loop>
        </tbody>
        <tfoot>
          <tr>
            <td class="tbl_footer tbl_paging" colspan="5"><tmpl_var name="paging"></td>
          </tr>
        </tfoot>
      </table>
    </fieldset>
  </div>
</div>
interface/web/client/client_list.php
@@ -18,6 +18,7 @@
$app->uses('listform_actions');
$app->listform_actions->SQLOrderBy = 'ORDER BY company_name, contact_name, client_id';
$app->listform_actions->SQLExtWhere = "limit_client = 0";
$app->listform_actions->onLoad();
interface/web/client/form/client.tform.php
@@ -1,696 +1,732 @@
<?php
/*
    Form Definition
    Tabledefinition
    Datatypes:
    - INTEGER (Forces the input to Int)
    - DOUBLE
    - CURRENCY (Formats the values to currency notation)
    - VARCHAR (no format check, maxlength: 255)
    - TEXT (no format check)
    - DATE (Dateformat, automatic conversion to timestamps)
    Formtype:
    - TEXT (Textfield)
    - TEXTAREA (Textarea)
    - PASSWORD (Password textfield, input is not shown when edited)
    - SELECT (Select option field)
    - RADIO
    - CHECKBOX
    - CHECKBOXARRAY
    - FILE
    VALUE:
    - Wert oder Array
    Hint:
    The ID field of the database table is not part of the datafield definition.
    The ID field must be always auto incement (int or bigint).
*/
$form["title"]             = "Client";
$form["description"]     = "";
$form["name"]             = "client";
$form["action"]            = "client_edit.php";
$form["db_table"]        = "client";
$form["db_table_idx"]    = "client_id";
$form["db_history"]        = "yes";
$form["tab_default"]    = "address";
$form["list_default"]    = "client_list.php";
$form["auth"]            = 'yes';
$form["auth_preset"]["userid"]  = 0; // 0 = id of the user, > 0 id must match with id of current user
$form["auth_preset"]["groupid"] = 0; // 0 = default groupid of the user, > 0 id must match with groupid of current user
$form["auth_preset"]["perm_user"] = 'riud'; //r = read, i = insert, u = update, d = delete
$form["auth_preset"]["perm_group"] = 'riud'; //r = read, i = insert, u = update, d = delete
$form["auth_preset"]["perm_other"] = ''; //r = read, i = insert, u = update, d = delete
//* Languages
$language_list = array();
$handle = @opendir(ISPC_ROOT_PATH.'/lib/lang');
while ($file = @readdir ($handle)) {
    if ($file != '.' && $file != '..') {
        if(@is_file(ISPC_ROOT_PATH.'/lib/lang/'.$file) and substr($file,-4,4) == '.lng') {
            $tmp = substr($file, 0, 2);
            $language_list[$tmp] = $tmp;
        }
    }
}
$form["tabs"]['address'] = array (
    'title'     => "Address",
    'width'     => 100,
    'template'     => "templates/client_edit_address.htm",
    'fields'     => array (
    ##################################
    # Begin Datatable fields
    ##################################
        'company_name' => array (
            'datatype'    => 'VARCHAR',
            'formtype'    => 'TEXT',
            'default'    => '',
            'value'        => '',
            'separator'    => '',
            'width'        => '30',
            'maxlength'    => '255',
            'rows'        => '',
            'cols'        => ''
        ),
        'contact_name' => array (
            'datatype'    => 'VARCHAR',
            'formtype'    => 'TEXT',
            'validators'    => array (     0 => array (    'type'    => 'NOTEMPTY',
                                                        'errmsg'=> 'contact_error_empty'),
                                        ),
            'default'    => '',
            'value'        => '',
            'separator'    => '',
            'width'        => '30',
            'maxlength'    => '255',
            'rows'        => '',
            'cols'        => ''
        ),
        'username' => array (
            'datatype'    => 'VARCHAR',
            'formtype'    => 'TEXT',
            'validators'    => array (     0 => array (    'type'    => 'NOTEMPTY',
                                                        'errmsg'=> 'username_error_empty'),
                                        1 => array (    'type'    => 'CUSTOM',
                                                        'class' => 'validate_client',
                                                        'function' => 'username_unique',
                                                        'errmsg'=> 'username_error_unique'),
                                        2 => array (    'type'    => 'REGEX',
                                                        'regex' => '/^[\w\.\-\_]{0,64}$/',
                                                        'errmsg'=> 'username_error_regex'),
                                        ),
            'default'    => '',
            'value'        => '',
            'separator'    => '',
            'width'        => '30',
            'maxlength'    => '255',
            'rows'        => '',
            'cols'        => ''
        ),
        'password' => array (
            'datatype'    => 'VARCHAR',
            'formtype'    => 'PASSWORD',
            'encryption'=> 'CRYPT',
            'default'    => '',
            'value'        => '',
            'separator'    => '',
            'width'        => '30',
            'maxlength'    => '255',
            'rows'        => '',
            'cols'        => ''
        ),
        'language' => array (
            'datatype'    => 'VARCHAR',
            'formtype'    => 'SELECT',
            'default'    => $conf["language"],
            'value'        => $language_list,
            'separator'    => '',
            'width'        => '30',
            'maxlength'    => '255',
            'rows'        => '',
            'cols'        => ''
        ),
        'usertheme' => array (
            'datatype'    => 'VARCHAR',
            'formtype'    => 'SELECT',
            'default'    => 'default',
            'value'        => array('default' => 'default'),
            'separator'    => '',
            'width'        => '30',
            'maxlength'    => '255',
            'rows'        => '',
            'cols'        => ''
        ),
        'street' => array (
            'datatype'    => 'VARCHAR',
            'formtype'    => 'TEXT',
            'default'    => '',
            'value'        => '',
            'separator'    => '',
            'width'        => '30',
            'maxlength'    => '255',
            'rows'        => '',
            'cols'        => ''
        ),
        'zip' => array (
            'datatype'    => 'VARCHAR',
            'formtype'    => 'TEXT',
            'default'    => '',
            'value'        => '',
            'separator'    => '',
            'width'        => '10',
            'maxlength'    => '255',
            'rows'        => '',
            'cols'        => ''
        ),
        'city' => array (
            'datatype'    => 'VARCHAR',
            'formtype'    => 'TEXT',
            'default'    => '',
            'value'        => '',
            'separator'    => '',
            'width'        => '30',
            'maxlength'    => '255',
            'rows'        => '',
            'cols'        => ''
        ),
        'state' => array (
            'datatype'    => 'VARCHAR',
            'formtype'    => 'TEXT',
            'default'    => '',
            'value'        => '',
            'separator'    => '',
            'width'        => '30',
            'maxlength'    => '255',
            'rows'        => '',
            'cols'        => ''
        ),
        'country' => array (
            'datatype'    => 'VARCHAR',
            'formtype'    => 'SELECT',
            'default'    => 'DE',
            'datasource'    => array (     'type'    => 'SQL',
                                        'querystring' => 'SELECT iso,printable_name FROM country ORDER BY printable_name',
                                        'keyfield'=> 'iso',
                                        'valuefield'=> 'printable_name'
                                     ),
            'value'        => ''
        ),
        'telephone' => array (
            'datatype'    => 'VARCHAR',
            'formtype'    => 'TEXT',
            'default'    => '',
            'value'        => '',
            'separator'    => '',
            'width'        => '30',
            'maxlength'    => '255',
            'rows'        => '',
            'cols'        => ''
        ),
        'mobile' => array (
            'datatype'    => 'VARCHAR',
            'formtype'    => 'TEXT',
            'default'    => '',
            'value'        => '',
            'separator'    => '',
            'width'        => '30',
            'maxlength'    => '255',
            'rows'        => '',
            'cols'        => ''
        ),
        'fax' => array (
            'datatype'    => 'VARCHAR',
            'formtype'    => 'TEXT',
            'default'    => '',
            'value'        => '',
            'separator'    => '',
            'width'        => '30',
            'maxlength'    => '255',
            'rows'        => '',
            'cols'        => ''
        ),
        'email' => array (
            'datatype'    => 'VARCHAR',
            'formtype'    => 'TEXT',
            'default'    => '',
            'value'        => '',
            'separator'    => '',
            'width'        => '30',
            'maxlength'    => '255',
            'rows'        => '',
            'cols'        => ''
        ),
        'internet' => array (
            'datatype'    => 'VARCHAR',
            'formtype'    => 'TEXT',
            'default'    => 'http://',
            'value'        => '',
            'separator'    => '',
            'width'        => '30',
            'maxlength'    => '255',
            'rows'        => '',
            'cols'        => ''
        ),
        'icq' => array (
            'datatype'    => 'VARCHAR',
            'formtype'    => 'TEXT',
            'default'    => '',
            'value'        => '',
            'separator'    => '',
            'width'        => '30',
            'maxlength'    => '255',
            'rows'        => '',
            'cols'        => ''
        ),
        'notes' => array (
            'datatype'    => 'TEXT',
            'formtype'    => 'TEXTAREA',
            'default'    => '',
            'value'        => '',
            'separator'    => '',
            'width'        => '',
            'maxlength'    => '',
            'rows'        => '10',
            'cols'        => '30'
        ),
    ##################################
    # END Datatable fields
    ##################################
    )
);
$form["tabs"]['limits'] = array (
    'title'     => "Limits",
    'width'     => 80,
    'template'     => "templates/client_edit_limits.htm",
    'fields'     => array (
    ##################################
    # Begin Datatable fields
    ##################################
        'template_master' => array (
            'datatype'    => 'INTEGER',
            'formtype'    => 'SELECT',
            'default'    => '1',
            'datasource'    => array (     'type'    => 'CUSTOM',
                                        'class'=> 'custom_datasource',
                                        'function'=> 'master_templates'
                                     ),
            'value'        => ''
        ),
        'template_additional' => array (
            'datatype'    => 'VARCHAR',
            'formtype'    => 'TEXT',
        ),
        'default_mailserver' => array (
            'datatype'    => 'INTEGER',
            'formtype'    => 'SELECT',
            'default'    => '1',
            'datasource'    => array (     'type'    => 'SQL',
                                        'querystring' => 'SELECT server_id,server_name FROM server WHERE mail_server = 1 AND {AUTHSQL} ORDER BY server_name',
                                        'keyfield'=> 'server_id',
                                        'valuefield'=> 'server_name'
                                     ),
            'value'        => ''
        ),
        'limit_maildomain' => array (
            'datatype'    => 'INTEGER',
            'formtype'    => 'TEXT',
            'validators'    => array (     0 => array (    'type'    => 'ISINT',
                                                        'errmsg'=> 'limit_maildomain_error_notint'),
                                    ),
            'default'    => '-1',
            'value'        => '',
            'separator'    => '',
            'width'        => '10',
            'maxlength'    => '10',
            'rows'        => '',
            'cols'        => ''
        ),
        'limit_mailbox' => array (
            'datatype'    => 'INTEGER',
            'formtype'    => 'TEXT',
            'validators'    => array (     0 => array (    'type'    => 'ISINT',
                                                        'errmsg'=> 'limit_mailbox_error_notint'),
                                    ),
            'default'    => '-1',
            'value'        => '',
            'separator'    => '',
            'width'        => '10',
            'maxlength'    => '10',
            'rows'        => '',
            'cols'        => ''
        ),
        'limit_mailalias' => array (
            'datatype'    => 'INTEGER',
            'formtype'    => 'TEXT',
            'validators'    => array (     0 => array (    'type'    => 'ISINT',
                                                        'errmsg'=> 'limit_mailalias_error_notint'),
                                    ),
            'default'    => '-1',
            'value'        => '',
            'separator'    => '',
            'width'        => '10',
            'maxlength'    => '10',
            'rows'        => '',
            'cols'        => ''
        ),
        'limit_mailforward' => array (
            'datatype'    => 'INTEGER',
            'formtype'    => 'TEXT',
            'validators'    => array (     0 => array (    'type'    => 'ISINT',
                                                        'errmsg'=> 'limit_mailforward_error_notint'),
                                    ),
            'default'    => '-1',
            'value'        => '',
            'separator'    => '',
            'width'        => '10',
            'maxlength'    => '10',
            'rows'        => '',
            'cols'        => ''
        ),
        'limit_mailcatchall' => array (
            'datatype'    => 'INTEGER',
            'formtype'    => 'TEXT',
            'validators'    => array (     0 => array (    'type'    => 'ISINT',
                                                        'errmsg'=> 'limit_mailcatchall_error_notint'),
                                    ),
            'default'    => '-1',
            'value'        => '',
            'separator'    => '',
            'width'        => '10',
            'maxlength'    => '10',
            'rows'        => '',
            'cols'        => ''
        ),
        'limit_mailrouting' => array (
            'datatype'    => 'INTEGER',
            'formtype'    => 'TEXT',
            'validators'    => array (     0 => array (    'type'    => 'ISINT',
                                                        'errmsg'=> 'limit_mailrouting_error_notint'),
                                    ),
            'default'    => '0',
            'value'        => '',
            'separator'    => '',
            'width'        => '10',
            'maxlength'    => '10',
            'rows'        => '',
            'cols'        => ''
        ),
        'limit_mailfilter' => array (
            'datatype'    => 'INTEGER',
            'formtype'    => 'TEXT',
            'validators'    => array (     0 => array (    'type'    => 'ISINT',
                                                        'errmsg'=> 'limit_mailfilter_error_notint'),
                                    ),
            'default'    => '-1',
            'value'        => '',
            'separator'    => '',
            'width'        => '10',
            'maxlength'    => '10',
            'rows'        => '',
            'cols'        => ''
        ),
        'limit_fetchmail' => array (
            'datatype'    => 'INTEGER',
            'formtype'    => 'TEXT',
            'validators'    => array (     0 => array (    'type'    => 'ISINT',
                                                        'errmsg'=> 'limit_mailfetchmail_error_notint'),
                                    ),
            'default'    => '-1',
            'value'        => '',
            'separator'    => '',
            'width'        => '10',
            'maxlength'    => '10',
            'rows'        => '',
            'cols'        => ''
        ),
        'limit_mailquota' => array (
            'datatype'    => 'INTEGER',
            'formtype'    => 'TEXT',
            'validators'    => array (     0 => array (    'type'    => 'ISINT',
                                                        'errmsg'=> 'limit_mailquota_error_notint'),
                                    ),
            'default'    => '-1',
            'value'        => '',
            'separator'    => '',
            'width'        => '10',
            'maxlength'    => '10',
            'rows'        => '',
            'cols'        => ''
        ),
        'limit_spamfilter_wblist' => array (
            'datatype'    => 'INTEGER',
            'formtype'    => 'TEXT',
            'validators'    => array (     0 => array (    'type'    => 'ISINT',
                                                        'errmsg'=> 'limit_spamfilter_wblist_error_notint'),
                                    ),
            'default'    => '-1',
            'value'        => '',
            'separator'    => '',
            'width'        => '10',
            'maxlength'    => '10',
            'rows'        => '',
            'cols'        => ''
        ),
        'limit_spamfilter_user' => array (
            'datatype'    => 'INTEGER',
            'formtype'    => 'TEXT',
            'validators'    => array (     0 => array (    'type'    => 'ISINT',
                                                        'errmsg'=> 'limit_spamfilter_user_error_notint'),
                                    ),
            'default'    => '-1',
            'value'        => '',
            'separator'    => '',
            'width'        => '10',
            'maxlength'    => '10',
            'rows'        => '',
            'cols'        => ''
        ),
        'limit_spamfilter_policy' => array (
            'datatype'    => 'INTEGER',
            'formtype'    => 'TEXT',
            'validators'    => array (     0 => array (    'type'    => 'ISINT',
                                                        'errmsg'=> 'limit_spamfilter_policy_error_notint'),
                                    ),
            'default'    => '-1',
            'value'        => '',
            'separator'    => '',
            'width'        => '10',
            'maxlength'    => '10',
            'rows'        => '',
            'cols'        => ''
        ),
        'default_webserver' => array (
            'datatype'    => 'INTEGER',
            'formtype'    => 'SELECT',
            'default'    => '1',
            'datasource'    => array (     'type'    => 'SQL',
                                        'querystring' => 'SELECT server_id,server_name FROM server WHERE web_server = 1 AND {AUTHSQL} ORDER BY server_name',
                                        'keyfield'=> 'server_id',
                                        'valuefield'=> 'server_name'
                                     ),
            'value'        => ''
        ),
        'limit_web_domain' => array (
            'datatype'    => 'INTEGER',
            'formtype'    => 'TEXT',
            'validators'    => array (     0 => array (    'type'    => 'ISINT',
                                                        'errmsg'=> 'limit_web_domain_error_notint'),
                                    ),
            'default'    => '-1',
            'value'        => '',
            'separator'    => '',
            'width'        => '10',
            'maxlength'    => '10',
            'rows'        => '',
            'cols'        => ''
        ),
        'web_php_options' => array (
            'datatype'    => 'VARCHAR',
            'formtype'    => 'CHECKBOXARRAY',
            'default'    => '',
            'separator' => ',',
            'value'        => array('no' => 'Disabled', 'fast-cgi' => 'Fast-CGI', 'cgi' => 'CGI', 'mod' => 'Mod-PHP', 'suphp' => 'SuPHP')
        ),
        'limit_web_aliasdomain' => array (
            'datatype'    => 'INTEGER',
            'formtype'    => 'TEXT',
            'validators'    => array (     0 => array (    'type'    => 'ISINT',
                                                        'errmsg'=> 'limit_web_aliasdomain_error_notint'),
                                    ),
            'default'    => '-1',
            'value'        => '',
            'separator'    => '',
            'width'        => '10',
            'maxlength'    => '10',
            'rows'        => '',
            'cols'        => ''
        ),
        'limit_web_subdomain' => array (
            'datatype'    => 'INTEGER',
            'formtype'    => 'TEXT',
            'validators'    => array (     0 => array (    'type'    => 'ISINT',
                                                        'errmsg'=> 'limit_web_subdomain_error_notint'),
                                    ),
            'default'    => '-1',
            'value'        => '',
            'separator'    => '',
            'width'        => '10',
            'maxlength'    => '10',
            'rows'        => '',
            'cols'        => ''
        ),
        'limit_ftp_user' => array (
            'datatype'    => 'INTEGER',
            'formtype'    => 'TEXT',
            'validators'    => array (     0 => array (    'type'    => 'ISINT',
                                                        'errmsg'=> 'limit_ftp_user_error_notint'),
                                    ),
            'default'    => '-1',
            'value'        => '',
            'separator'    => '',
            'width'        => '10',
            'maxlength'    => '10',
            'rows'        => '',
            'cols'        => ''
        ),
        'limit_shell_user' => array (
            'datatype'    => 'INTEGER',
            'formtype'    => 'TEXT',
            'validators'    => array (     0 => array (    'type'    => 'ISINT',
                                                        'errmsg'=> 'limit_shell_user_error_notint'),
                                    ),
            'default'    => '-1',
            'value'        => '',
            'separator'    => '',
            'width'        => '10',
            'maxlength'    => '10',
            'rows'        => '',
            'cols'        => ''
        ),
        'ssh_chroot' => array (
            'datatype'    => 'VARCHAR',
            'formtype'    => 'CHECKBOXARRAY',
            'default'    => '',
            'separator' => ',',
            'value'        => array('no' => 'None', 'jailkit' => 'Jailkit')
        ),
        'default_dnsserver' => array (
            'datatype'    => 'INTEGER',
            'formtype'    => 'SELECT',
            'default'    => '1',
            'datasource'    => array (     'type'    => 'SQL',
                                        'querystring' => 'SELECT server_id,server_name FROM server WHERE dns_server = 1 AND {AUTHSQL} ORDER BY server_name',
                                        'keyfield'=> 'server_id',
                                        'valuefield'=> 'server_name'
                                     ),
            'value'        => ''
        ),
        'limit_dns_zone' => array (
            'datatype'    => 'INTEGER',
            'formtype'    => 'TEXT',
            'validators'    => array (     0 => array (    'type'    => 'ISINT',
                                                        'errmsg'=> 'limit_dns_zone_error_notint'),
                                    ),
            'default'    => '-1',
            'value'        => '',
            'separator'    => '',
            'width'        => '10',
            'maxlength'    => '10',
            'rows'        => '',
            'cols'        => ''
        ),
        'limit_dns_record' => array (
            'datatype'    => 'INTEGER',
            'formtype'    => 'TEXT',
            'validators'    => array (     0 => array (    'type'    => 'ISINT',
                                                        'errmsg'=> 'limit_dns_record_error_notint'),
                                    ),
            'default'    => '-1',
            'value'        => '',
            'separator'    => '',
            'width'        => '10',
            'maxlength'    => '10',
            'rows'        => '',
            'cols'        => ''
        ),
        'limit_client' => array (
            'datatype'    => 'INTEGER',
            'formtype'    => 'TEXT',
            'validators'    => array (     0 => array (    'type'    => 'ISINT',
                                                        'errmsg'=> 'limit_client_error_notint'),
                                    ),
            'default'    => '0',
            'value'        => '',
            'separator'    => '',
            'width'        => '10',
            'maxlength'    => '10',
            'rows'        => '',
            'cols'        => ''
        ),
        'default_dbserver' => array (
            'datatype'    => 'INTEGER',
            'formtype'    => 'SELECT',
            'default'    => '1',
            'datasource'    => array (     'type'    => 'SQL',
                                        'querystring' => 'SELECT server_id,server_name FROM server WHERE db_server = 1 AND {AUTHSQL} ORDER BY server_name',
                                        'keyfield'=> 'server_id',
                                        'valuefield'=> 'server_name'
                                     ),
            'value'        => ''
        ),
        'limit_database' => array (
            'datatype'    => 'INTEGER',
            'formtype'    => 'TEXT',
            'validators'    => array (     0 => array (    'type'    => 'ISINT',
                                                        'errmsg'=> 'limit_database_error_notint'),
                                    ),
            'default'    => '-1',
            'value'        => '',
            'separator'    => '',
            'width'        => '10',
            'maxlength'    => '10',
            'rows'        => '',
            'cols'        => ''
        ),
    ##################################
    # END Datatable fields
    ##################################
    )
);
/*
$form["tabs"]['ipaddress'] = array (
    'title'     => "IP Addresses",
    'width'     => 100,
    'template'     => "templates/client_edit_ipaddress.htm",
    'fields'     => array (
    ##################################
    # Beginn Datatable fields
    ##################################
        'ip_address' => array (
            'datatype'    => 'TEXT',
            'formtype'    => 'CHECKBOXARRAY',
            'default'    => '',
            'value'        => array('192.168.0.1' => '192.168.0.1', '192.168.0.2' => '192.168.0.2'),
            'separator'    => ';'
        ),
    ##################################
    # ENDE Datatable fields
    ##################################
    )
);
*/
<?php
/*
    Form Definition
    Tabledefinition
    Datatypes:
    - INTEGER (Forces the input to Int)
    - DOUBLE
    - CURRENCY (Formats the values to currency notation)
    - VARCHAR (no format check, maxlength: 255)
    - TEXT (no format check)
    - DATE (Dateformat, automatic conversion to timestamps)
    Formtype:
    - TEXT (Textfield)
    - TEXTAREA (Textarea)
    - PASSWORD (Password textfield, input is not shown when edited)
    - SELECT (Select option field)
    - RADIO
    - CHECKBOX
    - CHECKBOXARRAY
    - FILE
    VALUE:
    - Wert oder Array
    Hint:
    The ID field of the database table is not part of the datafield definition.
    The ID field must be always auto incement (int or bigint).
*/
$form["title"]             = "Client";
$form["description"]     = "";
$form["name"]             = "client";
$form["action"]            = "client_edit.php";
$form["db_table"]        = "client";
$form["db_table_idx"]    = "client_id";
$form["db_history"]        = "yes";
$form["tab_default"]    = "address";
$form["list_default"]    = "client_list.php";
$form["auth"]            = 'yes';
$form["auth_preset"]["userid"]  = 0; // 0 = id of the user, > 0 id must match with id of current user
$form["auth_preset"]["groupid"] = 0; // 0 = default groupid of the user, > 0 id must match with groupid of current user
$form["auth_preset"]["perm_user"] = 'riud'; //r = read, i = insert, u = update, d = delete
$form["auth_preset"]["perm_group"] = 'riud'; //r = read, i = insert, u = update, d = delete
$form["auth_preset"]["perm_other"] = ''; //r = read, i = insert, u = update, d = delete
//* Languages
$language_list = array();
$handle = @opendir(ISPC_ROOT_PATH.'/lib/lang');
while ($file = @readdir ($handle)) {
    if ($file != '.' && $file != '..') {
        if(@is_file(ISPC_ROOT_PATH.'/lib/lang/'.$file) and substr($file,-4,4) == '.lng') {
            $tmp = substr($file, 0, 2);
            $language_list[$tmp] = $tmp;
        }
    }
}
$form["tabs"]['address'] = array (
    'title'     => "Address",
    'width'     => 100,
    'template'     => "templates/client_edit_address.htm",
    'fields'     => array (
    ##################################
    # Begin Datatable fields
    ##################################
        'company_name' => array (
            'datatype'    => 'VARCHAR',
            'formtype'    => 'TEXT',
            'default'    => '',
            'value'        => '',
            'separator'    => '',
            'width'        => '30',
            'maxlength'    => '255',
            'rows'        => '',
            'cols'        => ''
        ),
        'contact_name' => array (
            'datatype'    => 'VARCHAR',
            'formtype'    => 'TEXT',
            'validators'    => array (     0 => array (    'type'    => 'NOTEMPTY',
                                                        'errmsg'=> 'contact_error_empty'),
                                        ),
            'default'    => '',
            'value'        => '',
            'separator'    => '',
            'width'        => '30',
            'maxlength'    => '255',
            'rows'        => '',
            'cols'        => ''
        ),
        'username' => array (
            'datatype'    => 'VARCHAR',
            'formtype'    => 'TEXT',
            'validators'    => array (     0 => array (    'type'    => 'NOTEMPTY',
                                                        'errmsg'=> 'username_error_empty'),
                                        1 => array (    'type'    => 'CUSTOM',
                                                        'class' => 'validate_client',
                                                        'function' => 'username_unique',
                                                        'errmsg'=> 'username_error_unique'),
                                        2 => array (    'type'    => 'REGEX',
                                                        'regex' => '/^[\w\.\-\_]{0,64}$/',
                                                        'errmsg'=> 'username_error_regex'),
                                        ),
            'default'    => '',
            'value'        => '',
            'separator'    => '',
            'width'        => '30',
            'maxlength'    => '255',
            'rows'        => '',
            'cols'        => ''
        ),
        'password' => array (
            'datatype'    => 'VARCHAR',
            'formtype'    => 'PASSWORD',
            'encryption'=> 'CRYPT',
            'default'    => '',
            'value'        => '',
            'separator'    => '',
            'width'        => '30',
            'maxlength'    => '255',
            'rows'        => '',
            'cols'        => ''
        ),
        'language' => array (
            'datatype'    => 'VARCHAR',
            'formtype'    => 'SELECT',
            'default'    => $conf["language"],
            'value'        => $language_list,
            'separator'    => '',
            'width'        => '30',
            'maxlength'    => '255',
            'rows'        => '',
            'cols'        => ''
        ),
        'usertheme' => array (
            'datatype'    => 'VARCHAR',
            'formtype'    => 'SELECT',
            'default'    => 'default',
            'value'        => array('default' => 'default'),
            'separator'    => '',
            'width'        => '30',
            'maxlength'    => '255',
            'rows'        => '',
            'cols'        => ''
        ),
        'street' => array (
            'datatype'    => 'VARCHAR',
            'formtype'    => 'TEXT',
            'default'    => '',
            'value'        => '',
            'separator'    => '',
            'width'        => '30',
            'maxlength'    => '255',
            'rows'        => '',
            'cols'        => ''
        ),
        'zip' => array (
            'datatype'    => 'VARCHAR',
            'formtype'    => 'TEXT',
            'default'    => '',
            'value'        => '',
            'separator'    => '',
            'width'        => '10',
            'maxlength'    => '255',
            'rows'        => '',
            'cols'        => ''
        ),
        'city' => array (
            'datatype'    => 'VARCHAR',
            'formtype'    => 'TEXT',
            'default'    => '',
            'value'        => '',
            'separator'    => '',
            'width'        => '30',
            'maxlength'    => '255',
            'rows'        => '',
            'cols'        => ''
        ),
        'state' => array (
            'datatype'    => 'VARCHAR',
            'formtype'    => 'TEXT',
            'default'    => '',
            'value'        => '',
            'separator'    => '',
            'width'        => '30',
            'maxlength'    => '255',
            'rows'        => '',
            'cols'        => ''
        ),
        'country' => array (
            'datatype'    => 'VARCHAR',
            'formtype'    => 'SELECT',
            'default'    => 'DE',
            'datasource'    => array (     'type'    => 'SQL',
                                        'querystring' => 'SELECT iso,printable_name FROM country ORDER BY printable_name',
                                        'keyfield'=> 'iso',
                                        'valuefield'=> 'printable_name'
                                     ),
            'value'        => ''
        ),
        'telephone' => array (
            'datatype'    => 'VARCHAR',
            'formtype'    => 'TEXT',
            'default'    => '',
            'value'        => '',
            'separator'    => '',
            'width'        => '30',
            'maxlength'    => '255',
            'rows'        => '',
            'cols'        => ''
        ),
        'mobile' => array (
            'datatype'    => 'VARCHAR',
            'formtype'    => 'TEXT',
            'default'    => '',
            'value'        => '',
            'separator'    => '',
            'width'        => '30',
            'maxlength'    => '255',
            'rows'        => '',
            'cols'        => ''
        ),
        'fax' => array (
            'datatype'    => 'VARCHAR',
            'formtype'    => 'TEXT',
            'default'    => '',
            'value'        => '',
            'separator'    => '',
            'width'        => '30',
            'maxlength'    => '255',
            'rows'        => '',
            'cols'        => ''
        ),
        'email' => array (
            'datatype'    => 'VARCHAR',
            'formtype'    => 'TEXT',
            'default'    => '',
            'value'        => '',
            'separator'    => '',
            'width'        => '30',
            'maxlength'    => '255',
            'rows'        => '',
            'cols'        => ''
        ),
        'internet' => array (
            'datatype'    => 'VARCHAR',
            'formtype'    => 'TEXT',
            'default'    => 'http://',
            'value'        => '',
            'separator'    => '',
            'width'        => '30',
            'maxlength'    => '255',
            'rows'        => '',
            'cols'        => ''
        ),
        'icq' => array (
            'datatype'    => 'VARCHAR',
            'formtype'    => 'TEXT',
            'default'    => '',
            'value'        => '',
            'separator'    => '',
            'width'        => '30',
            'maxlength'    => '255',
            'rows'        => '',
            'cols'        => ''
        ),
        'notes' => array (
            'datatype'    => 'TEXT',
            'formtype'    => 'TEXTAREA',
            'default'    => '',
            'value'        => '',
            'separator'    => '',
            'width'        => '',
            'maxlength'    => '',
            'rows'        => '10',
            'cols'        => '30'
        ),
    ##################################
    # END Datatable fields
    ##################################
    )
);
$form["tabs"]['limits'] = array (
    'title'     => "Limits",
    'width'     => 80,
    'template'     => "templates/client_edit_limits.htm",
    'fields'     => array (
    ##################################
    # Begin Datatable fields
    ##################################
        'template_master' => array (
            'datatype'    => 'INTEGER',
            'formtype'    => 'SELECT',
            'default'    => '1',
            'datasource'    => array (     'type'    => 'CUSTOM',
                                        'class'=> 'custom_datasource',
                                        'function'=> 'master_templates'
                                     ),
            'value'        => ''
        ),
        'template_additional' => array (
            'datatype'    => 'VARCHAR',
            'formtype'    => 'TEXT',
        ),
        'default_mailserver' => array (
            'datatype'    => 'INTEGER',
            'formtype'    => 'SELECT',
            'default'    => '1',
            'datasource'    => array (     'type'    => 'CUSTOM',
                                        'class'=> 'custom_datasource',
                                        'function'=> 'client_servers'
                                     ),
            'value'        => '',
            'name'        => 'default_mailserver'
        ),
        'limit_maildomain' => array (
            'datatype'    => 'INTEGER',
            'formtype'    => 'TEXT',
            'validators'    => array (     0 => array (    'type'    => 'ISINT',
                                                        'errmsg'=> 'limit_maildomain_error_notint'),
                                    ),
            'default'    => '-1',
            'value'        => '',
            'separator'    => '',
            'width'        => '10',
            'maxlength'    => '10',
            'rows'        => '',
            'cols'        => ''
        ),
        'limit_mailbox' => array (
            'datatype'    => 'INTEGER',
            'formtype'    => 'TEXT',
            'validators'    => array (     0 => array (    'type'    => 'ISINT',
                                                        'errmsg'=> 'limit_mailbox_error_notint'),
                                    ),
            'default'    => '-1',
            'value'        => '',
            'separator'    => '',
            'width'        => '10',
            'maxlength'    => '10',
            'rows'        => '',
            'cols'        => ''
        ),
        'limit_mailalias' => array (
            'datatype'    => 'INTEGER',
            'formtype'    => 'TEXT',
            'validators'    => array (     0 => array (    'type'    => 'ISINT',
                                                        'errmsg'=> 'limit_mailalias_error_notint'),
                                    ),
            'default'    => '-1',
            'value'        => '',
            'separator'    => '',
            'width'        => '10',
            'maxlength'    => '10',
            'rows'        => '',
            'cols'        => ''
        ),
        'limit_mailforward' => array (
            'datatype'    => 'INTEGER',
            'formtype'    => 'TEXT',
            'validators'    => array (     0 => array (    'type'    => 'ISINT',
                                                        'errmsg'=> 'limit_mailforward_error_notint'),
                                    ),
            'default'    => '-1',
            'value'        => '',
            'separator'    => '',
            'width'        => '10',
            'maxlength'    => '10',
            'rows'        => '',
            'cols'        => ''
        ),
        'limit_mailcatchall' => array (
            'datatype'    => 'INTEGER',
            'formtype'    => 'TEXT',
            'validators'    => array (     0 => array (    'type'    => 'ISINT',
                                                        'errmsg'=> 'limit_mailcatchall_error_notint'),
                                    ),
            'default'    => '-1',
            'value'        => '',
            'separator'    => '',
            'width'        => '10',
            'maxlength'    => '10',
            'rows'        => '',
            'cols'        => ''
        ),
        'limit_mailrouting' => array (
            'datatype'    => 'INTEGER',
            'formtype'    => 'TEXT',
            'validators'    => array (     0 => array (    'type'    => 'ISINT',
                                                        'errmsg'=> 'limit_mailrouting_error_notint'),
                                    ),
            'default'    => '0',
            'value'        => '',
            'separator'    => '',
            'width'        => '10',
            'maxlength'    => '10',
            'rows'        => '',
            'cols'        => ''
        ),
        'limit_mailfilter' => array (
            'datatype'    => 'INTEGER',
            'formtype'    => 'TEXT',
            'validators'    => array (     0 => array (    'type'    => 'ISINT',
                                                        'errmsg'=> 'limit_mailfilter_error_notint'),
                                    ),
            'default'    => '-1',
            'value'        => '',
            'separator'    => '',
            'width'        => '10',
            'maxlength'    => '10',
            'rows'        => '',
            'cols'        => ''
        ),
        'limit_fetchmail' => array (
            'datatype'    => 'INTEGER',
            'formtype'    => 'TEXT',
            'validators'    => array (     0 => array (    'type'    => 'ISINT',
                                                        'errmsg'=> 'limit_mailfetchmail_error_notint'),
                                    ),
            'default'    => '-1',
            'value'        => '',
            'separator'    => '',
            'width'        => '10',
            'maxlength'    => '10',
            'rows'        => '',
            'cols'        => ''
        ),
        'limit_mailquota' => array (
            'datatype'    => 'INTEGER',
            'formtype'    => 'TEXT',
            'validators'    => array (     0 => array (    'type'    => 'ISINT',
                                                        'errmsg'=> 'limit_mailquota_error_notint'),
                                    ),
            'default'    => '-1',
            'value'        => '',
            'separator'    => '',
            'width'        => '10',
            'maxlength'    => '10',
            'rows'        => '',
            'cols'        => ''
        ),
        'limit_spamfilter_wblist' => array (
            'datatype'    => 'INTEGER',
            'formtype'    => 'TEXT',
            'validators'    => array (     0 => array (    'type'    => 'ISINT',
                                                        'errmsg'=> 'limit_spamfilter_wblist_error_notint'),
                                    ),
            'default'    => '-1',
            'value'        => '',
            'separator'    => '',
            'width'        => '10',
            'maxlength'    => '10',
            'rows'        => '',
            'cols'        => ''
        ),
        'limit_spamfilter_user' => array (
            'datatype'    => 'INTEGER',
            'formtype'    => 'TEXT',
            'validators'    => array (     0 => array (    'type'    => 'ISINT',
                                                        'errmsg'=> 'limit_spamfilter_user_error_notint'),
                                    ),
            'default'    => '-1',
            'value'        => '',
            'separator'    => '',
            'width'        => '10',
            'maxlength'    => '10',
            'rows'        => '',
            'cols'        => ''
        ),
        'limit_spamfilter_policy' => array (
            'datatype'    => 'INTEGER',
            'formtype'    => 'TEXT',
            'validators'    => array (     0 => array (    'type'    => 'ISINT',
                                                        'errmsg'=> 'limit_spamfilter_policy_error_notint'),
                                    ),
            'default'    => '-1',
            'value'        => '',
            'separator'    => '',
            'width'        => '10',
            'maxlength'    => '10',
            'rows'        => '',
            'cols'        => ''
        ),
        'default_webserver' => array (
            'datatype'    => 'INTEGER',
            'formtype'    => 'SELECT',
            'default'    => '1',
            'datasource'    => array (     'type'    => 'CUSTOM',
                                        'class'=> 'custom_datasource',
                                        'function'=> 'client_servers'
                                     ),
            'value'        => '',
            'name'        => 'default_webserver'
        ),
        'limit_web_domain' => array (
            'datatype'    => 'INTEGER',
            'formtype'    => 'TEXT',
            'validators'    => array (     0 => array (    'type'    => 'ISINT',
                                                        'errmsg'=> 'limit_web_domain_error_notint'),
                                    ),
            'default'    => '-1',
            'value'        => '',
            'separator'    => '',
            'width'        => '10',
            'maxlength'    => '10',
            'rows'        => '',
            'cols'        => ''
        ),
        'web_php_options' => array (
            'datatype'    => 'VARCHAR',
            'formtype'    => 'CHECKBOXARRAY',
            'default'    => '',
            'separator' => ',',
            'valuelimit' => 'client:web_php_options',
            'value'        => array('no' => 'Disabled', 'fast-cgi' => 'Fast-CGI', 'cgi' => 'CGI', 'mod' => 'Mod-PHP', 'suphp' => 'SuPHP')
        ),
        'limit_web_aliasdomain' => array (
            'datatype'    => 'INTEGER',
            'formtype'    => 'TEXT',
            'validators'    => array (     0 => array (    'type'    => 'ISINT',
                                                        'errmsg'=> 'limit_web_aliasdomain_error_notint'),
                                    ),
            'default'    => '-1',
            'value'        => '',
            'separator'    => '',
            'width'        => '10',
            'maxlength'    => '10',
            'rows'        => '',
            'cols'        => ''
        ),
        'limit_web_subdomain' => array (
            'datatype'    => 'INTEGER',
            'formtype'    => 'TEXT',
            'validators'    => array (     0 => array (    'type'    => 'ISINT',
                                                        'errmsg'=> 'limit_web_subdomain_error_notint'),
                                    ),
            'default'    => '-1',
            'value'        => '',
            'separator'    => '',
            'width'        => '10',
            'maxlength'    => '10',
            'rows'        => '',
            'cols'        => ''
        ),
        'limit_ftp_user' => array (
            'datatype'    => 'INTEGER',
            'formtype'    => 'TEXT',
            'validators'    => array (     0 => array (    'type'    => 'ISINT',
                                                        'errmsg'=> 'limit_ftp_user_error_notint'),
                                    ),
            'default'    => '-1',
            'value'        => '',
            'separator'    => '',
            'width'        => '10',
            'maxlength'    => '10',
            'rows'        => '',
            'cols'        => ''
        ),
        'limit_shell_user' => array (
            'datatype'    => 'INTEGER',
            'formtype'    => 'TEXT',
            'validators'    => array (     0 => array (    'type'    => 'ISINT',
                                                        'errmsg'=> 'limit_shell_user_error_notint'),
                                    ),
            'default'    => '-1',
            'value'        => '',
            'separator'    => '',
            'width'        => '10',
            'maxlength'    => '10',
            'rows'        => '',
            'cols'        => ''
        ),
        'ssh_chroot' => array (
            'datatype'    => 'VARCHAR',
            'formtype'    => 'CHECKBOXARRAY',
            'default'    => '',
            'separator' => ',',
            'valuelimit' => 'client:ssh_chroot',
            'value'        => array('no' => 'None', 'jailkit' => 'Jailkit')
        ),
        'default_dnsserver' => array (
            'datatype'    => 'INTEGER',
            'formtype'    => 'SELECT',
            'default'    => '1',
            'datasource'    => array (     'type'    => 'CUSTOM',
                                        'class'=> 'custom_datasource',
                                        'function'=> 'client_servers'
                                     ),
            'value'        => '',
            'name'        => 'default_dnsserver'
        ),
        'limit_dns_zone' => array (
            'datatype'    => 'INTEGER',
            'formtype'    => 'TEXT',
            'validators'    => array (     0 => array (    'type'    => 'ISINT',
                                                        'errmsg'=> 'limit_dns_zone_error_notint'),
                                    ),
            'default'    => '-1',
            'value'        => '',
            'separator'    => '',
            'width'        => '10',
            'maxlength'    => '10',
            'rows'        => '',
            'cols'        => ''
        ),
        'limit_dns_record' => array (
            'datatype'    => 'INTEGER',
            'formtype'    => 'TEXT',
            'validators'    => array (     0 => array (    'type'    => 'ISINT',
                                                        'errmsg'=> 'limit_dns_record_error_notint'),
                                    ),
            'default'    => '-1',
            'value'        => '',
            'separator'    => '',
            'width'        => '10',
            'maxlength'    => '10',
            'rows'        => '',
            'cols'        => ''
        ),
        'limit_client' => array (
            'datatype'    => 'INTEGER',
            'formtype'    => 'TEXT',
            'validators'    => array (     0 => array (    'type'    => 'ISINT',
                                                        'errmsg'=> 'limit_client_error_notint'),
                                    ),
            'default'    => '0',
            'value'        => '',
            'separator'    => '',
            'width'        => '10',
            'maxlength'    => '10',
            'rows'        => '',
            'cols'        => ''
        ),
        'default_dbserver' => array (
            'datatype'    => 'INTEGER',
            'formtype'    => 'SELECT',
            'default'    => '1',
            'datasource'    => array (     'type'    => 'CUSTOM',
                                        'class'=> 'custom_datasource',
                                        'function'=> 'client_servers'
                                     ),
            'value'        => '',
            'name'        => 'default_dbserver'
        ),
        'limit_database' => array (
            'datatype'    => 'INTEGER',
            'formtype'    => 'TEXT',
            'validators'    => array (     0 => array (    'type'    => 'ISINT',
                                                        'errmsg'=> 'limit_database_error_notint'),
                                    ),
            'default'    => '-1',
            'value'        => '',
            'separator'    => '',
            'width'        => '10',
            'maxlength'    => '10',
            'rows'        => '',
            'cols'        => ''
        ),
        'limit_cron' => array (
            'datatype'  => 'INTEGER',
            'formtype'  => 'TEXT',
            'validators'    => array (  0 => array (    'type'  => 'ISINT',
                                                        'errmsg'=> 'limit_cron_error_notint'),
                                    ),
            'default'   => '0',
            'value'     => '',
            'separator' => '',
            'width'     => '10',
            'maxlength' => '10',
            'rows'      => '',
            'cols'      => ''
        ),
        'limit_cron_type' => array (
            'datatype'  => 'VARCHAR',
            'formtype'  => 'SELECT',
            'default'   => '',
            'value'     => array('full' => 'Full Cron','chrooted' => 'Chrooted Cron','url' => 'URL Cron')
        ),
        'limit_cron_frequency' => array (
            'datatype'  => 'INTEGER',
            'formtype'  => 'TEXT',
            'validators'    => array (  0 => array (    'type'  => 'ISINT',
                                                        'errmsg'=> 'limit_cron_error_frequency'),
                                    ),
            'default'   => '-1',
            'value'     => '',
            'separator' => '',
            'width'     => '10',
            'maxlength' => '10',
            'rows'      => '',
            'cols'      => ''
        ),
    ##################################
    # END Datatable fields
    ##################################
    )
);
/*
$form["tabs"]['ipaddress'] = array (
    'title'     => "IP Addresses",
    'width'     => 100,
    'template'     => "templates/client_edit_ipaddress.htm",
    'fields'     => array (
    ##################################
    # Beginn Datatable fields
    ##################################
        'ip_address' => array (
            'datatype'    => 'TEXT',
            'formtype'    => 'CHECKBOXARRAY',
            'default'    => '',
            'value'        => array('192.168.0.1' => '192.168.0.1', '192.168.0.2' => '192.168.0.2'),
            'separator'    => ';'
        ),
    ##################################
    # ENDE Datatable fields
    ##################################
    )
);
*/
?>
interface/web/client/form/client_template.tform.php
@@ -367,6 +367,7 @@
            'rows'        => '',
            'cols'        => ''
        ),
        /*
        'limit_client' => array (
            'datatype'    => 'INTEGER',
            'formtype'    => 'TEXT',
@@ -381,6 +382,7 @@
            'rows'        => '',
            'cols'        => ''
        ),
        */
        'limit_database' => array (
            'datatype'    => 'INTEGER',
            'formtype'    => 'TEXT',
@@ -395,6 +397,40 @@
            'rows'        => '',
            'cols'        => ''
        ),
        'limit_cron' => array (
            'datatype'  => 'INTEGER',
            'formtype'  => 'TEXT',
            'validators'    => array (  0 => array (    'type'  => 'ISINT',
                                                        'errmsg'=> 'limit_cron_error_notint'),
                                    ),
            'default'   => '0',
            'value'     => '',
            'separator' => '',
            'width'     => '10',
            'maxlength' => '10',
            'rows'      => '',
            'cols'      => ''
        ),
        'limit_cron_type' => array (
            'datatype'  => 'VARCHAR',
            'formtype'  => 'SELECT',
            'default'   => '',
            'value'     => array('full' => 'Full Cron','chrooted' => 'Chrooted Cron','url' => 'URL Cron')
        ),
        'limit_cron_frequency' => array (
            'datatype'  => 'INTEGER',
            'formtype'  => 'TEXT',
            'validators'    => array (  0 => array (    'type'  => 'ISINT',
                                                        'errmsg'=> 'limit_cron_error_frequency'),
                                    ),
            'default'   => '-1',
            'value'     => '',
            'separator' => '',
            'width'     => '10',
            'maxlength' => '10',
            'rows'      => '',
            'cols'      => ''
        ),
    ##################################
    # END Datatable fields
    ##################################
interface/web/client/form/reseller.tform.php
New file
@@ -0,0 +1,733 @@
<?php
/*
    Form Definition
    Tabledefinition
    Datatypes:
    - INTEGER (Forces the input to Int)
    - DOUBLE
    - CURRENCY (Formats the values to currency notation)
    - VARCHAR (no format check, maxlength: 255)
    - TEXT (no format check)
    - DATE (Dateformat, automatic conversion to timestamps)
    Formtype:
    - TEXT (Textfield)
    - TEXTAREA (Textarea)
    - PASSWORD (Password textfield, input is not shown when edited)
    - SELECT (Select option field)
    - RADIO
    - CHECKBOX
    - CHECKBOXARRAY
    - FILE
    VALUE:
    - Wert oder Array
    Hint:
    The ID field of the database table is not part of the datafield definition.
    The ID field must be always auto incement (int or bigint).
*/
$form["title"]             = "Reseller";
$form["description"]     = "";
$form["name"]             = "reseller";
$form["action"]            = "reseller_edit.php";
$form["db_table"]        = "client";
$form["db_table_idx"]    = "client_id";
$form["db_history"]        = "yes";
$form["tab_default"]    = "address";
$form["list_default"]    = "reseller_list.php";
$form["auth"]            = 'yes';
$form["auth_preset"]["userid"]  = 0; // 0 = id of the user, > 0 id must match with id of current user
$form["auth_preset"]["groupid"] = 0; // 0 = default groupid of the user, > 0 id must match with groupid of current user
$form["auth_preset"]["perm_user"] = 'riud'; //r = read, i = insert, u = update, d = delete
$form["auth_preset"]["perm_group"] = 'riud'; //r = read, i = insert, u = update, d = delete
$form["auth_preset"]["perm_other"] = ''; //r = read, i = insert, u = update, d = delete
//* Languages
$language_list = array();
$handle = @opendir(ISPC_ROOT_PATH.'/lib/lang');
while ($file = @readdir ($handle)) {
    if ($file != '.' && $file != '..') {
        if(@is_file(ISPC_ROOT_PATH.'/lib/lang/'.$file) and substr($file,-4,4) == '.lng') {
            $tmp = substr($file, 0, 2);
            $language_list[$tmp] = $tmp;
        }
    }
}
$form["tabs"]['address'] = array (
    'title'     => "Address",
    'width'     => 100,
    'template'     => "templates/reseller_edit_address.htm",
    'fields'     => array (
    ##################################
    # Begin Datatable fields
    ##################################
        'company_name' => array (
            'datatype'    => 'VARCHAR',
            'formtype'    => 'TEXT',
            'default'    => '',
            'value'        => '',
            'separator'    => '',
            'width'        => '30',
            'maxlength'    => '255',
            'rows'        => '',
            'cols'        => ''
        ),
        'contact_name' => array (
            'datatype'    => 'VARCHAR',
            'formtype'    => 'TEXT',
            'validators'    => array (     0 => array (    'type'    => 'NOTEMPTY',
                                                        'errmsg'=> 'contact_error_empty'),
                                        ),
            'default'    => '',
            'value'        => '',
            'separator'    => '',
            'width'        => '30',
            'maxlength'    => '255',
            'rows'        => '',
            'cols'        => ''
        ),
        'username' => array (
            'datatype'    => 'VARCHAR',
            'formtype'    => 'TEXT',
            'validators'    => array (     0 => array (    'type'    => 'NOTEMPTY',
                                                        'errmsg'=> 'username_error_empty'),
                                        1 => array (    'type'    => 'CUSTOM',
                                                        'class' => 'validate_client',
                                                        'function' => 'username_unique',
                                                        'errmsg'=> 'username_error_unique'),
                                        2 => array (    'type'    => 'REGEX',
                                                        'regex' => '/^[\w\.\-\_]{0,64}$/',
                                                        'errmsg'=> 'username_error_regex'),
                                        ),
            'default'    => '',
            'value'        => '',
            'separator'    => '',
            'width'        => '30',
            'maxlength'    => '255',
            'rows'        => '',
            'cols'        => ''
        ),
        'password' => array (
            'datatype'    => 'VARCHAR',
            'formtype'    => 'PASSWORD',
            'encryption'=> 'CRYPT',
            'default'    => '',
            'value'        => '',
            'separator'    => '',
            'width'        => '30',
            'maxlength'    => '255',
            'rows'        => '',
            'cols'        => ''
        ),
        'language' => array (
            'datatype'    => 'VARCHAR',
            'formtype'    => 'SELECT',
            'default'    => $conf["language"],
            'value'        => $language_list,
            'separator'    => '',
            'width'        => '30',
            'maxlength'    => '255',
            'rows'        => '',
            'cols'        => ''
        ),
        'usertheme' => array (
            'datatype'    => 'VARCHAR',
            'formtype'    => 'SELECT',
            'default'    => 'default',
            'value'        => array('default' => 'default'),
            'separator'    => '',
            'width'        => '30',
            'maxlength'    => '255',
            'rows'        => '',
            'cols'        => ''
        ),
        'street' => array (
            'datatype'    => 'VARCHAR',
            'formtype'    => 'TEXT',
            'default'    => '',
            'value'        => '',
            'separator'    => '',
            'width'        => '30',
            'maxlength'    => '255',
            'rows'        => '',
            'cols'        => ''
        ),
        'zip' => array (
            'datatype'    => 'VARCHAR',
            'formtype'    => 'TEXT',
            'default'    => '',
            'value'        => '',
            'separator'    => '',
            'width'        => '10',
            'maxlength'    => '255',
            'rows'        => '',
            'cols'        => ''
        ),
        'city' => array (
            'datatype'    => 'VARCHAR',
            'formtype'    => 'TEXT',
            'default'    => '',
            'value'        => '',
            'separator'    => '',
            'width'        => '30',
            'maxlength'    => '255',
            'rows'        => '',
            'cols'        => ''
        ),
        'state' => array (
            'datatype'    => 'VARCHAR',
            'formtype'    => 'TEXT',
            'default'    => '',
            'value'        => '',
            'separator'    => '',
            'width'        => '30',
            'maxlength'    => '255',
            'rows'        => '',
            'cols'        => ''
        ),
        'country' => array (
            'datatype'    => 'VARCHAR',
            'formtype'    => 'SELECT',
            'default'    => 'DE',
            'datasource'    => array (     'type'    => 'SQL',
                                        'querystring' => 'SELECT iso,printable_name FROM country ORDER BY printable_name',
                                        'keyfield'=> 'iso',
                                        'valuefield'=> 'printable_name'
                                     ),
            'value'        => ''
        ),
        'telephone' => array (
            'datatype'    => 'VARCHAR',
            'formtype'    => 'TEXT',
            'default'    => '',
            'value'        => '',
            'separator'    => '',
            'width'        => '30',
            'maxlength'    => '255',
            'rows'        => '',
            'cols'        => ''
        ),
        'mobile' => array (
            'datatype'    => 'VARCHAR',
            'formtype'    => 'TEXT',
            'default'    => '',
            'value'        => '',
            'separator'    => '',
            'width'        => '30',
            'maxlength'    => '255',
            'rows'        => '',
            'cols'        => ''
        ),
        'fax' => array (
            'datatype'    => 'VARCHAR',
            'formtype'    => 'TEXT',
            'default'    => '',
            'value'        => '',
            'separator'    => '',
            'width'        => '30',
            'maxlength'    => '255',
            'rows'        => '',
            'cols'        => ''
        ),
        'email' => array (
            'datatype'    => 'VARCHAR',
            'formtype'    => 'TEXT',
            'default'    => '',
            'value'        => '',
            'separator'    => '',
            'width'        => '30',
            'maxlength'    => '255',
            'rows'        => '',
            'cols'        => ''
        ),
        'internet' => array (
            'datatype'    => 'VARCHAR',
            'formtype'    => 'TEXT',
            'default'    => 'http://',
            'value'        => '',
            'separator'    => '',
            'width'        => '30',
            'maxlength'    => '255',
            'rows'        => '',
            'cols'        => ''
        ),
        'icq' => array (
            'datatype'    => 'VARCHAR',
            'formtype'    => 'TEXT',
            'default'    => '',
            'value'        => '',
            'separator'    => '',
            'width'        => '30',
            'maxlength'    => '255',
            'rows'        => '',
            'cols'        => ''
        ),
        'notes' => array (
            'datatype'    => 'TEXT',
            'formtype'    => 'TEXTAREA',
            'default'    => '',
            'value'        => '',
            'separator'    => '',
            'width'        => '',
            'maxlength'    => '',
            'rows'        => '10',
            'cols'        => '30'
        ),
    ##################################
    # END Datatable fields
    ##################################
    )
);
$form["tabs"]['limits'] = array (
    'title'     => "Limits",
    'width'     => 80,
    'template'     => "templates/reseller_edit_limits.htm",
    'fields'     => array (
    ##################################
    # Begin Datatable fields
    ##################################
        'template_master' => array (
            'datatype'    => 'INTEGER',
            'formtype'    => 'SELECT',
            'default'    => '1',
            'datasource'    => array (     'type'    => 'CUSTOM',
                                        'class'=> 'custom_datasource',
                                        'function'=> 'master_templates'
                                     ),
            'value'        => ''
        ),
        'template_additional' => array (
            'datatype'    => 'VARCHAR',
            'formtype'    => 'TEXT',
        ),
        'default_mailserver' => array (
            'datatype'    => 'INTEGER',
            'formtype'    => 'SELECT',
            'default'    => '1',
            'datasource'    => array (     'type'    => 'SQL',
                                        'querystring' => 'SELECT server_id,server_name FROM server WHERE mail_server = 1 AND {AUTHSQL} ORDER BY server_name',
                                        'keyfield'=> 'server_id',
                                        'valuefield'=> 'server_name'
                                     ),
            'value'        => ''
        ),
        'limit_maildomain' => array (
            'datatype'    => 'INTEGER',
            'formtype'    => 'TEXT',
            'validators'    => array (     0 => array (    'type'    => 'ISINT',
                                                        'errmsg'=> 'limit_maildomain_error_notint'),
                                    ),
            'default'    => '-1',
            'value'        => '',
            'separator'    => '',
            'width'        => '10',
            'maxlength'    => '10',
            'rows'        => '',
            'cols'        => ''
        ),
        'limit_mailbox' => array (
            'datatype'    => 'INTEGER',
            'formtype'    => 'TEXT',
            'validators'    => array (     0 => array (    'type'    => 'ISINT',
                                                        'errmsg'=> 'limit_mailbox_error_notint'),
                                    ),
            'default'    => '-1',
            'value'        => '',
            'separator'    => '',
            'width'        => '10',
            'maxlength'    => '10',
            'rows'        => '',
            'cols'        => ''
        ),
        'limit_mailalias' => array (
            'datatype'    => 'INTEGER',
            'formtype'    => 'TEXT',
            'validators'    => array (     0 => array (    'type'    => 'ISINT',
                                                        'errmsg'=> 'limit_mailalias_error_notint'),
                                    ),
            'default'    => '-1',
            'value'        => '',
            'separator'    => '',
            'width'        => '10',
            'maxlength'    => '10',
            'rows'        => '',
            'cols'        => ''
        ),
        'limit_mailforward' => array (
            'datatype'    => 'INTEGER',
            'formtype'    => 'TEXT',
            'validators'    => array (     0 => array (    'type'    => 'ISINT',
                                                        'errmsg'=> 'limit_mailforward_error_notint'),
                                    ),
            'default'    => '-1',
            'value'        => '',
            'separator'    => '',
            'width'        => '10',
            'maxlength'    => '10',
            'rows'        => '',
            'cols'        => ''
        ),
        'limit_mailcatchall' => array (
            'datatype'    => 'INTEGER',
            'formtype'    => 'TEXT',
            'validators'    => array (     0 => array (    'type'    => 'ISINT',
                                                        'errmsg'=> 'limit_mailcatchall_error_notint'),
                                    ),
            'default'    => '-1',
            'value'        => '',
            'separator'    => '',
            'width'        => '10',
            'maxlength'    => '10',
            'rows'        => '',
            'cols'        => ''
        ),
        'limit_mailrouting' => array (
            'datatype'    => 'INTEGER',
            'formtype'    => 'TEXT',
            'validators'    => array (     0 => array (    'type'    => 'ISINT',
                                                        'errmsg'=> 'limit_mailrouting_error_notint'),
                                    ),
            'default'    => '0',
            'value'        => '',
            'separator'    => '',
            'width'        => '10',
            'maxlength'    => '10',
            'rows'        => '',
            'cols'        => ''
        ),
        'limit_mailfilter' => array (
            'datatype'    => 'INTEGER',
            'formtype'    => 'TEXT',
            'validators'    => array (     0 => array (    'type'    => 'ISINT',
                                                        'errmsg'=> 'limit_mailfilter_error_notint'),
                                    ),
            'default'    => '-1',
            'value'        => '',
            'separator'    => '',
            'width'        => '10',
            'maxlength'    => '10',
            'rows'        => '',
            'cols'        => ''
        ),
        'limit_fetchmail' => array (
            'datatype'    => 'INTEGER',
            'formtype'    => 'TEXT',
            'validators'    => array (     0 => array (    'type'    => 'ISINT',
                                                        'errmsg'=> 'limit_mailfetchmail_error_notint'),
                                    ),
            'default'    => '-1',
            'value'        => '',
            'separator'    => '',
            'width'        => '10',
            'maxlength'    => '10',
            'rows'        => '',
            'cols'        => ''
        ),
        'limit_mailquota' => array (
            'datatype'    => 'INTEGER',
            'formtype'    => 'TEXT',
            'validators'    => array (     0 => array (    'type'    => 'ISINT',
                                                        'errmsg'=> 'limit_mailquota_error_notint'),
                                    ),
            'default'    => '-1',
            'value'        => '',
            'separator'    => '',
            'width'        => '10',
            'maxlength'    => '10',
            'rows'        => '',
            'cols'        => ''
        ),
        'limit_spamfilter_wblist' => array (
            'datatype'    => 'INTEGER',
            'formtype'    => 'TEXT',
            'validators'    => array (     0 => array (    'type'    => 'ISINT',
                                                        'errmsg'=> 'limit_spamfilter_wblist_error_notint'),
                                    ),
            'default'    => '-1',
            'value'        => '',
            'separator'    => '',
            'width'        => '10',
            'maxlength'    => '10',
            'rows'        => '',
            'cols'        => ''
        ),
        'limit_spamfilter_user' => array (
            'datatype'    => 'INTEGER',
            'formtype'    => 'TEXT',
            'validators'    => array (     0 => array (    'type'    => 'ISINT',
                                                        'errmsg'=> 'limit_spamfilter_user_error_notint'),
                                    ),
            'default'    => '-1',
            'value'        => '',
            'separator'    => '',
            'width'        => '10',
            'maxlength'    => '10',
            'rows'        => '',
            'cols'        => ''
        ),
        'limit_spamfilter_policy' => array (
            'datatype'    => 'INTEGER',
            'formtype'    => 'TEXT',
            'validators'    => array (     0 => array (    'type'    => 'ISINT',
                                                        'errmsg'=> 'limit_spamfilter_policy_error_notint'),
                                    ),
            'default'    => '-1',
            'value'        => '',
            'separator'    => '',
            'width'        => '10',
            'maxlength'    => '10',
            'rows'        => '',
            'cols'        => ''
        ),
        'default_webserver' => array (
            'datatype'    => 'INTEGER',
            'formtype'    => 'SELECT',
            'default'    => '1',
            'datasource'    => array (     'type'    => 'SQL',
                                        'querystring' => 'SELECT server_id,server_name FROM server WHERE web_server = 1 AND {AUTHSQL} ORDER BY server_name',
                                        'keyfield'=> 'server_id',
                                        'valuefield'=> 'server_name'
                                     ),
            'value'        => ''
        ),
        'limit_web_domain' => array (
            'datatype'    => 'INTEGER',
            'formtype'    => 'TEXT',
            'validators'    => array (     0 => array (    'type'    => 'ISINT',
                                                        'errmsg'=> 'limit_web_domain_error_notint'),
                                    ),
            'default'    => '-1',
            'value'        => '',
            'separator'    => '',
            'width'        => '10',
            'maxlength'    => '10',
            'rows'        => '',
            'cols'        => ''
        ),
        'web_php_options' => array (
            'datatype'    => 'VARCHAR',
            'formtype'    => 'CHECKBOXARRAY',
            'default'    => '',
            'separator' => ',',
            'value'        => array('no' => 'Disabled', 'fast-cgi' => 'Fast-CGI', 'cgi' => 'CGI', 'mod' => 'Mod-PHP', 'suphp' => 'SuPHP')
        ),
        'limit_web_aliasdomain' => array (
            'datatype'    => 'INTEGER',
            'formtype'    => 'TEXT',
            'validators'    => array (     0 => array (    'type'    => 'ISINT',
                                                        'errmsg'=> 'limit_web_aliasdomain_error_notint'),
                                    ),
            'default'    => '-1',
            'value'        => '',
            'separator'    => '',
            'width'        => '10',
            'maxlength'    => '10',
            'rows'        => '',
            'cols'        => ''
        ),
        'limit_web_subdomain' => array (
            'datatype'    => 'INTEGER',
            'formtype'    => 'TEXT',
            'validators'    => array (     0 => array (    'type'    => 'ISINT',
                                                        'errmsg'=> 'limit_web_subdomain_error_notint'),
                                    ),
            'default'    => '-1',
            'value'        => '',
            'separator'    => '',
            'width'        => '10',
            'maxlength'    => '10',
            'rows'        => '',
            'cols'        => ''
        ),
        'limit_ftp_user' => array (
            'datatype'    => 'INTEGER',
            'formtype'    => 'TEXT',
            'validators'    => array (     0 => array (    'type'    => 'ISINT',
                                                        'errmsg'=> 'limit_ftp_user_error_notint'),
                                    ),
            'default'    => '-1',
            'value'        => '',
            'separator'    => '',
            'width'        => '10',
            'maxlength'    => '10',
            'rows'        => '',
            'cols'        => ''
        ),
        'limit_shell_user' => array (
            'datatype'    => 'INTEGER',
            'formtype'    => 'TEXT',
            'validators'    => array (     0 => array (    'type'    => 'ISINT',
                                                        'errmsg'=> 'limit_shell_user_error_notint'),
                                    ),
            'default'    => '-1',
            'value'        => '',
            'separator'    => '',
            'width'        => '10',
            'maxlength'    => '10',
            'rows'        => '',
            'cols'        => ''
        ),
        'ssh_chroot' => array (
            'datatype'    => 'VARCHAR',
            'formtype'    => 'CHECKBOXARRAY',
            'default'    => '',
            'separator' => ',',
            'value'        => array('no' => 'None', 'jailkit' => 'Jailkit')
        ),
        'default_dnsserver' => array (
            'datatype'    => 'INTEGER',
            'formtype'    => 'SELECT',
            'default'    => '1',
            'datasource'    => array (     'type'    => 'SQL',
                                        'querystring' => 'SELECT server_id,server_name FROM server WHERE dns_server = 1 AND {AUTHSQL} ORDER BY server_name',
                                        'keyfield'=> 'server_id',
                                        'valuefield'=> 'server_name'
                                     ),
            'value'        => ''
        ),
        'limit_dns_zone' => array (
            'datatype'    => 'INTEGER',
            'formtype'    => 'TEXT',
            'validators'    => array (     0 => array (    'type'    => 'ISINT',
                                                        'errmsg'=> 'limit_dns_zone_error_notint'),
                                    ),
            'default'    => '-1',
            'value'        => '',
            'separator'    => '',
            'width'        => '10',
            'maxlength'    => '10',
            'rows'        => '',
            'cols'        => ''
        ),
        'limit_dns_record' => array (
            'datatype'    => 'INTEGER',
            'formtype'    => 'TEXT',
            'validators'    => array (     0 => array (    'type'    => 'ISINT',
                                                        'errmsg'=> 'limit_dns_record_error_notint'),
                                    ),
            'default'    => '-1',
            'value'        => '',
            'separator'    => '',
            'width'        => '10',
            'maxlength'    => '10',
            'rows'        => '',
            'cols'        => ''
        ),
        'limit_client' => array (
            'datatype'    => 'INTEGER',
            'formtype'    => 'TEXT',
            'validators'    => array (     0 => array (    'type'    => 'ISINT',
                                                        'errmsg'=> 'limit_client_error_notint'),
                                        1 => array (    'type'    => 'CUSTOM',
                                                        'class' => 'validate_reseller',
                                                        'function' => 'limit_client'),
                                    ),
            'default'    => '1',
            'value'        => '',
            'separator'    => '',
            'width'        => '10',
            'maxlength'    => '10',
            'rows'        => '',
            'cols'        => ''
        ),
        'default_dbserver' => array (
            'datatype'    => 'INTEGER',
            'formtype'    => 'SELECT',
            'default'    => '1',
            'datasource'    => array (     'type'    => 'SQL',
                                        'querystring' => 'SELECT server_id,server_name FROM server WHERE db_server = 1 AND {AUTHSQL} ORDER BY server_name',
                                        'keyfield'=> 'server_id',
                                        'valuefield'=> 'server_name'
                                     ),
            'value'        => ''
        ),
        'limit_database' => array (
            'datatype'    => 'INTEGER',
            'formtype'    => 'TEXT',
            'validators'    => array (     0 => array (    'type'    => 'ISINT',
                                                        'errmsg'=> 'limit_database_error_notint'),
                                    ),
            'default'    => '-1',
            'value'        => '',
            'separator'    => '',
            'width'        => '10',
            'maxlength'    => '10',
            'rows'        => '',
            'cols'        => ''
        ),
        'limit_cron' => array (
            'datatype'  => 'INTEGER',
            'formtype'  => 'TEXT',
            'validators'    => array (  0 => array (    'type'  => 'ISINT',
                                                        'errmsg'=> 'limit_cron_error_notint'),
                                    ),
            'default'   => '0',
            'value'     => '',
            'separator' => '',
            'width'     => '10',
            'maxlength' => '10',
            'rows'      => '',
            'cols'      => ''
        ),
        'limit_cron_type' => array (
            'datatype'  => 'VARCHAR',
            'formtype'  => 'SELECT',
            'default'   => '',
            'value'     => array('full' => 'Full Cron','chrooted' => 'Chrooted Cron','url' => 'URL Cron')
        ),
        'limit_cron_frequency' => array (
            'datatype'  => 'INTEGER',
            'formtype'  => 'TEXT',
            'validators'    => array (  0 => array (    'type'  => 'ISINT',
                                                        'errmsg'=> 'limit_cron_error_frequency'),
                                    ),
            'default'   => '-1',
            'value'     => '',
            'separator' => '',
            'width'     => '10',
            'maxlength' => '10',
            'rows'      => '',
            'cols'      => ''
        ),
    ##################################
    # END Datatable fields
    ##################################
    )
);
/*
$form["tabs"]['ipaddress'] = array (
    'title'     => "IP Addresses",
    'width'     => 100,
    'template'     => "templates/client_edit_ipaddress.htm",
    'fields'     => array (
    ##################################
    # Beginn Datatable fields
    ##################################
        'ip_address' => array (
            'datatype'    => 'TEXT',
            'formtype'    => 'CHECKBOXARRAY',
            'default'    => '',
            'value'        => array('192.168.0.1' => '192.168.0.1', '192.168.0.2' => '192.168.0.2'),
            'separator'    => ';'
        ),
    ##################################
    # ENDE Datatable fields
    ##################################
    )
);
*/
?>
interface/web/client/lib/lang/bg_client.lng
@@ -80,4 +80,10 @@
$wb['template_additional_txt'] = 'Addon';
$wb['ssh_chroot_txt'] = 'SSH-Chroot Options';
$wb['web_php_options_txt'] = 'PHP Options';
$wb['limit_cron_txt'] = 'Max. number of cron jobs';
$wb['limit_cron_type_txt'] = 'Max. type of cron jobs (chrooted and full implies url)';
$wb['limit_cron_frequency_txt'] = 'Min. delay between executions';
$wb['limit_cron_error_notint'] = 'The cron limit must be a number.';
$wb['limit_cron_error_frequency'] = 'The cron frequency limit must be a number.';
$wb['limit_client_error'] = 'The max. number of clients is reached.';
?>
interface/web/client/lib/lang/bg_client_template.lng
@@ -44,4 +44,9 @@
$wb['limit_dns_zone_error_notint'] = 'The dns record limit must be a number.';
$wb['limit_database_error_notint'] = 'The database limit must be a number.';
$wb['error_template_name_empty'] = 'Please enter a Template name';
$wb['limit_cron_txt'] = 'Max. number of cron jobs';
$wb['limit_cron_type_txt'] = 'Max. type of cron jobs (chrooted and full implies url)';
$wb['limit_cron_frequency_txt'] = 'Min. delay between executions';
$wb['limit_cron_error_notint'] = 'The cron limit must be a number.';
$wb['limit_cron_error_frequency'] = 'The cron frequency limit must be a number.';
?>
interface/web/client/lib/lang/br.lng
New file
@@ -0,0 +1,10 @@
<?php
$wb['Client'] = 'Cliente';
$wb['Address'] = 'Endereço';
$wb['Limits'] = 'Limites';
$wb['Add Client'] = 'Adcionar Cliente';
$wb['Edit Client'] = 'Editar Cliente';
$wb['Clients'] = 'Clientes';
$wb['Edit Client-Templates'] = 'Editar Gabaritos de Clientes';
?>
interface/web/client/lib/lang/br_client.lng
New file
@@ -0,0 +1,85 @@
<?php
$wb['limit_maildomain_txt'] = 'Número máximo de domínios de correio';
$wb['limit_mailbox_txt'] = 'Número máximo de caixas de correio';
$wb['limit_mailalias_txt'] = 'Número máximo de aliases de correio';
$wb['limit_mailforward_txt'] = 'Número máximo de redirecionamento de correio';
$wb['limit_mailcatchall_txt'] = 'Número máximo de catchall de correio';
$wb['limit_mailrouting_txt'] = 'Número máximo de rotas de correio';
$wb['limit_mailfilter_txt'] = 'Número máximo de filtros de correio';
$wb['limit_fetchmail_txt'] = 'Número máximo de fetchmail de correio';
$wb['limit_mailquota_txt'] = 'Quota de Correio';
$wb['limit_spamfilter_wblist_txt'] = 'Número máximo de filtros spam lista branca / negra';
$wb['limit_spamfilter_user_txt'] = 'Número máximo de usuários de filtros spam';
$wb['limit_spamfilter_policy_txt'] = 'Número máximo de políticas de filtros spam';
$wb['default_mailserver_txt'] = 'Servidor de Correio Padrão';
$wb['company_name_txt'] = 'Empresa';
$wb['contact_name_txt'] = 'Contato';
$wb['username_txt'] = 'Nome de Usuário';
$wb['password_txt'] = 'Senha';
$wb['password_strength_txt'] = 'Segurança da senha';
$wb['language_txt'] = 'Idioma';
$wb['usertheme_txt'] = 'Tema';
$wb['street_txt'] = 'Rua';
$wb['zip_txt'] = 'CEP';
$wb['city_txt'] = 'Cidade';
$wb['state_txt'] = 'Estado';
$wb['country_txt'] = 'Pais';
$wb['telephone_txt'] = 'Telefone';
$wb['mobile_txt'] = 'Celular';
$wb['fax_txt'] = 'Fax';
$wb['email_txt'] = 'Correio Eletrônico';
$wb['internet_txt'] = 'Internet';
$wb['icq_txt'] = 'ICQ';
$wb['notes_txt'] = 'Notas';
$wb['company_txt'] = 'Empresa';
$wb['title_txt'] = 'Título';
$wb['firstname_txt'] = 'Nome';
$wb['surname_txt'] = 'Sobrenome';
$wb['limit_domain_txt'] = 'limite_dominio';
$wb['limit_subdomain_txt'] = 'limit_subdominio';
$wb['limit_webquota_txt'] = 'limit_webquota';
$wb['limit_database_txt'] = 'Número máximo de banco de dados';
$wb['ip_address_txt'] = 'endereco_ip';
$wb['limit_client_error_notint'] = 'O limite de um sub-cliente deve ser um número';
$wb['firstname_error_empty'] = 'Nome está em branco.';
$wb['contact_error_empty'] = 'Contato está em branco.';
$wb['default_webserver_txt'] = 'Servidor Web Padrão';
$wb['limit_web_domain_txt'] = 'Número máximo de domínios web';
$wb['limit_web_aliasdomain_txt'] = 'Número máximo de domínios alias';
$wb['limit_web_subdomain_txt'] = 'Número máximo de sub-domínios';
$wb['limit_ftp_user_txt'] = 'Número máximo de usuários FTP';
$wb['default_dnsserver_txt'] = 'Servidor de Nomes Padrão';
$wb['limit_dns_zone_txt'] = 'Número máximo de zonas DNS';
$wb['limit_dns_record_txt'] = 'Número máximo de registros DNS';
$wb['limit_shell_user_txt'] = 'Número máximo de usuários de shell';
$wb['limit_client_txt'] = 'Número máximo de clientes';
$wb['username_error_empty'] = 'Nome do usuário está em branco';
$wb['username_error_unique'] = 'O nome do usuário deve ser único';
$wb['limit_maildomain_error_notint'] = 'O limite de caixas de correio no domínio deve ser um número.';
$wb['limit_mailbox_error_notint'] = 'Limite da caixa de correio deve ser um número.';
$wb['limit_mailalias_error_notint'] = 'Limite do aliase de correio deve ser um número.';
$wb['limit_mailforward_error_notint'] = 'Limite de redirecionamento de correio deve ser um número';
$wb['limit_mailcatchall_error_notint'] = 'Limite de catchall deve ser um número.';
$wb['limit_mailrouting_error_notint'] = 'Limite de rotas de correio deve ser um número.';
$wb['limit_mailfilter_error_notint'] = 'Limite de filtros de correio deve ser um número.';
$wb['limit_mailfetchmail_error_notint'] = 'Limite de fetchmail deve ser um número.';
$wb['limit_mailquota_error_notint'] = 'A quota de correio deve ser um número';
$wb['limit_spamfilter_wblist_error_notint'] = 'O limite de filtros spam lista branca / negra deve ser um número.';
$wb['limit_spamfilter_user_error_notint'] = 'O limite de filtros spam do usuário deve ser um número.';
$wb['limit_spamfilter_policy_error_notint'] = 'O limite de políticas de filtros spam deve ser um número.';
$wb['limit_web_domain_error_notint'] = 'O limite de sites deve ser um número.';
$wb['limit_web_aliasdomain_error_notint'] = 'O limite de alias de domínios de sites deve ser um número.';
$wb['limit_web_subdomain_error_notint'] = 'O limite de sub-domínios de sites deve ser um número';
$wb['limit_ftp_user_error_notint'] = 'O limite de usuários de FTP deve ser um número.';
$wb['limit_shell_user_error_notint'] = 'O limite de usuários de Shell deve ser um número.';
$wb['limit_dns_zone_error_notint'] = 'O limite de registros de DNS deve ser um número';
$wb['default_dbserver_txt'] = 'Servidor de Banco de Dados Padrão';
$wb['limit_database_error_notint'] = 'O limite de banco de dados deve ser um número';
$wb['username_error_regex'] = 'O nome de usuário contem caracteres inválidos.';
$wb['template_master_txt'] = 'Gabarito Principal';
$wb['template_additional_txt'] = 'Template Adcional';
$wb['ssh_chroot_txt'] = 'Opções de SSH Chroot';
$wb['web_php_options_txt'] = 'Opções do PHP';
$wb['limit_client_error'] = 'O número máximo de clientes foi atingido.';
?>
interface/web/client/lib/lang/br_client_template.lng
New file
@@ -0,0 +1,48 @@
<?php
$wb['limit_client_error_notint'] = 'O limite do cliente não é um número.';
$wb['limit_maildomain_txt'] = 'Limite Máximo de domínios de correio';
$wb['limit_mailbox_txt'] = 'Limite Máximo de caixas de correio';
$wb['limit_mailalias_txt'] = 'Limite Máximo de alias de correio';
$wb['limit_mailforward_txt'] = 'Limite Máximo de redirecionamentos de correio';
$wb['limit_mailcatchall_txt'] = 'Limite máximo de contas catchall';
$wb['limit_mailrouting_txt'] = 'Limite máximo de rotas de Correio';
$wb['limit_mailfilter_txt'] = 'Número Máximo de Filtros de Correio';
$wb['limit_fetchmail_txt'] = 'Número Máximo de Contas fetchmail';
$wb['limit_mailquota_txt'] = 'Espaço de Caixa de Correio';
$wb['limit_spamfilter_wblist_txt'] = 'Número máximo de spamfilter permitidos /lista negra';
$wb['limit_spamfilter_user_txt'] = 'Número máx de usuários spamfilter';
$wb['limit_spamfilter_policy_txt'] = 'Número máx de políticas spamfilter';
$wb['limit_domain_txt'] = 'limite_dominio';
$wb['limit_subdomain_txt'] = 'limite_subdominio';
$wb['limit_webquota_txt'] = 'limite_webquota';
$wb['limit_database_txt'] = 'Número máximo de banco de dados';
$wb['limit_web_domain_txt'] = 'Número máximo de domínios web';
$wb['limit_web_aliasdomain_txt'] = 'Número maximo de apelidos web';
$wb['limit_web_subdomain_txt'] = 'Número máximo de sub-domínios';
$wb['limit_ftp_user_txt'] = 'Número máximo de usuários de FTP';
$wb['limit_dns_zone_txt'] = 'Número máximo de zonas DNS';
$wb['limit_dns_record_txt'] = 'Número máximo de registros DNS';
$wb['limit_shell_user_txt'] = 'Número máximo de usuários de Shell';
$wb['limit_client_txt'] = 'Número máximo de clientes';
$wb['limit_maildomain_error_notint'] = 'O limite de correio de domínio deve ser numérico';
$wb['limit_mailbox_error_notint'] = 'O limite da caixa de correio deve ser numérico';
$wb['limit_mailalias_error_notint'] = 'O limite do apelido de correio deve ser númerico';
$wb['limit_mailforward_error_notint'] = 'O limite de direcionamento de correio deve ser um número';
$wb['limit_mailcatchall_error_notint'] = 'O limite de catchall do domínio deve ser um número';
$wb['limit_mailrouting_error_notint'] = 'Limite de rota de correio deve ser um número';
$wb['limit_mailfilter_error_notint'] = 'O limite de filtro de correio deve ser um número.';
$wb['limit_mailfetchmail_error_notint'] = 'Limite fetchmail deve ser um número.';
$wb['limit_mailquota_error_notint'] = 'Cota de correio deve ser um número.';
$wb['limit_spamfilter_wblist_error_notint'] = 'O limite de spamfilter permitido / lista negra deve ser um número';
$wb['limit_spamfilter_user_error_notint'] = 'O limite do spamfilter deve ser um número.';
$wb['limit_spamfilter_policy_error_notint'] = 'O limite da política do spamfilter deve ser um número.';
$wb['limit_web_domain_error_notint'] = 'O limite de websites deve ser um número';
$wb['limit_web_aliasdomain_error_notint'] = 'O limite de apelidos de domínio deve ser um número';
$wb['limit_web_subdomain_error_notint'] = 'O limite de sub-domínios deve ser um número';
$wb['limit_ftp_user_error_notint'] = 'O limite de contas FTP deve ser um número';
$wb['limit_shell_user_error_notint'] = 'O limite de contas shell DNS deve ser um número';
$wb['limit_dns_zone_error_notint'] = 'O limite de zonas DNS deve ser um número';
$wb['limit_database_error_notint'] = 'O limite dos bancos de dados deve ser um número';
$wb['error_template_name_empty'] = 'Por favor insira o nome do gabarito';
?>
interface/web/client/lib/lang/br_client_template_list.lng
New file
@@ -0,0 +1,6 @@
<?php
$wb['list_head_txt'] = 'Gabarito de Cliente ';
$wb['template_type_txt'] = 'Tipo';
$wb['template_name_txt'] = 'Nome do Gabarito';
?>
interface/web/client/lib/lang/br_clients_list.lng
New file
@@ -0,0 +1,10 @@
<?php
$wb['list_head_txt'] = 'Clientes';
$wb['client_id_txt'] = 'ID';
$wb['company_name_txt'] = 'Empresa';
$wb['contact_name_txt'] = 'Nome do contato';
$wb['city_txt'] = 'Cidade';
$wb['country_txt'] = 'Pais';
$wb['add_new_record_txt'] = 'Adcionar novo cliente';
?>
interface/web/client/lib/lang/de_client.lng
@@ -39,6 +39,9 @@
$wb['limit_subdomain_txt'] = 'Max. Anzahl an Subdomains';
$wb['limit_webquota_txt'] = 'Max. Webquota';
$wb['limit_database_txt'] = 'Max. Anzahl an Datenbanken';
$wb['limit_cron_txt'] = 'Max. Anzahl Cron Jobs';
$wb['limit_cron_type_txt'] = 'Max. erlaubter Typ von Cron Jobs (chrooted und full erlauben auch url)';
$wb['limit_cron_frequency_txt'] = 'Min. Abstand zwischen Ausf&uuml;hrungen';
$wb['ip_address_txt'] = 'IP Adresse';
$wb['limit_client_error_notint'] = 'The sub client limit must be a number.';
$wb['firstname_error_empty'] = 'Vorname ist leer.';
@@ -74,10 +77,13 @@
$wb['limit_dns_zone_error_notint'] = 'Das DNS Einträge Limit muss eine Nummer sein.';
$wb['default_dbserver_txt'] = 'Standarddatenbankserver';
$wb['limit_database_error_notint'] = 'Das Datenbank Limit muss eine Nummer sein.';
$wb['limit_cron_error_notint'] = 'Das Cron Job Limit muss eine Zahl sein.';
$wb['limit_cron_error_frequency'] = 'Das Cron Job Intervall-Limit muss eine Zahl sein.';
$wb['username_error_regex'] = 'Der Benutzername enthält ungültige Zeichen.';
$wb['password_strength_txt'] = 'Passwortkomplexität';
$wb['template_master_txt'] = 'Master';
$wb['template_additional_txt'] = 'Addons';
$wb['ssh_chroot_txt'] = 'SSH-Chroot Optionen';
$wb['web_php_options_txt'] = 'PHP Optionen';
$wb['limit_client_error'] = 'The max. number of clients is reached.';
?>
interface/web/client/lib/lang/de_client_template.lng
@@ -17,6 +17,9 @@
$wb['limit_subdomain_txt'] = 'Max. Anzahl an Subdomains';
$wb['limit_webquota_txt'] = 'Max. Webquota';
$wb['limit_database_txt'] = 'Max. Anzahl an Datenbanken';
$wb['limit_cron_txt'] = 'Max. Anzahl Cron Jobs';
$wb['limit_cron_type_txt'] = 'Max. erlaubter Typ von Cron Jobs (chrooted und full erlauben auch url)';
$wb['limit_cron_frequency_txt'] = 'Min. Abstand zwischen Ausf&uuml;hrungen';
$wb['limit_web_domain_txt'] = 'Max. Anzahl an Web Domains';
$wb['limit_web_aliasdomain_txt'] = 'Max. Anzahl an Web Aliasdomains';
$wb['limit_web_subdomain_txt'] = 'Max. Anzahl an Web Subdomains';
@@ -43,5 +46,7 @@
$wb['limit_shell_user_error_notint'] = 'Das Shell Benutzer Limit muss eine Nummer sein.';
$wb['limit_dns_zone_error_notint'] = 'Das DNS Einträge Limit muss eine Nummer sein.';
$wb['limit_database_error_notint'] = 'Das Datenbanken Limit muss eine Nummer sein.';
$wb['limit_cron_error_notint'] = 'Das Cron Job Limit muss eine Zahl sein.';
$wb['limit_cron_error_frequency'] = 'Das Cron Job Intervall-Limit muss eine Zahl sein.';
$wb['error_template_name_empty'] = 'Bitte geben sie einen Vorlagenamen ein';
?>
interface/web/client/lib/lang/en.lng
@@ -6,4 +6,7 @@
$wb['Edit Client'] = 'Edit Client';
$wb['Clients'] = 'Clients';
$wb['Edit Client-Templates'] = 'Edit Client-Templates';
$wb['Add Reseller'] = 'Add Reseller';
$wb['Edit Reseller'] = 'Edit Reseller';
$wb['Resellers'] = 'Resellers';
?>
interface/web/client/lib/lang/en_client.lng
@@ -39,6 +39,9 @@
$wb["limit_subdomain_txt"] = 'limit_subdomain';
$wb["limit_webquota_txt"] = 'limit_webquota';
$wb["limit_database_txt"] = 'limit_database';
$wb["limit_cron_txt"] = 'Max. number of cron jobs';
$wb["limit_cron_type_txt"] = 'Max. type of cron jobs (chrooted and full implies url)';
$wb["limit_cron_frequency_txt"] = 'Min. delay between executions';
$wb["ip_address_txt"] = 'ip_address';
$wb["limit_client_error_notint"] = 'Client Limit is not a number.';
$wb["firstname_error_empty"] = 'Firstname is empty.';
@@ -78,6 +81,8 @@
$wb["default_dbserver_txt"] = 'Default Database Server';
$wb["limit_database_txt"] = 'Max. number of Databases';
$wb["limit_database_error_notint"] = 'The database limit must be a number.';
$wb["limit_cron_error_notint"] = 'The cron limit must be a number.';
$wb["limit_cron_error_frequency"] = 'The cron frequency limit must be a number.';
$wb["username_error_regex"] = 'The Username contains invalid chracaters.';
$wb["template_master_txt"] = 'Master template';
$wb["template_additional_txt"] = 'Addon template';
interface/web/client/lib/lang/en_client_template.lng
@@ -17,6 +17,9 @@
$wb["limit_subdomain_txt"] = 'limit_subdomain';
$wb["limit_webquota_txt"] = 'limit_webquota';
$wb["limit_database_txt"] = 'limit_database';
$wb["limit_cron_txt"] = 'Max. number of cron jobs';
$wb["limit_cron_type_txt"] = 'Max. type of cron jobs (chrooted and full implies url)';
$wb["limit_cron_frequency_txt"] = 'Min. delay between executions';
$wb["limit_web_domain_txt"] = 'Max. number of web domains';
$wb["limit_web_aliasdomain_txt"] = 'Max. number of web aliasdomains';
$wb["limit_web_subdomain_txt"] = 'Max. number of web subdomains';
@@ -46,5 +49,7 @@
$wb["limit_dns_zone_error_notint"] = 'The dns record limit must be a number.';
$wb["limit_database_txt"] = 'Max. number of Databases';
$wb["limit_database_error_notint"] = 'The database limit must be a number.';
$wb["limit_cron_error_notint"] = 'The cron limit must be a number.';
$wb["limit_cron_error_frequency"] = 'The cron frequency limit must be a number.';
$wb["error_template_name_empty"] = 'Please enter a Template name';
?>
interface/web/client/lib/lang/en_reseller.lng
New file
@@ -0,0 +1,93 @@
<?php
$wb["limit_maildomain_txt"] = 'Max. number of email domains';
$wb["limit_mailbox_txt"] = 'Max. number of mailboxes';
$wb["limit_mailalias_txt"] = 'Max. number of email aliases';
$wb["limit_mailforward_txt"] = 'Max. number of email forwarders';
$wb["limit_mailcatchall_txt"] = 'Max. number of email catchall accounts';
$wb["limit_mailrouting_txt"] = 'Max. number of email routes';
$wb["limit_mailfilter_txt"] = 'Max. number of email filters';
$wb["limit_fetchmail_txt"] = 'Max. number of fetchmail accounts';
$wb["limit_mailquota_txt"] = 'Mailbox quota';
$wb["limit_spamfilter_wblist_txt"] = 'Max. number of spamfilter white / blacklist filters';
$wb["limit_spamfilter_user_txt"] = 'Max. number of spamfilter users';
$wb["limit_spamfilter_policy_txt"] = 'Max. number of spamfilter policys';
$wb["default_mailserver_txt"] = 'Default Mailserver';
$wb["company_name_txt"] = 'Company name';
$wb["contact_name_txt"] = 'Contact name';
$wb["username_txt"] = 'Username';
$wb["password_txt"] = 'Password';
$wb["password_strength_txt"] = 'Password strength';
$wb["language_txt"] = 'Language';
$wb["usertheme_txt"] = 'Theme';
$wb["street_txt"] = 'Street';
$wb["zip_txt"] = 'ZIP';
$wb["city_txt"] = 'City';
$wb["state_txt"] = 'State';
$wb["country_txt"] = 'Country';
$wb["telephone_txt"] = 'Telephone';
$wb["mobile_txt"] = 'Mobile';
$wb["fax_txt"] = 'Fax';
$wb["email_txt"] = 'Email';
$wb["internet_txt"] = 'Internet';
$wb["icq_txt"] = 'ICQ';
$wb["notes_txt"] = 'Notes';
$wb["company_txt"] = 'Company';
$wb["title_txt"] = 'Title';
$wb["firstname_txt"] = 'Firstname';
$wb["surname_txt"] = 'Surname';
$wb["limit_domain_txt"] = 'limit_domain';
$wb["limit_subdomain_txt"] = 'limit_subdomain';
$wb["limit_webquota_txt"] = 'limit_webquota';
$wb["limit_database_txt"] = 'limit_database';
$wb["limit_cron_txt"] = 'Max. number of cron jobs';
$wb["limit_cron_type_txt"] = 'Max. type of cron jobs (chrooted and full implies url)';
$wb["limit_cron_frequency_txt"] = 'Min. delay between executions';
$wb["ip_address_txt"] = 'ip_address';
$wb["limit_client_error_notint"] = 'Client Limit is not a number.';
$wb["firstname_error_empty"] = 'Firstname is empty.';
$wb["contact_error_empty"] = 'Contact name is empty.';
$wb["default_webserver_txt"] = 'Default Webserver';
$wb["limit_web_domain_txt"] = 'Max. number of web domains';
$wb["limit_web_aliasdomain_txt"] = 'Max. number of web aliasdomains';
$wb["limit_web_subdomain_txt"] = 'Max. number of web subdomains';
$wb["limit_ftp_user_txt"] = 'Max. number of FTP users';
$wb["default_dnsserver_txt"] = 'Default DNS Server';
$wb["limit_dns_zone_txt"] = 'Max. number of DNS zones';
$wb["limit_dns_record_txt"] = 'Max. number DNS records';
$wb["limit_shell_user_txt"] = 'Max. number of Shell users';
$wb["limit_client_txt"] = 'Max. number of Clients';
$wb["username_error_empty"] = 'Username is empty.';
$wb["username_error_unique"] = 'The username must be unique.';
$wb["limit_maildomain_error_notint"] = 'The email domain limit must be a number.';
$wb["limit_mailbox_error_notint"] = 'The mailbox limit must be a number.';
$wb["limit_mailalias_error_notint"] = 'The email alias limit must be a number.';
$wb["limit_mailforward_error_notint"] = 'The email forward limit must be a number.';
$wb["limit_mailcatchall_error_notint"] = 'The email catchall limit must be a number.';
$wb["limit_mailrouting_error_notint"] = 'The email routing limit must be a number.';
$wb["limit_mailfilter_error_notint"] = 'The email filter limit must be a number.';
$wb["limit_mailfetchmail_error_notint"] = 'The fetchmail limit must be a number.';
$wb["limit_mailquota_error_notint"] = 'The email quota limit must be a number.';
$wb["limit_spamfilter_wblist_error_notint"] = 'The spamfilter white / blacklist limit must be a number.';
$wb["limit_spamfilter_user_error_notint"] = 'The spamfilter user limit must be a number.';
$wb["limit_spamfilter_policy_error_notint"] = 'The spamfilter policy limit must be a number.';
$wb["limit_web_domain_error_notint"] = 'The website limit must be a number.';
$wb["limit_web_aliasdomain_error_notint"] = 'The website alias domain limit must be a number.';
$wb["limit_web_subdomain_error_notint"] = 'The website subdomain limit must be a number.';
$wb["limit_ftp_user_error_notint"] = 'The ftp user limit must be a number.';
$wb["limit_shell_user_error_notint"] = 'The shell user limit must be a number.';
$wb["limit_dns_zone_error_notint"] = 'The dns zone limit must be a number.';
$wb["limit_dns_zone_error_notint"] = 'The dns record limit must be a number.';
$wb["limit_client_error_notint"] = 'The sub client limit must be a number.';
$wb["default_dbserver_txt"] = 'Default Database Server';
$wb["limit_database_txt"] = 'Max. number of Databases';
$wb["limit_database_error_notint"] = 'The database limit must be a number.';
$wb["limit_cron_error_notint"] = 'The cron limit must be a number.';
$wb["limit_cron_error_frequency"] = 'The cron frequency limit must be a number.';
$wb["username_error_regex"] = 'The Username contains invalid chracaters.';
$wb["template_master_txt"] = 'Master template';
$wb["template_additional_txt"] = 'Addon template';
$wb["ssh_chroot_txt"] = 'SSH-Chroot Options';
$wb["web_php_options_txt"] = 'PHP Options';
$wb["limit_client_error"] = 'The max. number of clients is reached.';
$wb["limit_client_error_positive"] = 'The number of clients must be > 0';
?>
interface/web/client/lib/lang/en_resellers_list.lng
New file
@@ -0,0 +1,9 @@
<?php
$wb["list_head_txt"] = 'Resellers';
$wb["client_id_txt"] = 'ID';
$wb["company_name_txt"] = 'Company name';
$wb["contact_name_txt"] = 'Contact name';
$wb["city_txt"] = 'City';
$wb["country_txt"] = 'Country';
$wb["add_new_record_txt"] = 'Add new reseller';
?>
interface/web/client/lib/lang/es_client.lng
@@ -80,4 +80,10 @@
$wb['template_additional_txt'] = 'Addon';
$wb['ssh_chroot_txt'] = 'SSH-Chroot Options';
$wb['web_php_options_txt'] = 'PHP Options';
$wb['limit_cron_txt'] = 'Max. number of cron jobs';
$wb['limit_cron_type_txt'] = 'Max. type of cron jobs (chrooted and full implies url)';
$wb['limit_cron_frequency_txt'] = 'Min. delay between executions';
$wb['limit_cron_error_notint'] = 'The cron limit must be a number.';
$wb['limit_cron_error_frequency'] = 'The cron frequency limit must be a number.';
$wb['limit_client_error'] = 'The max. number of clients is reached.';
?>
interface/web/client/lib/lang/es_client_template.lng
@@ -44,4 +44,9 @@
$wb['limit_dns_zone_error_notint'] = 'The dns record limit must be a number.';
$wb['limit_database_error_notint'] = 'The database limit must be a number.';
$wb['error_template_name_empty'] = 'Please enter a Template name';
$wb['limit_cron_txt'] = 'Max. number of cron jobs';
$wb['limit_cron_type_txt'] = 'Max. type of cron jobs (chrooted and full implies url)';
$wb['limit_cron_frequency_txt'] = 'Min. delay between executions';
$wb['limit_cron_error_notint'] = 'The cron limit must be a number.';
$wb['limit_cron_error_frequency'] = 'The cron frequency limit must be a number.';
?>
interface/web/client/lib/lang/fi_client.lng
@@ -80,4 +80,10 @@
$wb['template_additional_txt'] = 'Lisämalli';
$wb['ssh_chroot_txt'] = 'SSH-Chroot Options';
$wb['web_php_options_txt'] = 'PHP Options';
$wb['limit_cron_txt'] = 'Max. number of cron jobs';
$wb['limit_cron_type_txt'] = 'Max. type of cron jobs (chrooted and full implies url)';
$wb['limit_cron_frequency_txt'] = 'Min. delay between executions';
$wb['limit_cron_error_notint'] = 'The cron limit must be a number.';
$wb['limit_cron_error_frequency'] = 'The cron frequency limit must be a number.';
$wb['limit_client_error'] = 'The max. number of clients is reached.';
?>
interface/web/client/lib/lang/fi_client_template.lng
@@ -44,4 +44,9 @@
$wb['limit_dns_zone_error_notint'] = 'DNS-tietueiden raja-arvon pitää olla numero.';
$wb['limit_database_error_notint'] = 'Tietokantojen raja-arvon pitää olla numero.';
$wb['error_template_name_empty'] = 'Anna mallilomakkeen nimi';
$wb['limit_cron_txt'] = 'Max. number of cron jobs';
$wb['limit_cron_type_txt'] = 'Max. type of cron jobs (chrooted and full implies url)';
$wb['limit_cron_frequency_txt'] = 'Min. delay between executions';
$wb['limit_cron_error_notint'] = 'The cron limit must be a number.';
$wb['limit_cron_error_frequency'] = 'The cron frequency limit must be a number.';
?>
interface/web/client/lib/lang/fr_client.lng
@@ -80,4 +80,10 @@
$wb['template_additional_txt'] = 'Addon';
$wb['ssh_chroot_txt'] = 'SSH-Chroot Options';
$wb['web_php_options_txt'] = 'PHP Options';
$wb['limit_cron_txt'] = 'Max. number of cron jobs';
$wb['limit_cron_type_txt'] = 'Max. type of cron jobs (chrooted and full implies url)';
$wb['limit_cron_frequency_txt'] = 'Min. delay between executions';
$wb['limit_cron_error_notint'] = 'The cron limit must be a number.';
$wb['limit_cron_error_frequency'] = 'The cron frequency limit must be a number.';
$wb['limit_client_error'] = 'The max. number of clients is reached.';
?>
interface/web/client/lib/lang/fr_client_template.lng
@@ -44,4 +44,9 @@
$wb['limit_dns_zone_error_notint'] = 'The dns record limit must be a number.';
$wb['limit_database_error_notint'] = 'The database limit must be a number.';
$wb['error_template_name_empty'] = 'Please enter a Template name';
$wb['limit_cron_txt'] = 'Max. number of cron jobs';
$wb['limit_cron_type_txt'] = 'Max. type of cron jobs (chrooted and full implies url)';
$wb['limit_cron_frequency_txt'] = 'Min. delay between executions';
$wb['limit_cron_error_notint'] = 'The cron limit must be a number.';
$wb['limit_cron_error_frequency'] = 'The cron frequency limit must be a number.';
?>
interface/web/client/lib/lang/it_client.lng
@@ -80,4 +80,10 @@
$wb['template_additional_txt'] = 'Aggiuntivo';
$wb['ssh_chroot_txt'] = 'SSH-Chroot Options';
$wb['web_php_options_txt'] = 'PHP Options';
$wb['limit_cron_txt'] = 'Max. number of cron jobs';
$wb['limit_cron_type_txt'] = 'Max. type of cron jobs (chrooted and full implies url)';
$wb['limit_cron_frequency_txt'] = 'Min. delay between executions';
$wb['limit_cron_error_notint'] = 'The cron limit must be a number.';
$wb['limit_cron_error_frequency'] = 'The cron frequency limit must be a number.';
$wb['limit_client_error'] = 'The max. number of clients is reached.';
?>
interface/web/client/lib/lang/it_client_template.lng
@@ -44,4 +44,9 @@
$wb['limit_dns_zone_error_notint'] = 'The dns record limit must be a number.';
$wb['limit_database_error_notint'] = 'The database limit must be a number.';
$wb['error_template_name_empty'] = 'Devi inserire il nome del modello';
$wb['limit_cron_txt'] = 'Max. number of cron jobs';
$wb['limit_cron_type_txt'] = 'Max. type of cron jobs (chrooted and full implies url)';
$wb['limit_cron_frequency_txt'] = 'Min. delay between executions';
$wb['limit_cron_error_notint'] = 'The cron limit must be a number.';
$wb['limit_cron_error_frequency'] = 'The cron frequency limit must be a number.';
?>
interface/web/client/lib/lang/nl_client.lng
@@ -80,4 +80,10 @@
$wb['template_additional_txt'] = 'Addon';
$wb['ssh_chroot_txt'] = 'SSH-Chroot Options';
$wb['web_php_options_txt'] = 'PHP Options';
$wb['limit_cron_txt'] = 'Max. number of cron jobs';
$wb['limit_cron_type_txt'] = 'Max. type of cron jobs (chrooted and full implies url)';
$wb['limit_cron_frequency_txt'] = 'Min. delay between executions';
$wb['limit_cron_error_notint'] = 'The cron limit must be a number.';
$wb['limit_cron_error_frequency'] = 'The cron frequency limit must be a number.';
$wb['limit_client_error'] = 'The max. number of clients is reached.';
?>
interface/web/client/lib/lang/nl_client_template.lng
@@ -44,4 +44,9 @@
$wb['limit_dns_zone_error_notint'] = 'De dns record limiet moet een numerieke waarde zijn.';
$wb['limit_database_error_notint'] = 'De database limiet moet een numerieke waarde zijn.';
$wb['error_template_name_empty'] = 'Voer a.u.b. de template naam in.';
$wb['limit_cron_txt'] = 'Max. number of cron jobs';
$wb['limit_cron_type_txt'] = 'Max. type of cron jobs (chrooted and full implies url)';
$wb['limit_cron_frequency_txt'] = 'Min. delay between executions';
$wb['limit_cron_error_notint'] = 'The cron limit must be a number.';
$wb['limit_cron_error_frequency'] = 'The cron frequency limit must be a number.';
?>
interface/web/client/lib/lang/ru_client.lng
@@ -80,4 +80,10 @@
$wb['template_additional_txt'] = 'Addon';
$wb['ssh_chroot_txt'] = 'SSH-Chroot Options';
$wb['web_php_options_txt'] = 'PHP Options';
$wb['limit_cron_txt'] = 'Max. number of cron jobs';
$wb['limit_cron_type_txt'] = 'Max. type of cron jobs (chrooted and full implies url)';
$wb['limit_cron_frequency_txt'] = 'Min. delay between executions';
$wb['limit_cron_error_notint'] = 'The cron limit must be a number.';
$wb['limit_cron_error_frequency'] = 'The cron frequency limit must be a number.';
$wb['limit_client_error'] = 'The max. number of clients is reached.';
?>
interface/web/client/lib/lang/ru_client_template.lng
@@ -44,4 +44,9 @@
$wb['limit_dns_zone_error_notint'] = 'The dns record limit must be a number.';
$wb['limit_database_error_notint'] = 'The database limit must be a number.';
$wb['error_template_name_empty'] = 'Please enter a Template name';
$wb['limit_cron_txt'] = 'Max. number of cron jobs';
$wb['limit_cron_type_txt'] = 'Max. type of cron jobs (chrooted and full implies url)';
$wb['limit_cron_frequency_txt'] = 'Min. delay between executions';
$wb['limit_cron_error_notint'] = 'The cron limit must be a number.';
$wb['limit_cron_error_frequency'] = 'The cron frequency limit must be a number.';
?>
interface/web/client/lib/lang/se_client.lng
@@ -80,4 +80,10 @@
$wb['template_additional_txt'] = 'Addon';
$wb['ssh_chroot_txt'] = 'SSH-Chroot Options';
$wb['web_php_options_txt'] = 'PHP Options';
$wb['limit_cron_txt'] = 'Max. number of cron jobs';
$wb['limit_cron_type_txt'] = 'Max. type of cron jobs (chrooted and full implies url)';
$wb['limit_cron_frequency_txt'] = 'Min. delay between executions';
$wb['limit_cron_error_notint'] = 'The cron limit must be a number.';
$wb['limit_cron_error_frequency'] = 'The cron frequency limit must be a number.';
$wb['limit_client_error'] = 'The max. number of clients is reached.';
?>
interface/web/client/lib/lang/se_client_template.lng
@@ -44,4 +44,9 @@
$wb['limit_dns_zone_error_notint'] = 'The dns record limit must be a number.';
$wb['limit_database_error_notint'] = 'The database limit must be a number.';
$wb['error_template_name_empty'] = 'Please enter a Template name';
$wb['limit_cron_txt'] = 'Max. number of cron jobs';
$wb['limit_cron_type_txt'] = 'Max. type of cron jobs (chrooted and full implies url)';
$wb['limit_cron_frequency_txt'] = 'Min. delay between executions';
$wb['limit_cron_error_notint'] = 'The cron limit must be a number.';
$wb['limit_cron_error_frequency'] = 'The cron frequency limit must be a number.';
?>
interface/web/client/lib/module.conf.php
@@ -28,4 +28,36 @@
$module["nav"][] = array(    'title'    => 'Clients',
                            'open'     => 1,
                            'items'    => $items);
unset($items);
if($_SESSION["s"]["user"]["typ"] == 'admin'){
$items[] = array( 'title'     => "Add Reseller",
                  'target'     => 'content',
                  'link'    => 'client/reseller_edit.php');
$items[] = array( 'title'     => "Edit Reseller",
                  'target'     => 'content',
                  'link'    => 'client/reseller_list.php');
$module["nav"][] = array(    'title'    => 'Resellers',
                            'open'     => 1,
                            'items'    => $items);
}
?>
interface/web/client/list/reseller.list.php
New file
@@ -0,0 +1,87 @@
<?php
/*
    Datatypes:
    - INTEGER
    - DOUBLE
    - CURRENCY
    - VARCHAR
    - TEXT
    - DATE
*/
// Name of the list
$liste["name"]                 = "resellers";
// Database table
$liste["table"]             = "client";
// Index index field of the database table
$liste["table_idx"]            = "client_id";
// Search Field Prefix
$liste["search_prefix"]     = "search_";
// Records per page
$liste["records_per_page"]     = 15;
// Script File of the list
$liste["file"]                = "reseller_list.php";
// Script file of the edit form
$liste["edit_file"]            = "reseller_edit.php";
// Script File of the delete script
$liste["delete_file"]        = "reseller_del.php";
// Paging Template
$liste["paging_tpl"]        = "templates/paging.tpl.htm";
// Enable authe
$liste["auth"]                = "yes";
/*****************************************************
* Suchfelder
*****************************************************/
$liste["item"][] = array(    'field'        => "company_name",
                            'datatype'    => "VARCHAR",
                            'formtype'    => "TEXT",
                            'op'        => "like",
                            'prefix'    => "%",
                            'suffix'    => "%",
                            'width'        => "",
                            'value'        => "");
$liste["item"][] = array(    'field'        => "contact_name",
                            'datatype'    => "VARCHAR",
                            'formtype'    => "TEXT",
                            'op'        => "like",
                            'prefix'    => "%",
                            'suffix'    => "%",
                            'width'        => "",
                            'value'        => "");
$liste["item"][] = array(    'field'        => "city",
                            'datatype'    => "VARCHAR",
                            'formtype'    => "TEXT",
                            'op'        => "like",
                            'prefix'    => "%",
                            'suffix'    => "%",
                            'width'        => "",
                            'value'        => "");
$liste["item"][] = array(    'field'        => "country",
                            'datatype'    => "VARCHAR",
                            'formtype'    => "TEXT",
                            'op'        => "like",
                            'prefix'    => "%",
                            'suffix'    => "%",
                            'width'        => "",
                            'value'        => "");
?>
interface/web/client/reseller_del.php
New file
@@ -0,0 +1,81 @@
<?php
/*
Copyright (c) 2005 - 2009, 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.
*/
/******************************************
* Begin Form configuration
******************************************/
$list_def_file = "list/reseller.list.php";
$tform_def_file = "form/reseller.tform.php";
/******************************************
* End Form configuration
******************************************/
require_once('../../lib/config.inc.php');
require_once('../../lib/app.inc.php');
//* Check permissions for module
$app->auth->check_module_permissions('client');
if($_SESSION["s"]["user"]["typ"] != 'admin') die('Access only for administrators.');
$app->uses('tpl,tform');
$app->load('tform_actions');
class page_action extends tform_actions {
    function onAfterDelete() {
        global $app, $conf;
        $client_id = intval($this->dataRecord['client_id']);
        if($client_id > 0) {
            // TODO: Delete all records (sub-clients, mail, web, etc....)  of this client.
            // remove the group of the client from the resellers group
            $parent_client_id = intval($this->dataRecord['parent_client_id']);
            $parent_user = $app->db->queryOneRecord("SELECT userid FROM sys_user WHERE client_id = $parent_client_id");
            $client_group = $app->db->queryOneRecord("SELECT groupid FROM sys_group WHERE client_id = $client_id");
            $app->auth->remove_group_from_user($parent_user['userid'],$client_group['groupid']);
            // delete the group of the client
            $app->db->query("DELETE FROM sys_group WHERE client_id = $client_id");
            // delete the sys user(s) of the client
            $app->db->query("DELETE FROM sys_user WHERE client_id = $client_id");
        }
    }
}
$page = new page_action;
$page->onDelete()
?>
interface/web/client/reseller_edit.php
New file
@@ -0,0 +1,214 @@
<?php
/*
Copyright (c) 2005 - 2009, 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.
*/
/******************************************
* Begin Form configuration
******************************************/
$tform_def_file = "form/reseller.tform.php";
/******************************************
* End Form configuration
******************************************/
require_once('../../lib/config.inc.php');
require_once('../../lib/app.inc.php');
require_once('tools.inc.php');
//* Check permissions for module
$app->auth->check_module_permissions('client');
if($_SESSION["s"]["user"]["typ"] != 'admin') die('Access only for administrators.');
// Loading classes
$app->uses('tpl,tform,tform_actions');
$app->load('tform_actions');
class page_action extends tform_actions {
    function onShowNew() {
        global $app, $conf;
        // we will check only users, not admins
        if($_SESSION["s"]["user"]["typ"] == 'user') {
            // Get the limits of the client
            $client_group_id = $_SESSION["s"]["user"]["default_group"];
            $client = $app->db->queryOneRecord("SELECT limit_client FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
            // Check if the user may add another website.
            if($client["limit_client"] >= 0) {
                $tmp = $app->db->queryOneRecord("SELECT count(client_id) as number FROM client WHERE sys_groupid = $client_group_id");
                if($tmp["number"] >= $client["limit_client"]) {
                    $app->error($app->tform->wordbook["limit_client_txt"]);
                }
            }
        }
        parent::onShowNew();
    }
    function onSubmit() {
        global $app, $conf;
        // we will check only users, not admins
        if($_SESSION["s"]["user"]["typ"] == 'user' && $this->id == 0) {
            // Get the limits of the client
            $client_group_id = $_SESSION["s"]["user"]["default_group"];
            $client = $app->db->queryOneRecord("SELECT limit_client FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
            // Check if the user may add another website.
            if($client["limit_client"] >= 0) {
                $tmp = $app->db->queryOneRecord("SELECT count(client_id) as number FROM client WHERE sys_groupid = $client_group_id");
                if($tmp["number"] >= $client["limit_client"]) {
                    $app->error($app->tform->wordbook["limit_client_txt"]);
                }
            }
        }
        parent::onSubmit();
    }
    function onShowEnd() {
        global $app;
        $sql = "SELECT template_id,template_name FROM client_template WHERE template_type = 'a'";
        $tpls = $app->db->queryAllRecords($sql);
        $option = '';
        $tpl = array();
        foreach($tpls as $item){
            $option .= '<option value="' . $item['template_id'] . '|' .  $item['template_name'] . '">' . $item['template_name'] . '</option>';
            $tpl[$item['template_id']] = $item['template_name'];
        }
        $app->tpl->setVar('tpl_add_select',$option);
        $sql = "SELECT template_additional FROM client WHERE client_id = " . $this->id;
        $result = $app->db->queryOneRecord($sql);
        $tplAdd = explode("/", $result['template_additional']);
        $text = '';
        foreach($tplAdd as $item){
            if (trim($item) != ''){
                if ($text != '') $text .= '<br />';
                $text .= $tpl[$item];
            }
        }
        $app->tpl->setVar('template_additional_list', $text);
        parent::onShowEnd();
    }
    /*
     This function is called automatically right after
     the data was successful inserted in the database.
    */
    function onAfterInsert() {
        global $app;
        // Create the group for the reseller
        $groupid = $app->db->datalogInsert('sys_group', "(name,description,client_id) VALUES ('".mysql_real_escape_string($this->dataRecord["username"])."','',".$this->id.")", 'groupid');
        $groups = $groupid;
        $username = $app->db->quote($this->dataRecord["username"]);
        $password = $app->db->quote($this->dataRecord["password"]);
        $modules = ISPC_INTERFACE_MODULES_ENABLED.',client';
        $startmodule = 'client';
        $usertheme = $app->db->quote($this->dataRecord["usertheme"]);
        $type = 'user';
        $active = 1;
        $language = $app->db->quote($this->dataRecord["language"]);
        // Create the controlpaneluser for the reseller
        $sql = "INSERT INTO sys_user (username,passwort,modules,startmodule,app_theme,typ,active,language,groups,default_group,client_id)
        VALUES ('$username',md5('$password'),'$modules','$startmodule','$usertheme','$type','$active','$language',$groups,$groupid,".$this->id.")";
        $app->db->query($sql);
        //* set the number of clients to 1
        $app->db->query("UPDATE client SET limit_client = 1 WHERE client_id = ".$this->id);
        /* If there is a client-template, process it */
        applyClientTemplates($this->id);
        parent::onAfterInsert();
    }
    /*
     This function is called automatically right after
     the data was successful updated in the database.
    */
    function onAfterUpdate() {
        global $app;
        // username changed
        if(isset($this->dataRecord['username']) && $this->dataRecord['username'] != '' && $this->oldDataRecord['username'] != $this->dataRecord['username']) {
            $username = $app->db->quote($this->dataRecord["username"]);
            $client_id = $this->id;
            $sql = "UPDATE sys_user SET username = '$username' WHERE client_id = $client_id";
            $app->db->query($sql);
            $tmp = $app->db->queryOneRecord("SELECT * FROM sys_group WHERE client_id = $client_id");
            $app->db->datalogUpdate("sys_group", "name = '$username'", 'groupid', $tmp['groupid']);
            unset($tmp);
        }
        // password changed
        if(isset($this->dataRecord["password"]) && $this->dataRecord["password"] != '') {
            $password = $app->db->quote($this->dataRecord["password"]);
            $client_id = $this->id;
            $sql = "UPDATE sys_user SET passwort = md5('$password') WHERE client_id = $client_id";
            $app->db->query($sql);
        }
        // reseller status changed
        if(isset($this->dataRecord["limit_client"]) && $this->dataRecord["limit_client"] != $this->oldDataRecord["limit_client"]) {
            $modules = ISPC_INTERFACE_MODULES_ENABLED.',client';
            $modules = $app->db->quote($modules);
            $client_id = $this->id;
            $sql = "UPDATE sys_user SET modules = '$modules' WHERE client_id = $client_id";
            $app->db->query($sql);
        }
        /*
         *  If there is a client-template, process it */
        applyClientTemplates($this->id);
        parent::onAfterUpdate();
    }
}
$page = new page_action;
$page->onLoad();
?>
interface/web/client/reseller_list.php
New file
@@ -0,0 +1,55 @@
<?php
/*
Copyright (c) 2005 - 2009, 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.
*/
require_once('../../lib/config.inc.php');
require_once('../../lib/app.inc.php');
/******************************************
* Begin Form configuration
******************************************/
$list_def_file = "list/reseller.list.php";
/******************************************
* End Form configuration
******************************************/
//* Check permissions for module
$app->auth->check_module_permissions('client');
if($_SESSION["s"]["user"]["typ"] != 'admin') die('Access only for administrators.');
$app->uses('listform_actions');
$app->listform_actions->SQLOrderBy = 'ORDER BY company_name, contact_name, client_id';
$app->listform_actions->SQLExtWhere = "limit_client > 0";
$app->listform_actions->onLoad();
?>
interface/web/client/templates/client_edit_limits.htm
@@ -142,10 +142,6 @@
        <input name="limit_dns_record" id="limit_dns_record" value="{tmpl_var name='limit_dns_record'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
            </div>
      <div class="ctrlHolder">
          <label for="limit_client">{tmpl_var name='limit_client_txt'}</label>
        <input name="limit_client" id="limit_client" value="{tmpl_var name='limit_client'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
            </div>
      <div class="ctrlHolder">
          <label for="default_dbserver">{tmpl_var name='default_dbserver_txt'}</label>
        <select name="default_dbserver" id="default_dbserver" class="selectInput">
                    {tmpl_var name='default_dbserver'}
@@ -155,6 +151,20 @@
          <label for="limit_database">{tmpl_var name='limit_database_txt'}</label>
        <input name="limit_database" id="limit_database" value="{tmpl_var name='limit_database'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
            </div>
      <div class="ctrlHolder">
        <label for="limit_cron">{tmpl_var name='limit_cron_txt'}</label>
        <input name="limit_cron" id="limit_cron" value="{tmpl_var name='limit_cron'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
            </div>
      <div class="ctrlHolder">
        <label for="limit_cron_type">{tmpl_var name='limit_cron_type_txt'}</label>
        <select name="limit_cron_type" id="limit_cron_type" class="selectInput formLengthHalf">
          {tmpl_var name='limit_cron_type'}
        </select>
            </div>
      <div class="ctrlHolder">
        <label for="limit_cron_frequency">{tmpl_var name='limit_cron_frequency_txt'}</label>
        <input name="limit_cron_frequency" id="limit_cron_frequency" value="{tmpl_var name='limit_cron_frequency'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
            </div>
    </fieldset>
    <input type="hidden" name="id" value="{tmpl_var name='id'}">
interface/web/client/templates/client_template_edit_limits.htm
@@ -1,102 +1,112 @@
<h2><tmpl_var name="list_head_txt"></h2>
<p><tmpl_var name="list_desc_txt"></p>
<div class="panel panel_client_template">
  <div class="pnl_formsarea">
    <fieldset class="inlineLabels"><legend>Limits</legend>
      <div class="ctrlHolder">
          <label for="limit_maildomain">{tmpl_var name='limit_maildomain_txt'}</label>
        <input name="limit_maildomain" id="limit_maildomain" value="{tmpl_var name='limit_maildomain'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
            </div>
      <div class="ctrlHolder">
          <label for="limit_mailbox">{tmpl_var name='limit_mailbox_txt'}</label>
        <input name="limit_mailbox" id="limit_mailbox" value="{tmpl_var name='limit_mailbox'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
            </div>
      <div class="ctrlHolder">
          <label for="limit_mailalias">{tmpl_var name='limit_mailalias_txt'}</label>
        <input name="limit_mailalias" id="limit_mailalias" value="{tmpl_var name='limit_mailalias'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
            </div>
      <div class="ctrlHolder">
          <label for="limit_mailforward">{tmpl_var name='limit_mailforward_txt'}</label>
        <input name="limit_mailforward" id="limit_mailforward" value="{tmpl_var name='limit_mailforward'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
            </div>
      <div class="ctrlHolder">
          <label for="limit_mailcatchall">{tmpl_var name='limit_mailcatchall_txt'}</label>
        <input name="limit_mailcatchall" id="limit_mailcatchall" value="{tmpl_var name='limit_mailcatchall'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
            </div>
      <div class="ctrlHolder">
          <label for="limit_mailrouting">{tmpl_var name='limit_mailrouting_txt'}</label>
        <input name="limit_mailrouting" id="limit_mailrouting" value="{tmpl_var name='limit_mailrouting'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
            </div>
      <div class="ctrlHolder">
          <label for="limit_mailfilter">{tmpl_var name='limit_mailfilter_txt'}</label>
        <input name="limit_mailfilter" id="limit_mailfilter" value="{tmpl_var name='limit_mailfilter'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
            </div>
      <div class="ctrlHolder">
          <label for="limit_fetchmail">{tmpl_var name='limit_fetchmail_txt'}</label>
        <input name="limit_fetchmail" id="limit_fetchmail" value="{tmpl_var name='limit_fetchmail'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
            </div>
      <div class="ctrlHolder">
          <label for="limit_mailquota">{tmpl_var name='limit_mailquota_txt'}</label>
        <input name="limit_mailquota" id="limit_mailquota" value="{tmpl_var name='limit_mailquota'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
            </div>
      <div class="ctrlHolder">
          <label for="limit_spamfilter_wblist">{tmpl_var name='limit_spamfilter_wblist_txt'}</label>
        <input name="limit_spamfilter_wblist" id="limit_spamfilter_wblist" value="{tmpl_var name='limit_spamfilter_wblist'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
            </div>
      <div class="ctrlHolder">
          <label for="limit_spamfilter_user">{tmpl_var name='limit_spamfilter_user_txt'}</label>
        <input name="limit_spamfilter_user" id="limit_spamfilter_user" value="{tmpl_var name='limit_spamfilter_user'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
            </div>
      <div class="ctrlHolder">
          <label for="limit_spamfilter_policy">{tmpl_var name='limit_spamfilter_policy_txt'}</label>
        <input name="limit_spamfilter_policy" id="limit_spamfilter_policy" value="{tmpl_var name='limit_spamfilter_policy'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
            </div>
      <div class="ctrlHolder">
          <label for="limit_web_domain">{tmpl_var name='limit_web_domain_txt'}</label>
        <input name="limit_web_domain" id="limit_web_domain" value="{tmpl_var name='limit_web_domain'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
            </div>
      <div class="ctrlHolder">
          <label for="limit_web_aliasdomain">{tmpl_var name='limit_web_aliasdomain_txt'}</label>
        <input name="limit_web_aliasdomain" id="limit_web_aliasdomain" value="{tmpl_var name='limit_web_aliasdomain'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
            </div>
      <div class="ctrlHolder">
          <label for="limit_web_subdomain">{tmpl_var name='limit_web_subdomain_txt'}</label>
        <input name="limit_web_subdomain" id="limit_web_subdomain" value="{tmpl_var name='limit_web_subdomain'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
            </div>
      <div class="ctrlHolder">
          <label for="limit_ftp_user">{tmpl_var name='limit_ftp_user_txt'}</label>
        <input name="limit_ftp_user" id="limit_ftp_user" value="{tmpl_var name='limit_ftp_user'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
            </div>
      <div class="ctrlHolder">
          <label for="limit_shell_user">{tmpl_var name='limit_shell_user_txt'}</label>
        <input name="limit_shell_user" id="limit_shell_user" value="{tmpl_var name='limit_shell_user'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
            </div>
      <div class="ctrlHolder">
          <label for="limit_dns_zone">{tmpl_var name='limit_dns_zone_txt'}</label>
        <input name="limit_dns_zone" id="limit_dns_zone" value="{tmpl_var name='limit_dns_zone'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
            </div>
      <div class="ctrlHolder">
          <label for="limit_dns_record">{tmpl_var name='limit_dns_record_txt'}</label>
        <input name="limit_dns_record" id="limit_dns_record" value="{tmpl_var name='limit_dns_record'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
            </div>
      <div class="ctrlHolder">
          <label for="limit_client">{tmpl_var name='limit_client_txt'}</label>
        <input name="limit_client" id="limit_client" value="{tmpl_var name='limit_client'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
            </div>
      <div class="ctrlHolder">
          <label for="limit_database">{tmpl_var name='limit_database_txt'}</label>
        <input name="limit_database" id="limit_database" value="{tmpl_var name='limit_database'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
            </div>
    </fieldset>
    <input type="hidden" name="id" value="{tmpl_var name='id'}">
    <div class="buttonHolder buttons">
      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','client/client_template_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('client/client_template_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
    </div>
  </div>
</div>
<h2><tmpl_var name="list_head_txt"></h2>
<p><tmpl_var name="list_desc_txt"></p>
<div class="panel panel_client_template">
  <div class="pnl_formsarea">
    <fieldset class="inlineLabels"><legend>Limits</legend>
      <div class="ctrlHolder">
          <label for="limit_maildomain">{tmpl_var name='limit_maildomain_txt'}</label>
        <input name="limit_maildomain" id="limit_maildomain" value="{tmpl_var name='limit_maildomain'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
            </div>
      <div class="ctrlHolder">
          <label for="limit_mailbox">{tmpl_var name='limit_mailbox_txt'}</label>
        <input name="limit_mailbox" id="limit_mailbox" value="{tmpl_var name='limit_mailbox'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
            </div>
      <div class="ctrlHolder">
          <label for="limit_mailalias">{tmpl_var name='limit_mailalias_txt'}</label>
        <input name="limit_mailalias" id="limit_mailalias" value="{tmpl_var name='limit_mailalias'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
            </div>
      <div class="ctrlHolder">
          <label for="limit_mailforward">{tmpl_var name='limit_mailforward_txt'}</label>
        <input name="limit_mailforward" id="limit_mailforward" value="{tmpl_var name='limit_mailforward'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
            </div>
      <div class="ctrlHolder">
          <label for="limit_mailcatchall">{tmpl_var name='limit_mailcatchall_txt'}</label>
        <input name="limit_mailcatchall" id="limit_mailcatchall" value="{tmpl_var name='limit_mailcatchall'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
            </div>
      <div class="ctrlHolder">
          <label for="limit_mailrouting">{tmpl_var name='limit_mailrouting_txt'}</label>
        <input name="limit_mailrouting" id="limit_mailrouting" value="{tmpl_var name='limit_mailrouting'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
            </div>
      <div class="ctrlHolder">
          <label for="limit_mailfilter">{tmpl_var name='limit_mailfilter_txt'}</label>
        <input name="limit_mailfilter" id="limit_mailfilter" value="{tmpl_var name='limit_mailfilter'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
            </div>
      <div class="ctrlHolder">
          <label for="limit_fetchmail">{tmpl_var name='limit_fetchmail_txt'}</label>
        <input name="limit_fetchmail" id="limit_fetchmail" value="{tmpl_var name='limit_fetchmail'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
            </div>
      <div class="ctrlHolder">
          <label for="limit_mailquota">{tmpl_var name='limit_mailquota_txt'}</label>
        <input name="limit_mailquota" id="limit_mailquota" value="{tmpl_var name='limit_mailquota'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
            </div>
      <div class="ctrlHolder">
          <label for="limit_spamfilter_wblist">{tmpl_var name='limit_spamfilter_wblist_txt'}</label>
        <input name="limit_spamfilter_wblist" id="limit_spamfilter_wblist" value="{tmpl_var name='limit_spamfilter_wblist'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
            </div>
      <div class="ctrlHolder">
          <label for="limit_spamfilter_user">{tmpl_var name='limit_spamfilter_user_txt'}</label>
        <input name="limit_spamfilter_user" id="limit_spamfilter_user" value="{tmpl_var name='limit_spamfilter_user'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
            </div>
      <div class="ctrlHolder">
          <label for="limit_spamfilter_policy">{tmpl_var name='limit_spamfilter_policy_txt'}</label>
        <input name="limit_spamfilter_policy" id="limit_spamfilter_policy" value="{tmpl_var name='limit_spamfilter_policy'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
            </div>
      <div class="ctrlHolder">
          <label for="limit_web_domain">{tmpl_var name='limit_web_domain_txt'}</label>
        <input name="limit_web_domain" id="limit_web_domain" value="{tmpl_var name='limit_web_domain'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
            </div>
      <div class="ctrlHolder">
          <label for="limit_web_aliasdomain">{tmpl_var name='limit_web_aliasdomain_txt'}</label>
        <input name="limit_web_aliasdomain" id="limit_web_aliasdomain" value="{tmpl_var name='limit_web_aliasdomain'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
            </div>
      <div class="ctrlHolder">
          <label for="limit_web_subdomain">{tmpl_var name='limit_web_subdomain_txt'}</label>
        <input name="limit_web_subdomain" id="limit_web_subdomain" value="{tmpl_var name='limit_web_subdomain'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
            </div>
      <div class="ctrlHolder">
          <label for="limit_ftp_user">{tmpl_var name='limit_ftp_user_txt'}</label>
        <input name="limit_ftp_user" id="limit_ftp_user" value="{tmpl_var name='limit_ftp_user'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
            </div>
      <div class="ctrlHolder">
          <label for="limit_shell_user">{tmpl_var name='limit_shell_user_txt'}</label>
        <input name="limit_shell_user" id="limit_shell_user" value="{tmpl_var name='limit_shell_user'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
            </div>
      <div class="ctrlHolder">
          <label for="limit_dns_zone">{tmpl_var name='limit_dns_zone_txt'}</label>
        <input name="limit_dns_zone" id="limit_dns_zone" value="{tmpl_var name='limit_dns_zone'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
            </div>
      <div class="ctrlHolder">
          <label for="limit_dns_record">{tmpl_var name='limit_dns_record_txt'}</label>
        <input name="limit_dns_record" id="limit_dns_record" value="{tmpl_var name='limit_dns_record'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
            </div>
      <div class="ctrlHolder">
          <label for="limit_database">{tmpl_var name='limit_database_txt'}</label>
        <input name="limit_database" id="limit_database" value="{tmpl_var name='limit_database'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
            </div>
      <div class="ctrlHolder">
        <label for="limit_cron">{tmpl_var name='limit_cron_txt'}</label>
        <input name="limit_cron" id="limit_cron" value="{tmpl_var name='limit_cron'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
            </div>
      <div class="ctrlHolder">
        <label for="limit_cron_type">{tmpl_var name='limit_cron_type_txt'}</label>
        <select name="limit_cron_type" id="limit_cron_type" class="selectInput formLengthHalf">
          {tmpl_var name='limit_cron_type'}
        </select>
            </div>
      <div class="ctrlHolder">
        <label for="limit_cron_frequency">{tmpl_var name='limit_cron_frequency_txt'}</label>
        <input name="limit_cron_frequency" id="limit_cron_frequency" value="{tmpl_var name='limit_cron_frequency'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
            </div>
    </fieldset>
    <input type="hidden" name="id" value="{tmpl_var name='id'}">
    <div class="buttonHolder buttons">
      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','client/client_template_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('client/client_template_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
    </div>
  </div>
</div>
interface/web/client/templates/reseller_edit_address.htm
New file
@@ -0,0 +1,101 @@
<h2><tmpl_var name="list_head_txt"></h2>
<p><tmpl_var name="list_desc_txt"></p>
<div class="panel panel_client">
  <div class="pnl_formsarea">
    <fieldset class="inlineLabels"><legend>Address</legend>
      <div class="ctrlHolder">
          <label for="company_name">{tmpl_var name='company_name_txt'}</label>
        <input name="company_name" id="company_name" value="{tmpl_var name='company_name'}" size="30" maxlength="255" type="text" class="textInput" />
            </div>
      <div class="ctrlHolder">
          <label for="contact_name">{tmpl_var name='contact_name_txt'}</label>
        <input name="contact_name" id="contact_name" value="{tmpl_var name='contact_name'}" size="30" maxlength="255" type="text" class="textInput" />
            </div>
      <div class="ctrlHolder">
          <label for="username">{tmpl_var name='username_txt'}</label>
        <input name="username" id="username" value="{tmpl_var name='username'}" size="30" maxlength="255" type="text" class="textInput" />
            </div>
      <div class="ctrlHolder">
          <label for="password">{tmpl_var name='password_txt'}</label>
        <input name="password" id="password" value="{tmpl_var name='password'}" size="30" maxlength="255" type="password" class="textInput" onkeyup="pass_check(this.value)" />
            </div>
      <div class="ctrlHolder">
                <p class="label">{tmpl_var name='password_strength_txt'}</p>
                <div id="passBar"></div>
                <p class="formHint"><span id="passText">&nbsp;</span></p>
            </div>
      <div class="ctrlHolder">
          <label for="language">{tmpl_var name='language_txt'}</label>
        <select name="language" id="language" class="selectInput withicons">
                    {tmpl_var name='language'}
                </select>
      </div>
      <div class="ctrlHolder">
          <label for="usertheme">{tmpl_var name='usertheme_txt'}</label>
        <select name="usertheme" id="usertheme" class="selectInput">
                    {tmpl_var name='usertheme'}
                </select>
      </div>
      <div class="ctrlHolder">
          <label for="street">{tmpl_var name='street_txt'}</label>
        <input name="street" id="street" value="{tmpl_var name='street'}" size="30" maxlength="255" type="text" class="textInput" />
            </div>
      <div class="ctrlHolder">
          <label for="zip">{tmpl_var name='zip_txt'}</label>
        <input name="zip" id="zip" value="{tmpl_var name='zip'}" size="10" maxlength="255" type="text" class="textInput" />
            </div>
      <div class="ctrlHolder">
          <label for="city">{tmpl_var name='city_txt'}</label>
        <input name="city" id="city" value="{tmpl_var name='city'}" size="30" maxlength="255" type="text" class="textInput" />
            </div>
      <div class="ctrlHolder">
          <label for="state">{tmpl_var name='state_txt'}</label>
        <input name="state" id="state" value="{tmpl_var name='state'}" size="30" maxlength="255" type="text" class="textInput" />
            </div>
      <div class="ctrlHolder">
          <label for="country">{tmpl_var name='country_txt'}</label>
        <select name="country" id="country" class="selectInput withicons">
                    {tmpl_var name='country'}
                </select>
      </div>
      <div class="ctrlHolder">
          <label for="telephone">{tmpl_var name='telephone_txt'}</label>
        <input name="telephone" id="telephone" value="{tmpl_var name='telephone'}" size="30" maxlength="255" type="text" class="textInput" />
            </div>
      <div class="ctrlHolder">
          <label for="mobile">{tmpl_var name='mobile_txt'}</label>
        <input name="mobile" id="mobile" value="{tmpl_var name='mobile'}" size="30" maxlength="255" type="text" class="textInput" />
            </div>
      <div class="ctrlHolder">
          <label for="fax">{tmpl_var name='fax_txt'}</label>
        <input name="fax" id="fax" value="{tmpl_var name='fax'}" size="30" maxlength="255" type="text" class="textInput" />
            </div>
      <div class="ctrlHolder">
          <label for="email">{tmpl_var name='email_txt'}</label>
        <input name="email" id="email" value="{tmpl_var name='email'}" size="30" maxlength="255" type="text" class="textInput" />
            </div>
      <div class="ctrlHolder">
          <label for="internet">{tmpl_var name='internet_txt'}</label>
        <input name="internet" id="internet" value="{tmpl_var name='internet'}" size="30" maxlength="255" type="text" class="textInput" />
            </div>
      <div class="ctrlHolder">
          <label for="icq">{tmpl_var name='icq_txt'}</label>
        <input name="icq" id="icq" value="{tmpl_var name='icq'}" size="30" maxlength="255" type="text" class="textInput" />
            </div>
      <div class="ctrlHolder">
          <label for="notes">{tmpl_var name='notes_txt'}</label>
        <textarea name="notes" id="notes" rows='10' cols='30'>{tmpl_var name='notes'}</textarea>
      </div>
    </fieldset>
    <input type="hidden" name="id" value="{tmpl_var name='id'}">
    <div class="buttonHolder buttons">
      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','client/reseller_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('client/reseller_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
    </div>
  </div>
</div>
interface/web/client/templates/reseller_edit_limits.htm
New file
@@ -0,0 +1,171 @@
<h2><tmpl_var name="list_head_txt"></h2>
<p><tmpl_var name="list_desc_txt"></p>
<div class="panel panel_client">
  <div class="pnl_formsarea">
    <fieldset class="inlineLabels"><legend>Limits</legend>
<tmpl_if name="is_admin">
      <div class="ctrlHolder">
          <label for="template_master">{tmpl_var name='template_master_txt'}</label>
        <select name="template_master" id="template_master" class="selectInput">
                    {tmpl_var name='template_master'}
                </select>
      </div>
      <div class="ctrlHolder">
          <label for="template_additional">{tmpl_var name='template_additional_txt'}</label>
        <select name="tpl_add_select" id="tpl_add_select" class="selectInput">
                    {tmpl_var name='tpl_add_select'}
                </select>
          <span id="template_additional_list">{tmpl_var name='template_additional_list'}</span>
            <input type="hidden" id="template_additional" name="template_additional" value="{tmpl_var name='template_additional'}">
      </div>
      <div class="ctrlHolder">
        &nbsp;
      </div>
</tmpl_if>
      <div class="ctrlHolder">
          <label for="default_mailserver">{tmpl_var name='default_mailserver_txt'}</label>
        <select name="default_mailserver" id="default_mailserver" class="selectInput">
                    {tmpl_var name='default_mailserver'}
                </select>
      </div>
      <div class="ctrlHolder">
          <label for="limit_maildomain">{tmpl_var name='limit_maildomain_txt'}</label>
        <input name="limit_maildomain" id="limit_maildomain" value="{tmpl_var name='limit_maildomain'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
            </div>
      <div class="ctrlHolder">
          <label for="limit_mailbox">{tmpl_var name='limit_mailbox_txt'}</label>
        <input name="limit_mailbox" id="limit_mailbox" value="{tmpl_var name='limit_mailbox'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
            </div>
      <div class="ctrlHolder">
          <label for="limit_mailalias">{tmpl_var name='limit_mailalias_txt'}</label>
        <input name="limit_mailalias" id="limit_mailalias" value="{tmpl_var name='limit_mailalias'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
            </div>
      <div class="ctrlHolder">
          <label for="limit_mailforward">{tmpl_var name='limit_mailforward_txt'}</label>
        <input name="limit_mailforward" id="limit_mailforward" value="{tmpl_var name='limit_mailforward'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
            </div>
      <div class="ctrlHolder">
          <label for="limit_mailcatchall">{tmpl_var name='limit_mailcatchall_txt'}</label>
        <input name="limit_mailcatchall" id="limit_mailcatchall" value="{tmpl_var name='limit_mailcatchall'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
            </div>
      <div class="ctrlHolder">
          <label for="limit_mailrouting">{tmpl_var name='limit_mailrouting_txt'}</label>
        <input name="limit_mailrouting" id="limit_mailrouting" value="{tmpl_var name='limit_mailrouting'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
            </div>
      <div class="ctrlHolder">
          <label for="limit_mailfilter">{tmpl_var name='limit_mailfilter_txt'}</label>
        <input name="limit_mailfilter" id="limit_mailfilter" value="{tmpl_var name='limit_mailfilter'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
            </div>
      <div class="ctrlHolder">
          <label for="limit_fetchmail">{tmpl_var name='limit_fetchmail_txt'}</label>
        <input name="limit_fetchmail" id="limit_fetchmail" value="{tmpl_var name='limit_fetchmail'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
            </div>
      <div class="ctrlHolder">
          <label for="limit_mailquota">{tmpl_var name='limit_mailquota_txt'}</label>
        <input name="limit_mailquota" id="limit_mailquota" value="{tmpl_var name='limit_mailquota'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />&nbsp;MB
            </div>
      <div class="ctrlHolder">
          <label for="limit_spamfilter_wblist">{tmpl_var name='limit_spamfilter_wblist_txt'}</label>
        <input name="limit_spamfilter_wblist" id="limit_spamfilter_wblist" value="{tmpl_var name='limit_spamfilter_wblist'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
            </div>
      <div class="ctrlHolder">
          <label for="limit_spamfilter_user">{tmpl_var name='limit_spamfilter_user_txt'}</label>
        <input name="limit_spamfilter_user" id="limit_spamfilter_user" value="{tmpl_var name='limit_spamfilter_user'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
            </div>
      <div class="ctrlHolder">
          <label for="limit_spamfilter_policy">{tmpl_var name='limit_spamfilter_policy_txt'}</label>
        <input name="limit_spamfilter_policy" id="limit_spamfilter_policy" value="{tmpl_var name='limit_spamfilter_policy'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
            </div>
      <div class="ctrlHolder">
          <label for="default_webserver">{tmpl_var name='default_webserver_txt'}</label>
        <select name="default_webserver" id="default_webserver" class="selectInput">
                    {tmpl_var name='default_webserver'}
                </select>
      </div>
      <div class="ctrlHolder">
          <label for="limit_web_domain">{tmpl_var name='limit_web_domain_txt'}</label>
        <input name="limit_web_domain" id="limit_web_domain" value="{tmpl_var name='limit_web_domain'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
            </div>
      <div class="ctrlHolder">
                <p class="label">{tmpl_var name='web_php_options_txt'}</p>
                    <div class="multiField">
                        {tmpl_var name='web_php_options'}
                    </div>
            </div>
      <div class="ctrlHolder">
          <label for="limit_web_aliasdomain">{tmpl_var name='limit_web_aliasdomain_txt'}</label>
        <input name="limit_web_aliasdomain" id="limit_web_aliasdomain" value="{tmpl_var name='limit_web_aliasdomain'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
            </div>
      <div class="ctrlHolder">
          <label for="limit_web_subdomain">{tmpl_var name='limit_web_subdomain_txt'}</label>
        <input name="limit_web_subdomain" id="limit_web_subdomain" value="{tmpl_var name='limit_web_subdomain'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
            </div>
      <div class="ctrlHolder">
          <label for="limit_ftp_user">{tmpl_var name='limit_ftp_user_txt'}</label>
        <input name="limit_ftp_user" id="limit_ftp_user" value="{tmpl_var name='limit_ftp_user'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
            </div>
      <div class="ctrlHolder">
          <label for="limit_shell_user">{tmpl_var name='limit_shell_user_txt'}</label>
        <input name="limit_shell_user" id="limit_shell_user" value="{tmpl_var name='limit_shell_user'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
            </div>
      <div class="ctrlHolder">
                <p class="label">{tmpl_var name='ssh_chroot_txt'}</p>
                    <div class="multiField">
                        {tmpl_var name='ssh_chroot'}
                    </div>
            </div>
      <div class="ctrlHolder">
          <label for="default_dnsserver">{tmpl_var name='default_dnsserver_txt'}</label>
        <select name="default_dnsserver" id="default_dnsserver" class="selectInput">
                    {tmpl_var name='default_dnsserver'}
                </select>
      </div>
      <div class="ctrlHolder">
          <label for="limit_dns_zone">{tmpl_var name='limit_dns_zone_txt'}</label>
        <input name="limit_dns_zone" id="limit_dns_zone" value="{tmpl_var name='limit_dns_zone'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
            </div>
      <div class="ctrlHolder">
          <label for="limit_dns_record">{tmpl_var name='limit_dns_record_txt'}</label>
        <input name="limit_dns_record" id="limit_dns_record" value="{tmpl_var name='limit_dns_record'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
            </div>
      <div class="ctrlHolder">
          <label for="limit_client">{tmpl_var name='limit_client_txt'}</label>
        <input name="limit_client" id="limit_client" value="{tmpl_var name='limit_client'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
            </div>
      <div class="ctrlHolder">
          <label for="default_dbserver">{tmpl_var name='default_dbserver_txt'}</label>
        <select name="default_dbserver" id="default_dbserver" class="selectInput">
                    {tmpl_var name='default_dbserver'}
                </select>
      </div>
      <div class="ctrlHolder">
          <label for="limit_database">{tmpl_var name='limit_database_txt'}</label>
        <input name="limit_database" id="limit_database" value="{tmpl_var name='limit_database'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
            </div>
      <div class="ctrlHolder">
        <label for="limit_cron">{tmpl_var name='limit_cron_txt'}</label>
        <input name="limit_cron" id="limit_cron" value="{tmpl_var name='limit_cron'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
            </div>
      <div class="ctrlHolder">
        <label for="limit_cron_type">{tmpl_var name='limit_cron_type_txt'}</label>
        <select name="limit_cron_type" id="limit_cron_type" class="selectInput formLengthHalf">
          {tmpl_var name='limit_cron_type'}
        </select>
            </div>
      <div class="ctrlHolder">
        <label for="limit_cron_frequency">{tmpl_var name='limit_cron_frequency_txt'}</label>
        <input name="limit_cron_frequency" id="limit_cron_frequency" value="{tmpl_var name='limit_cron_frequency'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
            </div>
    </fieldset>
    <input type="hidden" name="id" value="{tmpl_var name='id'}">
    <div class="buttonHolder buttons">
      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','client/reseller_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('client/reseller_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
    </div>
  </div>
</div>
interface/web/client/templates/resellers_list.htm
New file
@@ -0,0 +1,62 @@
<h2><tmpl_var name="list_head_txt"></h2>
<p><tmpl_var name="list_desc_txt"></p>
<div class="panel panel_list_clients">
  <div class="pnl_toolsarea">
    <fieldset><legend>Tools</legend>
      <div class="buttons">
        <button class="iconstxt icoAdd" type="button" onClick="loadContent('client/reseller_edit.php');">
          <span>{tmpl_var name="add_new_record_txt"}</span>
        </button>
      </div>
    </fieldset>
  </div>
  <div class="pnl_listarea">
    <fieldset><legend><tmpl_var name="list_head_txt"></legend>
      <table class="list">
        <thead>
          <tr>
            <th class="tbl_col_client_id" scope="col"><tmpl_var name="client_id_txt"></th>
            <th class="tbl_col_company_name" scope="col"><tmpl_var name="company_name_txt"></th>
            <th class="tbl_col_contact_name" scope="col"><tmpl_var name="contact_name_txt"></th>
            <th class="tbl_col_city" scope="col"><tmpl_var name="city_txt"></th>
            <th class="tbl_col_country" scope="col"><tmpl_var name="country_txt"></th>
            <th class="tbl_col_country" scope="col">&nbsp;</th>
          </tr>
          <tr>
            <td class="tbl_col_client_id"><input type="text" name="search_client_id" value="{tmpl_var name='search_client_id'}" /></td>
            <td class="tbl_col_company_name"><input type="text" name="search_company_name" value="{tmpl_var name='search_company_name'}" /></td>
            <td class="tbl_col_contact_name"><input type="text" name="search_contact_name" value="{tmpl_var name='search_contact_name'}" /></td>
            <td class="tbl_col_city"><input type="text" name="search_city" value="{tmpl_var name='search_city'}" /></td>
            <td class="tbl_col_country"><input type="text" name="search_country" value="{tmpl_var name='search_country'}" /></td>
            <td class="tbl_col_buttons"><div class="buttons"><button type="button" class="icons16 icoFilter" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" onClick="submitForm('pageForm','client/reseller_list.php');"><span>{tmpl_var name="filter_txt"}</span></button></div></td>
          </tr>
        </thead>
        <tbody>
          <tmpl_loop name="records">
          <tr class="tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
            <td class="tbl_col_client_id"><a href="#" onClick="loadContent('client/reseller_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="client_id"}</a></td>
            <td class="tbl_col_company_name"><a href="#" onClick="loadContent('client/reseller_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="company_name"}</a></td>
            <td class="tbl_col_contact_name"><a href="#" onClick="loadContent('client/reseller_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="contact_name"}</a></td>
            <td class="tbl_col_city"><a href="#" onClick="loadContent('client/reseller_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="city"}</a></td>
            <td class="tbl_col_country"><a href="#" onClick="loadContent('client/reseller_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="country"}</a></td>
            <td class="tbl_col_buttons">
              <div class="buttons icons16">
                <a class="icons16 icoDelete" href="javascript: del_record('client/reseller_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span>{tmpl_var name='delete_txt'}</span></a>
              </div>
            </td>
          </tr>
          </tmpl_loop>
        </tbody>
        <tfoot>
          <tr>
            <td class="tbl_footer tbl_paging" colspan="6"><tmpl_var name="paging"></td>
          </tr>
        </tfoot>
      </table>
    </fieldset>
  </div>
</div>
interface/web/designer/lib/lang/br.lng
New file
@@ -0,0 +1,3 @@
<?php
?>
interface/web/designer/lib/lang/br_form_edit.lng
New file
@@ -0,0 +1,26 @@
<?php
$wb["name_txt"] = 'Nome do Formulário';
$wb["title_txt"] = 'Título do Formulário';
$wb["template_txt"] = 'Gabarito';
$wb["navframe_txt"] = 'Frame de Navegação';
$wb["startpage_txt"] = 'Página Inicial';
$wb["tab_width_txt"] = 'Tamanho da aba';
$wb["save_txt"] = 'Salvar';
$wb["cancel_txt"] = 'Cancelar';
$wb["header_txt"] = 'Propriedades do Formulário';
$wb["description_txt"] = 'Descrição';
$wb["action_txt"] = 'Ação (script)';
$wb["db_table_txt"] = 'Tabela do DB';
$wb["db_table_idx_txt"] = 'Indíce da tabela do DB';
$wb["db_history_txt"] = 'Desfazer Log';
$wb["tab_default_txt"] = 'Aba Padrão';
$wb["list_default_txt"] = 'Exibir Padrão';
$wb["tab_width_txt"] = 'Tamanho da aba';
$wb["auth_txt"] = 'Permissões';
$wb["auth_preset_userid_txt"] = 'Usuário(ID)';
$wb["auth_preset_groupid_txt"] = 'Grupo(ID)';
$wb["auth_preset_perm_user_txt"] = 'Perm. Usuário';
$wb["auth_preset_perm_group_txt"] = 'Perm. Grupo';
$wb["auth_preset_perm_other_txt"] = 'Perm. Outros';
?>
interface/web/designer/lib/lang/br_form_list.lng
New file
@@ -0,0 +1,7 @@
<?php
$wb["list_head_txt"] = 'Formulário de Backend';
$wb["form_txt"] = 'Formulário';
$wb["module_txt"] = 'Módulo';
$wb["title_txt"] = 'Título';
$wb["description_txt"] = 'Descrição';
?>
interface/web/designer/lib/lang/br_form_show.lng
New file
@@ -0,0 +1,18 @@
<?php
$wb["header_txt"] = 'Editor de Formulários';
$wb["title_txt"] = 'Título do Formulário';
$wb["name_txt"] = 'Nome do Formulário';
$wb["delete_txt"] = 'Remover';
$wb["properties_txt"] = 'Propriedades';
$wb["new_tab_txt"] = 'Nova Aba';
$wb["edit_txt"] = 'Editar';
$wb["new_txt"] = 'Novo';
$wb["up_txt"] = '^';
$wb["down_txt"] = 'v';
$wb["module_txt"] = 'Módulo';
$wb["form_txt"] = 'Formulário';
$wb["description_txt"] = 'Descrição';
$wb["module_del_txt"] = "Remover o módulo e todos seus sub-diretórios?";
$wb["menu_del_txt"] = "Remover o menu e todos os seus itens?";
$wb["item_del_txt"] = "Remover o item de menu?";
?>
interface/web/designer/lib/lang/br_module_edit.lng
New file
@@ -0,0 +1,23 @@
<?php
$wb["name_txt"] = 'Nome do Módulo';
$wb["title_txt"] = 'Título do Módulo';
$wb["template_txt"] = 'Arquivo de Gabarito';
$wb["navframe_txt"] = 'Frame de Navegação';
$wb["startpage_txt"] = 'Página Padrão';
$wb["tab_width_txt"] = 'Tamanho da Aba';
$wb["save_txt"] = 'Salvar';
$wb["cancel_txt"] = 'Cancelar';
$wb["header_txt"] = 'Propriedades do Módulo';
$wb["description_txt"] = '
<b>Descrição</b>
<br><br>
<b>Nome do Módulo:</b> Nome do diretório do módulo. Somente números, letras e underscores são permitidos.<br>
<b>Título do Módulo:</b> Será exibido em caixa alta no menu de navegação.<br>
<b>Arquivo de Gabarito:</b> Arquivo de Gabarito do Módulo Disponível: modulo.tpl.htm e modulo_tree.tpl.htm. O padrão é modulo.tpl.htm.<br>
<b>Frame de Navegação:</b> Se modulo_tree.tpl.htm foi selecionado como arquivo de gabarito, insira aqui o caminho do script para o frame a esquerda.<br>
<b>Página Padrão:</b> Esta página será exibida quando o módulo for aberto.<br>
<b>Tamanho da Aba:</b> Tamanho das abas na navegação principal. Este campo fica em branco por padrão. Você pode informar valores absolutos em pixels (ex.: 20) ou valores relativos (ex.: 20%).<br>
<b>Dica:</b> Todos os caminhos são relativos ao diretório "web".
';
?>
interface/web/designer/lib/lang/br_module_list.lng
New file
@@ -0,0 +1,5 @@
<?php
$wb["list_head_txt"] = 'Módulo do Backend';
$wb["module_txt"] = 'Módulo';
$wb["title_txt"] = 'Título';
?>
interface/web/designer/lib/lang/br_module_nav_edit.lng
New file
@@ -0,0 +1,6 @@
<?php
$wb["title_txt"] = 'Título';
$wb["header_txt"] = 'Propriedades de Navegação';
$wb["save_txt"] = 'Salvar';
$wb["cancel_txt"] = 'Cancelar';
?>
interface/web/designer/lib/lang/br_module_nav_item_edit.lng
New file
@@ -0,0 +1,8 @@
<?php
$wb["title_txt"] = 'Título';
$wb["target_txt"] = 'Target';
$wb["link_txt"] = 'Link';
$wb["header_txt"] = 'Propriedades de Navegação';
$wb["save_txt"] = 'Salvar';
$wb["cancel_txt"] = 'Cancelar';
?>
interface/web/designer/lib/lang/br_module_show.lng
New file
@@ -0,0 +1,17 @@
<?php
$wb["header_txt"] = 'Editor de Menu';
$wb["title_txt"] = 'Título';
$wb["name_txt"] = 'Módulo';
$wb["delete_txt"] = 'Remover';
$wb["properties_txt"] = 'Propriedades';
$wb["new_menu_txt"] = 'Novo Menu';
$wb["edit_txt"] = 'Editar';
$wb["delete_txt"] = 'Remover';
$wb["new_txt"] = 'Novo';
$wb["up_txt"] = 'Subir';
$wb["down_txt"] = 'Descer';
$wb["module_txt"] = 'Módulo';
$wb['module_del_txt'] = 'Deseja eliminar este módulo e todos os arquivos contidos no diretório?';
$wb['menu_del_txt'] = 'Deseja apagar este menu e todos seus elementos?';
$wb['item_del_txt'] = 'Deseja apagar este elemento do menu?';
?>
interface/web/dns/dns_a_edit.php
@@ -96,6 +96,11 @@
            }
        } // end if user is not admin
        
        //* Check for duplicates where IP and hostname are the same
        $tmp = $app->db->queryOneRecord("SELECT count(id) as number FROM dns_rr WHERE zone = '".$this->dataRecord["zone"]."' and data = '".$this->dataRecord["data"]."' and id != ".$this->id);
        if($tmp['number'] > 0) $app->tform->errorMessage .= $app->tform->lng("data_error_duplicate")."<br>";
        unset($tmp);
        
        // Set the server ID of the rr record to the same server ID as the parent record.
        $this->dataRecord["server_id"] = $soa["server_id"];
interface/web/dns/dns_soa_edit.php
@@ -55,17 +55,11 @@
        
        // we will check only users, not admins
        if($_SESSION["s"]["user"]["typ"] == 'user') {
            // Get the limits of the client
            $client_group_id = $_SESSION["s"]["user"]["default_group"];
            $client = $app->db->queryOneRecord("SELECT limit_dns_zone FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
            // Check if the user may add another maildomain.
            if($client["limit_dns_zone"] >= 0) {
                $tmp = $app->db->queryOneRecord("SELECT count(id) as number FROM dns_soa WHERE sys_groupid = $client_group_id");
                if($tmp["number"] >= $client["limit_dns_zone"]) {
                    $app->error($app->tform->wordbook["limit_dns_zone_txt"]);
                }
            if(!$app->tform->checkClientLimit('limit_dns_zone')) {
                $app->error($app->tform->wordbook["limit_dns_zone_txt"]);
            }
            if(!$app->tform->checkResellerLimit('limit_dns_zone')) {
                $app->error('Reseller: '.$app->tform->wordbook["limit_dns_zone_txt"]);
            }
        }
        
@@ -76,7 +70,7 @@
        global $app, $conf;
        
        // If user is admin, we will allow him to select to whom this record belongs
        if($_SESSION["s"]["user"]["typ"] == 'admin' || $app->auth->has_clients($_SESSION['s']['user']['userid'])) {
        if($_SESSION["s"]["user"]["typ"] == 'admin') {
            // Getting Domains of the user
            $sql = "SELECT groupid, name FROM sys_group WHERE client_id > 0";
            $clients = $app->db->queryAllRecords($sql);
@@ -89,6 +83,24 @@
                }
            }
        $app->tpl->setVar("client_group_id",$client_select);
        } else if($app->auth->has_clients($_SESSION['s']['user']['userid'])) {
            // Get the limits of the client
            $client_group_id = $_SESSION["s"]["user"]["default_group"];
            $client = $app->db->queryOneRecord("SELECT client.client_id, client.contact_name FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
            // Fill the client select field
            $sql = "SELECT groupid, name FROM sys_group, client WHERE sys_group.client_id = client.client_id AND client.parent_client_id = ".$client['client_id'];
            $clients = $app->db->queryAllRecords($sql);
            $client_select = '<option value="'.$client['client_id'].'">'.$client['contact_name'].'</option>';
            if(is_array($clients)) {
                foreach( $clients as $client) {
                    $selected = @($client["groupid"] == $this->dataRecord["sys_groupid"])?'SELECTED':'';
                    $client_select .= "<option value='$client[groupid]' $selected>$client[name]</option>\r\n";
                }
            }
            $app->tpl->setVar("client_group_id",$client_select);
        }
        
        parent::onShowEnd();
@@ -128,9 +140,9 @@
        $this->dataRecord["serial"] = $app->validate_dns->increase_serial($soa["serial"]);
        
        //* Check if soa, ns and mbox have a dot at the end
        if(substr($this->dataRecord["origin"],-1,1) != '.') $this->dataRecord["origin"] .= '.';
        if(substr($this->dataRecord["ns"],-1,1) != '.') $this->dataRecord["ns"] .= '.';
        if(substr($this->dataRecord["mbox"],-1,1) != '.') $this->dataRecord["mbox"] .= '.';
        if(strlen($this->dataRecord["origin"]) > 0 && substr($this->dataRecord["origin"],-1,1) != '.') $this->dataRecord["origin"] .= '.';
        if(strlen($this->dataRecord["ns"]) > 0 && substr($this->dataRecord["ns"],-1,1) != '.') $this->dataRecord["ns"] .= '.';
        if(strlen($this->dataRecord["mbox"]) > 0 && substr($this->dataRecord["mbox"],-1,1) != '.') $this->dataRecord["mbox"] .= '.';
        
        //* Replace @ in mbox
        if(stristr($this->dataRecord["mbox"],'@')) {
interface/web/dns/dns_template_edit.php
@@ -1,58 +1,60 @@
<?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.
*/
/******************************************
* Begin Form configuration
******************************************/
$tform_def_file = "form/dns_template.tform.php";
/******************************************
* End Form configuration
******************************************/
require_once('../../lib/config.inc.php');
require_once('../../lib/app.inc.php');
//* Check permissions for module
$app->auth->check_module_permissions('dns');
// Loading classes
$app->uses('tpl,tform,tform_actions');
$app->load('tform_actions');
class page_action extends tform_actions {
}
$page = new page_action;
$page->onLoad();
<?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.
*/
/******************************************
* Begin Form configuration
******************************************/
$tform_def_file = "form/dns_template.tform.php";
/******************************************
* End Form configuration
******************************************/
require_once('../../lib/config.inc.php');
require_once('../../lib/app.inc.php');
//* Check permissions for module
$app->auth->check_module_permissions('dns');
// Loading classes
$app->uses('tpl,tform,tform_actions');
$app->load('tform_actions');
if($_SESSION["s"]["user"]["typ"] != 'admin') die('Access denied for non admin users.');
class page_action extends tform_actions {
}
$page = new page_action;
$page->onLoad();
?>
interface/web/dns/dns_wizard.php
@@ -93,8 +93,29 @@
    }
    $app->tpl->setVar("client_group_id",$client_select);
}
if ($_SESSION["s"]["user"]["typ"] != 'admin' && $app->auth->has_clients($_SESSION['s']['user']['userid'])) {
    // Get the limits of the client
    $client_group_id = $_SESSION["s"]["user"]["default_group"];
    $client = $app->db->queryOneRecord("SELECT client.client_id, contact_name FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
    // load the list of clients
    $sql = "SELECT groupid, name FROM sys_group, client WHERE sys_group.client_id = client.client_id AND client.parent_client_id = ".$client['client_id'];
    $clients = $app->db->queryAllRecords($sql);
    $client_select = '<option value="'.$client['client_id'].'">'.$client['contact_name'].'</option>';
    if(is_array($clients)) {
        foreach( $clients as $client) {
            $selected = ($client["groupid"] == $sys_groupid)?'SELECTED':'';
            $client_select .= "<option value='$client[groupid]' $selected>$client[name]</option>\r\n";
        }
    }
    $app->tpl->setVar("client_group_id",$client_select);
}
$template_record = $app->db->queryOneRecord("SELECT * FROM dns_template WHERE template_id = '$template_id'");
$fields = explode(',',$template_record['fields']);
@@ -116,6 +137,18 @@
    if(isset($_POST['ns2']) && $_POST['ns2'] == '') $error .= $app->lng('error_ns2_empty').'<br />';
    if(isset($_POST['email']) && $_POST['email'] == '') $error .= $app->lng('error_email_empty').'<br />';
    
    $tform_def_file = "form/dns_soa.tform.php";
    $app->uses('tform');
    $app->tform->loadFormDef($tform_def_file);
    if(!$app->tform->checkClientLimit('limit_dns_zone')) {
        $error .= $app->tform->wordbook["limit_dns_zone_txt"];
    }
    if(!$app->tform->checkResellerLimit('limit_dns_zone')) {
        $error .= $app->tform->wordbook["limit_dns_zone_txt"];
    }
    
    // replace template placeholders
    $tpl_content = $template_record['template'];
interface/web/dns/lib/lang/bg_dns_a.lng
@@ -12,4 +12,5 @@
$wb['name_error_regex'] = 'The hostname has the wrong format.';
$wb['data_error_empty'] = 'IP-Address empty';
$wb['data_error_regex'] = 'IP-Address format invalid';
$wb['data_error_duplicate'] = 'Duplicate A-Record';
?>
interface/web/dns/lib/lang/bg_dns_aaaa.lng
New file
@@ -0,0 +1,15 @@
<?php
$wb['server_id_txt'] = 'Server';
$wb['zone_txt'] = 'Zone';
$wb['name_txt'] = 'Hostname';
$wb['type_txt'] = 'type';
$wb['data_txt'] = 'IPv6-Address';
$wb['ttl_txt'] = 'TTL';
$wb['active_txt'] = 'Active';
$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
$wb['name_error_empty'] = 'The hostname is empty.';
$wb['name_error_regex'] = 'The hostname has the wrong format.';
$wb['data_error_empty'] = 'IP-Address empty';
$wb['data_error_regex'] = 'IP-Address format invalid';
?>
interface/web/dns/lib/lang/bg_dns_wizard.lng
@@ -10,4 +10,16 @@
$wb['ns2_txt'] = 'NS 2';
$wb['ip_txt'] = 'IP Address';
$wb['error_origin_empty'] = 'Origin empty.';
$wb['error_ns_empty'] = 'NS empty.';
$wb['error_mbox_empty'] = 'Mbox empty.';
$wb['error_refresh_empty'] = 'Refresh empty.';
$wb['error_retry_empty'] = 'Retry empty.';
$wb['error_expire_empty'] = 'Expire empty.';
$wb['error_minimum_empty'] = 'Minimum empty.';
$wb['error_ttl_empty'] = 'TTL empty.';
$wb['error_domain_empty'] = 'Domain empty';
$wb['error_ip_empty'] = 'IP empty.';
$wb['error_ns1_empty'] = 'NS1 empty.';
$wb['error_ns2_empty'] = 'NS2 empty.';
$wb['error_email_empty'] = 'EMail empty.';
?>
interface/web/dns/lib/lang/br.lng
New file
@@ -0,0 +1,19 @@
<?php
$wb['DNS'] = 'DNS';
$wb['Zones'] = 'Zonas';
$wb['DNS A'] = 'DNS A';
$wb['DNS ALIAS'] = 'ALIAS DNS';
$wb['DNS CNAME'] = 'CNAME DNS';
$wb['DNS hinfo'] = 'hinfo DNS';
$wb['DNS mx'] = 'mx DNS';
$wb['DNS ns'] = 'ns DNS';
$wb['DNS ptr'] = 'ptr DNS';
$wb['DNS RP'] = 'RP DNS';
$wb['DNS Zone'] = 'Zona DNS';
$wb['Records'] = 'Registros';
$wb['DNS SRV'] = 'SRV DNS';
$wb['DNS TXT Record'] = 'Registro TXT DNS';
$wb['DNS TXT'] = 'TXT DNS';
?>
interface/web/dns/lib/lang/br_dns_a.lng
New file
@@ -0,0 +1,15 @@
<?php
$wb["server_id_txt"] = 'Servidor';
$wb["zone_txt"] = 'Zona';
$wb["name_txt"] = 'Hostname';
$wb["type_txt"] = 'tipo';
$wb["data_txt"] = 'Endereço-IP';
$wb["ttl_txt"] = 'TTL';
$wb["active_txt"] = 'Ativo';
$wb["limit_dns_record_txt"] = 'O número máximo de zonas DNS para sua conta foi atingido.';
$wb["no_zone_perm"] = 'Você não tem permição para adcionar registros a está zona DNS.';
$wb["name_error_empty"] = 'Hostname em branco.';
$wb["name_error_regex"] = 'Hostname tem um formato inválido.';
$wb["data_error_empty"] = 'Endereço-IP em branco';
$wb["data_error_regex"] = 'Endereço-IP formato inválido';
?>
interface/web/dns/lib/lang/br_dns_a_list.lng
New file
@@ -0,0 +1,14 @@
<?php
$wb["list_head_txt"] = 'Registro (A)';
$wb["active_txt"] = 'Ativo';
$wb["server_id_txt"] = 'Servidor';
$wb["zone_txt"] = 'Zona';
$wb["name_txt"] = 'Nome';
$wb["data_txt"] = 'Data';
$wb["aux_txt"] = 'Prioridade';
$wb["type_txt"] = 'Tipo';
$wb["add_new_record_txt"] = 'Adcionar um novo registro DNS (A)';
$wb["page_txt"] = 'Página';
$wb["page_of_txt"] = 'de';
$wb['delete_confirmation'] = 'Tem certeza que deseja remover este registro?';
?>
interface/web/dns/lib/lang/br_dns_aaaa.lng
New file
@@ -0,0 +1,15 @@
<?php
$wb["server_id_txt"] = 'Server';
$wb["zone_txt"] = 'Zone';
$wb["name_txt"] = 'Hostname';
$wb["type_txt"] = 'type';
$wb["data_txt"] = 'IPv6-Address';
$wb["ttl_txt"] = 'TTL';
$wb["active_txt"] = 'Active';
$wb["limit_dns_record_txt"] = 'The max. number of DNS records for your account is reached.';
$wb["no_zone_perm"] = 'You do not have the permission to add a record to this DNS zone.';
$wb["name_error_empty"] = 'The hostname is empty.';
$wb["name_error_regex"] = 'The hostname has the wrong format.';
$wb["data_error_empty"] = 'IP-Address empty';
$wb["data_error_regex"] = 'IP-Address format invalid';
?>
interface/web/dns/lib/lang/br_dns_alias.lng
New file
@@ -0,0 +1,15 @@
<?php
$wb["server_id_txt"] = 'Servidor';
$wb["zone_txt"] = 'Zona';
$wb["name_txt"] = 'Hostname';
$wb["type_txt"] = 'tipo';
$wb["data_txt"] = 'Hostname Alvo';
$wb["ttl_txt"] = 'TTL';
$wb["active_txt"] = 'Ativo';
$wb["limit_dns_record_txt"] = 'O número máximo de registros DNS para sua conta foi atingido.';
$wb["no_zone_perm"] = 'Você não tem permição para adcionar registros a está zona DNS.';
$wb["name_error_empty"] = 'Hostname está em branco.';
$wb["name_error_regex"] = 'O hostname está em um formato inválido.';
$wb["data_error_empty"] = 'Hostname de destino está em branco';
$wb["data_error_regex"] = 'O hostname de destino está em um formato inválido.';
?>
interface/web/dns/lib/lang/br_dns_cname.lng
New file
@@ -0,0 +1,15 @@
<?php
$wb["server_id_txt"] = 'Servidor';
$wb["zone_txt"] = 'Zona';
$wb["name_txt"] = 'Hostname';
$wb["type_txt"] = 'tipo';
$wb["data_txt"] = 'Hostname de Destino';
$wb["ttl_txt"] = 'TTL';
$wb["active_txt"] = 'Ativo';
$wb["limit_dns_record_txt"] = 'O número máximo de registros DNS para sua conta foi atingido.';
$wb["no_zone_perm"] = 'Você não tem permição para adcionar registros a está zona DNS.';
$wb["name_error_empty"] = 'Hostname está em branco.';
$wb["name_error_regex"] = 'O hostname está em um formato inválido.';
$wb["data_error_empty"] = 'Hostname de destino está em branco';
$wb["data_error_regex"] = 'O hostname de destino está em um formato inválido.';
?>
interface/web/dns/lib/lang/br_dns_hinfo.lng
New file
@@ -0,0 +1,15 @@
<?php
$wb["server_id_txt"] = 'Servidor';
$wb["zone_txt"] = 'Zona';
$wb["name_txt"] = 'Hostname';
$wb["type_txt"] = 'tipo';
$wb["data_txt"] = 'Informações do Host';
$wb["ttl_txt"] = 'TTL';
$wb["active_txt"] = 'Ativo';
$wb["limit_dns_record_txt"] = 'O número máximo de zonas DNS para sua conta foi atingido.';
$wb["no_zone_perm"] = 'Você não tem permição para adcionar registros a está zona DNS.';
$wb["name_error_empty"] = 'Hostname em branco.';
$wb["name_error_regex"] = 'Hostname tem um formato inválido.';
$wb["data_error_empty"] = 'Endereço-IP em branco';
$wb["data_error_regex"] = 'Endereço-IP formato inválido';
?>
interface/web/dns/lib/lang/br_dns_mx.lng
New file
@@ -0,0 +1,16 @@
<?php
$wb["server_id_txt"] = 'Servidor';
$wb["zone_txt"] = 'Zona';
$wb["name_txt"] = 'Hostname';
$wb["type_txt"] = 'tipo';
$wb["data_txt"] = 'Hostname do servidor de correio';
$wb["aux_txt"] = 'Prioridade';
$wb["ttl_txt"] = 'TTL';
$wb["active_txt"] = 'Ativo';
$wb["limit_dns_record_txt"] = 'O número máximo de zonas DNS para sua conta foi atingido.';
$wb["no_zone_perm"] = 'Você não tem permição para adcionar registros a está zona DNS.';
$wb["name_error_empty"] = 'Hostname em branco.';
$wb["name_error_regex"] = 'Hostname tem um formato inválido.';
$wb["data_error_empty"] = 'Hostname do servidor de correio em branco';
$wb["data_error_regex"] = 'Hostname do servidor de correio formato inválido';
?>
interface/web/dns/lib/lang/br_dns_ns.lng
New file
@@ -0,0 +1,15 @@
<?php
$wb["server_id_txt"] = 'Servidor';
$wb["zone_txt"] = 'Zona';
$wb["name_txt"] = 'Zona';
$wb["type_txt"] = 'tipo';
$wb["data_txt"] = 'Hostname Servidor de Nomes';
$wb["ttl_txt"] = 'TTL';
$wb["active_txt"] = 'Ativo';
$wb["limit_dns_record_txt"] = 'O número máximo de zonas DNS para sua conta foi atingido.';
$wb["no_zone_perm"] = 'Você não tem permição para adcionar registros a está zona DNS.';
$wb["name_error_empty"] = 'A zona está em branco.';
$wb["name_error_regex"] = 'A zona está com formato inválido.';
$wb["data_error_empty"] = 'Servidor de nomes em branco';
$wb["data_error_regex"] = 'Servidor de nomes com formato inválido';
?>
interface/web/dns/lib/lang/br_dns_ptr.lng
New file
@@ -0,0 +1,15 @@
<?php
$wb["server_id_txt"] = 'Servidor';
$wb["zone_txt"] = 'Zona';
$wb["name_txt"] = 'Nnome';
$wb["type_txt"] = 'tipo';
$wb["data_txt"] = 'Hostname Canônico';
$wb["ttl_txt"] = 'TTL';
$wb["active_txt"] = 'Ativo';
$wb["limit_dns_record_txt"] = 'O número máximo de zonas DNS para sua conta foi atingido.';
$wb["no_zone_perm"] = 'Você não tem permição para adcionar registros a está zona DNS.';
$wb["name_error_empty"] = 'Hostname em branco.';
$wb["name_error_regex"] = 'Hostname tem um formato inválido.';
$wb["data_error_empty"] = 'Endereço-IP em branco';
$wb["data_error_regex"] = 'Endereço-IP formato inválido';
?>
interface/web/dns/lib/lang/br_dns_rp.lng
New file
@@ -0,0 +1,15 @@
<?php
$wb["server_id_txt"] = 'Servidor';
$wb["zone_txt"] = 'Zona';
$wb["name_txt"] = 'Hostname';
$wb["type_txt"] = 'tipo';
$wb["data_txt"] = 'Pessoa Responsável';
$wb["ttl_txt"] = 'TTL';
$wb["active_txt"] = 'Ativo';
$wb["limit_dns_record_txt"] = 'O número máximo de zonas DNS para sua conta foi atingido.';
$wb["no_zone_perm"] = 'Você não tem permição para adcionar registros a está zona DNS.';
$wb["name_error_empty"] = 'O Hostname está em branco.';
$wb["name_error_regex"] = 'O Hostname está com formato inválido.';
$wb["data_error_empty"] = 'Pessoa responsável em branco';
$wb["data_error_regex"] = 'Pessoa responsável formato inválido';
?>
interface/web/dns/lib/lang/br_dns_soa.lng
New file
@@ -0,0 +1,24 @@
<?php
$wb["server_id_txt"] = 'Servidor';
$wb["origin_txt"] = 'Zona (SOA)';
$wb["ns_txt"] = 'NS';
$wb["mbox_txt"] = 'Correio';
$wb["serial_txt"] = 'Serial';
$wb["refresh_txt"] = 'Refresh';
$wb["retry_txt"] = 'Retry';
$wb["expire_txt"] = 'Expire';
$wb["minimum_txt"] = 'Minimum';
$wb["ttl_txt"] = 'TTL';
$wb["xfer_txt"] = 'Permitir transferências de zona para <br />estes IPs (lista separada por ponto e vírgula)';
$wb["active_txt"] = 'Ativo';
$wb["limit_dns_zone_txt"] = 'O número máximo de zonas DNS para sua conta foi atingido.';
$wb["client_txt"] = 'Cliente';
$wb["no_zone_perm"] = 'Você não tem permição para adcionar registros a está zona DNS.';
$wb["server_id_error_empty"] = 'Servidor não selecionado';
$wb["origin_error_empty"] = 'Zona vazia.';
$wb["origin_error_unique"] = 'Este registro já existe nesta zona.';
$wb["origin_error_regex"] = 'Formato de zona inválido.';
$wb["ns_error_regex"] = 'NS tem um formato inválido.';
$wb["mbox_error_empty"] = 'Correio está em branco.';
$wb["mbox_error_regex"] = 'Correio com formato inválido.';
?>
interface/web/dns/lib/lang/br_dns_soa_list.lng
New file
@@ -0,0 +1,9 @@
<?php
$wb["list_head_txt"] = 'Zonas DNS';
$wb["active_txt"] = 'Ativo';
$wb["server_id_txt"] = 'Servidor';
$wb["origin_txt"] = 'Zona';
$wb["ns_txt"] = 'NS';
$wb["mbox_txt"] = 'Correio';
$wb["add_new_record_txt"] = 'Adcionar uma nova zona dns (SOA)';
?>
interface/web/dns/lib/lang/br_dns_srv.lng
New file
@@ -0,0 +1,15 @@
<?php
$wb["server_id_txt"] = 'Servidor';
$wb["zone_txt"] = 'Zona';
$wb["name_txt"] = 'Hostname';
$wb["type_txt"] = 'tipo';
$wb["data_txt"] = 'Registro do Servidor';
$wb["ttl_txt"] = 'TTL';
$wb["active_txt"] = 'Ativo';
$wb["limit_dns_record_txt"] = 'O número máximo de zonas DNS para sua conta foi atingido.';
$wb["no_zone_perm"] = 'Você não tem permição para adcionar registros a está zona DNS.';
$wb["name_error_empty"] = 'O Hostname está em branco.';
$wb["name_error_regex"] = 'O Hostname está com formato inválido.';
$wb["data_error_empty"] = 'Registro do Servidor em branco';
$wb["data_error_regex"] = 'Registro do Servidor com formato inválido';
?>
interface/web/dns/lib/lang/br_dns_template.lng
New file
@@ -0,0 +1,6 @@
<?php
$wb["name_txt"] = 'Nome';
$wb["fields_txt"] = 'Campos';
$wb["template_txt"] = 'Gabarito';
$wb["visible_txt"] = 'Visível';
?>
interface/web/dns/lib/lang/br_dns_template_list.lng
New file
@@ -0,0 +1,6 @@
<?php
$wb["list_head_txt"] = 'Assistente de Gabaritos DNS';
$wb["visible_txt"] = 'Visível';
$wb["name_txt"] = 'Nome';
$wb["add_new_record_txt"] = 'Adcionar novo registro';
?>
interface/web/dns/lib/lang/br_dns_txt.lng
New file
@@ -0,0 +1,15 @@
<?php
$wb["server_id_txt"] = 'Servidor';
$wb["zone_txt"] = 'Zona';
$wb["name_txt"] = 'Hostname';
$wb["type_txt"] = 'tipo';
$wb["data_txt"] = 'Text';
$wb["ttl_txt"] = 'TTL';
$wb["active_txt"] = 'Ativo';
$wb["limit_dns_record_txt"] = 'O número máximo de zonas DNS para sua conta foi atingido.';
$wb["no_zone_perm"] = 'Você não tem permição para adcionar registros a está zona DNS.';
$wb["name_error_empty"] = 'Hostname em branco.';
$wb["name_error_regex"] = 'Hostname tem um formato inválido.';
$wb["data_error_empty"] = 'Endereço-IP em branco';
$wb["data_error_regex"] = 'Endereço-IP formato inválido';
?>
interface/web/dns/lib/lang/br_dns_wizard.lng
New file
@@ -0,0 +1,16 @@
<?php
$wb['template_id_txt'] = 'Gabarito';
$wb['server_id_txt'] = 'Servidor';
$wb['client_txt'] = 'Cliente';
$wb["btn_save_txt"] = 'Criar Registro DNS';
$wb["btn_cancel_txt"] = 'Cancelar';
$wb['domain_txt'] = 'Domínio';
$wb['email_txt'] = 'Correio';
$wb['ns1_txt'] = 'NS 1';
$wb['ns2_txt'] = 'NS 2';
$wb['ip_txt'] = 'Endereço IP';
$wb['error_origin_empty'] = 'Origem em branco.';
?>
interface/web/dns/lib/lang/de_dns_a.lng
@@ -12,4 +12,5 @@
$wb['name_error_regex'] = 'Der Hostname hat das falsche Format.';
$wb['data_error_empty'] = 'IP Adresse ist leer';
$wb['data_error_regex'] = 'Format der IP Adresse ist ungültig';
$wb['data_error_duplicate'] = 'Duplicate A-Record';
?>
interface/web/dns/lib/lang/de_dns_aaaa.lng
New file
@@ -0,0 +1,15 @@
<?php
$wb['server_id_txt'] = 'Server';
$wb['zone_txt'] = 'Zone';
$wb['name_txt'] = 'Hostname';
$wb['type_txt'] = 'type';
$wb['data_txt'] = 'IPv6-Address';
$wb['ttl_txt'] = 'TTL';
$wb['active_txt'] = 'Active';
$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
$wb['name_error_empty'] = 'The hostname is empty.';
$wb['name_error_regex'] = 'The hostname has the wrong format.';
$wb['data_error_empty'] = 'IP-Address empty';
$wb['data_error_regex'] = 'IP-Address format invalid';
?>
interface/web/dns/lib/lang/de_dns_wizard.lng
@@ -10,4 +10,16 @@
$wb['ns2_txt'] = 'NS 2';
$wb['ip_txt'] = 'IP Address';
$wb['error_origin_empty'] = 'Origin empty.';
$wb['error_ns_empty'] = 'NS empty.';
$wb['error_mbox_empty'] = 'Mbox empty.';
$wb['error_refresh_empty'] = 'Refresh empty.';
$wb['error_retry_empty'] = 'Retry empty.';
$wb['error_expire_empty'] = 'Expire empty.';
$wb['error_minimum_empty'] = 'Minimum empty.';
$wb['error_ttl_empty'] = 'TTL empty.';
$wb['error_domain_empty'] = 'Domain empty';
$wb['error_ip_empty'] = 'IP empty.';
$wb['error_ns1_empty'] = 'NS1 empty.';
$wb['error_ns2_empty'] = 'NS2 empty.';
$wb['error_email_empty'] = 'EMail empty.';
?>
interface/web/dns/lib/lang/en_dns_a.lng
@@ -12,4 +12,5 @@
$wb["name_error_regex"] = 'The hostname has the wrong format.';
$wb["data_error_empty"] = 'IP-Address empty';
$wb["data_error_regex"] = 'IP-Address format invalid';
$wb["data_error_duplicate"] = 'Duplicate A-Record';
?>
interface/web/dns/lib/lang/es_dns_a.lng
@@ -12,4 +12,5 @@
$wb['name_error_regex'] = 'El formato del nombre de máquina es incorrecto.';
$wb['data_error_empty'] = 'Dirección IP vacía';
$wb['data_error_regex'] = 'El formato de la dirección IP es inválido.';
$wb['data_error_duplicate'] = 'Duplicate A-Record';
?>
interface/web/dns/lib/lang/es_dns_aaaa.lng
New file
@@ -0,0 +1,15 @@
<?php
$wb["server_id_txt"] = 'Server';
$wb["zone_txt"] = 'Zone';
$wb["name_txt"] = 'Hostname';
$wb["type_txt"] = 'type';
$wb["data_txt"] = 'IPv6-Address';
$wb["ttl_txt"] = 'TTL';
$wb["active_txt"] = 'Active';
$wb["limit_dns_record_txt"] = 'The max. number of DNS records for your account is reached.';
$wb["no_zone_perm"] = 'You do not have the permission to add a record to this DNS zone.';
$wb["name_error_empty"] = 'The hostname is empty.';
$wb["name_error_regex"] = 'The hostname has the wrong format.';
$wb["data_error_empty"] = 'IP-Address empty';
$wb["data_error_regex"] = 'IP-Address format invalid';
?>
interface/web/dns/lib/lang/es_dns_wizard.lng
@@ -10,4 +10,16 @@
$wb['ns2_txt'] = 'NS 2';
$wb['ip_txt'] = 'Dirección IP';
$wb['error_origin_empty'] = 'Origen vacío.';
$wb['error_ns_empty'] = 'NS empty.';
$wb['error_mbox_empty'] = 'Mbox empty.';
$wb['error_refresh_empty'] = 'Refresh empty.';
$wb['error_retry_empty'] = 'Retry empty.';
$wb['error_expire_empty'] = 'Expire empty.';
$wb['error_minimum_empty'] = 'Minimum empty.';
$wb['error_ttl_empty'] = 'TTL empty.';
$wb['error_domain_empty'] = 'Domain empty';
$wb['error_ip_empty'] = 'IP empty.';
$wb['error_ns1_empty'] = 'NS1 empty.';
$wb['error_ns2_empty'] = 'NS2 empty.';
$wb['error_email_empty'] = 'EMail empty.';
?>
interface/web/dns/lib/lang/fi_dns_a.lng
@@ -12,4 +12,5 @@
$wb['name_error_regex'] = 'Verkkotunnus on vääränlainen.';
$wb['data_error_empty'] = 'IP-osoite tyhjä';
$wb['data_error_regex'] = 'IP-osoite on vääränlainen';
$wb['data_error_duplicate'] = 'Duplicate A-Record';
?>
interface/web/dns/lib/lang/fi_dns_aaaa.lng
New file
@@ -0,0 +1,15 @@
<?php
$wb["server_id_txt"] = 'Server';
$wb["zone_txt"] = 'Zone';
$wb["name_txt"] = 'Hostname';
$wb["type_txt"] = 'type';
$wb["data_txt"] = 'IPv6-Address';
$wb["ttl_txt"] = 'TTL';
$wb["active_txt"] = 'Active';
$wb["limit_dns_record_txt"] = 'The max. number of DNS records for your account is reached.';
$wb["no_zone_perm"] = 'You do not have the permission to add a record to this DNS zone.';
$wb["name_error_empty"] = 'The hostname is empty.';
$wb["name_error_regex"] = 'The hostname has the wrong format.';
$wb["data_error_empty"] = 'IP-Address empty';
$wb["data_error_regex"] = 'IP-Address format invalid';
?>
interface/web/dns/lib/lang/fi_dns_wizard.lng
@@ -10,4 +10,16 @@
$wb['ns2_txt'] = '2. nimipalvelin';
$wb['ip_txt'] = 'IP-osoite';
$wb['error_origin_empty'] = 'Verkkotunnusta ei ole annettu.';
$wb['error_ns_empty'] = 'NS empty.';
$wb['error_mbox_empty'] = 'Mbox empty.';
$wb['error_refresh_empty'] = 'Refresh empty.';
$wb['error_retry_empty'] = 'Retry empty.';
$wb['error_expire_empty'] = 'Expire empty.';
$wb['error_minimum_empty'] = 'Minimum empty.';
$wb['error_ttl_empty'] = 'TTL empty.';
$wb['error_domain_empty'] = 'Domain empty';
$wb['error_ip_empty'] = 'IP empty.';
$wb['error_ns1_empty'] = 'NS1 empty.';
$wb['error_ns2_empty'] = 'NS2 empty.';
$wb['error_email_empty'] = 'EMail empty.';
?>
interface/web/dns/lib/lang/fr_dns_a.lng
@@ -12,4 +12,5 @@
$wb['name_error_regex'] = 'The hostname has the wrong format.';
$wb['data_error_empty'] = 'IP-Address empty';
$wb['data_error_regex'] = 'IP-Address format invalid';
$wb['data_error_duplicate'] = 'Duplicate A-Record';
?>
interface/web/dns/lib/lang/fr_dns_aaaa.lng
New file
@@ -0,0 +1,15 @@
<?php
$wb['server_id_txt'] = 'Server';
$wb['zone_txt'] = 'Zone';
$wb['name_txt'] = 'Hostname';
$wb['type_txt'] = 'type';
$wb['data_txt'] = 'IPv6-Address';
$wb['ttl_txt'] = 'TTL';
$wb['active_txt'] = 'Active';
$wb['limit_dns_record_txt'] = 'The max. number of DNS records for your account is reached.';
$wb['no_zone_perm'] = 'You do not have the permission to add a record to this DNS zone.';
$wb['name_error_empty'] = 'The hostname is empty.';
$wb['name_error_regex'] = 'The hostname has the wrong format.';
$wb['data_error_empty'] = 'IP-Address empty';
$wb['data_error_regex'] = 'IP-Address format invalid';
?>
interface/web/dns/lib/lang/fr_dns_wizard.lng
@@ -10,4 +10,16 @@
$wb['ns2_txt'] = 'NS 2';
$wb['ip_txt'] = 'IP Address';
$wb['error_origin_empty'] = 'Origin empty.';
$wb['error_ns_empty'] = 'NS empty.';
$wb['error_mbox_empty'] = 'Mbox empty.';
$wb['error_refresh_empty'] = 'Refresh empty.';
$wb['error_retry_empty'] = 'Retry empty.';
$wb['error_expire_empty'] = 'Expire empty.';
$wb['error_minimum_empty'] = 'Minimum empty.';
$wb['error_ttl_empty'] = 'TTL empty.';
$wb['error_domain_empty'] = 'Domain empty';
$wb['error_ip_empty'] = 'IP empty.';
$wb['error_ns1_empty'] = 'NS1 empty.';
$wb['error_ns2_empty'] = 'NS2 empty.';
$wb['error_email_empty'] = 'EMail empty.';
?>
interface/web/dns/lib/lang/it_dns_a.lng
@@ -12,4 +12,5 @@
$wb['name_error_regex'] = 'The hostname has the wrong format.';
$wb['data_error_empty'] = 'IP-Address empty';
$wb['data_error_regex'] = 'IP-Address format invalid';
$wb['data_error_duplicate'] = 'Duplicate A-Record';
?>
interface/web/dns/lib/lang/it_dns_aaaa.lng
New file
@@ -0,0 +1,15 @@
<?php
$wb["server_id_txt"] = 'Server';
$wb["zone_txt"] = 'Zone';
$wb["name_txt"] = 'Hostname';
$wb["type_txt"] = 'type';
$wb["data_txt"] = 'IPv6-Address';
$wb["ttl_txt"] = 'TTL';
$wb["active_txt"] = 'Active';
$wb["limit_dns_record_txt"] = 'The max. number of DNS records for your account is reached.';
$wb["no_zone_perm"] = 'You do not have the permission to add a record to this DNS zone.';
$wb["name_error_empty"] = 'The hostname is empty.';
$wb["name_error_regex"] = 'The hostname has the wrong format.';
$wb["data_error_empty"] = 'IP-Address empty';
$wb["data_error_regex"] = 'IP-Address format invalid';
?>
interface/web/dns/lib/lang/it_dns_wizard.lng
@@ -10,4 +10,16 @@
$wb['ns2_txt'] = 'NS 2';
$wb['ip_txt'] = 'IP Address';
$wb['error_origin_empty'] = 'Origin empty.';
$wb['error_ns_empty'] = 'NS empty.';
$wb['error_mbox_empty'] = 'Mbox empty.';
$wb['error_refresh_empty'] = 'Refresh empty.';
$wb['error_retry_empty'] = 'Retry empty.';
$wb['error_expire_empty'] = 'Expire empty.';
$wb['error_minimum_empty'] = 'Minimum empty.';
$wb['error_ttl_empty'] = 'TTL empty.';
$wb['error_domain_empty'] = 'Domain empty';
$wb['error_ip_empty'] = 'IP empty.';
$wb['error_ns1_empty'] = 'NS1 empty.';
$wb['error_ns2_empty'] = 'NS2 empty.';
$wb['error_email_empty'] = 'EMail empty.';
?>
interface/web/dns/lib/lang/nl_dns_a.lng
@@ -12,4 +12,5 @@
$wb['name_error_regex'] = 'De hostname has the wrong format.';
$wb['data_error_empty'] = 'IP-Adres is leeg.';
$wb['data_error_regex'] = 'IP-Adres formaat ongeldig.';
$wb['data_error_duplicate'] = 'Duplicate A-Record';
?>
interface/web/dns/lib/lang/nl_dns_aaaa.lng
New file
@@ -0,0 +1,15 @@
<?php
$wb["server_id_txt"] = 'Server';
$wb["zone_txt"] = 'Zone';
$wb["name_txt"] = 'Hostname';
$wb["type_txt"] = 'type';
$wb["data_txt"] = 'IPv6-Address';
$wb["ttl_txt"] = 'TTL';
$wb["active_txt"] = 'Active';
$wb["limit_dns_record_txt"] = 'The max. number of DNS records for your account is reached.';
$wb["no_zone_perm"] = 'You do not have the permission to add a record to this DNS zone.';
$wb["name_error_empty"] = 'The hostname is empty.';
$wb["name_error_regex"] = 'The hostname has the wrong format.';
$wb["data_error_empty"] = 'IP-Address empty';
$wb["data_error_regex"] = 'IP-Address format invalid';
?>
interface/web/dns/lib/lang/nl_dns_wizard.lng
@@ -10,4 +10,16 @@
$wb['ns2_txt'] = 'NS 2';
$wb['ip_txt'] = 'IP Address';
$wb['error_origin_empty'] = 'Origin empty.';
$wb['error_ns_empty'] = 'NS empty.';
$wb['error_mbox_empty'] = 'Mbox empty.';
$wb['error_refresh_empty'] = 'Refresh empty.';
$wb['error_retry_empty'] = 'Retry empty.';
$wb['error_expire_empty'] = 'Expire empty.';
$wb['error_minimum_empty'] = 'Minimum empty.';
$wb['error_ttl_empty'] = 'TTL empty.';
$wb['error_domain_empty'] = 'Domain empty';
$wb['error_ip_empty'] = 'IP empty.';
$wb['error_ns1_empty'] = 'NS1 empty.';
$wb['error_ns2_empty'] = 'NS2 empty.';
$wb['error_email_empty'] = 'EMail empty.';
?>
interface/web/dns/lib/lang/ru_dns_a.lng
@@ -12,4 +12,5 @@
$wb['name_error_regex'] = 'Имя узла имеет неправильный формат.';
$wb['data_error_empty'] = 'IP-адрес пустой';
$wb['data_error_regex'] = 'Формат IP-адреса неправилен';
$wb['data_error_duplicate'] = 'Duplicate A-Record';
?>
interface/web/dns/lib/lang/ru_dns_aaaa.lng
New file
@@ -0,0 +1,15 @@
<?php
$wb["server_id_txt"] = 'Server';
$wb["zone_txt"] = 'Zone';
$wb["name_txt"] = 'Hostname';
$wb["type_txt"] = 'type';
$wb["data_txt"] = 'IPv6-Address';
$wb["ttl_txt"] = 'TTL';
$wb["active_txt"] = 'Active';
$wb["limit_dns_record_txt"] = 'The max. number of DNS records for your account is reached.';
$wb["no_zone_perm"] = 'You do not have the permission to add a record to this DNS zone.';
$wb["name_error_empty"] = 'The hostname is empty.';
$wb["name_error_regex"] = 'The hostname has the wrong format.';
$wb["data_error_empty"] = 'IP-Address empty';
$wb["data_error_regex"] = 'IP-Address format invalid';
?>
interface/web/dns/lib/lang/ru_dns_wizard.lng
@@ -10,4 +10,16 @@
$wb['ns2_txt'] = 'NS 2';
$wb['ip_txt'] = 'IP Address';
$wb['error_origin_empty'] = 'Origin empty.';
$wb['error_ns_empty'] = 'NS empty.';
$wb['error_mbox_empty'] = 'Mbox empty.';
$wb['error_refresh_empty'] = 'Refresh empty.';
$wb['error_retry_empty'] = 'Retry empty.';
$wb['error_expire_empty'] = 'Expire empty.';
$wb['error_minimum_empty'] = 'Minimum empty.';
$wb['error_ttl_empty'] = 'TTL empty.';
$wb['error_domain_empty'] = 'Domain empty';
$wb['error_ip_empty'] = 'IP empty.';
$wb['error_ns1_empty'] = 'NS1 empty.';
$wb['error_ns2_empty'] = 'NS2 empty.';
$wb['error_email_empty'] = 'EMail empty.';
?>
interface/web/dns/lib/lang/se_dns_a.lng
@@ -12,4 +12,5 @@
$wb['name_error_regex'] = 'The hostname has the wrong format.';
$wb['data_error_empty'] = 'IP-Address empty';
$wb['data_error_regex'] = 'IP-Address format invalid';
$wb['data_error_duplicate'] = 'Duplicate A-Record';
?>
interface/web/dns/lib/lang/se_dns_aaaa.lng
New file
@@ -0,0 +1,15 @@
<?php
$wb["server_id_txt"] = 'Server';
$wb["zone_txt"] = 'Zone';
$wb["name_txt"] = 'Hostname';
$wb["type_txt"] = 'type';
$wb["data_txt"] = 'IPv6-Address';
$wb["ttl_txt"] = 'TTL';
$wb["active_txt"] = 'Active';
$wb["limit_dns_record_txt"] = 'The max. number of DNS records for your account is reached.';
$wb["no_zone_perm"] = 'You do not have the permission to add a record to this DNS zone.';
$wb["name_error_empty"] = 'The hostname is empty.';
$wb["name_error_regex"] = 'The hostname has the wrong format.';
$wb["data_error_empty"] = 'IP-Address empty';
$wb["data_error_regex"] = 'IP-Address format invalid';
?>
interface/web/dns/lib/lang/se_dns_wizard.lng
@@ -10,4 +10,16 @@
$wb['ns2_txt'] = 'NS 2';
$wb['ip_txt'] = 'IP Address';
$wb['error_origin_empty'] = 'Origin empty.';
$wb['error_ns_empty'] = 'NS empty.';
$wb['error_mbox_empty'] = 'Mbox empty.';
$wb['error_refresh_empty'] = 'Refresh empty.';
$wb['error_retry_empty'] = 'Retry empty.';
$wb['error_expire_empty'] = 'Expire empty.';
$wb['error_minimum_empty'] = 'Minimum empty.';
$wb['error_ttl_empty'] = 'TTL empty.';
$wb['error_domain_empty'] = 'Domain empty';
$wb['error_ip_empty'] = 'IP empty.';
$wb['error_ns1_empty'] = 'NS1 empty.';
$wb['error_ns2_empty'] = 'NS2 empty.';
$wb['error_email_empty'] = 'EMail empty.';
?>
interface/web/dns/lib/module.conf.php
@@ -6,6 +6,26 @@
$module["startpage"]     = "dns/dns_soa_list.php";
$module["tab_width"]    = '';
$items[] = array( 'title'     => "Add DNS Zone",
                  'target'     => 'content',
                  'link'    => 'dns/dns_wizard.php');
if($_SESSION["s"]["user"]["typ"] == 'admin') {
    $items[] = array(     'title'     => "Templates",
                          'target'     => 'content',
                          'link'        => 'dns/dns_template_list.php');
}
$module["nav"][] = array(    'title'    => 'DNS Wizard',
                            'open'     => 1,
                            'items'    => $items);
unset($items);
/*
    Email accounts menu
*/
@@ -26,25 +46,6 @@
                            'items'    => $items);
unset($items);
$items[] = array( 'title'     => "Add DNS Zone",
                  'target'     => 'content',
                  'link'    => 'dns/dns_wizard.php');
$items[] = array( 'title'     => "Templates",
                  'target'     => 'content',
                  'link'    => 'dns/dns_template_list.php');
$module["nav"][] = array(    'title'    => 'DNS Wizard',
                            'open'     => 1,
                            'items'    => $items);
interface/web/dns/list/dns_soa.list.php
@@ -64,10 +64,9 @@
                            'op'        => "like",
                            'prefix'    => "%",
                            'suffix'    => "%",
                            'datasource'    => array (     'type'    => 'SQL',
                                                        'querystring' => 'SELECT server_id,server_name FROM server WHERE {AUTHSQL} ORDER BY server_name',
                                                        'keyfield'=> 'server_id',
                                                        'valuefield'=> 'server_name'
                            'datasource'    => array (     'type'    => 'CUSTOM',
                                                        'class'=> 'custom_datasource',
                                                        'function'=> 'dns_servers'
                                                       ),
                            'width'        => "",
                            'value'        => "");
interface/web/dns/templates/dns_a_edit.htm
@@ -1,39 +1,39 @@
<h2><tmpl_var name="list_head_txt"></h2>
<p><tmpl_var name="list_desc_txt"></p>
<div class="panel panel_dns_a">
  <div class="pnl_formsarea">
    <fieldset class="inlineLabels">
      <div class="ctrlHolder">
          <label for="name">{tmpl_var name='name_txt'}</label>
        <input name="name" id="name" value="{tmpl_var name='name'}" size="30" maxlength="255" type="text" class="textInput" />
                <p class="formHint">{tmpl_var name='name_hint_txt'}</p>
            </div>
      <div class="ctrlHolder">
          <label for="data">{tmpl_var name='data_txt'}</label>
        <input name="data" id="data" value="{tmpl_var name='data'}" size="30" maxlength="255" type="text" class="textInput formLengthIPv4" />
            </div>
      <div class="ctrlHolder">
          <label for="ttl">{tmpl_var name='ttl_txt'}</label>
        <input name="ttl" id="ttl" value="{tmpl_var name='ttl'}" size="10" maxlength="10" type="text" class="textInput" />
            </div>
      <div class="ctrlHolder">
                <p class="label">{tmpl_var name='active_txt'}</p>
                    <div class="multiField">
                        {tmpl_var name='active'}
                    </div>
            </div>
    </fieldset>
    <input type="hidden" name="id" value="{tmpl_var name='id'}">
    <input type="hidden" name="zone" value="{tmpl_var name='zone'}">
    <input type="hidden" name="type" value="{tmpl_var name='type'}">
    <div class="buttonHolder buttons">
      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','dns/dns_a_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('dns/dns_soa_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
    </div>
  </div>
</div>
<h2><tmpl_var name="list_head_txt"></h2>
<p><tmpl_var name="list_desc_txt"></p>
<div class="panel panel_dns_a">
  <div class="pnl_formsarea">
    <fieldset class="inlineLabels">
      <div class="ctrlHolder">
          <label for="name">{tmpl_var name='name_txt'}</label>
        <input name="name" id="name" value="{tmpl_var name='name'}" size="30" maxlength="255" type="text" class="textInput" />
                <p class="formHint">{tmpl_var name='name_hint_txt'}</p>
            </div>
      <div class="ctrlHolder">
          <label for="data">{tmpl_var name='data_txt'}</label>
        <input name="data" id="data" value="{tmpl_var name='data'}" size="30" maxlength="255" type="text" class="textInput formLengthIPv4" />
            </div>
      <div class="ctrlHolder">
          <label for="ttl">{tmpl_var name='ttl_txt'}</label>
        <input name="ttl" id="ttl" value="{tmpl_var name='ttl'}" size="10" maxlength="10" type="text" class="textInput" />
            </div>
      <div class="ctrlHolder">
                <p class="label">{tmpl_var name='active_txt'}</p>
                    <div class="multiField">
                        {tmpl_var name='active'}
                    </div>
            </div>
    </fieldset>
    <input type="hidden" name="id" value="{tmpl_var name='id'}">
    <input type="hidden" name="zone" value="{tmpl_var name='zone'}">
    <input type="hidden" name="type" value="{tmpl_var name='type'}">
    <div class="buttonHolder buttons">
      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','dns/dns_a_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('dns/dns_soa_edit.php?id={tmpl_var name='zone'}');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
    </div>
  </div>
</div>
interface/web/dns/templates/dns_aaaa_edit.htm
@@ -32,7 +32,7 @@
    <div class="buttonHolder buttons">
      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','dns/dns_aaaa_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('dns/dns_soa_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('dns/dns_soa_edit.php?id={tmpl_var name='zone'}');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
    </div>
  </div>
  
interface/web/dns/templates/dns_alias_edit.htm
@@ -1,38 +1,38 @@
<h2><tmpl_var name="list_head_txt"></h2>
<p><tmpl_var name="list_desc_txt"></p>
<div class="panel panel_dns_alias">
  <div class="pnl_formsarea">
    <fieldset class="inlineLabels">
      <div class="ctrlHolder">
          <label for="name">{tmpl_var name='name_txt'}</label>
        <input name="name" id="name" value="{tmpl_var name='name'}" size="30" maxlength="255" type="text" class="textInput" />
            </div>
      <div class="ctrlHolder">
          <label for="data">{tmpl_var name='data_txt'}</label>
        <input name="data" id="data" value="{tmpl_var name='data'}" size="30" maxlength="255" type="text" class="textInput" />
            </div>
      <div class="ctrlHolder">
          <label for="ttl">{tmpl_var name='ttl_txt'}</label>
        <input name="ttl" id="ttl" value="{tmpl_var name='ttl'}" size="10" maxlength="10" type="text" class="textInput" />
            </div>
      <div class="ctrlHolder">
                <p class="label">{tmpl_var name='active_txt'}</p>
                    <div class="multiField">
                        {tmpl_var name='active'}
                    </div>
            </div>
    </fieldset>
    <input type="hidden" name="id" value="{tmpl_var name='id'}">
    <input type="hidden" name="zone" value="{tmpl_var name='zone'}">
    <input type="hidden" name="type" value="{tmpl_var name='type'}">
    <div class="buttonHolder buttons">
      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','dns/dns_alias_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('dns/dns_soa_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
    </div>
  </div>
</div>
<h2><tmpl_var name="list_head_txt"></h2>
<p><tmpl_var name="list_desc_txt"></p>
<div class="panel panel_dns_alias">
  <div class="pnl_formsarea">
    <fieldset class="inlineLabels">
      <div class="ctrlHolder">
          <label for="name">{tmpl_var name='name_txt'}</label>
        <input name="name" id="name" value="{tmpl_var name='name'}" size="30" maxlength="255" type="text" class="textInput" />
            </div>
      <div class="ctrlHolder">
          <label for="data">{tmpl_var name='data_txt'}</label>
        <input name="data" id="data" value="{tmpl_var name='data'}" size="30" maxlength="255" type="text" class="textInput" />
            </div>
      <div class="ctrlHolder">
          <label for="ttl">{tmpl_var name='ttl_txt'}</label>
        <input name="ttl" id="ttl" value="{tmpl_var name='ttl'}" size="10" maxlength="10" type="text" class="textInput" />
            </div>
      <div class="ctrlHolder">
                <p class="label">{tmpl_var name='active_txt'}</p>
                    <div class="multiField">
                        {tmpl_var name='active'}
                    </div>
            </div>
    </fieldset>
    <input type="hidden" name="id" value="{tmpl_var name='id'}">
    <input type="hidden" name="zone" value="{tmpl_var name='zone'}">
    <input type="hidden" name="type" value="{tmpl_var name='type'}">
    <div class="buttonHolder buttons">
      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','dns/dns_alias_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('dns/dns_soa_edit.php?id={tmpl_var name='zone'}');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
    </div>
  </div>
</div>
interface/web/dns/templates/dns_cname_edit.htm
@@ -1,38 +1,38 @@
<h2><tmpl_var name="list_head_txt"></h2>
<p><tmpl_var name="list_desc_txt"></p>
<div class="panel panel_dns_cname">
  <div class="pnl_formsarea">
    <fieldset class="inlineLabels">
      <div class="ctrlHolder">
          <label for="name">{tmpl_var name='name_txt'}</label>
        <input name="name" id="name" value="{tmpl_var name='name'}" size="30" maxlength="255" type="text" class="textInput" />
            </div>
      <div class="ctrlHolder">
          <label for="data">{tmpl_var name='data_txt'}</label>
        <input name="data" id="data" value="{tmpl_var name='data'}" size="30" maxlength="255" type="text" class="textInput" />
            </div>
      <div class="ctrlHolder">
          <label for="ttl">{tmpl_var name='ttl_txt'}</label>
        <input name="ttl" id="ttl" value="{tmpl_var name='ttl'}" size="10" maxlength="10" type="text" class="textInput" />
            </div>
      <div class="ctrlHolder">
                <p class="label">{tmpl_var name='active_txt'}</p>
                    <div class="multiField">
                        {tmpl_var name='active'}
                    </div>
            </div>
    </fieldset>
    <input type="hidden" name="id" value="{tmpl_var name='id'}">
    <input type="hidden" name="zone" value="{tmpl_var name='zone'}">
    <input type="hidden" name="type" value="{tmpl_var name='type'}">
    <div class="buttonHolder buttons">
      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','dns/dns_cname_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('dns/dns_soa_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
    </div>
  </div>
</div>
<h2><tmpl_var name="list_head_txt"></h2>
<p><tmpl_var name="list_desc_txt"></p>
<div class="panel panel_dns_cname">
  <div class="pnl_formsarea">
    <fieldset class="inlineLabels">
      <div class="ctrlHolder">
          <label for="name">{tmpl_var name='name_txt'}</label>
        <input name="name" id="name" value="{tmpl_var name='name'}" size="30" maxlength="255" type="text" class="textInput" />
            </div>
      <div class="ctrlHolder">
          <label for="data">{tmpl_var name='data_txt'}</label>
        <input name="data" id="data" value="{tmpl_var name='data'}" size="30" maxlength="255" type="text" class="textInput" />
            </div>
      <div class="ctrlHolder">
          <label for="ttl">{tmpl_var name='ttl_txt'}</label>
        <input name="ttl" id="ttl" value="{tmpl_var name='ttl'}" size="10" maxlength="10" type="text" class="textInput" />
            </div>
      <div class="ctrlHolder">
                <p class="label">{tmpl_var name='active_txt'}</p>
                    <div class="multiField">
                        {tmpl_var name='active'}
                    </div>
            </div>
    </fieldset>
    <input type="hidden" name="id" value="{tmpl_var name='id'}">
    <input type="hidden" name="zone" value="{tmpl_var name='zone'}">
    <input type="hidden" name="type" value="{tmpl_var name='type'}">
    <div class="buttonHolder buttons">
      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','dns/dns_cname_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('dns/dns_soa_edit.php?id={tmpl_var name='zone'}');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
    </div>
  </div>
</div>
interface/web/dns/templates/dns_hinfo_edit.htm
@@ -1,38 +1,38 @@
<h2><tmpl_var name="list_head_txt"></h2>
<p><tmpl_var name="list_desc_txt"></p>
<div class="panel panel_dns_hinfo">
  <div class="pnl_formsarea">
    <fieldset class="inlineLabels">
      <div class="ctrlHolder">
          <label for="name">{tmpl_var name='name_txt'}</label>
        <input name="name" id="name" value="{tmpl_var name='name'}" size="30" maxlength="255" type="text" class="textInput" />
            </div>
      <div class="ctrlHolder">
          <label for="data">{tmpl_var name='data_txt'}</label>
        <input name="data" id="data" value="{tmpl_var name='data'}" size="30" maxlength="255" type="text" class="textInput" />
            </div>
      <div class="ctrlHolder">
          <label for="ttl">{tmpl_var name='ttl_txt'}</label>
        <input name="ttl" id="ttl" value="{tmpl_var name='ttl'}" size="10" maxlength="10" type="text" class="textInput" />
            </div>
      <div class="ctrlHolder">
                <p class="label">{tmpl_var name='active_txt'}</p>
                    <div class="multiField">
                        {tmpl_var name='active'}
                    </div>
            </div>
    </fieldset>
    <input type="hidden" name="id" value="{tmpl_var name='id'}">
    <input type="hidden" name="zone" value="{tmpl_var name='zone'}">
    <input type="hidden" name="type" value="{tmpl_var name='type'}">
    <div class="buttonHolder buttons">
      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','dns/dns_hinfo_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('dns/dns_soa_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
    </div>
  </div>
</div>
<h2><tmpl_var name="list_head_txt"></h2>
<p><tmpl_var name="list_desc_txt"></p>
<div class="panel panel_dns_hinfo">
  <div class="pnl_formsarea">
    <fieldset class="inlineLabels">
      <div class="ctrlHolder">
          <label for="name">{tmpl_var name='name_txt'}</label>
        <input name="name" id="name" value="{tmpl_var name='name'}" size="30" maxlength="255" type="text" class="textInput" />
            </div>
      <div class="ctrlHolder">
          <label for="data">{tmpl_var name='data_txt'}</label>
        <input name="data" id="data" value="{tmpl_var name='data'}" size="30" maxlength="255" type="text" class="textInput" />
            </div>
      <div class="ctrlHolder">
          <label for="ttl">{tmpl_var name='ttl_txt'}</label>
        <input name="ttl" id="ttl" value="{tmpl_var name='ttl'}" size="10" maxlength="10" type="text" class="textInput" />
            </div>
      <div class="ctrlHolder">
                <p class="label">{tmpl_var name='active_txt'}</p>
                    <div class="multiField">
                        {tmpl_var name='active'}
                    </div>
            </div>
    </fieldset>
    <input type="hidden" name="id" value="{tmpl_var name='id'}">
    <input type="hidden" name="zone" value="{tmpl_var name='zone'}">
    <input type="hidden" name="type" value="{tmpl_var name='type'}">
    <div class="buttonHolder buttons">
      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','dns/dns_hinfo_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('dns/dns_soa_edit.php?id={tmpl_var name='zone'}');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
    </div>
  </div>
</div>
interface/web/dns/templates/dns_mx_edit.htm
@@ -1,42 +1,42 @@
<h2><tmpl_var name="list_head_txt"></h2>
<p><tmpl_var name="list_desc_txt"></p>
<div class="panel panel_dns_mx">
  <div class="pnl_formsarea">
    <fieldset class="inlineLabels">
      <div class="ctrlHolder">
          <label for="name">{tmpl_var name='name_txt'}</label>
        <input name="name" id="name" value="{tmpl_var name='name'}" size="30" maxlength="255" type="text" class="textInput" />
            </div>
      <div class="ctrlHolder">
          <label for="data">{tmpl_var name='data_txt'}</label>
        <input name="data" id="data" value="{tmpl_var name='data'}" size="30" maxlength="255" type="text" class="textInput" />
            </div>
      <div class="ctrlHolder">
          <label for="aux">{tmpl_var name='aux_txt'}</label>
        <input name="aux" id="aux" value="{tmpl_var name='aux'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
            </div>
      <div class="ctrlHolder">
          <label for="ttl">{tmpl_var name='ttl_txt'}</label>
        <input name="ttl" id="ttl" value="{tmpl_var name='ttl'}" size="10" maxlength="10" type="text" class="textInput" />
            </div>
      <div class="ctrlHolder">
                <p class="label">{tmpl_var name='active_txt'}</p>
                    <div class="multiField">
                        {tmpl_var name='active'}
                    </div>
            </div>
    </fieldset>
    <input type="hidden" name="id" value="{tmpl_var name='id'}">
    <input type="hidden" name="zone" value="{tmpl_var name='zone'}">
    <input type="hidden" name="type" value="{tmpl_var name='type'}">
    <div class="buttonHolder buttons">
      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','dns/dns_mx_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('dns/dns_soa_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
    </div>
  </div>
</div>
<h2><tmpl_var name="list_head_txt"></h2>
<p><tmpl_var name="list_desc_txt"></p>
<div class="panel panel_dns_mx">
  <div class="pnl_formsarea">
    <fieldset class="inlineLabels">
      <div class="ctrlHolder">
          <label for="name">{tmpl_var name='name_txt'}</label>
        <input name="name" id="name" value="{tmpl_var name='name'}" size="30" maxlength="255" type="text" class="textInput" />
            </div>
      <div class="ctrlHolder">
          <label for="data">{tmpl_var name='data_txt'}</label>
        <input name="data" id="data" value="{tmpl_var name='data'}" size="30" maxlength="255" type="text" class="textInput" />
            </div>
      <div class="ctrlHolder">
          <label for="aux">{tmpl_var name='aux_txt'}</label>
        <input name="aux" id="aux" value="{tmpl_var name='aux'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
            </div>
      <div class="ctrlHolder">
          <label for="ttl">{tmpl_var name='ttl_txt'}</label>
        <input name="ttl" id="ttl" value="{tmpl_var name='ttl'}" size="10" maxlength="10" type="text" class="textInput" />
            </div>
      <div class="ctrlHolder">
                <p class="label">{tmpl_var name='active_txt'}</p>
                    <div class="multiField">
                        {tmpl_var name='active'}
                    </div>
            </div>
    </fieldset>
    <input type="hidden" name="id" value="{tmpl_var name='id'}">
    <input type="hidden" name="zone" value="{tmpl_var name='zone'}">
    <input type="hidden" name="type" value="{tmpl_var name='type'}">
    <div class="buttonHolder buttons">
      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','dns/dns_mx_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('dns/dns_soa_edit.php?id={tmpl_var name='zone'}');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
    </div>
  </div>
</div>
interface/web/dns/templates/dns_ns_edit.htm
@@ -1,38 +1,38 @@
<h2><tmpl_var name="list_head_txt"></h2>
<p><tmpl_var name="list_desc_txt"></p>
<div class="panel panel_dns_ns">
  <div class="pnl_formsarea">
    <fieldset class="inlineLabels">
      <div class="ctrlHolder">
          <label for="name">{tmpl_var name='name_txt'}</label>
        <input name="name" id="name" value="{tmpl_var name='name'}" size="30" maxlength="255" type="text" class="textInput" />
            </div>
      <div class="ctrlHolder">
          <label for="data">{tmpl_var name='data_txt'}</label>
        <input name="data" id="data" value="{tmpl_var name='data'}" size="30" maxlength="255" type="text" class="textInput" />
            </div>
      <div class="ctrlHolder">
          <label for="ttl">{tmpl_var name='ttl_txt'}</label>
        <input name="ttl" id="ttl" value="{tmpl_var name='ttl'}" size="10" maxlength="10" type="text" class="textInput" />
            </div>
      <div class="ctrlHolder">
                <p class="label">{tmpl_var name='active_txt'}</p>
                    <div class="multiField">
                        {tmpl_var name='active'}
                    </div>
            </div>
    </fieldset>
    <input type="hidden" name="id" value="{tmpl_var name='id'}">
    <input type="hidden" name="zone" value="{tmpl_var name='zone'}">
    <input type="hidden" name="type" value="{tmpl_var name='type'}">
    <div class="buttonHolder buttons">
      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','dns/dns_ns_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('dns/dns_soa_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
    </div>
  </div>
</div>
<h2><tmpl_var name="list_head_txt"></h2>
<p><tmpl_var name="list_desc_txt"></p>
<div class="panel panel_dns_ns">
  <div class="pnl_formsarea">
    <fieldset class="inlineLabels">
      <div class="ctrlHolder">
          <label for="name">{tmpl_var name='name_txt'}</label>
        <input name="name" id="name" value="{tmpl_var name='name'}" size="30" maxlength="255" type="text" class="textInput" />
            </div>
      <div class="ctrlHolder">
          <label for="data">{tmpl_var name='data_txt'}</label>
        <input name="data" id="data" value="{tmpl_var name='data'}" size="30" maxlength="255" type="text" class="textInput" />
            </div>
      <div class="ctrlHolder">
          <label for="ttl">{tmpl_var name='ttl_txt'}</label>
        <input name="ttl" id="ttl" value="{tmpl_var name='ttl'}" size="10" maxlength="10" type="text" class="textInput" />
            </div>
      <div class="ctrlHolder">
                <p class="label">{tmpl_var name='active_txt'}</p>
                    <div class="multiField">
                        {tmpl_var name='active'}
                    </div>
            </div>
    </fieldset>
    <input type="hidden" name="id" value="{tmpl_var name='id'}">
    <input type="hidden" name="zone" value="{tmpl_var name='zone'}">
    <input type="hidden" name="type" value="{tmpl_var name='type'}">
    <div class="buttonHolder buttons">
      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','dns/dns_ns_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('dns/dns_soa_edit.php?id={tmpl_var name='zone'}');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
    </div>
  </div>
</div>
interface/web/dns/templates/dns_ptr_edit.htm
@@ -1,38 +1,38 @@
<h2><tmpl_var name="list_head_txt"></h2>
<p><tmpl_var name="list_desc_txt"></p>
<div class="panel panel_dns_ptr">
  <div class="pnl_formsarea">
    <fieldset class="inlineLabels">
      <div class="ctrlHolder">
          <label for="name">{tmpl_var name='name_txt'}</label>
        <input name="name" id="name" value="{tmpl_var name='name'}" size="30" maxlength="255" type="text" class="textInput" />
            </div>
      <div class="ctrlHolder">
          <label for="data">{tmpl_var name='data_txt'}</label>
        <input name="data" id="data" value="{tmpl_var name='data'}" size="30" maxlength="255" type="text" class="textInput" />
            </div>
      <div class="ctrlHolder">
          <label for="ttl">{tmpl_var name='ttl_txt'}</label>
        <input name="ttl" id="ttl" value="{tmpl_var name='ttl'}" size="10" maxlength="10" type="text" class="textInput" />
            </div>
      <div class="ctrlHolder">
                <p class="label">{tmpl_var name='active_txt'}</p>
                    <div class="multiField">
                        {tmpl_var name='active'}
                    </div>
            </div>
    </fieldset>
    <input type="hidden" name="id" value="{tmpl_var name='id'}">
    <input type="hidden" name="zone" value="{tmpl_var name='zone'}">
    <input type="hidden" name="type" value="{tmpl_var name='type'}">
    <div class="buttonHolder buttons">
      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','dns/dns_ptr_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('dns/dns_soa_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
    </div>
  </div>
</div>
<h2><tmpl_var name="list_head_txt"></h2>
<p><tmpl_var name="list_desc_txt"></p>
<div class="panel panel_dns_ptr">
  <div class="pnl_formsarea">
    <fieldset class="inlineLabels">
      <div class="ctrlHolder">
          <label for="name">{tmpl_var name='name_txt'}</label>
        <input name="name" id="name" value="{tmpl_var name='name'}" size="30" maxlength="255" type="text" class="textInput" />
            </div>
      <div class="ctrlHolder">
          <label for="data">{tmpl_var name='data_txt'}</label>
        <input name="data" id="data" value="{tmpl_var name='data'}" size="30" maxlength="255" type="text" class="textInput" />
            </div>
      <div class="ctrlHolder">
          <label for="ttl">{tmpl_var name='ttl_txt'}</label>
        <input name="ttl" id="ttl" value="{tmpl_var name='ttl'}" size="10" maxlength="10" type="text" class="textInput" />
            </div>
      <div class="ctrlHolder">
                <p class="label">{tmpl_var name='active_txt'}</p>
                    <div class="multiField">
                        {tmpl_var name='active'}
                    </div>
            </div>
    </fieldset>
    <input type="hidden" name="id" value="{tmpl_var name='id'}">
    <input type="hidden" name="zone" value="{tmpl_var name='zone'}">
    <input type="hidden" name="type" value="{tmpl_var name='type'}">
    <div class="buttonHolder buttons">
      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','dns/dns_ptr_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('dns/dns_soa_edit.php?id={tmpl_var name='zone'}');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
    </div>
  </div>
</div>
interface/web/dns/templates/dns_rp_edit.htm
@@ -1,38 +1,38 @@
<h2><tmpl_var name="list_head_txt"></h2>
<p><tmpl_var name="list_desc_txt"></p>
<div class="panel panel_dns_rp">
  <div class="pnl_formsarea">
    <fieldset class="inlineLabels">
      <div class="ctrlHolder">
          <label for="name">{tmpl_var name='name_txt'}</label>
        <input name="name" id="name" value="{tmpl_var name='name'}" size="30" maxlength="255" type="text" class="textInput" />
            </div>
      <div class="ctrlHolder">
          <label for="data">{tmpl_var name='data_txt'}</label>
        <input name="data" id="data" value="{tmpl_var name='data'}" size="30" maxlength="255" type="text" class="textInput" />
            </div>
      <div class="ctrlHolder">
          <label for="ttl">{tmpl_var name='ttl_txt'}</label>
        <input name="ttl" id="ttl" value="{tmpl_var name='ttl'}" size="10" maxlength="10" type="text" class="textInput" />
            </div>
      <div class="ctrlHolder">
                <p class="label">{tmpl_var name='active_txt'}</p>
                    <div class="multiField">
                        {tmpl_var name='active'}
                    </div>
            </div>
    </fieldset>
    <input type="hidden" name="id" value="{tmpl_var name='id'}">
    <input type="hidden" name="zone" value="{tmpl_var name='zone'}">
    <input type="hidden" name="type" value="{tmpl_var name='type'}">
    <div class="buttonHolder buttons">
      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','dns/dns_rp_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('dns/dns_soa_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
    </div>
  </div>
</div>
<h2><tmpl_var name="list_head_txt"></h2>
<p><tmpl_var name="list_desc_txt"></p>
<div class="panel panel_dns_rp">
  <div class="pnl_formsarea">
    <fieldset class="inlineLabels">
      <div class="ctrlHolder">
          <label for="name">{tmpl_var name='name_txt'}</label>
        <input name="name" id="name" value="{tmpl_var name='name'}" size="30" maxlength="255" type="text" class="textInput" />
            </div>
      <div class="ctrlHolder">
          <label for="data">{tmpl_var name='data_txt'}</label>
        <input name="data" id="data" value="{tmpl_var name='data'}" size="30" maxlength="255" type="text" class="textInput" />
            </div>
      <div class="ctrlHolder">
          <label for="ttl">{tmpl_var name='ttl_txt'}</label>
        <input name="ttl" id="ttl" value="{tmpl_var name='ttl'}" size="10" maxlength="10" type="text" class="textInput" />
            </div>
      <div class="ctrlHolder">
                <p class="label">{tmpl_var name='active_txt'}</p>
                    <div class="multiField">
                        {tmpl_var name='active'}
                    </div>
            </div>
    </fieldset>
    <input type="hidden" name="id" value="{tmpl_var name='id'}">
    <input type="hidden" name="zone" value="{tmpl_var name='zone'}">
    <input type="hidden" name="type" value="{tmpl_var name='type'}">
    <div class="buttonHolder buttons">
      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','dns/dns_rp_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('dns/dns_soa_edit.php?id={tmpl_var name='zone'}');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
    </div>
  </div>
</div>
interface/web/dns/templates/dns_srv_edit.htm
@@ -1,38 +1,38 @@
<h2><tmpl_var name="list_head_txt"></h2>
<p><tmpl_var name="list_desc_txt"></p>
<div class="panel panel_dns_srv">
  <div class="pnl_formsarea">
    <fieldset class="inlineLabels">
      <div class="ctrlHolder">
          <label for="name">{tmpl_var name='name_txt'}</label>
        <input name="name" id="name" value="{tmpl_var name='name'}" size="30" maxlength="255" type="text" class="textInput" />
            </div>
      <div class="ctrlHolder">
          <label for="data">{tmpl_var name='data_txt'}</label>
        <input name="data" id="data" value="{tmpl_var name='data'}" size="30" maxlength="255" type="text" class="textInput" />
            </div>
      <div class="ctrlHolder">
          <label for="ttl">{tmpl_var name='ttl_txt'}</label>
        <input name="ttl" id="ttl" value="{tmpl_var name='ttl'}" size="10" maxlength="10" type="text" class="textInput" />
            </div>
      <div class="ctrlHolder">
                <p class="label">{tmpl_var name='active_txt'}</p>
                    <div class="multiField">
                        {tmpl_var name='active'}
                    </div>
            </div>
    </fieldset>
    <input type="hidden" name="id" value="{tmpl_var name='id'}">
    <input type="hidden" name="zone" value="{tmpl_var name='zone'}">
    <input type="hidden" name="type" value="{tmpl_var name='type'}">
    <div class="buttonHolder buttons">
      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','dns/dns_srv_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('dns/dns_soa_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
    </div>
  </div>
</div>
<h2><tmpl_var name="list_head_txt"></h2>
<p><tmpl_var name="list_desc_txt"></p>
<div class="panel panel_dns_srv">
  <div class="pnl_formsarea">
    <fieldset class="inlineLabels">
      <div class="ctrlHolder">
          <label for="name">{tmpl_var name='name_txt'}</label>
        <input name="name" id="name" value="{tmpl_var name='name'}" size="30" maxlength="255" type="text" class="textInput" />
            </div>
      <div class="ctrlHolder">
          <label for="data">{tmpl_var name='data_txt'}</label>
        <input name="data" id="data" value="{tmpl_var name='data'}" size="30" maxlength="255" type="text" class="textInput" />
            </div>
      <div class="ctrlHolder">
          <label for="ttl">{tmpl_var name='ttl_txt'}</label>
        <input name="ttl" id="ttl" value="{tmpl_var name='ttl'}" size="10" maxlength="10" type="text" class="textInput" />
            </div>
      <div class="ctrlHolder">
                <p class="label">{tmpl_var name='active_txt'}</p>
                    <div class="multiField">
                        {tmpl_var name='active'}
                    </div>
            </div>
    </fieldset>
    <input type="hidden" name="id" value="{tmpl_var name='id'}">
    <input type="hidden" name="zone" value="{tmpl_var name='zone'}">
    <input type="hidden" name="type" value="{tmpl_var name='type'}">
    <div class="buttonHolder buttons">
      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','dns/dns_srv_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('dns/dns_soa_edit.php?id={tmpl_var name='zone'}');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
    </div>
  </div>
</div>
interface/web/dns/templates/dns_txt_edit.htm
@@ -1,38 +1,38 @@
<h2><tmpl_var name="list_head_txt"></h2>
<p><tmpl_var name="list_desc_txt"></p>
<div class="panel panel_dns_txt">
  <div class="pnl_formsarea">
    <fieldset class="inlineLabels">
      <div class="ctrlHolder">
          <label for="name">{tmpl_var name='name_txt'}</label>
        <input name="name" id="name" value="{tmpl_var name='name'}" size="30" maxlength="255" type="text" class="textInput" />
            </div>
      <div class="ctrlHolder">
          <label for="data">{tmpl_var name='data_txt'}</label>
        <input name="data" id="data" value="{tmpl_var name='data'}" size="30" maxlength="255" type="text" class="textInput" />
            </div>
      <div class="ctrlHolder">
          <label for="ttl">{tmpl_var name='ttl_txt'}</label>
        <input name="ttl" id="ttl" value="{tmpl_var name='ttl'}" size="10" maxlength="10" type="text" class="textInput" />
            </div>
      <div class="ctrlHolder">
                <p class="label">{tmpl_var name='active_txt'}</p>
                    <div class="multiField">
                        {tmpl_var name='active'}
                    </div>
            </div>
    </fieldset>
    <input type="hidden" name="id" value="{tmpl_var name='id'}">
    <input type="hidden" name="zone" value="{tmpl_var name='zone'}">
    <input type="hidden" name="type" value="{tmpl_var name='type'}">
    <div class="buttonHolder buttons">
      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','dns/dns_txt_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('dns/dns_soa_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
    </div>
  </div>
</div>
<h2><tmpl_var name="list_head_txt"></h2>
<p><tmpl_var name="list_desc_txt"></p>
<div class="panel panel_dns_txt">
  <div class="pnl_formsarea">
    <fieldset class="inlineLabels">
      <div class="ctrlHolder">
          <label for="name">{tmpl_var name='name_txt'}</label>
        <input name="name" id="name" value="{tmpl_var name='name'}" size="30" maxlength="255" type="text" class="textInput" />
            </div>
      <div class="ctrlHolder">
          <label for="data">{tmpl_var name='data_txt'}</label>
        <input name="data" id="data" value="{tmpl_var name='data'}" size="30" maxlength="255" type="text" class="textInput" />
            </div>
      <div class="ctrlHolder">
          <label for="ttl">{tmpl_var name='ttl_txt'}</label>
        <input name="ttl" id="ttl" value="{tmpl_var name='ttl'}" size="10" maxlength="10" type="text" class="textInput" />
            </div>
      <div class="ctrlHolder">
                <p class="label">{tmpl_var name='active_txt'}</p>
                    <div class="multiField">
                        {tmpl_var name='active'}
                    </div>
            </div>
    </fieldset>
    <input type="hidden" name="id" value="{tmpl_var name='id'}">
    <input type="hidden" name="zone" value="{tmpl_var name='zone'}">
    <input type="hidden" name="type" value="{tmpl_var name='type'}">
    <div class="buttonHolder buttons">
      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','dns/dns_txt_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('dns/dns_soa_edit.php?id={tmpl_var name='zone'}');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
    </div>
  </div>
</div>
interface/web/dns/templates/dns_wizard.htm
@@ -29,6 +29,14 @@
                </select>
      </div>
      </tmpl_if>
      <tmpl_if name="is_reseller">
      <div class="ctrlHolder">
          <label for="client_group_id">{tmpl_var name='client_txt'}</label>
        <select name="client_group_id" id="client_group_id" class="selectInput">
                    {tmpl_var name='client_group_id'}
                </select>
      </div>
      </tmpl_if>
          <tmpl_if name="DOMAIN_VISIBLE">
          <div class="ctrlHolder">
              <label for="domain">{tmpl_var name='domain_txt'}</label>
interface/web/help/lib/lang/br.lng
New file
@@ -0,0 +1,8 @@
<?php
$wb['Support Message'] = 'Mensagem de Suporte';
$wb['Message'] = 'Mensagem';
$wb['Send message'] = 'Enviar Mensagem';
$wb['View messages'] = 'Ver Mensagem';
$wb['Support'] = 'Suporte';
?>
interface/web/help/lib/lang/br_support_message.lng
New file
@@ -0,0 +1,8 @@
<?php
$wb['recipient_id_txt'] = 'Para';
$wb['sender_id_txt'] = 'De';
$wb['subject_txt'] = 'Assunto';
$wb['message_txt'] = 'Mensagem';
$wb['tstamp_txt'] = 'Data';
?>
interface/web/help/lib/lang/br_support_message_list.lng
New file
@@ -0,0 +1,7 @@
<?php
$wb['list_head_txt'] = 'Mensagens de Suporte';
$wb['sender_id_txt'] = 'De';
$wb['subject_txt'] = 'Assunto';
$wb['add_new_record_txt'] = 'Crie uma nova mensagem de suporte';
?>
interface/web/login/lib/lang/br.lng
New file
@@ -0,0 +1,15 @@
<?php
$wb['1001'] = 'Nome de usuário ou senha em branco.';
$wb['1002'] = 'Nome de usuário ou senha inválido.';
$wb['1003'] = 'O usuário está bloqueado!';
$wb['1004'] = 'Várias tentativas sem sucesso de login. Por favor tente novamente daqui a 15 minutos.';
$wb['pass_reset_txt'] = 'Uma nova senha foi gerada e será enviada para você via correio eletrônico cadastrado no sistema.';
$wb['pw_reset'] = 'Senha restabelecida! Será enviada para você via correio eletrônico cadastrado no sistema.';
$wb['pw_error'] = 'Nome de usuário ou correio eletrônico não coincidem.';
$wb['pw_error_noinput'] = 'Favor informar nome de usuário e endereço de correio válidos.';
$wb['pw_reset_mail_msg'] = 'Sua senha do painel de controle foi restabelecida. A sua nova senha é: ';
$wb['pw_reset_mail_title'] = 'Sua senha do painel de controle foi restabelecida.';
$wb['user_regex_error'] = 'O nome de usuário contém mais de 64 caracteres ou contém caracteres inválidos.';
$wb['pw_error_length'] = 'Tamanho da senha não pode ser maior do que 64 caracteres.';
?>
interface/web/mail/lib/lang/bg_mail_alias.lng
@@ -7,4 +7,5 @@
$wb['no_domain_perm'] = 'You have no permission for this domain.';
$wb['destination_error_isemail'] = 'Destination Emailaddress is invalid.';
$wb['limit_mailalias_txt'] = 'The max. number of email aliases for your account is reached.';
$wb['duplicate_mailbox_txt'] = 'There is already a mailbox with this email address';
?>
interface/web/mail/lib/lang/bg_mail_forward.lng
@@ -3,4 +3,5 @@
$wb['destination_txt'] = 'Destination Email';
$wb['active_txt'] = 'Active';
$wb['limit_mailforward_txt'] = 'The max. number of email forwarders for your account is reached.';
$wb['duplicate_mailbox_txt'] = 'There is already a mailbox with this email address';
?>
interface/web/mail/lib/lang/bg_mail_user.lng
@@ -29,4 +29,5 @@
$wb['disablepop3_txt'] = 'Disable POP3';
$wb['welcome_mail_fromname_txt'] = 'ISPConfig3';
$wb['welcome_mail_fromemail_txt'] = 'webmaster@localhost.tld';
$wb['duplicate_alias_or_forward_txt'] = 'There is already an alias or forwrd with this email address.';
?>
interface/web/mail/lib/lang/bg_mail_user_filter_list.lng
@@ -3,4 +3,5 @@
$wb['add_new_record_txt'] = 'Add new Filter';
$wb['page_txt'] = 'Page';
$wb['page_of_txt'] = 'of';
$wb['delete_confirmation'] = 'Do you really want to Delete the mailfilter?';
?>
interface/web/mail/lib/lang/bg_spamfilter_blacklist.lng
@@ -5,4 +5,5 @@
$wb['email_txt'] = 'Email';
$wb['priority_txt'] = 'Priority';
$wb['active_txt'] = 'Active';
$wb['limit_spamfilter_wblist_txt'] = 'The max. number of White- or Blacklist records for your account is reached.';
?>
interface/web/mail/lib/lang/bg_spamfilter_whitelist.lng
@@ -5,4 +5,5 @@
$wb['email_txt'] = 'Email';
$wb['priority_txt'] = 'Priority';
$wb['active_txt'] = 'Active';
$wb['limit_spamfilter_wblist_txt'] = 'The max. number of White- or Blacklist records for your account is reached.';
?>
interface/web/mail/lib/lang/br.lng
New file
@@ -0,0 +1,49 @@
<?php
$wb['Email Alias'] = 'Aliases de Correio';
$wb['Email Blacklist'] = 'Lista Negra de Correio';
$wb['Blacklist'] = 'Lista Negra';
$wb['Mail Content Filter'] = 'Filtro de Conteúdo de Correio';
$wb['Filter'] = 'Filtro';
$wb['Mail Domain'] = 'Domínio de Correio';
$wb['Domain'] = 'Domínio';
$wb['Email Catchall'] = 'Correio Catchall';
$wb['Email Forward'] = 'Encaminhamento de Correio';
$wb['Get Email'] = 'Get Email';
$wb['Spamfilter'] = 'Filtro de Spam';
$wb['Email Routing'] = 'Rota de Correio';
$wb['Email transport'] = 'Transporte de Correio';
$wb['Mailbox'] = 'Caixa de Correio';
$wb['Autoresponder'] = 'Autoresponder';
$wb['Mail Filter'] = 'Filtro de Correio';
$wb['Custom Rules'] = 'Regras Personalizadas';
$wb['Email filter'] = 'Filtro de Correio';
$wb['Email Whitelist'] = 'Lista Branca de Correio';
$wb['Whitelist'] = 'Lista Branca';
$wb['Spamfilter blacklist'] = 'Filtro Spam (Lista Negra)';
$wb['Blacklist'] = 'Lista Negra';
$wb['Spamfilter Config'] = 'Configuração do Filtro Spam';
$wb['Server'] = 'Servidor';
$wb['Spamfilter policy'] = 'Políticas de Filtro Spam';
$wb['Policy'] = 'Política';
$wb['Quarantine'] = 'Quarentena';
$wb['Tag-Level'] = 'Tag-Level';
$wb['Other'] = 'Outros';
$wb['Spamfilter users'] = 'Usuários de Filtro Spam';
$wb['Users'] = 'Usuários';
$wb['Spamfilter Whitelist'] = 'Filtro Spam Lista Branca';
$wb['Whitelist'] = 'Lista Branca';
$wb['Email'] = 'Correio';
$wb['Email Mailbox'] = 'Caixa de Correio';
$wb['Email Accounts'] = 'Contas de Correio';
$wb['User / Domain'] = 'Usuário / Domínio';
$wb['Server Settings'] = 'Configurações do Servidor';
$wb['Spamfilter'] = 'Filtro Spam';
$wb['Fetchmail'] = 'Fetchmail';
$wb['Mailbox traffic'] = 'Tráfego de Correio';
$wb['Statistics'] = 'Estatísticas';
$wb['Postfix Whitelist'] = 'Postfix (Lista Branca)';
$wb['Postfix Blacklist'] = 'Postfix (Lista Negra)';
$wb['Content Filter'] = 'Filtros de Conteúdo';
$wb['Global Filters'] = 'Filtros Globais';
?>
interface/web/mail/lib/lang/br_mail_alias.lng
New file
@@ -0,0 +1,10 @@
<?php
$wb["email_txt"] = 'Correio';
$wb["destination_txt"] = 'Destino';
$wb["active_txt"] = 'Ativo';
$wb["email_error_isemail"] = 'Endereço de correio inválido.';
$wb["email_error_unique"] = 'Endereço de correio duplicado.';
$wb["no_domain_perm"] = "Você não tem permissão para este domínio.";
$wb["destination_error_isemail"] = 'Endereço de destino inválido';
$wb["limit_mailalias_txt"] = 'O número máximo de aliases para sua conta foi atingido.';
?>
interface/web/mail/lib/lang/br_mail_alias_list.lng
New file
@@ -0,0 +1,8 @@
<?php
$wb["list_head_txt"] = 'Email Alias';
$wb["active_txt"] = 'Active';
$wb["source_txt"] = 'source';
$wb["destination_txt"] = 'Destination';
$wb["email_txt"] = 'Email';
$wb["add_new_record_txt"] = 'Add new Email alias';
?>
interface/web/mail/lib/lang/br_mail_blacklist.lng
New file
@@ -0,0 +1,9 @@
<?php
$wb["server_id_txt"] = 'Servidor';
$wb["source_txt"] = 'Endereço Lista Negra';
$wb["recipient_txt"] = 'Recipiente';
$wb["active_txt"] = 'Ativo';
$wb["source_error_notempty"] = 'Endereço em branco.';
$wb["type_txt"] = 'Tipo';
$wb["limit_mailfilter_txt"] = 'O número máximo de filtros de correio para sua conta foi atingido..';
?>
interface/web/mail/lib/lang/br_mail_blacklist_list.lng
New file
@@ -0,0 +1,10 @@
<?php
$wb["list_head_txt"] = 'Correio Lista Negra';
$wb["active_txt"] = 'Ativo';
$wb["server_id_txt"] = 'Servidor';
$wb["source_txt"] = 'Correio na lista negra';
$wb["type_txt"] = 'Tipo';
$wb["recipient_txt"] = 'Recipiente';
$wb["add_new_record_txt"] = 'Adcionar novo registro a lista';
$wb["access_txt"] = 'acesso';
?>
interface/web/mail/lib/lang/br_mail_content_filter.lng
New file
@@ -0,0 +1,9 @@
<?php
$wb["server_id_txt"] = 'Servidor';
$wb["type_txt"] = 'Filtro';
$wb["pattern_txt"] = 'Padrão de Expressão Regular.';
$wb["data_txt"] = 'Data';
$wb["action_txt"] = 'Ação';
$wb["active_txt"] = 'Ativo';
$wb["pattern_error_empty"] = 'Padrão em branco';
?>
interface/web/mail/lib/lang/br_mail_content_filter_list.lng
New file
@@ -0,0 +1,8 @@
<?php
$wb["list_head_txt"] = 'Cabeçalhos Postfix e Body Checks';
$wb["active_txt"] = 'Ativo';
$wb["server_id_txt"] = 'Servidor';
$wb["pattern_txt"] = 'Padrão';
$wb["action_txt"] = 'Ação';
$wb["add_new_record_txt"] = 'Adcionar um novo filtro de conteúdo';
?>
interface/web/mail/lib/lang/br_mail_domain.lng
New file
@@ -0,0 +1,14 @@
<?php
$wb['server_id_txt'] = 'Servidor';
$wb['domain_txt'] = 'Domínio';
$wb['type_txt'] = 'Tipo';
$wb['active_txt'] = 'Ativo';
$wb['domain_error_empty'] = 'Domínio em branco.';
$wb['domain_error_unique'] = 'Domínio duplicado';
$wb['domain_error_regex'] = 'Nome de domínio inválido';
$wb['client_txt'] = 'Cliente';
$wb['limit_maildomain_txt'] = 'O número máximo de contas de correio eletrônico para este domínio foi atingido.';
$wb['policy_txt'] = 'Filtro Anti-Spam';
$wb['no_policy'] = '- desativado -';
?>
interface/web/mail/lib/lang/br_mail_domain_catchall.lng
New file
@@ -0,0 +1,9 @@
<?php
$wb["domain_txt"] = 'Domínio';
$wb["destination_txt"] = 'Destino';
$wb["active_txt"] = 'Ativo';
$wb["domain_error_unique"] = "Já existe um registro de Catchall para este domínio.";
$wb["no_domain_perm"] = "Você não tem permissão para este domínio.";
$wb["domain_error_regex"] = 'O nome do domínio contém caracteres inválidos';
$wb["limit_mailcatchall_txt"] = 'O número máximo de catchall para este domínio foi atingido.';
?>
interface/web/mail/lib/lang/br_mail_domain_catchall_list.lng
New file
@@ -0,0 +1,9 @@
<?php
$wb["list_head_txt"] = 'Catchall de Correio';
$wb["active_txt"] = 'Ativo';
$wb["source_txt"] = 'origem';
$wb["destination_txt"] = 'Endereço de destino';
$wb["server_id_txt"] = 'Servidor';
$wb["domain_txt"] = 'Domínio';
$wb["add_new_record_txt"] = 'Adcionar novo Catchall';
?>
interface/web/mail/lib/lang/br_mail_domain_list.lng
New file
@@ -0,0 +1,7 @@
<?php
$wb["list_head_txt"] = 'Domínio de Correio';
$wb["server_id_txt"] = 'Servidor';
$wb["domain_txt"] = 'Domínio';
$wb["add_new_record_txt"] = 'Adcionar novo domínio';
$wb["active_txt"] = 'Ativo';
?>
interface/web/mail/lib/lang/br_mail_forward.lng
New file
@@ -0,0 +1,6 @@
<?php
$wb["email_txt"] = 'Correio';
$wb["destination_txt"] = 'Correio de Destino';
$wb["active_txt"] = 'Ativo';
$wb["limit_mailforward_txt"] = 'O número máximo de encaminhamentos para sua conta foi atingido.';
?>
interface/web/mail/lib/lang/br_mail_forward_list.lng
New file
@@ -0,0 +1,8 @@
<?php
$wb["list_head_txt"] = 'Encaminhamento de Correio';
$wb["active_txt"] = 'Ativo';
$wb["source_txt"] = 'origem';
$wb["destination_txt"] = 'Destino';
$wb["email_txt"] = 'Correio';
$wb["add_new_record_txt"] = 'Adcionar novo encaminhamento';
?>
interface/web/mail/lib/lang/br_mail_get.lng
New file
@@ -0,0 +1,15 @@
<?php
$wb["server_id_txt"] = 'Servidor';
$wb["type_txt"] = 'Tipo';
$wb["source_server_txt"] = 'Servidor Pop3/Imap';
$wb["source_username_txt"] = 'Usuário';
$wb["source_password_txt"] = 'Senha';
$wb["source_delete_txt"] = 'Remover mensagens da origem após o recebimento';
$wb["destination_txt"] = 'Destino';
$wb["active_txt"] = 'Ativo';
$wb["limit_fetchmail_txt"] = 'O número máximo de Fetchmail para sua conta foi atingido.';
$wb["source_server_error_isempty"] = 'Servidor em branco.';
$wb["source_username_error_isempty"] = 'Usuário em branco.';
$wb["source_password_error_isempty"] = 'Senha em branco.';
$wb["destination_error_isemail"] = 'Destino não selecionado.';
?>
interface/web/mail/lib/lang/br_mail_get_list.lng
New file
@@ -0,0 +1,9 @@
<?php
$wb["list_head_txt"] = 'Fetch de mensagens de um servidor POP3 / IMAP';
$wb["active_txt"] = 'Ativo';
$wb["server_id_txt"] = 'Servidor';
$wb["source_server_txt"] = 'Servidor Externo';
$wb["source_username_txt"] = 'Usuário';
$wb["destination_txt"] = 'Destino';
$wb["add_new_record_txt"] = 'Adcionar nova Conta';
?>
interface/web/mail/lib/lang/br_mail_spamfilter.lng
New file
@@ -0,0 +1,17 @@
<?php
$wb["email_txt"] = 'Email';
$wb["spam_rewrite_score_int_txt"] = 'Pontução de Rewrite';
$wb["spam_redirect_score_int_txt"] = 'Pontuação de Redirecionamento';
$wb["spam_delete_score_int_txt"] = 'Remover Pontuação';
$wb["spam_rewrite_subject_txt"] = 'Re-escrever assunto';
$wb["spam_redirect_maildir_txt"] = 'Redirecionar Caixa de Correio';
$wb["active_txt"] = 'Active';
$wb["spam_rewrite_txt"] = 'Re-escrever assunto da mensagem depois desta pontuação.';
$wb["spam_redirect_txt"] = 'Redirecione esta mensagem depois desta pontuação para esta caixa postal';
$wb["spam_delete_txt"] = 'Remover esta mensagem depois desta pontuação.';
$wb["disable_txt"] = 'Dica: Para desativar uma opção de filtro, configure a pontuação como 0.00.';
$wb["email_error_isemail"] = 'Endereço de correio inválido.';
$wb["email_error_unique"] = 'Já existem registros de spamfilter para esta caixa de correio.';
$wb["spam_redirect_maildir_purge_txt"] = 'Remover Maildir depois';
$wb["days_txt"] = 'Dias.';
?>
interface/web/mail/lib/lang/br_mail_spamfilter_list.lng
New file
@@ -0,0 +1,9 @@
<?php
$wb['list_head_txt'] = 'Filtro Anti-Spam';
$wb['active_txt'] = 'Ativo';
$wb['server_id_txt'] = 'Servidor';
$wb['server_name_txt'] = 'nome_servidor';
$wb['email_txt'] = 'Correio';
$wb['add_new_record_txt'] = 'Adcionar novo filtro anti-spam';
?>
interface/web/mail/lib/lang/br_mail_transport.lng
New file
@@ -0,0 +1,10 @@
<?php
$wb["server_id_txt"] = 'Servidor';
$wb["domain_txt"] = 'Domínio';
$wb["destination_txt"] = 'Destino';
$wb["type_txt"] = 'Tipo';
$wb["mx_txt"] = 'Sem MX lookup';
$wb["sort_order_txt"] = 'Ordenar por';
$wb["active_txt"] = 'Ativo';
$wb["limit_mailrouting_txt"] = 'O número máximo de rotas para sua conta foi atingido.';
?>
interface/web/mail/lib/lang/br_mail_transport_list.lng
New file
@@ -0,0 +1,9 @@
<?php
$wb["list_head_txt"] = 'Rota Avançada de Correio';
$wb["active_txt"] = 'Ativa';
$wb["server_id_txt"] = 'Servidor';
$wb["domain_txt"] = 'Domínio';
$wb["transport_txt"] = 'Transporte';
$wb["sort_order_txt"] = 'Ordenar por';
$wb["add_new_record_txt"] = 'Adcionar um novo transporte';
?>
interface/web/mail/lib/lang/br_mail_user.lng
New file
@@ -0,0 +1,31 @@
<?php
$wb["custom_mailfilter_txt"] = 'Formula de filtro de correio';
$wb["email_txt"] = 'Correio';
$wb["cryptpwd_txt"] = 'Senha';
$wb["password_strength_txt"] = 'Tamanho da Senha';
$wb["active_txt"] = 'Ativo';
$wb["email_error_isemail"] = 'Endereço de Correio Inválido.';
$wb["email_error_unique"] = 'Endereço de Correio Duplicado.';
$wb["autoresponder_text_txt"] = 'Texto';
$wb["autoresponder_txt"] = 'Autoresponder';
$wb["no_domain_perm"] = 'Sem permissão para este domínio.';
$wb["error_no_pwd"] = 'Senha em branco.';
$wb["quota_error_isint"] = 'O tamanho da caixa de correio deve ser um número.';
$wb["quota_txt"] = 'Quota';
$wb["server_id_txt"] = 'Aerver_id';
$wb["password_txt"] = 'Senha';
$wb["maildir_txt"] = 'Maildir';
$wb["postfix_txt"] = 'Habilitar Recebimento';
$wb["access_txt"] = 'Habilitar Acesso';
$wb["policy_txt"] = 'Spamfilter';
$wb["no_policy"] = '- desativado -';
$wb["limit_mailbox_txt"] = 'O número máximo de caixas de correio para sua conta foi atingido.';
$wb["limit_mailquota_txt"] = 'O espaço em disco disponível para criação de contas foi atingido.';
$wb["welcome_mail_fromname_txt"] = 'ISPConfig3';
$wb["welcome_mail_fromemail_txt"] = "webmaster@localhost.tld";
$wb["welcome_mail_subject"] = 'Parabéns sua conta de correio foi criada.';
$wb["welcome_mail_message"] = "Parabéns sua conta de correio foi criada. Att. Seu webmaster.";
$wb["disableimap_txt"] = 'Desativar IMAP';
$wb["disablepop3_txt"] = 'Disativar POP3';
?>
interface/web/mail/lib/lang/br_mail_user_filter.lng
New file
@@ -0,0 +1,9 @@
<?php
$wb["rulename_txt"] = 'Nome';
$wb["action_txt"] = 'Ação';
$wb["target_txt"] = 'Pasta';
$wb["active_txt"] = 'Ativo';
$wb["rulename_error_empty"] = 'Nome está em branco.';
$wb["searchterm_is_empty"] = 'Termo de busca em branco.';
$wb["source_txt"] = 'Origem';
?>
interface/web/mail/lib/lang/br_mail_user_filter_list.lng
New file
@@ -0,0 +1,6 @@
<?php
$wb["rulename_txt"] = 'Nome';
$wb["add_new_record_txt"] = 'Adcionar novo filtro';
$wb["page_txt"] = 'Página';
$wb["page_of_txt"] = 'de';
?>
interface/web/mail/lib/lang/br_mail_user_list.lng
New file
@@ -0,0 +1,6 @@
<?php
$wb["list_head_txt"] = 'Caixa de Correio';
$wb["email_txt"] = 'Correio';
$wb["autoresponder_txt"] = 'Autoresponder';
$wb["add_new_record_txt"] = 'Adcionar nova caixa de correio';
?>
interface/web/mail/lib/lang/br_mail_user_stats_list.lng
New file
@@ -0,0 +1,8 @@
<?php
$wb["list_head_txt"] = 'Tráfego de Correio';
$wb["email_txt"] = 'Correio';
$wb["this_month_txt"] = 'Este Mês';
$wb["last_month_txt"] = 'Último Mês';
$wb["this_year_txt"] = 'Este Ano';
$wb["last_year_txt"] = 'Último Ano';
?>
interface/web/mail/lib/lang/br_mail_whitelist.lng
New file
@@ -0,0 +1,9 @@
<?php
$wb["server_id_txt"] = 'Servidor';
$wb["source_txt"] = 'Endereço Lista Branca';
$wb["recipient_txt"] = 'Recipiente';
$wb["active_txt"] = 'Activo';
$wb["source_error_notempty"] = 'Endereço em Branco.';
$wb["type_txt"] = 'Tipo';
$wb["limit_mailfilter_txt"] = 'O número máximo de filtros para sua conta foi atingido.';
?>
interface/web/mail/lib/lang/br_mail_whitelist_list.lng
New file
@@ -0,0 +1,10 @@
<?php
$wb["list_head_txt"] = 'Correio Lista Branca';
$wb["active_txt"] = 'Ativo';
$wb["server_id_txt"] = 'Servidor';
$wb["source_txt"] = 'Endereços na Lista Branca';
$wb["type_txt"] = 'Tipo';
$wb["recipient_txt"] = 'Recipiente';
$wb["add_new_record_txt"] = 'Adcionar um novo registro a lista';
$wb["access_txt"] = 'acesso';
?>
interface/web/mail/lib/lang/br_spamfilter_blacklist.lng
New file
@@ -0,0 +1,8 @@
<?php
$wb["server_id_txt"] = 'Servidor';
$wb["wb_txt"] = 'wb';
$wb["rid_txt"] = 'Usuário';
$wb["email_txt"] = 'Email';
$wb["priority_txt"] = 'Prioridade';
$wb["active_txt"] = 'Ativo';
?>
interface/web/mail/lib/lang/br_spamfilter_blacklist_list.lng
New file
@@ -0,0 +1,9 @@
<?php
$wb["list_head_txt"] = 'Spamfilter Lista Negra';
$wb["active_txt"] = 'Ativo';
$wb["server_id_txt"] = 'Servidor';
$wb["priority_txt"] = 'Prioridade';
$wb["rid_txt"] = 'Usuário';
$wb["email_txt"] = 'Correio na Lista Negra';
$wb["add_new_record_txt"] = 'Adcionar novo registro a lista';
?>
interface/web/mail/lib/lang/br_spamfilter_config.lng
New file
@@ -0,0 +1,21 @@
<?php
$wb['getmail_config_dir_txt'] = 'Caminho de Configuração Getmail ';
$wb['ip_address_txt'] = 'Endereço IP';
$wb['netmask_txt'] = 'Mascara de Rede';
$wb['gateway_txt'] = 'Gateway';
$wb['hostname_txt'] = 'Hostname';
$wb['nameservers_txt'] = 'Servidor de Nomes';
$wb['module_txt'] = 'Server Module';
$wb['maildir_path_txt'] = 'Caminho do Maildir';
$wb['homedir_path_txt'] = 'Caminho do Homedir';
$wb['mailuser_uid_txt'] = 'Usuário de Correio UID';
$wb['mailuser_gid_txt'] = 'Usuário de Correio GID';
$wb['mailuser_name_txt'] = 'Nome do Usuário de Correio';
$wb['mailuser_group_txt'] = 'Grupo do Usuário de Correio';
$wb['relayhost_txt'] = 'Host Relay';
$wb['relayhost_user_txt'] = 'Usuário Host Relay';
$wb['relayhost_password_txt'] = 'Senha Host Relay';
$wb['mailbox_size_limit_txt'] = 'Tamanho Caixa de Correio';
$wb['message_size_limit_txt'] = 'Tamanho da Mensagem';
?>
interface/web/mail/lib/lang/br_spamfilter_config_list.lng
New file
@@ -0,0 +1,5 @@
<?php
$wb["list_head_txt"] = 'Configurações do Servidor';
$wb["server_name_txt"] = 'Servidor';
$wb["server_id_txt"] = 'id_servidor';
?>
interface/web/mail/lib/lang/br_spamfilter_policy.lng
New file
@@ -0,0 +1,38 @@
<?php
$wb["policy_name_txt"] = 'Nome da Regra';
$wb["virus_lover_txt"] = 'Virusl lover';
$wb["spam_lover_txt"] = 'SPAM lover';
$wb["banned_files_lover_txt"] = 'Banned files lover';
$wb["bad_header_lover_txt"] = 'Bad header lover';
$wb["bypass_virus_checks_txt"] = 'Bypass virus checks';
$wb["bypass_banned_checks_txt"] = 'Bypass banned checks';
$wb["bypass_header_checks_txt"] = 'Bypass header checks';
$wb["virus_quarantine_to_txt"] = 'Forward virus to email';
$wb["spam_quarantine_to_txt"] = 'Forward spam to email';
$wb["banned_quarantine_to_txt"] = 'Forward banned to email';
$wb["bad_header_quarantine_to_txt"] = 'Forward bad header to email';
$wb["clean_quarantine_to_txt"] = 'Forward clean to email';
$wb["other_quarantine_to_txt"] = 'Forward other to email';
$wb["spam_tag_level_txt"] = 'SPAM tag level';
$wb["spam_tag2_level_txt"] = 'SPAM tag2 level';
$wb["spam_kill_level_txt"] = 'SPAM kill level';
$wb["spam_dsn_cutoff_level_txt"] = 'SPAM dsn cutoff level';
$wb["spam_quarantine_cutoff_level_txt"] = 'SPAM quarantine cutoff level';
$wb["spam_modifies_subj_txt"] = 'SPAM modifies subject';
$wb["spam_subject_tag_txt"] = 'SPAM subject tag';
$wb["spam_subject_tag2_txt"] = 'SPAM subject tag2';
$wb["addr_extension_virus_txt"] = 'Addr. extension virus';
$wb["addr_extension_spam_txt"] = 'Addr. extension SPAM';
$wb["addr_extension_banned_txt"] = 'Addr. extension banned';
$wb["addr_extension_bad_header_txt"] = 'Addr extension bad header';
$wb["warnvirusrecip_txt"] = 'Warn virus recip.';
$wb["warnbannedrecip_txt"] = 'Warn banned recip.';
$wb["warnbadhrecip_txt"] = 'Warn bad header recip.';
$wb["newvirus_admin_txt"] = 'Newvirus admin';
$wb["virus_admin_txt"] = 'Virus admin';
$wb["banned_admin_txt"] = 'Banned admin';
$wb["bad_header_admin_txt"] = 'Bad header admin';
$wb["spam_admin_txt"] = 'SPAM admin';
$wb["message_size_limit_txt"] = 'Message size limit';
$wb["banned_rulenames_txt"] = 'Banned rulenames';
?>
interface/web/mail/lib/lang/br_spamfilter_policy_list.lng
New file
@@ -0,0 +1,9 @@
<?php
$wb["list_head_txt"] = 'Políticas de Spam';
$wb["policy_name_txt"] = 'Nome';
$wb["virus_lover_txt"] = 'Virus lover';
$wb["spam_lover_txt"] = 'Spam lover';
$wb["banned_files_lover_txt"] = 'Banned Files lover';
$wb["bad_header_lover_txt"] = 'Bad Header lover';
$wb["add_new_record_txt"] = 'Adcionar Registro';
?>
interface/web/mail/lib/lang/br_spamfilter_users.lng
New file
@@ -0,0 +1,8 @@
<?php
$wb["server_id_txt"] = 'Servidor';
$wb["priority_txt"] = 'Prioridade';
$wb["policy_id_txt"] = 'Política';
$wb["email_txt"] = 'Correio (Padrão)';
$wb["fullname_txt"] = 'Nome';
$wb["local_txt"] = 'Local';
?>
interface/web/mail/lib/lang/br_spamfilter_users_list.lng
New file
@@ -0,0 +1,10 @@
<?php
$wb["list_head_txt"] = 'Filtro Anti-Spam Usuários';
$wb["local_txt"] = 'Local';
$wb["server_id_txt"] = 'Servidor';
$wb["priority_txt"] = 'Prioridade';
$wb["policy_id_txt"] = 'Políticas';
$wb["fullname_txt"] = 'Nome';
$wb["email_txt"] = 'Email';
$wb["add_new_record_txt"] = 'Adcionar Usuário';
?>
interface/web/mail/lib/lang/br_spamfilter_whitelist.lng
New file
@@ -0,0 +1,8 @@
<?php
$wb["server_id_txt"] = 'Server';
$wb["wb_txt"] = 'wb';
$wb["rid_txt"] = 'User';
$wb["email_txt"] = 'Email';
$wb["priority_txt"] = 'Priority';
$wb["active_txt"] = 'Active';
?>
interface/web/mail/lib/lang/br_spamfilter_whitelist_list.lng
New file
@@ -0,0 +1,9 @@
<?php
$wb["list_head_txt"] = 'Spamfilter Lista Branca';
$wb["active_txt"] = 'Ativo';
$wb["server_id_txt"] = 'Servidor';
$wb["priority_txt"] = 'Prioridade';
$wb["rid_txt"] = 'Usuário';
$wb["email_txt"] = 'Correio na lista branca';
$wb["add_new_record_txt"] = 'Adcionar um novo correio';
?>
interface/web/mail/lib/lang/de_mail_alias.lng
@@ -7,4 +7,5 @@
$wb['no_domain_perm'] = 'Sie haben keine Berechtigung für diese Domain.';
$wb['destination_error_isemail'] = 'Ziel Emailadresse ist ungültig.';
$wb['limit_mailalias_txt'] = 'The max. number of email aliases for your account is reached.';
$wb['duplicate_mailbox_txt'] = 'There is already a mailbox with this email address';
?>
interface/web/mail/lib/lang/de_mail_forward.lng
@@ -3,4 +3,5 @@
$wb['destination_txt'] = 'Ziel Emailadresse';
$wb['active_txt'] = 'Aktiv';
$wb['limit_mailforward_txt'] = 'Die max. Anzahl an Emailweiterleitungen für ihren Account wurde erreicht.';
$wb['duplicate_mailbox_txt'] = 'There is already a mailbox with this email address';
?>
interface/web/mail/lib/lang/de_mail_user.lng
@@ -27,4 +27,5 @@
$wb['password_strength_txt'] = 'Passwortkomplexität';
$wb['welcome_mail_fromname_txt'] = 'ISPConfig3';
$wb['welcome_mail_fromemail_txt'] = 'webmaster@ihredomain.at';
$wb['duplicate_alias_or_forward_txt'] = 'There is already an alias or forwrd with this email address.';
?>
interface/web/mail/lib/lang/de_mail_user_filter_list.lng
@@ -3,4 +3,5 @@
$wb['add_new_record_txt'] = 'Neuen Filter hinzufügen';
$wb['page_txt'] = 'Seite';
$wb['page_of_txt'] = 'von';
$wb['delete_confirmation'] = 'Do you really want to Delete the mailfilter?';
?>
interface/web/mail/lib/lang/de_spamfilter_blacklist.lng
@@ -5,4 +5,5 @@
$wb['email_txt'] = 'Emailadresse';
$wb['priority_txt'] = 'Priorität';
$wb['active_txt'] = 'Aktiv';
$wb['limit_spamfilter_wblist_txt'] = 'The max. number of White- or Blacklist records for your account is reached.';
?>
interface/web/mail/lib/lang/de_spamfilter_whitelist.lng
@@ -5,4 +5,5 @@
$wb['email_txt'] = 'Email';
$wb['priority_txt'] = 'Priorität';
$wb['active_txt'] = 'Aktiv';
$wb['limit_spamfilter_wblist_txt'] = 'The max. number of White- or Blacklist records for your account is reached.';
?>
interface/web/mail/lib/lang/en_mail_alias.lng
@@ -7,4 +7,5 @@
$wb["no_domain_perm"] = "You have no permission for this domain.";
$wb["destination_error_isemail"] = 'Destination Emailaddress is invalid.';
$wb["limit_mailalias_txt"] = 'The max. number of email aliases for your account is reached.';
$wb["duplicate_mailbox_txt"] = 'There is already a mailbox with this email address';
?>
interface/web/mail/lib/lang/en_mail_forward.lng
@@ -3,4 +3,5 @@
$wb["destination_txt"] = 'Destination Email';
$wb["active_txt"] = 'Active';
$wb["limit_mailforward_txt"] = 'The max. number of email forwarders for your account is reached.';
$wb["duplicate_mailbox_txt"] = 'There is already a mailbox with this email address';
?>
interface/web/mail/lib/lang/en_mail_user.lng
@@ -27,4 +27,5 @@
$wb["welcome_mail_message"] = "Welcome to your new email account. Your webmaster.";
$wb["disableimap_txt"] = 'Disable IMAP';
$wb["disablepop3_txt"] = 'Disable POP3';
$wb["duplicate_alias_or_forward_txt"] = 'There is already an alias or forwrd with this email address.';
?>
interface/web/mail/lib/lang/en_mail_user_filter_list.lng
@@ -3,4 +3,5 @@
$wb["add_new_record_txt"] = 'Add new Filter';
$wb["page_txt"] = 'Page';
$wb["page_of_txt"] = 'of';
$wb["delete_confirmation"] = 'Do you really want to Delete the mailfilter?';
?>
interface/web/mail/lib/lang/es_mail_alias.lng
@@ -7,4 +7,5 @@
$wb['no_domain_perm'] = 'No tiene permiso para este dominio';
$wb['destination_error_isemail'] = 'La dirección de correo de destino no es válida';
$wb['limit_mailalias_txt'] = 'Ha alcanzado el número máximo de alias de correo para esta cuenta';
$wb['duplicate_mailbox_txt'] = 'There is already a mailbox with this email address';
?>
interface/web/mail/lib/lang/es_mail_forward.lng
@@ -3,4 +3,5 @@
$wb['destination_txt'] = 'Correo de destino';
$wb['active_txt'] = 'Activar';
$wb['limit_mailforward_txt'] = 'Se ha alcanzado el número máximo de reenvíos para esta cuenta';
$wb['duplicate_mailbox_txt'] = 'There is already a mailbox with this email address';
?>
interface/web/mail/lib/lang/es_mail_user.lng
@@ -29,4 +29,5 @@
$wb['disablepop3_txt'] = 'Disable POP3';
$wb['welcome_mail_fromname_txt'] = 'ISPConfig3';
$wb['welcome_mail_fromemail_txt'] = 'webmaster@localhost.tld';
$wb['duplicate_alias_or_forward_txt'] = 'There is already an alias or forwrd with this email address.';
?>
interface/web/mail/lib/lang/es_mail_user_filter_list.lng
@@ -3,4 +3,5 @@
$wb['add_new_record_txt'] = 'Añadir nuevo filtro';
$wb['page_txt'] = 'Page';
$wb['page_of_txt'] = 'of';
$wb['delete_confirmation'] = 'Do you really want to Delete the mailfilter?';
?>
interface/web/mail/lib/lang/es_spamfilter_blacklist.lng
@@ -5,4 +5,5 @@
$wb['email_txt'] = 'Correo';
$wb['priority_txt'] = 'Prioridad';
$wb['active_txt'] = 'Activar';
$wb['limit_spamfilter_wblist_txt'] = 'The max. number of White- or Blacklist records for your account is reached.';
?>
interface/web/mail/lib/lang/es_spamfilter_whitelist.lng
@@ -5,4 +5,5 @@
$wb['email_txt'] = 'Correo';
$wb['priority_txt'] = 'Prioridad';
$wb['active_txt'] = 'Activar';
$wb['limit_spamfilter_wblist_txt'] = 'The max. number of White- or Blacklist records for your account is reached.';
?>
interface/web/mail/lib/lang/fi_mail_alias.lng
@@ -7,4 +7,5 @@
$wb['no_domain_perm'] = 'Käyttäjätunnuksella ei ole oikeuksia tähän verkkotunnukseen.';
$wb['destination_error_isemail'] = 'Kohteena oleva sähköpostiosoite on vääränlainen.';
$wb['limit_mailalias_txt'] = 'Käyttäjätunnuksella on jo sallittu määrä aliasosoitteita.';
$wb['duplicate_mailbox_txt'] = 'There is already a mailbox with this email address';
?>
interface/web/mail/lib/lang/fi_mail_forward.lng
@@ -3,4 +3,5 @@
$wb['destination_txt'] = 'Vastaanottajan sähköposti';
$wb['active_txt'] = 'Käytössä';
$wb['limit_mailforward_txt'] = 'Käyttäjätunnuksella on jo sallittu määrä edelleenlähetysosoitteita.';
$wb['duplicate_mailbox_txt'] = 'There is already a mailbox with this email address';
?>
interface/web/mail/lib/lang/fi_mail_user.lng
@@ -27,4 +27,5 @@
$wb['disableimap_txt'] = 'Estä IMAP';
$wb['disablepop3_txt'] = 'Estä POP3';
$wb['password_strength_txt'] = 'Salasanan vahvuus';
$wb['duplicate_alias_or_forward_txt'] = 'There is already an alias or forwrd with this email address.';
?>
interface/web/mail/lib/lang/fi_mail_user_filter_list.lng
@@ -3,4 +3,5 @@
$wb['add_new_record_txt'] = 'Lisää uusi suodatussääntö';
$wb['page_txt'] = 'Page';
$wb['page_of_txt'] = 'of';
$wb['delete_confirmation'] = 'Do you really want to Delete the mailfilter?';
?>
interface/web/mail/lib/lang/fi_spamfilter_blacklist.lng
@@ -5,4 +5,5 @@
$wb['email_txt'] = 'Sähköpostiosoite';
$wb['priority_txt'] = 'Tärkeysjärjestys';
$wb['active_txt'] = 'Käytössä';
$wb['limit_spamfilter_wblist_txt'] = 'The max. number of White- or Blacklist records for your account is reached.';
?>
interface/web/mail/lib/lang/fi_spamfilter_whitelist.lng
@@ -5,4 +5,5 @@
$wb['email_txt'] = 'Sähköpostiosoite';
$wb['priority_txt'] = 'Tärkeysjärjestys';
$wb['active_txt'] = 'Käytössä';
$wb['limit_spamfilter_wblist_txt'] = 'The max. number of White- or Blacklist records for your account is reached.';
?>
interface/web/mail/lib/lang/fr_mail_alias.lng
@@ -7,4 +7,5 @@
$wb['no_domain_perm'] = 'You have no permission for this domain.';
$wb['destination_error_isemail'] = 'Destination Emailaddress is invalid.';
$wb['limit_mailalias_txt'] = 'The max. number of email aliases for your account is reached.';
$wb['duplicate_mailbox_txt'] = 'There is already a mailbox with this email address';
?>
interface/web/mail/lib/lang/fr_mail_forward.lng
@@ -3,4 +3,5 @@
$wb['destination_txt'] = 'Destination Email';
$wb['active_txt'] = 'Active';
$wb['limit_mailforward_txt'] = 'The max. number of email forwarders for your account is reached.';
$wb['duplicate_mailbox_txt'] = 'There is already a mailbox with this email address';
?>
interface/web/mail/lib/lang/fr_mail_user.lng
@@ -29,4 +29,5 @@
$wb['disablepop3_txt'] = 'Disable POP3';
$wb['welcome_mail_fromname_txt'] = 'ISPConfig3';
$wb['welcome_mail_fromemail_txt'] = 'webmaster@localhost.tld';
$wb['duplicate_alias_or_forward_txt'] = 'There is already an alias or forwrd with this email address.';
?>
interface/web/mail/lib/lang/fr_mail_user_filter_list.lng
@@ -3,4 +3,5 @@
$wb['add_new_record_txt'] = 'Add new Filter';
$wb['page_txt'] = 'Page';
$wb['page_of_txt'] = 'of';
$wb['delete_confirmation'] = 'Do you really want to Delete the mailfilter?';
?>
interface/web/mail/lib/lang/fr_spamfilter_blacklist.lng
@@ -5,4 +5,5 @@
$wb['email_txt'] = 'Email';
$wb['priority_txt'] = 'Priority';
$wb['active_txt'] = 'Active';
$wb['limit_spamfilter_wblist_txt'] = 'The max. number of White- or Blacklist records for your account is reached.';
?>
interface/web/mail/lib/lang/fr_spamfilter_whitelist.lng
@@ -5,4 +5,5 @@
$wb['email_txt'] = 'Email';
$wb['priority_txt'] = 'Priority';
$wb['active_txt'] = 'Active';
$wb['limit_spamfilter_wblist_txt'] = 'The max. number of White- or Blacklist records for your account is reached.';
?>
interface/web/mail/lib/lang/it_mail_alias.lng
@@ -7,4 +7,5 @@
$wb['no_domain_perm'] = 'You have no permission for this domain.';
$wb['destination_error_isemail'] = 'Destination Emailaddress is invalid.';
$wb['limit_mailalias_txt'] = 'The max. number of email aliases for your account is reached.';
$wb['duplicate_mailbox_txt'] = 'There is already a mailbox with this email address';
?>
interface/web/mail/lib/lang/it_mail_forward.lng
@@ -3,4 +3,5 @@
$wb['destination_txt'] = 'Destination Email';
$wb['active_txt'] = 'Active';
$wb['limit_mailforward_txt'] = 'The max. number of email forwarders for your account is reached.';
$wb['duplicate_mailbox_txt'] = 'There is already a mailbox with this email address';
?>
interface/web/mail/lib/lang/it_mail_user.lng
@@ -29,4 +29,5 @@
$wb['disablepop3_txt'] = 'Disable POP3';
$wb['welcome_mail_fromname_txt'] = 'ISPConfig3';
$wb['welcome_mail_fromemail_txt'] = 'webmaster@localhost.tld';
$wb['duplicate_alias_or_forward_txt'] = 'There is already an alias or forwrd with this email address.';
?>
interface/web/mail/lib/lang/it_mail_user_filter_list.lng
@@ -3,4 +3,5 @@
$wb['add_new_record_txt'] = 'Add new Filter';
$wb['page_txt'] = 'Page';
$wb['page_of_txt'] = 'of';
$wb['delete_confirmation'] = 'Do you really want to Delete the mailfilter?';
?>
interface/web/mail/lib/lang/it_spamfilter_blacklist.lng
@@ -5,4 +5,5 @@
$wb['email_txt'] = 'Email';
$wb['priority_txt'] = 'Priority';
$wb['active_txt'] = 'Active';
$wb['limit_spamfilter_wblist_txt'] = 'The max. number of White- or Blacklist records for your account is reached.';
?>
interface/web/mail/lib/lang/it_spamfilter_whitelist.lng
@@ -5,4 +5,5 @@
$wb['email_txt'] = 'Email';
$wb['priority_txt'] = 'Priority';
$wb['active_txt'] = 'Active';
$wb['limit_spamfilter_wblist_txt'] = 'The max. number of White- or Blacklist records for your account is reached.';
?>
interface/web/mail/lib/lang/nl_mail_alias.lng
@@ -7,4 +7,5 @@
$wb['no_domain_perm'] = 'U heeft geen toestemming voor dit domain.';
$wb['destination_error_isemail'] = 'Emailadres geadresseerde is ongeldig.';
$wb['limit_mailalias_txt'] = 'Het max. aantal emailaliassen voor uw account is bereikt.';
$wb['duplicate_mailbox_txt'] = 'There is already a mailbox with this email address';
?>
interface/web/mail/lib/lang/nl_mail_forward.lng
@@ -3,4 +3,5 @@
$wb['destination_txt'] = 'Emailadres geadresseerde';
$wb['active_txt'] = 'Actief';
$wb['limit_mailforward_txt'] = 'Het max. aantal email forwarders voor uw account is bereikt.';
$wb['duplicate_mailbox_txt'] = 'There is already a mailbox with this email address';
?>
interface/web/mail/lib/lang/nl_mail_user.lng
@@ -29,4 +29,5 @@
$wb['disablepop3_txt'] = 'Uitschakelen POP3';
$wb['welcome_mail_fromname_txt'] = 'ISPConfig3';
$wb['welcome_mail_fromemail_txt'] = 'webmaster@localhost.tld';
$wb['duplicate_alias_or_forward_txt'] = 'There is already an alias or forwrd with this email address.';
?>
interface/web/mail/lib/lang/nl_mail_user_filter_list.lng
@@ -3,4 +3,5 @@
$wb['add_new_record_txt'] = 'Toevoegen Filter';
$wb['page_txt'] = 'Page';
$wb['page_of_txt'] = 'of';
$wb['delete_confirmation'] = 'Do you really want to Delete the mailfilter?';
?>
interface/web/mail/lib/lang/nl_spamfilter_blacklist.lng
@@ -5,4 +5,5 @@
$wb['email_txt'] = 'Email';
$wb['priority_txt'] = 'Prioriteit';
$wb['active_txt'] = 'Actief';
$wb['limit_spamfilter_wblist_txt'] = 'The max. number of White- or Blacklist records for your account is reached.';
?>
interface/web/mail/lib/lang/nl_spamfilter_whitelist.lng
@@ -5,4 +5,5 @@
$wb['email_txt'] = 'Email';
$wb['priority_txt'] = 'Prioriteit';
$wb['active_txt'] = 'Actief';
$wb['limit_spamfilter_wblist_txt'] = 'The max. number of White- or Blacklist records for your account is reached.';
?>
interface/web/mail/lib/lang/ru_mail_alias.lng
@@ -7,4 +7,5 @@
$wb['no_domain_perm'] = 'Вы не имеете прав для этого домена.';
$wb['destination_error_isemail'] = 'Email получателя неправилен.';
$wb['limit_mailalias_txt'] = 'Максимальное число алиасов достигнуто.';
$wb['duplicate_mailbox_txt'] = 'There is already a mailbox with this email address';
?>
interface/web/mail/lib/lang/ru_mail_forward.lng
@@ -3,4 +3,5 @@
$wb['destination_txt'] = 'Получатель Email';
$wb['active_txt'] = 'Активный';
$wb['limit_mailforward_txt'] = 'Максимальное число forwarders достигнуто.';
$wb['duplicate_mailbox_txt'] = 'There is already a mailbox with this email address';
?>
interface/web/mail/lib/lang/ru_mail_user.lng
@@ -29,4 +29,5 @@
$wb['disablepop3_txt'] = 'Disable POP3';
$wb['welcome_mail_fromname_txt'] = 'ISPConfig3';
$wb['welcome_mail_fromemail_txt'] = 'webmaster@localhost.tld';
$wb['duplicate_alias_or_forward_txt'] = 'There is already an alias or forwrd with this email address.';
?>
interface/web/mail/lib/lang/ru_mail_user_filter_list.lng
@@ -3,4 +3,5 @@
$wb['add_new_record_txt'] = 'Добавить новый Фильтр';
$wb['page_txt'] = 'Page';
$wb['page_of_txt'] = 'of';
$wb['delete_confirmation'] = 'Do you really want to Delete the mailfilter?';
?>
interface/web/mail/lib/lang/ru_spamfilter_blacklist.lng
@@ -5,4 +5,5 @@
$wb['email_txt'] = 'Email';
$wb['priority_txt'] = 'Приоритет';
$wb['active_txt'] = 'Активный';
$wb['limit_spamfilter_wblist_txt'] = 'The max. number of White- or Blacklist records for your account is reached.';
?>
interface/web/mail/lib/lang/ru_spamfilter_whitelist.lng
@@ -5,4 +5,5 @@
$wb['email_txt'] = 'Email';
$wb['priority_txt'] = 'Приоритет';
$wb['active_txt'] = 'Активный';
$wb['limit_spamfilter_wblist_txt'] = 'The max. number of White- or Blacklist records for your account is reached.';
?>
interface/web/mail/lib/lang/se_mail_alias.lng
@@ -7,4 +7,5 @@
$wb['no_domain_perm'] = 'Du har ingen behörighet för denna domänen.';
$wb['destination_error_isemail'] = 'Destination Emailaddress is invalid.';
$wb['limit_mailalias_txt'] = 'The max. number of email aliases for your account is reached.';
$wb['duplicate_mailbox_txt'] = 'There is already a mailbox with this email address';
?>
interface/web/mail/lib/lang/se_mail_forward.lng
@@ -3,4 +3,5 @@
$wb['destination_txt'] = 'Mottagande Epost';
$wb['active_txt'] = 'Aktiv';
$wb['limit_mailforward_txt'] = 'The max. number of email forwarders for your account is reached.';
$wb['duplicate_mailbox_txt'] = 'There is already a mailbox with this email address';
?>
interface/web/mail/lib/lang/se_mail_user.lng
@@ -29,4 +29,5 @@
$wb['disablepop3_txt'] = 'Disable POP3';
$wb['welcome_mail_fromname_txt'] = 'ISPConfig3';
$wb['welcome_mail_fromemail_txt'] = 'webmaster@localhost.tld';
$wb['duplicate_alias_or_forward_txt'] = 'There is already an alias or forwrd with this email address.';
?>
interface/web/mail/lib/lang/se_mail_user_filter_list.lng
@@ -3,4 +3,5 @@
$wb['add_new_record_txt'] = 'Add new Filter';
$wb['page_txt'] = 'Page';
$wb['page_of_txt'] = 'of';
$wb['delete_confirmation'] = 'Do you really want to Delete the mailfilter?';
?>
interface/web/mail/lib/lang/se_spamfilter_blacklist.lng
@@ -5,4 +5,5 @@
$wb['email_txt'] = 'Email';
$wb['priority_txt'] = 'Priority';
$wb['active_txt'] = 'Active';
$wb['limit_spamfilter_wblist_txt'] = 'The max. number of White- or Blacklist records for your account is reached.';
?>
interface/web/mail/lib/lang/se_spamfilter_whitelist.lng
@@ -5,4 +5,5 @@
$wb['email_txt'] = 'Email';
$wb['priority_txt'] = 'Priority';
$wb['active_txt'] = 'Active';
$wb['limit_spamfilter_wblist_txt'] = 'The max. number of White- or Blacklist records for your account is reached.';
?>
interface/web/mail/mail_alias_edit.php
@@ -1,6 +1,6 @@
<?php
/*
Copyright (c) 2005, Till Brehm, projektfarm Gmbh
Copyright (c) 2005 - 2009, Till Brehm, projektfarm Gmbh
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
@@ -55,17 +55,11 @@
        
        // we will check only users, not admins
        if($_SESSION["s"]["user"]["typ"] == 'user') {
            // Get the limits of the client
            $client_group_id = $_SESSION["s"]["user"]["default_group"];
            $client = $app->db->queryOneRecord("SELECT limit_mailalias FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
            // Check if the user may add another mailbox.
            if($client["limit_mailalias"] >= 0) {
                $tmp = $app->db->queryOneRecord("SELECT count(forwarding_id) as number FROM mail_forwarding WHERE sys_groupid = $client_group_id and type = 'alias'");
                if($tmp["number"] >= $client["limit_mailalias"]) {
                    $app->error($app->tform->wordbook["limit_mailalias_txt"]);
                }
            if(!$app->tform->checkClientLimit('limit_mailalias',"type = 'alias'")) {
                $app->error($app->tform->wordbook["limit_mailalias_txt"]);
            }
            if(!$app->tform->checkResellerLimit('limit_mailalias',"type = 'alias'")) {
                $app->error('Reseller: '.$app->tform->wordbook["limit_mailalias_txt"]);
            }
        }
        
@@ -80,7 +74,7 @@
        $app->tpl->setVar("email_local_part",$email_parts[0]);
        
        // Getting Domains of the user
        $sql = "SELECT domain FROM mail_domain WHERE ".$app->tform->getAuthSQL('r');
        $sql = "SELECT domain FROM mail_domain WHERE ".$app->tform->getAuthSQL('r').' ORDER BY domain';
        $domains = $app->db->queryAllRecords($sql);
        $domain_select = '';
        if(is_array($domains)) {
@@ -126,6 +120,11 @@
        unset($this->dataRecord["email_local_part"]);
        unset($this->dataRecord["email_domain"]);
        
        //* Check if there is no mailbox with this address
        $tmp = $app->db->queryOneRecord("SELECT count(mailuser_id) as number FROM mail_user WHERE email = '".$app->db->quote($this->dataRecord["source"])."'");
        if($tmp['number'] > 0) $app->tform->errorMessage .= $app->tform->lng("duplicate_mailbox_txt")."<br>";
        unset($tmp);
        parent::onSubmit();
    }
    
interface/web/mail/mail_blacklist_edit.php
@@ -55,17 +55,11 @@
        
        // we will check only users, not admins
        if($_SESSION["s"]["user"]["typ"] == 'user') {
            // Get the limits of the client
            $client_group_id = $_SESSION["s"]["user"]["default_group"];
            $client = $app->db->queryOneRecord("SELECT limit_mailfilter FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
            // Check if the user may add another mailbox.
            if($client["limit_mailfilter"] >= 0) {
                $tmp = $app->db->queryOneRecord("SELECT count(access_id) as number FROM mail_access WHERE sys_groupid = $client_group_id");
                if($tmp["number"] >= $client["limit_mailfilter"]) {
                    $app->error($app->tform->wordbook["limit_mailfilter_txt"]);
                }
            if(!$app->tform->checkClientLimit('limit_mailfilter')) {
                $app->error($app->tform->wordbook["limit_mailfilter_txt"]);
            }
            if(!$app->tform->checkResellerLimit('limit_mailfilter')) {
                $app->error('Reseller: '.$app->tform->wordbook["limit_mailfilter_txt"]);
            }
        }
        
interface/web/mail/mail_domain_catchall_edit.php
@@ -55,17 +55,11 @@
        
        // we will check only users, not admins
        if($_SESSION["s"]["user"]["typ"] == 'user') {
            // Get the limits of the client
            $client_group_id = $_SESSION["s"]["user"]["default_group"];
            $client = $app->db->queryOneRecord("SELECT limit_mailcatchall FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
            // Check if the user may add another mailbox.
            if($client["limit_mailcatchall"] >= 0) {
                $tmp = $app->db->queryOneRecord("SELECT count(forwarding_id) as number FROM mail_forwarding WHERE sys_groupid = $client_group_id and type = 'catchall'");
                if($tmp["number"] >= $client["limit_mailcatchall"]) {
                    $app->error($app->tform->wordbook["limit_mailcatchall_txt"]);
                }
            if(!$app->tform->checkClientLimit('limit_mailcatchall',"type = 'catchall'")) {
                $app->error($app->tform->wordbook["limit_mailcatchall_txt"]);
            }
            if(!$app->tform->checkResellerLimit('limit_mailcatchall',"type = 'catchall'")) {
                $app->error('Reseller: '.$app->tform->wordbook["limit_mailcatchall_txt"]);
            }
        }
        
interface/web/mail/mail_domain_edit.php
@@ -55,17 +55,11 @@
        
        // we will check only users, not admins
        if($_SESSION["s"]["user"]["typ"] == 'user') {
            // Get the limits of the client
            $client_group_id = $_SESSION["s"]["user"]["default_group"];
            $client = $app->db->queryOneRecord("SELECT limit_maildomain FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
            // Check if the user may add another maildomain.
            if($client["limit_maildomain"] >= 0) {
                $tmp = $app->db->queryOneRecord("SELECT count(domain_id) as number FROM mail_domain WHERE sys_groupid = $client_group_id");
                if($tmp["number"] >= $client["limit_maildomain"]) {
                    $app->error($app->tform->wordbook["limit_maildomain_txt"]);
                }
            if(!$app->tform->checkClientLimit('limit_maildomain')) {
                $app->error($app->tform->wordbook["limit_maildomain_txt"]);
            }
            if(!$app->tform->checkResellerLimit('limit_maildomain')) {
                $app->error('Reseller: '.$app->tform->wordbook["limit_maildomain_txt"]);
            }
        }
        
@@ -98,7 +92,7 @@
            // Get the limits of the client
            $client_group_id = $_SESSION["s"]["user"]["default_group"];
            $client = $app->db->queryOneRecord("SELECT client.client_id, limit_web_domain, default_webserver 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.client_id, contact_name FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
            
            // Set the webserver to the default server of the client
            $tmp = $app->db->queryOneRecord("SELECT server_name FROM server WHERE server_id = $client[default_webserver]");
@@ -108,7 +102,7 @@
            // Fill the client select field
            $sql = "SELECT groupid, name FROM sys_group, client WHERE sys_group.client_id = client.client_id AND client.parent_client_id = ".$client['client_id'];
            $clients = $app->db->queryAllRecords($sql);
            $client_select = '';
            $client_select = '<option value="'.$client['client_id'].'">'.$client['contact_name'].'</option>';
            if(is_array($clients)) {
                foreach( $clients as $client) {
                    $selected = @($client["groupid"] == $this->dataRecord["sys_groupid"])?'SELECTED':'';
@@ -180,6 +174,11 @@
            // Clients may not set the client_group_id, so we unset them if user is not a admin
            if(!$app->auth->has_clients($_SESSION['s']['user']['userid'])) unset($this->dataRecord["client_group_id"]);
        }
        //* make sure that the email domain is lowercase
        if(isset($this->dataRecord["domain"])) $this->dataRecord["domain"] = strtolower($this->dataRecord["domain"]);
        parent::onSubmit();
    }
    
@@ -221,11 +220,21 @@
        //* Check if the server has been changed
        // We do this only for the admin or reseller users, as normal clients can not change the server ID anyway
        if($_SESSION["s"]["user"]["typ"] == 'admin' || $app->auth->has_clients($_SESSION['s']['user']['userid'])) {
            $rec = $app->db->queryOneRecord("SELECT server_id from mail_domain WHERE domain_id = ".$this->id);
            $rec = $app->db->queryOneRecord("SELECT server_id, domain from mail_domain WHERE domain_id = ".$this->id);
            if($rec['server_id'] != $this->dataRecord["server_id"]) {
                //* Add a error message and switch back to old server
                $app->tform->errorMessage .= $app->lng('The Server can not be changed.');
                $this->dataRecord["server_id"] = $rec['server_id'];
            }
            unset($rec);
        //* If the user is neither admin nor reseller
        } else {
            //* We do not allow users to change a domain which has been created by the admin
            $rec = $app->db->queryOneRecord("SELECT domain from mail_domain WHERE domain_id = ".$this->id);
            if($rec['domain'] != $this->dataRecord["domain"] && $app->tform->checkPerm($this->id,'u')) {
                //* Add a error message and switch back to old server
                $app->tform->errorMessage .= $app->lng('The Domain can not be changed. Please ask your Administrator if you want to change the domain name.');
                $this->dataRecord["domain"] = $rec['domain'];
            }
            unset($rec);
        }
@@ -298,6 +307,11 @@
                }
            }
            
            //* Delete the old spamfilter record
            $tmp = $app->db->queryOneRecord("SELECT id FROM spamfilter_users WHERE email = '@".mysql_real_escape_string($this->oldDataRecord["domain"])."'");
            $app->db->datalogDelete('spamfilter_users', 'id', $tmp["id"]);
            unset($tmp);
        } // end if domain name changed
        
    }
interface/web/mail/mail_forward_edit.php
@@ -1,6 +1,6 @@
<?php
/*
Copyright (c) 2005, Till Brehm, projektfarm Gmbh
Copyright (c) 2005 - 2009, Till Brehm, projektfarm Gmbh
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
@@ -55,17 +55,11 @@
        
        // we will check only users, not admins
        if($_SESSION["s"]["user"]["typ"] == 'user') {
            // Get the limits of the client
            $client_group_id = $_SESSION["s"]["user"]["default_group"];
            $client = $app->db->queryOneRecord("SELECT limit_mailforward FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
            // Check if the user may add another mailbox.
            if($client["limit_mailforward"] >= 0) {
                $tmp = $app->db->queryOneRecord("SELECT count(forwarding_id) as number FROM mail_forwarding WHERE sys_groupid = $client_group_id and type = 'forward'");
                if($tmp["number"] >= $client["limit_mailforward"]) {
                    $app->error($app->tform->wordbook["limit_mailforward_txt"]);
                }
            if(!$app->tform->checkClientLimit('limit_mailforward',"type = 'forward'")) {
                $app->error($app->tform->wordbook["limit_mailforward_txt"]);
            }
            if(!$app->tform->checkResellerLimit('limit_mailforward',"type = 'forward'")) {
                $app->error('Reseller: '.$app->tform->wordbook["limit_mailforward_txt"]);
            }
        }
        
@@ -80,7 +74,7 @@
        $app->tpl->setVar("email_local_part",$email_parts[0]);
        
        // Getting Domains of the user
        $sql = "SELECT domain FROM mail_domain WHERE ".$app->tform->getAuthSQL('r');
        $sql = "SELECT domain FROM mail_domain WHERE ".$app->tform->getAuthSQL('r').' ORDER BY domain';
        $domains = $app->db->queryAllRecords($sql);
        $domain_select = '';
        foreach( $domains as $domain) {
@@ -123,6 +117,11 @@
        unset($this->dataRecord["email_local_part"]);
        unset($this->dataRecord["email_domain"]);
        
        //* Check if there is no mailbox with this address
        $tmp = $app->db->queryOneRecord("SELECT count(mailuser_id) as number FROM mail_user WHERE email = '".$app->db->quote($this->dataRecord["source"])."'");
        if($tmp['number'] > 0) $app->tform->errorMessage .= $app->tform->lng("duplicate_mailbox_txt")."<br>";
        unset($tmp);
        parent::onSubmit();
    }
    
interface/web/mail/mail_get_edit.php
@@ -55,17 +55,11 @@
        
        // we will check only users, not admins
        if($_SESSION["s"]["user"]["typ"] == 'user') {
            // Get the limits of the client
            $client_group_id = $_SESSION["s"]["user"]["default_group"];
            $client = $app->db->queryOneRecord("SELECT limit_fetchmail FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
            // Check if the user may add another transport.
            if($client["limit_fetchmail"] >= 0) {
                $tmp = $app->db->queryOneRecord("SELECT count(mailget_id) as number FROM mail_get WHERE sys_groupid = $client_group_id");
                if($tmp["number"] >= $client["limit_fetchmail"]) {
                    $app->error($app->tform->wordbook["limit_fetchmail_txt"]);
                }
            if(!$app->tform->checkClientLimit('limit_fetchmail')) {
                $app->error($app->tform->wordbook["limit_fetchmail_txt"]);
            }
            if(!$app->tform->checkResellerLimit('limit_fetchmail')) {
                $app->error('Reseller: '.$app->tform->wordbook["limit_fetchmail_txt"]);
            }
        }
        
interface/web/mail/mail_transport_edit.php
@@ -56,17 +56,11 @@
        
        // we will check only users, not admins
        if($_SESSION["s"]["user"]["typ"] == 'user') {
            // Get the limits of the client
            $client_group_id = $_SESSION["s"]["user"]["default_group"];
            $client = $app->db->queryOneRecord("SELECT limit_mailrouting FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
            // Check if the user may add another transport.
            if($client["limit_mailrouting"] >= 0) {
                $tmp = $app->db->queryOneRecord("SELECT count(transport_id) as number FROM mail_transport WHERE sys_groupid = $client_group_id");
                if($tmp["number"] >= $client["limit_mailrouting"]) {
                    $app->error($app->tform->wordbook["limit_mailrouting_txt"]);
                }
            if(!$app->tform->checkClientLimit('limit_mailrouting')) {
                $app->error($app->tform->wordbook["limit_mailrouting_txt"]);
            }
            if(!$app->tform->checkResellerLimit('limit_mailrouting')) {
                $app->error('Reseller: '.$app->tform->wordbook["limit_mailrouting_txt"]);
            }
        }
        
interface/web/mail/mail_user_edit.php
@@ -1,6 +1,6 @@
<?php
/*
Copyright (c) 2005, Till Brehm, projektfarm Gmbh
Copyright (c) 2005 - 2009, Till Brehm, projektfarm Gmbh
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
@@ -56,17 +56,11 @@
        
        // we will check only users, not admins
        if($_SESSION["s"]["user"]["typ"] == 'user') {
            // Get the limits of the client
            $client_group_id = $_SESSION["s"]["user"]["default_group"];
            $client = $app->db->queryOneRecord("SELECT limit_mailbox FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
            // Check if the user may add another mailbox.
            if($client["limit_mailbox"] >= 0) {
                $tmp = $app->db->queryOneRecord("SELECT count(mailuser_id) as number FROM mail_user WHERE sys_groupid = $client_group_id");
                if($tmp["number"] >= $client["limit_mailbox"]) {
                    $app->error($app->tform->wordbook["limit_mailbox_txt"]);
                }
            if(!$app->tform->checkClientLimit('limit_mailbox')) {
                $app->error($app->tform->wordbook["limit_mailbox_txt"]);
            }
            if(!$app->tform->checkResellerLimit('limit_mailbox')) {
                $app->error('Reseller: '.$app->tform->wordbook["limit_mailbox_txt"]);
            }
        }
        
@@ -81,7 +75,7 @@
        $app->tpl->setVar("email_local_part",$email_parts[0]);
        
        // Getting Domains of the user
        $sql = "SELECT domain FROM mail_domain WHERE ".$app->tform->getAuthSQL('r');
        $sql = "SELECT domain FROM mail_domain WHERE ".$app->tform->getAuthSQL('r').' ORDER BY domain';
        $domains = $app->db->queryAllRecords($sql);
        $domain_select = '';
        if(is_array($domains)) {
@@ -98,7 +92,7 @@
        $tmp_user = $app->db->queryOneRecord("SELECT policy_id FROM spamfilter_users WHERE email = '".$this->dataRecord["email"]."'");
        $sql = "SELECT id, policy_name FROM spamfilter_policy WHERE ".$app->tform->getAuthSQL('r');
        $policys = $app->db->queryAllRecords($sql);
        $policy_select = "<option value='0'>".$app->tform->wordbook["no_policy"]."</option>";
        $policy_select = "<option value='0'>".$app->tform->lng("no_policy")."</option>";
        if(is_array($policys)) {
            foreach( $policys as $p) {
                $selected = ($p["id"] == $tmp_user["policy_id"])?'SELECTED':'';
@@ -119,19 +113,19 @@
    function onSubmit() {
        global $app, $conf;
        
        // Check if Domain belongs to user
        //* Check if Domain belongs to user
        if(isset($_POST["email_domain"])) {
            $domain = $app->db->queryOneRecord("SELECT server_id, domain FROM mail_domain WHERE domain = '".$app->db->quote($_POST["email_domain"])."' AND ".$app->tform->getAuthSQL('r'));
            if($domain["domain"] != $_POST["email_domain"]) $app->tform->errorMessage .= $app->tform->wordbook["no_domain_perm"];
            if($domain["domain"] != $_POST["email_domain"]) $app->tform->errorMessage .= $app->tform->lng("no_domain_perm");
        }
        
        
        // if its an insert, check that the password is not empty
        //* if its an insert, check that the password is not empty
        if($this->id == 0 && $_POST["password"] == '') {
            $app->tform->errorMessage .= $app->tform->wordbook["error_no_pwd"]."<br>";
            $app->tform->errorMessage .= $app->tform->lng("error_no_pwd")."<br>";
        }
        
        // Check the client limits, if user is not the admin
        //* Check the client limits, if user is not the admin
        if($_SESSION["s"]["user"]["typ"] != 'admin') { // if user is not admin
            // Get the limits of the client
            $client_group_id = $_SESSION["s"]["user"]["default_group"];
@@ -142,7 +136,7 @@
            if($this->id == 0 && $client["limit_mailbox"] >= 0) {
                $tmp = $app->db->queryOneRecord("SELECT count(mailuser_id) as number FROM mail_user WHERE sys_groupid = $client_group_id");
                if($tmp["number"] >= $client["limit_mailbox"]) {
                    $app->tform->errorMessage .= $app->tform->wordbook["limit_mailbox_txt"]."<br>";
                    $app->tform->errorMessage .= $app->tform->lng("limit_mailbox_txt")."<br>";
                }
                unset($tmp);
            }
@@ -154,7 +148,7 @@
                $new_mailbox_quota = intval($this->dataRecord["quota"]);
                if($mailquota + $new_mailbox_quota > $client["limit_mailquota"]) {
                    $max_free_quota = $client["limit_mailquota"] - $mailquota;
                    $app->tform->errorMessage .= $app->tform->wordbook["limit_mailquota_txt"].": ".$max_free_quota."<br>";
                    $app->tform->errorMessage .= $app->tform->lng("limit_mailquota_txt").": ".$max_free_quota."<br>";
                    // Set the quota field to the max free space
                    $this->dataRecord["quota"] = $max_free_quota;
                }
@@ -164,9 +158,9 @@
        } // end if user is not admin
        
        // compose the email field
        //* compose the email field
        if(isset($_POST["email_local_part"]) && isset($_POST["email_domain"])) {
            $this->dataRecord["email"] = $_POST["email_local_part"]."@".$_POST["email_domain"];
            $this->dataRecord["email"] = strtolower($_POST["email_local_part"]."@".$_POST["email_domain"]);
        
            // Set the server id of the mailbox = server ID of mail domain.
            $this->dataRecord["server_id"] = $domain["server_id"];
@@ -186,8 +180,13 @@
            $this->dataRecord["homedir"] = $mail_config["homedir_path"];
            $this->dataRecord["uid"] = $mail_config["mailuser_uid"];
            $this->dataRecord["gid"] = $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 source = '".$app->db->quote($this->dataRecord["email"])."'");
            if($tmp['number'] > 0) $app->tform->errorMessage .= $app->tform->lng("duplicate_alias_or_forward_txt")."<br>";
            unset($tmp);
        }
        
        parent::onSubmit();
    }
@@ -203,23 +202,23 @@
//        mail($this->dataRecord["email"],$app->tform->wordbook["welcome_mail_subject"],$app->tform->wordbook["welcome_mail_message"]);
        
        // tries to detect current charset, and encode subject-header and body from it to ISO-8859-1.
        $fromCharset      = mb_detect_encoding($app->tform->wordbook["welcome_mail_subject"]);
        $fromCharset      = mb_detect_encoding($app->tform->lng("welcome_mail_subject"));
        $iconvPreferences = array("input-charset" => $fromCharset,
                    "output-charset" => "ISO-8859-1",
                    "line-length" => 76,
                    "line-break-chars" => "\n",
                    "scheme" => "Q");
        $welcomeFromName  = $app->tform->wordbook["welcome_mail_fromname_txt"];
        $welcomeFromEmail = $app->tform->wordbook["welcome_mail_fromemail_txt"];
        $welcomeFromName  = $app->tform->lng("welcome_mail_fromname_txt");
        $welcomeFromEmail = $app->tform->lng("welcome_mail_fromemail_txt");
        $mailHeaders      = "MIME-Version: 1.0" . "\n";
        $mailHeaders     .= "Content-type: text/plain; charset=iso-8859-1" . "\n";
        $mailHeaders     .= "From: $welcomeFromName  <$welcomeFromEmail>" . "\n";
        $mailHeaders     .= "Reply-To: <$welcomeFromEmail>" . "\n";
        $mailTarget       = $this->dataRecord["email"];
        $mailSubject      = iconv_mime_encode("trimoff", $app->tform->wordbook["welcome_mail_subject"], $iconvPreferences);
        $mailSubject      = iconv_mime_encode("trimoff", $app->tform->lng("welcome_mail_subject"), $iconvPreferences);
        $mailSubject      = str_replace("trimoff: ", "", $mailSubject);
        $mailBody         = iconv ($fromCharset, "ISO-8859-1", $app->tform->wordbook["welcome_mail_message"]);
        $mailBody         = iconv ($fromCharset, "ISO-8859-1", $app->tform->lng("welcome_mail_message"));
        mail($mailTarget, $mailSubject, $mailBody, $mailHeaders);
        
interface/web/mail/mail_user_filter_edit.php
@@ -113,24 +113,35 @@
        
        $content = '';
        $content .= '### BEGIN FILTER_ID:'.$this->id."\n";
        $TargetNoQuotes = $this->dataRecord["target"];
        $TargetQuotes = "\"$TargetNoQuotes\"";
        $TestChDirNoQuotes = '$DEFAULT/.'.$TargetNoQuotes;
        $TestChDirQuotes = "\"$TestChDirNoQuotes\"";
        $MailDirMakeNoQuotes = $TargetQuotes.' $DEFAULT';
        $EchoTargetFinal = $TargetNoQuotes;
        if($this->dataRecord["action"] == 'move') {
            $content .= "
`test -e ".'$DEFAULT/.'.$this->dataRecord["target"]."`
if ( ".'$RETURNCODE'." != 0 )
`test -e ".$TestChDirQuotes." && exit 1 || exit 0`
if ( ".'$RETURNCODE'." != 1 )
{
  `maildirmake -f ".$this->dataRecord["target"].' $DEFAULT'."`
  `chmod -R 0700 ".'$DEFAULT/'.$this->dataRecord["target"]."`
  `echo INBOX.".$this->dataRecord["target"]." >> ".'$DEFAULT'."/courierimapsubscribed`
    `maildirmake -f $MailDirMakeNoQuotes`
    `chmod -R 0700 ".$TestChDirQuotes."`
    `echo \"INBOX.$EchoTargetFinal\" >> ".'$DEFAULT'."/courierimapsubscribed`
}
";
";
        }
        $content .= "if (/^".$this->dataRecord["source"].":";
        $searchterm = preg_quote($this->dataRecord["searchterm"]);
        if($this->dataRecord["op"] == 'contains') {
            $content .= ".*".$searchterm."/:h)\n";
        } elseif ($this->dataRecord["op"] == 'is') {
@@ -140,18 +151,21 @@
        } elseif ($this->dataRecord["op"] == 'ends') {
            $content .= ".*".$searchterm."$/:h)\n";
        }
        $content .= "{\n";
        $content .= "exception {\n";
        if($this->dataRecord["action"] == 'move') {
            $content .= 'to $DEFAULT/.'.$this->dataRecord["target"]."/\n";
            $content .= 'ID' . "$this->id" . 'EndFolder = "$DEFAULT/.' . $this->dataRecord['target'] . '/"' . "\n";
            $content .= "to ". '$ID' . "$this->id" . 'EndFolder' . "\n";
        } else {
            $content .= "to /dev/null\n";
        }
        $content .= "}\n";
        $content .= "}\n";
        
        $content .= "}\n";
        $content .= "}\n";
        //}
        
        $content .= '### END FILTER_ID:'.$this->id."\n";
        
interface/web/mail/mail_whitelist_edit.php
@@ -55,17 +55,11 @@
        
        // we will check only users, not admins
        if($_SESSION["s"]["user"]["typ"] == 'user') {
            // Get the limits of the client
            $client_group_id = $_SESSION["s"]["user"]["default_group"];
            $client = $app->db->queryOneRecord("SELECT limit_mailfilter FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
            // Check if the user may add another mailbox.
            if($client["limit_mailfilter"] >= 0) {
                $tmp = $app->db->queryOneRecord("SELECT count(access_id) as number FROM mail_access WHERE sys_groupid = $client_group_id");
                if($tmp["number"] >= $client["limit_mailfilter"]) {
                    $app->error($app->tform->wordbook["limit_mailfilter_txt"]);
                }
            if(!$app->tform->checkClientLimit('limit_mailfilter')) {
                $app->error($app->tform->wordbook["limit_mailfilter_txt"]);
            }
            if(!$app->tform->checkResellerLimit('limit_mailfilter')) {
                $app->error('Reseller: '.$app->tform->wordbook["limit_mailfilter_txt"]);
            }
        }
        
interface/web/mail/spamfilter_blacklist_edit.php
@@ -54,17 +54,11 @@
        
        // we will check only users, not admins
        if($_SESSION["s"]["user"]["typ"] == 'user') {
            // Get the limits of the client
            $client_group_id = $_SESSION["s"]["user"]["default_group"];
            $client = $app->db->queryOneRecord("SELECT limit_spamfilter_wblist FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
            // Check if the user may add another mailbox.
            if($client["limit_spamfilter_wblist"] >= 0) {
                $tmp = $app->db->queryOneRecord("SELECT count(wblist_id) as number FROM spamfilter_wblist WHERE sys_groupid = $client_group_id");
                if($tmp["number"] >= $client["limit_spamfilter_wblist"]) {
                    $app->error($app->tform->lng("limit_spamfilter_wblist_txt"));
                }
            if(!$app->tform->checkClientLimit('limit_spamfilter_wblist')) {
                $app->error($app->tform->wordbook["limit_spamfilter_wblist_txt"]);
            }
            if(!$app->tform->checkResellerLimit('limit_spamfilter_wblist')) {
                $app->error('Reseller: '.$app->tform->wordbook["limit_spamfilter_wblist_txt"]);
            }
        }
        
interface/web/mail/spamfilter_policy_edit.php
@@ -54,17 +54,11 @@
        
        // we will check only users, not admins
        if($_SESSION["s"]["user"]["typ"] == 'user') {
            // Get the limits of the client
            $client_group_id = $_SESSION["s"]["user"]["default_group"];
            $client = $app->db->queryOneRecord("SELECT limit_spamfilter_policy FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
            // Check if the user may add another mailbox.
            if($client["limit_limit_spamfilter_policy"] >= 0) {
                $tmp = $app->db->queryOneRecord("SELECT count(id) as number FROM spamfilter_policy WHERE sys_groupid = $client_group_id");
                if($tmp["number"] >= $client["limit_spamfilter_policy"]) {
                    $app->error($app->tform->wordbook["limit_spamfilter_policy_txt"]);
                }
            if(!$app->tform->checkClientLimit('limit_spamfilter_policy')) {
                $app->error($app->tform->wordbook["limit_spamfilter_policy_txt"]);
            }
            if(!$app->tform->checkResellerLimit('limit_spamfilter_policy')) {
                $app->error('Reseller: '.$app->tform->wordbook["limit_spamfilter_policy_txt"]);
            }
        }
        
interface/web/mail/spamfilter_users_edit.php
@@ -54,17 +54,11 @@
        
        // we will check only users, not admins
        if($_SESSION["s"]["user"]["typ"] == 'user') {
            // Get the limits of the client
            $client_group_id = $_SESSION["s"]["user"]["default_group"];
            $client = $app->db->queryOneRecord("SELECT limit_spamfilter_user FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
            // Check if the user may add another mailbox.
            if($client["limit_limit_spamfilter_user"] >= 0) {
                $tmp = $app->db->queryOneRecord("SELECT count(id) as number FROM spamfilter_users WHERE sys_groupid = $client_group_id");
                if($tmp["number"] >= $client["limit_spamfilter_user"]) {
                    $app->error($app->tform->wordbook["limit_spamfilter_user_txt"]);
                }
            if(!$app->tform->checkClientLimit('limit_spamfilter_user')) {
                $app->error($app->tform->wordbook["limit_spamfilter_user_txt"]);
            }
            if(!$app->tform->checkResellerLimit('limit_spamfilter_user')) {
                $app->error('Reseller: '.$app->tform->wordbook["limit_spamfilter_user_txt"]);
            }
        }
        
interface/web/mail/spamfilter_whitelist_edit.php
@@ -54,17 +54,11 @@
        
        // we will check only users, not admins
        if($_SESSION["s"]["user"]["typ"] == 'user') {
            // Get the limits of the client
            $client_group_id = $_SESSION["s"]["user"]["default_group"];
            $client = $app->db->queryOneRecord("SELECT limit_spamfilter_wblist FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
            // Check if the user may add another mailbox.
            if($client["limit_spamfilter_wblist"] >= 0) {
                $tmp = $app->db->queryOneRecord("SELECT count(wblist_id) as number FROM spamfilter_wblist WHERE sys_groupid = $client_group_id");
                if($tmp["number"] >= $client["limit_spamfilter_wblist"]) {
                    $app->error($app->tform->lng("limit_spamfilter_wblist_txt"));
                }
            if(!$app->tform->checkClientLimit('limit_spamfilter_wblist')) {
                $app->error($app->tform->wordbook["limit_spamfilter_wblist_txt"]);
            }
            if(!$app->tform->checkResellerLimit('limit_spamfilter_wblist')) {
                $app->error('Reseller: '.$app->tform->wordbook["limit_spamfilter_wblist_txt"]);
            }
        }
        
interface/web/monitor/lib/lang/br.lng
New file
@@ -0,0 +1,138 @@
<?php
$wb['Server online since'] = 'Servidor online desde';
$wb['Users online'] = 'Usuários Online';
$wb['System load 1 minute'] = 'Sistema carregado 1 Min';
$wb['System load 5 minutes'] = 'Sistema carregado 5 Min';
$wb['System load 15 minutes'] = 'Sistema carregado 15 Min';
$wb['Server Load'] = 'Servidor carregado';
$wb['Disk usage'] = 'Uso do disco';
$wb['Memory usage'] = 'Uso da memória';
$wb['no_data_serverload_txt'] = 'Sem registro carga do servidor disponíveis no momento. Tente novamente mais tarde.';
$wb['no_data_memusage_txt'] = 'Sem registro uso de memória disponíveis no momento. Tente novamente mais tarde.';
$wb['no_data_diskusage_txt'] = 'Sem registro de uso de disco disponíveis no momento. Tente novamente mais tarde.';
$wb['no_data_cpuinfo_txt'] = 'Sem registro de CPU disponíveis no momento. Tente novamente mais tarde.';
$wb['no_data_services_txt'] = 'Sem registro sobre os serviços disponíveis no momento. Tente novamente mais tarde.';
$wb['no_data_updates_txt'] = 'Sem atualização de dados disponíveis no momento. Tente novamente mais tarde.';
$wb['no_data_raid_txt'] = 'Sem registro de RAID disponível no momento. Tente novamente mais tarde.';
$wb['no_data_rkhunter_txt'] = 'Sem registro de RKHUNTER disponível no momento. Tente novamente mais tarde.';
$wb['no_data_mailq_txt'] = 'Sem registro de fila de correio disponível no momento. Tente novamente mais tarde.';
$wb['no_logdata_txt'] = 'Sem registro de log disponível no momento. Tente novamente mais tarde.';
$wb['Monitoring'] = 'Monitoramento';
$wb['Server to Monitor'] = 'Servidor a monitorar';
$wb['Logfiles'] = 'Arquivos de log';
$wb['Status of services'] = 'Status dos serviços';
$wb['No Refresh'] = 'Não atualize';
$wb['minutes'] = 'minutos';
$wb['Show Overview'] = 'Exibir Visão Geral';
$wb['System State (All Servers)'] = 'Estado do Sistema (Todos os Servidores)';
$wb['Hardware-Information'] = 'Informação de Hardware';
$wb['Show CPU info'] = 'Exibir informações da UCP';
$wb['Server State'] = 'Estado do Servidor';
$wb['Show Update State'] = 'Exiba Status Atualizado';
$wb['Show RAID state'] = 'Exiba Status do RAID';
$wb['Show Server load'] = 'Exiba Carga do Servidor';
$wb['Show Disk usage'] = 'Exiba Uso de Disco';
$wb['Show Memory usage'] = 'Exiba Uso de Memória';
$wb['Show Services'] = 'Exibir Serviços';
$wb['Show Mail-Queue'] = 'Exibir Fila de Correio';
$wb['Show Mail-Log'] = 'Exibir Log de Correio';
$wb['Show Mail warn-Log'] = 'Exibir Log de Avisos de Correio';
$wb['Show Mail err-Log'] = 'Exibir Log de Erros de Correio';
$wb['Show System-Log'] = 'Exibir Log de Sistema';
$wb['Show ISPC Cron-Log'] = 'Exibir ISPC Log do Cron';
$wb['Show Freshclam-Log'] = 'Exibir Log do Freshclam';
$wb['Show Clamav-Log'] = 'Exibir Log do Clamav';
$wb['Show ISPConfig-Log'] = 'Exibir Log do ISPConfig';
$wb['Show RKHunter-Log'] = 'Exibir Log do RKHunter';
$wb['Show Jobqueue'] = 'Exibir Fila de Trabalho';
$wb['monitor_general_serverstate_txt'] = 'Estado do Servidor';
$wb['monitor_general_systemstate_txt'] = 'Estado do Sistema';
$wb['monitor_diskusage_filesystem_txt'] = 'Sistema de Arquivos';
$wb['monitor_diskusage_type_txt'] = 'Tipo';
$wb['monitor_diskusage_size_txt'] = 'Tamanho';
$wb['monitor_diskusage_used_txt'] = 'Usado';
$wb['monitor_diskusage_available_txt'] = 'Disponível';
$wb['monitor_diskusage_usage_txt'] = 'Uso %';
$wb['monitor_diskusage_mounted_txt'] = 'Montado em';
$wb['monitor_logs_mail_txt'] = 'Log de Correio';
$wb['monitor_logs_mailwarn_txt'] = 'Log de Avisos';
$wb['monitor_logs_mailerr_txt'] = 'Log de Erros';
$wb['monitor_logs_messages_txt'] = 'Log de Sistema';
$wb['monitor_logs_ispccron_txt'] = 'Log do ISPConfig Cron';
$wb['monitor_logs_freshclam_txt'] = 'Logo do Freshclam';
$wb['monitor_logs_clamav_txt'] = 'Log do Clamav ';
$wb['monitor_logs_ispc_txt'] = 'Log do ISPConfig';
$wb['monitor_nomdadm_txt'] = 'mdadm não está instalado ou seu servidor não suporta RAID';
$wb['monitor_norkhunter_txt'] = 'RKHunter não está instalado, então não existem logs a exibir';
$wb['monitor_serverstate_server_txt'] = 'Servidor';
$wb['monitor_serverstate_state_txt'] = 'Estado';
$wb['monitor_serverstate_unknown_txt'] = 'desconhecido';
$wb['monitor_serverstate_info_txt'] = 'informações';
$wb['monitor_serverstate_warning_txt'] = 'aviso';
$wb['monitor_serverstate_critical_txt'] = 'crítico';
$wb['monitor_serverstate_error_txt'] = 'erro';
$wb['monitor_serverstate_moreinfo_txt'] = 'Mais informações..';
$wb['monitor_serverstate_more_txt'] = 'Mais...';
$wb['monitor_serverstate_fclamok_txt'] = 'Definições de anti-virus ok ...';
$wb['monitor_serverstate_fclamoutdated_txt'] = 'Definições de anti-virus DESATUALIZADAS!';
$wb['monitor_serverstate_fclamunknown_txt'] = 'Freshclam: ???!';
$wb['monitor_serverstate_hdok_txt'] = 'Espaço em disco está ok';
$wb['monitor_serverstate_hdgoingfull_txt'] = 'O espaço em disco está cheio';
$wb['monitor_serverstate_hdnearlyfull_txt'] = 'Seu disco está ficando cheio';
$wb['monitor_serverstate_hdveryfull_txt'] = 'Seu disco está muito cheio';
$wb['monitor_serverstate_hdfull_txt'] = 'Seu disco não tem mais espaço';
$wb['monitor_serverstate_hdunknown_txt'] = 'Disco Rígido: ???';
$wb['monitor_serverstate_listok_txt'] = 'ok';
$wb['monitor_serverstate_listinfo_txt'] = 'infomação';
$wb['monitor_serverstate_listwarning_txt'] = 'aviso';
$wb['monitor_serverstate_listcritical_txt'] = 'crítico';
$wb['monitor_serverstate_listerror_txt'] = 'erro';
$wb['monitor_serverstate_listunknown_txt'] = 'desconhecido';
$wb['monitor_serverstate_loadok_txt'] = 'Servidor carregado ok';
$wb['monitor_serverstate_loadheavy_txt'] = 'Seu servidor está com uma carga alta';
$wb['monitor_serverstate_loadhigh_txt'] = 'Seu servidor está ficando com uma carga alta';
$wb['monitor_serverstate_loaghigher_txt'] = 'Seu servidor está com uma carga muito alta';
$wb['monitor_serverstate_loadhighest_txt'] = 'Seu servidor está com uma carga super alta';
$wb['monitor_serverstate_loadunknown_txt'] = 'Carga do Servidor: ???';
$wb['monitor_serverstate_mailqok_txt'] = 'Sua fila de correio está OK';
$wb['monitor_serverstate_mailqheavy_txt'] = 'Sua fila de correio está ficando com uma carga alta';
$wb['monitor_serverstate_mailqhigh_txt'] = 'Sua fila de correio está com uma carga alta';
$wb['monitor_serverstate_mailqhigher_txt'] = 'Sua fila de correio está com uma carga muito alta';
$wb['monitor_serverstate_mailqhighest_txt'] = 'Sua fila de correio está com uma carga super alta';
$wb['monitor_serverstate_mailqunknown_txt'] = 'Fila de Correio: ???';
$wb['monitor_serverstate_raidok_txt'] = 'Seu RAID está ok';
$wb['monitor_serverstate_raidresync_txt'] = 'Seu RAID está em modo RESYNC';
$wb['monitor_serverstate_raidfault_txt'] = 'Seu RAID possui um disco com falhas. Troque-o o mais rápido possível!';
$wb['monitor_serverstate_raiderror_txt'] = 'Seu RAID não está mais funcionando.';
$wb['monitor_serverstate_raidunknown_txt'] = 'Estado do RAID: ???';
$wb['monitor_serverstate_servicesonline_txt'] = 'Todos os serviços necessários estão on-line';
$wb['monitor_serverstate_servicesoffline_txt'] = 'Um ou mais serviços necessários estão off-line';
$wb['monitor_serverstate_servicesunknown_txt'] = 'Serviços:???';
$wb['monitor_serverstate_syslogok_txt'] = 'O System-Log está O.K.';
$wb['monitor_serverstate_syslogwarning_txt'] = 'Existem alguns avisos em seu System-Log';
$wb['monitor_serverstate_syslogerror_txt'] = 'Existem erros no seu System-Log';
$wb['monitor_serverstate_syslogunknown_txt'] = 'sys-log:???';
$wb['monitor_serverstate_updatesok_txt'] = 'Seu sistema está atualizado.';
$wb['monitor_serverstate_updatesneeded_txt'] = 'Um ou mais componentes necessitam de atualização';
$wb['monitor_serverstate_updatesunknown_txt'] = 'Atualização-Sistema:???';
$wb['monitor_services_online_txt'] = 'Online';
$wb['monitor_services_offline_txt'] = 'Offline';
$wb['monitor_services_web_txt'] = 'Servidor Webr:';
$wb['monitor_services_ftp_txt'] = 'Servidor FTP:';
$wb['monitor_services_smtp_txt'] = 'Servidor SMTP:';
$wb['monitor_services_pop_txt'] = 'Servidor POP:';
$wb['monitor_services_imap_txt'] = 'Servidor IMAP:';
$wb['monitor_services_mydns_txt'] = 'Servidor myDNS:';
$wb['monitor_services_mysql_txt'] = 'Servidor MySql:';
$wb['monitor_settings_datafromdate_txt'] = 'Data de: ';
$wb['monitor_settings_datetimeformat_txt'] = 'd/m/Y H:i';
$wb['monitor_settings_refreshsq_txt'] = 'Atualizar sequência:';
$wb['monitor_settings_server_txt'] = 'Servidor';
$wb['monitor_title_cpuinfo_txt'] = 'Informação da CPU';
$wb['monitor_title_updatestate_txt'] = 'Atualizar Estado';
$wb['monitor_title_mailq_txt'] = 'Fila de Correio';
$wb['monitor_title_raidstate_txt'] = 'Estado do RAID';
$wb['monitor_title_rkhunterlog_txt'] = 'Log do RKHunter';
$wb['monitor_updates_nosupport_txt'] = 'Sua distribuição não suporta este tipo de monitoramento';
?>
interface/web/monitor/lib/lang/br_syslog_list.lng
New file
@@ -0,0 +1,8 @@
<?php
$wb['list_head_txt'] = 'Log do Painel';
$wb['tstamp_txt'] = 'Data';
$wb['server_id_txt'] = 'Servidor';
$wb['loglevel_txt'] = 'Nível do Log';
$wb['message_txt'] = 'Mensagem';
?>
interface/web/sites/cron_del.php
New file
@@ -0,0 +1,64 @@
<?php
/*
Copyright (c) 2008, Till Brehm, projektfarm Gmbh
Modified 2009, Marius Cramer, pixcept KG
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.
*/
/******************************************
* Begin Form configuration
******************************************/
$list_def_file = "list/cron.list.php";
$tform_def_file = "form/cron.tform.php";
/******************************************
* End Form configuration
******************************************/
require_once('../../lib/config.inc.php');
require_once('../../lib/app.inc.php');
//* Check permissions for module
$app->auth->check_module_permissions('sites');
$app->uses('tpl,tform,tform_actions');
$app->load('tform_actions');
class page_action extends tform_actions {
    function onBeforeDelete() {
        global $app; $conf;
        if($app->tform->checkPerm($this->id,'d') == false) $app->error($app->lng('error_no_delete_permission'));
    }
}
$page = new page_action;
$page->onDelete();
?>
interface/web/sites/cron_edit.php
New file
@@ -0,0 +1,220 @@
<?php
/*
Copyright (c) 2007, Till Brehm, projektfarm Gmbh
Modified 2009, Marius Cramer, pixcept KG
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.
*/
/******************************************
* Begin Form configuration
******************************************/
$tform_def_file = "form/cron.tform.php";
/******************************************
* End Form configuration
******************************************/
require_once('../../lib/config.inc.php');
require_once('../../lib/app.inc.php');
//* Check permissions for module
$app->auth->check_module_permissions('sites');
// Loading classes
$app->uses('tpl,tform,tform_actions,validate_cron');
$app->load('tform_actions');
class page_action extends tform_actions {
    function onShowNew() {
        global $app, $conf;
        // we will check only users, not admins
        if($_SESSION["s"]["user"]["typ"] == 'user') {
            if(!$app->tform->checkClientLimit('limit_cron')) {
                $app->error($app->tform->wordbook["limit_cron_txt"]);
            }
            if(!$app->tform->checkResellerLimit('limit_cron')) {
                $app->error('Reseller: '.$app->tform->wordbook["limit_cron_txt"]);
            }
        }
        parent::onShowNew();
    }
    function onShowEnd() {
        global $app, $conf;
        if($this->id > 0) {
            //* we are editing a existing record
            $app->tpl->setVar("edit_disabled", 1);
            $app->tpl->setVar("parent_domain_id_value", $this->dataRecord["parent_domain_id"]);
        } else {
            $app->tpl->setVar("edit_disabled", 0);
        }
        parent::onShowEnd();
    }
    function onSubmit() {
        global $app, $conf;
        if($_SESSION["s"]["user"]["typ"] != 'admin') {
            // Get the limits of the client
            $client_group_id = $_SESSION["s"]["user"]["default_group"];
            $client = $app->db->queryOneRecord("SELECT limit_cron, limit_cron_type 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) {
            // When the record is inserted
            } else {
                // Check if the user may add another cron job.
                if($client["limit_cron"] >= 0) {
                    $tmp = $app->db->queryOneRecord("SELECT count(id) as number FROM cron WHERE sys_groupid = $client_group_id");
                    if($tmp["number"] >= $client["limit_cron"]) {
                        $app->error($app->tform->wordbook["limit_cron_txt"]);
                    }
                }
            }
        }
        // Get the record of the parent domain
        $parent_domain = $app->db->queryOneRecord("select * FROM web_domain WHERE domain_id = ".intval(@$this->dataRecord["parent_domain_id"]));
        // Set fixed values
        $this->dataRecord["server_id"] = $parent_domain["server_id"];
        //* get type of command
        $command = $this->dataRecord["command"];
        if(preg_match("'^http(s)?:\/\/'i", $command)) {
            $this->dataRecord["type"] = 'url';
        } else {
            $domain_owner = $app->db->queryOneRecord("SELECT limit_cron_type FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ".intval($parent_domain["sys_groupid"]));
            if($domain_owner["limit_cron_type"] == 'full') $this->dataRecord["type"] = 'full';
            else $this->dataRecord["type"] = 'chrooted';
        }
        parent::onSubmit();
    }
    function onUpdateSave($sql) {
        global $app;
        $has_error = false;
        //* last chance to stop this, so check frequency limit!
        if($_SESSION["s"]["user"]["typ"] != 'admin') {
            // Get the limits of the client
            $client_group_id = $_SESSION["s"]["user"]["default_group"];
            $client = $app->db->queryOneRecord("SELECT limit_cron_frequency FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
            if($client["limit_cron_frequency"] > 1) {
                if($app->tform->cron_min_freq < $client["limit_cron_frequency"]) {
                    $app->error($app->tform->wordbook["limit_cron_frequency_txt"]);
                    $has_error = true;
                }
            }
        }
        if($has_error == true) {
            parent::onError();
            exit;
        }
        else parent::onUpdateSave($sql);
    }
    function onInsertSave($sql) {
        global $app;
        $has_error = false;
        //* last chance to stop this, so check frequency limit!
        if($_SESSION["s"]["user"]["typ"] != 'admin') {
            // Get the limits of the client
            $client_group_id = $_SESSION["s"]["user"]["default_group"];
            $client = $app->db->queryOneRecord("SELECT limit_cron_frequency FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
            if($client["limit_cron_frequency"] > 1) {
                if($app->tform->cron_min_freq < $client["limit_cron_frequency"]) {
                    $app->error($app->tform->wordbook["limit_cron_frequency_txt"]);
                    $has_error = true;
                }
            }
        }
        if($has_error == true) {
            parent::onError();
            exit;
        }
        else parent::onInsertSave($sql);
    }
    function onAfterInsert() {
        global $app, $conf;
        $web = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ".intval($this->dataRecord["parent_domain_id"]));
        $server_id = $web["server_id"];
        // The cron shall be owned by the same group then the website
        $sys_groupid = $web['sys_groupid'];
        $sql = "UPDATE shell_user SET server_id = $server_id, sys_groupid = '$sys_groupid' WHERE id = ".$this->id;
        $app->db->query($sql);
    }
    function onAfterUpdate() {
        global $app, $conf;
    }
    function getClientName() {
        global $app, $conf;
        if($_SESSION["s"]["user"]["typ"] != 'admin') {
            // Get the group-id of the user
            $client_group_id = $_SESSION["s"]["user"]["default_group"];
        } else {
            // Get the group-id from the data itself
            $web = $app->db->queryOneRecord("SELECT sys_groupid FROM web_domain WHERE domain_id = ".intval($this->dataRecord['parent_domain_id']));
            $client_group_id = $web['sys_groupid'];
        }
        /* get the name of the client */
        $tmp = $app->db->queryOneRecord("SELECT name FROM sys_group WHERE groupid = " . $client_group_id);
        $clientName = $tmp['name'];
        if ($clientName == "") $clientName = 'default';
        $clientName = convertClientName($clientName);
        return $clientName;
    }
}
$page = new page_action;
$page->onLoad();
?>
interface/web/sites/cron_list.php
New file
@@ -0,0 +1,23 @@
<?php
require_once('../../lib/config.inc.php');
require_once('../../lib/app.inc.php');
/******************************************
* Begin Form configuration
******************************************/
$list_def_file = "list/cron.list.php";
/******************************************
* End Form configuration
******************************************/
//* Check permissions for module
$app->auth->check_module_permissions('sites');
$app->uses('listform_actions');
$app->listform_actions->onLoad();
?>
interface/web/sites/database_edit.php
@@ -56,17 +56,11 @@
        // we will check only users, not admins
        if($_SESSION["s"]["user"]["typ"] == 'user') {
            // Get the limits of the client
            $client_group_id = $_SESSION["s"]["user"]["default_group"];
            $client = $app->db->queryOneRecord("SELECT limit_database FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
            // Check if the user may add another database.
            if($client["limit_database"] >= 0) {
                $tmp = $app->db->queryOneRecord("SELECT count(database_id) as number FROM web_database WHERE sys_groupid = $client_group_id");
                if($tmp["number"] >= $client["limit_database"]) {
                    $app->error($app->tform->wordbook["limit_database_txt"]);
                }
            if(!$app->tform->checkClientLimit('limit_database')) {
                $app->error($app->tform->wordbook["limit_database_txt"]);
            }
            if(!$app->tform->checkResellerLimit('limit_database')) {
                $app->error('Reseller: '.$app->tform->wordbook["limit_database_txt"]);
            }
        }
interface/web/sites/form/cron.tform.php
New file
@@ -0,0 +1,189 @@
<?php
/*
    Form Definition
    Tabledefinition
    Datatypes:
    - INTEGER (Forces the input to Int)
    - DOUBLE
    - CURRENCY (Formats the values to currency notation)
    - VARCHAR (no format check, maxlength: 255)
    - TEXT (no format check)
    - DATE (Dateformat, automatic conversion to timestamps)
    Formtype:
    - TEXT (Textfield)
    - TEXTAREA (Textarea)
    - PASSWORD (Password textfield, input is not shown when edited)
    - SELECT (Select option field)
    - RADIO
    - CHECKBOX
    - CHECKBOXARRAY
    - FILE
    VALUE:
    - Wert oder Array
    Hint:
    The ID field of the database table is not part of the datafield definition.
    The ID field must be always auto incement (int or bigint).
*/
$form["title"]             = "Cron Job";
$form["description"]     = "";
$form["name"]             = "cron";
$form["action"]            = "cron_edit.php";
$form["db_table"]        = "cron";
$form["db_table_idx"]    = "id";
$form["db_history"]        = "yes";
$form["tab_default"]    = "cron";
$form["list_default"]    = "cron_list.php";
$form["auth"]            = 'yes'; // yes / no
$form["auth_preset"]["userid"]  = 0; // 0 = id of the user, > 0 id must match with id of current user
$form["auth_preset"]["groupid"] = 0; // 0 = default groupid of the user, > 0 id must match with groupid of current user
$form["auth_preset"]["perm_user"] = 'riud'; //r = read, i = insert, u = update, d = delete
$form["auth_preset"]["perm_group"] = 'riud'; //r = read, i = insert, u = update, d = delete
$form["auth_preset"]["perm_other"] = ''; //r = read, i = insert, u = update, d = delete
$form["tabs"]['cron'] = array (
    'title'     => "Cron Job",
    'width'     => 100,
    'template'     => "templates/cron_edit.htm",
    'fields'     => array (
    ##################################
    # Begin Datatable fields
    ##################################
        'server_id' => array (
            'datatype'    => 'INTEGER',
            'formtype'    => 'SELECT',
            'datasource'    => array (     'type'    => 'SQL',
                                        'querystring' => 'SELECT server_id,server_name FROM server WHERE web_server = 1 AND {AUTHSQL} ORDER BY server_name',
                                        'keyfield'=> 'server_id',
                                        'valuefield'=> 'server_name'
                                     ),
            'validators'    => array (     0 => array (    'type'    => 'NOTEMPTY',
                                                        'errmsg'=> 'server_id_error_empty'),
                                    ),
            'default'    => '',
            'value'        => '',
            'width'        => '30',
            'maxlength'    => '255'
        ),
        'parent_domain_id' => array (
            'datatype'  => 'INTEGER',
            'formtype'  => 'SELECT',
            'default'   => '',
            'datasource'    => array (  'type'  => 'SQL',
                                        'querystring' => "SELECT domain_id,domain FROM web_domain WHERE type = 'vhost' AND {AUTHSQL} ORDER BY domain",
                                        'keyfield'=> 'domain_id',
                                        'valuefield'=> 'domain'
                                     ),
            'value'     => ''
        ),
        'run_min' => array (
            'datatype'  => 'VARCHAR',
            'formtype'  => 'TEXT',
            'validators'    => array (  0 => array (    'type'  => 'CUSTOM',
                                                        'class' => 'validate_cron',
                                                        'function' => 'run_time_format',
                                                        'errmsg'=> 'run_min_error_format'),
                                    ),
            'default'   => '',
            'value'     => '',
            'width'     => '30',
            'maxlength' => '255'
        ),
        'run_hour' => array (
            'datatype'  => 'VARCHAR',
            'formtype'  => 'TEXT',
            'validators'    => array (  0 => array (    'type'  => 'CUSTOM',
                                                        'class' => 'validate_cron',
                                                        'function' => 'run_time_format',
                                                        'errmsg'=> 'run_hour_error_format'),
                                    ),
            'default'   => '',
            'value'     => '',
            'width'     => '30',
            'maxlength' => '255'
        ),
        'run_mday' => array (
            'datatype'  => 'VARCHAR',
            'formtype'  => 'TEXT',
            'validators'    => array (  0 => array (    'type'  => 'CUSTOM',
                                                        'class' => 'validate_cron',
                                                        'function' => 'run_time_format',
                                                        'errmsg'=> 'run_mday_error_format'),
                                    ),
            'default'   => '',
            'value'     => '',
            'width'     => '30',
            'maxlength' => '255'
        ),
        'run_month' => array (
            'datatype'  => 'VARCHAR',
            'formtype'  => 'TEXT',
            'validators'    => array (  0 => array (    'type'  => 'CUSTOM',
                                                        'class' => 'validate_cron',
                                                        'function' => 'run_time_format',
                                                        'errmsg'=> 'run_month_error_format'),
                                    ),
            'default'   => '',
            'value'     => '',
            'width'     => '30',
            'maxlength' => '255'
        ),
        'run_wday' => array (
            'datatype'  => 'VARCHAR',
            'formtype'  => 'TEXT',
            'validators'    => array (  0 => array (    'type'  => 'CUSTOM',
                                                        'class' => 'validate_cron',
                                                        'function' => 'run_time_format',
                                                        'errmsg'=> 'run_wday_error_format'),
                                    ),
            'default'   => '',
            'value'     => '',
            'width'     => '30',
            'maxlength' => '255'
        ),
        'command' => array (
            'datatype'    => 'VARCHAR',
            'formtype'    => 'TEXT',
            'validators'    => array (     0 => array (    'type'    => 'NOTEMPTY',
                                                        'errmsg'=> 'command_error_empty'),
                                        1 => array (    'type'  => 'CUSTOM',
                                                        'class' => 'validate_cron',
                                                        'function' => 'command_format',
                                                        'errmsg'=> 'command_error_format'),
                                    ),
            'default'    => '',
            'value'        => '',
            'width'        => '30',
            'maxlength'    => '255'
        ),
        'type' => array (
            'datatype'  => 'VARCHAR',
            'formtype'  => 'SELECT',
            'default'   => 'url',
            'valuelimit' => 'list:url,full,chrooted',
            'value'     => array('url' => 'Url', 'full' => 'Full', 'chrooted' => 'Chrooted')
        ),
        'active' => array (
            'datatype'    => 'VARCHAR',
            'formtype'    => 'CHECKBOX',
            'default'    => 'y',
            'value'        => array(0 => 'n',1 => 'y')
        ),
    ##################################
    # ENDE Datatable fields
    ##################################
    )
);
?>
interface/web/sites/form/database.tform.php
@@ -133,6 +133,18 @@
            'default'    => 'y',
            'value'        => array(0 => 'n',1 => 'y')
        ),
    'remote_ips' => array (
      'datatype'  => 'TEXT',
      'formtype'  => 'TEXT',
      'validators'  => array (  0 => array (  'type' => 'CUSTOM',
                                              'class' => 'validate_database',
                                              'function' => 'valid_ip_list',
                                              'errmsg' => 'database_remote_error_ips'),
                             ),
      'default' => '',
      'value'   => '',
      'width'   => '60'
    ),
    ##################################
    # ENDE Datatable fields
    ##################################
interface/web/sites/form/ftp_user.tform.php
@@ -83,12 +83,10 @@
        'username' => array (
            'datatype'    => 'VARCHAR',
            'formtype'    => 'TEXT',
            'validators'    => array (     0 => array (    'type'    => 'NOTEMPTY',
                                                        'errmsg'=> 'username_error_empty'),
                                        1 => array (    'type'    => 'UNIQUE',
            'validators'    => array (     0 => array (    'type'    => 'UNIQUE',
                                                        'errmsg'=> 'username_error_unique'),
                                        2 => array (    'type'    => 'REGEX',
                                                        'regex' => '/^[\w\.\-]{1,64}$/',
                                        1 => array (    'type'    => 'REGEX',
                                                        'regex' => '/^[\w\.\-]{0,64}$/',
                                                        'errmsg'=> 'username_error_regex'),
                                    ),
            'default'    => '',
@@ -131,93 +129,125 @@
if($_SESSION["s"]["user"]["typ"] == 'admin') {
$form["tabs"]['advanced'] = array (
    'title'     => "Options",
    'width'     => 100,
    'template'     => "templates/ftp_user_advanced.htm",
    'fields'     => array (
    ##################################
    # Begin Datatable fields
    ##################################
        'uid' => array (
            'datatype'    => 'VARCHAR',
            'formtype'    => 'TEXT',
            'validators'    => array (     0 => array (    'type'    => 'NOTEMPTY',
                                                        'errmsg'=> 'uid_error_empty'),
                                    ),
            'default'    => '0',
            'value'        => '',
            'width'        => '30',
            'maxlength'    => '255'
        ),
        'gid' => array (
            'datatype'    => 'VARCHAR',
            'formtype'    => 'TEXT',
            'validators'    => array (     0 => array (    'type'    => 'NOTEMPTY',
                                                        'errmsg'=> 'uid_error_empty'),
                                    ),
            'default'    => '0',
            'value'        => '',
            'width'        => '30',
            'maxlength'    => '255'
        ),
        'dir' => array (
            'datatype'    => 'VARCHAR',
            'formtype'    => 'TEXT',
            'validators'    => array (     0 => array (    'type'    => 'NOTEMPTY',
                                                        'errmsg'=> 'directory_error_empty'),
                                    ),
            'default'    => '',
            'value'        => '',
            'width'        => '30',
            'maxlength'    => '255'
        ),
        'quota_files' => array (
            'datatype'    => 'INTEGER',
            'formtype'    => 'TEXT',
            'default'    => '0',
            'value'        => '',
            'width'        => '7',
            'maxlength'    => '7'
        ),
        'ul_ratio' => array (
            'datatype'    => 'INTEGER',
            'formtype'    => 'TEXT',
            'default'    => '0',
            'value'        => '',
            'width'        => '7',
            'maxlength'    => '7'
        ),
        'dl_ratio' => array (
            'datatype'    => 'INTEGER',
            'formtype'    => 'TEXT',
            'default'    => '0',
            'value'        => '',
            'width'        => '7',
            'maxlength'    => '7'
        ),
        'ul_bandwidth' => array (
            'datatype'    => 'INTEGER',
            'formtype'    => 'TEXT',
            'default'    => '0',
            'value'        => '',
            'width'        => '7',
            'maxlength'    => '7'
        ),
        'dl_bandwidth' => array (
            'datatype'    => 'INTEGER',
            'formtype'    => 'TEXT',
            'default'    => '0',
            'value'        => '',
            'width'        => '7',
            'maxlength'    => '7'
        ),
    ##################################
    # ENDE Datatable fields
    ##################################
    )
    'title'     => "Options",
    'width'     => 100,
    'template'  => "templates/ftp_user_advanced.htm",
    'fields'    => array (
    ##################################
    # Begin Datatable fields
    ##################################
        'uid' => array (
            'datatype'  => 'VARCHAR',
            'formtype'  => 'TEXT',
            'validators'    => array (  0 => array (    'type'  => 'NOTEMPTY',
                                                        'errmsg'=> 'uid_error_empty'),
                                    ),
            'default'   => '0',
            'value'     => '',
            'width'     => '30',
            'maxlength' => '255'
        ),
        'gid' => array (
            'datatype'  => 'VARCHAR',
            'formtype'  => 'TEXT',
            'validators'    => array (  0 => array (    'type'  => 'NOTEMPTY',
                                                        'errmsg'=> 'uid_error_empty'),
                                    ),
            'default'   => '0',
            'value'     => '',
            'width'     => '30',
            'maxlength' => '255'
        ),
        'dir' => array (
            'datatype'  => 'VARCHAR',
            'formtype'  => 'TEXT',
            'validators'    => array (  0 => array (    'type'  => 'NOTEMPTY',
                                                        'errmsg'=> 'directory_error_empty'),
                                    ),
            'default'   => '',
            'value'     => '',
            'width'     => '30',
            'maxlength' => '255'
        ),
        'quota_files' => array (
            'datatype'  => 'INTEGER',
            'formtype'  => 'TEXT',
            'default'   => '0',
            'value'     => '',
            'width'     => '7',
            'maxlength' => '7'
        ),
        'ul_ratio' => array (
            'datatype'  => 'INTEGER',
            'formtype'  => 'TEXT',
            'default'   => '0',
            'value'     => '',
            'width'     => '7',
            'maxlength' => '7'
        ),
        'dl_ratio' => array (
            'datatype'  => 'INTEGER',
            'formtype'  => 'TEXT',
            'default'   => '0',
            'value'     => '',
            'width'     => '7',
            'maxlength' => '7'
        ),
        'ul_bandwidth' => array (
            'datatype'  => 'INTEGER',
            'formtype'  => 'TEXT',
            'default'   => '0',
            'value'     => '',
            'width'     => '7',
            'maxlength' => '7'
        ),
        'dl_bandwidth' => array (
            'datatype'  => 'INTEGER',
            'formtype'  => 'TEXT',
            'default'   => '0',
            'value'     => '',
            'width'     => '7',
            'maxlength' => '7'
        ),
    ##################################
    # ENDE Datatable fields
    ##################################
    )
);
} else {
$form["tabs"]['advanced'] = array (
    'title'     => "Options",
    'width'     => 100,
    'template'  => "templates/ftp_user_advanced_client.htm",
    'fields'    => array (
    ##################################
    # Begin Datatable fields
    ##################################
        'dir' => array (
            'datatype'  => 'VARCHAR',
            'formtype'  => 'TEXT',
            'validators'    => array (  0 => array (    'type'  => 'NOTEMPTY',
                                                        'errmsg'=> 'directory_error_empty'),
                                        1 => array (    'type'  => 'CUSTOM',
                                                        'class' => 'validate_ftpuser',
                                                        'function' => 'ftp_dir',
                                                        'errmsg' => 'directory_error_notinweb'),
                                    ),
            'default'   => '',
            'value'     => '',
            'width'     => '30',
            'maxlength' => '255'
        ),
    ##################################
    # ENDE Datatable fields
    ##################################
    )
);
}
?>
interface/web/sites/form/shell_user.tform.php
@@ -83,12 +83,10 @@
        'username' => array (
            'datatype'    => 'VARCHAR',
            'formtype'    => 'TEXT',
            'validators'    => array (     0 => array (    'type'    => 'NOTEMPTY',
                                                        'errmsg'=> 'username_error_empty'),
                                        1 => array (    'type'    => 'UNIQUE',
            'validators'    => array (     0 => array (    'type'    => 'UNIQUE',
                                                        'errmsg'=> 'username_error_unique'),
                                        2 => array (    'type'    => 'REGEX',
                                                        'regex' => '/^[\w\.\-]{1,64}$/',
                                        1 => array (    'type'    => 'REGEX',
                                                        'regex' => '/^[\w\.\-]{0,64}$/',
                                                        'errmsg'=> 'username_error_regex'),
                                    ),
            'default'    => '',
interface/web/sites/ftp_user_edit.php
@@ -56,17 +56,11 @@
        
        // we will check only users, not admins
        if($_SESSION["s"]["user"]["typ"] == 'user') {
            // Get the limits of the client
            $client_group_id = $_SESSION["s"]["user"]["default_group"];
            $client = $app->db->queryOneRecord("SELECT limit_ftp_user FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
            // Check if the user may add another ftp user.
            if($client["limit_ftp_user"] >= 0) {
                $tmp = $app->db->queryOneRecord("SELECT count(ftp_user_id) as number FROM ftp_user WHERE sys_groupid = $client_group_id");
                if($tmp["number"] >= $client["limit_ftp_user"]) {
                    $app->error($app->tform->wordbook["limit_ftp_user_txt"]);
                }
            if(!$app->tform->checkClientLimit('limit_ftp_user')) {
                $app->error($app->tform->wordbook["limit_ftp_user_txt"]);
            }
            if(!$app->tform->checkResellerLimit('limit_ftp_user')) {
                $app->error('Reseller: '.$app->tform->wordbook["limit_ftp_user_txt"]);
            }
        }
        
@@ -107,6 +101,11 @@
        
        // Set a few fixed values
        $this->dataRecord["server_id"] = $parent_domain["server_id"];
        //die(print_r($this->dataRecord));
        if(isset($this->dataRecord['username']) && trim($this->dataRecord['username']) == '') $app->tform->errorMessage .= $app->tform->lng('username_error_empty').'<br />';
        if(isset($this->dataRecord['username']) && empty($this->dataRecord['parent_domain_id'])) $app->tform->errorMessage .= $app->tform->lng('parent_domain_id_error_empty').'<br />';
        
        parent::onSubmit();
    }
@@ -165,6 +164,20 @@
    function onAfterUpdate() {
        global $app, $conf;
        
        //* When the site of the FTP user has been changed
        if($this->oldDataRecord['parent_domain_id'] != $this->dataRecord['parent_domain_id']) {
            $web = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ".intval($this->dataRecord["parent_domain_id"]));
            $server_id = $web["server_id"];
            $dir = $web["document_root"];
            $uid = $web["system_user"];
            $gid = $web["system_group"];
            // The FTP user shall be owned by the same group then the website
            $sys_groupid = $web['sys_groupid'];
            $sql = "UPDATE ftp_user SET server_id = $server_id, dir = '$dir', uid = '$uid', gid = '$gid', sys_groupid = '$sys_groupid' WHERE ftp_user_id = ".$this->id;
            $app->db->query($sql);
        }
        
    }
    
interface/web/sites/lib/lang/bg_cron.lng
New file
@@ -0,0 +1,21 @@
<?php
$wb['server_id_txt'] = 'Server';
$wb['parent_domain_id_txt'] = 'Parent website';
$wb['active_txt'] = 'Active';
$wb['client_txt'] = 'Client';
$wb['run_min_txt'] = 'Minutes';
$wb['run_hour_txt'] = 'Hours';
$wb['run_mday_txt'] = 'Days of month';
$wb['run_month_txt'] = 'Months';
$wb['run_wday_txt'] = 'Days of week';
$wb['command_txt'] = 'Command to run (commands are executed via sh, urls via wget)';
$wb['limit_cron_txt'] = 'The maximum number of allowed cron jobs was reached.';
$wb['limit_cron_frequency_txt'] = 'The cron job frequency exceeds the allowed limit.';
$wb['run_min_error_format'] = 'Invalid format for minutes.';
$wb['run_hour_error_format'] = 'Invalid format for hours.';
$wb['run_mday_error_format'] = 'Invalid format for days of month.';
$wb['run_month_error_format'] = 'Invalid format for months.';
$wb['run_wday_error_format'] = 'Invalid format for days of the week.';
$wb['command_error_format'] = 'Invalid command format. Please note that in case of an url call only http/https is allowed.';
$wb['unknown_fieldtype_error'] = 'An unknown field type has been used.';
?>
interface/web/sites/lib/lang/bg_cron_list.lng
New file
@@ -0,0 +1,12 @@
<?php
$wb['list_head_txt'] = 'Cron Jobs';
$wb['active_txt'] = 'Active';
$wb['server_id_txt'] = 'Server';
$wb['run_min_txt'] = 'Minute';
$wb['run_hour_txt'] = 'Hour';
$wb['run_mday_txt'] = 'Day of month';
$wb['run_month_txt'] = 'Month';
$wb['run_wday_txt'] = 'Day of week';
$wb['command_txt'] = 'Command';
$wb['add_new_cron_txt'] = 'Add new Cron job';
?>
interface/web/sites/lib/lang/bg_database.lng
@@ -18,4 +18,6 @@
$wb['limit_database_txt'] = 'Достигнат е максималният разрешен брой бази данни.';
$wb['database_name_change_txt'] = 'Името на базата данни не може да бъде променено.';
$wb['database_charset_change_txt'] = 'Charset на базата данни не може да бъде променен.';
$wb['remote_ips_txt'] = 'Remote Access IPs (separate by , and leave blank for <i>any</i>)';
$wb['database_remote_error_ips'] = 'At least one of the entered ip addresses is invalid.';
?>
interface/web/sites/lib/lang/bg_ftp_user.lng
@@ -22,4 +22,5 @@
$wb['uid_error_empty'] = 'Не е посочено GID.';
$wb['directory_error_empty'] = 'Не е посочена директория.';
$wb['quota_files_unity_txt'] = 'Files';
$wb['directory_error_notinweb'] = 'Directory not inside of web root directory.';
?>
interface/web/sites/lib/lang/bg_web_sites_stats_list.lng
New file
@@ -0,0 +1,8 @@
<?php
$wb['list_head_txt'] = 'Web traffic';
$wb['domain_txt'] = 'Domain';
$wb['this_month_txt'] = 'This month';
$wb['last_month_txt'] = 'Last month';
$wb['this_year_txt'] = 'This year';
$wb['last_year_txt'] = 'Last year';
?>
interface/web/sites/lib/lang/br.lng
New file
@@ -0,0 +1,17 @@
<?php
$wb['Database'] = 'Banco de Dados';
$wb['Options'] = 'Opções';
$wb['Shell User'] = 'Usuário de Shell';
$wb['Domain'] = 'Website';
$wb['Redirect'] = 'Redirecionamento';
$wb['SSL'] = 'SSL';
$wb['Subdomain'] = 'Sub-domínio';
$wb['Sites'] = 'Sites';
$wb['Aliasdomain'] = 'Alias de Domínio';
$wb['FTP-User'] = 'Usuário-FTP';
$wb['FTP'] = 'FTP';
$wb['Shell-User'] = 'Usuário-Shell';
$wb['Shell'] = 'Shell';
$wb['Websites'] = 'Websites';
$wb["Stats"] = 'Estatísticas';
?>
interface/web/sites/lib/lang/br_cron.lng
New file
@@ -0,0 +1,21 @@
<?php
$wb["server_id_txt"] = 'Server';
$wb['parent_domain_id_txt'] = 'Parent website';
$wb['active_txt'] = 'Active';
$wb['client_txt'] = 'Client';
$wb['run_min_txt'] = 'Minutes';
$wb['run_hour_txt'] = 'Hours';
$wb['run_mday_txt'] = 'Days of month';
$wb['run_month_txt'] = 'Months';
$wb['run_wday_txt'] = 'Days of week';
$wb['command_txt'] = 'Command to run (commands are executed via sh, urls via wget)';
$wb['limit_cron_txt'] = 'The maximum number of allowed cron jobs was reached.';
$wb['limit_cron_frequency_txt'] = 'The cron job frequency exceeds the allowed limit.';
$wb['run_min_error_format'] = 'Invalid format for minutes.';
$wb['run_hour_error_format'] = 'Invalid format for hours.';
$wb['run_mday_error_format'] = 'Invalid format for days of month.';
$wb['run_month_error_format'] = 'Invalid format for months.';
$wb['run_wday_error_format'] = 'Invalid format for days of the week.';
$wb['command_error_format'] = 'Invalid command format. Please note that in case of an url call only http/https is allowed.';
$wb['unknown_fieldtype_error'] = 'An unknown field type has been used.';
?>
interface/web/sites/lib/lang/br_cron_list.lng
New file
@@ -0,0 +1,12 @@
<?php
$wb["list_head_txt"] = 'Cron Jobs';
$wb["active_txt"] = 'Active';
$wb["server_id_txt"] = 'Server';
$wb["run_min_txt"] = 'Minute';
$wb["run_hour_txt"] = 'Hour';
$wb["run_mday_txt"] = 'Day of month';
$wb["run_month_txt"] = 'Month';
$wb["run_wday_txt"] = 'Day of week';
$wb["command_txt"] = 'Command';
$wb["add_new_cron_txt"] = 'Add new Cron job';
?>
interface/web/sites/lib/lang/br_database.lng
New file
@@ -0,0 +1,22 @@
<?php
$wb["server_id_txt"] = 'Servidor';
$wb["type_txt"] = 'Tipo';
$wb["database_name_txt"] = 'Nome do Banco de Dados';
$wb["database_user_txt"] = 'Usuário do Banco de Dados';
$wb["database_password_txt"] = 'Senha do Banco de Dados';
$wb["password_strength_txt"] = 'Segurança da Senha';
$wb["database_charset_txt"] = 'Charset do Banco de Dados';
$wb["remote_access_txt"] = 'Acesso Remoto';
$wb["client_txt"] = 'Cliente';
$wb["active_txt"] = 'Ativo';
$wb["database_name_error_empty"] = 'O nome do banco está em branco.';
$wb["database_name_error_unique"] = 'Já existe um banco de dados com este nome no servidor. O nome escolhido deve ser único.';
$wb["database_name_error_regex"] = 'Nome do banco inválido. O nome do banco só pode conter estes caracteres: a-z, A-Z, 0-9 e o underscore. Tamanho: 2 - 64 caracteres.';
$wb["database_user_error_empty"] = 'O nome do usuário está em branco.';
$wb["database_user_error_unique"] = 'Já existe um banco de dados com este nome no servidor. O nome escolhido deve ser único.';
$wb["database_user_error_regex"] = 'Nome do banco inválido. O nome do banco só pode conter estes caracteres: a-z, A-Z, 0-9 e o underscore. Tamanho: 2 - 64 caracteres.';
$wb["limit_database_txt"] = 'O limite máximo de bancos de dados foi atingido.';
$wb["database_name_change_txt"] = 'O nome do banco não pode ser modificado';
$wb["database_charset_change_txt"] = 'O charset do banco não pode ser mudado';
?>
interface/web/sites/lib/lang/br_database_list.lng
New file
@@ -0,0 +1,8 @@
<?php
$wb["list_head_txt"] = 'Banco de Dados';
$wb["active_txt"] = 'Ativo';
$wb["remote_access_txt"] = 'Acesso Remoto';
$wb["server_id_txt"] = 'Servidor';
$wb["database_name_txt"] = 'Nome do banco';
$wb["add_new_record_txt"] = 'Adcionar um novo banco';
?>
interface/web/sites/lib/lang/br_ftp_user.lng
New file
@@ -0,0 +1,27 @@
<?php
$wb["uid_txt"] = 'UID';
$wb["gid_txt"] = 'GID';
$wb["dir_txt"] = 'Diretório';
$wb["quota_files_txt"] = 'Quota de Arquivo';
$wb["quota_files_unity_txt"] = 'Arquivos';
$wb["ul_ratio_txt"] = 'Taxa de Upload';
$wb["dl_ratio_txt"] = 'Taxa de Download';
$wb["ul_bandwidth_txt"] = 'Banda de Upload';
$wb["dl_bandwidth_txt"] = 'Banda de Download';
$wb["server_id_txt"] = 'Servidor';
$wb["parent_domain_id_txt"] = 'Website';
$wb["username_txt"] = 'Usuário';
$wb["password_txt"] = 'Senha';
$wb["password_strength_txt"] = 'Tamanho da senha';
$wb["quota_size_txt"] = 'Quota de Disco';
$wb["active_txt"] = 'Ativo';
$wb["limit_ftp_user_txt"] = 'O número máximo de usuários de FTP para sua conta foi atingido.';
$wb["username_error_empty"] = 'Nome de usuário em branco.';
$wb["username_error_unique"] = 'O nome de usuário deve ser único.';
$wb["username_error_regex"] = 'The username contains charachters that are not allowed.';
$wb["quota_size_error_empty"] = 'Quota em branco.';
$wb["uid_error_empty"] = 'UID em branco.';
$wb["uid_error_empty"] = 'GID em branco.';
$wb["directory_error_empty"] = 'Diretório vazio.';
?>
interface/web/sites/lib/lang/br_ftp_user_list.lng
New file
@@ -0,0 +1,8 @@
<?php
$wb["list_head_txt"] = 'Usuário-FTP';
$wb["active_txt"] = 'Ativo';
$wb["server_id_txt"] = 'Servidor';
$wb["parent_domain_id_txt"] = 'Site';
$wb["username_txt"] = 'Usuário';
$wb["add_new_record_txt"] = 'Adcionar um novo Usuário FTP';
?>
interface/web/sites/lib/lang/br_shell_user.lng
New file
@@ -0,0 +1,23 @@
<?php
$wb["uid_txt"] = 'Nome do usuário';
$wb["gid_txt"] = 'Groupo';
$wb["shell_txt"] = 'Shell';
$wb["dir_txt"] = 'Diretório';
$wb["server_id_txt"] = 'Servidor';
$wb["parent_domain_id_txt"] = 'Site';
$wb["username_txt"] = 'Nome do usuário';
$wb["password_txt"] = 'Senha';
$wb["password_strength_txt"] = 'Dificuldade da senha';
$wb["chroot_txt"] = 'Chroot Shell';
$wb["quota_size_txt"] = 'Quota';
$wb["active_txt"] = 'Ativo';
$wb["username_error_empty"] = 'Nome de usuário em branco.';
$wb["username_error_unique"] = 'O nome de usuário deve ser único.';
$wb["username_error_regex"] = 'The username contains charachters that are not allowed.';
$wb["quota_size_error_empty"] = 'Quota em branco.';
$wb["uid_error_empty"] = 'UID em branco.';
$wb["uid_error_empty"] = 'GID em branco.';
$wb["directory_error_empty"] = 'Diretório vazio.';
$wb["limit_shell_user_txt"] = 'O número máximo de usuários shell para sua conta foi atingido.';
?>
interface/web/sites/lib/lang/br_shell_user_list.lng
New file
@@ -0,0 +1,8 @@
<?php
$wb["list_head_txt"] = 'Usuário de Shell';
$wb["active_txt"] = 'Ativo';
$wb["server_id_txt"] = 'Servidor';
$wb["parent_domain_id_txt"] = 'Site';
$wb["username_txt"] = 'Usuário';
$wb["add_new_record_txt"] = 'Adcionar novo usuário de Shell';
?>
interface/web/sites/lib/lang/br_web_aliasdomain_list.lng
New file
@@ -0,0 +1,11 @@
<?php
$wb["list_head_txt"] = 'Domínio Alias';
$wb["active_txt"] = 'Ativo';
$wb["server_id_txt"] = 'Servidor';
$wb["parent_domain_id_txt"] = 'Website';
$wb["domain_txt"] = 'Domínio Alias';
$wb["add_new_record_txt"] = 'Adcionar novo domínio alias';
$wb["domain_error_empty"] = 'Domínio em branco.';
$wb["domain_error_unique"] = 'O domínio deve ser único.';
$wb["domain_error_regex"] = 'Nome de domínio inválido.';
?>
interface/web/sites/lib/lang/br_web_domain.lng
New file
@@ -0,0 +1,50 @@
<?php
$wb["ssl_state_txt"] = 'Estado';
$wb["ssl_locality_txt"] = 'Localização';
$wb["ssl_organisation_txt"] = 'Empresa';
$wb["ssl_organisation_unit_txt"] = 'Departamento';
$wb["ssl_country_txt"] = 'Pais';
$wb["ssl_request_txt"] = 'Requisição SSL';
$wb["ssl_cert_txt"] = 'Certificado SSL';
$wb["ssl_bundle_txt"] = 'SSL Bundle';
$wb["ssl_action_txt"] = 'SSL Action';
$wb["server_id_txt"] = 'Servidor';
$wb["domain_txt"] = 'Domínio';
$wb["type_txt"] = 'Tipo';
$wb["parent_domain_id_txt"] = 'Site Parente';
$wb["redirect_type_txt"] = 'Tipo Redirecionamento';
$wb["redirect_path_txt"] = 'Caminho de redirecionamento';
$wb["active_txt"] = 'Ativo';
$wb["document_root_txt"] = 'Documentroot';
$wb["system_user_txt"] = 'Usuário Linux';
$wb["system_group_txt"] = 'Groupo Linux';
$wb["ip_address_txt"] = 'Endereço-IP';
$wb["vhost_type_txt"] = 'Tipo de VHost';
$wb["hd_quota_txt"] = 'Quota de Disco';
$wb["traffic_quota_txt"] = 'Quota de Tráfego';
$wb["cgi_txt"] = 'CGI';
$wb["ssi_txt"] = 'SSI';
$wb["errordocs_txt"] = 'Suas Páginas de  Erro';
$wb["subdomain_txt"] = 'Auto-Subdomínio';
$wb["ssl_txt"] = 'SSL';
$wb["suexec_txt"] = 'SuEXEC';
$wb["php_txt"] = 'PHP';
$wb["client_txt"] = 'Cliente';
$wb["limit_web_domain_txt"] = 'O número máximo de domínios web para sua conta foi atingido.';
$wb["limit_web_aliasdomain_txt"] = 'O número máximo de aliases domínio para sua conta foi atingido.';
$wb["limit_web_subdomain_txt"] = 'O número máximo de sub-domínios para sua conta foi atingido.';
$wb["apache_directives_txt"] = 'Diretivas do Apache';
$wb["domain_error_empty"] = 'Domínio em branco.';
$wb["domain_error_unique"] = 'Já existe site, alias ou sub-domínio com este nome';
$wb["domain_error_regex"] = 'Nome de domínio inválido.';
$wb["hd_quota_error_empty"] = 'Quota de disco está em branco.';
$wb["traffic_quota_error_empty"] = 'Quota de tráfego está em branco.';
$wb['error_ssl_state_empty'] = 'Estado do SSL está em branco.';
$wb['error_ssl_locality_empty'] = 'Localização do SSL está em branco.';
$wb['error_ssl_organisation_empty'] = 'Empresa do SSL está em branco.';
$wb['error_ssl_organisation_unit_empty'] = 'Departamento do SSL está em branco.';
$wb['error_ssl_country_empty'] = 'Pais do SSL em branco.';
$wb["client_group_id_txt"] = 'Cliente';
$wb["stats_password_txt"] = 'Senha do diretório de estatísticas';
?>
interface/web/sites/lib/lang/br_web_domain_list.lng
New file
@@ -0,0 +1,8 @@
<?php
$wb["list_head_txt"] = 'Websites';
$wb["domain_id_txt"] = 'ID';
$wb["active_txt"] = 'Ativo';
$wb["server_id_txt"] = 'Servidor';
$wb["domain_txt"] = 'Domínio';
$wb["add_new_record_txt"] = 'Adcionar um novo site';
?>
interface/web/sites/lib/lang/br_web_sites_stats_list.lng
New file
@@ -0,0 +1,8 @@
<?php
$wb["list_head_txt"] = 'Web traffic';
$wb["domain_txt"] = 'Domain';
$wb["this_month_txt"] = 'This month';
$wb["last_month_txt"] = 'Last month';
$wb["this_year_txt"] = 'This year';
$wb["last_year_txt"] = 'Last year';
?>
interface/web/sites/lib/lang/br_web_subdomain.lng
New file
@@ -0,0 +1,39 @@
<?php
$wb["ssl_state_txt"] = 'Estado';
$wb["ssl_locality_txt"] = 'Localidade';
$wb["ssl_organisation_txt"] = 'Empresa';
$wb["ssl_organisation_unit_txt"] = 'Departamento';
$wb["ssl_country_txt"] = 'Pais';
$wb["ssl_request_txt"] = 'Requisição SSL';
$wb["ssl_cert_txt"] = 'Certificado SSL';
$wb["ssl_bundle_txt"] = 'Pacote SSL';
$wb["ssl_action_txt"] = 'Ação SSL';
$wb["server_id_txt"] = 'Servidor';
$wb["domain_txt"] = 'Domínio';
$wb["type_txt"] = 'Tipo';
$wb["parent_domain_id_txt"] = 'Site Parente';
$wb["redirect_type_txt"] = 'Tipo do Redirecionamento';
$wb["redirect_path_txt"] = 'Caminho do Redirecionamento';
$wb["active_txt"] = 'Ativo';
$wb["document_root_txt"] = 'Documentroot';
$wb["system_user_txt"] = 'Usuário no Linux';
$wb["system_group_txt"] = 'Grupo no Linux';
$wb["ip_address_txt"] = 'Endereço-IP';
$wb["vhost_type_txt"] = 'Tipo de VHost';
$wb["hd_quota_txt"] = 'Quota de Disco';
$wb["traffic_quota_txt"] = 'Quota de Tráfico';
$wb["cgi_txt"] = 'CGI';
$wb["ssi_txt"] = 'SSI';
$wb["ssl_txt"] = 'SSL';
$wb["suexec_txt"] = 'SuEXEC';
$wb["php_txt"] = 'PHP';
$wb["client_txt"] = 'Cliente';
$wb["limit_web_domain_txt"] = 'O número máximo de domínios web para esta conta foi atingido.';
$wb["limit_web_aliasdomain_txt"] = 'O número máximo de aliases para esta conta foi atingido.';
$wb["limit_web_subdomain_txt"] = 'O número máximo de sub-domínios para esta conta foi atingido.';
$wb["apache_directives_txt"] = 'Diretivas apache';
$wb["domain_error_empty"] = 'Domínio em branco.';
$wb["domain_error_unique"] = 'Já existe alias ou sub-domínio com este nome.';
$wb["domain_error_regex"] = 'Nome de domínio inválido.';
$wb["host_txt"] = 'Host';
?>
interface/web/sites/lib/lang/br_web_subdomain_list.lng
New file
@@ -0,0 +1,8 @@
<?php
$wb["list_head_txt"] = 'Sub-domínios';
$wb["active_txt"] = 'Ativo';
$wb["server_id_txt"] = 'Servidor';
$wb["parent_domain_id_txt"] = 'Website';
$wb["domain_txt"] = 'Sub=domínio';
$wb["add_new_record_txt"] = 'Adcionar um novo sub-domínio';
?>
interface/web/sites/lib/lang/de_cron.lng
New file
@@ -0,0 +1,21 @@
<?php
$wb['server_id_txt'] = 'Server';
$wb['parent_domain_id_txt'] = 'Zugeordnete Website';
$wb['active_txt'] = 'Aktiv';
$wb['client_txt'] = 'Kunde';
$wb['run_min_txt'] = 'Minuten';
$wb['run_hour_txt'] = 'Stunden';
$wb['run_mday_txt'] = 'Tage des Monats';
$wb['run_month_txt'] = 'Monate';
$wb['run_wday_txt'] = 'Tage der Woche';
$wb['command_txt'] = 'Auszuf&uuml;hrender Befehl (Befehle werden mit sh ausgef&uuml;hrt, urls mit wget)';
$wb['limit_cron_txt'] = 'Die maximale Anzahl von erlaubten Cron Jobs ist bereits erreicht.';
$wb['limit_cron_frequency_txt'] = 'Die Ausf&uuml;hrungsh&auml;ufigkeit &uuml;bersteigt Ihr erlaubtes Limit.';
$wb['run_min_error_format'] = 'Das Format f&uuml;r Minuten ist nicht korrekt.';
$wb['run_hour_error_format'] = 'Das Format f&uuml;r Stunden ist nicht korrekt.';
$wb['run_mday_error_format'] = 'Das Format f&uuml;r Tage des Monats ist nicht korrekt.';
$wb['run_month_error_format'] = 'Das Format f&uuml;r Monate ist nicht korrekt.';
$wb['run_wday_error_format'] = 'Das Format f&uuml;r Wochentage ist nicht korrekt.';
$wb['command_error_format'] = 'Das Format f&uuml;r den Befehl ist nicht korrekt. Beachte, dass bei einem URL Aufruf nur http und https erlaubt ist.';
$wb['unknown_fieldtype_error'] = 'Es wurde ein unbekanntes Feld verwendet.';
?>
interface/web/sites/lib/lang/de_cron_list.lng
New file
@@ -0,0 +1,12 @@
<?php
$wb['list_head_txt'] = 'Cron Jobs';
$wb['active_txt'] = 'Activ';
$wb['server_id_txt'] = 'Server';
$wb['run_min_txt'] = 'Minute';
$wb['run_hour_txt'] = 'Stunde';
$wb['run_mday_txt'] = 'Tag des Monats';
$wb['run_month_txt'] = 'Monat';
$wb['run_wday_txt'] = 'Tag der Woche';
$wb['command_txt'] = 'Befehl';
$wb['add_new_cron_txt'] = 'Neuen Cron Job anlegen';
?>
interface/web/sites/lib/lang/de_database.lng
@@ -6,6 +6,8 @@
$wb['database_password_txt'] = 'Datenbank Passwort';
$wb['database_charset_txt'] = 'Datenbank Zeichensatz';
$wb['remote_access_txt'] = 'Remotezugang';
$wb['remote_ips_txt'] = 'Remotezugang-IPs (mit Komma trennen, keine Eingabe f&uuml;r <i>alle</i>)';
$wb['database_remote_error_ips'] = 'Mindestens eine der eingegebenen IP Adressen ist ung&uuml;ltig.';
$wb['client_txt'] = 'Kunde';
$wb['active_txt'] = 'Aktiv';
$wb['database_name_error_empty'] = 'Datenbankname ist leer.';
interface/web/sites/lib/lang/de_ftp_user.lng
@@ -22,4 +22,5 @@
$wb['uid_error_empty'] = 'GID ist leer.';
$wb['directory_error_empty'] = 'Verzeichniss ist leer.';
$wb['password_strength_txt'] = 'Passwortkomplexität';
$wb['directory_error_notinweb'] = 'Das Verzeichnis befindet sich nicht innerhalb des Verzeichnisses der Website.';
?>
interface/web/sites/lib/lang/de_web_sites_stats_list.lng
New file
@@ -0,0 +1,8 @@
<?php
$wb['list_head_txt'] = 'Web Datenverkehr';
$wb['domain_txt'] = 'Domain';
$wb['this_month_txt'] = 'Diesen Monat';
$wb['last_month_txt'] = 'Letzten Monat';
$wb['this_year_txt'] = 'Dieses Jahr';
$wb['last_year_txt'] = 'Letztes Jahr';
?>
interface/web/sites/lib/lang/en_cron.lng
New file
@@ -0,0 +1,21 @@
<?php
$wb["server_id_txt"] = 'Server';
$wb['parent_domain_id_txt'] = 'Parent website';
$wb['active_txt'] = 'Active';
$wb['client_txt'] = 'Client';
$wb['run_min_txt'] = 'Minutes';
$wb['run_hour_txt'] = 'Hours';
$wb['run_mday_txt'] = 'Days of month';
$wb['run_month_txt'] = 'Months';
$wb['run_wday_txt'] = 'Days of week';
$wb['command_txt'] = 'Command to run (commands are executed via sh, urls via wget)';
$wb['limit_cron_txt'] = 'The maximum number of allowed cron jobs was reached.';
$wb['limit_cron_frequency_txt'] = 'The cron job frequency exceeds the allowed limit.';
$wb['run_min_error_format'] = 'Invalid format for minutes.';
$wb['run_hour_error_format'] = 'Invalid format for hours.';
$wb['run_mday_error_format'] = 'Invalid format for days of month.';
$wb['run_month_error_format'] = 'Invalid format for months.';
$wb['run_wday_error_format'] = 'Invalid format for days of the week.';
$wb['command_error_format'] = 'Invalid command format. Please note that in case of an url call only http/https is allowed.';
$wb['unknown_fieldtype_error'] = 'An unknown field type has been used.';
?>
interface/web/sites/lib/lang/en_cron_list.lng
New file
@@ -0,0 +1,12 @@
<?php
$wb["list_head_txt"] = 'Cron Jobs';
$wb["active_txt"] = 'Active';
$wb["server_id_txt"] = 'Server';
$wb["run_min_txt"] = 'Minute';
$wb["run_hour_txt"] = 'Hour';
$wb["run_mday_txt"] = 'Day of month';
$wb["run_month_txt"] = 'Month';
$wb["run_wday_txt"] = 'Day of week';
$wb["command_txt"] = 'Command';
$wb["add_new_cron_txt"] = 'Add new Cron job';
?>
interface/web/sites/lib/lang/en_database.lng
@@ -7,6 +7,8 @@
$wb["password_strength_txt"] = 'Password strength';
$wb["database_charset_txt"] = 'Database charset';
$wb["remote_access_txt"] = 'Remote Access';
$wb["remote_ips_txt"] = 'Remote Access IPs (separate by , and leave blank for <i>any</i>)';
$wb["database_remote_error_ips"] = 'At least one of the entered ip addresses is invalid.';
$wb["client_txt"] = 'Client';
$wb["active_txt"] = 'Active';
$wb["database_name_error_empty"] = 'Database name is empty.';
interface/web/sites/lib/lang/en_ftp_user.lng
@@ -23,4 +23,6 @@
$wb["uid_error_empty"] = 'UID empty.';
$wb["uid_error_empty"] = 'GID empty.';
$wb["directory_error_empty"] = 'Directory empty.';
$wb['directory_error_notinweb'] = 'Directory not inside of web root directory.';
$wb["parent_domain_id_error_empty"] = 'No website selected.';
?>
interface/web/sites/lib/lang/en_shell_user.lng
@@ -19,4 +19,5 @@
$wb["uid_error_empty"] = 'GID empty.';
$wb["directory_error_empty"] = 'Directory empty.';
$wb["limit_shell_user_txt"] = 'The max number of shell users is reached.';
$wb["parent_domain_id_error_empty"] = 'No website selected.';
?>
interface/web/sites/lib/lang/en_web_sites_stats_list.lng
New file
@@ -0,0 +1,8 @@
<?php
$wb["list_head_txt"] = 'Web traffic';
$wb["domain_txt"] = 'Domain';
$wb["this_month_txt"] = 'This month';
$wb["last_month_txt"] = 'Last month';
$wb["this_year_txt"] = 'This year';
$wb["last_year_txt"] = 'Last year';
?>
interface/web/sites/lib/lang/es_cron.lng
New file
@@ -0,0 +1,21 @@
<?php
$wb["server_id_txt"] = 'Server';
$wb['parent_domain_id_txt'] = 'Parent website';
$wb['active_txt'] = 'Active';
$wb['client_txt'] = 'Client';
$wb['run_min_txt'] = 'Minutes';
$wb['run_hour_txt'] = 'Hours';
$wb['run_mday_txt'] = 'Days of month';
$wb['run_month_txt'] = 'Months';
$wb['run_wday_txt'] = 'Days of week';
$wb['command_txt'] = 'Command to run (commands are executed via sh, urls via wget)';
$wb['limit_cron_txt'] = 'The maximum number of allowed cron jobs was reached.';
$wb['limit_cron_frequency_txt'] = 'The cron job frequency exceeds the allowed limit.';
$wb['run_min_error_format'] = 'Invalid format for minutes.';
$wb['run_hour_error_format'] = 'Invalid format for hours.';
$wb['run_mday_error_format'] = 'Invalid format for days of month.';
$wb['run_month_error_format'] = 'Invalid format for months.';
$wb['run_wday_error_format'] = 'Invalid format for days of the week.';
$wb['command_error_format'] = 'Invalid command format. Please note that in case of an url call only http/https is allowed.';
$wb['unknown_fieldtype_error'] = 'An unknown field type has been used.';
?>
interface/web/sites/lib/lang/es_cron_list.lng
New file
@@ -0,0 +1,12 @@
<?php
$wb["list_head_txt"] = 'Cron Jobs';
$wb["active_txt"] = 'Active';
$wb["server_id_txt"] = 'Server';
$wb["run_min_txt"] = 'Minute';
$wb["run_hour_txt"] = 'Hour';
$wb["run_mday_txt"] = 'Day of month';
$wb["run_month_txt"] = 'Month';
$wb["run_wday_txt"] = 'Day of week';
$wb["command_txt"] = 'Command';
$wb["add_new_cron_txt"] = 'Add new Cron job';
?>
interface/web/sites/lib/lang/es_database.lng
@@ -18,4 +18,6 @@
$wb['limit_database_txt'] = 'Se ha alcanzado el número máximo de bases de datos';
$wb['database_name_change_txt'] = 'El nombre de la base de datos no se puede cambiar';
$wb['database_charset_change_txt'] = 'La tabla de caracteres de la base de datos no se puede cambiar';
$wb['remote_ips_txt'] = 'Remote Access IPs (separate by , and leave blank for <i>any</i>)';
$wb['database_remote_error_ips'] = 'At least one of the entered ip addresses is invalid.';
?>
interface/web/sites/lib/lang/es_ftp_user.lng
@@ -22,4 +22,5 @@
$wb['uid_error_empty'] = 'GID vacío';
$wb['directory_error_empty'] = 'Directorio vacío';
$wb['quota_files_unity_txt'] = 'Files';
$wb['directory_error_notinweb'] = 'Directory not inside of web root directory.';
?>
interface/web/sites/lib/lang/es_web_sites_stats_list.lng
New file
@@ -0,0 +1,8 @@
<?php
$wb['list_head_txt'] = 'Tráfico de xxxx';
$wb['domain_txt'] = 'xxxx';
$wb['this_month_txt'] = 'Este mes';
$wb['last_month_txt'] = 'Último mes';
$wb['this_year_txt'] = 'Este año';
$wb['last_year_txt'] = 'Último año';
?>
interface/web/sites/lib/lang/fi_cron.lng
New file
@@ -0,0 +1,21 @@
<?php
$wb["server_id_txt"] = 'Server';
$wb['parent_domain_id_txt'] = 'Parent website';
$wb['active_txt'] = 'Active';
$wb['client_txt'] = 'Client';
$wb['run_min_txt'] = 'Minutes';
$wb['run_hour_txt'] = 'Hours';
$wb['run_mday_txt'] = 'Days of month';
$wb['run_month_txt'] = 'Months';
$wb['run_wday_txt'] = 'Days of week';
$wb['command_txt'] = 'Command to run (commands are executed via sh, urls via wget)';
$wb['limit_cron_txt'] = 'The maximum number of allowed cron jobs was reached.';
$wb['limit_cron_frequency_txt'] = 'The cron job frequency exceeds the allowed limit.';
$wb['run_min_error_format'] = 'Invalid format for minutes.';
$wb['run_hour_error_format'] = 'Invalid format for hours.';
$wb['run_mday_error_format'] = 'Invalid format for days of month.';
$wb['run_month_error_format'] = 'Invalid format for months.';
$wb['run_wday_error_format'] = 'Invalid format for days of the week.';
$wb['command_error_format'] = 'Invalid command format. Please note that in case of an url call only http/https is allowed.';
$wb['unknown_fieldtype_error'] = 'An unknown field type has been used.';
?>
interface/web/sites/lib/lang/fi_cron_list.lng
New file
@@ -0,0 +1,12 @@
<?php
$wb["list_head_txt"] = 'Cron Jobs';
$wb["active_txt"] = 'Active';
$wb["server_id_txt"] = 'Server';
$wb["run_min_txt"] = 'Minute';
$wb["run_hour_txt"] = 'Hour';
$wb["run_mday_txt"] = 'Day of month';
$wb["run_month_txt"] = 'Month';
$wb["run_wday_txt"] = 'Day of week';
$wb["command_txt"] = 'Command';
$wb["add_new_cron_txt"] = 'Add new Cron job';
?>
interface/web/sites/lib/lang/fi_database.lng
@@ -18,4 +18,6 @@
$wb['password_strength_txt'] = 'Salasanan vahvuus';
$wb['database_charset_txt'] = 'Tietokannan merkistö';
$wb['database_charset_change_txt'] = 'Tietokannan merkistöä ei voi vaihtaa';
$wb['remote_ips_txt'] = 'Remote Access IPs (separate by , and leave blank for <i>any</i>)';
$wb['database_remote_error_ips'] = 'At least one of the entered ip addresses is invalid.';
?>
interface/web/sites/lib/lang/fi_ftp_user.lng
@@ -22,4 +22,5 @@
$wb['directory_error_empty'] = 'Kotihakemisto-kenttä on tyhjä.';
$wb['password_strength_txt'] = 'Salasanan vahvuus';
$wb['quota_files_unity_txt'] = 'Files';
$wb['directory_error_notinweb'] = 'Directory not inside of web root directory.';
?>
interface/web/sites/lib/lang/fi_web_sites_stats_list.lng
New file
@@ -0,0 +1,8 @@
<?php
$wb['list_head_txt'] = 'Sähköpostiliikenne';
$wb['domain_txt'] = 'Sähköpostiosoite';
$wb['this_month_txt'] = 'Tässä kuussa';
$wb['last_month_txt'] = 'Viime kuussa';
$wb['this_year_txt'] = 'Tänä vuonna';
$wb['last_year_txt'] = 'Viime vuonna';
?>
interface/web/sites/lib/lang/fr_cron.lng
New file
@@ -0,0 +1,21 @@
<?php
$wb['server_id_txt'] = 'Server';
$wb['parent_domain_id_txt'] = 'Parent website';
$wb['active_txt'] = 'Active';
$wb['client_txt'] = 'Client';
$wb['run_min_txt'] = 'Minutes';
$wb['run_hour_txt'] = 'Hours';
$wb['run_mday_txt'] = 'Days of month';
$wb['run_month_txt'] = 'Months';
$wb['run_wday_txt'] = 'Days of week';
$wb['command_txt'] = 'Command to run (commands are executed via sh, urls via wget)';
$wb['limit_cron_txt'] = 'The maximum number of allowed cron jobs was reached.';
$wb['limit_cron_frequency_txt'] = 'The cron job frequency exceeds the allowed limit.';
$wb['run_min_error_format'] = 'Invalid format for minutes.';
$wb['run_hour_error_format'] = 'Invalid format for hours.';
$wb['run_mday_error_format'] = 'Invalid format for days of month.';
$wb['run_month_error_format'] = 'Invalid format for months.';
$wb['run_wday_error_format'] = 'Invalid format for days of the week.';
$wb['command_error_format'] = 'Invalid command format. Please note that in case of an url call only http/https is allowed.';
$wb['unknown_fieldtype_error'] = 'An unknown field type has been used.';
?>
interface/web/sites/lib/lang/fr_cron_list.lng
New file
@@ -0,0 +1,12 @@
<?php
$wb['list_head_txt'] = 'Cron Jobs';
$wb['active_txt'] = 'Active';
$wb['server_id_txt'] = 'Server';
$wb['run_min_txt'] = 'Minute';
$wb['run_hour_txt'] = 'Hour';
$wb['run_mday_txt'] = 'Day of month';
$wb['run_month_txt'] = 'Month';
$wb['run_wday_txt'] = 'Day of week';
$wb['command_txt'] = 'Command';
$wb['add_new_cron_txt'] = 'Add new Cron job';
?>
interface/web/sites/lib/lang/fr_database.lng
@@ -18,4 +18,6 @@
$wb['limit_database_txt'] = 'The max. number of databases is reached.';
$wb['database_name_change_txt'] = 'The database name can not be changed';
$wb['database_charset_change_txt'] = 'The database charset can not be changed';
$wb['remote_ips_txt'] = 'Remote Access IPs (separate by , and leave blank for <i>any</i>)';
$wb['database_remote_error_ips'] = 'At least one of the entered ip addresses is invalid.';
?>
interface/web/sites/lib/lang/fr_ftp_user.lng
@@ -22,4 +22,5 @@
$wb['uid_error_empty'] = 'GID empty.';
$wb['directory_error_empty'] = 'Directory empty.';
$wb['quota_files_unity_txt'] = 'Files';
$wb['directory_error_notinweb'] = 'Directory not inside of web root directory.';
?>
interface/web/sites/lib/lang/fr_web_sites_stats_list.lng
New file
@@ -0,0 +1,8 @@
<?php
$wb['list_head_txt'] = 'Web traffic';
$wb['domain_txt'] = 'Domain';
$wb['this_month_txt'] = 'This month';
$wb['last_month_txt'] = 'Last month';
$wb['this_year_txt'] = 'This year';
$wb['last_year_txt'] = 'Last year';
?>
interface/web/sites/lib/lang/it_cron.lng
New file
@@ -0,0 +1,21 @@
<?php
$wb["server_id_txt"] = 'Server';
$wb['parent_domain_id_txt'] = 'Parent website';
$wb['active_txt'] = 'Active';
$wb['client_txt'] = 'Client';
$wb['run_min_txt'] = 'Minutes';
$wb['run_hour_txt'] = 'Hours';
$wb['run_mday_txt'] = 'Days of month';
$wb['run_month_txt'] = 'Months';
$wb['run_wday_txt'] = 'Days of week';
$wb['command_txt'] = 'Command to run (commands are executed via sh, urls via wget)';
$wb['limit_cron_txt'] = 'The maximum number of allowed cron jobs was reached.';
$wb['limit_cron_frequency_txt'] = 'The cron job frequency exceeds the allowed limit.';
$wb['run_min_error_format'] = 'Invalid format for minutes.';
$wb['run_hour_error_format'] = 'Invalid format for hours.';
$wb['run_mday_error_format'] = 'Invalid format for days of month.';
$wb['run_month_error_format'] = 'Invalid format for months.';
$wb['run_wday_error_format'] = 'Invalid format for days of the week.';
$wb['command_error_format'] = 'Invalid command format. Please note that in case of an url call only http/https is allowed.';
$wb['unknown_fieldtype_error'] = 'An unknown field type has been used.';
?>
interface/web/sites/lib/lang/it_cron_list.lng
New file
@@ -0,0 +1,12 @@
<?php
$wb["list_head_txt"] = 'Cron Jobs';
$wb["active_txt"] = 'Active';
$wb["server_id_txt"] = 'Server';
$wb["run_min_txt"] = 'Minute';
$wb["run_hour_txt"] = 'Hour';
$wb["run_mday_txt"] = 'Day of month';
$wb["run_month_txt"] = 'Month';
$wb["run_wday_txt"] = 'Day of week';
$wb["command_txt"] = 'Command';
$wb["add_new_cron_txt"] = 'Add new Cron job';
?>
interface/web/sites/lib/lang/it_database.lng
@@ -18,4 +18,6 @@
$wb['limit_database_txt'] = 'The max. number of databases is reached.';
$wb['database_name_change_txt'] = 'The database name can not be changed';
$wb['database_charset_change_txt'] = 'The database charset can not be changed';
$wb['remote_ips_txt'] = 'Remote Access IPs (separate by , and leave blank for <i>any</i>)';
$wb['database_remote_error_ips'] = 'At least one of the entered ip addresses is invalid.';
?>
interface/web/sites/lib/lang/it_ftp_user.lng
@@ -22,4 +22,5 @@
$wb['uid_error_empty'] = 'GID empty.';
$wb['directory_error_empty'] = 'Directory empty.';
$wb['quota_files_unity_txt'] = 'Files';
$wb['directory_error_notinweb'] = 'Directory not inside of web root directory.';
?>
interface/web/sites/lib/lang/it_web_sites_stats_list.lng
New file
@@ -0,0 +1,8 @@
<?php
$wb['list_head_txt'] = 'Web traffic';
$wb['domain_txt'] = 'Domain';
$wb['this_month_txt'] = 'This month';
$wb['last_month_txt'] = 'Last month';
$wb['this_year_txt'] = 'This year';
$wb['last_year_txt'] = 'Last year';
?>
interface/web/sites/lib/lang/nl_cron.lng
New file
@@ -0,0 +1,21 @@
<?php
$wb["server_id_txt"] = 'Server';
$wb['parent_domain_id_txt'] = 'Parent website';
$wb['active_txt'] = 'Active';
$wb['client_txt'] = 'Client';
$wb['run_min_txt'] = 'Minutes';
$wb['run_hour_txt'] = 'Hours';
$wb['run_mday_txt'] = 'Days of month';
$wb['run_month_txt'] = 'Months';
$wb['run_wday_txt'] = 'Days of week';
$wb['command_txt'] = 'Command to run (commands are executed via sh, urls via wget)';
$wb['limit_cron_txt'] = 'The maximum number of allowed cron jobs was reached.';
$wb['limit_cron_frequency_txt'] = 'The cron job frequency exceeds the allowed limit.';
$wb['run_min_error_format'] = 'Invalid format for minutes.';
$wb['run_hour_error_format'] = 'Invalid format for hours.';
$wb['run_mday_error_format'] = 'Invalid format for days of month.';
$wb['run_month_error_format'] = 'Invalid format for months.';
$wb['run_wday_error_format'] = 'Invalid format for days of the week.';
$wb['command_error_format'] = 'Invalid command format. Please note that in case of an url call only http/https is allowed.';
$wb['unknown_fieldtype_error'] = 'An unknown field type has been used.';
?>
interface/web/sites/lib/lang/nl_cron_list.lng
New file
@@ -0,0 +1,12 @@
<?php
$wb["list_head_txt"] = 'Cron Jobs';
$wb["active_txt"] = 'Active';
$wb["server_id_txt"] = 'Server';
$wb["run_min_txt"] = 'Minute';
$wb["run_hour_txt"] = 'Hour';
$wb["run_mday_txt"] = 'Day of month';
$wb["run_month_txt"] = 'Month';
$wb["run_wday_txt"] = 'Day of week';
$wb["command_txt"] = 'Command';
$wb["add_new_cron_txt"] = 'Add new Cron job';
?>
interface/web/sites/lib/lang/nl_database.lng
@@ -18,4 +18,6 @@
$wb['limit_database_txt'] = 'The max. aantal databases is bereikt.';
$wb['database_name_change_txt'] = 'De databasenaam kan niet worden gewijzigd.';
$wb['database_charset_change_txt'] = 'The database karakterset kan niet gewijzigd worden.';
$wb['remote_ips_txt'] = 'Remote Access IPs (separate by , and leave blank for <i>any</i>)';
$wb['database_remote_error_ips'] = 'At least one of the entered ip addresses is invalid.';
?>
interface/web/sites/lib/lang/nl_ftp_user.lng
@@ -22,4 +22,5 @@
$wb['uid_error_empty'] = 'GID is leeg.';
$wb['directory_error_empty'] = 'Directorie is leeg.';
$wb['quota_files_unity_txt'] = 'Files';
$wb['directory_error_notinweb'] = 'Directory not inside of web root directory.';
?>
interface/web/sites/lib/lang/nl_web_sites_stats_list.lng
New file
@@ -0,0 +1,8 @@
<?php
$wb['list_head_txt'] = 'Web verkeer';
$wb['domain_txt'] = 'Domain';
$wb['this_month_txt'] = 'Deze maand';
$wb['last_month_txt'] = 'Laatste maand';
$wb['this_year_txt'] = 'Dit jaar';
$wb['last_year_txt'] = 'Vorig jaar';
?>
interface/web/sites/lib/lang/ru_cron.lng
New file
@@ -0,0 +1,21 @@
<?php
$wb["server_id_txt"] = 'Server';
$wb['parent_domain_id_txt'] = 'Parent website';
$wb['active_txt'] = 'Active';
$wb['client_txt'] = 'Client';
$wb['run_min_txt'] = 'Minutes';
$wb['run_hour_txt'] = 'Hours';
$wb['run_mday_txt'] = 'Days of month';
$wb['run_month_txt'] = 'Months';
$wb['run_wday_txt'] = 'Days of week';
$wb['command_txt'] = 'Command to run (commands are executed via sh, urls via wget)';
$wb['limit_cron_txt'] = 'The maximum number of allowed cron jobs was reached.';
$wb['limit_cron_frequency_txt'] = 'The cron job frequency exceeds the allowed limit.';
$wb['run_min_error_format'] = 'Invalid format for minutes.';
$wb['run_hour_error_format'] = 'Invalid format for hours.';
$wb['run_mday_error_format'] = 'Invalid format for days of month.';
$wb['run_month_error_format'] = 'Invalid format for months.';
$wb['run_wday_error_format'] = 'Invalid format for days of the week.';
$wb['command_error_format'] = 'Invalid command format. Please note that in case of an url call only http/https is allowed.';
$wb['unknown_fieldtype_error'] = 'An unknown field type has been used.';
?>
interface/web/sites/lib/lang/ru_cron_list.lng
New file
@@ -0,0 +1,12 @@
<?php
$wb["list_head_txt"] = 'Cron Jobs';
$wb["active_txt"] = 'Active';
$wb["server_id_txt"] = 'Server';
$wb["run_min_txt"] = 'Minute';
$wb["run_hour_txt"] = 'Hour';
$wb["run_mday_txt"] = 'Day of month';
$wb["run_month_txt"] = 'Month';
$wb["run_wday_txt"] = 'Day of week';
$wb["command_txt"] = 'Command';
$wb["add_new_cron_txt"] = 'Add new Cron job';
?>
interface/web/sites/lib/lang/ru_database.lng
@@ -18,4 +18,6 @@
$wb['database_name_change_txt'] = 'The database name can not be changed';
$wb['database_charset_change_txt'] = 'The database charset can not be changed';
$wb['password_strength_txt'] = 'Password strength';
$wb['remote_ips_txt'] = 'Remote Access IPs (separate by , and leave blank for <i>any</i>)';
$wb['database_remote_error_ips'] = 'At least one of the entered ip addresses is invalid.';
?>
interface/web/sites/lib/lang/ru_ftp_user.lng
@@ -22,4 +22,5 @@
$wb['directory_error_empty'] = 'Directory empty.';
$wb['password_strength_txt'] = 'Password strength';
$wb['quota_files_unity_txt'] = 'Files';
$wb['directory_error_notinweb'] = 'Directory not inside of web root directory.';
?>
interface/web/sites/lib/lang/ru_web_sites_stats_list.lng
New file
@@ -0,0 +1,8 @@
<?php
$wb['list_head_txt'] = 'Web трафик';
$wb['domain_txt'] = 'Domain';
$wb['this_month_txt'] = 'Этот месяц';
$wb['last_month_txt'] = 'Последний месяц';
$wb['this_year_txt'] = 'Этот год';
$wb['last_year_txt'] = 'Последний год';
?>
interface/web/sites/lib/lang/se_cron.lng
New file
@@ -0,0 +1,21 @@
<?php
$wb["server_id_txt"] = 'Server';
$wb['parent_domain_id_txt'] = 'Parent website';
$wb['active_txt'] = 'Active';
$wb['client_txt'] = 'Client';
$wb['run_min_txt'] = 'Minutes';
$wb['run_hour_txt'] = 'Hours';
$wb['run_mday_txt'] = 'Days of month';
$wb['run_month_txt'] = 'Months';
$wb['run_wday_txt'] = 'Days of week';
$wb['command_txt'] = 'Command to run (commands are executed via sh, urls via wget)';
$wb['limit_cron_txt'] = 'The maximum number of allowed cron jobs was reached.';
$wb['limit_cron_frequency_txt'] = 'The cron job frequency exceeds the allowed limit.';
$wb['run_min_error_format'] = 'Invalid format for minutes.';
$wb['run_hour_error_format'] = 'Invalid format for hours.';
$wb['run_mday_error_format'] = 'Invalid format for days of month.';
$wb['run_month_error_format'] = 'Invalid format for months.';
$wb['run_wday_error_format'] = 'Invalid format for days of the week.';
$wb['command_error_format'] = 'Invalid command format. Please note that in case of an url call only http/https is allowed.';
$wb['unknown_fieldtype_error'] = 'An unknown field type has been used.';
?>
interface/web/sites/lib/lang/se_cron_list.lng
New file
@@ -0,0 +1,12 @@
<?php
$wb["list_head_txt"] = 'Cron Jobs';
$wb["active_txt"] = 'Active';
$wb["server_id_txt"] = 'Server';
$wb["run_min_txt"] = 'Minute';
$wb["run_hour_txt"] = 'Hour';
$wb["run_mday_txt"] = 'Day of month';
$wb["run_month_txt"] = 'Month';
$wb["run_wday_txt"] = 'Day of week';
$wb["command_txt"] = 'Command';
$wb["add_new_cron_txt"] = 'Add new Cron job';
?>
interface/web/sites/lib/lang/se_database.lng
@@ -18,4 +18,6 @@
$wb['limit_database_txt'] = 'The max. number of databases is reached.';
$wb['database_name_change_txt'] = 'The database name can not be changed';
$wb['database_charset_change_txt'] = 'The database charset can not be changed';
$wb['remote_ips_txt'] = 'Remote Access IPs (separate by , and leave blank for <i>any</i>)';
$wb['database_remote_error_ips'] = 'At least one of the entered ip addresses is invalid.';
?>
interface/web/sites/lib/lang/se_ftp_user.lng
@@ -22,4 +22,5 @@
$wb['uid_error_empty'] = 'GID empty.';
$wb['directory_error_empty'] = 'Directory empty.';
$wb['quota_files_unity_txt'] = 'Files';
$wb['directory_error_notinweb'] = 'Directory not inside of web root directory.';
?>
interface/web/sites/lib/lang/se_web_sites_stats_list.lng
New file
@@ -0,0 +1,8 @@
<?php
$wb['list_head_txt'] = 'Web traffic';
$wb['domain_txt'] = 'Domain';
$wb['this_month_txt'] = 'This month';
$wb['last_month_txt'] = 'Last month';
$wb['this_year_txt'] = 'This year';
$wb['last_year_txt'] = 'Last year';
?>
interface/web/sites/lib/module.conf.php
@@ -20,9 +20,9 @@
                  'link'    => 'sites/web_subdomain_list.php');
$items[] = array( 'title'     => "Aliasdomain",
                  'target'     => 'content',
                  'link'    => 'sites/web_aliasdomain_list.php');
$items[] = array( 'title'   => "Aliasdomain",
                  'target'  => 'content',
                  'link'    => 'sites/web_aliasdomain_list.php');
$module["nav"][] = array(    'title'    => 'Websites',
                            'open'     => 1,
@@ -76,6 +76,36 @@
                            'open'     => 1,
                            'items'    => $items);
/*
    Cron menu
*/
$items = array();
$items[] = array( 'title'   => "Cron Jobs",
                  'target'  => 'content',
                  'link'    => 'sites/cron_list.php');
$module["nav"][] = array(   'title' => 'Cron',
                            'open'  => 1,
                            'items' => $items);
//**** Statistics menu
$items = array();
$items[] = array( 'title'   => 'Web traffic',
                  'target'  => 'content',
                  'link'    => 'sites/web_sites_stats.php');
$module['nav'][] = array(   'title' => 'Statistics',
                            'open'  => 1,
                            'items' => $items);
// clean up
unset($items);
interface/web/sites/list/cron.list.php
New file
@@ -0,0 +1,152 @@
<?php
/*
    Datatypes:
    - INTEGER
    - DOUBLE
    - CURRENCY
    - VARCHAR
    - TEXT
    - DATE
*/
// Name of the list
$liste["name"]                 = "cron";
// Database table
$liste["table"]             = "cron";
// Index index field of the database table
$liste["table_idx"]            = "id";
// Search Field Prefix
$liste["search_prefix"]     = "search_";
// Records per page
$liste["records_per_page"]     = 15;
// Script File of the list
$liste["file"]                = "cron_list.php";
// Script file of the edit form
$liste["edit_file"]            = "cron_edit.php";
// Script File of the delete script
$liste["delete_file"]        = "cron_del.php";
// Paging Template
$liste["paging_tpl"]        = "templates/paging.tpl.htm";
// Enable auth
$liste["auth"]                = "yes";
/*****************************************************
* Suchfelder
*****************************************************/
$liste["item"][] = array(    'field'        => "active",
                            'datatype'    => "VARCHAR",
                            'formtype'    => "SELECT",
                            'op'        => "=",
                            '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>"));
$liste["item"][] = array(    'field'        => "server_id",
                            'datatype'    => "VARCHAR",
                            'formtype'    => "SELECT",
                            'op'        => "like",
                            'prefix'    => "%",
                            'suffix'    => "%",
                            'datasource'    => array (     'type'    => 'SQL',
                                                        'querystring' => 'SELECT server_id,server_name FROM server WHERE {AUTHSQL} ORDER BY server_name',
                                                        'keyfield'=> 'server_id',
                                                        'valuefield'=> 'server_name'
                                                       ),
                            'width'        => "",
                            'value'        => "");
$liste["item"][] = array(   'field'     => "parent_domain_id",
                            'datatype'  => "VARCHAR",
                            'formtype'  => "SELECT",
                            'op'        => "like",
                            'prefix'    => "%",
                            'suffix'    => "%",
                            'datasource'    => array (  'type'  => 'SQL',
                                        'querystring' => "SELECT domain_id,domain FROM web_domain WHERE type = 'vhost' AND {AUTHSQL} ORDER BY domain",
                                        'keyfield'=> 'domain_id',
                                        'valuefield'=> 'domain'
                                     ),
                            'width'     => "",
                            'value'     => "");
$liste["item"][] = array(   'field'     => "run_min",
                            'datatype'  => "VARCHAR",
                            'formtype'  => "TEXT",
                            'op'        => "=",
                            'prefix'    => "",
                            'suffix'    => "",
                            'width'     => "",
                            'value'     => "");
$liste["item"][] = array(   'field'     => "run_hour",
                            'datatype'  => "VARCHAR",
                            'formtype'  => "TEXT",
                            'op'        => "=",
                            'prefix'    => "",
                            'suffix'    => "",
                            'width'     => "",
                            'value'     => "");
$liste["item"][] = array(   'field'     => "run_mday",
                            'datatype'  => "VARCHAR",
                            'formtype'  => "TEXT",
                            'op'        => "=",
                            'prefix'    => "",
                            'suffix'    => "",
                            'width'     => "",
                            'value'     => "");
$liste["item"][] = array(   'field'     => "run_month",
                            'datatype'  => "VARCHAR",
                            'formtype'  => "TEXT",
                            'op'        => "=",
                            'prefix'    => "",
                            'suffix'    => "",
                            'width'     => "",
                            'value'     => "");
$liste["item"][] = array(   'field'     => "run_wday",
                            'datatype'  => "VARCHAR",
                            'formtype'  => "TEXT",
                            'op'        => "=",
                            'prefix'    => "",
                            'suffix'    => "",
                            'width'     => "",
                            'value'     => "");
$liste["item"][] = array(    'field'        => "command",
                            'datatype'    => "VARCHAR",
                            'formtype'    => "TEXT",
                            'op'        => "like",
                            'prefix'    => "%",
                            'suffix'    => "%",
                            'width'        => "",
                            'value'        => "");
?>
interface/web/sites/list/web_sites_stats.list.php
New file
@@ -0,0 +1,60 @@
<?php
/*
    Datatypes:
    - INTEGER
    - DOUBLE
    - CURRENCY
    - VARCHAR
    - TEXT
    - DATE
*/
// Name of the list
$liste["name"]                 = "web_sites_stats";
// Database table
$liste["table"]             = "web_domain";
// Index index field of the database table
$liste["table_idx"]            = "domain_id";
// Search Field Prefix
$liste["search_prefix"]     = "search_";
// Records per page
$liste["records_per_page"]     = 15;
// Script File of the list
$liste["file"]                = "web_sites_stats.php";
// Script file of the edit form
$liste["edit_file"]            = "web_domain_edit.php";
// Script File of the delete script
$liste["delete_file"]        = "web_domain_del.php";
// Paging Template
$liste["paging_tpl"]        = "templates/paging.tpl.htm";
// Enable auth
$liste["auth"]                = "yes";
/*****************************************************
* Suchfelder
*****************************************************/
$liste["item"][] = array(    'field'        => "domain",
                            'datatype'    => "VARCHAR",
                            'formtype'    => "TEXT",
                            'op'        => "like",
                            'prefix'    => "%",
                            'suffix'    => "%",
                            'width'        => "",
                            'value'        => "");
?>
interface/web/sites/shell_user_edit.php
@@ -56,17 +56,11 @@
        
        // we will check only users, not admins
        if($_SESSION["s"]["user"]["typ"] == 'user') {
            // Get the limits of the client
            $client_group_id = $_SESSION["s"]["user"]["default_group"];
            $client = $app->db->queryOneRecord("SELECT limit_shell_user FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
            // Check if the user may add another shell user.
            if($client["limit_shell_user"] >= 0) {
                $tmp = $app->db->queryOneRecord("SELECT count(shell_user_id) as number FROM shell_user WHERE sys_groupid = $client_group_id");
                if($tmp["number"] >= $client["limit_shell_user"]) {
                    $app->error($app->tform->wordbook["limit_shell_user_txt"]);
                }
            if(!$app->tform->checkClientLimit('limit_shell_user')) {
                $app->error($app->tform->wordbook["limit_shell_user_txt"]);
            }
            if(!$app->tform->checkResellerLimit('limit_shell_user')) {
                $app->error('Reseller: '.$app->tform->wordbook["limit_shell_user_txt"]);
            }
        }
        
@@ -115,6 +109,9 @@
        // Set a few fixed values
        $this->dataRecord["server_id"] = $parent_domain["server_id"];
        
        if(isset($this->dataRecord['username']) && trim($this->dataRecord['username']) == '') $app->tform->errorMessage .= $app->tform->lng('username_error_empty').'<br />';
        if(isset($this->dataRecord['username']) && empty($this->dataRecord['parent_domain_id'])) $app->tform->errorMessage .= $app->tform->lng('parent_domain_id_error_empty').'<br />';
        parent::onSubmit();
    }
    
@@ -129,7 +126,7 @@
            }
        }
        unset($blacklist);
        /*
         * If the names should be restricted -> do it!
         */
interface/web/sites/templates/cron_edit.htm
New file
@@ -0,0 +1,68 @@
<h2><tmpl_var name="list_head_txt"></h2>
<p><tmpl_var name="list_desc_txt"></p>
<div class="panel panel_cron">
  <div class="pnl_formsarea">
    <fieldset class="inlineLabels"><legend>Cron Job</legend>
      <div class="ctrlHolder">
        <tmpl_if name="edit_disabled">
        <label for="parent_domain_id">{tmpl_var name='parent_domain_id_txt'}</label>
        <select name="parent_domain_id" id="parent_domain_id" class="selectInput" disabled="disabled">
                    {tmpl_var name='parent_domain_id'}
        </select>
        <input type="hidden" name="parent_domain_id" value="{tmpl_var name='parent_domain_id_value'}" />
        <tmpl_else>
        <label for="parent_domain_id">{tmpl_var name='parent_domain_id_txt'}</label>
        <select name="parent_domain_id" id="parent_domain_id" class="selectInput">
                    {tmpl_var name='parent_domain_id'}
        </select>
        </tmpl_if>
      </div>
      <div class="ctrlHolder">
        <label for="run_min">{tmpl_var name='run_min_txt'}</label>
        <input name="run_min" id="run_min" value="{tmpl_var name='run_min'}" size="10" maxlength="255" type="text" class="textInput" />
                <p class="formHint">e.g. *, */3, 10-20</p>
            </div>
      <div class="ctrlHolder">
        <label for="run_hour">{tmpl_var name='run_hour_txt'}</label>
        <input name="run_hour" id="run_hour" value="{tmpl_var name='run_hour'}" size="10" maxlength="255" type="text" class="textInput" />
                <p class="formHint">e.g. *, */2, 0, 10-12</p>
            </div>
      <div class="ctrlHolder">
        <label for="run_mday">{tmpl_var name='run_mday_txt'}</label>
        <input name="run_mday" id="run_mday" value="{tmpl_var name='run_mday'}" size="10" maxlength="255" type="text" class="textInput" />
                <p class="formHint">e.g. *, */4, 1-5</p>
            </div>
      <div class="ctrlHolder">
        <label for="run_month">{tmpl_var name='run_month_txt'}</label>
        <input name="run_month" id="run_month" value="{tmpl_var name='run_month'}" size="10" maxlength="255" type="text" class="textInput" />
                <p class="formHint">e.g. *, 1-6</p>
            </div>
      <div class="ctrlHolder">
        <label for="run_wday">{tmpl_var name='run_wday_txt'}</label>
        <input name="run_wday" id="run_wday" value="{tmpl_var name='run_wday'}" size="10" maxlength="255" type="text" class="textInput" />
                <p class="formHint">e.g. *, 0, 1-5</p>
            </div>
      <div class="ctrlHolder">
          <label for="command">{tmpl_var name='command_txt'}</label>
        <input name="command" id="command" value="{tmpl_var name='command'}" size="30" maxlength="255" type="text" class="textInput" />
                <p class="formHint">e.g. /var/www/clients/client1/myscript.sh or http://www.mydomain.com/path/script.php</p>
            </div>
      <div class="ctrlHolder">
                <p class="label">{tmpl_var name='active_txt'}</p>
                    <div class="multiField">
                        {tmpl_var name='active'}
                    </div>
            </div>
    </fieldset>
    <input type="hidden" name="id" value="{tmpl_var name='id'}">
    <div class="buttonHolder buttons">
      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','sites/cron_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('sites/cron_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
    </div>
  </div>
</div>
interface/web/sites/templates/cron_list.htm
New file
@@ -0,0 +1,71 @@
<h2><tmpl_var name="list_head_txt"></h2>
<p><tmpl_var name="list_desc_txt"></p>
<div class="panel panel_list_cron">
  <div class="pnl_toolsarea">
    <fieldset><legend>Tools</legend>
      <div class="buttons">
        <button class="iconstxt icoAdd" type="button" onClick="loadContent('sites/cron_edit.php');">
          <span>{tmpl_var name="add_new_cron_txt"}</span>
        </button>
      </div>
    </fieldset>
  </div>
  <div class="pnl_listarea">
    <fieldset><legend><tmpl_var name="list_head_txt"></legend>
      <table class="list">
        <thead>
          <tr>
            <th class="tbl_col_active" scope="col"><tmpl_var name="active_txt"></th>
            <th class="tbl_col_server_id" scope="col"><tmpl_var name="server_id_txt"></th>
            <th class="tbl_col_run_min" scope="col"><tmpl_var name="run_min_txt"></th>
            <th class="tbl_col_run_hour" scope="col"><tmpl_var name="run_hour_txt"></th>
            <th class="tbl_col_run_mday" scope="col"><tmpl_var name="run_mday_txt"></th>
            <th class="tbl_col_run_month" scope="col"><tmpl_var name="run_month_txt"></th>
            <th class="tbl_col_run_wday" scope="col"><tmpl_var name="run_wday_txt"></th>
            <th class="tbl_col_command" scope="col"><tmpl_var name="command_txt"></th>
            <th class="tbl_col_buttons" scope="col">&nbsp;</th>
          </tr>
          <tr>
            <td class="tbl_col_active"><select name="search_active" onChange="submitForm('pageForm','sites/cron_list.php');">{tmpl_var name='search_active'}</select></td>
            <td class="tbl_col_server_id"><select name="search_server_id" onChange="submitForm('pageForm','sites/cron_list.php');">{tmpl_var name='search_server_id'}</select></td>
            <td class="tbl_col_run_min"><input type="text" name="search_run_min" size="3" value="{tmpl_var name='search_run_min'}" /></td>
            <td class="tbl_col_run_hour"><input type="text" name="search_run_hour" size="3" value="{tmpl_var name='search_run_hour'}" /></td>
            <td class="tbl_col_run_mday"><input type="text" name="search_run_mday" size="3" value="{tmpl_var name='search_run_mday'}" /></td>
            <td class="tbl_col_run_month"><input type="text" name="search_run_month" size="3" value="{tmpl_var name='search_run_month'}" /></td>
            <td class="tbl_col_run_wday"><input type="text" name="search_run_wday" size="3" value="{tmpl_var name='search_run_wday'}" /></td>
            <td class="tbl_col_command"><input type="text" name="search_command" value="{tmpl_var name='search_command'}" /></td>
            <td class="tbl_col_buttons"><div class="buttons"><button type="button" class="icons16 icoFilter" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" onClick="submitForm('pageForm','sites/cron_list.php');"><span>{tmpl_var name="filter_txt"}</span></button></div></td>
          </tr>
        </thead>
        <tbody>
          <tmpl_loop name="records">
          <tr class="tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
            <td class="tbl_col_active"><a href="#" onClick="loadContent('sites/cron_edit.php?id={tmpl_var name='id'}');"><img src="themes/{tmpl_var name='theme'}/icons/{tmpl_var name='_active_'}" border="0" /></a></td>
            <td class="tbl_col_server_id"><a href="#" onClick="loadContent('sites/cron_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="server_id"}</a></td>
            <td class="tbl_col_run_min"><a href="#" onClick="loadContent('sites/cron_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="run_min"}</a></td>
            <td class="tbl_col_run_hour"><a href="#" onClick="loadContent('sites/cron_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="run_hour"}</a></td>
            <td class="tbl_col_run_mday"><a href="#" onClick="loadContent('sites/cron_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="run_mday"}</a></td>
            <td class="tbl_col_run_month"><a href="#" onClick="loadContent('sites/cron_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="run_month"}</a></td>
            <td class="tbl_col_run_wday"><a href="#" onClick="loadContent('sites/cron_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="run_wday"}</a></td>
            <td class="tbl_col_commnd"><a href="#" onClick="loadContent('sites/cron_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="command"}</a></td>
            <td class="tbl_col_buttons">
              <div class="buttons icons16">
                <a class="icons16 icoDelete" href="javascript: del_record('sites/cron_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span>{tmpl_var name='delete_txt'}</span></a>
              </div>
            </td>
          </tr>
          </tmpl_loop>
        </tbody>
        <tfoot>
          <tr>
            <td class="tbl_footer tbl_paging" colspan="9"><tmpl_var name="paging"></td>
          </tr>
        </tfoot>
      </table>
    </fieldset>
  </div>
</div>
interface/web/sites/templates/database_edit.htm
@@ -80,11 +80,15 @@
        </tmpl_if>
      </div>
      <div class="ctrlHolder">
                <p class="label">{tmpl_var name='remote_access_txt'}</p>
                    <div class="multiField">
                        {tmpl_var name='remote_access'}
                    </div>
            </div>
        <p class="label">{tmpl_var name='remote_access_txt'}</p>
          <div class="multiField">
            {tmpl_var name='remote_access'}
          </div>
      </div>
      <div class="ctrlHolder">
        <label for="remote_ips">{tmpl_var name='remote_ips_txt'}</label>
        <input name="remote_ips" id="remote_ips" value="{tmpl_var name='remote_ips'}" size="60" type="text" class="textInput formLengthHalf" />
      </div>
      <div class="ctrlHolder">
                <p class="label">{tmpl_var name='active_txt'}</p>
                    <div class="multiField">
interface/web/sites/templates/ftp_user_advanced_client.htm
New file
@@ -0,0 +1,22 @@
<h2><tmpl_var name="list_head_txt"></h2>
<p><tmpl_var name="list_desc_txt"></p>
<div class="panel panel_ftp_user">
  <div class="pnl_formsarea">
    <fieldset class="inlineLabels">
      <div class="ctrlHolder">
          <label for="dir">{tmpl_var name='dir_txt'}</label>
        <input name="dir" id="dir" value="{tmpl_var name='dir'}" size="30" maxlength="255" type="text" class="textInput" />
            </div>
    </fieldset>
    <input type="hidden" name="id" value="{tmpl_var name='id'}">
    <div class="buttonHolder buttons">
      <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','sites/ftp_user_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
      <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('sites/ftp_user_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
    </div>
  </div>
</div>
interface/web/sites/templates/web_sites_stats_list.htm
New file
@@ -0,0 +1,52 @@
<h2><tmpl_var name="list_head_txt"></h2>
<p><tmpl_var name="list_desc_txt"></p>
<div class="panel panel_list_web_sites_stats">
  <div class="pnl_listarea">
    <fieldset><legend><tmpl_var name="list_head_txt"></legend>
      <table class="list">
        <thead>
          <tr>
            <th class="tbl_col_domain" scope="col"><tmpl_var name="domain_txt"></th>
            <th class="tbl_col_this_month" scope="col"><tmpl_var name="this_month_txt"></th>
            <th class="tbl_col_last_month" scope="col"><tmpl_var name="last_month_txt"></th>
            <th class="tbl_col_this_year" scope="col"><tmpl_var name="this_year_txt"></th>
            <th class="tbl_col_last_year" scope="col"><tmpl_var name="last_year_txt"></th>
            <th class="tbl_col_buttons" scope="col">&nbsp;</th>
          </tr>
          <tr>
            <td class="tbl_col_domain"><input type="text" name="search_domain" value="{tmpl_var name='search_domain'}" /></td>
            <td class="tbl_col_this_month"></td>
            <td class="tbl_col_last_month"></td>
            <td class="tbl_col_this_year"></td>
            <td class="tbl_col_last_year"></td>
            <td class="tbl_col_buttons"><div class="buttons"><button type="button" class="icons16 icoFilter" name="Filter" id="Filter" value="{tmpl_var name="filter_txt"}" onClick="submitForm('pageForm','sites/web_sites_stats.php');"><span>{tmpl_var name="filter_txt"}</span></button></div></td>
          </tr>
        </thead>
        <tbody>
          <tmpl_loop name="records">
          <tr class="tbl_row_<tmpl_if name='__EVEN__'}even<tmpl_else>uneven</tmpl_if>">
            <td class="tbl_col_domain"><a href="#" onClick="loadContent('sites/web_domain_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="domain"}</a></td>
            <td class="tbl_col_this_month"><a href="#" onClick="loadContent('sites/web_domain_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="this_month"} kB</a></td>
            <td class="tbl_col_last_month"><a href="#" onClick="loadContent('sites/web_domain_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="last_month"} kB</a></td>
            <td class="tbl_col_this_year"><a href="#" onClick="loadContent('sites/web_domain_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="this_year"} kB</a></td>
            <td class="tbl_col_last_year"><a href="#" onClick="loadContent('sites/web_domain_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="last_year"} kB</a></td>
            <td class="tbl_col_buttons">
              <div class="buttons icons16">
              </div>
            </td>
          </tr>
          </tmpl_loop>
        </tbody>
        <tfoot>
          <tr>
            <td class="tbl_footer tbl_paging" colspan="6"><tmpl_var name="paging"></td>
          </tr>
        </tfoot>
      </table>
    </fieldset>
  </div>
</div>
interface/web/sites/web_aliasdomain_edit.php
@@ -57,17 +57,11 @@
        
        // we will check only users, not admins
        if($_SESSION["s"]["user"]["typ"] == 'user') {
            // Get the limits of the client
            $client_group_id = $_SESSION["s"]["user"]["default_group"];
            $client = $app->db->queryOneRecord("SELECT limit_web_aliasdomain FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
            // Check if the user may add another maildomain.
            if($client["limit_web_aliasdomain"] >= 0) {
                $tmp = $app->db->queryOneRecord("SELECT count(domain_id) as number FROM web_domain WHERE sys_groupid = $client_group_id and type = 'alias'");
                if($tmp["number"] >= $client["limit_web_aliasdomain"]) {
                    $app->error($app->tform->wordbook["limit_web_aliasdomain_txt"]);
                }
            if(!$app->tform->checkClientLimit('limit_web_aliasdomain',"type = 'alias'")) {
                $app->error($app->tform->wordbook["limit_web_aliasdomain_txt"]);
            }
            if(!$app->tform->checkResellerLimit('limit_web_aliasdomain',"type = 'alias'")) {
                $app->error('Reseller: '.$app->tform->wordbook["limit_web_aliasdomain_txt"]);
            }
        }
        
interface/web/sites/web_domain_del.php
@@ -72,6 +72,12 @@
        foreach($records as $rec) {
            $app->db->datalogDelete('shell_user','shell_user_id',$rec['shell_user_id']);
        }
        // Delete all records that belog to this zone.
        $records = $app->db->queryAllRecords("SELECT id FROM cron WHERE parent_domain_id = '".intval($this->id)."'");
        foreach($records as $rec) {
            $app->db->datalogDelete('cron','id',$rec['id']);
        }
    }
}
interface/web/sites/web_domain_edit.php
@@ -55,17 +55,11 @@
        
        // we will check only users, not admins
        if($_SESSION["s"]["user"]["typ"] == 'user') {
            // Get the limits of the client
            $client_group_id = $_SESSION["s"]["user"]["default_group"];
            $client = $app->db->queryOneRecord("SELECT limit_web_domain FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
            // Check if the user may add another website.
            if($client["limit_web_domain"] >= 0) {
                $tmp = $app->db->queryOneRecord("SELECT count(domain_id) as number FROM web_domain WHERE sys_groupid = $client_group_id and type = 'vhost'");
                if($tmp["number"] >= $client["limit_web_domain"]) {
                    $app->error($app->tform->wordbook["limit_web_domain_txt"]);
                }
            if(!$app->tform->checkClientLimit('limit_web_domain',"type = 'vhost'")) {
                $app->error($app->tform->wordbook["limit_web_domain_txt"]);
            }
            if(!$app->tform->checkResellerLimit('limit_web_domain',"type = 'vhost'")) {
                $app->error('Reseller: '.$app->tform->wordbook["limit_web_domain_txt"]);
            }
        }
        
@@ -109,7 +103,7 @@
            
            // Get the limits of the client
            $client_group_id = $_SESSION["s"]["user"]["default_group"];
            $client = $app->db->queryOneRecord("SELECT client.client_id, limit_web_domain, default_webserver 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.client_id, limit_web_domain, default_webserver, client.contact_name FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
            
            // Set the webserver to the default server of the client
            $tmp = $app->db->queryOneRecord("SELECT server_name FROM server WHERE server_id = $client[default_webserver]");
@@ -119,7 +113,7 @@
            // Fill the client select field
            $sql = "SELECT groupid, name FROM sys_group, client WHERE sys_group.client_id = client.client_id AND client.parent_client_id = ".$client['client_id'];
            $clients = $app->db->queryAllRecords($sql);
            $client_select = '';
            $client_select = '<option value="'.$client['client_id'].'">'.$client['contact_name'].'</option>';
            if(is_array($clients)) {
                foreach( $clients as $client) {
                    $selected = @($client["groupid"] == $this->dataRecord["sys_groupid"])?'SELECTED':'';
@@ -207,7 +201,7 @@
        if($_SESSION["s"]["user"]["typ"] != 'admin') {
            // Get the limits of the client
            $client_group_id = $_SESSION["s"]["user"]["default_group"];
            $client = $app->db->queryOneRecord("SELECT limit_web_domain, default_webserver FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
            $client = $app->db->queryOneRecord("SELECT limit_web_domain, default_webserver, parent_client_id 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) {
@@ -294,6 +288,16 @@
                }
                unset($rec);
            }
        //* If the user is neither admin nor reseller
        } else {
            //* We do not allow users to change a domain which has been created by the admin
            $rec = $app->db->queryOneRecord("SELECT domain from web_domain WHERE domain_id = ".$this->id);
            if(isset($this->dataRecord["domain"]) && $rec['domain'] != $this->dataRecord["domain"] && $app->tform->checkPerm($this->id,'u')) {
                //* Add a error message and switch back to old server
                $app->tform->errorMessage .= $app->lng('The Domain can not be changed. Please ask your Administrator if you want to change the domain name.');
                $this->dataRecord["domain"] = $rec['domain'];
            }
            unset($rec);
        }
        
        //* Check that all fields for the SSL cert creation are filled
@@ -342,10 +346,10 @@
            // Set the values for document_root, system_user and system_group
            $system_user = 'web'.$this->id;
            $system_group = 'client'.$client_id;
            //$document_root = str_replace("[client_id]",$client_id,$document_root);
            $document_root = str_replace("[client_id]",$client_id,$document_root);
        
            // $sql = "UPDATE web_domain SET system_user = '$system_user', system_group = '$system_group', document_root = '$document_root' WHERE domain_id = ".$this->id;
            $sql = "UPDATE web_domain SET system_user = '$system_user', system_group = '$system_group' WHERE domain_id = ".$this->id;
            $sql = "UPDATE web_domain SET system_user = '$system_user', system_group = '$system_group', document_root = '$document_root' WHERE domain_id = ".$this->id;
            //$sql = "UPDATE web_domain SET system_user = '$system_user', system_group = '$system_group' WHERE domain_id = ".$this->id;
            $app->db->query($sql);
        }
        
interface/web/sites/web_sites_stats.php
New file
@@ -0,0 +1,64 @@
<?php
require_once('../../lib/config.inc.php');
require_once('../../lib/app.inc.php');
/******************************************
* Begin Form configuration
******************************************/
$list_def_file = "list/web_sites_stats.list.php";
/******************************************
* End Form configuration
******************************************/
//* Check permissions for module
$app->auth->check_module_permissions('sites');
$app->load('listform_actions');
class list_action extends listform_actions {
    function prepareDataRow($rec)
    {
        global $app;
        $rec = $app->listform->decode($rec);
        //* Alternating datarow colors
        $this->DataRowColor = ($this->DataRowColor == '#FFFFFF') ? '#EEEEEE' : '#FFFFFF';
        $rec['bgcolor'] = $this->DataRowColor;
        //* Set the statistics colums
        //** Traffic of the current month
        $tmp_year = date('Y');
        $tmp_month = date('m');
        $tmp_rec = $app->db->queryOneRecord("SELECT SUM(traffic_bytes) as t FROM web_traffic WHERE hostname = '".$rec['domain']."' AND YEAR(traffic_date) = '$tmp_year' AND MONTH(traffic_date) = '$tmp_month'");
        $rec['this_month'] = number_format(intval($tmp_rec['t'])/1024, 0, '.', ' ');
        //** Traffic of the current year
        $tmp_rec = $app->db->queryOneRecord("SELECT sum(traffic_bytes) as t FROM web_traffic WHERE hostname = '".$rec['domain']."' AND YEAR(traffic_date) = '$tmp_year'");
        $rec['this_year'] = number_format(intval($tmp_rec['t'])/1024, 0, '.', ' ');
        //** Traffic of the last month
        $tmp_year = date('Y',mktime(0, 0, 0, date("m")-1, date("d"), date("Y")));
        $tmp_month = date('m',mktime(0, 0, 0, date("m")-1, date("d"), date("Y")));
        $tmp_rec = $app->db->queryOneRecord("SELECT sum(traffic_bytes) as t FROM web_traffic WHERE hostname = '".$rec['domain']."' AND YEAR(traffic_date) = '$tmp_year' AND MONTH(traffic_date) = '$tmp_month'");
        $rec['last_month'] = number_format(intval($tmp_rec['t'])/1024, 0, '.', ' ');
        //** Traffic of the last year
        $tmp_year = date('Y',mktime(0, 0, 0, date("m"), date("d"), date("Y")-1));
        $tmp_rec = $app->db->queryOneRecord("SELECT sum(traffic_bytes) as t FROM web_traffic WHERE hostname = '".$rec['domain']."' AND YEAR(traffic_date) = '$tmp_year'");
        $rec['last_year'] = number_format(intval($tmp_rec['t'])/1024, 0, '.', ' ');
        //* The variable "id" contains always the index variable
        $rec['id'] = $rec[$this->idx_key];
        return $rec;
    }
}
$list = new list_action;
$list->onLoad();
?>
interface/web/sites/web_subdomain_edit.php
@@ -57,17 +57,11 @@
        
        // we will check only users, not admins
        if($_SESSION["s"]["user"]["typ"] == 'user') {
            // Get the limits of the client
            $client_group_id = $_SESSION["s"]["user"]["default_group"];
            $client = $app->db->queryOneRecord("SELECT limit_web_subdomain FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
            // Check if the user may add another maildomain.
            if($client["limit_web_subdomain"] >= 0) {
                $tmp = $app->db->queryOneRecord("SELECT count(domain_id) as number FROM web_domain WHERE sys_groupid = $client_group_id and type = 'subdomain'");
                if($tmp["number"] >= $client["limit_web_subdomain"]) {
                    $app->error($app->tform->wordbook["limit_web_subdomain_txt"]);
                }
            if(!$app->tform->checkClientLimit('limit_web_subdomain',"type = 'subdomain'")) {
                $app->error($app->tform->wordbook["limit_web_subdomain_txt"]);
            }
            if(!$app->tform->checkResellerLimit('limit_web_subdomain',"type = 'subdomain'")) {
                $app->error('Reseller: '.$app->tform->wordbook["limit_web_subdomain_txt"]);
            }
        }
        
interface/web/strengthmeter/lib/lang/br_strengthmeter.lng
New file
@@ -0,0 +1,9 @@
<?php
$wb['password_strength_0_txt'] = 'Muito Curto';
$wb['password_strength_1_txt'] = 'Fraco';
$wb['password_strength_2_txt'] = 'Rasoável';
$wb['password_strength_3_txt'] = 'Bom';
$wb['password_strength_4_txt'] = 'Forte';
$wb['password_strength_5_txt'] = 'Muito Forte';
?>
interface/web/tools/lib/lang/br.lng
New file
@@ -0,0 +1,7 @@
<?php
$wb['User Settings'] = 'Configurações do Usuário';
$wb['Settings'] = 'Configurações';
$wb['ISPConfig Tools'] = 'Ferramentas';
$wb['Password and Language'] = 'Senha e Idioma';
?>
interface/web/tools/lib/lang/br_usersettings.lng
New file
@@ -0,0 +1,9 @@
<?php
$wb['passwort_txt'] = 'Senha';
$wb['password_strength_txt'] = 'Segurança de Senha';
$wb['language_txt'] = 'Idioma';
$wb['password_mismatch'] = 'As senhas não conhecidem';
$wb['Form to edit the user password and language.'] = 'Formulário para alterar idioma e senha';
$wb['Settings'] = 'Configurações';
?>
server/conf/apache_ispconfig.conf.master
@@ -4,7 +4,7 @@
################################################
LogFormat "%v %h %l %u %t \"%r\" %>s %B \"%{Referer}i\" \"%{User-Agent}i\"" combined_ispconfig
CustomLog "| /usr/sbin/vlogger -s access.log -t \"%Y%m%d-access.log\" /var/log/ispconfig/httpd" combined_ispconfig
CustomLog "| /usr/local/ispconfig/server/scripts/vlogger -s access.log -t \"%Y%m%d-access.log\" -d \"/etc/vlogger-dbi.conf\" /var/log/ispconfig/httpd" combined_ispconfig
<Directory /var/www/clients>
    AllowOverride None
server/conf/php-fcgi-starter.master
@@ -7,4 +7,8 @@
export PHP_FCGI_CHILDREN
PHP_FCGI_MAX_REQUESTS=<tmpl_var name='php_fcgi_max_requests'>
export PHP_FCGI_MAX_REQUESTS
exec <tmpl_var name='php_fcgi_bin'> $1
exec <tmpl_var name='php_fcgi_bin'> \
<tmpl_if name="security_level" op="==" value="20"> -d open_basedir=<tmpl_var name='document_root'> \
-d upload_tmp_dir=<tmpl_var name='document_root'>/tmp \
-d session.save_path=<tmpl_var name='document_root'>/tmp \
</tmpl_if> $1
server/conf/vhost.conf.master
@@ -1,295 +1,298 @@
<Directory {tmpl_var name='web_basedir'}/{tmpl_var name='domain'}>
    AllowOverride None
    Order Deny,Allow
    Deny from all
</Directory>
<VirtualHost <tmpl_var name='ip_address'>:80>
<tmpl_if name='php' op='==' value='suphp'>
    DocumentRoot <tmpl_var name='web_document_root'>
</tmpl_else>
  <tmpl_if name='php' op='==' value='cgi'>
    DocumentRoot <tmpl_var name='web_document_root'>
  </tmpl_else>
    DocumentRoot <tmpl_var name='web_document_root_www'>
  </tmpl_if>
</tmpl_if>
    ServerName <tmpl_var name='domain'>
<tmpl_if name='alias'>
    ServerAlias <tmpl_var name='alias'>
</tmpl_if>
    ServerAdmin webmaster@<tmpl_var name='domain'>
    ErrorLog /var/log/ispconfig/httpd/<tmpl_var name='domain'>/error.log
<tmpl_if name='errordocs'>
    ErrorDocument 400 /error/400.html
    ErrorDocument 401 /error/401.html
    ErrorDocument 403 /error/403.html
    ErrorDocument 404 /error/404.html
    ErrorDocument 405 /error/405.html
    ErrorDocument 500 /error/500.html
    ErrorDocument 503 /error/503.html
</tmpl_if>
    <Directory {tmpl_var name='web_document_root_www'}>
        Options FollowSymLinks
        AllowOverride Indexes AuthConfig Limit FileInfo
        Order allow,deny
        Allow from all
<tmpl_if name='ssi' op='==' value='y'>
        # ssi enabled
        AddType text/html .shtml
        AddOutputFilter INCLUDES .shtml
        Options +Includes
</tmpl_if>
<tmpl_if name='php' op='==' value='no'>
        <Files ~ '.php[s3-6]{0,1}$'>
            Order allow,deny
            Deny from all
            Allow from none
        </Files>
</tmpl_if>
    </Directory>
    <Directory {tmpl_var name='web_document_root'}>
        Options FollowSymLinks
        AllowOverride Indexes AuthConfig Limit FileInfo
        Order allow,deny
        Allow from all
<tmpl_if name='ssi' op='==' value='y'>
        # ssi enabled
        AddType text/html .shtml
        AddOutputFilter INCLUDES .shtml
        Options +Includes
</tmpl_if>
<tmpl_if name='php' op='==' value='no'>
        <Files ~ '.php[s3-6]{0,1}$'>
            Order allow,deny
            Deny from all
            Allow from none
        </Files>
</tmpl_if>
    </Directory>
<tmpl_if name='cgi' op='==' value='y'>
    # cgi enabled
    <Directory {tmpl_var name='document_root'}/cgi-bin>
      Order allow,deny
      Allow from all
    </Directory>
    ScriptAlias  /cgi-bin/ <tmpl_var name='document_root'>/cgi-bin/
    AddHandler cgi-script .cgi
    AddHandler cgi-script .pl
</tmpl_if>
<tmpl_if name='suexec' op='==' value='y'>
    # suexec enabled
    SuexecUserGroup <tmpl_var name='system_user'> <tmpl_var name='system_group'>
</tmpl_if>
<tmpl_if name='php' op='==' value='mod'>
    # mod_php enabled
    AddType application/x-httpd-php .php .php3 .php4 .php5
    php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -fwebmaster@<tmpl_var name='domain'>"
    php_admin_value upload_tmp_dir <tmpl_var name='document_root'>/tmp
    php_admin_value session.save_path <tmpl_var name='document_root'>/tmp
    #php_admin_value open_basedir <tmpl_var name='document_root'>:/usr/share/php5
</tmpl_if>
<tmpl_if name='php' op='==' value='suphp'>
    # suphp enabled
    <Directory {tmpl_var name='web_document_root'}>
        suPHP_Engine on
        # suPHP_UserGroup <tmpl_var name='system_user'> <tmpl_var name='system_group'>
        AddHandler x-httpd-suphp .php .php3 .php4 .php5
        suPHP_AddHandler x-httpd-suphp
    </Directory>
</tmpl_if>
<tmpl_if name='php' op='==' value='cgi'>
    # php as cgi enabled
    ScriptAlias /php5-cgi <tmpl_var name='cgi_starter_path'><tmpl_var name='cgi_starter_script'>
    Action php5-cgi /php5-cgi
    AddHandler php5-cgi .php .php3 .php4 .php5
    <Directory {tmpl_var name='cgi_starter_path'}>
        Order allow,deny
        Allow from all
    </Directory>
</tmpl_if>
<tmpl_if name='php' op='==' value='fast-cgi'>
    # php as fast-cgi enabled
    <Directory {tmpl_var name='web_document_root_www'}>
        AddHandler fcgid-script .php .php3 .php4 .php5
        FCGIWrapper <tmpl_var name='fastcgi_starter_path'><tmpl_var name='fastcgi_starter_script'> .php
        Options +ExecCGI
        AllowOverride all
        Order allow,deny
        Allow from all
    </Directory>
</tmpl_if>
<tmpl_if name="rewrite_enabled">
    RewriteEngine on
<tmpl_loop name="redirects">
    RewriteCond %{HTTP_HOST}   ^<tmpl_var name='rewrite_domain'> [NC]
    RewriteRule   ^/(.*)$ <tmpl_var name='rewrite_target'>$1  <tmpl_var name='rewrite_type'>
</tmpl_loop>
</tmpl_if>
<tmpl_var name='apache_directives'>
</VirtualHost>
<tmpl_if name='ssl_enabled'>
<IfModule mod_ssl.c>
###########################################################
# SSL Vhost
###########################################################
<VirtualHost <tmpl_var name='ip_address'>:443>
<tmpl_if name='php' op='==' value='suphp'>
    DocumentRoot <tmpl_var name='web_document_root'>
</tmpl_else>
  <tmpl_if name='php' op='==' value='cgi'>
    DocumentRoot <tmpl_var name='web_document_root'>
  </tmpl_else>
    DocumentRoot <tmpl_var name='web_document_root_www'>
  </tmpl_if>
</tmpl_if>
    ServerName <tmpl_var name='domain'>
<tmpl_if name='alias'>
    ServerAlias <tmpl_var name='alias'>
</tmpl_if>
    ServerAdmin webmaster@<tmpl_var name='domain'>
    ErrorLog /var/log/ispconfig/httpd/<tmpl_var name='domain'>/error.log
<tmpl_if name='errordocs'>
    ErrorDocument 400 /error/400.html
    ErrorDocument 401 /error/401.html
    ErrorDocument 403 /error/403.html
    ErrorDocument 404 /error/404.html
    ErrorDocument 405 /error/405.html
    ErrorDocument 500 /error/500.html
    ErrorDocument 503 /error/503.html
</tmpl_if>
    SSLEngine on
    SSLCertificateFile <tmpl_var name='document_root'>/ssl/<tmpl_var name='domain'>.crt
    SSLCertificateKeyFile <tmpl_var name='document_root'>/ssl/<tmpl_var name='domain'>.key
<tmpl_if name='has_bundle_cert'>
    SSLCACertificateFile <tmpl_var name='document_root'>/ssl/<tmpl_var name='domain'>.bundle
</tmpl_if>
    <Directory {tmpl_var name='web_document_root_www'}>
        Options FollowSymLinks
        AllowOverride Indexes AuthConfig Limit FileInfo
        Order allow,deny
        Allow from all
<tmpl_if name='ssi' op='==' value='y'>
        # ssi enabled
        AddType text/html .shtml
        AddOutputFilter INCLUDES .shtml
        Options +Includes
</tmpl_if>
<tmpl_if name='php' op='==' value='no'>
        <Files ~ '.php[s3-6]{0,1}$'>
            Order allow,deny
            Deny from all
            Allow from none
        </Files>
</tmpl_if>
    </Directory>
    <Directory {tmpl_var name='web_document_root'}>
        Options FollowSymLinks
        AllowOverride Indexes AuthConfig Limit FileInfo
        Order allow,deny
        Allow from all
<tmpl_if name='ssi' op='==' value='y'>
        # ssi enabled
        AddType text/html .shtml
        AddOutputFilter INCLUDES .shtml
        Options +Includes
</tmpl_if>
<tmpl_if name='php' op='==' value='no'>
        <Files ~ '.php[s3-6]{0,1}$'>
            Order allow,deny
            Deny from all
            Allow from none
        </Files>
</tmpl_if>
    </Directory>
<tmpl_if name='cgi' op='==' value='y'>
    # cgi enabled
    <Directory {tmpl_var name='document_root'}/cgi-bin>
      Order allow,deny
      Allow from all
    </Directory>
    ScriptAlias  /cgi-bin/ <tmpl_var name='document_root'>/cgi-bin/
    AddHandler cgi-script .cgi
    AddHandler cgi-script .pl
</tmpl_if>
<tmpl_if name='ssi'op='==' value='y'>
    # ssi enabled
    AddType text/html .shtml
    AddOutputFilter INCLUDES .shtml
</tmpl_if>
<tmpl_if name='suexec'op='==' value='y'>
    # suexec enabled
    SuexecUserGroup <tmpl_var name='system_user'> <tmpl_var name='system_group'>
</tmpl_if>
<tmpl_if name='php' op='==' value='mod'>
    # mod_php enabled
    AddType application/x-httpd-php .php .php3 .php4 .php5
    php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -fwebmaster@<tmpl_var name='domain'>"
    php_admin_value upload_tmp_dir <tmpl_var name='document_root'>/tmp
    php_admin_value session.save_path <tmpl_var name='document_root'>/tmp
    #php_admin_value open_basedir <tmpl_var name='document_root'>:/usr/share/php5
</tmpl_if>
<tmpl_if name='php' op='==' value='suphp'>
    # suphp enabled
    suPHP_Engine on
    # suPHP_UserGroup <tmpl_var name='system_user'> <tmpl_var name='system_group'>
    AddHandler x-httpd-php .php .php3 .php4 .php5
    suPHP_AddHandler x-httpd-php
</tmpl_if>
<tmpl_if name='php' op='==' value='cgi'>
    # php as cgi enabled
    ScriptAlias /php5-cgi <tmpl_var name='cgi_starter_path'><tmpl_var name='cgi_starter_script'>
    Action php5-cgi /php5-cgi
    AddHandler php5-cgi .php .php3 .php4 .php5
    <Directory {tmpl_var name='cgi_starter_path'}>
        Order allow,deny
        Allow from all
    </Directory>
</tmpl_if>
<tmpl_if name='php' op='==' value='fast-cgi'>
    # php as fast-cgi enabled
    <Directory {tmpl_var name='web_document_root_www'}>
        AddHandler fcgid-script .php .php3 .php4 .php5
        FCGIWrapper <tmpl_var name='fastcgi_starter_path'><tmpl_var name='fastcgi_starter_script'> .php
        Options +ExecCGI
        AllowOverride all
        Order allow,deny
        Allow from all
    </Directory>
</tmpl_if>
<tmpl_if name="rewrite_enabled">
    RewriteEngine on
<tmpl_loop name="redirects">
    RewriteCond %{HTTP_HOST}   ^<tmpl_var name='rewrite_domain'> [NC]
    RewriteRule   ^/(.*)$ <tmpl_var name='rewrite_target'>$1  <tmpl_var name='rewrite_type'>
</tmpl_loop>
</tmpl_if>
<tmpl_var name='apache_directives'>
</VirtualHost>
</IfModule>
<Directory {tmpl_var name='web_basedir'}/{tmpl_var name='domain'}>
    AllowOverride None
    Order Deny,Allow
    Deny from all
</Directory>
<VirtualHost <tmpl_var name='ip_address'>:80>
<tmpl_if name='php' op='==' value='suphp'>
    DocumentRoot <tmpl_var name='web_document_root'>
</tmpl_else>
  <tmpl_if name='php' op='==' value='cgi'>
    DocumentRoot <tmpl_var name='web_document_root'>
  </tmpl_else>
    DocumentRoot <tmpl_var name='web_document_root_www'>
  </tmpl_if>
</tmpl_if>
    ServerName <tmpl_var name='domain'>
<tmpl_if name='alias'>
    <tmpl_var name='alias'>
</tmpl_if>
    ServerAdmin webmaster@<tmpl_var name='domain'>
    ErrorLog /var/log/ispconfig/httpd/<tmpl_var name='domain'>/error.log
<tmpl_if name='errordocs'>
    ErrorDocument 400 /error/400.html
    ErrorDocument 401 /error/401.html
    ErrorDocument 403 /error/403.html
    ErrorDocument 404 /error/404.html
    ErrorDocument 405 /error/405.html
    ErrorDocument 500 /error/500.html
    ErrorDocument 503 /error/503.html
</tmpl_if>
    <Directory {tmpl_var name='web_document_root_www'}>
        Options FollowSymLinks
        AllowOverride Indexes AuthConfig Limit FileInfo
        Order allow,deny
        Allow from all
<tmpl_if name='ssi' op='==' value='y'>
        # ssi enabled
        AddType text/html .shtml
        AddOutputFilter INCLUDES .shtml
        Options +Includes
</tmpl_if>
<tmpl_if name='php' op='==' value='no'>
        <Files ~ '.php[s3-6]{0,1}$'>
            Order allow,deny
            Deny from all
            Allow from none
        </Files>
</tmpl_if>
    </Directory>
    <Directory {tmpl_var name='web_document_root'}>
        Options FollowSymLinks
        AllowOverride Indexes AuthConfig Limit FileInfo
        Order allow,deny
        Allow from all
<tmpl_if name='ssi' op='==' value='y'>
        # ssi enabled
        AddType text/html .shtml
        AddOutputFilter INCLUDES .shtml
        Options +Includes
</tmpl_if>
<tmpl_if name='php' op='==' value='no'>
        <Files ~ '.php[s3-6]{0,1}$'>
            Order allow,deny
            Deny from all
            Allow from none
        </Files>
</tmpl_if>
    </Directory>
<tmpl_if name='cgi' op='==' value='y'>
    # cgi enabled
    <Directory {tmpl_var name='document_root'}/cgi-bin>
      Order allow,deny
      Allow from all
    </Directory>
    ScriptAlias  /cgi-bin/ <tmpl_var name='document_root'>/cgi-bin/
    AddHandler cgi-script .cgi
    AddHandler cgi-script .pl
</tmpl_if>
<tmpl_if name='suexec' op='==' value='y'>
    # suexec enabled
    SuexecUserGroup <tmpl_var name='system_user'> <tmpl_var name='system_group'>
</tmpl_if>
<tmpl_if name='php' op='==' value='mod'>
    # mod_php enabled
    AddType application/x-httpd-php .php .php3 .php4 .php5
    php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -fwebmaster@<tmpl_var name='domain'>"
    php_admin_value upload_tmp_dir <tmpl_var name='document_root'>/tmp
    php_admin_value session.save_path <tmpl_var name='document_root'>/tmp
<tmpl_if name='security_level' op='==' value='20'>
    php_admin_value open_basedir <tmpl_var name='document_root'>/web:<tmpl_var name='document_root'>/tmp:/usr/share/php5
</tmpl_if>
</tmpl_if>
<tmpl_if name='php' op='==' value='suphp'>
    # suphp enabled
    <Directory {tmpl_var name='web_document_root'}>
        suPHP_Engine on
        # suPHP_UserGroup <tmpl_var name='system_user'> <tmpl_var name='system_group'>
        AddHandler x-httpd-suphp .php .php3 .php4 .php5
        suPHP_AddHandler x-httpd-suphp
    </Directory>
</tmpl_if>
<tmpl_if name='php' op='==' value='cgi'>
    # php as cgi enabled
    ScriptAlias /php5-cgi <tmpl_var name='cgi_starter_path'><tmpl_var name='cgi_starter_script'>
    Action php5-cgi /php5-cgi
    AddHandler php5-cgi .php .php3 .php4 .php5
    <Directory {tmpl_var name='cgi_starter_path'}>
        Order allow,deny
        Allow from all
    </Directory>
</tmpl_if>
<tmpl_if name='php' op='==' value='fast-cgi'>
    # php as fast-cgi enabled
    <Directory {tmpl_var name='web_document_root_www'}>
        AddHandler fcgid-script .php .php3 .php4 .php5
        FCGIWrapper <tmpl_var name='fastcgi_starter_path'><tmpl_var name='fastcgi_starter_script'> .php
        Options +ExecCGI
        AllowOverride all
        Order allow,deny
        Allow from all
    </Directory>
</tmpl_if>
<tmpl_if name="rewrite_enabled">
    RewriteEngine on
<tmpl_loop name="redirects">
    RewriteCond %{HTTP_HOST}   ^<tmpl_var name='rewrite_domain'> [NC]
    RewriteRule   ^/(.*)$ <tmpl_var name='rewrite_target'>$1  <tmpl_var name='rewrite_type'>
</tmpl_loop>
</tmpl_if>
<tmpl_var name='apache_directives'>
</VirtualHost>
<tmpl_if name='ssl_enabled'>
<IfModule mod_ssl.c>
###########################################################
# SSL Vhost
###########################################################
<VirtualHost <tmpl_var name='ip_address'>:443>
<tmpl_if name='php' op='==' value='suphp'>
    DocumentRoot <tmpl_var name='web_document_root'>
</tmpl_else>
  <tmpl_if name='php' op='==' value='cgi'>
    DocumentRoot <tmpl_var name='web_document_root'>
  </tmpl_else>
    DocumentRoot <tmpl_var name='web_document_root_www'>
  </tmpl_if>
</tmpl_if>
    ServerName <tmpl_var name='domain'>
<tmpl_if name='alias'>
    <tmpl_var name='alias'>
</tmpl_if>
    ServerAdmin webmaster@<tmpl_var name='domain'>
    ErrorLog /var/log/ispconfig/httpd/<tmpl_var name='domain'>/error.log
<tmpl_if name='errordocs'>
    ErrorDocument 400 /error/400.html
    ErrorDocument 401 /error/401.html
    ErrorDocument 403 /error/403.html
    ErrorDocument 404 /error/404.html
    ErrorDocument 405 /error/405.html
    ErrorDocument 500 /error/500.html
    ErrorDocument 503 /error/503.html
</tmpl_if>
    SSLEngine on
    SSLCertificateFile <tmpl_var name='document_root'>/ssl/<tmpl_var name='domain'>.crt
    SSLCertificateKeyFile <tmpl_var name='document_root'>/ssl/<tmpl_var name='domain'>.key
<tmpl_if name='has_bundle_cert'>
    SSLCACertificateFile <tmpl_var name='document_root'>/ssl/<tmpl_var name='domain'>.bundle
</tmpl_if>
    <Directory {tmpl_var name='web_document_root_www'}>
        Options FollowSymLinks
        AllowOverride Indexes AuthConfig Limit FileInfo
        Order allow,deny
        Allow from all
<tmpl_if name='ssi' op='==' value='y'>
        # ssi enabled
        AddType text/html .shtml
        AddOutputFilter INCLUDES .shtml
        Options +Includes
</tmpl_if>
<tmpl_if name='php' op='==' value='no'>
        <Files ~ '.php[s3-6]{0,1}$'>
            Order allow,deny
            Deny from all
            Allow from none
        </Files>
</tmpl_if>
    </Directory>
    <Directory {tmpl_var name='web_document_root'}>
        Options FollowSymLinks
        AllowOverride Indexes AuthConfig Limit FileInfo
        Order allow,deny
        Allow from all
<tmpl_if name='ssi' op='==' value='y'>
        # ssi enabled
        AddType text/html .shtml
        AddOutputFilter INCLUDES .shtml
        Options +Includes
</tmpl_if>
<tmpl_if name='php' op='==' value='no'>
        <Files ~ '.php[s3-6]{0,1}$'>
            Order allow,deny
            Deny from all
            Allow from none
        </Files>
</tmpl_if>
    </Directory>
<tmpl_if name='cgi' op='==' value='y'>
    # cgi enabled
    <Directory {tmpl_var name='document_root'}/cgi-bin>
      Order allow,deny
      Allow from all
    </Directory>
    ScriptAlias  /cgi-bin/ <tmpl_var name='document_root'>/cgi-bin/
    AddHandler cgi-script .cgi
    AddHandler cgi-script .pl
</tmpl_if>
<tmpl_if name='ssi'op='==' value='y'>
    # ssi enabled
    AddType text/html .shtml
    AddOutputFilter INCLUDES .shtml
</tmpl_if>
<tmpl_if name='suexec'op='==' value='y'>
    # suexec enabled
    SuexecUserGroup <tmpl_var name='system_user'> <tmpl_var name='system_group'>
</tmpl_if>
<tmpl_if name='php' op='==' value='mod'>
    # mod_php enabled
    AddType application/x-httpd-php .php .php3 .php4 .php5
    php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -fwebmaster@<tmpl_var name='domain'>"
    php_admin_value upload_tmp_dir <tmpl_var name='document_root'>/tmp
    php_admin_value session.save_path <tmpl_var name='document_root'>/tmp
<tmpl_if name='security_level' op='==' value='20'>
    php_admin_value open_basedir <tmpl_var name='document_root'>/web:<tmpl_var name='document_root'>/tmp:/usr/share/php5
</tmpl_if>
</tmpl_if>
<tmpl_if name='php' op='==' value='suphp'>
    suPHP_Engine on
    # suPHP_UserGroup <tmpl_var name='system_user'> <tmpl_var name='system_group'>
    AddHandler x-httpd-suphp .php .php3 .php4 .php5
    suPHP_AddHandler x-httpd-suphp
</tmpl_if>
<tmpl_if name='php' op='==' value='cgi'>
    # php as cgi enabled
    ScriptAlias /php5-cgi <tmpl_var name='cgi_starter_path'><tmpl_var name='cgi_starter_script'>
    Action php5-cgi /php5-cgi
    AddHandler php5-cgi .php .php3 .php4 .php5
    <Directory {tmpl_var name='cgi_starter_path'}>
        Order allow,deny
        Allow from all
    </Directory>
</tmpl_if>
<tmpl_if name='php' op='==' value='fast-cgi'>
    # php as fast-cgi enabled
    <Directory {tmpl_var name='web_document_root_www'}>
        AddHandler fcgid-script .php .php3 .php4 .php5
        FCGIWrapper <tmpl_var name='fastcgi_starter_path'><tmpl_var name='fastcgi_starter_script'> .php
        Options +ExecCGI
        AllowOverride all
        Order allow,deny
        Allow from all
    </Directory>
</tmpl_if>
<tmpl_if name="rewrite_enabled">
    RewriteEngine on
<tmpl_loop name="redirects">
    RewriteCond %{HTTP_HOST}   ^<tmpl_var name='rewrite_domain'> [NC]
    RewriteRule   ^/(.*)$ <tmpl_var name='rewrite_target'>$1  <tmpl_var name='rewrite_type'>
</tmpl_loop>
</tmpl_if>
<tmpl_var name='apache_directives'>
</VirtualHost>
</IfModule>
</tmpl_if>
server/cron_daily.php
@@ -68,7 +68,7 @@
        $tstamp = date("Y-m");
        
        $sql = "SELECT * FROM mail_traffic WHERE month = '$tstamp' AND mailuser_id = ".$rec["mailuser_id"];
        $tr = $app->db->queryOneRecord($sql);
        $tr = $app->dbmaster->queryOneRecord($sql);
        
        $mail_traffic += $tr["traffic"];
        if($tr["traffic_id"] > 0) {
@@ -76,7 +76,7 @@
        } else {
            $sql = "INSERT INTO mail_traffic (month,mailuser_id,traffic) VALUES ('$tstamp',".$rec["mailuser_id"].",$mail_traffic)";
        }
        $app->db->query($sql);
        $app->dbmaster->query($sql);
        echo $sql;
        
    }
server/mods-available/cron_module.inc.php
New file
@@ -0,0 +1,97 @@
<?php
/*
Copyright (c) 2007, Till Brehm, projektfarm Gmbh
Modified 2009, Marius Cramer, pixcept KG
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.
*/
class cron_module {
    var $module_name = 'cron_module';
    var $class_name = 'cron_module';
    var $actions_available = array(    'cron_insert',
                                    'cron_update',
                                    'cron_delete');
    //* This function is called during ispconfig installation to determine
    //  if a symlink shall be created for this plugin.
    function onInstall() {
        global $conf;
        return true;
    }
    /*
         This function is called when the module is loaded
    */
    function onLoad() {
        global $app;
        /*
        Annonce the actions that where provided by this module, so plugins
        can register on them.
        */
        $app->plugins->announceEvents($this->module_name,$this->actions_available);
        /*
        As we want to get notified of any changes on several database tables,
        we register for them.
        The following function registers the function "functionname"
         to be executed when a record for the table "dbtable" is
         processed in the sys_datalog. "classname" is the name of the
         class that contains the function functionname.
        */
        $app->modules->registerTableHook('cron',$this->module_name,'process');
    }
    /*
     This function is called when a change in one of the registered tables is detected.
     The function then raises the events for the plugins.
    */
    function process($tablename,$action,$data) {
        global $app;
        switch ($tablename) {
            case 'cron':
                if($action == 'i') $app->plugins->raiseEvent('cron_insert',$data);
                if($action == 'u') $app->plugins->raiseEvent('cron_update',$data);
                if($action == 'd') $app->plugins->raiseEvent('cron_delete',$data);
            break;
        } // end switch
    } // end function
} // end class
?>
server/mods-available/monitor_core_module.inc.php
@@ -698,7 +698,7 @@
    function monitorRkHunter(){
        /*
         *  This monitoring is expensive, so do it only once a hour
         *  This monitoring is expensive, so do it only once a day
         */
        $min = date('i');
        $hour = date('H');
server/mods-available/web_module.inc.php
@@ -80,7 +80,8 @@
        */
        
        $app->modules->registerTableHook('web_domain','web_module','process');
        $app->modules->registerTableHook('shell_user','web_module','process');
        $app->modules->registerTableHook('ftp_user','web_module','process');
        $app->modules->registerTableHook('shell_user','web_module','process');
        
        // Register service
        $app->services->registerService('httpd','web_module','restartHttpd');
server/plugins-available/apache2_plugin.inc.php
@@ -146,8 +146,12 @@
            @unlink($rand_file);
            $ssl_request = file_get_contents($csr_file);
            $ssl_cert = file_get_contents($crt_file);
            /* Update the DB of the (local) Server */
            $app->db->query("UPDATE web_domain SET ssl_request = '$ssl_request', ssl_cert = '$ssl_cert' WHERE domain = '".$data["new"]["domain"]."'");
            $app->db->query("UPDATE web_domain SET ssl_action = '' WHERE domain = '".$data["new"]["domain"]."'");
            /* Update also the master-DB of the Server-Farm */
            $app->dbmaster->query("UPDATE web_domain SET ssl_request = '$ssl_request', ssl_cert = '$ssl_cert' WHERE domain = '".$data["new"]["domain"]."'");
            $app->dbmaster->query("UPDATE web_domain SET ssl_action = '' WHERE domain = '".$data["new"]["domain"]."'");
        }
        
        //* Save a SSL certificate to disk
@@ -160,7 +164,10 @@
            file_put_contents($csr_file,$data["new"]["ssl_request"]);
            file_put_contents($crt_file,$data["new"]["ssl_cert"]);
            if(trim($data["new"]["ssl_bundle"]) != '') file_put_contents($bundle_file,$data["new"]["ssl_bundle"]);
            /* Update the DB of the (local) Server */
            $app->db->query("UPDATE web_domain SET ssl_action = '' WHERE domain = '".$data["new"]["domain"]."'");
            /* Update also the master-DB of the Server-Farm */
            $app->dbmaster->query("UPDATE web_domain SET ssl_action = '' WHERE domain = '".$data["new"]["domain"]."'");
            $app->log("Saving SSL Cert for: $domain",LOGLEVEL_DEBUG);
        }
        
@@ -174,7 +181,12 @@
            unlink($csr_file);
            unlink($crt_file);
            unlink($bundle_file);
            /* Update the DB of the (local) Server */
            $app->db->query("UPDATE web_domain SET ssl_request = '', ssl_cert = '' WHERE domain = '".$data["new"]["domain"]."'");
            $app->db->query("UPDATE web_domain SET ssl_action = '' WHERE domain = '".$data["new"]["domain"]."'");
            /* Update also the master-DB of the Server-Farm */
            $app->dbmaster->query("UPDATE web_domain SET ssl_request = '', ssl_cert = '' WHERE domain = '".$data["new"]["domain"]."'");
            $app->dbmaster->query("UPDATE web_domain SET ssl_action = '' WHERE domain = '".$data["new"]["domain"]."'");
            $app->log("Deleting SSL Cert for: $domain",LOGLEVEL_DEBUG);
        }
        
@@ -249,7 +261,7 @@
                    // Remove trailing slash
                    if(substr($tmp_symlink, -1, 1) == '/') $tmp_symlink = substr($tmp_symlink, 0, -1);
                    // create the symlinks, if not exist
                    if(!is_link($tmp_symlink)) {
                    if(is_link($tmp_symlink)) {
                        exec("rm -f ".escapeshellcmd($tmp_symlink));
                        $app->log("Removed Symlink: rm -f ".$tmp_symlink,LOGLEVEL_DEBUG);
                    }
@@ -431,7 +443,7 @@
        
        $username = escapeshellcmd($data["new"]["system_user"]);
        if($data["new"]["system_user"] != '' && !$app->system->is_user($data["new"]["system_user"])) {
            exec("useradd -d ".escapeshellcmd($data["new"]["document_root"])." -g $groupname $username -s /bin/false");
            exec("useradd -d ".escapeshellcmd($data["new"]["document_root"])." -g $groupname -G sshusers $username -s /bin/false");
            $app->log("Adding the user: $username",LOGLEVEL_DEBUG);
        }
        
@@ -447,7 +459,6 @@
            exec("setquota -T -u $username 604800 604800 -a &> /dev/null");
        }
        
        if($this->action == 'insert') {
            // Chown and chmod the directories below the document root
            exec("chown -R $username:$groupname ".escapeshellcmd($data["new"]["document_root"]));
@@ -456,8 +467,35 @@
            exec("chown root:root ".escapeshellcmd($data["new"]["document_root"]));
        }
        
        // make temp direcory writable for the apache user and the website user
        exec("chmod 777 ".escapeshellcmd($data["new"]["document_root"]."/tmp"));
        // If the security level is set to high
        if($web_config['security_level'] == 20) {
            exec("chmod 711 ".escapeshellcmd($data["new"]["document_root"]."/"));
            exec("chmod 711 ".escapeshellcmd($data["new"]["document_root"])."/*");
            exec("chmod 710 ".escapeshellcmd($data["new"]["document_root"]."/web"));
            // make temp direcory writable for the apache user and the website user
            exec("chmod 777 ".escapeshellcmd($data["new"]["document_root"]."/tmp"));
            $command = 'usermod';
            $command .= ' --groups sshusers';
            $command .= ' '.escapeshellcmd($data["new"]["system_user"]);
            exec($command);
            //* add the apache user to the client group
            $app->system->add_user_to_group($groupname, escapeshellcmd($web_config['user']));
        // If the security Level is set to medium
        } else {
            exec("chmod 755 ".escapeshellcmd($data["new"]["document_root"]."/"));
            exec("chmod 755 ".escapeshellcmd($data["new"]["document_root"]."/*"));
            // make temp direcory writable for the apache user and the website user
            exec("chmod 777 ".escapeshellcmd($data["new"]["document_root"]."/tmp"));
        }
        
        
        // Create the vhost config file
@@ -470,6 +508,7 @@
        $vhost_data["web_document_root"] = $data["new"]["document_root"]."/web";
        $vhost_data["web_document_root_www"] = $web_config["website_basedir"]."/".$data["new"]["domain"]."/web";
        $vhost_data["web_basedir"] = $web_config["website_basedir"];
        $vhost_data["security_level"] = $web_config["security_level"];
        
        // Check if a SSL cert exists
        $ssl_dir = $data["new"]["document_root"]."/ssl";
@@ -494,6 +533,7 @@
        // Rewrite rules
        $rewrite_rules = array();
        if($data["new"]["redirect_type"] != '') {
            if(substr($data["new"]["redirect_path"],-1) != '/') $data["new"]["redirect_path"] .= '/';
            $rewrite_rules[] = array(    'rewrite_domain'     => $data["new"]["domain"],
                                        'rewrite_type'         => ($data["new"]["redirect_type"] == 'no')?'':'['.$data["new"]["redirect_type"].']',
                                        'rewrite_target'     => $data["new"]["redirect_path"]);
@@ -515,30 +555,32 @@
        
        // get alias domains (co-domains and subdomains)
        $aliases = $app->db->queryAllRecords("SELECT * FROM web_domain WHERE parent_domain_id = ".$data["new"]["domain_id"]." AND active = 'y'");
        switch($data["new"]["subdomain"]) {
        $server_alias = array();
        switch($data["new"]["subdomain"]) {
        case 'www':
            $server_alias .= 'www.'.$data["new"]["domain"].' ';
            $server_alias[] .= 'www.'.$data["new"]["domain"].' ';
            break;
        case '*':
            $server_alias .= '*.'.$data["new"]["domain"].' ';
            $server_alias[] .= '*.'.$data["new"]["domain"].' ';
            break;
        }
        if(is_array($aliases)) {
            foreach($aliases as $alias) {
                switch($alias["subdomain"]) {
                case 'www':
                    $server_alias .= 'www.'.$alias["domain"].' '.$alias["domain"].' ';
                    $server_alias[] .= 'www.'.$alias["domain"].' '.$alias["domain"].' ';
                    break;
                case '*':
                    $server_alias .= '*.'.$alias["domain"].' '.$alias["domain"].' ';
                    $server_alias[] .= '*.'.$alias["domain"].' '.$alias["domain"].' ';
                    break;
                default:
                    $server_alias .= $alias["domain"].' ';
                    $server_alias[] .= $alias["domain"].' ';
                    break;
                }
                $app->log("Add server alias: $alias[domain]",LOGLEVEL_DEBUG);
                // Rewriting
                if($alias["redirect_type"] != '') {
                    if(substr($data["new"]["redirect_path"],-1) != '/') $data["new"]["redirect_path"] .= '/';
                    $rewrite_rules[] = array(    'rewrite_domain'     => $alias["domain"],
                                                'rewrite_type'         => ($alias["redirect_type"] == 'no')?'':'['.$alias["redirect_type"].']',
                                                'rewrite_target'     => $alias["redirect_path"]);
@@ -558,7 +600,24 @@
                }
            }
        }
        $tpl->setVar('alias',trim($server_alias));
        //* If we have some alias records
        if(count($server_alias) > 0) {
            $server_alias_str = '';
            $n = 0;
            // begin a new ServerAlias line after 30 alias domains
            foreach($server_alias as $tmp_alias) {
                if($n % 30 == 0) $server_alias_str .= "\n    ServerAlias ";
                $server_alias_str .= $tmp_alias;
            }
            unset($tmp_alias);
            $tpl->setVar('alias',trim($server_alias_str));
        } else {
            $tpl->setVar('alias','');
        }
        if(count($rewrite_rules) > 0) {
            $tpl->setVar('rewrite_enabled',1);
        } else {
@@ -599,6 +658,7 @@
            $fcgi_tpl->setVar('php_fcgi_children',$fastcgi_config["fastcgi_children"]);
            $fcgi_tpl->setVar('php_fcgi_max_requests',$fastcgi_config["fastcgi_max_requests"]);
            $fcgi_tpl->setVar('php_fcgi_bin',$fastcgi_config["fastcgi_bin"]);
            $fcgi_tpl->setVar('security_level',$web_config["security_level"]);
                
            $fcgi_starter_script = escapeshellcmd($fastcgi_starter_path.$fastcgi_config["fastcgi_starter_script"]);
            file_put_contents($fcgi_starter_script,$fcgi_tpl->grab());
@@ -650,6 +710,7 @@
            // This will NOT work!
            //$cgi_tpl->setVar('open_basedir', "/var/www/" . $data["new"]["domain"]);
            $cgi_tpl->setVar('php_cgi_bin',$cgi_config["cgi_bin"]);
            $cgi_tpl->setVar('security_level',$web_config["security_level"]);
            $cgi_starter_script = escapeshellcmd($cgi_starter_path.$cgi_config["cgi_starter_script"]);
            file_put_contents($cgi_starter_script,$cgi_tpl->grab());
@@ -695,7 +756,7 @@
        }
        
        //* Create .htaccess and .htpasswd file for website statistics
        if(!is_file($data["new"]["document_root"].'/web/stats/.htaccess')) {
        if(!is_file($data["new"]["document_root"].'/web/stats/.htaccess') or $data["old"]["document_root"] != $data["new"]["document_root"]) {
            if(!is_dir($data["new"]["document_root"].'/web/stats')) mkdir($data["new"]["document_root"].'/web/stats');
            $ht_file = "AuthType Basic\nAuthName \"Members Only\"\nAuthUserFile ".$data["new"]["document_root"]."/.htpasswd_stats\n<limit GET PUT POST>\nrequire valid-user\n</limit>";
            file_put_contents($data["new"]["document_root"].'/web/stats/.htaccess',$ht_file);
@@ -717,6 +778,9 @@
        // request a httpd reload when all records have been processed
        $app->services->restartServiceDelayed('httpd','reload');
        
        //* Unset action to clean it for next processed vhost.
        $this->action = '';
    }
    
    function delete($event_name,$data) {
server/plugins-available/cron_jailkit_plugin.inc.php
New file
@@ -0,0 +1,272 @@
<?php
/*
Copyright (c) 2007, Till Brehm, projektfarm Gmbh
Modified 2009, Marius Cramer, pixcept KG
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.
*/
class cron_jailkit_plugin {
    //* $plugin_name and $class_name have to be the same then the name of this class
    var $plugin_name = 'cron_jailkit_plugin';
    var $class_name = 'cron_jailkit_plugin';
    //* This function is called during ispconfig installation to determine
    //  if a symlink shall be created for this plugin.
    function onInstall() {
        global $conf;
        if($conf['services']['web'] == true) {
            return true;
        } else {
            return false;
        }
    }
    /*
         This function is called when the plugin is loaded
    */
    function onLoad() {
        global $app;
        /*
        Register for the events
        */
        $app->plugins->registerEvent('cron_insert', $this->plugin_name, 'insert');
        $app->plugins->registerEvent('cron_update', $this->plugin_name, 'update');
        $app->plugins->registerEvent('cron_delete', $this->plugin_name, 'delete');
    }
    //* This function is called, when a cron job is inserted in the database
    function insert($event_name,$data) {
        global $app, $conf;
        if($data["new"]["parent_domain_id"] == '') {
            $app->log("Parent domain not set",LOGLEVEL_WARN);
            return 0;
        }
        //* get data from web
        $parent_domain = $app->db->queryOneRecord("SELECT `domain_id`, `system_user`, `system_group`, `document_root`, `domain` FROM `web_domain` WHERE `domain_id` = ".intval($data["new"]["parent_domain_id"]));
        if(!$parent_domain["domain_id"]) {
            $app->log("Parent domain not found",LOGLEVEL_WARN);
            return 0;
        } elseif($parent_domain["system_user"] == 'root' or $parent_domain["system_group"] == 'root') {
            $app->log("Websites (and Crons) can not be owned by the root user or group.",LOGLEVEL_WARN);
            return 0;
        }
        $app->uses('system');
        if($app->system->is_user($parent_domain['system_user'])) {
            /**
             * Setup Jailkit Chroot System If Enabled
             */
            if ($data['new']['type'] == "chrooted")
            {
                // load the server configuration options
                $app->uses("getconf");
                $this->data = $data;
                $this->app = $app;
                $this->jailkit_config = $app->getconf->get_server_config($conf["server_id"], 'jailkit');
                $this->parent_domain = $parent_domain;
                $this->_setup_jailkit_chroot();
                //$command .= 'usermod -U '.escapeshellcmd($parent_domain['system_user']);
                //exec($command);
                $this->_add_jailkit_user();
            }
            $app->log("Jailkit Plugin (Cron) -> insert username:".$parent_domain['system_user'],LOGLEVEL_DEBUG);
        } else {
            $app->log("Jailkit Plugin (Cron) -> insert username:".$parent_domain['system_user']." skipped, the user does not exist.",LOGLEVEL_WARN);
        }
    }
    //* This function is called, when a cron job is updated in the database
    function update($event_name,$data) {
        global $app, $conf;
        if($data["new"]["parent_domain_id"] == '') {
            $app->log("Parent domain not set",LOGLEVEL_WARN);
            return 0;
        }
        //* get data from web
        $parent_domain = $app->db->queryOneRecord("SELECT `domain_id`, `system_user`, `system_group`, `document_root`, `domain` FROM `web_domain` WHERE `domain_id` = ".intval($data["new"]["parent_domain_id"]));
        if(!$parent_domain["domain_id"]) {
            $app->log("Parent domain not found",LOGLEVEL_WARN);
            return 0;
        } elseif($parent_domain["system_user"] == 'root' or $parent_domain["system_group"] == 'root') {
            $app->log("Websites (and Crons) can not be owned by the root user or group.",LOGLEVEL_WARN);
            return 0;
        }
        $app->uses('system');
        if($app->system->is_user($parent_domain['system_user'])) {
            /**
             * Setup Jailkit Chroot System If Enabled
             */
            if ($data['new']['type'] == "chrooted")
            {
                $app->log("Jailkit Plugin (Cron) -> setting up jail", LOGLEVEL_DEBUG);
                // load the server configuration options
                $app->uses("getconf");
                $this->data = $data;
                $this->app = $app;
                $this->jailkit_config = $app->getconf->get_server_config($conf["server_id"], 'jailkit');
                $this->parent_domain = $parent_domain;
                $this->_setup_jailkit_chroot();
                $this->_add_jailkit_user();
            }
            $app->log("Jailkit Plugin (Cron) -> update username:".$parent_domain['system_user'],LOGLEVEL_DEBUG);
        } else {
            $app->log("Jailkit Plugin (Cron) -> update username:".$parent_domain['system_user']." skipped, the user does not exist.",LOGLEVEL_WARN);
        }
    }
    //* This function is called, when a cron job is deleted in the database
    function delete($event_name,$data) {
        global $app, $conf;
        //* nothing to do here!
    }
    function _setup_jailkit_chroot()
    {
            //check if the chroot environment is created yet if not create it with a list of program sections from the config
            if (!is_dir($this->parent_domain['document_root'].'/etc/jailkit'))
            {
                $command = '/usr/local/ispconfig/server/scripts/create_jailkit_chroot.sh';
                $command .= ' '.escapeshellcmd($this->parent_domain['document_root']);
                $command .= ' \''.$this->jailkit_config['jailkit_chroot_app_sections'].'\'';
                exec($command);
                $this->app->log("Added jailkit chroot with command: ".$command,LOGLEVEL_DEBUG);
                //$this->_add_jailkit_programs(); // done later on
                $this->app->load('tpl');
                $tpl = new tpl();
                $tpl->newTemplate("bash.bashrc.master");
                $tpl->setVar('jailkit_chroot',true);
                $tpl->setVar('domain',$this->parent_domain['domain']);
                $tpl->setVar('home_dir',$this->_get_home_dir(""));
                $bashrc = escapeshellcmd($this->parent_domain['document_root']).'/etc/bash.bashrc';
                if(@is_file($bashrc)) exec('rm '.$bashrc);
                file_put_contents($bashrc,$tpl->grab());
                unset($tpl);
                $this->app->log("Added bashrc scrpt : ".$bashrc,LOGLEVEL_DEBUG);
                $tpl = new tpl();
                $tpl->newTemplate("motd.master");
                $tpl->setVar('domain',$this->parent_domain['domain']);
                $motd = escapeshellcmd($this->parent_domain['document_root']).'/var/run/motd';
                if(@is_file($motd)) exec('rm '.$motd);
                file_put_contents($motd,$tpl->grab());
            }
            $this->_add_jailkit_programs();
    }
    function _add_jailkit_programs()
    {
        //copy over further programs and its libraries
        $command = '/usr/local/ispconfig/server/scripts/create_jailkit_programs.sh';
        $command .= ' '.escapeshellcmd($this->parent_domain['document_root']);
        $command .= ' \''.$this->jailkit_config['jailkit_chroot_app_programs'].'\'';
        exec($command);
        $this->app->log("Added programs to jailkit chroot with command: ".$command,LOGLEVEL_DEBUG);
        $command = '/usr/local/ispconfig/server/scripts/create_jailkit_programs.sh';
        $command .= ' '.escapeshellcmd($this->parent_domain['document_root']);
        $command .= ' \''.$this->jailkit_config['jailkit_chroot_cron_programs'].'\'';
        exec($command);
        $this->app->log("Added cron programs to jailkit chroot with command: ".$command,LOGLEVEL_DEBUG);
    }
    function _add_jailkit_user()
    {
            //add the user to the chroot
            $jailkit_chroot_userhome = $this->_get_home_dir($this->parent_domain['system_user']);
            if(!is_dir($this->parent_domain['document_root'].'/etc')) mkdir($this->parent_domain['document_root'].'/etc');
            if(!is_file($this->parent_domain['document_root'].'/etc/passwd')) exec('touch '.$this->parent_domain['document_root'].'/etc/passwd');
            // IMPORTANT!
            // ALWAYS create the user. Even if the user was created before
            // if we check if the user exists, then a update (no shell -> jailkit) will not work
            // and the user has FULL ACCESS to the root of the server!
            $command = '/usr/local/ispconfig/server/scripts/create_jailkit_user.sh';
            $command .= ' '.escapeshellcmd($this->parent_domain['system_user']);
            $command .= ' '.escapeshellcmd($this->parent_domain['document_root']);
            $command .= ' '.$jailkit_chroot_userhome;
            $command .= ' '.escapeshellcmd("/bin/bash");
            exec($command);
            $this->app->log("Added jailkit user to chroot with command: ".$command,LOGLEVEL_DEBUG);
            exec("mkdir -p ".escapeshellcmd($this->parent_domain['document_root'].$jailkit_chroot_userhome));
    }
    function _get_home_dir($username)
    {
        return str_replace("[username]",escapeshellcmd($username),$this->jailkit_config["jailkit_chroot_home"]);
    }
} // end class
?>
server/plugins-available/cron_plugin.inc.php
New file
@@ -0,0 +1,239 @@
<?php
/*
Copyright (c) 2007 - 2009, Till Brehm, projektfarm Gmbh
Modified 2009, Marius Cramer, pixcept KG
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.
*/
class cron_plugin {
    var $plugin_name = 'cron_plugin';
    var $class_name = 'cron_plugin';
    // private variables
    var $action = '';
    //* This function is called during ispconfig installation to determine
    //  if a symlink shall be created for this plugin.
    function onInstall() {
        global $conf;
        if($conf['services']['web'] == true) {
            return true;
        } else {
            return false;
        }
    }
    /*
         This function is called when the plugin is loaded
    */
    function onLoad() {
        global $app;
        /*
        Register for the events
        */
        $app->plugins->registerEvent('cron_insert',$this->plugin_name,'insert');
        $app->plugins->registerEvent('cron_update',$this->plugin_name,'update');
        $app->plugins->registerEvent('cron_delete',$this->plugin_name,'delete');
    }
    function insert($event_name,$data) {
        global $app, $conf;
        $this->action = 'insert';
        // just run the update function
        $this->update($event_name,$data);
    }
    function update($event_name,$data) {
        global $app, $conf;
        if($this->action != 'insert') $this->action = 'update';
        // load the server configuration options
        $app->uses("getconf");
        if($data["new"]["parent_domain_id"] == '') {
            $app->log("Parent domain not set",LOGLEVEL_WARN);
            return 0;
        }
        //* get data from web
        $parent_domain = $app->db->queryOneRecord("SELECT `domain_id`, `system_user`, `system_group`, `document_root`, `hd_quota` FROM `web_domain` WHERE `domain_id` = ".intval($data["new"]["parent_domain_id"]));
        if(!$parent_domain["domain_id"]) {
            $app->log("Parent domain not found",LOGLEVEL_WARN);
            return 0;
        } elseif($parent_domain["system_user"] == 'root' or $parent_domain["system_group"] == 'root') {
            $app->log("Websites (and Crons) can not be owned by the root user or group.",LOGLEVEL_WARN);
            return 0;
        }
        // Get the client ID
        $client = $app->dbmaster->queryOneRecord("SELECT client_id FROM sys_group WHERE sys_group.groupid = ".intval($data["new"]["sys_groupid"]));
        $client_id = intval($client["client_id"]);
        unset($client);
        // Create group and user, if not exist
        $app->uses("system");
        $groupname = escapeshellcmd($parent_domain["system_group"]);
        if($parent_domain["system_group"] != '' && !$app->system->is_group($parent_domain["system_group"])) {
            exec("groupadd $groupname");
            $app->log("Adding the group: $groupname",LOGLEVEL_DEBUG);
        }
        $username = escapeshellcmd($parent_domain["system_user"]);
        if($parent_domain["system_user"] != '' && !$app->system->is_user($parent_domain["system_user"])) {
            exec("useradd -d ".escapeshellcmd($parent_domain["document_root"])." -g $groupname $username -s /bin/false");
            $app->log("Adding the user: $username",LOGLEVEL_DEBUG);
        }
        // Set the quota for the user
        if($username != '' && $app->system->is_user($username)) {
            if($parent_domain["hd_quota"] > 0){
                $blocks_soft = $parent_domain["hd_quota"] * 1024;
                $blocks_hard = $blocks_soft + 1024;
              } else {
                $blocks_soft = $blocks_hard = 0;
              }
            exec("setquota -u $username $blocks_soft $blocks_hard 0 0 -a &> /dev/null");
            exec("setquota -T -u $username 604800 604800 -a &> /dev/null");
        }
        // make temp direcory writable for the apache user and the website user
        exec("chmod 777 ".escapeshellcmd($parent_domain["document_root"]."/tmp"));
        /** TODO READ CRON MASTER **/
        $this->parent_domain = $parent_domain;
        $this->_write_crontab();
        $this->action = '';
    }
    function delete($event_name,$data) {
        global $app, $conf;
        //* get data from web
        $parent_domain = $app->db->queryOneRecord("SELECT `domain_id`, `system_user`, `system_group`, `document_root`, `hd_quota` FROM `web_domain` WHERE `domain_id` = ".intval($data["old"]["parent_domain_id"]));
        if(!$parent_domain["domain_id"]) {
            $app->log("Parent domain not found",LOGLEVEL_WARN);
            return 0;
        }
        // Get the client ID
        $client = $app->dbmaster->queryOneRecord("SELECT client_id FROM sys_group WHERE sys_group.groupid = ".intval($data["old"]["sys_groupid"]));
        $client_id = intval($client["client_id"]);
        unset($client);
        $this->parent_domain = $parent_domain;
        $this->_write_crontab();
    }
    function _write_crontab() {
        global $app, $conf;
        //* load the server configuration options
        $app->uses("getconf");
        $cron_config = $app->getconf->get_server_config($conf["server_id"], 'cron');
        //* try to find customer's mail address
        /** TODO: add possibility for client to choose mail notification! **/
        $cron_content = "MAILTO=''\n\n";
        $chr_cron_content = "MAILTO=''\n\n";
        $chr_cron_content .= "SHELL='/usr/sbin/jk_chrootsh'\n\n";
        $cmd_count = 0;
        $chr_cmd_count = 0;
        //* read all active cron jobs from database and write them to file
        $cron_jobs = $app->db->queryAllRecords("SELECT `run_min`, `run_hour`, `run_mday`, `run_month`, `run_wday`, `command`, `type` FROM `cron` WHERE `parent_domain_id` = ".intval($this->parent_domain["domain_id"]) . " AND `active` = 'y'");
        if($cron_jobs && count($cron_jobs) > 0) {
            foreach($cron_jobs as $job) {
                $command = "{$job['run_min']}\t{$job['run_hour']}\t{$job['run_mday']}\t{$job['run_month']}\t{$job['run_wday']}";
                $command .= "\t{$this->parent_domain['system_user']}"; //* running as user
                if($job['type'] == 'url') {
                    $command .= "\t{$cron_config['wget']} -q -O /dev/null " . escapeshellarg($job['command']) . " >/dev/null 2>&1";
                } else {
                    if($job['type'] == 'chrooted') {
                        if(substr($job['command'], 0, strlen($this->parent_domain['document_root'])) == $this->parent_domain['document_root']) {
                            //* delete the unneeded path part
                            $job['command'] = substr($job['command'], strlen($this->parent_domain['document_root']));
                        }
                    }
                    $command .= "\t";
                    if(substr($job['command'], 0, 1) != "/") $command .= $this->parent_domain['document_root'];
                    $command .= $job['command'];
                }
                if($job['type'] == 'chrooted') {
                    $chr_cron_content .= $command . "\n";
                    $chr_cmd_count++;
                } else {
                    $cron_content .= $command . "\n";
                    $cmd_count++;
                }
            }
        }
        $cron_file = escapeshellcmd($cron_config["crontab_dir"].'/ispc_'.$this->parent_domain["system_user"]);
        if($cmd_count > 0) {
            file_put_contents($cron_file, $cron_content);
            $app->log("Wrote Cron file $cron_file with content:\n$cron_content",LOGLEVEL_DEBUG);
        } else {
            @unlink($cron_file);
            $app->log("Deleted Cron file $cron_file",LOGLEVEL_DEBUG);
        }
        $cron_file = escapeshellcmd($cron_config["crontab_dir"].'/ispc_chrooted_'.$this->parent_domain["system_user"]);
        if($chr_cmd_count > 0) {
            file_put_contents($cron_file, $chr_cron_content);
            $app->log("Wrote Cron file $cron_file with content:\n$chr_cron_content",LOGLEVEL_DEBUG);
        } else {
            @unlink($cron_file);
            $app->log("Deleted Cron file $cron_file",LOGLEVEL_DEBUG);
        }
        return 0;
    }
} // end class
?>
server/plugins-available/firewall_plugin.inc.php
@@ -79,8 +79,13 @@
        $ports = explode(',',$data["new"]["tcp_port"]);
        if(is_array($ports)) {
            foreach($ports as $p) {
                $p_int = intval($p);
                if($p_int > 0) $tcp_ports .= $p_int . ' ';
                if(strstr($p,':')) {
                    $p_parts = explode(':',$p);
                    $p_clean = intval($p_parts[0]).':'.intval($p_parts[1]);
                } else {
                    $p_clean = intval($p);
                }
                if($p_int > 0) $tcp_ports .= $p_clean . ' ';
            }
        }
        $tcp_ports = trim($tcp_ports);
@@ -88,8 +93,13 @@
        $ports = explode(',',$data["new"]["udp_port"]);
        if(is_array($ports)) {
            foreach($ports as $p) {
                $p_int = intval($p);
                if($p_int > 0) $udp_ports .= $p_int . ' ';
                if(strstr($p,':')) {
                    $p_parts = explode(':',$p);
                    $p_clean = intval($p_parts[0]).':'.intval($p_parts[1]);
                } else {
                    $p_clean = intval($p);
                }
                if($p_int > 0) $udp_ports .= $p_clean . ' ';
            }
        }
        $udp_ports = trim($udp_ports);
server/plugins-available/ftpuser_base_plugin.inc.php
New file
@@ -0,0 +1,112 @@
<?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.
*/
class ftpuser_base_plugin {
    var $plugin_name = 'ftpuser_base_plugin';
    var $class_name = 'ftpuser_base_plugin';
    //* This function is called during ispconfig installation to determine
    //  if a symlink shall be created for this plugin.
    function onInstall() {
        global $conf;
        if($conf['services']['web'] == true) {
            return true;
        } else {
            return false;
        }
    }
    /*
         This function is called when the plugin is loaded
    */
    function onLoad() {
        global $app;
        /*
        Register for the events
        */
        $app->plugins->registerEvent('ftp_user_insert',$this->plugin_name,'insert');
        $app->plugins->registerEvent('ftp_user_update',$this->plugin_name,'update');
        $app->plugins->registerEvent('ftp_user_delete',$this->plugin_name,'delete');
    }
    function insert($event_name,$data) {
        global $app, $conf;
    if(!is_dir($data['new']['dir'])) {
      $app->log("FTP User directory '".$data['new']['dir']."' does not exist. Creating it now.",LOGLEVEL_DEBUG);
      $web = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ".intval($data['new']['parent_domain_id']));
      exec('mkdir -p '.escapeshellcmd($data['new']['dir']));
      exec('chown '.escapeshellcmd($web["system_user"]).':'.escapeshellcmd($web['system_group']).' '.$data['new']['dir']);
      $app->log("Added ftpuser_dir: ".$data['new']['dir'],LOGLEVEL_DEBUG);
    }
    }
    function update($event_name,$data) {
        global $app, $conf;
    if(!is_dir($data['new']['dir'])) {
      $app->log("FTP User directory '".$data['new']['dir']."' does not exist. Creating it now.",LOGLEVEL_DEBUG);
      $web = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ".intval($data['new']['parent_domain_id']));
      exec('mkdir -p '.escapeshellcmd($data['new']['dir']));
      exec('chown '.escapeshellcmd($web["system_user"]).':'.escapeshellcmd($web['system_group']).' '.$data['new']['dir']);
      $app->log("Added ftpuser_dir: ".$data['new']['dir'],LOGLEVEL_DEBUG);
    }
    }
    function delete($event_name,$data) {
        global $app, $conf;
    $app->log("Ftpuser:".$data['new']['username']." deleted.",LOGLEVEL_DEBUG);
    }
} // end class
?>
server/plugins-available/mail_plugin.inc.php
@@ -94,6 +94,12 @@
            exec("su -c 'mkdir -p ".escapeshellcmd($base_path)."' ".$mail_config['mailuser_name']);
            $app->log('Created Directory: '.$base_path,LOGLEVEL_DEBUG);
        }
        //* When the mail user dir exists but it is not a valid maildir, remove it
        if(!empty($maildomain_path) && is_dir($maildomain_path) && !is_dir($maildomain_path.'/new') && !is_dir($maildomain_path.'/cur')) {
            exec("su -c 'rm -rf ".escapeshellcmd($data['new']['maildir'])."' vmail");
            $app->log("Removed invalid maildir and rebuild it: ".escapeshellcmd($data['new']['maildir']),LOGLEVEL_WARN);
        }
        //* Create the maildir, if it doesn not exist, set permissions, set quota.
        if(!empty($maildomain_path) && !is_dir($maildomain_path)) {
@@ -106,8 +112,10 @@
        }
        
        //* Set the maildir quota
        exec("su -c 'maildirmake -q ".$data['new']['quota']."S ".escapeshellcmd($data['new']['maildir'])."' ".$mail_config['mailuser_name']);
        $app->log('Set Maildir quota: '."su -c 'maildirmake -q ".$data['new']['quota']."S ".escapeshellcmd($data['new']['maildir'])."' ".$mail_config['mailuser_name'],LOGLEVEL_DEBUG);
        if(is_dir($data['new']['maildir'].'/new')) {
            exec("su -c 'maildirmake -q ".$data['new']['quota']."S ".escapeshellcmd($data['new']['maildir'])."' ".$mail_config['mailuser_name']);
            $app->log('Set Maildir quota: '."su -c 'maildirmake -q ".$data['new']['quota']."S ".escapeshellcmd($data['new']['maildir'])."' ".$mail_config['mailuser_name'],LOGLEVEL_DEBUG);
        }
    }
    
    function user_update($event_name,$data) {
@@ -118,10 +126,41 @@
        $mail_config = $app->getconf->get_server_config($conf["server_id"], 'mail');
        
        // Create the maildir, if it does not exist
        /*
        if(!is_dir($data['new']['maildir'])) {
            exec('mkdir -p '.escapeshellcmd($data['new']['maildir']));
            exec('chown '.$mail_config['mailuser_name'].':'.$mail_config['mailuser_group'].' '.escapeshellcmd($data['new']['maildir']));
            $app->log('Created Maildir: '.$data['new']['maildir'],LOGLEVEL_DEBUG);
        }
        */
        $maildomain_path = $data['new']['maildir'];
        $tmp_basepath = $data['new']['maildir'];
        $tmp_basepath_parts = explode('/',$tmp_basepath);
        unset($tmp_basepath_parts[count($tmp_basepath_parts)-1]);
        $base_path = implode('/',$tmp_basepath_parts);
        //* Create the mail domain directory, if it does not exist
        if(!empty($base_path) && !is_dir($base_path)) {
            exec("su -c 'mkdir -p ".escapeshellcmd($base_path)."' ".$mail_config['mailuser_name']);
            $app->log('Created Directory: '.$base_path,LOGLEVEL_DEBUG);
        }
        //* When the mail user dir exists but it is not a valid maildir, remove it
        if(!empty($maildomain_path) && is_dir($maildomain_path) && !is_dir($maildomain_path.'/new') && !is_dir($maildomain_path.'/cur')) {
            exec("su -c 'rm -rf ".escapeshellcmd($data['new']['maildir'])."' vmail");
            $app->log("Removed invalid maildir and rebuild it: ".escapeshellcmd($data['new']['maildir']),LOGLEVEL_WARN);
        }
        //* Create the maildir, if it doesn not exist, set permissions, set quota.
        if(!empty($maildomain_path) && !is_dir($maildomain_path.'/new')) {
            exec("su -c 'maildirmake ".escapeshellcmd($maildomain_path)."' ".$mail_config['mailuser_name']);
            $app->log("Created Maildir "."su -c 'maildirmake ".escapeshellcmd($maildomain_path)."' ".$mail_config['mailuser_name'],LOGLEVEL_DEBUG);
            exec('chown -R '.$mail_config['mailuser_name'].':'.$mail_config['mailuser_group'].' '.escapeshellcmd($data['new']['maildir']));
            $app->log("Set ownership on ".escapeshellcmd($data['new']['maildir']),LOGLEVEL_DEBUG);
            //* This is to fix the maildrop quota not being rebuilt after the quota is changed.
            exec("su -c 'maildirmake -q ".$data['new']['quota']."S ".escapeshellcmd($maildomain_path)."' ".$mail_config['mailuser_name']); // Avoid maildirmake quota bug, see debian bug #214911
            $app->log('Updated Maildir quota: '."su -c 'maildirmake -q ".$data['new']['quota']."S ".escapeshellcmd($maildomain_path)."' ".$mail_config['mailuser_name'],LOGLEVEL_DEBUG);
        }
        
        // Move mailbox, if domain has changed and delete old mailbox
@@ -137,8 +176,10 @@
            $app->log('Moved Maildir from: '.$data['old']['maildir'].' to '.$data['new']['maildir'],LOGLEVEL_DEBUG);
        }
        //This is to fix the maildrop quota not being rebuilt after the quota is changed.
        exec("su -c 'maildirmake -q ".$data['new']['quota']."S ".escapeshellcmd($data['new']['maildir'])."' ".$mail_config['mailuser_name']);
        $app->log('Created Maildir: '."su -c 'maildirmake -q ".$data['new']['quota']."S ".escapeshellcmd($data['new']['maildir'])."' ".$mail_config['mailuser_name'],LOGLEVEL_DEBUG);
        if(is_dir($data['new']['maildir'].'/new')) {
            exec("su -c 'maildirmake -q ".$data['new']['quota']."S ".escapeshellcmd($data['new']['maildir'])."' ".$mail_config['mailuser_name']);
            $app->log('Updated Maildir quota: '."su -c 'maildirmake -q ".$data['new']['quota']."S ".escapeshellcmd($data['new']['maildir'])."' ".$mail_config['mailuser_name'],LOGLEVEL_DEBUG);
        }
    }
    
    function user_delete($event_name,$data) {
server/plugins-available/mysql_clientdb_plugin.inc.php
@@ -66,6 +66,52 @@
        
    }
    
  function process_host_list($action, $database_name, $database_user, $database_password, $host_list, $link, $database_rename_user = "") {
      global $app;
      $action = strtoupper($action);
      // set to all hosts if none given
      if(trim($host_list) == "") $host_list = "%";
      // process arrays and comma separated strings
      if(!is_array($host_list)) $host_list = split(",", $host_list);
      $success = true;
      // loop through hostlist
      foreach($host_list as $db_host) {
          $db_host = trim($db_host);
          // check if entry is valid ip address
          $valid = true;
          if(preg_match("/^[0-9]{1,3}(\.)[0-9]{1,3}(\.)[0-9]{1,3}(\.)[0-9]{1,3}$/", $db_host)) {
              $groups = explode(".", $db_host);
              foreach($groups as $group){
                if($group<0 OR $group>255)
                $valid=false;
              }
          } else {
              $valid = false;
          }
          if($valid == false) continue;
          if($action == "GRANT") {
              if(!mysql_query("GRANT ALL ON ".mysql_real_escape_string($database_name,$link).".* TO '".mysql_real_escape_string($database_user,$link)."'@'$db_host' IDENTIFIED BY '".mysql_real_escape_string($database_password,$link)."';",$link)) $success = false;
          } elseif($action == "REVOKE") {
              //mysql_query("REVOKE ALL PRIVILEGES ON ".mysql_real_escape_string($database_name,$link).".* FROM '".mysql_real_escape_string($database_user,$link)."';",$link);
          } elseif($action == "DROP") {
              if(!mysql_query("DROP USER '".mysql_real_escape_string($database_user,$link)."'@'$db_host';",$link)) $success = false;
          } elseif($action == "RENAME") {
              if(!mysql_query("RENAME USER '".mysql_real_escape_string($database_user,$link)."'@'$db_host' TO '".mysql_real_escape_string($database_rename_user,$link)."'@'$db_host'",$link)) $success = false;
          } elseif($action == "PASSWORD") {
              if(!mysql_query("SET PASSWORD FOR '".mysql_real_escape_string($database_user,$link)."'@'$db_host' = PASSWORD('".mysql_real_escape_string($database_password,$link)."');",$link)) $success = false;
          }
      }
      return $success;
  }
    
    function db_insert($event_name,$data) {
        global $app, $conf;
@@ -101,8 +147,7 @@
            if($data["new"]["active"] == 'y') {
                
                if($data["new"]["remote_access"] == 'y') {
                     $db_host = '%';
                    mysql_query("GRANT ALL ON ".mysql_real_escape_string($data["new"]["database_name"],$link).".* TO '".mysql_real_escape_string($data["new"]["database_user"],$link)."'@'$db_host' IDENTIFIED BY '".mysql_real_escape_string($data["new"]["database_password"],$link)."';",$link);
          $this->process_host_list("GRANT", $data["new"]["database_name"], $data["new"]["database_user"], $data["new"]["database_password"], $data["new"]["remote_ips"], $link);
                }
                
                $db_host = 'localhost';
@@ -136,8 +181,7 @@
            if($data["new"]["active"] == 'y' && $data["old"]["active"] == 'n') {
                
                if($data["new"]["remote_access"] == 'y') {
                     $db_host = '%';
                    mysql_query("GRANT ALL ON ".mysql_real_escape_string($data["new"]["database_name"],$link).".* TO '".mysql_real_escape_string($data["new"]["database_user"],$link)."'@'$db_host' IDENTIFIED BY '".mysql_real_escape_string($data["new"]["database_password"],$link)."';",$link);
          $this->process_host_list("GRANT", $data["new"]["database_name"], $data["new"]["database_user"], $data["new"]["database_password"], $data["new"]["remote_ips"], $link);
                }
                
                $db_host = 'localhost';
@@ -151,8 +195,7 @@
            if($data["new"]["active"] == 'n' && $data["old"]["active"] == 'y') {
                
                if($data["old"]["remote_access"] == 'y') {
                     $db_host = '%';
                    mysql_query("DROP USER '".mysql_real_escape_string($data["old"]["database_user"],$link)."'@'$db_host';",$link);
          $this->process_host_list("DROP", "", $data["old"]["database_user"], "", $data["old"]["remote_ips"], $link);
                }
                
                $db_host = 'localhost';
@@ -167,8 +210,7 @@
                $db_host = 'localhost';
                mysql_query("RENAME USER '".mysql_real_escape_string($data["old"]["database_user"],$link)."'@'$db_host' TO '".mysql_real_escape_string($data["new"]["database_user"],$link)."'@'$db_host'",$link);
                if($data["old"]["remote_access"] == 'y') {
                    $db_host = '%';
                    mysql_query("RENAME USER '".mysql_real_escape_string($data["old"]["database_user"],$link)."'@'$db_host' TO '".mysql_real_escape_string($data["new"]["database_user"],$link)."'@'$db_host'",$link);
          $this->process_host_list("RENAME", "", $data["new"]["database_user"], "", $data["new"]["remote_ips"], $link, $data["new"]["database_user"]);
                }
                $app->log('Renaming mysql user: '.$data["old"]["database_user"].' to '.$data["new"]["database_user"],LOGLEVEL_DEBUG);
            }
@@ -180,23 +222,25 @@
                //mysql_query("REVOKE ALL PRIVILEGES ON ".mysql_real_escape_string($data["new"]["database_name"],$link).".* FROM '".mysql_real_escape_string($data["new"]["database_user"],$link)."';",$link);
                
                //* set new priveliges
                $db_host = '%';
                if($data["new"]["remote_access"] == 'y') {         
                    mysql_query("GRANT ALL ON ".mysql_real_escape_string($data["new"]["database_name"],$link).".* TO '".mysql_real_escape_string($data["new"]["database_user"],$link)."'@'$db_host' IDENTIFIED BY '".mysql_real_escape_string($data["new"]["database_password"],$link)."';",$link);
                    $this->process_host_list("GRANT", $data["new"]["database_name"], $data["new"]["database_user"], $data["new"]["database_password"], $data["new"]["remote_ips"], $link);
                } else {
                    mysql_query("DROP USER '".mysql_real_escape_string($data["old"]["database_user"],$link)."'@'$db_host';",$link);
                    $this->process_host_list("DROP", "", $data["old"]["database_user"], "", $data["old"]["remote_ips"], $link);
                }
                $app->log('Changing mysql remote access priveliges for database: '.$data["new"]["database_name"],LOGLEVEL_DEBUG);
            }
            } elseif($data["new"]["remote_access"] == 'y' && $data["new"]["remote_ips"] != $data["old"]["remote_ips"]) {
          //* Change remote access list
          $this->process_host_list("DROP", "", $data["old"]["database_user"], "", $data["old"]["remote_ips"], $link);
          $this->process_host_list("GRANT", $data["new"]["database_name"], $data["new"]["database_user"], $data["new"]["database_password"], $data["new"]["remote_ips"], $link);
      }
            //* Change password
            if($data["new"]["database_password"] != $data["old"]["database_password"]) {
                $db_host = 'localhost';
                mysql_query("SET PASSWORD FOR '".mysql_real_escape_string($data["new"]["database_user"],$link)."'@'$db_host' = PASSWORD('".mysql_real_escape_string($data["new"]["database_password"],$link)."');",$link);
                if($data["new"]["remote_access"] == 'y') {
                    $db_host = '%';
                    mysql_query("SET PASSWORD FOR '".mysql_real_escape_string($data["new"]["database_user"],$link)."'@'$db_host' = PASSWORD('".mysql_real_escape_string($data["new"]["database_password"],$link)."');",$link);
          $this->process_host_list("PASSWORD", "", $data["new"]["database_user"], $data["new"]["database_password"], $data["new"]["remote_ips"], $link);
                }
                $app->log('Changing mysql user password for: '.$data["new"]["database_user"],LOGLEVEL_DEBUG);
            }
@@ -225,9 +269,8 @@
            
            //* Get the db host setting for the access priveliges
            if($data["old"]["remote_access"] == 'y') {
                 $db_host = '%';
                if(mysql_query("DROP USER '".mysql_real_escape_string($data["old"]["database_user"],$link)."'@'$db_host';",$link)) {
                    $app->log('Dropping mysql user: '.$data["old"]["database_user"],LOGLEVEL_DEBUG);
                 if($this->process_host_list("DROP", "", $data["old"]["database_user"], "", $data["old"]["remote_ips"], $link)) {
            $app->log('Dropping mysql user: '.$data["old"]["database_user"],LOGLEVEL_DEBUG);
                } else {
                    $app->log('Error while dropping mysql user: '.$data["old"]["database_user"].' '.mysql_error($link),LOGLEVEL_ERROR);
                }
server/plugins-available/pma_symlink_plugin.inc.php
New file
@@ -0,0 +1,121 @@
<?php
/*
Copyright (c) 2007 - 2009, Till Brehm, projektfarm Gmbh
All rights reserved.
Modification (c) 2009, Marius Cramer, pixcept KG
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.
*/
class pma_symlink_plugin {
    var $plugin_name = 'pma_symlink_plugin';
    var $class_name = 'pma_symlink_plugin';
    var $action;
    //* This function is called during ispconfig installation to determine
    //  if a symlink shall be created for this plugin.
    function onInstall() {
        global $conf;
            return false;
    }
    /*
         This function is called when the plugin is loaded
    */
    function onLoad() {
        global $app;
        /*
        Register for the events
        */
        $app->plugins->registerEvent('web_domain_insert',$this->plugin_name,'insert');
        $app->plugins->registerEvent('web_domain_update',$this->plugin_name,'update');
    }
    function insert($event_name,$data) {
        global $app, $conf;
        $this->action = 'insert';
        // just run the update function
        $this->update($event_name,$data);
    }
    function update($event_name,$data) {
        global $app, $conf;
        if($this->action != 'insert') $this->action = 'update';
        if($data["new"]["type"] != "vhost" && $data["new"]["parent_domain_id"] > 0) {
            $old_parent_domain_id = intval($data["old"]["parent_domain_id"]);
            $new_parent_domain_id = intval($data["new"]["parent_domain_id"]);
            // If the parent_domain_id has been chenged, we will have to update the old site as well.
            if($this->action == 'update' && $data["new"]["parent_domain_id"] != $data["old"]["parent_domain_id"]) {
                $tmp = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ".$old_parent_domain_id." AND active = 'y'");
                $data["new"] = $tmp;
                $data["old"] = $tmp;
                $this->action = 'update';
                $this->update($event_name,$data);
            }
            // This is not a vhost, so we need to update the parent record instead.
            $tmp = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ".$new_parent_domain_id." AND active = 'y'");
            $data["new"] = $tmp;
            $data["old"] = $tmp;
            $this->action = 'update';
        }
        if($data["new"]["document_root"] == '') {
            $app->log("document_root not set",LOGLEVEL_WARN);
            return 0;
        }
        $symlink = true;
        if($data["new"]["php"] == "suphp") $symlink = false;
        elseif($data["new"]["php"] == "cgi" && $data["new"]["suexec"] == "y") $symlink = false;
        elseif($data["new"]["php"] == "fast-cgi" && $data["new"]["suexec"] == "y") $symlink = false;
        if(!is_dir($data["new"]["document_root"]."/web")) exec("mkdir -p ".$data["new"]["document_root"]."/web");
        if($symlink == false) {
            if(is_link($data["new"]["document_root"]."/web/phpmyadmin")) exec("rm -f ".$data["new"]["document_root"]."/web/phpmyadmin");
        } else {
            if(!is_link($data["new"]["document_root"]."/web/phpmyadmin")) exec("ln -s /var/www/phpmyadmin ".$data["new"]["document_root"]."/web/phpmyadmin");
            else exec("ln -sf /var/www/phpmyadmin ".$data["new"]["document_root"]."/web/phpmyadmin");
        }
    }
} // end class
?>
server/plugins-available/software_update_plugin.inc.php
@@ -62,17 +62,24 @@
        
    }
    
    function set_install_status($inst_id, $status) {
        global $app;
        $app->db->query("UPDATE software_update_inst SET status = '{$status}' WHERE software_update_inst_id = '{$inst_id}'");
        $app->dbmaster->query("UPDATE software_update_inst SET status = '{$status}' WHERE software_update_inst_id = '{$inst_id}'");
    }
    function process($event_name,$data) {
        global $app, $conf;
        
        if(!$conf['software_updates_enabled'] == true) {
        if(!$conf['software_updates_enabled'] == true) {
            $app->log('Software Updates not enabled on this server. To enable updates, set $conf["software_updates_enabled"] = true; in config.inc.php',LOGLEVEL_ERROR);
            $this->set_install_status($data["new"]["software_update_inst_id"], "failed");
            return false;
        }
        
        //* Get the info of the package:
        $software_update_id = intval($data["new"]["software_update_id"]);
        $software_update_id = intval($data["new"]["software_update_id"]);
        $software_update = $app->db->queryOneRecord("SELECT * FROM software_update WHERE software_update_id = '$software_update_id'");
        
        $temp_dir = '/tmp/'.md5 (uniqid (rand()));
@@ -80,6 +87,7 @@
        mkdir($temp_dir);
        if(!is_dir($temp_dir)) {
            $app->log("Unable to create temp directory.",LOGLEVEL_ERROR);
            $this->set_install_status($data["new"]["software_update_inst_id"], "failed");
            return false;
        }
        
@@ -97,6 +105,7 @@
                $app->log("The md5 sum of the downloaded file is incorrect. Update aborted.",LOGLEVEL_ERROR);
                exec("rm -rf $temp_dir");
                $app->log("Deleting the temp directory $temp_dir",LOGLEVEL_DEBUG);
                $this->set_install_status($data["new"]["software_update_inst_id"], "failed");
                return false;
            } else {
                $app->log("md5sum of the downloaded file is verified.",LOGLEVEL_DEBUG);
@@ -110,18 +119,28 @@
                // Execute the setup script
                exec('chmod +x '.$temp_dir.'/setup.sh');
                $app->log("Executing setup.sh file in directory $temp_dir",LOGLEVEL_DEBUG);
                exec('cd '.$temp_dir.' && ./setup.sh');
                $app->db->query("UPDATE software_update_inst SET status = 'installed' WHERE software_update_inst_id = ".$data["new"]["software_update_inst_id"]);
                exec('cd '.$temp_dir.' && ./setup.sh > package_install.log');
                $log_data = @file_get_contents("{$temp_dir}/package_install.log");
                if(preg_match("'.*\[OK\]\s*$'is", $log_data)) {
                    $app->log("Installation successful",LOGLEVEL_DEBUG);
                    $app->log($log_data,LOGLEVEL_DEBUG);
                    $this->set_install_status($data["new"]["software_update_inst_id"], "installed");
                } else {
                    $app->log("Installation failed:\n\n" . $log_data,LOGLEVEL_ERROR);
                    $this->set_install_status($data["new"]["software_update_inst_id"], "failed");
                }
            } else {
                $app->log("setup.sh file not found",LOGLEVEL_ERROR);
                $this->set_install_status($data["new"]["software_update_inst_id"], "failed");
            }
        } else {
            $app->log("Download of the update file failed",LOGLEVEL_ERROR);
            $this->set_install_status($data["new"]["software_update_inst_id"], "failed");
        }
        
        exec("rm -rf $temp_dir");
        $app->log("Deleting the temp directory $temp_dir",LOGLEVEL_DEBUG);
    }
    
server/plugins-available/webmail_symlink_plugin.inc.php
New file
@@ -0,0 +1,121 @@
<?php
/*
Copyright (c) 2007 - 2009, Till Brehm, projektfarm Gmbh
All rights reserved.
Modification (c) 2009, Marius Cramer, pixcept KG
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.
*/
class webmail_symlink_plugin {
    var $plugin_name = 'webmail_symlink_plugin';
    var $class_name = 'webmail_symlink_plugin';
    var $action;
    //* This function is called during ispconfig installation to determine
    //  if a symlink shall be created for this plugin.
    function onInstall() {
        global $conf;
        return false;
    }
    /*
         This function is called when the plugin is loaded
    */
    function onLoad() {
        global $app;
        /*
        Register for the events
        */
        $app->plugins->registerEvent('web_domain_insert',$this->plugin_name,'insert');
        $app->plugins->registerEvent('web_domain_update',$this->plugin_name,'update');
    }
    function insert($event_name,$data) {
        global $app, $conf;
        $this->action = 'insert';
        // just run the update function
        $this->update($event_name,$data);
    }
    function update($event_name,$data) {
        global $app, $conf;
        if($this->action != 'insert') $this->action = 'update';
        if($data["new"]["type"] != "vhost" && $data["new"]["parent_domain_id"] > 0) {
            $old_parent_domain_id = intval($data["old"]["parent_domain_id"]);
            $new_parent_domain_id = intval($data["new"]["parent_domain_id"]);
            // If the parent_domain_id has been chenged, we will have to update the old site as well.
            if($this->action == 'update' && $data["new"]["parent_domain_id"] != $data["old"]["parent_domain_id"]) {
                $tmp = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ".$old_parent_domain_id." AND active = 'y'");
                $data["new"] = $tmp;
                $data["old"] = $tmp;
                $this->action = 'update';
                $this->update($event_name,$data);
            }
            // This is not a vhost, so we need to update the parent record instead.
            $tmp = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ".$new_parent_domain_id." AND active = 'y'");
            $data["new"] = $tmp;
            $data["old"] = $tmp;
            $this->action = 'update';
        }
        if($data["new"]["document_root"] == '') {
            $app->log("document_root not set",LOGLEVEL_WARN);
            return 0;
        }
        $symlink = true;
        if($data["new"]["php"] == "suphp") $symlink = false;
        elseif($data["new"]["php"] == "cgi" && $data["new"]["suexec"] == "y") $symlink = false;
        elseif($data["new"]["php"] == "fast-cgi" && $data["new"]["suexec"] == "y") $symlink = false;
        if(!is_dir($data["new"]["document_root"]."/web")) exec("mkdir -p ".$data["new"]["document_root"]."/web");
        if($symlink == false) {
            if(is_link($data["new"]["document_root"]."/web/webmail")) exec("rm -f ".$data["new"]["document_root"]."/web/webmail");
        } else {
            if(!is_link($data["new"]["document_root"]."/web/webmail")) exec("ln -s /var/www/webmail ".$data["new"]["document_root"]."/web/webmail");
            else exec("ln -sf /var/www/webmail ".$data["new"]["document_root"]."/web/webmail");
        }
    }
} // end class
?>
server/scripts/getmail.sh
File was deleted
server/scripts/ispconfig_update.php
@@ -95,11 +95,13 @@
    $new_version = trim($new_version);
    if($new_version != ISPC_APP_VERSION) {
        passthru('/usr/local/ispconfig/server/scripts/update_from_tgz.sh');
        exit;
    } else {
        echo "There are no updates available for ISPConfig ".ISPC_APP_VERSION."\n";
    }
} else {
    passthru('/usr/local/ispconfig/server/scripts/update_from_svn.sh');
    exit;
}
server/scripts/run-getmail.sh
@@ -3,7 +3,11 @@
cd /etc/getmail
rcfiles=""
for file in *.conf ; do
if [ $file != "*.conf" ]; then
rcfiles="$rcfiles -r $file"
fi
done
#echo $rcfiles
exec /usr/bin/getmail -n -v -g /etc/getmail $rcfiles
if [ "$rcfiles" != "" ]; then
exec /usr/bin/getmail -n -v -g /etc/getmail $rcfiles
fi
server/scripts/update_from_svn.sh
@@ -5,4 +5,6 @@
cd trunk/install
php -q update.php
cd /tmp
rm -rf /tmp/trunk
rm -rf /tmp/trunk
exit 0
server/scripts/update_from_tgz.sh
@@ -8,8 +8,15 @@
fi
wget http://www.ispconfig.org/downloads/ISPConfig-3-stable.tar.gz
tar xvfz ISPConfig-3-stable.tar.gz
cd ispconfig3_install/install/
php -q update.php
rm -rf /tmp/ispconfig3_install/install
rm -f ISPConfig-3-stable.tar.gz
if [ -f ISPConfig-3-stable.tar.gz ]
then
    tar xvfz ISPConfig-3-stable.tar.gz
    cd ispconfig3_install/install/
    php -q update.php
    rm -rf /tmp/ispconfig3_install/install
    rm -f ISPConfig-3-stable.tar.gz
else
    echo "Unable to download the update."
fi
exit 0
server/scripts/vlogger
New file
@@ -0,0 +1,564 @@
#!/usr/bin/perl -T
#
# vlogger - smarter logging for apache
# steve j. kondik  <shade@chemlab.org>
#
# this script will take piped logs in STDIN, break off the first component
# and log the line into the proper directory under $LOGDIR.  it will roll the
# logs over at midnight on-the-fly and maintain a symlink to the most recent log.
#
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Library General Public
# License as published by the Free Software Foundation; either
# version 2 of the License, or (at your option) any later version.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
# Library General Public License for more details.
#
#
# CHANGELOG:
# 0.1    initial release
# 0.2    cleanups, added -e option for errorlogs, added strict stuff
# 0.3    cleanups, bugfixes, docs, added -r size rotation option
# 0.4   added dbi usage tracking option, code cleanups from cz@digitalfreaks.org
# 1.0    small bugfixes, first production release
# 1.1   bugfix release
# 1.2   support for mod_logio
# 1.3    various contributed bugfixes
#
#
# TODO:
# configurable file compression using Compress::Zlib, maybe.
#
package vlogger;
$ENV{PATH} = "/bin:/usr/bin";
my $VERSION = "1.3";
=head1 NAME
vlogger - flexible log rotation and usage tracking in perl
=head1 SYNOPSIS
vlogger [OPTIONS]... [LOGDIR]
=head1 DESCRIPTION
Vlogger is designed to make webserver log rotation simple and easy to manage.
It deals with VirtualHost logs automatically, so only one directive is required
to manage all hosts on a webserver.  Vlogger takes piped output from Apache or
another webserver, splits off the first field, and writes the logs to logfiles
in subdirectories.  It uses a filehandle cache to avoid resource limitations.
It will start a new logfile at the beginning of a new day, and optionally start
new files when a certain filesize is reached.  It can maintain a symlink to
the most recent log for easy access.  Optionally, host parsing can be disabled
for use in ErrorLog directives.
To use vlogger, you need to add a "%v" to the first part of your LogFormat:
LogFormat "%v %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
Then call it from a customlog:
CustomLog "| /usr/local/sbin/vlogger -s access.log -u www-logs -g www-logs /var/log/apache" combined
=head1 OPTIONS
Options are given in short format on the command line.
-a
    Do not autoflush files.  This may improve performance but may break logfile
analyzers that depend on full entries in the logs.
-e
    ErrorLog mode.  In this mode, the host parsing is disabled, and the file is
written out using the template under the specified LOGDIR.
-n
    Disables rotation.  This option disables rotation altogether.
-f MAXFILES
    Maximum number of filehandles to keep open.  Defaults to 100.  Setting this
value too high may result in the system running out of file descriptors.
Setting it too low may affect performance.
-u UID
    Change user to UID when running as root.
-g GID
    Change group to GID when running as root.
-t TEMPLATE
    Filename template using Date::Format codes.  Default is "%m%d%Y-access.log",
or "%m%d%Y-error.log".  When using the -r option, the default becomes
"%m%d%Y-%T-access.log" or "%m%d%Y-%T-error.log".
-s SYMLINK
    Specifies the name of a symlink to the current file.
-r SIZE
    Rotate files when they reach SIZE.  SIZE is given in bytes.
-d CONFIG
    Use the DBI usage tracker.
-h
    Displays help.
-v
    Prints version information.
=head1 DBI USAGE TRACKER
    Vlogger can automatically keep track of per-virtualhost usage statistics in a
database.  DBI and the relevant drivers (eg. DBD::mysql) needs to be installed for
this to work.  Create a table in your database to hold the data.  A "mysql_create.sql"
script is provided for using this feature with MySQL.  Configure the dsn, user, pass
and dump values in the vlogger-dbi.conf file.  The "dump" parameter controls how often
vlogger will dump its stats into the database (the default is 30 seconds).  Copy this
file to somewhere convienient on your filesystem (like /etc/apache/vlogger-dbi.conf) and
start vlogger with "-d /etc/apache/vlogger-dbi.conf".  You might want to use this feature
to easily bill customers on a daily/weekly/monthly basis for bandwidth usage.
=head1 SEE ALSO
cronolog(1), httplog(1)
=head1 BUGS
None, yet.
=head1 AUTHORS
Steve J. Kondik <shade@chemlab.org>
WWW: http://n0rp.chemlab.org/vlogger
=cut
# a couple modules we need
use strict;
no strict "refs";
use warnings;
use sigtrap qw(handler exitall HUP USR1 TERM INT PIPE);
use Date::Format;
use Getopt::Std;
use IO::Handle;
# get command line options
our %OPTS;
getopts( 'f:t:s:hu:g:aeivr:d:', \%OPTS );
# print out version
if ( $OPTS{'v'} ) {
    print "VLogger $VERSION (apache logfile parser)\n";
    print "Written by Steve J. Kondik <shade\@chemlab.org>\n\n";
    print "This is free software; see the source for copying conditions.  There is NO\n";
    print "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n";
    exit;
}
# print help
if ( $OPTS{'h'} || !$ARGV[0] ) {
    usage();
    exit;
}
# log directory
my $LOGDIR;
if ( $ARGV[0] ) {
    if ( !-d $ARGV[0] ) {
        print STDERR
          "[vlogger] target directory $ARGV[0] does not exist - exiting.\n\n";
        exit;
    }
    $LOGDIR = $ARGV[0];
}
$LOGDIR =~ /(.*)/;
$LOGDIR = $1;
# change uid/gid if requested (and running as root)
if ( $> == "0" ) {
    if ( $OPTS{'g'} ) {
        my $guid = getgrnam( $OPTS{'g'} );
        if ( !defined $guid || $guid == 0 ) {
            print STDERR
              "[vlogger] cannot run as root or nonexistant group.\n\n";
            exit;
        }
        $) = $guid;
        $( = $guid;
        if ( $) != $guid and $) != ( $guid - 2**32 ) ) {
            die "fatal: setgid to gid $guid failed\n";
        }
    }
    if ( $OPTS{'u'} ) {
        my $uuid = getpwnam( $OPTS{'u'} );
        if ( !defined $uuid || $uuid == 0 ) {
            print STDERR
              "[vlogger] cannot run as root or nonexistant user.\n\n";
            exit;
        }
        $> = $uuid;
        $< = $uuid;
        if ( $> != $uuid and $> != ( $uuid - 2**32 ) ) {
            die "fatal: setuid to uid $uuid failed\n";
        }
    }
}
# set up dbi stuffs
my $DBI_DSN;
my $DBI_USER;
my $DBI_PASS;
my $DBI_DUMP;
if ( $OPTS{'d'} ) {
    if ( $OPTS{'e'} ) {
        print "-d not valid with -e.  exiting.\n";
        exit;
    }
    eval "use DBI";
    open CONF, $OPTS{'d'};
    while (<CONF>) {
        chomp;
        my @conf = split (/\s/);
        if ( $conf[0] eq "dsn" ) {
            $DBI_DSN = $conf[1];
        }
        elsif ( $conf[0] eq "user" ) {
            $DBI_USER = $conf[1];
        }
        elsif ( $conf[0] eq "pass" ) {
            $DBI_PASS = $conf[1];
        }
        elsif ( $conf[0] eq "dump" ) {
            $DBI_DUMP = $conf[1];
        }
    }
    close CONF;
    unless ( $DBI_DSN && $DBI_USER && $DBI_PASS && $DBI_DUMP ) {
        print "All values for DBI configuration are not properly defined.\n\n";
        exit;
    }
    # test the connection
    my $dbh = DBI->connect( $DBI_DSN, $DBI_USER, $DBI_PASS )
      or die "DBI Error: $!";
    $dbh->disconnect;
    # SIGALRM dumps the tracker hash
    $SIG{ALRM} = \&dump_tracker;
    alarm $DBI_DUMP;
}
# max files to keep open
my $MAXFILES;
if ( $OPTS{'f'} ) {
    $MAXFILES = $OPTS{'f'};
}
else {
    $MAXFILES = "100";
}
# filesize rotation
my $MAXSIZE;
if ( $OPTS{'r'} ) {
    $MAXSIZE = $OPTS{'r'};
}
# filename template
my $TEMPLATE;
if ( $OPTS{'t'} ) {
    $TEMPLATE = $OPTS{'t'};
    $TEMPLATE =~ /(.*)/;
    $TEMPLATE = $1;
}
elsif ( $OPTS{'e'} ) {
    if ( $OPTS{'r'} ) {
        $TEMPLATE = "%m%d%Y-%T-error.log";
    }
    else {
        $TEMPLATE = "%m%d%Y-error.log";
    }
}
else {
    if ( $OPTS{'r'} ) {
        $TEMPLATE = "%m%d%Y-%T-access.log";
    }
    else {
        $TEMPLATE = "%m%d%Y-access.log";
    }
}
# symlink
if ( $OPTS{'s'} ) {
    $OPTS{'s'} =~ /(.*)/;
    $OPTS{'s'} = $1;
}
# chroot to the logdir
chdir($LOGDIR);
#chroot("."); we better do not chroot as DBI requires to load a module on the fly -> error!
my %logs     = ();
my %tracker  = ();
my $LASTDUMP = time();
# pick a mode
if ( $OPTS{'e'} ) {
    $0 = "vlogger (error log)";
    # errorlog mode
    open ELOG, ">>" . time2str( $TEMPLATE, time() )
      or die ( "can't open $LOGDIR/" . time2str( $TEMPLATE, time() ) );
    unless ( $OPTS{'a'} ) {
        ELOG->autoflush(1);
    }
    if ( $OPTS{'s'} ) {
        if ( -l $OPTS{'s'} ) {
            unlink( $OPTS{'s'} );
        }
        symlink( time2str( $TEMPLATE, time() ), $OPTS{'s'} );
    }
    my $LASTWRITE = time();
    while ( my $log_line = <STDIN> ) {
        unless ( $OPTS{'n'} ) {
            if ( time2str( "%Y%m%d", time() ) >
                time2str( "%Y%m%d", $LASTWRITE ) )
            {
                # open a new file
                close ELOG;
                open_errorlog();
            }
            elsif ( $OPTS{'r'} ) {
                # check the size
                my @filesize = ELOG->stat;
                print $filesize[7] . "\n";
                if ( $filesize[7] > $MAXSIZE ) {
                    close ELOG;
                    open_errorlog();
                }
            }
            $LASTWRITE = time();
        }
        # we dont need to do any other parsing at all, so write the line.
        print ELOG $log_line;
    }
}
else {
    # accesslog mode
    $0 = "vlogger (access log)";
    while ( my $log_line = <STDIN> ) {
        # parse out the first word (the vhost)
        my @this_line = split ( /\s/, $log_line );
        my ($vhost) = $this_line[0];
        my $reqsize = $this_line[10];
        $vhost = lc($vhost) || "default";
        if ( $vhost =~ m#[/\\]# ) { $vhost = "default" }
        $vhost =~ /(.*)/o;
        $vhost = $1;
    $vhost = 'default' unless $vhost;
        if ( $OPTS{'i'} ) {
            $reqsize = $this_line[1] + $this_line[2];
        }
        # if we're writing to a log, and it rolls to a new day, close all files.
        unless ( $OPTS{'n'} ) {
            if ( $logs{$vhost}
                && ( time2str( "%Y%m%d", time() ) >
                    time2str( "%Y%m%d", $logs{$vhost} ) ) )
            {
                foreach my $key ( keys %logs ) {
                    close $key;
                }
                %logs = ();
            }
            elsif ( $OPTS{'r'} && $logs{$vhost} ) {
                # check the size
                my @filesize = $vhost->stat;
                if ( $filesize[7] > $MAXSIZE ) {
                    close $vhost;
                    delete( $logs{$vhost} );
                }
            }
        }
        # open a new log
        if ( !$logs{$vhost} ) {
            # check how many files we have open, close the oldest one
            if ( keys(%logs) > $MAXFILES ) {
                my ( $key, $value ) =
                  sort { $logs{$a} <=> $logs{$b} } ( keys(%logs) );
                close $key;
                delete( $logs{$key} );
            }
            # check if directory is there
            unless ( -d "${vhost}" ) {
                mkdir("${vhost}");
            }
            # open the file using the template
            open $vhost, ">>${vhost}/" . time2str( $TEMPLATE, time() )
              or die ( "can't open $LOGDIR/${vhost}/"
                . time2str( $TEMPLATE, time() ) );
            # autoflush the handle unless -a
            if ( !$OPTS{'a'} ) {
                $vhost->autoflush(1);
            }
            # make a symlink if -s
            if ( $OPTS{'s'} ) {
                chdir("${vhost}");
                if ( -l $OPTS{'s'} ) {
                    unlink( $OPTS{'s'} );
                }
                symlink( time2str( $TEMPLATE, time() ), $OPTS{'s'} );
                chdir("..");
            }
        }
        # update the timestamp and write the line
        $logs{$vhost} = time();
        if ($OPTS{'i'}) {
            $log_line =~ s/^\S*\s+\S*\s+\S*\s+//o;
        }
        else {
            $log_line =~ s/^\S*\s+//o;
        }
        if ( $reqsize =~ m/^\d*$/ && $reqsize > 0 ) {
            $tracker{$vhost} += $reqsize;
        }
        print $vhost $log_line;
    }
}
# sub to close all files
sub closeall {
    if ( $OPTS{'e'} ) {
        close ELOG;
    }
    else {
        foreach my $key ( keys %logs ) {
            close $key;
        }
        %logs = ();
        if ( $OPTS{'d'} ) {
            vlogger::dump_tracker();
        }
    }
}
sub exitall {
    vlogger::closeall;
    exit;
}
# sub to open new errorlog
sub open_errorlog {
    open ELOG, ">>" . time2str( $TEMPLATE, time() )
      or die ( "can't open $LOGDIR/" . time2str( $TEMPLATE, time() ) );
    if ( $OPTS{'s'} ) {
        if ( -l $OPTS{'s'} ) {
            unlink( $OPTS{'s'} );
        }
        symlink( time2str( $TEMPLATE, time() ), $OPTS{'s'} );
    }
    # autoflush it unless -a
    unless ( $OPTS{'a'} ) {
        ELOG->autoflush(1);
    }
}
# sub to update the database with the tracker data
sub dump_tracker {
    if ( keys(%tracker) > 0 ) {
        my $dbh = DBI->connect( $DBI_DSN, $DBI_USER, $DBI_PASS )
          or warn "DBI Error: $!";
        foreach my $key ( keys(%tracker) ) {
            my $ts = time2str( "%Y-%m-%d", time() );
            my $sth =
              $dbh->prepare( "select * from web_traffic where hostname='" . $key
                . "' and traffic_date='" . $ts . "'" );
            $sth->execute;
            if ( $sth->rows ) {
                my $query =
                  "update web_traffic set traffic_bytes=traffic_bytes+"
                  . $tracker{$key}
                  . " where hostname='" . $key
                  . "' and traffic_date='" . $ts . "'";
                $dbh->do($query);
            }
            else {
                my $query = "insert into web_traffic (hostname, traffic_date, traffic_bytes) values ('$key', '$ts', '$tracker{$key}')";
                $dbh->do($query);
            }
        }
        $dbh->disconnect;
        %tracker = ();
    }
    alarm $DBI_DUMP;
}
# print usage info
sub usage {
    print "Usage: vlogger [OPTIONS]... [LOGDIR]\n";
    print "Handles a piped logfile from a webserver, splitting it into it's\n";
    print "host components, and rotates the files daily.\n\n";
    print "  -a                          do not autoflush files\n";
    print "  -e                          errorlog mode\n";
    print "  -n                          don't rotate files\n";
    print "  -f MAXFILES                 max number of files to keep open\n";
    print "  -u UID                      uid to switch to when running as root\n";
    print "  -g GID                      gid to switch to when running as root\n";
    print "  -t TEMPLATE                 filename template (see perldoc Date::Format)\n";
    print "  -s SYMLINK                  maintain a symlink to most recent file\n";
    print "  -r SIZE                     rotate when file reaches SIZE\n";
    print "  -d CONFIG                   use DBI usage tracker (see perldoc vlogger)\n";
    print "  -i                          extract mod_logio instead of filesize\n";
    print "  -h                          display this help\n";
    print "  -v                          output version information\n\n";
    print "TEMPLATE may be a filename with Date::Format codes.  The default template\n";
    print "is %m%d%Y-access.log.  SYMLINK is the name of a file that will be linked to\n";
    print "the most recent file inside the log directory.  The default is access.log.\n";
    print "MAXFILES is the maximum number of filehandles to cache.  This defaults to 100.\n";
    print "When running with -a, performance may improve, but this might confuse some\n";
    print "log analysis software that expects complete log entries at all times.\n";
    print "Errorlog mode is used when running with an Apache errorlog.  In this mode,\n";
    print "virtualhost parsing is disabled, and a single file is written in LOGDIR\n";
    print "using the TEMPLATE (%m%d%Y-error.log is default for -e).  When running with\n";
    print "-r, the template becomes %m%d%Y-%T-xxx.log.  SIZE is given in bytes.\n\n";
    print "Report bugs to <shade\@chemlab.org>.\n";
}
server/server.php
@@ -54,8 +54,13 @@
// Check if another process is running
if(is_file($conf["temppath"].$conf["fs_div"].".ispconfig_lock")){
  clearstatcache();
  for($i=0;$i<1200;$i++){ // Wait max. 1200 sec, then proceed
  for($i=0;$i<120;$i++){ // Wait max. 1200 sec, then proceed
    if(is_file($conf["temppath"].$conf["fs_div"].".ispconfig_lock")){
      exec("ps aux | grep '/usr/local/ispconfig/server/server.php' | grep -v 'grep' | wc -l", $check);
      if(intval($check[0]) > 1) { // 1 because this is 2nd instance!
          $app->log("There is already an instance of server.php running. Exiting.", LOGLEVEL_DEBUG);
          exit;
      }
      $app->log("There is already a lockfile set. Waiting another 10 seconds...", LOGLEVEL_DEBUG);
      sleep(10);
      clearstatcache();