From 9907afe63056f22ad01ab9604daa477b81147113 Mon Sep 17 00:00:00 2001 From: "Michael Kaufmann (d00p)" Date: Wed, 20 Jan 2010 09:12:52 +0000 Subject: [PATCH] ininitial froxlor commit; 'reverted' old-style update-process; removed billing-classes, -functions and -templates; some sql-fixes; --- COPYING | 281 ++ actions/admin/settings/000.version.php | 64 + actions/admin/settings/100.panel.php | 163 + actions/admin/settings/110.accounts.php | 110 + actions/admin/settings/120.system.php | 103 + actions/admin/settings/130.webserver.php | 168 + actions/admin/settings/140.statistics.php | 82 + actions/admin/settings/150.mail.php | 95 + actions/admin/settings/160.nameserver.php | 65 + actions/admin/settings/170.logger.php | 74 + actions/admin/settings/180.dkim.php | 70 + actions/admin/settings/190.ticket.php | 129 + actions/admin/settings/200.aps.php | 98 + actions/admin/settings/210.security.php | 106 + admin_admins.php | 739 ++++ admin_aps.php | 34 + admin_configfiles.php | 178 + admin_customers.php | 1185 ++++++ admin_domains.php | 1122 ++++++ admin_index.php | 294 ++ admin_ipsandports.php | 320 ++ admin_logger.php | 175 + admin_message.php | 146 + admin_phpsettings.php | 185 + admin_settings.php | 159 + admin_templates.php | 379 ++ admin_tickets.php | 802 ++++ customer_aps.php | 34 + customer_autoresponder.php | 216 ++ customer_domains.php | 492 +++ customer_email.php | 712 ++++ customer_extras.php | 426 +++ customer_ftp.php | 243 ++ customer_index.php | 182 + customer_mysql.php | 252 ++ customer_tickets.php | 418 +++ customer_traffic.php | 280 ++ images/ball.gif | Bin 0 -> 51 bytes images/changelanguage.gif | Bin 0 -> 4934 bytes images/default.png | Bin 0 -> 4716 bytes images/endsection.gif | Bin 0 -> 4383 bytes images/error.gif | Bin 0 -> 1294 bytes images/error.png | Bin 0 -> 1788 bytes images/footer.gif | Bin 0 -> 21262 bytes images/header.gif | Bin 0 -> 27654 bytes images/header_r.gif | Bin 0 -> 1192 bytes images/info.png | Bin 0 -> 2942 bytes images/login.gif | Bin 0 -> 2037 bytes images/logininternal.gif | Bin 0 -> 4960 bytes images/order_asc.gif | Bin 0 -> 62 bytes images/order_desc.gif | Bin 0 -> 60 bytes images/section.gif | Bin 0 -> 4386 bytes images/shadow.gif | Bin 0 -> 86 bytes images/subsection.gif | Bin 0 -> 3636 bytes images/title.gif | Bin 0 -> 69 bytes images/traffic_blue.gif | Bin 0 -> 66 bytes images/traffic_green.gif | Bin 0 -> 82 bytes images/traffic_red.gif | Bin 0 -> 105 bytes images/traffic_yellow.gif | Bin 0 -> 827 bytes index.php | 271 ++ install/install.php | 802 ++++ install/lng/english.lng.php | 79 + install/lng/french.lng.php | 69 + install/lng/german.lng.php | 76 + install/scripts/htpasswd-htaccess-remover.php | 106 + install/scripts/language-check.php | 186 + install/syscp.sql | 916 +++++ .../1.0/update_1.0.10_1.2-beta1.inc.php | 80 + install/updates/1.0/update_1.0_1.0.10.inc.php | 130 + .../1.2/update_1.2-beta1_1.2.19.inc.php | 1187 ++++++ install/updates/1.2/update_1.2.19_1.4.inc.php | 1082 ++++++ install/updates/1.4/update_1.4.inc.php | 118 + install/updates/froxlor/upgrade_syscp.inc.php | 198 + install/updatesql.php | 130 + lib/classes/aps/class.ApsInstaller.php | 561 +++ lib/classes/aps/class.ApsParser.php | 3249 +++++++++++++++++ lib/classes/aps/class.ApsUpdater.php | 269 ++ lib/classes/database/class.db.php | 341 ++ lib/classes/idna/class.idna_convert.php | 1381 +++++++ .../idna/class.idna_convert_wrapper.php | 143 + lib/classes/idna/npdata.ser | 1 + .../logger/abstract.AbstractLogger.php | 100 + lib/classes/logger/class.FileLogger.php | 188 + lib/classes/logger/class.MysqlLogger.php | 113 + lib/classes/logger/class.SysCPLogger.php | 205 ++ lib/classes/logger/class.SysLogger.php | 128 + lib/classes/output/class.paging.php | 518 +++ lib/classes/phpmailer/class.PHPMailer.php | 2084 +++++++++++ lib/classes/phpmailer/class.SMTP.php | 1348 +++++++ lib/classes/ticket/class.ticket.php | 663 ++++ lib/configfiles/etch.inc.php | 267 ++ lib/configfiles/gentoo.inc.php | 290 ++ lib/configfiles/hardy.inc.php | 261 ++ lib/configfiles/lenny.inc.php | 268 ++ lib/configfiles/suse10.inc.php | 139 + lib/configfiles_index.inc.php | 48 + lib/cron_init.php | 248 ++ lib/cron_shutdown.php | 46 + lib/functions.php | 76 + .../function.storeSettingApsPhpExtensions.php | 42 + ...nction.storeSettingApsWebserverModules.php | 46 + .../aps/function.sys_get_temp_dir.php | 63 + .../database/function.correctMysqlUsers.php | 89 + lib/functions/database/function.getTables.php | 120 + .../database/function.remove_remarks.php | 38 + .../database/function.split_sql_file.php | 123 + lib/functions/filedir/function.findDirs.php | 76 + .../filedir/function.isConfigDir.php | 54 + .../filedir/function.makeCorrectDir.php | 40 + .../filedir/function.makeCorrectFile.php | 37 + .../filedir/function.makePathfield.php | 70 + .../filedir/function.makeSecurePath.php | 40 + .../function.mkDirWithCorrectOwnership.php | 84 + lib/functions/filedir/function.safe_exec.php | 114 + .../bool/function.getFormFieldDataBool.php | 30 + .../bool/function.getFormFieldOutputBool.php | 24 + .../bool/function.validateFormFieldBool.php | 28 + .../formfields/constant.formfields.php | 23 + .../date/function.getFormFieldOutputDate.php | 26 + .../function.manipulateFormFieldDataDate.php | 26 + .../date/function.validateFormFieldDate.php | 30 + .../formfields/function.buildForm.php | 50 + .../function.checkPlausibilityFormField.php | 30 + .../formfields/function.getFormFieldData.php | 41 + .../function.getFormFieldOutput.php | 48 + .../function.getFormGroupOutput.php | 23 + .../function.manipulateFormFieldData.php | 26 + .../function.prefetchFormFieldData.php | 26 + .../formfields/function.processForm.php | 143 + .../formfields/function.returnField.php | 21 + .../formfields/function.saveForm.php | 34 + .../formfields/function.saveFormField.php | 34 + .../function.validateFieldDefinition.php | 28 + .../function.validateFormDefinition.php | 28 + .../formfields/function.validateFormField.php | 30 + .../function.getFormFieldOutputHidden.php | 30 + .../function.validateFormFieldHidden.php | 29 + .../int/function.getFormFieldDataInt.php | 30 + .../int/function.getFormFieldOutputInt.php | 21 + .../int/function.validateFormFieldInt.php | 31 + .../function.getFormFieldOutputLabel.php | 23 + .../label/function.validateFormFieldLabel.php | 24 + .../function.getFormFieldDataOption.php | 35 + .../function.getFormFieldOutputOption.php | 45 + .../function.prefetchFormFieldDataOption.php | 28 + .../function.validateFormFieldOption.php | 43 + .../function.getFormFieldOutputString.php | 24 + .../function.validateFormFieldString.php | 99 + .../text/function.getFormFieldOutputText.php | 24 + .../text/function.validateFormFieldText.php | 28 + lib/functions/logger/constant.logger.php | 27 + lib/functions/output/function.ask_yesno.php | 65 + .../output/function.buildNavigation.php | 120 + .../function.getCorrectFullUserDetails.php | 52 + .../function.getCorrectUserSalutation.php | 46 + lib/functions/output/function.getTemplate.php | 61 + .../output/function.makecheckbox.php | 62 + lib/functions/output/function.makeoption.php | 54 + lib/functions/output/function.makeyesno.php | 33 + lib/functions/output/function.redirectTo.php | 90 + .../output/function.standard_error.php | 65 + .../output/function.standard_success.php | 55 + .../function.array_merge_prefix.php | 41 + .../phphelpers/function.array_trim.php | 44 + .../function.doubleval_ressource.php | 38 + .../function.html_entity_decode_array.php | 67 + .../function.html_entity_decode_complete.php | 34 + .../function.htmlentities_array.php | 58 + .../phphelpers/function.intval_ressource.php | 38 + .../phphelpers/function.replace_variables.php | 56 + .../phphelpers/function.str_replace_array.php | 50 + .../function.stripslashes_array.php | 67 + .../function.stripslashes_complete.php | 34 + .../settings/function.getSetting.php | 29 + .../settings/function.loadSettings.php | 56 + .../settings/function.saveSetting.php | 23 + .../function.storeSettingDefaultIp.php | 43 + .../settings/function.storeSettingField.php | 35 + .../function.storeSettingHostname.php | 43 + .../function.storeSettingIpAddress.php | 33 + .../function.storeSettingMysqlAccessHost.php | 44 + .../syscp/function.createAWStatsConf.php | 97 + .../syscp/function.createAWStatsVhost.php | 45 + lib/functions/syscp/function.getAdmins.php | 47 + .../syscp/function.getCustomerDetail.php | 33 + lib/functions/syscp/function.getCustomers.php | 47 + .../syscp/function.getIpAddresses.php | 41 + .../syscp/function.getIpPortCombinations.php | 54 + lib/functions/syscp/function.getLanguages.php | 36 + .../syscp/function.getSessionUserDetail.php | 30 + lib/functions/syscp/function.inserttask.php | 87 + .../syscp/function.loadConfigArrayDir.php | 46 + .../syscp/function.updateCounters.php | 284 ++ .../validate/function.buildValidMailFrom.php | 31 + .../function.checkMysqlAccessHost.php | 33 + .../validate/function.checkUsername.php | 35 + .../function.makeCorrectDestination.php | 43 + lib/functions/validate/function.validate.php | 83 + .../validate/function.validateDomain.php | 46 + .../validate/function.validateEmail.php | 32 + .../validate/function.validateUrl.php | 70 + .../validate/function.validateUsername.php | 45 + .../validate/function.validate_ip.php | 44 + lib/init.php | 376 ++ lib/navigation/00.syscp.main.php | 239 ++ lib/navigation/10.tickets.php | 53 + lib/navigation/20.aps.installer.php | 66 + lib/tables.inc.php | 71 + lng/bulgarian.lng.php | 436 +++ lng/catalan.lng.php | 395 ++ lng/czech.lng.php | 700 ++++ lng/danish.lng.php | 452 +++ lng/dutch.lng.php | 464 +++ lng/english.lng.php | 1247 +++++++ lng/french.lng.php | 1103 ++++++ lng/german.lng.php | 1228 +++++++ lng/hungarian.lng.php | 469 +++ lng/italian.lng.php | 445 +++ lng/phpmailer.lang-en.php | 22 + lng/portugues.lng.php | 1215 ++++++ lng/russian.lng.php | 1405 +++++++ lng/slovak.lng.php | 464 +++ lng/spanish.lng.php | 447 +++ lng/swedish.lng.php | 740 ++++ lng/zh-cn.lng.php | 456 +++ packages/.keep | 0 scripts/cron_apsinstaller.php | 27 + scripts/cron_apsupdater.php | 27 + scripts/cron_autoresponder.php | 229 ++ scripts/cron_legacy.php | 81 + scripts/cron_lighttp.htaccess.php | 182 + scripts/cron_tasks.inc.dns.10.bind.php | 337 ++ scripts/cron_tasks.inc.http.10.apache.php | 953 +++++ .../cron_tasks.inc.http.15.apache_fcgid.php | 258 ++ scripts/cron_tasks.inc.http.20.lighttpd.php | 569 +++ scripts/cron_tasks.php | 204 ++ scripts/cron_ticketarchive.php | 80 + scripts/cron_traffic.inc.functions.php | 231 ++ scripts/cron_traffic.php | 400 ++ scripts/cron_traffic_report.php | 240 ++ scripts/cron_used_tickets_reset.php | 66 + scripts/install_configs.php | 140 + temp/.keep | 0 templates/admin/admins/admins.tpl | 35 + templates/admin/admins/admins_add.tpl | 141 + templates/admin/admins/admins_admin.tpl | 12 + templates/admin/admins/admins_edit.tpl | 169 + templates/admin/aps/askyesno.tpl | 23 + templates/admin/aps/footer.tpl | 1 + templates/admin/aps/header.tpl | 1 + templates/admin/aps/infobox.tpl | 7 + templates/admin/aps/manage_instances.tpl | 51 + .../admin/aps/manage_instances_error.tpl | 5 + .../admin/aps/manage_instances_install.tpl | 5 + .../admin/aps/manage_instances_package.tpl | 3 + .../admin/aps/manage_instances_success.tpl | 5 + .../admin/aps/manage_instances_taskactive.tpl | 3 + .../admin/aps/manage_instances_uninstall.tpl | 3 + templates/admin/aps/manage_packages.tpl | 76 + .../admin/aps/manage_packages_detail.tpl | 8 + .../admin/aps/manage_packages_download.tpl | 19 + templates/admin/aps/manage_packages_row.tpl | 3 + templates/admin/aps/upload.tpl | 19 + templates/admin/configfiles/choose.tpl | 10 + templates/admin/configfiles/choose_daemon.tpl | 2 + .../admin/configfiles/choose_distribution.tpl | 12 + .../admin/configfiles/choose_service.tpl | 3 + templates/admin/configfiles/configfiles.tpl | 15 + .../configfiles/configfiles_commands.tpl | 3 + .../admin/configfiles/configfiles_file.tpl | 1 + .../admin/configfiles/configfiles_files.tpl | 3 + templates/admin/configfiles/wizard.tpl | 28 + templates/admin/customers/customers.tpl | 43 + templates/admin/customers/customers_add.tpl | 175 + .../admin/customers/customers_customer.tpl | 17 + templates/admin/customers/customers_edit.tpl | 181 + templates/admin/domains/domains.tpl | 41 + templates/admin/domains/domains_add.tpl | 186 + templates/admin/domains/domains_domain.tpl | 7 + templates/admin/domains/domains_edit.tpl | 194 + templates/admin/index/change_language.tpl | 23 + templates/admin/index/change_password.tpl | 31 + templates/admin/index/index.tpl | 154 + templates/admin/ipsandports/ipsandports.tpl | 33 + .../admin/ipsandports/ipsandports_add.tpl | 109 + .../admin/ipsandports/ipsandports_edit.tpl | 110 + .../ipsandports/ipsandports_ipandport.tpl | 11 + templates/admin/logger/logger.tpl | 30 + templates/admin/logger/logger_action.tpl | 3 + templates/admin/logger/logger_log.tpl | 6 + templates/admin/message/message.tpl | 39 + templates/admin/phpconfig/overview.tpl | 21 + templates/admin/phpconfig/overview_add.tpl | 89 + templates/admin/phpconfig/overview_edit.tpl | 90 + .../admin/phpconfig/overview_overview.tpl | 10 + templates/admin/settings/settings.tpl | 21 + templates/admin/settings/settings_group.tpl | 8 + templates/admin/settings/updatecounters.tpl | 18 + .../settings/updatecounters_row_admin.tpl | 61 + .../settings/updatecounters_row_customer.tpl | 45 + .../admin/templates/filetemplates_add.tpl | 55 + .../admin/templates/filetemplates_edit.tpl | 56 + templates/admin/templates/templates.tpl | 37 + templates/admin/templates/templates_add_1.tpl | 21 + templates/admin/templates/templates_add_2.tpl | 105 + templates/admin/templates/templates_edit.tpl | 107 + .../templates/templates_filetemplate.tpl | 5 + .../admin/templates/templates_template.tpl | 6 + templates/admin/ticket/archive.tpl | 63 + templates/admin/ticket/archived_tickets.tpl | 10 + templates/admin/ticket/archivesearch.tpl | 31 + templates/admin/ticket/categories.tpl | 34 + templates/admin/ticket/tickets.tpl | 40 + templates/admin/ticket/tickets_categories.tpl | 10 + templates/admin/ticket/tickets_customer.tpl | 3 + .../admin/ticket/tickets_editcategory.tpl | 22 + templates/admin/ticket/tickets_new.tpl | 39 + .../admin/ticket/tickets_newcategory.tpl | 21 + templates/admin/ticket/tickets_reply.tpl | 51 + templates/admin/ticket/tickets_tickets.tpl | 28 + .../admin/ticket/tickets_tickets_list.tpl | 11 + .../admin/ticket/tickets_tickets_main.tpl | 11 + templates/admin/ticket/tickets_view.tpl | 17 + templates/customer/aps/askyesno.tpl | 23 + templates/customer/aps/data.tpl | 9 + templates/customer/aps/footer.tpl | 1 + templates/customer/aps/header.tpl | 1 + templates/customer/aps/infobox.tpl | 7 + templates/customer/aps/installer.tpl | 27 + templates/customer/aps/package.tpl | 53 + templates/customer/aps/package_status.tpl | 48 + templates/customer/aps/search.tpl | 18 + templates/customer/domains/domainlist.tpl | 35 + templates/customer/domains/domains.tpl | 12 + templates/customer/domains/domains_add.tpl | 50 + .../customer/domains/domains_delimiter.tpl | 3 + templates/customer/domains/domains_domain.tpl | 6 + templates/customer/domains/domains_edit.tpl | 59 + templates/customer/email/account_add.tpl | 38 + templates/customer/email/account_changepw.tpl | 26 + .../customer/email/account_changequota.tpl | 26 + templates/customer/email/autoresponder.tpl | 19 + .../customer/email/autoresponder_add.tpl | 34 + .../email/autoresponder_autoresponder.tpl | 6 + .../customer/email/autoresponder_edit.tpl | 35 + templates/customer/email/email.tpl | 12 + templates/customer/email/emails.tpl | 38 + templates/customer/email/emails_add.tpl | 25 + templates/customer/email/emails_domain.tpl | 3 + templates/customer/email/emails_edit.tpl | 46 + .../customer/email/emails_edit_forwarder.tpl | 2 + templates/customer/email/emails_email.tpl | 9 + templates/customer/email/forwarder_add.tpl | 26 + templates/customer/extras/extras.tpl | 12 + templates/customer/extras/htaccess.tpl | 31 + templates/customer/extras/htaccess_add.tpl | 44 + templates/customer/extras/htaccess_edit.tpl | 42 + .../customer/extras/htaccess_htaccess.tpl | 9 + templates/customer/extras/htpasswds.tpl | 28 + templates/customer/extras/htpasswds_add.tpl | 32 + templates/customer/extras/htpasswds_edit.tpl | 30 + .../customer/extras/htpasswds_htpasswd.tpl | 6 + templates/customer/ftp/accounts.tpl | 36 + templates/customer/ftp/accounts_account.tpl | 6 + templates/customer/ftp/accounts_add.tpl | 35 + templates/customer/ftp/accounts_edit.tpl | 26 + templates/customer/ftp/ftp.tpl | 12 + templates/customer/index/change_language.tpl | 23 + templates/customer/index/change_password.tpl | 37 + templates/customer/index/index.tpl | 99 + templates/customer/mysql/mysql.tpl | 12 + templates/customer/mysql/mysqls.tpl | 36 + templates/customer/mysql/mysqls_add.tpl | 31 + templates/customer/mysql/mysqls_database.tpl | 7 + templates/customer/mysql/mysqls_edit.tpl | 36 + templates/customer/ticket/ticket.tpl | 12 + templates/customer/ticket/tickets.tpl | 58 + templates/customer/ticket/tickets_new.tpl | 35 + templates/customer/ticket/tickets_reply.tpl | 51 + templates/customer/ticket/tickets_tickets.tpl | 22 + .../customer/ticket/tickets_tickets_list.tpl | 11 + .../customer/ticket/tickets_tickets_main.tpl | 11 + templates/customer/traffic/traffic.tpl | 30 + .../customer/traffic/traffic_details.tpl | 30 + templates/customer/traffic/traffic_month.tpl | 5 + .../customer/traffic/traffic_traffic.tpl | 7 + templates/footer.tpl | 21 + templates/formfields/bool.tpl | 4 + templates/formfields/hidden.tpl | 4 + templates/formfields/label.tpl | 3 + templates/formfields/option.tpl | 4 + templates/formfields/string.tpl | 4 + templates/formfields/text.tpl | 4 + templates/header.tpl | 39 + templates/login/fpwd.tpl | 44 + templates/login/login.tpl | 47 + templates/main.css | 438 +++ .../awstats/etc_apache_vhosts_05_awstats.conf | 14 + .../etc_awstats_awstats.model.conf.syscp | 9 + ...c_awstats_awstats.model_log_sql.conf.syscp | 9 + .../debian_etch/awstats/etc_cron.d_awstats | 6 + .../awstats/etc_cron.d_awstats_log_sql | 6 + .../awstats/etc_lighttpd_syscp-awstats.conf | 19 + .../courier/etc_courier_authdaemonrc | 68 + .../courier/etc_courier_authmysqlrc | 13 + .../debian_etch/cron/etc_cron.d_syscp | 14 + .../debian_etch/dkim/dkim-filter.conf | 3 + .../dovecot/etc_dovecot_dovecot-sql.conf | 5 + .../dovecot/etc_dovecot_dovecot.conf | 72 + ..._conf.d_acl_30_exim4-config_check_rcpt.rul | 125 + .../etc_exim4_conf.d_auth_30_syscp-config | 30 + ..._exim4_conf.d_main_10_syscp-config_options | 20 + .../etc_exim4_conf.d_router_180_syscp-config | 12 + ...etc_exim4_conf.d_transport_30_syscp-config | 13 + .../libnss/etc_nss-mysql-root.conf | 16 + .../debian_etch/libnss/etc_nss-mysql.conf | 24 + .../debian_etch/libnss/etc_nsswitch.conf | 6 + .../debian_etch/lighttpd/etc_lighttpd.conf | 60 + .../debian_etch/postfix/etc_postfix_main.cf | 92 + .../debian_etch/postfix/etc_postfix_master.cf | 4 + .../etc_postfix_mysql-virtual_alias_maps.cf | 8 + ...c_postfix_mysql-virtual_mailbox_domains.cf | 8 + .../etc_postfix_mysql-virtual_mailbox_maps.cf | 7 + .../postfix/etc_postfix_sasl_smtpd.conf | 11 + .../powerdns/etc_powerdns_pdns-syscp.conf | 7 + .../powerdns/etc_powerdns_pdns.conf | 17 + .../proftpd/etc_proftpd_modules.conf | 34 + .../proftpd/etc_proftpd_proftpd.conf | 64 + .../pure-ftpd/etc_default_pure-ftpd-common | 5 + .../pure-ftpd/etc_pure-ftpd_conf_Bind | 1 + .../etc_pure-ftpd_conf_ChrootEveryone | 1 + .../etc_pure-ftpd_conf_CustomerProof | 1 + .../pure-ftpd/etc_pure-ftpd_conf_MaxIdleTime | 1 + .../pure-ftpd/etc_pure-ftpd_conf_MinUID | 1 + .../etc_pure-ftpd_conf_MySQLConfigFile | 1 + .../pure-ftpd/etc_pure-ftpd_conf_NoAnonymous | 1 + .../etc_pure-ftpd_conf_PAMAuthentication | 1 + .../pure-ftpd/etc_pure-ftpd_db_mysql.conf | 10 + .../debian_etch/xinetd/etc_xinet.d_syscp | 11 + .../awstats/etc_apache_vhosts_05_awstats.conf | 14 + .../etc_awstats_awstats.model.conf.syscp | 9 + ...c_awstats_awstats.model_log_sql.conf.syscp | 9 + .../debian_lenny/awstats/etc_cron.d_awstats | 6 + .../awstats/etc_cron.d_awstats_log_sql | 6 + .../awstats/etc_lighttpd_syscp-awstats.conf | 19 + .../courier/etc_courier_authdaemonrc | 68 + .../courier/etc_courier_authmysqlrc | 13 + .../debian_lenny/cron/etc_cron.d_syscp | 14 + .../debian_lenny/dkim/dkim-filter.conf | 3 + .../dovecot/etc_dovecot_dovecot-sql.conf | 5 + .../dovecot/etc_dovecot_dovecot.conf | 72 + ..._conf.d_acl_30_exim4-config_check_rcpt.rul | 125 + .../etc_exim4_conf.d_auth_30_syscp-config | 30 + ..._exim4_conf.d_main_10_syscp-config_options | 20 + .../etc_exim4_conf.d_router_180_syscp-config | 12 + ...etc_exim4_conf.d_transport_30_syscp-config | 13 + .../libnss/etc_nss-mysql-root.conf | 16 + .../debian_lenny/libnss/etc_nss-mysql.conf | 24 + .../debian_lenny/libnss/etc_nsswitch.conf | 6 + .../debian_lenny/lighttpd/etc_lighttpd.conf | 60 + .../debian_lenny/postfix/etc_postfix_main.cf | 92 + .../postfix/etc_postfix_master.cf | 4 + .../etc_postfix_mysql-virtual_alias_maps.cf | 8 + ...c_postfix_mysql-virtual_mailbox_domains.cf | 8 + .../etc_postfix_mysql-virtual_mailbox_maps.cf | 7 + .../postfix/etc_postfix_sasl_smtpd.conf | 11 + .../powerdns/etc_powerdns_pdns-syscp.conf | 7 + .../powerdns/etc_powerdns_pdns.conf | 17 + .../proftpd/etc_proftpd_modules.conf | 58 + .../proftpd/etc_proftpd_proftpd.conf | 129 + .../debian_lenny/proftpd/etc_proftpd_sql.conf | 25 + .../pure-ftpd/etc_default_pure-ftpd-common | 5 + .../pure-ftpd/etc_pure-ftpd_conf_Bind | 1 + .../etc_pure-ftpd_conf_ChrootEveryone | 1 + .../etc_pure-ftpd_conf_CustomerProof | 1 + .../pure-ftpd/etc_pure-ftpd_conf_MaxIdleTime | 1 + .../pure-ftpd/etc_pure-ftpd_conf_MinUID | 1 + .../etc_pure-ftpd_conf_MySQLConfigFile | 1 + .../pure-ftpd/etc_pure-ftpd_conf_NoAnonymous | 1 + .../etc_pure-ftpd_conf_PAMAuthentication | 1 + .../pure-ftpd/etc_pure-ftpd_db_mysql.conf | 10 + .../debian_lenny/xinetd/etc_xinet.d_syscp | 11 + .../awstats/etc_apache_vhosts_05_awstats.conf | 14 + .../etc_awstats_awstats.model.conf.syscp | 9 + ...c_awstats_awstats.model_log_sql.conf.syscp | 9 + .../gentoo/awstats/etc_cron.d_awstats | 6 + .../gentoo/awstats/etc_cron.d_awstats_log_sql | 6 + .../awstats/etc_lighttpd_syscp-awstats.conf | 19 + .../gentoo/bind/etc_bind_default.zone | 21 + .../gentoo/courier/etc_courier-imap_imapd | 376 ++ .../gentoo/courier/etc_courier-imap_imapd-ssl | 199 + .../gentoo/courier/etc_courier-imap_pop3d | 127 + .../gentoo/courier/etc_courier-imap_pop3d-ssl | 186 + .../courier/etc_courier_authlib_authdaemonrc | 93 + .../courier/etc_courier_authlib_authmysqlrc | 13 + .../configfiles/gentoo/cron/etc_cron.d_syscp | 16 + .../gentoo/cron/etc_php_syscp-cronjob_php.ini | 61 + .../gentoo/cron/etc_php_syscp-vhost_php.ini | 61 + .../configfiles/gentoo/dkim/dkim-filter.conf | 3 + .../dovecot/etc_dovecot_dovecot-sql.conf | 5 + .../gentoo/dovecot/etc_dovecot_dovecot.conf | 72 + .../gentoo/libnss/etc_libnss-mysql-root.cfg | 2 + .../gentoo/libnss/etc_libnss-mysql.cfg | 38 + .../gentoo/libnss/etc_nsswitch.conf | 6 + .../gentoo/lighttpd/etc_lighttpd.conf | 55 + .../gentoo/postfix/etc_postfix_main.cf | 111 + .../gentoo/postfix/etc_postfix_master.cf | 4 + .../etc_postfix_mysql-virtual_alias_maps.cf | 8 + ...c_postfix_mysql-virtual_mailbox_domains.cf | 8 + .../etc_postfix_mysql-virtual_mailbox_maps.cf | 7 + .../gentoo/postfix/etc_sasl2_smtpd.conf | 12 + .../mysql-virtual_mailbox_limit_maps.cf | 7 + .../gentoo/proftpd/etc_proftpd_proftpd.conf | 94 + .../gentoo/xinetd/etc_xinet.d_syscp | 11 + .../awstats/etc_apache_vhosts_05_awstats.conf | 14 + .../etc_awstats_awstats.model.conf.syscp | 9 + ...c_awstats_awstats.model_log_sql.conf.syscp | 9 + .../awstats/etc_cron.d_awstats | 6 + .../awstats/etc_cron.d_awstats_log_sql | 6 + .../awstats/etc_lighttpd_syscp-awstats.conf | 19 + .../courier/etc_authlib_authdaemonrc | 103 + .../courier/etc_authlib_authmysqlrc | 12 + .../suse_linux_10_0/cron/etc_cron.d_syscp | 14 + .../suse_linux_10_0/dkim/dkim-filter.conf | 3 + .../postfix/etc_postfix_main.cf | 63 + .../etc_postfix_mysql-virtual_alias_maps.cf | 8 + ...c_postfix_mysql-virtual_mailbox_domains.cf | 8 + .../etc_postfix_mysql-virtual_mailbox_maps.cf | 7 + .../postfix/usr_lib_sasl2_smtpd.conf | 9 + .../proftpd/etc_proftpd_modules.conf | 30 + .../proftpd/etc_proftpd_proftpd.conf | 70 + .../awstats/etc_apache_vhosts_05_awstats.conf | 14 + .../etc_awstats_awstats.model.conf.syscp | 9 + ...c_awstats_awstats.model_log_sql.conf.syscp | 9 + .../ubuntu_hardy/awstats/etc_cron.d_awstats | 6 + .../awstats/etc_cron.d_awstats_log_sql | 6 + .../awstats/etc_lighttpd_syscp-awstats.conf | 19 + .../courier/etc_courier_authdaemonrc | 68 + .../courier/etc_courier_authmysqlrc | 13 + .../ubuntu_hardy/cron/etc_cron.d_syscp | 14 + .../ubuntu_hardy/dkim/dkim-filter.conf | 3 + .../dovecot/etc_dovecot_dovecot-sql.conf | 5 + .../dovecot/etc_dovecot_dovecot.conf | 72 + ..._conf.d_acl_30_exim4-config_check_rcpt.rul | 125 + .../etc_exim4_conf.d_auth_30_syscp-config | 30 + ..._exim4_conf.d_main_10_syscp-config_options | 20 + .../etc_exim4_conf.d_router_180_syscp-config | 12 + ...etc_exim4_conf.d_transport_30_syscp-config | 13 + .../libnss/etc_nss-mysql-root.conf | 16 + .../ubuntu_hardy/libnss/etc_nss-mysql.conf | 24 + .../ubuntu_hardy/libnss/etc_nsswitch.conf | 6 + .../ubuntu_hardy/lighttpd/etc_lighttpd.conf | 60 + .../ubuntu_hardy/postfix/etc_postfix_main.cf | 92 + .../postfix/etc_postfix_master.cf | 4 + .../etc_postfix_mysql-virtual_alias_maps.cf | 8 + ...c_postfix_mysql-virtual_mailbox_domains.cf | 8 + .../etc_postfix_mysql-virtual_mailbox_maps.cf | 7 + .../postfix/etc_postfix_sasl_smtpd.conf | 11 + .../powerdns/etc_powerdns_pdns-syscp.conf | 7 + .../powerdns/etc_powerdns_pdns.conf | 17 + .../proftpd/etc_proftpd_modules.conf | 34 + .../proftpd/etc_proftpd_proftpd.conf | 64 + .../pure-ftpd/etc_default_pure-ftpd-common | 5 + .../pure-ftpd/etc_pure-ftpd_conf_Bind | 1 + .../etc_pure-ftpd_conf_ChrootEveryone | 1 + .../etc_pure-ftpd_conf_CustomerProof | 1 + .../pure-ftpd/etc_pure-ftpd_conf_MaxIdleTime | 1 + .../pure-ftpd/etc_pure-ftpd_conf_MinUID | 1 + .../etc_pure-ftpd_conf_MySQLConfigFile | 1 + .../pure-ftpd/etc_pure-ftpd_conf_NoAnonymous | 1 + .../etc_pure-ftpd_conf_PAMAuthentication | 1 + .../pure-ftpd/etc_pure-ftpd_db_mysql.conf | 10 + .../ubuntu_hardy/xinetd/etc_xinet.d_syscp | 11 + templates/misc/configurehint.tpl | 68 + templates/misc/error.tpl | 13 + templates/misc/question_yesno.tpl | 18 + templates/misc/standardcustomer/index.html | 69 + templates/misc/success.tpl | 13 + templates/navigation_element.tpl | 12 + templates/navigation_link.tpl | 2 + 580 files changed, 60898 insertions(+) create mode 100644 COPYING create mode 100644 actions/admin/settings/000.version.php create mode 100644 actions/admin/settings/100.panel.php create mode 100644 actions/admin/settings/110.accounts.php create mode 100644 actions/admin/settings/120.system.php create mode 100644 actions/admin/settings/130.webserver.php create mode 100644 actions/admin/settings/140.statistics.php create mode 100644 actions/admin/settings/150.mail.php create mode 100644 actions/admin/settings/160.nameserver.php create mode 100644 actions/admin/settings/170.logger.php create mode 100644 actions/admin/settings/180.dkim.php create mode 100644 actions/admin/settings/190.ticket.php create mode 100644 actions/admin/settings/200.aps.php create mode 100644 actions/admin/settings/210.security.php create mode 100644 admin_admins.php create mode 100644 admin_aps.php create mode 100644 admin_configfiles.php create mode 100644 admin_customers.php create mode 100644 admin_domains.php create mode 100644 admin_index.php create mode 100644 admin_ipsandports.php create mode 100644 admin_logger.php create mode 100644 admin_message.php create mode 100644 admin_phpsettings.php create mode 100644 admin_settings.php create mode 100644 admin_templates.php create mode 100644 admin_tickets.php create mode 100644 customer_aps.php create mode 100644 customer_autoresponder.php create mode 100644 customer_domains.php create mode 100644 customer_email.php create mode 100644 customer_extras.php create mode 100644 customer_ftp.php create mode 100644 customer_index.php create mode 100644 customer_mysql.php create mode 100644 customer_tickets.php create mode 100644 customer_traffic.php create mode 100644 images/ball.gif create mode 100644 images/changelanguage.gif create mode 100644 images/default.png create mode 100644 images/endsection.gif create mode 100644 images/error.gif create mode 100644 images/error.png create mode 100644 images/footer.gif create mode 100644 images/header.gif create mode 100644 images/header_r.gif create mode 100644 images/info.png create mode 100644 images/login.gif create mode 100644 images/logininternal.gif create mode 100644 images/order_asc.gif create mode 100644 images/order_desc.gif create mode 100644 images/section.gif create mode 100644 images/shadow.gif create mode 100644 images/subsection.gif create mode 100644 images/title.gif create mode 100644 images/traffic_blue.gif create mode 100644 images/traffic_green.gif create mode 100644 images/traffic_red.gif create mode 100644 images/traffic_yellow.gif create mode 100644 index.php create mode 100644 install/install.php create mode 100644 install/lng/english.lng.php create mode 100644 install/lng/french.lng.php create mode 100644 install/lng/german.lng.php create mode 100644 install/scripts/htpasswd-htaccess-remover.php create mode 100644 install/scripts/language-check.php create mode 100644 install/syscp.sql create mode 100644 install/updates/1.0/update_1.0.10_1.2-beta1.inc.php create mode 100644 install/updates/1.0/update_1.0_1.0.10.inc.php create mode 100644 install/updates/1.2/update_1.2-beta1_1.2.19.inc.php create mode 100644 install/updates/1.2/update_1.2.19_1.4.inc.php create mode 100644 install/updates/1.4/update_1.4.inc.php create mode 100644 install/updates/froxlor/upgrade_syscp.inc.php create mode 100644 install/updatesql.php create mode 100644 lib/classes/aps/class.ApsInstaller.php create mode 100644 lib/classes/aps/class.ApsParser.php create mode 100644 lib/classes/aps/class.ApsUpdater.php create mode 100644 lib/classes/database/class.db.php create mode 100644 lib/classes/idna/class.idna_convert.php create mode 100644 lib/classes/idna/class.idna_convert_wrapper.php create mode 100644 lib/classes/idna/npdata.ser create mode 100644 lib/classes/logger/abstract.AbstractLogger.php create mode 100644 lib/classes/logger/class.FileLogger.php create mode 100644 lib/classes/logger/class.MysqlLogger.php create mode 100644 lib/classes/logger/class.SysCPLogger.php create mode 100644 lib/classes/logger/class.SysLogger.php create mode 100644 lib/classes/output/class.paging.php create mode 100644 lib/classes/phpmailer/class.PHPMailer.php create mode 100644 lib/classes/phpmailer/class.SMTP.php create mode 100644 lib/classes/ticket/class.ticket.php create mode 100644 lib/configfiles/etch.inc.php create mode 100644 lib/configfiles/gentoo.inc.php create mode 100644 lib/configfiles/hardy.inc.php create mode 100644 lib/configfiles/lenny.inc.php create mode 100644 lib/configfiles/suse10.inc.php create mode 100644 lib/configfiles_index.inc.php create mode 100644 lib/cron_init.php create mode 100644 lib/cron_shutdown.php create mode 100644 lib/functions.php create mode 100644 lib/functions/aps/function.storeSettingApsPhpExtensions.php create mode 100644 lib/functions/aps/function.storeSettingApsWebserverModules.php create mode 100644 lib/functions/aps/function.sys_get_temp_dir.php create mode 100644 lib/functions/database/function.correctMysqlUsers.php create mode 100644 lib/functions/database/function.getTables.php create mode 100644 lib/functions/database/function.remove_remarks.php create mode 100644 lib/functions/database/function.split_sql_file.php create mode 100644 lib/functions/filedir/function.findDirs.php create mode 100644 lib/functions/filedir/function.isConfigDir.php create mode 100644 lib/functions/filedir/function.makeCorrectDir.php create mode 100644 lib/functions/filedir/function.makeCorrectFile.php create mode 100644 lib/functions/filedir/function.makePathfield.php create mode 100644 lib/functions/filedir/function.makeSecurePath.php create mode 100644 lib/functions/filedir/function.mkDirWithCorrectOwnership.php create mode 100644 lib/functions/filedir/function.safe_exec.php create mode 100644 lib/functions/formfields/bool/function.getFormFieldDataBool.php create mode 100644 lib/functions/formfields/bool/function.getFormFieldOutputBool.php create mode 100644 lib/functions/formfields/bool/function.validateFormFieldBool.php create mode 100644 lib/functions/formfields/constant.formfields.php create mode 100644 lib/functions/formfields/date/function.getFormFieldOutputDate.php create mode 100644 lib/functions/formfields/date/function.manipulateFormFieldDataDate.php create mode 100644 lib/functions/formfields/date/function.validateFormFieldDate.php create mode 100644 lib/functions/formfields/function.buildForm.php create mode 100644 lib/functions/formfields/function.checkPlausibilityFormField.php create mode 100644 lib/functions/formfields/function.getFormFieldData.php create mode 100644 lib/functions/formfields/function.getFormFieldOutput.php create mode 100644 lib/functions/formfields/function.getFormGroupOutput.php create mode 100644 lib/functions/formfields/function.manipulateFormFieldData.php create mode 100644 lib/functions/formfields/function.prefetchFormFieldData.php create mode 100644 lib/functions/formfields/function.processForm.php create mode 100644 lib/functions/formfields/function.returnField.php create mode 100644 lib/functions/formfields/function.saveForm.php create mode 100644 lib/functions/formfields/function.saveFormField.php create mode 100644 lib/functions/formfields/function.validateFieldDefinition.php create mode 100644 lib/functions/formfields/function.validateFormDefinition.php create mode 100644 lib/functions/formfields/function.validateFormField.php create mode 100644 lib/functions/formfields/hidden/function.getFormFieldOutputHidden.php create mode 100644 lib/functions/formfields/hidden/function.validateFormFieldHidden.php create mode 100644 lib/functions/formfields/int/function.getFormFieldDataInt.php create mode 100644 lib/functions/formfields/int/function.getFormFieldOutputInt.php create mode 100644 lib/functions/formfields/int/function.validateFormFieldInt.php create mode 100644 lib/functions/formfields/label/function.getFormFieldOutputLabel.php create mode 100644 lib/functions/formfields/label/function.validateFormFieldLabel.php create mode 100644 lib/functions/formfields/option/function.getFormFieldDataOption.php create mode 100644 lib/functions/formfields/option/function.getFormFieldOutputOption.php create mode 100644 lib/functions/formfields/option/function.prefetchFormFieldDataOption.php create mode 100644 lib/functions/formfields/option/function.validateFormFieldOption.php create mode 100644 lib/functions/formfields/string/function.getFormFieldOutputString.php create mode 100644 lib/functions/formfields/string/function.validateFormFieldString.php create mode 100644 lib/functions/formfields/text/function.getFormFieldOutputText.php create mode 100644 lib/functions/formfields/text/function.validateFormFieldText.php create mode 100644 lib/functions/logger/constant.logger.php create mode 100644 lib/functions/output/function.ask_yesno.php create mode 100644 lib/functions/output/function.buildNavigation.php create mode 100644 lib/functions/output/function.getCorrectFullUserDetails.php create mode 100644 lib/functions/output/function.getCorrectUserSalutation.php create mode 100644 lib/functions/output/function.getTemplate.php create mode 100644 lib/functions/output/function.makecheckbox.php create mode 100644 lib/functions/output/function.makeoption.php create mode 100644 lib/functions/output/function.makeyesno.php create mode 100644 lib/functions/output/function.redirectTo.php create mode 100644 lib/functions/output/function.standard_error.php create mode 100644 lib/functions/output/function.standard_success.php create mode 100644 lib/functions/phphelpers/function.array_merge_prefix.php create mode 100644 lib/functions/phphelpers/function.array_trim.php create mode 100644 lib/functions/phphelpers/function.doubleval_ressource.php create mode 100644 lib/functions/phphelpers/function.html_entity_decode_array.php create mode 100644 lib/functions/phphelpers/function.html_entity_decode_complete.php create mode 100644 lib/functions/phphelpers/function.htmlentities_array.php create mode 100644 lib/functions/phphelpers/function.intval_ressource.php create mode 100644 lib/functions/phphelpers/function.replace_variables.php create mode 100644 lib/functions/phphelpers/function.str_replace_array.php create mode 100644 lib/functions/phphelpers/function.stripslashes_array.php create mode 100644 lib/functions/phphelpers/function.stripslashes_complete.php create mode 100644 lib/functions/settings/function.getSetting.php create mode 100644 lib/functions/settings/function.loadSettings.php create mode 100644 lib/functions/settings/function.saveSetting.php create mode 100644 lib/functions/settings/function.storeSettingDefaultIp.php create mode 100644 lib/functions/settings/function.storeSettingField.php create mode 100644 lib/functions/settings/function.storeSettingHostname.php create mode 100644 lib/functions/settings/function.storeSettingIpAddress.php create mode 100644 lib/functions/settings/function.storeSettingMysqlAccessHost.php create mode 100644 lib/functions/syscp/function.createAWStatsConf.php create mode 100644 lib/functions/syscp/function.createAWStatsVhost.php create mode 100644 lib/functions/syscp/function.getAdmins.php create mode 100644 lib/functions/syscp/function.getCustomerDetail.php create mode 100644 lib/functions/syscp/function.getCustomers.php create mode 100644 lib/functions/syscp/function.getIpAddresses.php create mode 100644 lib/functions/syscp/function.getIpPortCombinations.php create mode 100644 lib/functions/syscp/function.getLanguages.php create mode 100644 lib/functions/syscp/function.getSessionUserDetail.php create mode 100644 lib/functions/syscp/function.inserttask.php create mode 100644 lib/functions/syscp/function.loadConfigArrayDir.php create mode 100644 lib/functions/syscp/function.updateCounters.php create mode 100644 lib/functions/validate/function.buildValidMailFrom.php create mode 100644 lib/functions/validate/function.checkMysqlAccessHost.php create mode 100644 lib/functions/validate/function.checkUsername.php create mode 100644 lib/functions/validate/function.makeCorrectDestination.php create mode 100644 lib/functions/validate/function.validate.php create mode 100644 lib/functions/validate/function.validateDomain.php create mode 100644 lib/functions/validate/function.validateEmail.php create mode 100644 lib/functions/validate/function.validateUrl.php create mode 100644 lib/functions/validate/function.validateUsername.php create mode 100644 lib/functions/validate/function.validate_ip.php create mode 100644 lib/init.php create mode 100644 lib/navigation/00.syscp.main.php create mode 100644 lib/navigation/10.tickets.php create mode 100644 lib/navigation/20.aps.installer.php create mode 100644 lib/tables.inc.php create mode 100644 lng/bulgarian.lng.php create mode 100644 lng/catalan.lng.php create mode 100644 lng/czech.lng.php create mode 100644 lng/danish.lng.php create mode 100644 lng/dutch.lng.php create mode 100644 lng/english.lng.php create mode 100644 lng/french.lng.php create mode 100644 lng/german.lng.php create mode 100644 lng/hungarian.lng.php create mode 100644 lng/italian.lng.php create mode 100644 lng/phpmailer.lang-en.php create mode 100644 lng/portugues.lng.php create mode 100644 lng/russian.lng.php create mode 100644 lng/slovak.lng.php create mode 100644 lng/spanish.lng.php create mode 100644 lng/swedish.lng.php create mode 100644 lng/zh-cn.lng.php create mode 100644 packages/.keep create mode 100644 scripts/cron_apsinstaller.php create mode 100644 scripts/cron_apsupdater.php create mode 100644 scripts/cron_autoresponder.php create mode 100644 scripts/cron_legacy.php create mode 100644 scripts/cron_lighttp.htaccess.php create mode 100644 scripts/cron_tasks.inc.dns.10.bind.php create mode 100644 scripts/cron_tasks.inc.http.10.apache.php create mode 100644 scripts/cron_tasks.inc.http.15.apache_fcgid.php create mode 100644 scripts/cron_tasks.inc.http.20.lighttpd.php create mode 100644 scripts/cron_tasks.php create mode 100644 scripts/cron_ticketarchive.php create mode 100644 scripts/cron_traffic.inc.functions.php create mode 100644 scripts/cron_traffic.php create mode 100644 scripts/cron_traffic_report.php create mode 100644 scripts/cron_used_tickets_reset.php create mode 100644 scripts/install_configs.php create mode 100644 temp/.keep create mode 100644 templates/admin/admins/admins.tpl create mode 100644 templates/admin/admins/admins_add.tpl create mode 100644 templates/admin/admins/admins_admin.tpl create mode 100644 templates/admin/admins/admins_edit.tpl create mode 100644 templates/admin/aps/askyesno.tpl create mode 100644 templates/admin/aps/footer.tpl create mode 100644 templates/admin/aps/header.tpl create mode 100644 templates/admin/aps/infobox.tpl create mode 100644 templates/admin/aps/manage_instances.tpl create mode 100644 templates/admin/aps/manage_instances_error.tpl create mode 100644 templates/admin/aps/manage_instances_install.tpl create mode 100644 templates/admin/aps/manage_instances_package.tpl create mode 100644 templates/admin/aps/manage_instances_success.tpl create mode 100644 templates/admin/aps/manage_instances_taskactive.tpl create mode 100644 templates/admin/aps/manage_instances_uninstall.tpl create mode 100644 templates/admin/aps/manage_packages.tpl create mode 100644 templates/admin/aps/manage_packages_detail.tpl create mode 100644 templates/admin/aps/manage_packages_download.tpl create mode 100644 templates/admin/aps/manage_packages_row.tpl create mode 100644 templates/admin/aps/upload.tpl create mode 100644 templates/admin/configfiles/choose.tpl create mode 100644 templates/admin/configfiles/choose_daemon.tpl create mode 100644 templates/admin/configfiles/choose_distribution.tpl create mode 100644 templates/admin/configfiles/choose_service.tpl create mode 100644 templates/admin/configfiles/configfiles.tpl create mode 100644 templates/admin/configfiles/configfiles_commands.tpl create mode 100644 templates/admin/configfiles/configfiles_file.tpl create mode 100644 templates/admin/configfiles/configfiles_files.tpl create mode 100644 templates/admin/configfiles/wizard.tpl create mode 100644 templates/admin/customers/customers.tpl create mode 100644 templates/admin/customers/customers_add.tpl create mode 100644 templates/admin/customers/customers_customer.tpl create mode 100644 templates/admin/customers/customers_edit.tpl create mode 100644 templates/admin/domains/domains.tpl create mode 100644 templates/admin/domains/domains_add.tpl create mode 100644 templates/admin/domains/domains_domain.tpl create mode 100644 templates/admin/domains/domains_edit.tpl create mode 100644 templates/admin/index/change_language.tpl create mode 100644 templates/admin/index/change_password.tpl create mode 100644 templates/admin/index/index.tpl create mode 100644 templates/admin/ipsandports/ipsandports.tpl create mode 100644 templates/admin/ipsandports/ipsandports_add.tpl create mode 100644 templates/admin/ipsandports/ipsandports_edit.tpl create mode 100644 templates/admin/ipsandports/ipsandports_ipandport.tpl create mode 100644 templates/admin/logger/logger.tpl create mode 100644 templates/admin/logger/logger_action.tpl create mode 100644 templates/admin/logger/logger_log.tpl create mode 100644 templates/admin/message/message.tpl create mode 100644 templates/admin/phpconfig/overview.tpl create mode 100644 templates/admin/phpconfig/overview_add.tpl create mode 100644 templates/admin/phpconfig/overview_edit.tpl create mode 100644 templates/admin/phpconfig/overview_overview.tpl create mode 100644 templates/admin/settings/settings.tpl create mode 100644 templates/admin/settings/settings_group.tpl create mode 100644 templates/admin/settings/updatecounters.tpl create mode 100644 templates/admin/settings/updatecounters_row_admin.tpl create mode 100644 templates/admin/settings/updatecounters_row_customer.tpl create mode 100644 templates/admin/templates/filetemplates_add.tpl create mode 100644 templates/admin/templates/filetemplates_edit.tpl create mode 100644 templates/admin/templates/templates.tpl create mode 100644 templates/admin/templates/templates_add_1.tpl create mode 100644 templates/admin/templates/templates_add_2.tpl create mode 100644 templates/admin/templates/templates_edit.tpl create mode 100644 templates/admin/templates/templates_filetemplate.tpl create mode 100644 templates/admin/templates/templates_template.tpl create mode 100644 templates/admin/ticket/archive.tpl create mode 100644 templates/admin/ticket/archived_tickets.tpl create mode 100644 templates/admin/ticket/archivesearch.tpl create mode 100644 templates/admin/ticket/categories.tpl create mode 100644 templates/admin/ticket/tickets.tpl create mode 100644 templates/admin/ticket/tickets_categories.tpl create mode 100644 templates/admin/ticket/tickets_customer.tpl create mode 100644 templates/admin/ticket/tickets_editcategory.tpl create mode 100644 templates/admin/ticket/tickets_new.tpl create mode 100644 templates/admin/ticket/tickets_newcategory.tpl create mode 100644 templates/admin/ticket/tickets_reply.tpl create mode 100644 templates/admin/ticket/tickets_tickets.tpl create mode 100644 templates/admin/ticket/tickets_tickets_list.tpl create mode 100644 templates/admin/ticket/tickets_tickets_main.tpl create mode 100644 templates/admin/ticket/tickets_view.tpl create mode 100644 templates/customer/aps/askyesno.tpl create mode 100644 templates/customer/aps/data.tpl create mode 100644 templates/customer/aps/footer.tpl create mode 100644 templates/customer/aps/header.tpl create mode 100644 templates/customer/aps/infobox.tpl create mode 100644 templates/customer/aps/installer.tpl create mode 100644 templates/customer/aps/package.tpl create mode 100644 templates/customer/aps/package_status.tpl create mode 100644 templates/customer/aps/search.tpl create mode 100644 templates/customer/domains/domainlist.tpl create mode 100644 templates/customer/domains/domains.tpl create mode 100644 templates/customer/domains/domains_add.tpl create mode 100644 templates/customer/domains/domains_delimiter.tpl create mode 100644 templates/customer/domains/domains_domain.tpl create mode 100644 templates/customer/domains/domains_edit.tpl create mode 100644 templates/customer/email/account_add.tpl create mode 100644 templates/customer/email/account_changepw.tpl create mode 100644 templates/customer/email/account_changequota.tpl create mode 100644 templates/customer/email/autoresponder.tpl create mode 100644 templates/customer/email/autoresponder_add.tpl create mode 100644 templates/customer/email/autoresponder_autoresponder.tpl create mode 100644 templates/customer/email/autoresponder_edit.tpl create mode 100644 templates/customer/email/email.tpl create mode 100644 templates/customer/email/emails.tpl create mode 100644 templates/customer/email/emails_add.tpl create mode 100644 templates/customer/email/emails_domain.tpl create mode 100644 templates/customer/email/emails_edit.tpl create mode 100644 templates/customer/email/emails_edit_forwarder.tpl create mode 100644 templates/customer/email/emails_email.tpl create mode 100644 templates/customer/email/forwarder_add.tpl create mode 100644 templates/customer/extras/extras.tpl create mode 100644 templates/customer/extras/htaccess.tpl create mode 100644 templates/customer/extras/htaccess_add.tpl create mode 100644 templates/customer/extras/htaccess_edit.tpl create mode 100644 templates/customer/extras/htaccess_htaccess.tpl create mode 100644 templates/customer/extras/htpasswds.tpl create mode 100644 templates/customer/extras/htpasswds_add.tpl create mode 100644 templates/customer/extras/htpasswds_edit.tpl create mode 100644 templates/customer/extras/htpasswds_htpasswd.tpl create mode 100644 templates/customer/ftp/accounts.tpl create mode 100644 templates/customer/ftp/accounts_account.tpl create mode 100644 templates/customer/ftp/accounts_add.tpl create mode 100644 templates/customer/ftp/accounts_edit.tpl create mode 100644 templates/customer/ftp/ftp.tpl create mode 100644 templates/customer/index/change_language.tpl create mode 100644 templates/customer/index/change_password.tpl create mode 100644 templates/customer/index/index.tpl create mode 100644 templates/customer/mysql/mysql.tpl create mode 100644 templates/customer/mysql/mysqls.tpl create mode 100644 templates/customer/mysql/mysqls_add.tpl create mode 100644 templates/customer/mysql/mysqls_database.tpl create mode 100644 templates/customer/mysql/mysqls_edit.tpl create mode 100644 templates/customer/ticket/ticket.tpl create mode 100644 templates/customer/ticket/tickets.tpl create mode 100644 templates/customer/ticket/tickets_new.tpl create mode 100644 templates/customer/ticket/tickets_reply.tpl create mode 100644 templates/customer/ticket/tickets_tickets.tpl create mode 100644 templates/customer/ticket/tickets_tickets_list.tpl create mode 100644 templates/customer/ticket/tickets_tickets_main.tpl create mode 100644 templates/customer/traffic/traffic.tpl create mode 100644 templates/customer/traffic/traffic_details.tpl create mode 100644 templates/customer/traffic/traffic_month.tpl create mode 100644 templates/customer/traffic/traffic_traffic.tpl create mode 100644 templates/footer.tpl create mode 100644 templates/formfields/bool.tpl create mode 100644 templates/formfields/hidden.tpl create mode 100644 templates/formfields/label.tpl create mode 100644 templates/formfields/option.tpl create mode 100644 templates/formfields/string.tpl create mode 100644 templates/formfields/text.tpl create mode 100644 templates/header.tpl create mode 100644 templates/login/fpwd.tpl create mode 100644 templates/login/login.tpl create mode 100644 templates/main.css create mode 100644 templates/misc/configfiles/debian_etch/awstats/etc_apache_vhosts_05_awstats.conf create mode 100644 templates/misc/configfiles/debian_etch/awstats/etc_awstats_awstats.model.conf.syscp create mode 100644 templates/misc/configfiles/debian_etch/awstats/etc_awstats_awstats.model_log_sql.conf.syscp create mode 100644 templates/misc/configfiles/debian_etch/awstats/etc_cron.d_awstats create mode 100644 templates/misc/configfiles/debian_etch/awstats/etc_cron.d_awstats_log_sql create mode 100644 templates/misc/configfiles/debian_etch/awstats/etc_lighttpd_syscp-awstats.conf create mode 100644 templates/misc/configfiles/debian_etch/courier/etc_courier_authdaemonrc create mode 100644 templates/misc/configfiles/debian_etch/courier/etc_courier_authmysqlrc create mode 100644 templates/misc/configfiles/debian_etch/cron/etc_cron.d_syscp create mode 100644 templates/misc/configfiles/debian_etch/dkim/dkim-filter.conf create mode 100644 templates/misc/configfiles/debian_etch/dovecot/etc_dovecot_dovecot-sql.conf create mode 100644 templates/misc/configfiles/debian_etch/dovecot/etc_dovecot_dovecot.conf create mode 100644 templates/misc/configfiles/debian_etch/exim4/etc_exim4_conf.d_acl_30_exim4-config_check_rcpt.rul create mode 100644 templates/misc/configfiles/debian_etch/exim4/etc_exim4_conf.d_auth_30_syscp-config create mode 100644 templates/misc/configfiles/debian_etch/exim4/etc_exim4_conf.d_main_10_syscp-config_options create mode 100644 templates/misc/configfiles/debian_etch/exim4/etc_exim4_conf.d_router_180_syscp-config create mode 100644 templates/misc/configfiles/debian_etch/exim4/etc_exim4_conf.d_transport_30_syscp-config create mode 100644 templates/misc/configfiles/debian_etch/libnss/etc_nss-mysql-root.conf create mode 100644 templates/misc/configfiles/debian_etch/libnss/etc_nss-mysql.conf create mode 100644 templates/misc/configfiles/debian_etch/libnss/etc_nsswitch.conf create mode 100644 templates/misc/configfiles/debian_etch/lighttpd/etc_lighttpd.conf create mode 100644 templates/misc/configfiles/debian_etch/postfix/etc_postfix_main.cf create mode 100644 templates/misc/configfiles/debian_etch/postfix/etc_postfix_master.cf create mode 100644 templates/misc/configfiles/debian_etch/postfix/etc_postfix_mysql-virtual_alias_maps.cf create mode 100644 templates/misc/configfiles/debian_etch/postfix/etc_postfix_mysql-virtual_mailbox_domains.cf create mode 100644 templates/misc/configfiles/debian_etch/postfix/etc_postfix_mysql-virtual_mailbox_maps.cf create mode 100644 templates/misc/configfiles/debian_etch/postfix/etc_postfix_sasl_smtpd.conf create mode 100644 templates/misc/configfiles/debian_etch/powerdns/etc_powerdns_pdns-syscp.conf create mode 100644 templates/misc/configfiles/debian_etch/powerdns/etc_powerdns_pdns.conf create mode 100644 templates/misc/configfiles/debian_etch/proftpd/etc_proftpd_modules.conf create mode 100644 templates/misc/configfiles/debian_etch/proftpd/etc_proftpd_proftpd.conf create mode 100644 templates/misc/configfiles/debian_etch/pure-ftpd/etc_default_pure-ftpd-common create mode 100644 templates/misc/configfiles/debian_etch/pure-ftpd/etc_pure-ftpd_conf_Bind create mode 100644 templates/misc/configfiles/debian_etch/pure-ftpd/etc_pure-ftpd_conf_ChrootEveryone create mode 100644 templates/misc/configfiles/debian_etch/pure-ftpd/etc_pure-ftpd_conf_CustomerProof create mode 100644 templates/misc/configfiles/debian_etch/pure-ftpd/etc_pure-ftpd_conf_MaxIdleTime create mode 100644 templates/misc/configfiles/debian_etch/pure-ftpd/etc_pure-ftpd_conf_MinUID create mode 100644 templates/misc/configfiles/debian_etch/pure-ftpd/etc_pure-ftpd_conf_MySQLConfigFile create mode 100644 templates/misc/configfiles/debian_etch/pure-ftpd/etc_pure-ftpd_conf_NoAnonymous create mode 100644 templates/misc/configfiles/debian_etch/pure-ftpd/etc_pure-ftpd_conf_PAMAuthentication create mode 100644 templates/misc/configfiles/debian_etch/pure-ftpd/etc_pure-ftpd_db_mysql.conf create mode 100644 templates/misc/configfiles/debian_etch/xinetd/etc_xinet.d_syscp create mode 100644 templates/misc/configfiles/debian_lenny/awstats/etc_apache_vhosts_05_awstats.conf create mode 100644 templates/misc/configfiles/debian_lenny/awstats/etc_awstats_awstats.model.conf.syscp create mode 100644 templates/misc/configfiles/debian_lenny/awstats/etc_awstats_awstats.model_log_sql.conf.syscp create mode 100644 templates/misc/configfiles/debian_lenny/awstats/etc_cron.d_awstats create mode 100644 templates/misc/configfiles/debian_lenny/awstats/etc_cron.d_awstats_log_sql create mode 100644 templates/misc/configfiles/debian_lenny/awstats/etc_lighttpd_syscp-awstats.conf create mode 100644 templates/misc/configfiles/debian_lenny/courier/etc_courier_authdaemonrc create mode 100644 templates/misc/configfiles/debian_lenny/courier/etc_courier_authmysqlrc create mode 100644 templates/misc/configfiles/debian_lenny/cron/etc_cron.d_syscp create mode 100644 templates/misc/configfiles/debian_lenny/dkim/dkim-filter.conf create mode 100644 templates/misc/configfiles/debian_lenny/dovecot/etc_dovecot_dovecot-sql.conf create mode 100644 templates/misc/configfiles/debian_lenny/dovecot/etc_dovecot_dovecot.conf create mode 100644 templates/misc/configfiles/debian_lenny/exim4/etc_exim4_conf.d_acl_30_exim4-config_check_rcpt.rul create mode 100644 templates/misc/configfiles/debian_lenny/exim4/etc_exim4_conf.d_auth_30_syscp-config create mode 100644 templates/misc/configfiles/debian_lenny/exim4/etc_exim4_conf.d_main_10_syscp-config_options create mode 100644 templates/misc/configfiles/debian_lenny/exim4/etc_exim4_conf.d_router_180_syscp-config create mode 100644 templates/misc/configfiles/debian_lenny/exim4/etc_exim4_conf.d_transport_30_syscp-config create mode 100644 templates/misc/configfiles/debian_lenny/libnss/etc_nss-mysql-root.conf create mode 100644 templates/misc/configfiles/debian_lenny/libnss/etc_nss-mysql.conf create mode 100644 templates/misc/configfiles/debian_lenny/libnss/etc_nsswitch.conf create mode 100644 templates/misc/configfiles/debian_lenny/lighttpd/etc_lighttpd.conf create mode 100644 templates/misc/configfiles/debian_lenny/postfix/etc_postfix_main.cf create mode 100644 templates/misc/configfiles/debian_lenny/postfix/etc_postfix_master.cf create mode 100644 templates/misc/configfiles/debian_lenny/postfix/etc_postfix_mysql-virtual_alias_maps.cf create mode 100644 templates/misc/configfiles/debian_lenny/postfix/etc_postfix_mysql-virtual_mailbox_domains.cf create mode 100644 templates/misc/configfiles/debian_lenny/postfix/etc_postfix_mysql-virtual_mailbox_maps.cf create mode 100644 templates/misc/configfiles/debian_lenny/postfix/etc_postfix_sasl_smtpd.conf create mode 100644 templates/misc/configfiles/debian_lenny/powerdns/etc_powerdns_pdns-syscp.conf create mode 100644 templates/misc/configfiles/debian_lenny/powerdns/etc_powerdns_pdns.conf create mode 100644 templates/misc/configfiles/debian_lenny/proftpd/etc_proftpd_modules.conf create mode 100644 templates/misc/configfiles/debian_lenny/proftpd/etc_proftpd_proftpd.conf create mode 100644 templates/misc/configfiles/debian_lenny/proftpd/etc_proftpd_sql.conf create mode 100644 templates/misc/configfiles/debian_lenny/pure-ftpd/etc_default_pure-ftpd-common create mode 100644 templates/misc/configfiles/debian_lenny/pure-ftpd/etc_pure-ftpd_conf_Bind create mode 100644 templates/misc/configfiles/debian_lenny/pure-ftpd/etc_pure-ftpd_conf_ChrootEveryone create mode 100644 templates/misc/configfiles/debian_lenny/pure-ftpd/etc_pure-ftpd_conf_CustomerProof create mode 100644 templates/misc/configfiles/debian_lenny/pure-ftpd/etc_pure-ftpd_conf_MaxIdleTime create mode 100644 templates/misc/configfiles/debian_lenny/pure-ftpd/etc_pure-ftpd_conf_MinUID create mode 100644 templates/misc/configfiles/debian_lenny/pure-ftpd/etc_pure-ftpd_conf_MySQLConfigFile create mode 100644 templates/misc/configfiles/debian_lenny/pure-ftpd/etc_pure-ftpd_conf_NoAnonymous create mode 100644 templates/misc/configfiles/debian_lenny/pure-ftpd/etc_pure-ftpd_conf_PAMAuthentication create mode 100644 templates/misc/configfiles/debian_lenny/pure-ftpd/etc_pure-ftpd_db_mysql.conf create mode 100644 templates/misc/configfiles/debian_lenny/xinetd/etc_xinet.d_syscp create mode 100644 templates/misc/configfiles/gentoo/awstats/etc_apache_vhosts_05_awstats.conf create mode 100644 templates/misc/configfiles/gentoo/awstats/etc_awstats_awstats.model.conf.syscp create mode 100644 templates/misc/configfiles/gentoo/awstats/etc_awstats_awstats.model_log_sql.conf.syscp create mode 100644 templates/misc/configfiles/gentoo/awstats/etc_cron.d_awstats create mode 100644 templates/misc/configfiles/gentoo/awstats/etc_cron.d_awstats_log_sql create mode 100644 templates/misc/configfiles/gentoo/awstats/etc_lighttpd_syscp-awstats.conf create mode 100644 templates/misc/configfiles/gentoo/bind/etc_bind_default.zone create mode 100644 templates/misc/configfiles/gentoo/courier/etc_courier-imap_imapd create mode 100644 templates/misc/configfiles/gentoo/courier/etc_courier-imap_imapd-ssl create mode 100644 templates/misc/configfiles/gentoo/courier/etc_courier-imap_pop3d create mode 100644 templates/misc/configfiles/gentoo/courier/etc_courier-imap_pop3d-ssl create mode 100644 templates/misc/configfiles/gentoo/courier/etc_courier_authlib_authdaemonrc create mode 100644 templates/misc/configfiles/gentoo/courier/etc_courier_authlib_authmysqlrc create mode 100644 templates/misc/configfiles/gentoo/cron/etc_cron.d_syscp create mode 100644 templates/misc/configfiles/gentoo/cron/etc_php_syscp-cronjob_php.ini create mode 100644 templates/misc/configfiles/gentoo/cron/etc_php_syscp-vhost_php.ini create mode 100644 templates/misc/configfiles/gentoo/dkim/dkim-filter.conf create mode 100644 templates/misc/configfiles/gentoo/dovecot/etc_dovecot_dovecot-sql.conf create mode 100644 templates/misc/configfiles/gentoo/dovecot/etc_dovecot_dovecot.conf create mode 100644 templates/misc/configfiles/gentoo/libnss/etc_libnss-mysql-root.cfg create mode 100644 templates/misc/configfiles/gentoo/libnss/etc_libnss-mysql.cfg create mode 100644 templates/misc/configfiles/gentoo/libnss/etc_nsswitch.conf create mode 100644 templates/misc/configfiles/gentoo/lighttpd/etc_lighttpd.conf create mode 100644 templates/misc/configfiles/gentoo/postfix/etc_postfix_main.cf create mode 100644 templates/misc/configfiles/gentoo/postfix/etc_postfix_master.cf create mode 100644 templates/misc/configfiles/gentoo/postfix/etc_postfix_mysql-virtual_alias_maps.cf create mode 100644 templates/misc/configfiles/gentoo/postfix/etc_postfix_mysql-virtual_mailbox_domains.cf create mode 100644 templates/misc/configfiles/gentoo/postfix/etc_postfix_mysql-virtual_mailbox_maps.cf create mode 100644 templates/misc/configfiles/gentoo/postfix/etc_sasl2_smtpd.conf create mode 100644 templates/misc/configfiles/gentoo/postfix/mysql-virtual_mailbox_limit_maps.cf create mode 100644 templates/misc/configfiles/gentoo/proftpd/etc_proftpd_proftpd.conf create mode 100644 templates/misc/configfiles/gentoo/xinetd/etc_xinet.d_syscp create mode 100644 templates/misc/configfiles/suse_linux_10_0/awstats/etc_apache_vhosts_05_awstats.conf create mode 100644 templates/misc/configfiles/suse_linux_10_0/awstats/etc_awstats_awstats.model.conf.syscp create mode 100644 templates/misc/configfiles/suse_linux_10_0/awstats/etc_awstats_awstats.model_log_sql.conf.syscp create mode 100644 templates/misc/configfiles/suse_linux_10_0/awstats/etc_cron.d_awstats create mode 100644 templates/misc/configfiles/suse_linux_10_0/awstats/etc_cron.d_awstats_log_sql create mode 100644 templates/misc/configfiles/suse_linux_10_0/awstats/etc_lighttpd_syscp-awstats.conf create mode 100644 templates/misc/configfiles/suse_linux_10_0/courier/etc_authlib_authdaemonrc create mode 100644 templates/misc/configfiles/suse_linux_10_0/courier/etc_authlib_authmysqlrc create mode 100644 templates/misc/configfiles/suse_linux_10_0/cron/etc_cron.d_syscp create mode 100644 templates/misc/configfiles/suse_linux_10_0/dkim/dkim-filter.conf create mode 100644 templates/misc/configfiles/suse_linux_10_0/postfix/etc_postfix_main.cf create mode 100644 templates/misc/configfiles/suse_linux_10_0/postfix/etc_postfix_mysql-virtual_alias_maps.cf create mode 100644 templates/misc/configfiles/suse_linux_10_0/postfix/etc_postfix_mysql-virtual_mailbox_domains.cf create mode 100644 templates/misc/configfiles/suse_linux_10_0/postfix/etc_postfix_mysql-virtual_mailbox_maps.cf create mode 100644 templates/misc/configfiles/suse_linux_10_0/postfix/usr_lib_sasl2_smtpd.conf create mode 100644 templates/misc/configfiles/suse_linux_10_0/proftpd/etc_proftpd_modules.conf create mode 100644 templates/misc/configfiles/suse_linux_10_0/proftpd/etc_proftpd_proftpd.conf create mode 100644 templates/misc/configfiles/ubuntu_hardy/awstats/etc_apache_vhosts_05_awstats.conf create mode 100644 templates/misc/configfiles/ubuntu_hardy/awstats/etc_awstats_awstats.model.conf.syscp create mode 100644 templates/misc/configfiles/ubuntu_hardy/awstats/etc_awstats_awstats.model_log_sql.conf.syscp create mode 100644 templates/misc/configfiles/ubuntu_hardy/awstats/etc_cron.d_awstats create mode 100644 templates/misc/configfiles/ubuntu_hardy/awstats/etc_cron.d_awstats_log_sql create mode 100644 templates/misc/configfiles/ubuntu_hardy/awstats/etc_lighttpd_syscp-awstats.conf create mode 100644 templates/misc/configfiles/ubuntu_hardy/courier/etc_courier_authdaemonrc create mode 100644 templates/misc/configfiles/ubuntu_hardy/courier/etc_courier_authmysqlrc create mode 100644 templates/misc/configfiles/ubuntu_hardy/cron/etc_cron.d_syscp create mode 100644 templates/misc/configfiles/ubuntu_hardy/dkim/dkim-filter.conf create mode 100644 templates/misc/configfiles/ubuntu_hardy/dovecot/etc_dovecot_dovecot-sql.conf create mode 100644 templates/misc/configfiles/ubuntu_hardy/dovecot/etc_dovecot_dovecot.conf create mode 100644 templates/misc/configfiles/ubuntu_hardy/exim4/etc_exim4_conf.d_acl_30_exim4-config_check_rcpt.rul create mode 100644 templates/misc/configfiles/ubuntu_hardy/exim4/etc_exim4_conf.d_auth_30_syscp-config create mode 100644 templates/misc/configfiles/ubuntu_hardy/exim4/etc_exim4_conf.d_main_10_syscp-config_options create mode 100644 templates/misc/configfiles/ubuntu_hardy/exim4/etc_exim4_conf.d_router_180_syscp-config create mode 100644 templates/misc/configfiles/ubuntu_hardy/exim4/etc_exim4_conf.d_transport_30_syscp-config create mode 100644 templates/misc/configfiles/ubuntu_hardy/libnss/etc_nss-mysql-root.conf create mode 100644 templates/misc/configfiles/ubuntu_hardy/libnss/etc_nss-mysql.conf create mode 100644 templates/misc/configfiles/ubuntu_hardy/libnss/etc_nsswitch.conf create mode 100644 templates/misc/configfiles/ubuntu_hardy/lighttpd/etc_lighttpd.conf create mode 100644 templates/misc/configfiles/ubuntu_hardy/postfix/etc_postfix_main.cf create mode 100644 templates/misc/configfiles/ubuntu_hardy/postfix/etc_postfix_master.cf create mode 100644 templates/misc/configfiles/ubuntu_hardy/postfix/etc_postfix_mysql-virtual_alias_maps.cf create mode 100644 templates/misc/configfiles/ubuntu_hardy/postfix/etc_postfix_mysql-virtual_mailbox_domains.cf create mode 100644 templates/misc/configfiles/ubuntu_hardy/postfix/etc_postfix_mysql-virtual_mailbox_maps.cf create mode 100644 templates/misc/configfiles/ubuntu_hardy/postfix/etc_postfix_sasl_smtpd.conf create mode 100644 templates/misc/configfiles/ubuntu_hardy/powerdns/etc_powerdns_pdns-syscp.conf create mode 100644 templates/misc/configfiles/ubuntu_hardy/powerdns/etc_powerdns_pdns.conf create mode 100644 templates/misc/configfiles/ubuntu_hardy/proftpd/etc_proftpd_modules.conf create mode 100644 templates/misc/configfiles/ubuntu_hardy/proftpd/etc_proftpd_proftpd.conf create mode 100644 templates/misc/configfiles/ubuntu_hardy/pure-ftpd/etc_default_pure-ftpd-common create mode 100644 templates/misc/configfiles/ubuntu_hardy/pure-ftpd/etc_pure-ftpd_conf_Bind create mode 100644 templates/misc/configfiles/ubuntu_hardy/pure-ftpd/etc_pure-ftpd_conf_ChrootEveryone create mode 100644 templates/misc/configfiles/ubuntu_hardy/pure-ftpd/etc_pure-ftpd_conf_CustomerProof create mode 100644 templates/misc/configfiles/ubuntu_hardy/pure-ftpd/etc_pure-ftpd_conf_MaxIdleTime create mode 100644 templates/misc/configfiles/ubuntu_hardy/pure-ftpd/etc_pure-ftpd_conf_MinUID create mode 100644 templates/misc/configfiles/ubuntu_hardy/pure-ftpd/etc_pure-ftpd_conf_MySQLConfigFile create mode 100644 templates/misc/configfiles/ubuntu_hardy/pure-ftpd/etc_pure-ftpd_conf_NoAnonymous create mode 100644 templates/misc/configfiles/ubuntu_hardy/pure-ftpd/etc_pure-ftpd_conf_PAMAuthentication create mode 100644 templates/misc/configfiles/ubuntu_hardy/pure-ftpd/etc_pure-ftpd_db_mysql.conf create mode 100644 templates/misc/configfiles/ubuntu_hardy/xinetd/etc_xinet.d_syscp create mode 100644 templates/misc/configurehint.tpl create mode 100644 templates/misc/error.tpl create mode 100644 templates/misc/question_yesno.tpl create mode 100644 templates/misc/standardcustomer/index.html create mode 100644 templates/misc/success.tpl create mode 100644 templates/navigation_element.tpl create mode 100644 templates/navigation_link.tpl diff --git a/COPYING b/COPYING new file mode 100644 index 0000000000..ec25622e34 --- /dev/null +++ b/COPYING @@ -0,0 +1,281 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 675 Mass Ave, Cambridge, MA 02139, USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + diff --git a/actions/admin/settings/000.version.php b/actions/admin/settings/000.version.php new file mode 100644 index 0000000000..b2ac11498c --- /dev/null +++ b/actions/admin/settings/000.version.php @@ -0,0 +1,64 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Panel + * @version $Id: 000.version.php 2733 2009-11-06 09:32:00Z flo $ + */ + +return array( + 'groups' => array( + 'version' => array( + 'fields' => array( + 'system_dbversion' => array( + 'settinggroup' => 'system', + 'varname' => 'dbversion', + 'type' => 'hidden', + 'default' => '', + ), + 'system_last_tasks_run' => array( + 'settinggroup' => 'system', + 'varname' => 'last_tasks_run', + 'type' => 'hidden', + 'default' => '', + 'save_method' => 'storeSettingField', + ), + 'system_last_traffic_run' => array( + 'settinggroup' => 'system', + 'varname' => 'last_traffic_run', + 'type' => 'hidden', + 'default' => '', + ), + 'system_lastcronrun' => array( + 'settinggroup' => 'system', + 'varname' => 'lastcronrun', + 'type' => 'hidden', + 'default' => '', + ), + 'system_lastguid' => array( + 'settinggroup' => 'system', + 'varname' => 'lastguid', + 'type' => 'hidden', + 'default' => 9999, + ), + 'system_lastaccountnumber' => array( + 'settinggroup' => 'system', + 'varname' => 'lastaccountnumber', + 'type' => 'hidden', + 'default' => 0, + ), + ), + ), + ), + ); + +?> \ No newline at end of file diff --git a/actions/admin/settings/100.panel.php b/actions/admin/settings/100.panel.php new file mode 100644 index 0000000000..57ae88a79a --- /dev/null +++ b/actions/admin/settings/100.panel.php @@ -0,0 +1,163 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Panel + * @version $Id: 100.panel.php 2724 2009-06-07 14:18:02Z flo $ + */ + +return array( + 'groups' => array( + 'panel' => array( + 'title' => $lng['admin']['panelsettings'], + 'fields' => array( + 'panel_standardlanguage' => array( + 'label' => array('title' => $lng['login']['language'], 'description' => $lng['serversettings']['language']['description']), + 'settinggroup' => 'panel', + 'varname' => 'standardlanguage', + 'type' => 'option', + 'default' => 'English', + 'option_mode' => 'one', + 'option_options_method' => 'getLanguages', + 'save_method' => 'storeSettingField', + ), + 'panel_natsorting' => array( + 'label' => $lng['serversettings']['natsorting'], + 'settinggroup' => 'panel', + 'varname' => 'natsorting', + 'type' => 'bool', + 'default' => false, + 'save_method' => 'storeSettingField', + ), + 'panel_no_robots' => array( + 'label' => $lng['serversettings']['no_robots'], + 'settinggroup' => 'panel', + 'varname' => 'no_robots', + 'type' => 'bool', + 'default' => false, + 'save_method' => 'storeSettingField', + ), + 'panel_paging' => array( + 'label' => $lng['serversettings']['paging'], + 'settinggroup' => 'panel', + 'varname' => 'paging', + 'type' => 'int', + 'int_min' => 0, + 'default' => 0, + 'save_method' => 'storeSettingField', + ), + 'panel_pathedit' => array( + 'label' => $lng['serversettings']['pathedit'], + 'settinggroup' => 'panel', + 'varname' => 'pathedit', + 'type' => 'option', + 'default' => 'Manual', + 'option_mode' => 'one', + 'option_options' => array('Manual' => 'Manual', 'Dropdown' => 'Dropdown'), + 'save_method' => 'storeSettingField', + ), + 'panel_adminmail' => array( + 'label' => $lng['serversettings']['adminmail'], + 'settinggroup' => 'panel', + 'varname' => 'adminmail', + 'type' => 'string', + 'string_type' => 'mail', + 'string_emptyallowed' => false, + 'default' => '', + 'save_method' => 'storeSettingField', + ), + 'panel_decimal_places' => array( + 'label' => $lng['serversettings']['decimal_places'], + 'settinggroup' => 'panel', + 'varname' => 'decimal_places', + 'type' => 'int', + 'int_min' => 0, + 'int_max' => 15, + 'default' => 4, + 'save_method' => 'storeSettingField', + ), + 'panel_phpmyadmin_url' => array( + 'label' => $lng['serversettings']['phpmyadmin_url'], + 'settinggroup' => 'panel', + 'varname' => 'phpmyadmin_url', + 'type' => 'string', + 'string_type' => 'url', + 'string_emptyallowed' => true, + 'default' => '', + 'save_method' => 'storeSettingField', + ), + 'panel_webmail_url' => array( + 'label' => $lng['serversettings']['webmail_url'], + 'settinggroup' => 'panel', + 'varname' => 'webmail_url', + 'type' => 'string', + 'string_type' => 'url', + 'string_emptyallowed' => true, + 'default' => '', + 'save_method' => 'storeSettingField', + ), + 'panel_webftp_url' => array( + 'label' => $lng['serversettings']['webftp_url'], + 'settinggroup' => 'panel', + 'varname' => 'webftp_url', + 'type' => 'string', + 'string_type' => 'url', + 'string_emptyallowed' => true, + 'default' => '', + 'save_method' => 'storeSettingField', + ), + 'admin_show_version_login' => array( + 'label' => $lng['admin']['show_version_login'], + 'settinggroup' => 'admin', + 'varname' => 'show_version_login', + 'type' => 'bool', + 'default' => false, + 'save_method' => 'storeSettingField', + ), + 'admin_show_version_footer' => array( + 'label' => $lng['admin']['show_version_footer'], + 'settinggroup' => 'admin', + 'varname' => 'show_version_footer', + 'type' => 'bool', + 'default' => false, + 'save_method' => 'storeSettingField', + ), + 'admin_syscp_graphic' => array( + 'label' => $lng['admin']['syscp_graphic'], + 'settinggroup' => 'admin', + 'varname' => 'syscp_graphic', + 'type' => 'string', + 'default' => '', + 'save_method' => 'storeSettingField', + ), + 'panel_allow_domain_change_admin' => array( + 'label' => $lng['serversettings']['panel_allow_domain_change_admin'], + 'settinggroup' => 'panel', + 'varname' => 'allow_domain_change_admin', + 'type' => 'bool', + 'default' => false, + 'save_method' => 'storeSettingField', + ), + 'panel_allow_domain_change_customer' => array( + 'label' => $lng['serversettings']['panel_allow_domain_change_customer'], + 'settinggroup' => 'panel', + 'varname' => 'allow_domain_change_customer', + 'type' => 'bool', + 'default' => false, + 'save_method' => 'storeSettingField', + ), + ), + ), + ), + ); + +?> \ No newline at end of file diff --git a/actions/admin/settings/110.accounts.php b/actions/admin/settings/110.accounts.php new file mode 100644 index 0000000000..ad7a6e3fab --- /dev/null +++ b/actions/admin/settings/110.accounts.php @@ -0,0 +1,110 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Panel + * @version $Id: 110.accounts.php 2724 2009-06-07 14:18:02Z flo $ + */ + +return array( + 'groups' => array( + 'accounts' => array( + 'title' => $lng['admin']['accountsettings'], + 'fields' => array( + 'session_sessiontimeout' => array( + 'label' => $lng['serversettings']['session_timeout'], + 'settinggroup' => 'session', + 'varname' => 'sessiontimeout', + 'type' => 'int', + 'default' => 600, + 'save_method' => 'storeSettingField', + ), + 'session_allow_multiple_login' => array( + 'label' => $lng['serversettings']['session_allow_multiple_login'], + 'settinggroup' => 'session', + 'varname' => 'allow_multiple_login', + 'type' => 'bool', + 'default' => false, + 'save_method' => 'storeSettingField', + ), + 'login_maxloginattempts' => array( + 'label' => $lng['serversettings']['maxloginattempts'], + 'settinggroup' => 'login', + 'varname' => 'maxloginattempts', + 'type' => 'int', + 'default' => 3, + 'save_method' => 'storeSettingField', + ), + 'login_deactivatetime' => array( + 'label' => $lng['serversettings']['deactivatetime'], + 'settinggroup' => 'login', + 'varname' => 'deactivatetime', + 'type' => 'int', + 'default' => 900, + 'save_method' => 'storeSettingField', + ), + 'customer_accountprefix' => array( + 'label' => $lng['serversettings']['accountprefix'], + 'settinggroup' => 'customer', + 'varname' => 'accountprefix', + 'type' => 'string', + 'default' => '', + 'plausibility_check_method' => 'checkUsername', + 'save_method' => 'storeSettingField', + ), + 'customer_mysqlprefix' => array( + 'label' => $lng['serversettings']['mysqlprefix'], + 'settinggroup' => 'customer', + 'varname' => 'mysqlprefix', + 'type' => 'string', + 'default' => '', + 'plausibility_check_method' => 'checkUsername', + 'save_method' => 'storeSettingField', + ), + 'customer_ftpprefix' => array( + 'label' => $lng['serversettings']['ftpprefix'], + 'settinggroup' => 'customer', + 'varname' => 'ftpprefix', + 'type' => 'string', + 'default' => '', + 'save_method' => 'storeSettingField', + ), + 'customer_ftpatdomain' => array( + 'label' => $lng['serversettings']['ftpdomain'], + 'settinggroup' => 'customer', + 'varname' => 'ftpatdomain', + 'type' => 'bool', + 'default' => false, + 'save_method' => 'storeSettingField', + ), + 'panel_allow_preset' => array( + 'label' => $lng['serversettings']['allow_password_reset'], + 'settinggroup' => 'panel', + 'varname' => 'allow_preset', + 'type' => 'bool', + 'default' => false, + 'save_method' => 'storeSettingField', + ), + 'panel_allow_preset_admin' => array( + 'label' => $lng['serversettings']['allow_password_reset_admin'], + 'settinggroup' => 'panel', + 'varname' => 'allow_preset_admin', + 'type' => 'bool', + 'default' => false, + 'save_method' => 'storeSettingField', + ), + ), + ), + ), + ); + +?> \ No newline at end of file diff --git a/actions/admin/settings/120.system.php b/actions/admin/settings/120.system.php new file mode 100644 index 0000000000..ff22729740 --- /dev/null +++ b/actions/admin/settings/120.system.php @@ -0,0 +1,103 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Panel + * @version $Id: 120.system.php 2729 2009-09-20 10:33:50Z flo $ + */ + +return array( + 'groups' => array( + 'system' => array( + 'title' => $lng['admin']['systemsettings'], + 'fields' => array( + 'system_documentroot_prefix' => array( + 'label' => $lng['serversettings']['documentroot_prefix'], + 'settinggroup' => 'system', + 'varname' => 'documentroot_prefix', + 'type' => 'string', + 'default' => '/var/customers/webs/', + 'save_method' => 'storeSettingField', + ), + 'system_ipaddress' => array( + 'label' => $lng['serversettings']['ipaddress'], + 'settinggroup' => 'system', + 'varname' => 'ipaddress', + 'type' => 'option', + 'option_mode' => 'one', + 'option_options_method' => 'getIpAddresses', + 'default' => '', + 'save_method' => 'storeSettingIpAddress', + ), + 'system_defaultip' => array( + 'label' => $lng['serversettings']['defaultip'], + 'settinggroup' => 'system', + 'varname' => 'defaultip', + 'type' => 'option', + 'option_mode' => 'one', + 'option_options_method' => 'getIpPortCombinations', + 'default' => '', + 'save_method' => 'storeSettingDefaultIp', + ), + 'system_hostname' => array( + 'label' => $lng['serversettings']['hostname'], + 'settinggroup' => 'system', + 'varname' => 'hostname', + 'type' => 'string', + 'default' => '', + 'save_method' => 'storeSettingHostname', + ), + 'system_mysql_access_host' => array( + 'label' => $lng['serversettings']['mysql_access_host'], + 'settinggroup' => 'system', + 'varname' => 'mysql_access_host', + 'type' => 'string', + 'default' => '127.0.0.1,localhost', + 'plausibility_check_method' => 'checkMysqlAccessHost', + 'save_method' => 'storeSettingMysqlAccessHost', + ), + 'system_realtime_port' => array( + 'label' => $lng['serversettings']['system_realtime_port'], + 'settinggroup' => 'system', + 'varname' => 'realtime_port', + 'type' => 'int', + 'int_max' => 65535, + 'default' => 0, + 'save_method' => 'storeSettingField', + ), + 'system_index_file_extension' => array( + 'label' => $lng['serversettings']['index_file_extension'], + 'settinggroup' => 'system', + 'varname' => 'index_file_extension', + 'type' => 'string', + 'string_regexp' => '/^[a-zA-Z0-9]{1,6}$/', + 'default' => 'html', + 'save_method' => 'storeSettingField', + ), + 'system_httpuser' => array( + 'settinggroup' => 'system', + 'varname' => 'httpuser', + 'type' => 'hidden', + 'default' => 'www-data', + ), + 'system_httpgroup' => array( + 'settinggroup' => 'system', + 'varname' => 'httpgroup', + 'type' => 'hidden', + 'default' => 'www-data', + ), + ), + ), + ), + ); + +?> \ No newline at end of file diff --git a/actions/admin/settings/130.webserver.php b/actions/admin/settings/130.webserver.php new file mode 100644 index 0000000000..935cb43211 --- /dev/null +++ b/actions/admin/settings/130.webserver.php @@ -0,0 +1,168 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Panel + * @version $Id: 130.webserver.php 2724 2009-06-07 14:18:02Z flo $ + */ + +return array( + 'groups' => array( + 'webserver' => array( + 'title' => $lng['admin']['webserversettings'], + 'fields' => array( + 'system_webserver' => array( + 'label' => $lng['admin']['webserver'], + 'settinggroup' => 'system', + 'varname' => 'webserver', + 'type' => 'option', + 'default' => 'Apache2', + 'option_mode' => 'one', + 'option_options' => array('apache2' => 'Apache 2', 'lighttpd' => 'ligHTTPd'), + 'save_method' => 'storeSettingField', + ), + 'system_apacheconf_vhost' => array( + 'label' => $lng['serversettings']['apacheconf_vhost'], + 'settinggroup' => 'system', + 'varname' => 'apacheconf_vhost', + 'type' => 'string', + 'string_type' => 'filedir', + 'default' => '/etc/apache2/sites-enabled/', + 'save_method' => 'storeSettingField', + ), + 'system_apacheconf_diroptions' => array( + 'label' => $lng['serversettings']['apacheconf_diroptions'], + 'settinggroup' => 'system', + 'varname' => 'apacheconf_diroptions', + 'type' => 'string', + 'string_type' => 'filedir', + 'default' => '/etc/apache2/sites-enabled/', + 'save_method' => 'storeSettingField', + ), + 'system_apacheconf_htpasswddir' => array( + 'label' => $lng['serversettings']['apacheconf_htpasswddir'], + 'settinggroup' => 'system', + 'varname' => 'apacheconf_htpasswddir', + 'type' => 'string', + 'string_type' => 'dir', + 'default' => '/etc/apache2/htpasswd/', + 'save_method' => 'storeSettingField', + ), + 'system_apachereload_command' => array( + 'label' => $lng['serversettings']['apachereload_command'], + 'settinggroup' => 'system', + 'varname' => 'apachereload_command', + 'type' => 'string', + 'default' => '/etc/init.d/apache2 reload', + 'save_method' => 'storeSettingField', + ), + 'system_mod_log_sql' => array( + 'label' => $lng['serversettings']['mod_log_sql'], + 'settinggroup' => 'system', + 'varname' => 'mod_log_sql', + 'type' => 'bool', + 'default' => false, + 'save_method' => 'storeSettingField', + ), + 'system_logfiles_directory' => array( + 'label' => $lng['serversettings']['logfiles_directory'], + 'settinggroup' => 'system', + 'varname' => 'logfiles_directory', + 'type' => 'string', + 'string_type' => 'dir', + 'default' => '/var/customers/logs/', + 'save_method' => 'storeSettingField', + ), + 'system_phpappendopenbasedir' => array( + 'label' => $lng['serversettings']['phpappendopenbasedir'], + 'settinggroup' => 'system', + 'varname' => 'phpappendopenbasedir', + 'type' => 'string', + 'string_emptyallowed' => true, + 'default' => '', + 'save_method' => 'storeSettingField', + ), + 'system_deactivateddocroot' => array( + 'label' => $lng['serversettings']['deactivateddocroot'], + 'settinggroup' => 'system', + 'varname' => 'deactivateddocroot', + 'type' => 'string', + 'string_type' => 'dir', + 'string_emptyallowed' => true, + 'default' => '', + 'save_method' => 'storeSettingField', + ), + 'system_default_vhostconf' => array( + 'label' => $lng['serversettings']['default_vhostconf'], + 'settinggroup' => 'system', + 'varname' => 'default_vhostconf', + 'type' => 'text', + 'default' => '', + 'save_method' => 'storeSettingField', + ), + ), + ), + 'ssl' => array( + 'title' => $lng['admin']['sslsettings'], + 'fields' => array( + 'system_ssl_enabled' => array( + 'label' => $lng['serversettings']['ssl']['use_ssl'], + 'settinggroup' => 'system', + 'varname' => 'use_ssl', + 'type' => 'bool', + 'default' => false, + 'save_method' => 'storeSettingField', + ), + 'system_ssl_cert_file' => array( + 'label' => $lng['serversettings']['ssl']['ssl_cert_file'], + 'settinggroup' => 'system', + 'varname' => 'ssl_cert_file', + 'type' => 'string', + 'string_type' => 'file', + 'string_emptyallowed' => true, + 'default' => '/etc/apache2/apache2.pem', + 'save_method' => 'storeSettingField', + ), + 'system_ssl_key_file' => array( + 'label' => $lng['serversettings']['ssl']['ssl_key_file'], + 'settinggroup' => 'system', + 'varname' => 'ssl_key_file', + 'type' => 'string', + 'string_type' => 'file', + 'string_emptyallowed' => true, + 'default' => '/etc/apache2/apache2.key', + 'save_method' => 'storeSettingField', + ), + 'system_ssl_ca_file' => array( + 'label' => $lng['serversettings']['ssl']['ssl_ca_file'], + 'settinggroup' => 'system', + 'varname' => 'ssl_ca_file', + 'type' => 'string', + 'string_type' => 'file', + 'string_emptyallowed' => true, + 'default' => '', + 'save_method' => 'storeSettingField', + ), + 'system_ssl_openssl_cnf' => array( + 'label' => $lng['serversettings']['ssl']['openssl_cnf'], + 'settinggroup' => 'system', + 'varname' => 'openssl_cnf', + 'type' => 'text', + 'default' => '', + 'save_method' => 'storeSettingField', + ), + ), + ), + ), + ); + +?> \ No newline at end of file diff --git a/actions/admin/settings/140.statistics.php b/actions/admin/settings/140.statistics.php new file mode 100644 index 0000000000..439173b20d --- /dev/null +++ b/actions/admin/settings/140.statistics.php @@ -0,0 +1,82 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Panel + * @version $Id: 140.statistics.php 2724 2009-06-07 14:18:02Z flo $ + */ + +return array( + 'groups' => array( + 'statistics' => array( + 'title' => $lng['admin']['statisticsettings'], + 'fields' => array( + 'system_webalizer_quiet' => array( + 'label' => $lng['serversettings']['webalizer_quiet'], + 'settinggroup' => 'system', + 'varname' => 'webalizer_quiet', + 'type' => 'option', + 'default' => 2, + 'option_mode' => 'one', + 'option_options' => array(0 => $lng['admin']['webalizer']['normal'], 1 => $lng['admin']['webalizer']['quiet'], 2 => $lng['admin']['webalizer']['veryquiet']), + 'save_method' => 'storeSettingField', + ), + 'system_awstats_enabled' => array( + 'label' => $lng['serversettings']['awstats_enabled'], + 'settinggroup' => 'system', + 'varname' => 'awstats_enabled', + 'type' => 'bool', + 'default' => false, + 'save_method' => 'storeSettingField', + ), + 'system_awstats_domain_file' => array( + 'label' => $lng['serversettings']['awstats_domain_file'], + 'settinggroup' => 'system', + 'varname' => 'awstats_domain_file', + 'type' => 'string', + 'string_type' => 'dir', + 'default' => '/etc/awstats/', + 'save_method' => 'storeSettingField', + ), + 'system_awstats_model_file' => array( + 'label' => $lng['serversettings']['awstats_model_file'], + 'settinggroup' => 'system', + 'varname' => 'awstats_model_file', + 'type' => 'string', + 'string_type' => 'file', + 'default' => '/etc/awstats/awstats.model.conf.syscp', + 'save_method' => 'storeSettingField', + ), + 'system_awstats_path' => array( + 'label' => $lng['serversettings']['awstats_path'], + 'settinggroup' => 'system', + 'varname' => 'awstats_path', + 'type' => 'string', + 'string_type' => 'dir', + 'default' => '/usr/share/awstats/VERSION/webroot/cgi-bin/', + 'save_method' => 'storeSettingField', + ), + 'system_awstats_updateall_command' => array( + 'label' => $lng['serversettings']['awstats_updateall_command'], + 'settinggroup' => 'system', + 'varname' => 'awstats_updateall_command', + 'type' => 'string', + 'string_type' => 'file', + 'default' => '/usr/bin/awstats_updateall.pl', + 'save_method' => 'storeSettingField', + ), + ), + ), + ), + ); + +?> \ No newline at end of file diff --git a/actions/admin/settings/150.mail.php b/actions/admin/settings/150.mail.php new file mode 100644 index 0000000000..e0c2246792 --- /dev/null +++ b/actions/admin/settings/150.mail.php @@ -0,0 +1,95 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Panel + * @version $Id: 150.mail.php 2729 2009-09-20 10:33:50Z flo $ + */ + +return array( + 'groups' => array( + 'mail' => array( + 'title' => $lng['admin']['mailserversettings'], + 'fields' => array( + 'system_vmail_uid' => array( + 'label' => $lng['serversettings']['vmail_uid'], + 'settinggroup' => 'system', + 'varname' => 'vmail_uid', + 'type' => 'int', + 'default' => 2000, + 'int_min' => 1, + 'int_max' => 65535, + 'save_method' => 'storeSettingField', + ), + 'system_vmail_gid' => array( + 'label' => $lng['serversettings']['vmail_gid'], + 'settinggroup' => 'system', + 'varname' => 'vmail_gid', + 'type' => 'int', + 'default' => 2000, + 'int_min' => 1, + 'int_max' => 65535, + 'save_method' => 'storeSettingField', + ), + 'system_vmail_homedir' => array( + 'label' => $lng['serversettings']['vmail_homedir'], + 'settinggroup' => 'system', + 'varname' => 'vmail_homedir', + 'type' => 'string', + 'string_type' => 'dir', + 'default' => '/var/customers/mail/', + 'save_method' => 'storeSettingField', + ), + 'panel_sendalternativemail' => array( + 'label' => $lng['serversettings']['sendalternativemail'], + 'settinggroup' => 'panel', + 'varname' => 'sendalternativemail', + 'type' => 'bool', + 'default' => false, + 'save_method' => 'storeSettingField', + ), + 'system_mail_quota_enabled' => array( + 'label' => $lng['serversettings']['mail_quota_enabled'], + 'settinggroup' => 'system', + 'varname' => 'mail_quota_enabled', + 'type' => 'bool', + 'default' => false, + 'save_method' => 'storeSettingField', + ), + 'system_mail_quota' => array( + 'label' => $lng['serversettings']['mail_quota'], + 'settinggroup' => 'system', + 'varname' => 'mail_quota', + 'type' => 'int', + 'default' => 100, + 'save_method' => 'storeSettingField', + ), + 'systen_autoresponder_enabled' => array( + 'label' => $lng['serversettings']['autoresponder_active'], + 'settinggroup' => 'autoresponder', + 'varname' => 'autoresponder_active', + 'type' => 'bool', + 'default' => false, + 'save_method' => 'storeSettingField', + ), + 'systen_last_autoresponder_run' => array( + 'settinggroup' => 'autoresponder', + 'varname' => 'last_autoresponder_run', + 'type' => 'hidden', + 'default' => 0, + ), + ), + ), + ), + ); + +?> \ No newline at end of file diff --git a/actions/admin/settings/160.nameserver.php b/actions/admin/settings/160.nameserver.php new file mode 100644 index 0000000000..fd9e05de67 --- /dev/null +++ b/actions/admin/settings/160.nameserver.php @@ -0,0 +1,65 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Panel + * @version $Id: 160.nameserver.php 2724 2009-06-07 14:18:02Z flo $ + */ + +return array( + 'groups' => array( + 'nameserver' => array( + 'title' => $lng['admin']['nameserversettings'], + 'fields' => array( + 'system_bindconf_directory' => array( + 'label' => $lng['serversettings']['bindconf_directory'], + 'settinggroup' => 'system', + 'varname' => 'bindconf_directory', + 'type' => 'string', + 'string_type' => 'dir', + 'default' => '/etc/bind/', + 'save_method' => 'storeSettingField', + ), + 'system_bindreload_command' => array( + 'label' => $lng['serversettings']['bindreload_command'], + 'settinggroup' => 'system', + 'varname' => 'bindreload_command', + 'type' => 'string', + 'default' => '/etc/init.d/bind9 reload', + 'save_method' => 'storeSettingField', + ), + 'system_nameservers' => array( + 'label' => $lng['serversettings']['nameservers'], + 'settinggroup' => 'system', + 'varname' => 'nameservers', + 'type' => 'string', + 'string_regexp' => '/^(([a-z0-9\-\._]+, ?)*[a-z0-9\-\._]+)?$/i', + 'string_emptyallowed' => true, + 'default' => '', + 'save_method' => 'storeSettingField', + ), + 'system_mxservers' => array( + 'label' => $lng['serversettings']['mxservers'], + 'settinggroup' => 'system', + 'varname' => 'mxservers', + 'type' => 'string', + 'string_regexp' => '/^(([0-9]+ [a-z0-9\-\._]+, ?)*[0-9]+ [a-z0-9\-\._]+)?$/i', + 'string_emptyallowed' => true, + 'default' => '', + 'save_method' => 'storeSettingField', + ), + ), + ), + ), + ); + +?> \ No newline at end of file diff --git a/actions/admin/settings/170.logger.php b/actions/admin/settings/170.logger.php new file mode 100644 index 0000000000..c9e59f91e0 --- /dev/null +++ b/actions/admin/settings/170.logger.php @@ -0,0 +1,74 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Panel + * @version $Id: 170.logger.php 2724 2009-06-07 14:18:02Z flo $ + */ + +return array( + 'groups' => array( + 'logging' => array( + 'title' => $lng['admin']['loggersettings'], + 'fields' => array( + 'logger_enabled' => array( + 'label' => $lng['serversettings']['logger']['enable'], + 'settinggroup' => 'logger', + 'varname' => 'enabled', + 'type' => 'bool', + 'default' => false, + 'save_method' => 'storeSettingField', + ), + 'logger_severity' => array( + 'label' => $lng['serversettings']['logger']['severity'], + 'settinggroup' => 'logger', + 'varname' => 'severity', + 'type' => 'option', + 'default' => 1, + 'option_mode' => 'one', + 'option_options' => array(1 => $lng['admin']['logger']['normal'], 2 => $lng['admin']['logger']['paranoid']), + 'save_method' => 'storeSettingField', + ), + 'logger_logtypes' => array( + 'label' => $lng['serversettings']['logger']['types'], + 'settinggroup' => 'logger', + 'varname' => 'logtypes', + 'type' => 'option', + 'default' => 'syslog,mysql', + 'option_mode' => 'multiple', + 'option_options' => array('syslog' => 'syslog', 'file' => 'file', 'mysql' => 'mysql'), + 'save_method' => 'storeSettingField', + ), + 'logger_logfile' => array( + 'label' => $lng['serversettings']['logger']['logfile'], + 'settinggroup' => 'logger', + 'varname' => 'logfile', + 'type' => 'string', + 'string_type' => 'file', + 'string_emptyallowed' => true, + 'default' => '', + 'save_method' => 'storeSettingField', + ), + 'logger_log_cron' => array( + 'label' => $lng['serversettings']['logger']['logcron'], + 'settinggroup' => 'logger', + 'varname' => 'log_cron', + 'type' => 'bool', + 'default' => false, + 'save_method' => 'storeSettingField', + ), + ), + ), + ) + ); + +?> \ No newline at end of file diff --git a/actions/admin/settings/180.dkim.php b/actions/admin/settings/180.dkim.php new file mode 100644 index 0000000000..e34d787c8b --- /dev/null +++ b/actions/admin/settings/180.dkim.php @@ -0,0 +1,70 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Panel + * @version $Id: 180.dkim.php 2724 2009-06-07 14:18:02Z flo $ + */ + +return array( + 'groups' => array( + 'dkim' => array( + 'title' => $lng['admin']['dkimsettings'], + 'fields' => array( + 'dkim_enabled' => array( + 'label' => $lng['dkim']['use_dkim'], + 'settinggroup' => 'dkim', + 'varname' => 'use_dkim', + 'type' => 'bool', + 'default' => false, + 'save_method' => 'storeSettingField', + ), + 'dkim_prefix' => array( + 'label' => $lng['dkim']['dkim_prefix'], + 'settinggroup' => 'dkim', + 'varname' => 'dkim_prefix', + 'type' => 'string', + 'default' => '/etc/postfix/dkim/', + 'save_method' => 'storeSettingField', + ), + 'dkim_domains' => array( + 'label' => $lng['dkim']['dkim_domains'], + 'settinggroup' => 'dkim', + 'varname' => 'dkim_domains', + 'type' => 'string', + 'string_regexp' => '/^[a-z0-9\._]+$/i', + 'default' => 'domains', + 'save_method' => 'storeSettingField', + ), + 'dkim_dkimkeys' => array( + 'label' => $lng['dkim']['dkim_dkimkeys'], + 'settinggroup' => 'dkim', + 'varname' => 'dkim_dkimkeys', + 'type' => 'string', + 'string_regexp' => '/^[a-z0-9\._]+$/i', + 'default' => 'dkim-keys.conf', + 'save_method' => 'storeSettingField', + ), + 'dkimrestart_command' => array( + 'label' => $lng['dkim']['dkimrestart_command'], + 'settinggroup' => 'dkim', + 'varname' => 'dkimrestart_command', + 'type' => 'string', + 'default' => '/etc/init.d/dkim-filter restart', + 'save_method' => 'storeSettingField', + ), + ), + ), + ), + ); + +?> \ No newline at end of file diff --git a/actions/admin/settings/190.ticket.php b/actions/admin/settings/190.ticket.php new file mode 100644 index 0000000000..09764a59a5 --- /dev/null +++ b/actions/admin/settings/190.ticket.php @@ -0,0 +1,129 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Panel + * @version $Id: 190.ticket.php 2724 2009-06-07 14:18:02Z flo $ + */ + +return array( + 'groups' => array( + 'ticket' => array( + 'title' => $lng['admin']['ticketsettings'], + 'fields' => array( + 'ticket_enabled' => array( + 'label' => $lng['serversettings']['ticket']['enable'], + 'settinggroup' => 'ticket', + 'varname' => 'enabled', + 'type' => 'bool', + 'default' => false, + 'save_method' => 'storeSettingField', + ), + 'ticket_noreply_email' => array( + 'label' => $lng['serversettings']['ticket']['noreply_email'], + 'settinggroup' => 'ticket', + 'varname' => 'noreply_email', + 'type' => 'string', + 'string_type' => 'mail', + 'default' => '', + 'save_method' => 'storeSettingField', + ), + 'ticket_noreply_name' => array( + 'label' => $lng['serversettings']['ticket']['noreply_name'], + 'settinggroup' => 'ticket', + 'varname' => 'noreply_name', + 'type' => 'string', + 'default' => '', + 'save_method' => 'storeSettingField', + ), + 'ticket_reset_cycle' => array( + 'label' => $lng['serversettings']['ticket']['reset_cycle'], + 'settinggroup' => 'ticket', + 'varname' => 'reset_cycle', + 'type' => 'option', + 'default' => 1, + 'option_mode' => 'one', + 'option_options' => array(0 => html_entity_decode($lng['admin']['tickets']['daily']), 1 => html_entity_decode($lng['admin']['tickets']['weekly']), 2 => html_entity_decode($lng['admin']['tickets']['monthly']), 3 => html_entity_decode($lng['admin']['tickets']['yearly'])), + 'save_method' => 'storeSettingField', + ), + 'ticket_concurrently_open' => array( + 'label' => $lng['serversettings']['ticket']['concurrentlyopen'], + 'settinggroup' => 'ticket', + 'varname' => 'concurrently_open', + 'type' => 'int', + 'default' => 5, + 'save_method' => 'storeSettingField', + ), + 'ticket_archiving_days' => array( + 'label' => $lng['serversettings']['ticket']['archiving_days'], + 'settinggroup' => 'ticket', + 'varname' => 'archiving_days', + 'type' => 'int', + 'int_min' => 1, + 'int_max' => 99, + 'default' => 5, + 'save_method' => 'storeSettingField', + ), + 'ticket_worktime_all' => array( + 'label' => $lng['serversettings']['ticket']['worktime_all'], + 'settinggroup' => 'ticket', + 'varname' => 'worktime_all', + 'type' => 'bool', + 'default' => false, + 'save_method' => 'storeSettingField', + ), + 'ticket_worktime_begin' => array( + 'label' => $lng['serversettings']['ticket']['worktime_begin'], + 'settinggroup' => 'ticket', + 'varname' => 'worktime_begin', + 'type' => 'string', + 'string_regexp' => '/^[012][0-9]:[0-6][0-9]$/', + 'default' => '', + 'save_method' => 'storeSettingField', + ), + 'ticket_worktime_end' => array( + 'label' => $lng['serversettings']['ticket']['worktime_end'], + 'settinggroup' => 'ticket', + 'varname' => 'worktime_end', + 'type' => 'string', + 'string_regexp' => '/^[012][0-9]:[0-6][0-9]$/', + 'default' => '', + 'save_method' => 'storeSettingField', + ), + 'ticket_worktime_sat' => array( + 'label' => $lng['serversettings']['ticket']['worktime_sat'], + 'settinggroup' => 'ticket', + 'varname' => 'worktime_sat', + 'type' => 'bool', + 'default' => false, + 'save_method' => 'storeSettingField', + ), + 'ticket_worktime_sun' => array( + 'label' => $lng['serversettings']['ticket']['worktime_sun'], + 'settinggroup' => 'ticket', + 'varname' => 'worktime_sun', + 'type' => 'bool', + 'default' => false, + 'save_method' => 'storeSettingField', + ), + 'system_last_archive_run' => array( + 'settinggroup' => 'system', + 'varname' => 'last_archive_run', + 'type' => 'hidden', + 'default' => '', + ), + ), + ), + ) + ); + +?> \ No newline at end of file diff --git a/actions/admin/settings/200.aps.php b/actions/admin/settings/200.aps.php new file mode 100644 index 0000000000..a444b9a46c --- /dev/null +++ b/actions/admin/settings/200.aps.php @@ -0,0 +1,98 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Panel + * @version $Id: 210.aps.php 2724 2009-06-07 14:18:02Z flo $ + */ + +return array( + 'groups' => array( + 'aps' => array( + 'title' => $lng['admin']['aps'], + 'fields' => array( + 'aps_enable' => array( + 'label' => $lng['aps']['activate_aps'], + 'settinggroup' => 'aps', + 'varname' => 'aps_active', + 'type' => 'bool', + 'default' => false, + 'save_method' => 'storeSettingField', + ), + 'aps_items_per_page' => array( + 'label' => $lng['aps']['packages_per_page'], + 'settinggroup' => 'aps', + 'varname' => 'items_per_page', + 'type' => 'int', + 'default' => 20, + 'save_method' => 'storeSettingField', + ), + 'aps_upload_fields' => array( + 'label' => $lng['aps']['upload_fields'], + 'settinggroup' => 'aps', + 'varname' => 'upload_fields', + 'type' => 'int', + 'default' => 5, + 'save_method' => 'storeSettingField', + ), + 'aps_exceptions' => array( + 'label' => $lng['aps']['exceptions'], + 'type' => 'label', + ), + 'aps_php-extension' => array( + 'label' => $lng['aps']['settings_php_extensions'], + 'settinggroup' => 'aps', + 'varname' => 'php-extension', + 'type' => 'option', + 'default' => '', + 'option_mode' => 'multiple', + 'option_options' => array('gd' => 'GD Library', 'pcre' => 'PCRE', 'ioncube' => 'ionCube', 'ioncube loader' => 'ionCube Loader', 'curl' => 'curl', 'mcrypt' => 'mcrypt', 'imap' => 'imap'), + 'save_method' => 'storeSettingApsPhpExtensions', + ), + 'aps_php-function' => array( + 'settinggroup' => 'aps', + 'varname' => 'php-function', + 'type' => 'hidden', + 'default' => '', + ), + 'aps_php-configuration' => array( + 'label' => $lng['aps']['settings_php_configuration'], + 'settinggroup' => 'aps', + 'varname' => 'php-configuration', + 'type' => 'option', + 'default' => '', + 'option_mode' => 'multiple', + 'option_options' => array('short_open_tag' => 'short_open_tag', 'file_uploads' => 'file_uploads', 'magic_quotes_gpc' => 'magic_quotes_gpc', 'register_globals' => 'register_globals', 'allow_url_fopen' => 'allow_url_fopen', 'safe_mode' => 'safe_mode', 'post_max_size' => 'post_max_size', 'memory_limit' => 'memory_limit', 'max_execution_time' => 'max_execution_time'), + 'save_method' => 'storeSettingField', + ), + 'aps_webserver-module' => array( + 'label' => $lng['aps']['settings_webserver_modules'], + 'settinggroup' => 'aps', + 'varname' => 'webserver-module', + 'type' => 'option', + 'default' => '', + 'option_mode' => 'multiple', + 'option_options' => array('mod_perl' => 'mod_perl', 'mod_rewrite' => 'mod_rewrite', 'mod_access' => 'mod_access', 'fcgid-any' => 'FastCGI/mod_fcgid', 'htaccess' => '.htaccess'), + 'save_method' => 'storeSettingApsWebserverModules', + ), + 'aps_webserver-htaccess' => array( + 'settinggroup' => 'aps', + 'varname' => 'webserver-htaccess', + 'type' => 'hidden', + 'default' => '', + ), + ), + ), + ), + ); + +?> \ No newline at end of file diff --git a/actions/admin/settings/210.security.php b/actions/admin/settings/210.security.php new file mode 100644 index 0000000000..f6de96a747 --- /dev/null +++ b/actions/admin/settings/210.security.php @@ -0,0 +1,106 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Panel + * @version $Id: 220.security.php 2724 2009-06-07 14:18:02Z flo $ + */ + +return array( + 'groups' => array( + 'security' => array( + 'title' => $lng['admin']['security_settings'], + 'fields' => array( + 'panel_unix_names' => array( + 'label' => $lng['serversettings']['unix_names'], + 'settinggroup' => 'panel', + 'varname' => 'unix_names', + 'type' => 'bool', + 'default' => true, + 'save_method' => 'storeSettingField', + ), + 'system_mailpwcleartext' => array( + 'label' => $lng['serversettings']['mailpwcleartext'], + 'settinggroup' => 'system', + 'varname' => 'mailpwcleartext', + 'type' => 'bool', + 'default' => true, + 'save_method' => 'storeSettingField', + ), + 'system_mod_fcgid_enabled' => array( + 'label' => $lng['serversettings']['mod_fcgid'], + 'settinggroup' => 'system', + 'varname' => 'mod_fcgid', + 'type' => 'bool', + 'default' => false, + 'save_method' => 'storeSettingField', + ), + 'system_mod_fcgid_configdir' => array( + 'label' => $lng['serversettings']['mod_fcgid']['configdir'], + 'settinggroup' => 'system', + 'varname' => 'mod_fcgid_configdir', + 'type' => 'string', + 'string_type' => 'dir', + 'default' => '/var/www/php-fcgi-scripts/', + 'save_method' => 'storeSettingField', + ), + 'system_mod_fcgid_tmpdir' => array( + 'label' => $lng['serversettings']['mod_fcgid']['tmpdir'], + 'settinggroup' => 'system', + 'varname' => 'mod_fcgid_tmpdir', + 'type' => 'string', + 'string_type' => 'dir', + 'default' => '/var/customers/tmp/', + 'save_method' => 'storeSettingField', + ), + 'system_mod_fcgid_peardir' => array( + 'label' => $lng['serversettings']['mod_fcgid']['peardir'], + 'settinggroup' => 'system', + 'varname' => 'mod_fcgid_peardir', + 'type' => 'string', + 'string_type' => 'dir', + 'string_delimiter' => ':', + 'string_emptyallowed' => true, + 'default' => '/usr/share/php/:/usr/share/php5/', + 'save_method' => 'storeSettingField', + ), + 'system_mod_fcgid_wrapper' => array( + 'label' => $lng['serversettings']['mod_fcgid']['wrapper'], + 'settinggroup' => 'system', + 'varname' => 'mod_fcgid_wrapper', + 'type' => 'option', + 'option_options' => array(0 => 'ScriptAlias', 1=> 'FCGIWrapper'), + 'default' => 0, + 'save_method' => 'storeSettingField', + ), + 'system_mod_fcgid_starter' => array( + 'label' => $lng['serversettings']['mod_fcgid']['starter'], + 'settinggroup' => 'system', + 'varname' => 'mod_fcgid_starter', + 'type' => 'int', + 'default' => 0, + 'save_method' => 'storeSettingField', + ), + 'system_mod_fcgid_maxrequests' => array( + 'label' => $lng['serversettings']['mod_fcgid']['maxrequests'], + 'settinggroup' => 'system', + 'varname' => 'mod_fcgid_maxrequests', + 'type' => 'int', + 'default' => 250, + 'save_method' => 'storeSettingField', + ), + ), + ), + ), + ); + +?> \ No newline at end of file diff --git a/admin_admins.php b/admin_admins.php new file mode 100644 index 0000000000..32656018e5 --- /dev/null +++ b/admin_admins.php @@ -0,0 +1,739 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Panel + * @version $Id: admin_admins.php 2692 2009-03-27 18:04:47Z flo $ + */ + +define('AREA', 'admin'); + +/** + * Include our init.php, which manages Sessions, Language etc. + */ + +require ("./lib/init.php"); + +if(isset($_POST['id'])) +{ + $id = intval($_POST['id']); +} +elseif(isset($_GET['id'])) +{ + $id = intval($_GET['id']); +} + +if($page == 'admins' + && $userinfo['change_serversettings'] == '1') +{ + if($action == '') + { + $log->logAction(ADM_ACTION, LOG_NOTICE, "viewed admin_admins"); + $fields = array( + 'loginname' => $lng['login']['username'], + 'name' => $lng['customer']['name'], + 'diskspace' => $lng['customer']['diskspace'], + 'diskspace_used' => $lng['customer']['diskspace'] . ' (' . $lng['panel']['used'] . ')', + 'traffic' => $lng['customer']['traffic'], + 'traffic_used' => $lng['customer']['traffic'] . ' (' . $lng['panel']['used'] . ')', + 'mysqls' => $lng['customer']['mysqls'], + 'mysqls_used' => $lng['customer']['mysqls'] . ' (' . $lng['panel']['used'] . ')', + 'ftps' => $lng['customer']['ftps'], + 'ftps_used' => $lng['customer']['ftps'] . ' (' . $lng['panel']['used'] . ')', + 'tickets' => $lng['customer']['tickets'], + 'tickets_used' => $lng['customer']['tickets'] . ' (' . $lng['panel']['used'] . ')', + 'subdomains' => $lng['customer']['subdomains'], + 'subdomains_used' => $lng['customer']['subdomains'] . ' (' . $lng['panel']['used'] . ')', + 'emails' => $lng['customer']['emails'], + 'emails_used' => $lng['customer']['emails'] . ' (' . $lng['panel']['used'] . ')', + 'email_accounts' => $lng['customer']['accounts'], + 'email_accounts_used' => $lng['customer']['accounts'] . ' (' . $lng['panel']['used'] . ')', + 'email_forwarders' => $lng['customer']['forwarders'], + 'email_forwarders_used' => $lng['customer']['forwarders'] . ' (' . $lng['panel']['used'] . ')', + 'email_quota' => $lng['customer']['email_quota'], + 'email_quota_used' => $lng['customer']['email_quota'] . ' (' . $lng['panel']['used'] . ')', + 'deactivated' => $lng['admin']['deactivated'] + ); + $paging = new paging($userinfo, $db, TABLE_PANEL_ADMINS, $fields, $settings['panel']['paging'], $settings['panel']['natsorting']); + $admins = ''; + $result = $db->query("SELECT * FROM `" . TABLE_PANEL_ADMINS . "` " . $paging->getSqlWhere(false) . " " . $paging->getSqlOrderBy() . " " . $paging->getSqlLimit()); + $paging->setEntries($db->num_rows($result)); + $sortcode = $paging->getHtmlSortCode($lng, true); + $arrowcode = $paging->getHtmlArrowCode($filename . '?page=' . $page . '&s=' . $s); + $searchcode = $paging->getHtmlSearchCode($lng); + $pagingcode = $paging->getHtmlPagingCode($filename . '?page=' . $page . '&s=' . $s); + $i = 0; + $count = 0; + + while($row = $db->fetch_array($result)) + { + if($paging->checkDisplay($i)) + { + $highlight_row = ($row['service_active'] != '1' && $settings['billing']['activate_billing'] == '1' && $settings['billing']['highlight_inactive'] == '1'); + $row['traffic_used'] = round($row['traffic_used'] / (1024 * 1024), $settings['panel']['decimal_places']); + $row['traffic'] = round($row['traffic'] / (1024 * 1024), $settings['panel']['decimal_places']); + $row['diskspace_used'] = round($row['diskspace_used'] / 1024, $settings['panel']['decimal_places']); + $row['diskspace'] = round($row['diskspace'] / 1024, $settings['panel']['decimal_places']); + $row = str_replace_array('-1', 'UL', $row, 'customers domains diskspace traffic mysqls emails email_accounts email_forwarders email_quota ftps subdomains tickets'); + $row = htmlentities_array($row); + eval("\$admins.=\"" . getTemplate("admins/admins_admin") . "\";"); + $count++; + } + + $i++; + } + + eval("echo \"" . getTemplate("admins/admins") . "\";"); + } + elseif($action == 'su') + { + $result = $db->query_first("SELECT * FROM `" . TABLE_PANEL_ADMINS . "` WHERE `adminid` = '" . (int)$id . "'"); + $destination_admin = $result['loginname']; + + if($destination_admin != '' + && $result['adminid'] != $userinfo['userid']) + { + $result = $db->query_first("SELECT * FROM `" . TABLE_PANEL_SESSIONS . "` WHERE `userid`='" . (int)$userinfo['userid'] . "'"); + $s = md5(uniqid(microtime(), 1)); + $db->query("INSERT INTO `" . TABLE_PANEL_SESSIONS . "` (`hash`, `userid`, `ipaddress`, `useragent`, `lastactivity`, `language`, `adminsession`) VALUES ('" . $db->escape($s) . "', '" . (int)$id . "', '" . $db->escape($result['ipaddress']) . "', '" . $db->escape($result['useragent']) . "', '" . time() . "', '" . $db->escape($result['language']) . "', '1')"); + $log->logAction(ADM_ACTION, LOG_INFO, "switched adminuser and is now '" . $destination_admin . "'"); + redirectTo('admin_index.php', Array('s' => $s)); + } + else + { + redirectTo('index.php', Array('action' => 'login')); + } + } + elseif($action == 'delete' + && $id != 0) + { + $result = $db->query_first("SELECT * FROM `" . TABLE_PANEL_ADMINS . "` WHERE `adminid`='" . (int)$id . "'"); + + if($result['loginname'] != '') + { + if($result['adminid'] == $userinfo['userid']) + { + standard_error('youcantdeleteyourself'); + exit; + } + + if(isset($_POST['send']) + && $_POST['send'] == 'send') + { + $db->query("DELETE FROM `" . TABLE_PANEL_ADMINS . "` WHERE `adminid`='" . (int)$id . "'"); + $db->query("DELETE FROM `" . TABLE_PANEL_TRAFFIC_ADMINS . "` WHERE `adminid`='" . (int)$id . "'"); + $db->query("UPDATE `" . TABLE_PANEL_CUSTOMERS . "` SET `adminid` = '" . (int)$userinfo['userid'] . "' WHERE `adminid` = '" . (int)$id . "'"); + $db->query("UPDATE `" . TABLE_PANEL_DOMAINS . "` SET `adminid` = '" . (int)$userinfo['userid'] . "' WHERE `adminid` = '" . (int)$id . "'"); + $log->logAction(ADM_ACTION, LOG_INFO, "deleted admin '" . $result['loginname'] . "'"); + updateCounters(); + redirectTo($filename, Array('page' => $page, 's' => $s)); + } + else + { + ask_yesno('admin_admin_reallydelete', $filename, array('id' => $id, 'page' => $page, 'action' => $action), $result['loginname']); + } + } + } + elseif($action == 'add') + { + if(isset($_POST['send']) + && $_POST['send'] == 'send') + { + $name = validate($_POST['name'], 'name'); + $email = $idna_convert->encode(validate($_POST['email'], 'email')); + + $loginname = validate($_POST['loginname'], 'loginname'); + $password = validate($_POST['admin_password'], 'password'); + $def_language = validate($_POST['def_language'], 'default language'); + $customers = intval_ressource($_POST['customers']); + + if(isset($_POST['customers_ul'])) + { + $customers = - 1; + } + + $domains = intval_ressource($_POST['domains']); + + if(isset($_POST['domains_ul'])) + { + $domains = - 1; + } + + $subdomains = intval_ressource($_POST['subdomains']); + + if(isset($_POST['subdomains_ul'])) + { + $subdomains = - 1; + } + + $emails = intval_ressource($_POST['emails']); + + if(isset($_POST['emails_ul'])) + { + $emails = - 1; + } + + $email_accounts = intval_ressource($_POST['email_accounts']); + + if(isset($_POST['email_accounts_ul'])) + { + $email_accounts = - 1; + } + + $email_forwarders = intval_ressource($_POST['email_forwarders']); + + if(isset($_POST['email_forwarders_ul'])) + { + $email_forwarders = - 1; + } + + if($settings['system']['mail_quota_enabled'] == '1') + { + $email_quota = validate($_POST['email_quota'], 'email_quota', '/^\d+$/', 'vmailquotawrong', array('0', '')); + + if(isset($_POST['email_quota_ul'])) + { + $email_quota = - 1; + } + } + else + { + $email_quota = - 1; + } + + $ftps = intval_ressource($_POST['ftps']); + + if(isset($_POST['ftps_ul'])) + { + $ftps = - 1; + } + + $tickets = intval_ressource($_POST['tickets']); + + if(isset($_POST['tickets_ul']) + && $settings['ticket']['enabled'] == '1') + { + $tickets = - 1; + } + + $mysqls = intval_ressource($_POST['mysqls']); + + if(isset($_POST['mysqls_ul'])) + { + $mysqls = - 1; + } + + if($settings['aps']['aps_active'] == '1') + { + $number_of_aps_packages = intval_ressource($_POST['number_of_aps_packages']); + + if(isset($_POST['number_of_aps_packages_ul'])) + { + $number_of_aps_packages = - 1; + } + + $can_manage_aps_packages = intval($_POST['can_manage_aps_packages']); + } + else + { + $number_of_aps_packages = 0; + $can_manage_aps_packages = 0; + } + + $customers_see_all = intval($_POST['customers_see_all']); + $domains_see_all = intval($_POST['domains_see_all']); + $caneditphpsettings = intval($_POST['caneditphpsettings']); + $change_serversettings = intval($_POST['change_serversettings']); + + $diskspace = intval_ressource($_POST['diskspace']); + + if(isset($_POST['diskspace_ul'])) + { + $diskspace = - 1; + } + + $traffic = doubleval_ressource($_POST['traffic']); + + if(isset($_POST['traffic_ul'])) + { + $traffic = - 1; + } + + $diskspace = $diskspace * 1024; + $traffic = $traffic * 1024 * 1024; + $ipaddress = intval_ressource($_POST['ipaddress']); + + // Check if the account already exists + + $loginname_check = $db->query_first("SELECT `loginname` FROM `" . TABLE_PANEL_CUSTOMERS . "` WHERE `loginname` = '" . $db->escape($loginname) . "'"); + $loginname_check_admin = $db->query_first("SELECT `loginname` FROM `" . TABLE_PANEL_ADMINS . "` WHERE `loginname` = '" . $db->escape($loginname) . "'"); + + if($loginname == '') + { + standard_error(array('stringisempty', 'myloginname')); + } + elseif(strtolower($loginname_check['loginname']) == strtolower($loginname) + || strtolower($loginname_check_admin['loginname']) == strtolower($loginname)) + { + standard_error('loginnameexists', $loginname); + } + + // Accounts which match systemaccounts are not allowed, filtering them + + elseif (preg_match('/^' . preg_quote($settings['customer']['accountprefix'], '/') . '([0-9]+)/', $loginname)) + { + standard_error('loginnameissystemaccount', $settings['customer']['accountprefix']); + } + elseif(!validateUsername($loginname)) + { + standard_error('loginnameiswrong', $loginname); + } + elseif($name == '') + { + standard_error(array('stringisempty', 'myname')); + } + elseif($email == '') + { + standard_error(array('stringisempty', 'emailadd')); + } + elseif($password == '') + { + standard_error(array('stringisempty', 'mypassword')); + } + elseif(!validateEmail($email)) + { + standard_error('emailiswrong', $email); + } + else + { + if($customers_see_all != '1') + { + $customers_see_all = '0'; + } + + if($domains_see_all != '1') + { + $domains_see_all = '0'; + } + + if($caneditphpsettings != '1') + { + $caneditphpsettings = '0'; + } + + if($change_serversettings != '1') + { + $change_serversettings = '0'; + } + + $result = $db->query("INSERT INTO `" . TABLE_PANEL_ADMINS . "` (`loginname`, `password`, `name`, `email`, `def_language`, `change_serversettings`, `customers`, `customers_see_all`, `domains`, `domains_see_all`, `caneditphpsettings`, `diskspace`, `traffic`, `subdomains`, `emails`, `email_accounts`, `email_forwarders`, `email_quota`, `ftps`, `tickets`, `mysqls`, `ip`, `can_manage_aps_packages`, `aps_packages`) + VALUES ('" . $db->escape($loginname) . "', '" . md5($password) . "', '" . $db->escape($name) . "', '" . $db->escape($email) . "','" . $db->escape($def_language) . "', '" . $db->escape($change_serversettings) . "', '" . $db->escape($customers) . "', '" . $db->escape($customers_see_all) . "', '" . $db->escape($domains) . "', '" . $db->escape($domains_see_all) . "', '" . (int)$caneditphpsettings . "', '" . $db->escape($diskspace) . "', '" . $db->escape($traffic) . "', '" . $db->escape($subdomains) . "', '" . $db->escape($emails) . "', '" . $db->escape($email_accounts) . "', '" . $db->escape($email_forwarders) . "', '" . $db->escape($email_quota) . "', '" . $db->escape($ftps) . "', '" . $db->escape($tickets) . "', '" . $db->escape($mysqls) . "', '" . (int)$ipaddress . "', " . (int)$can_manage_aps_packages . ", " . (int)$number_of_aps_packages . ")"); + $adminid = $db->insert_id(); + $log->logAction(ADM_ACTION, LOG_INFO, "added admin '" . $loginname . "'"); + redirectTo($filename, Array('page' => $page, 's' => $s)); + } + } + else + { + $language_options = ''; + + while(list($language_file, $language_name) = each($languages)) + { + $language_options.= makeoption($language_name, $language_file, $userinfo['language'], true); + } + + $ipaddress = makeoption($lng['admin']['allips'], "-1"); + $ips = array(); + $ipsandports = $db->query('SELECT `id`, `ip` FROM `' . TABLE_PANEL_IPSANDPORTS . '` ORDER BY `ip`, `port` ASC'); + + while($row = $db->fetch_array($ipsandports)) + { + if(filter_var($row['ip'], FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) + { + $row['ip'] = '[' . $row['ip'] . ']'; + } + + if(!in_array($row['ip'], $ips)) + { + $ipaddress.= makeoption($row['ip'], $row['id']); + $ips[] = $row['ip']; + } + } + + $customers_ul = makecheckbox('customers_ul', $lng['customer']['unlimited'], '-1', false, '0', true, true); + $diskspace_ul = makecheckbox('diskspace_ul', $lng['customer']['unlimited'], '-1', false, '0', true, true); + $traffic_ul = makecheckbox('traffic_ul', $lng['customer']['unlimited'], '-1', false, '0', true, true); + $domains_ul = makecheckbox('domains_ul', $lng['customer']['unlimited'], '-1', false, '0', true, true); + $subdomains_ul = makecheckbox('subdomains_ul', $lng['customer']['unlimited'], '-1', false, '0', true, true); + $emails_ul = makecheckbox('emails_ul', $lng['customer']['unlimited'], '-1', false, '0', true, true); + $email_accounts_ul = makecheckbox('email_accounts_ul', $lng['customer']['unlimited'], '-1', false, '0', true, true); + $email_forwarders_ul = makecheckbox('email_forwarders_ul', $lng['customer']['unlimited'], '-1', false, '0', true, true); + $email_quota_ul = makecheckbox('email_quota_ul', $lng['customer']['unlimited'], '-1', false, '0', true, true); + $ftps_ul = makecheckbox('ftps_ul', $lng['customer']['unlimited'], '-1', false, '0', true, true); + $tickets_ul = makecheckbox('tickets_ul', $lng['customer']['unlimited'], '-1', false, '0', true, true); + $mysqls_ul = makecheckbox('mysqls_ul', $lng['customer']['unlimited'], '-1', false, '0', true, true); + $change_serversettings = makeyesno('change_serversettings', '1', '0', '0'); + $customers_see_all = makeyesno('customers_see_all', '1', '0', '0'); + $domains_see_all = makeyesno('domains_see_all', '1', '0', '0'); + $caneditphpsettings = makeyesno('caneditphpsettings', '1', '0', '0'); + $can_manage_aps_packages = makeyesno('can_manage_aps_packages', '1', '0', '0'); + $number_of_aps_packages_ul = makecheckbox('number_of_aps_packages_ul', $lng['customer']['unlimited'], '-1', false, '0', true, true); + + eval("echo \"" . getTemplate("admins/admins_add") . "\";"); + } + } + elseif($action == 'edit' + && $id != 0) + { + $result = $db->query_first("SELECT * FROM `" . TABLE_PANEL_ADMINS . "` WHERE `adminid`='" . (int)$id . "'"); + + if($result['loginname'] != '') + { + if(isset($_POST['send']) + && $_POST['send'] == 'send') + { + $name = validate($_POST['name'], 'name'); + $email = $idna_convert->encode(validate($_POST['email'], 'email')); + + if($result['adminid'] == $userinfo['userid']) + { + $password = ''; + $def_language = $result['def_language']; + $deactivated = $result['deactivated']; + $customers = $result['customers']; + $domains = $result['domains']; + $subdomains = $result['subdomains']; + $emails = $result['emails']; + $email_accounts = $result['email_accounts']; + $email_forwarders = $result['email_forwarders']; + $email_quota = $result['email_quota']; + $ftps = $result['ftps']; + $tickets = $result['tickets']; + $mysqls = $result['mysqls']; + $customers_see_all = $result['customers_see_all']; + $domains_see_all = $result['domains_see_all']; + $caneditphpsettings = $result['caneditphpsettings']; + $change_serversettings = $result['change_serversettings']; + $diskspace = $result['diskspace']; + $traffic = $result['traffic']; + $ipaddress = $result['ip']; + $can_manage_aps_packages = $result['can_manage_aps_packages']; + $number_of_aps_packages = $result['aps_packages']; + } + else + { + $password = validate($_POST['admin_password'], 'new password'); + $def_language = validate($_POST['def_language'], 'default language'); + $deactivated = intval($_POST['deactivated']); + $customers = intval_ressource($_POST['customers']); + + if(isset($_POST['customers_ul'])) + { + $customers = - 1; + } + + $domains = intval_ressource($_POST['domains']); + + if(isset($_POST['domains_ul'])) + { + $domains = - 1; + } + + $subdomains = intval_ressource($_POST['subdomains']); + + if(isset($_POST['subdomains_ul'])) + { + $subdomains = - 1; + } + + $emails = intval_ressource($_POST['emails']); + + if(isset($_POST['emails_ul'])) + { + $emails = - 1; + } + + $email_accounts = intval_ressource($_POST['email_accounts']); + + if(isset($_POST['email_accounts_ul'])) + { + $email_accounts = - 1; + } + + $email_forwarders = intval_ressource($_POST['email_forwarders']); + + if(isset($_POST['email_forwarders_ul'])) + { + $email_forwarders = - 1; + } + + if($settings['system']['mail_quota_enabled'] == '1') + { + $email_quota = validate($_POST['email_quota'], 'email_quota', '/^\d+$/', 'vmailquotawrong', array('0', '')); + + if(isset($_POST['email_quota_ul'])) + { + $email_quota = - 1; + } + } + else + { + $email_quota = - 1; + } + + $ftps = intval_ressource($_POST['ftps']); + + if(isset($_POST['ftps_ul'])) + { + $ftps = - 1; + } + + $tickets = intval_ressource($_POST['tickets']); + + if(isset($_POST['tickets_ul'])) + { + $tickets = - 1; + } + + $mysqls = intval_ressource($_POST['mysqls']); + + if(isset($_POST['mysqls_ul'])) + { + $mysqls = - 1; + } + + $number_of_aps_packages = intval_ressource($_POST['number_of_aps_packages']); + + if(isset($_POST['number_of_aps_packages_ul'])) + { + $number_of_aps_packages = - 1; + } + + $customers_see_all = intval($_POST['customers_see_all']); + $domains_see_all = intval($_POST['domains_see_all']); + $caneditphpsettings = intval($_POST['caneditphpsettings']); + $change_serversettings = intval($_POST['change_serversettings']); + $can_manage_aps_packages = intval($_POST['can_manage_aps_packages']); + + $diskspace = intval($_POST['diskspace']); + + if(isset($_POST['diskspace_ul'])) + { + $diskspace = - 1; + } + + $traffic = doubleval_ressource($_POST['traffic']); + + if(isset($_POST['traffic_ul'])) + { + $traffic = - 1; + } + + $diskspace = $diskspace * 1024; + $traffic = $traffic * 1024 * 1024; + $ipaddress = intval_ressource($_POST['ipaddress']); + } + + if($name == '') + { + standard_error(array('stringisempty', 'myname')); + } + elseif($email == '') + { + standard_error(array('stringisempty', 'emailadd')); + } + elseif(!validateEmail($email)) + { + standard_error('emailiswrong', $email); + } + else + { + if($password != '') + { + $password = md5($password); + } + else + { + $password = $result['password']; + } + + if($deactivated != '1') + { + $deactivated = '0'; + } + + if($customers_see_all != '1') + { + $customers_see_all = '0'; + } + + if($domains_see_all != '1') + { + $domains_see_all = '0'; + } + + if($caneditphpsettings != '1') + { + $caneditphpsettings = '0'; + } + + if($change_serversettings != '1') + { + $change_serversettings = '0'; + } + + $db->query("UPDATE `" . TABLE_PANEL_ADMINS . "` SET `name`='" . $db->escape($name) . "', `email`='" . $db->escape($email) . "', `def_language`='" . $db->escape($def_language) . "', `change_serversettings` = '" . $db->escape($change_serversettings) . "', `customers` = '" . $db->escape($customers) . "', `customers_see_all` = '" . $db->escape($customers_see_all) . "', `domains` = '" . $db->escape($domains) . "', `domains_see_all` = '" . $db->escape($domains_see_all) . "', `caneditphpsettings` = '" . (int)$caneditphpsettings . "', `password` = '" . $password . "', `diskspace`='" . $db->escape($diskspace) . "', `traffic`='" . $db->escape($traffic) . "', `subdomains`='" . $db->escape($subdomains) . "', `emails`='" . $db->escape($emails) . "', `email_accounts` = '" . $db->escape($email_accounts) . "', `email_forwarders`='" . $db->escape($email_forwarders) . "', `email_quota`='" . $db->escape($email_quota) . "', `ftps`='" . $db->escape($ftps) . "', `tickets`='" . $db->escape($tickets) . "', `mysqls`='" . $db->escape($mysqls) . "', `ip`='" . (int)$ipaddress . "', `deactivated`='" . $db->escape($deactivated) . "', `can_manage_aps_packages`=" . (int)$can_manage_aps_packages . ", `aps_packages`=" . (int)$number_of_aps_packages . " WHERE `adminid`='" . $db->escape($id) . "'"); + $log->logAction(ADM_ACTION, LOG_INFO, "edited admin '#" . $id . "'"); + $redirect_props = Array( + 'page' => $page, + 's' => $s + ); + + redirectTo($filename, $redirect_props); + } + } + else + { + $result['traffic'] = round($result['traffic'] / (1024 * 1024), $settings['panel']['decimal_places']); + $result['diskspace'] = round($result['diskspace'] / 1024, $settings['panel']['decimal_places']); + $result['email'] = $idna_convert->decode($result['email']); + $customers_ul = makecheckbox('customers_ul', $lng['customer']['unlimited'], '-1', false, $result['customers'], true, true); + + if($result['customers'] == '-1') + { + $result['customers'] = ''; + } + + $diskspace_ul = makecheckbox('diskspace_ul', $lng['customer']['unlimited'], '-1', false, $result['diskspace'], true, true); + + if($result['diskspace'] == '-1') + { + $result['diskspace'] = ''; + } + + $traffic_ul = makecheckbox('traffic_ul', $lng['customer']['unlimited'], '-1', false, $result['traffic'], true, true); + + if($result['traffic'] == '-1') + { + $result['traffic'] = ''; + } + + $domains_ul = makecheckbox('domains_ul', $lng['customer']['unlimited'], '-1', false, $result['domains'], true, true); + + if($result['domains'] == '-1') + { + $result['domains'] = ''; + } + + $subdomains_ul = makecheckbox('subdomains_ul', $lng['customer']['unlimited'], '-1', false, $result['subdomains'], true, true); + + if($result['subdomains'] == '-1') + { + $result['subdomains'] = ''; + } + + $emails_ul = makecheckbox('emails_ul', $lng['customer']['unlimited'], '-1', false, $result['emails'], true, true); + + if($result['emails'] == '-1') + { + $result['emails'] = ''; + } + + $email_accounts_ul = makecheckbox('email_accounts_ul', $lng['customer']['unlimited'], '-1', false, $result['email_accounts'], true, true); + + if($result['email_accounts'] == '-1') + { + $result['email_accounts'] = ''; + } + + $email_forwarders_ul = makecheckbox('email_forwarders_ul', $lng['customer']['unlimited'], '-1', false, $result['email_forwarders'], true, true); + + if($result['email_forwarders'] == '-1') + { + $result['email_forwarders'] = ''; + } + + $email_quota_ul = makecheckbox('email_quota_ul', $lng['customer']['unlimited'], '-1', false, $result['email_quota'], true, true); + + if($result['email_quota'] == '-1') + { + $result['email_quota'] = ''; + } + + $ftps_ul = makecheckbox('ftps_ul', $lng['customer']['unlimited'], '-1', false, $result['ftps'], true, true); + + if($result['ftps'] == '-1') + { + $result['ftps'] = ''; + } + + $tickets_ul = makecheckbox('tickets_ul', $lng['customer']['unlimited'], '-1', false, $result['tickets'], true, true); + + if($result['tickets'] == '-1') + { + $result['tickets'] = ''; + } + + $mysqls_ul = makecheckbox('mysqls_ul', $lng['customer']['unlimited'], '-1', false, $result['mysqls'], true, true); + + if($result['mysqls'] == '-1') + { + $result['mysqls'] = ''; + } + + $number_of_aps_packages_ul = makecheckbox('number_of_aps_packages_ul', $lng['customer']['unlimited'], '-1', false, $result['aps_packages'], true, true); + + if($result['aps_packages'] == '-1') + { + $result['aps_packages'] = ''; + } + + $language_options = ''; + + while(list($language_file, $language_name) = each($languages)) + { + $language_options.= makeoption($language_name, $language_file, $result['def_language'], true); + } + + $ipaddress = makeoption($lng['admin']['allips'], "-1", $result['ip']); + $ips = array(); + $ipsandports = $db->query('SELECT `id`, `ip` FROM `' . TABLE_PANEL_IPSANDPORTS . '` ORDER BY `ip`, `port` ASC'); + + while($row = $db->fetch_array($ipsandports)) + { + if(filter_var($row['ip'], FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) + { + $row['ip'] = '[' . $row['ip'] . ']'; + } + + if(!in_array($row['ip'], $ips)) + { + $ipaddress.= makeoption($row['ip'], $row['id'], $result['ip']); + $ips[] = $row['ip']; + } + } + + $change_serversettings = makeyesno('change_serversettings', '1', '0', $result['change_serversettings']); + $customers_see_all = makeyesno('customers_see_all', '1', '0', $result['customers_see_all']); + $domains_see_all = makeyesno('domains_see_all', '1', '0', $result['domains_see_all']); + $caneditphpsettings = makeyesno('caneditphpsettings', '1', '0', $result['caneditphpsettings']); + $deactivated = makeyesno('deactivated', '1', '0', $result['deactivated']); + $can_manage_aps_packages = makeyesno('can_manage_aps_packages', '1', '0', $result['can_manage_aps_packages']); + + $result = htmlentities_array($result); + eval("echo \"" . getTemplate("admins/admins_edit") . "\";"); + } + } + } +} + +?> diff --git a/admin_aps.php b/admin_aps.php new file mode 100644 index 0000000000..7971fcd62a --- /dev/null +++ b/admin_aps.php @@ -0,0 +1,34 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Panel + * @version $Id: admin_aps.php 2692 2009-03-27 18:04:47Z flo $ + * @todo + */ + +// Required code + +define('AREA', 'admin'); +require ("./lib/init.php"); +require ("./lib/class_apsparser.php"); +$Id = 0; + +if(isset($_GET['id']))$Id = (int)$_GET['id']; + +if(isset($_POST['id']))$Id = (int)$_POST['id']; +eval("echo \"" . getTemplate("aps/header") . "\";"); +$Aps = new ApsParser($userinfo, $settings, $db); +$Aps->MainHandler($action); +eval("echo \"" . getTemplate("aps/footer") . "\";"); + +?> \ No newline at end of file diff --git a/admin_configfiles.php b/admin_configfiles.php new file mode 100644 index 0000000000..21556387b4 --- /dev/null +++ b/admin_configfiles.php @@ -0,0 +1,178 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Panel + * @version $Id: admin_configfiles.php 2732 2009-10-30 16:24:48Z flo $ + */ + +define('AREA', 'admin'); + +/** + * Include our init.php, which manages Sessions, Language etc. + */ + +$need_db_sql_data = true; +require ("./lib/init.php"); +require ("./lib/configfiles_index.inc.php"); +$distribution = ''; +$distributions_select = ''; +$service = ''; +$services_select = ''; +$daemon = ''; +$daemons_select = ''; + +if($userinfo['change_serversettings'] == '1') +{ + if(isset($_GET['distribution']) + && $_GET['distribution'] != '' + && isset($configfiles[$_GET['distribution']]) + && is_array($configfiles[$_GET['distribution']])) + { + $distribution = $_GET['distribution']; + + if(isset($_GET['service']) + && $_GET['service'] != '' + && isset($configfiles[$distribution]['services'][$_GET['service']]) + && is_array($configfiles[$distribution]['services'][$_GET['service']])) + { + $service = $_GET['service']; + + if(isset($_GET['daemon']) + && $_GET['daemon'] != '' + && isset($configfiles[$distribution]['services'][$service]['daemons'][$_GET['daemon']]) + && is_array($configfiles[$distribution]['services'][$service]['daemons'][$_GET['daemon']])) + { + $daemon = $_GET['daemon']; + } + else + { + foreach($configfiles[$distribution]['services'][$service]['daemons'] as $daemon_name => $daemon_details) + { + $daemons_select.= makeoption($daemon_details['label'], $daemon_name); + } + } + } + else + { + foreach($configfiles[$distribution]['services'] as $service_name => $service_details) + { + $services_select.= makeoption($service_details['label'], $service_name); + } + } + } + else + { + foreach($configfiles as $distribution_name => $distribution_details) + { + $distributions_select.= makeoption($distribution_details['label'], $distribution_name); + } + } + + if($distribution != '' + && $service != '' + && $daemon != '') + { + $replace_arr = Array( + '' => $sql['user'], + '' => 'MYSQL_PASSWORD', + '' => $sql['db'], + '' => $sql['host'], + '' => $settings['system']['hostname'], + '' => $settings['system']['ipaddress'], + '' => $settings['system']['nameservers'], + '' => $settings['system']['vmail_homedir'], + '' => $settings['system']['vmail_uid'], + '' => $settings['system']['vmail_gid'], + '' => $settings['system']['awstats_path'], + '' => ($settings['system']['use_ssl'] == '1') ? 'imaps pop3s' : '' + ); + $files = ''; + $configpage = ''; + foreach($configfiles[$distribution]['services'][$service]['daemons'][$daemon] as $action => $value) + { + if(substr($action, 0, 8) == 'commands') + { + $commands = ''; + + if(is_array($value)) + { + $commands = implode("\n", $value); + + if($commands != '') + { + eval("\$configpage.=\"" . getTemplate("configfiles/configfiles_commands") . "\";"); + } + } + } + elseif(substr($action, 0, 5) == 'files') + { + $files = ''; + + if(is_array($value)) + { + while(list($filename, $realname) = each($value)) + { + $file_content = file_get_contents('./templates/misc/configfiles/' . $distribution . '/' . $daemon . '/' . $filename); + $file_content = strtr($file_content, $replace_arr); + $file_content = htmlspecialchars($file_content); + $numbrows = count(explode("\n", $file_content)); + eval("\$files.=\"" . getTemplate("configfiles/configfiles_file") . "\";"); + } + + eval("\$configpage.=\"" . getTemplate("configfiles/configfiles_files") . "\";"); + } + } + } + + if(isset($configfiles[$distribution]['services'][$service]['daemons'][$daemon]['restart']) + && is_array($configfiles[$distribution]['services'][$service]['daemons'][$daemon]['restart'])) + { + $restart = implode("\n", $configfiles[$distribution]['services'][$service]['daemons'][$daemon]['restart']); + } + else + { + $restart = ''; + } + + eval("echo \"" . getTemplate("configfiles/configfiles") . "\";"); + } + elseif($page == 'overview') + { + $log->logAction(ADM_ACTION, LOG_NOTICE, "viewed admin_configfiles"); + $distributions = ''; + foreach($configfiles as $distribution_name => $distribution_details) + { + $services = ''; + foreach($distribution_details['services'] as $service_name => $service_details) + { + $daemons = ''; + foreach($service_details['daemons'] as $daemon_name => $daemon_details) + { + eval("\$daemons.=\"" . getTemplate("configfiles/choose_daemon") . "\";"); + } + + eval("\$services.=\"" . getTemplate("configfiles/choose_service") . "\";"); + } + + eval("\$distributions.=\"" . getTemplate("configfiles/choose_distribution") . "\";"); + } + + eval("echo \"" . getTemplate("configfiles/choose") . "\";"); + } + else + { + eval("echo \"" . getTemplate("configfiles/wizard") . "\";"); + } +} + +?> diff --git a/admin_customers.php b/admin_customers.php new file mode 100644 index 0000000000..4e13c69c77 --- /dev/null +++ b/admin_customers.php @@ -0,0 +1,1185 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Panel + * @version $Id: admin_customers.php 2732 2009-10-30 16:24:48Z flo $ + */ + +define('AREA', 'admin'); + +/** + * Include our init.php, which manages Sessions, Language etc. + */ + +$need_root_db_sql_data = true; +require ("./lib/init.php"); + +if(isset($_POST['id'])) +{ + $id = intval($_POST['id']); +} +elseif(isset($_GET['id'])) +{ + $id = intval($_GET['id']); +} + +if($page == 'customers' + && $userinfo['customers'] != '0') +{ + if($action == '') + { + $log->logAction(ADM_ACTION, LOG_NOTICE, "viewed admin_customers"); + $fields = array( + 'c.loginname' => $lng['login']['username'], + 'a.loginname' => $lng['admin']['admin'], + 'c.name' => $lng['customer']['name'], + 'c.firstname' => $lng['customer']['firstname'], + 'c.company' => $lng['customer']['company'], + 'c.diskspace' => $lng['customer']['diskspace'], + 'c.diskspace_used' => $lng['customer']['diskspace'] . ' (' . $lng['panel']['used'] . ')', + 'c.traffic' => $lng['customer']['traffic'], + 'c.traffic_used' => $lng['customer']['traffic'] . ' (' . $lng['panel']['used'] . ')', + 'c.mysqls' => $lng['customer']['mysqls'], + 'c.mysqls_used' => $lng['customer']['mysqls'] . ' (' . $lng['panel']['used'] . ')', + 'c.ftps' => $lng['customer']['ftps'], + 'c.ftps_used' => $lng['customer']['ftps'] . ' (' . $lng['panel']['used'] . ')', + 'c.subdomains' => $lng['customer']['subdomains'], + 'c.subdomains_used' => $lng['customer']['subdomains'] . ' (' . $lng['panel']['used'] . ')', + 'c.emails' => $lng['customer']['emails'], + 'c.emails_used' => $lng['customer']['emails'] . ' (' . $lng['panel']['used'] . ')', + 'c.email_accounts' => $lng['customer']['accounts'], + 'c.email_accounts_used' => $lng['customer']['accounts'] . ' (' . $lng['panel']['used'] . ')', + 'c.email_forwarders' => $lng['customer']['forwarders'], + 'c.email_forwarders_used' => $lng['customer']['forwarders'] . ' (' . $lng['panel']['used'] . ')', + 'c.email_quota' => $lng['customer']['email_quota'], + 'c.email_quota_used' => $lng['customer']['email_quota'] . ' (' . $lng['panel']['used'] . ')', + 'c.deactivated' => $lng['admin']['deactivated'], + 'c.phpenabled' => $lng['admin']['phpenabled'] + ); + + if($settings['ticket']['enabled'] == 1) + { + $fields['c.tickets'] = $lng['customer']['tickets']; + $fields['c.tickets_used'] = $lng['customer']['tickets'] . ' (' . $lng['panel']['used'] . ')'; + } + + $paging = new paging($userinfo, $db, TABLE_PANEL_CUSTOMERS, $fields, $settings['panel']['paging'], $settings['panel']['natsorting']); + $customers = ''; + $result = $db->query("SELECT `c`.*, `a`.`loginname` AS `adminname` " . "FROM `" . TABLE_PANEL_CUSTOMERS . "` `c`, `" . TABLE_PANEL_ADMINS . "` `a` " . "WHERE " . ($userinfo['customers_see_all'] ? '' : " `c`.`adminid` = '" . (int)$userinfo['adminid'] . "' AND ") . "`c`.`adminid`=`a`.`adminid` " . $paging->getSqlWhere(true) . " " . $paging->getSqlOrderBy() . " " . $paging->getSqlLimit()); + $paging->setEntries($db->num_rows($result)); + $sortcode = $paging->getHtmlSortCode($lng, true); + $arrowcode = $paging->getHtmlArrowCode($filename . '?page=' . $page . '&s=' . $s); + $searchcode = $paging->getHtmlSearchCode($lng); + $pagingcode = $paging->getHtmlPagingCode($filename . '?page=' . $page . '&s=' . $s); + $i = 0; + $count = 0; + + while($row = $db->fetch_array($result)) + { + if($paging->checkDisplay($i)) + { + $domains = $db->query_first("SELECT COUNT(`id`) AS `domains` " . "FROM `" . TABLE_PANEL_DOMAINS . "` " . "WHERE `customerid`='" . (int)$row['customerid'] . "' AND `parentdomainid`='0' AND `id`<> '" . (int)$row['standardsubdomain'] . "'"); + $row['domains'] = intval($domains['domains']); + $row['traffic_used'] = round($row['traffic_used'] / (1024 * 1024), $settings['panel']['decimal_places']); + $row['traffic'] = round($row['traffic'] / (1024 * 1024), $settings['panel']['decimal_places']); + $row['diskspace_used'] = round($row['diskspace_used'] / 1024, $settings['panel']['decimal_places']); + $row['diskspace'] = round($row['diskspace'] / 1024, $settings['panel']['decimal_places']); + $row = str_replace_array('-1', 'UL', $row, 'diskspace traffic mysqls emails email_accounts email_forwarders ftps tickets subdomains'); + $row = htmlentities_array($row); + eval("\$customers.=\"" . getTemplate("customers/customers_customer") . "\";"); + $count++; + } + + $i++; + } + + eval("echo \"" . getTemplate("customers/customers") . "\";"); + } + elseif($action == 'su' + && $id != 0) + { + $result = $db->query_first("SELECT * FROM `" . TABLE_PANEL_CUSTOMERS . "` WHERE `customerid`='" . (int)$id . "' " . ($userinfo['customers_see_all'] ? '' : " AND `adminid` = '" . (int)$userinfo['adminid'] . "' ")); + $destination_user = $result['loginname']; + + if($destination_user != '') + { + $result = $db->query_first("SELECT * FROM `" . TABLE_PANEL_SESSIONS . "` WHERE `userid`='" . (int)$userinfo['userid'] . "' AND `hash`='" . $db->escape($s) . "'"); + $s = md5(uniqid(microtime(), 1)); + $db->query("INSERT INTO `" . TABLE_PANEL_SESSIONS . "` (`hash`, `userid`, `ipaddress`, `useragent`, `lastactivity`, `language`, `adminsession`) VALUES ('" . $db->escape($s) . "', '" . (int)$id . "', '" . $db->escape($result['ipaddress']) . "', '" . $db->escape($result['useragent']) . "', '" . time() . "', '" . $db->escape($result['language']) . "', '0')"); + $log->logAction(ADM_ACTION, LOG_INFO, "switched user and is now '" . $destination_user . "'"); + redirectTo('customer_index.php', Array('s' => $s)); + } + else + { + redirectTo('index.php', Array('action' => 'login')); + } + } + elseif($action == 'delete' + && $id != 0) + { + $result = $db->query_first("SELECT * FROM `" . TABLE_PANEL_CUSTOMERS . "` WHERE `customerid`='" . (int)$id . "' " . ($userinfo['customers_see_all'] ? '' : " AND `adminid` = '" . $db->escape($userinfo['adminid']) . "' ")); + + if($result['loginname'] != '') + { + if(isset($_POST['send']) + && $_POST['send'] == 'send') + { + $databases = $db->query("SELECT * FROM " . TABLE_PANEL_DATABASES . " WHERE customerid='" . (int)$id . "' ORDER BY `dbserver`"); + $db_root = new db($sql_root[0]['host'], $sql_root[0]['user'], $sql_root[0]['password'], ''); + unset($db_root->password); + $last_dbserver = 0; + + while($row_database = $db->fetch_array($databases)) + { + if($last_dbserver != $row_database['dbserver']) + { + $db_root->query('FLUSH PRIVILEGES;'); + $db_root->close(); + $db_root = new db($sql_root[$row_database['dbserver']]['host'], $sql_root[$row_database['dbserver']]['user'], $sql_root[$row_database['dbserver']]['password'], ''); + unset($db_root->password); + $last_dbserver = $row_database['dbserver']; + } + + foreach(array_unique(explode(',', $settings['system']['mysql_access_host'])) as $mysql_access_host) + { + $mysql_access_host = trim($mysql_access_host); + $db_root->query('REVOKE ALL PRIVILEGES ON * . * FROM `' . $db_root->escape($row_database['databasename']) . '`@`' . $db_root->escape($mysql_access_host) . '`'); + $db_root->query('REVOKE ALL PRIVILEGES ON `' . str_replace('_', '\_', $db_root->escape($row_database['databasename'])) . '` . * FROM `' . $db_root->escape($row_database['databasename']) . '`@`' . $db_root->escape($mysql_access_host) . '`'); + $db_root->query('DELETE FROM `mysql`.`user` WHERE `User` = "' . $db_root->escape($row_database['databasename']) . '" AND `Host` = "' . $db_root->escape($mysql_access_host) . '"'); + } + + $db_root->query('DROP DATABASE IF EXISTS `' . $db_root->escape($row_database['databasename']) . '`'); + } + + $db_root->query('FLUSH PRIVILEGES;'); + $db_root->close(); + $db->query("DELETE FROM `" . TABLE_PANEL_CUSTOMERS . "` WHERE `customerid`='" . (int)$id . "'"); + $db->query("DELETE FROM `" . TABLE_PANEL_DATABASES . "` WHERE `customerid`='" . (int)$id . "'"); + $db->query("DELETE FROM `" . TABLE_PANEL_DOMAINS . "` WHERE `customerid`='" . (int)$id . "'"); + $domains_deleted = $db->affected_rows(); + $db->query("DELETE FROM `" . TABLE_PANEL_HTPASSWDS . "` WHERE `customerid`='" . (int)$id . "'"); + $db->query("DELETE FROM `" . TABLE_PANEL_SESSIONS . "` WHERE `userid`='" . (int)$id . "' AND `adminsession` = '0'"); + $db->query("DELETE FROM `" . TABLE_PANEL_TRAFFIC . "` WHERE `customerid`='" . (int)$id . "'"); + $db->query("DELETE FROM `" . TABLE_MAIL_USERS . "` WHERE `customerid`='" . (int)$id . "'"); + $db->query("DELETE FROM `" . TABLE_MAIL_VIRTUAL . "` WHERE `customerid`='" . (int)$id . "'"); + $db->query("DELETE FROM `" . TABLE_FTP_GROUPS . "` WHERE `customerid`='" . (int)$id . "'"); + $db->query("DELETE FROM `" . TABLE_FTP_USERS . "` WHERE `customerid`='" . (int)$id . "'"); + $db->query("DELETE FROM `" . TABLE_MAIL_AUTORESPONDER . "` WHERE `customerid`='" . (int)$id . "'"); + $admin_update_query = "UPDATE `" . TABLE_PANEL_ADMINS . "` SET `customers_used` = `customers_used` - 1 "; + $admin_update_query.= ", `domains_used` = `domains_used` - 0" . (int)($domains_deleted - $result['subdomains_used']); + + if($result['mysqls'] != '-1') + { + $admin_update_query.= ", `mysqls_used` = `mysqls_used` - 0" . (int)$result['mysqls']; + } + + if($result['emails'] != '-1') + { + $admin_update_query.= ", `emails_used` = `emails_used` - 0" . (int)$result['emails']; + } + + if($result['email_accounts'] != '-1') + { + $admin_update_query.= ", `email_accounts_used` = `email_accounts_used` - 0" . (int)$result['email_accounts']; + } + + if($result['email_forwarders'] != '-1') + { + $admin_update_query.= ", `email_forwarders_used` = `email_forwarders_used` - 0" . (int)$result['email_forwarders']; + } + + if($result['email_quota'] != '-1') + { + $admin_update_query.= ", `email_quota_used` = `email_quota_used` - 0" . (int)$result['email_quota']; + } + + if($result['subdomains'] != '-1') + { + $admin_update_query.= ", `subdomains_used` = `subdomains_used` - 0" . (int)$result['subdomains']; + } + + if($result['ftps'] != '-1') + { + $admin_update_query.= ", `ftps_used` = `ftps_used` - 0" . (int)$result['ftps']; + } + + if($result['tickets'] != '-1') + { + $admin_update_query.= ", `tickets_used` = `tickets_used` - 0" . (int)$result['tickets']; + } + + if(($result['diskspace'] / 1024) != '-1') + { + $admin_update_query.= ", `diskspace_used` = `diskspace_used` - 0" . (int)$result['diskspace']; + } + + $admin_update_query.= " WHERE `adminid` = '" . (int)$result['adminid'] . "'"; + $db->query($admin_update_query); + $log->logAction(ADM_ACTION, LOG_INFO, "deleted user '" . $result['loginname'] . "'"); + inserttask('1'); + inserttask('4'); + redirectTo($filename, Array('page' => $page, 's' => $s)); + } + else + { + ask_yesno('admin_customer_reallydelete', $filename, array('id' => $id, 'page' => $page, 'action' => $action), $result['loginname']); + } + } + } + elseif($action == 'add') + { + if($userinfo['customers_used'] < $userinfo['customers'] + || $userinfo['customers'] == '-1') + { + if(isset($_POST['send']) + && $_POST['send'] == 'send') + { + $name = validate($_POST['name'], 'name'); + $firstname = validate($_POST['firstname'], 'first name'); + $title = validate($_POST['title'], 'title'); + $company = validate($_POST['company'], 'company'); + $street = validate($_POST['street'], 'street'); + $zipcode = validate($_POST['zipcode'], 'zipcode', '/^[0-9 \-A-Z]*$/'); + $city = validate($_POST['city'], 'city'); + $country = validate($_POST['country'], 'country'); + $phone = validate($_POST['phone'], 'phone', '/^[0-9\- \+\(\)\/]*$/'); + $fax = validate($_POST['fax'], 'fax', '/^[0-9\- \+\(\)\/]*$/'); + $email = $idna_convert->encode(validate($_POST['email'], 'email')); + $customernumber = validate($_POST['customernumber'], 'customer number', '/^[A-Za-z0-9 \-]*$/Di'); + $def_language = validate($_POST['def_language'], 'default language'); + $diskspace = intval_ressource($_POST['diskspace']); + + if(isset($_POST['diskspace_ul'])) + { + $diskspace = - 1; + } + + $traffic = doubleval_ressource($_POST['traffic']); + + if(isset($_POST['traffic_ul'])) + { + $traffic = - 1; + } + + $subdomains = intval_ressource($_POST['subdomains']); + + if(isset($_POST['subdomains_ul'])) + { + $subdomains = - 1; + } + + $emails = intval_ressource($_POST['emails']); + + if(isset($_POST['emails_ul'])) + { + $emails = - 1; + } + + $email_accounts = intval_ressource($_POST['email_accounts']); + + if(isset($_POST['email_accounts_ul'])) + { + $email_accounts = - 1; + } + + $email_forwarders = intval_ressource($_POST['email_forwarders']); + + if(isset($_POST['email_forwarders_ul'])) + { + $email_forwarders = - 1; + } + + if($settings['system']['mail_quota_enabled'] == '1') + { + $email_quota = validate($_POST['email_quota'], 'email_quota', '/^\d+$/', 'vmailquotawrong', array('0', '')); + + if(isset($_POST['email_quota_ul'])) + { + $email_quota = - 1; + } + } + else + { + $email_quota = - 1; + } + + $email_imap = intval_ressource($_POST['email_imap']); + $email_pop3 = intval_ressource($_POST['email_pop3']); + $ftps = intval_ressource($_POST['ftps']); + + if(isset($_POST['ftps_ul'])) + { + $ftps = - 1; + } + + $tickets = ($settings['ticket']['enabled'] == 1 ? intval_ressource($_POST['tickets']) : 0); + + if(isset($_POST['tickets_ul']) + && $settings['ticket']['enabled'] == '1') + { + $tickets = - 1; + } + + $mysqls = intval_ressource($_POST['mysqls']); + + if(isset($_POST['mysqls_ul'])) + { + $mysqls = - 1; + } + + if($settings['aps']['aps_active'] == '1') + { + $number_of_aps_packages = intval_ressource($_POST['number_of_aps_packages']); + + if(isset($_POST['number_of_aps_packages_ul'])) + { + $number_of_aps_packages = - 1; + } + } + else + { + $number_of_aps_packages = 0; + } + + $createstdsubdomain = intval($_POST['createstdsubdomain']); + $password = validate($_POST['customer_password'], 'password'); + $sendpassword = intval($_POST['sendpassword']); + $phpenabled = intval($_POST['phpenabled']); + $diskspace = $diskspace * 1024; + $traffic = $traffic * 1024 * 1024; + + if(((($userinfo['diskspace_used'] + $diskspace) > $userinfo['diskspace']) && ($userinfo['diskspace'] / 1024) != '-1') + || ((($userinfo['mysqls_used'] + $mysqls) > $userinfo['mysqls']) && $userinfo['mysqls'] != '-1') + || ((($userinfo['emails_used'] + $emails) > $userinfo['emails']) && $userinfo['emails'] != '-1') + || ((($userinfo['email_accounts_used'] + $email_accounts) > $userinfo['email_accounts']) && $userinfo['email_accounts'] != '-1') + || ((($userinfo['email_forwarders_used'] + $email_forwarders) > $userinfo['email_forwarders']) && $userinfo['email_forwarders'] != '-1') + || ((($userinfo['email_quota_used'] + $email_quota) > $userinfo['email_quota']) && $userinfo['email_quota'] != '-1' && $settings['system']['mail_quota_enabled'] == '1') + || ((($userinfo['ftps_used'] + $ftps) > $userinfo['ftps']) && $userinfo['ftps'] != '-1') + || ((($userinfo['tickets_used'] + $tickets) > $userinfo['tickets']) && $userinfo['tickets'] != '-1') + || ((($userinfo['subdomains_used'] + $subdomains) > $userinfo['subdomains']) && $userinfo['subdomains'] != '-1') + || ((($userinfo['aps_packages_used'] + $number_of_aps_packages) > $userinfo['aps_packages']) && $userinfo['aps_packages'] != '-1' && $settings['aps']['aps_active'] == '1') + || (($diskspace / 1024) == '-1' && ($userinfo['diskspace'] / 1024) != '-1') + || ($mysqls == '-1' && $userinfo['mysqls'] != '-1') + || ($emails == '-1' && $userinfo['emails'] != '-1') + || ($email_accounts == '-1' && $userinfo['email_accounts'] != '-1') + || ($email_forwarders == '-1' && $userinfo['email_forwarders'] != '-1') + || ($email_quota == '-1' && $userinfo['email_quota'] != '-1' && $settings['system']['mail_quota_enabled'] == '1') + || ($ftps == '-1' && $userinfo['ftps'] != '-1') + || ($tickets == '-1' && $userinfo['tickets'] != '-1') + || ($subdomains == '-1' && $userinfo['subdomains'] != '-1') + || ($number_of_aps_packages == '-1' && $userinfo['aps_packages'] != '-1')) + { + standard_error('youcantallocatemorethanyouhave'); + exit; + } + + // Either $name and $firstname or the $company must be inserted + + if($name == '' + && $company == '') + { + standard_error(array('stringisempty', 'myname')); + } + elseif($firstname == '' + && $company == '') + { + standard_error(array('stringisempty', 'myfirstname')); + } + elseif($email == '') + { + standard_error(array('stringisempty', 'emailadd')); + } + elseif(!validateEmail($email)) + { + standard_error('emailiswrong', $email); + } + else + { + if(isset($_POST['loginname']) + && $_POST['loginname'] != '') + { + $accountnumber = intval($settings['system']['lastaccountnumber']); + $loginname = validate($_POST['loginname'], 'loginname', '/^[a-z0-9\-_]+$/i'); + + // Accounts which match systemaccounts are not allowed, filtering them + + if(preg_match('/^' . preg_quote($settings['customer']['accountprefix'], '/') . '([0-9]+)/', $loginname)) + { + standard_error('loginnameissystemaccount', $settings['customer']['accountprefix']); + } + } + else + { + $accountnumber = intval($settings['system']['lastaccountnumber']) + 1; + $loginname = $settings['customer']['accountprefix'] . $accountnumber; + } + + // Check if the account already exists + + $loginname_check = $db->query_first("SELECT `loginname` FROM `" . TABLE_PANEL_CUSTOMERS . "` WHERE `loginname` = '" . $db->escape($loginname) . "'"); + $loginname_check_admin = $db->query_first("SELECT `loginname` FROM `" . TABLE_PANEL_ADMINS . "` WHERE `loginname` = '" . $db->escape($loginname) . "'"); + + if(strtolower($loginname_check['loginname']) == strtolower($loginname) + || strtolower($loginname_check_admin['loginname']) == strtolower($loginname)) + { + standard_error('loginnameexists', $loginname); + } + elseif(!validateUsername($loginname, $settings['panel']['unix_names'], 14 - strlen($settings['customer']['mysqlprefix']))) + { + standard_error('loginnameiswrong', $loginname); + } + + $guid = intval($settings['system']['lastguid']) + 1; + $documentroot = makeCorrectDir($settings['system']['documentroot_prefix'] . '/' . $loginname); + + if($service_active == 1) + { + $service_active = '1'; + + if(!isset($servicestart_date) + || $servicestart_date == '0000-00-00') + { + $servicestart_date = date('Y-m-d'); + } + } + else + { + $service_active = '0'; + $servicestart_date = '0000-00-00'; + } + + if($calc_tax != '1') + { + $calc_tax = '0'; + } + + if($interval_payment != '1') + { + $interval_payment = '0'; + } + + if(!isset($lng['customer']['payment_methods'][$payment_method])) + { + $payment_method = 0; + } + + if(file_exists($documentroot)) + { + standard_error('documentrootexists', $documentroot); + } + + if($createstdsubdomain != '1') + { + $createstdsubdomain = '0'; + } + + if($phpenabled != '0') + { + $phpenabled = '1'; + } + + if($password == '') + { + $password = substr(md5(uniqid(microtime(), 1)), 12, 6); + } + + $result = $db->query("INSERT INTO `" . TABLE_PANEL_CUSTOMERS . "` (`adminid`, `loginname`, `password`, `name`, `firstname`, `title`, `company`, `street`, `zipcode`, `city`, `country`, `phone`, `fax`, `email`, `customernumber`, `def_language`, `documentroot`, `guid`, `diskspace`, `traffic`, `subdomains`, `emails`, `email_accounts`, `email_forwarders`, `email_quota`, `ftps`, `tickets`, `mysqls`, `standardsubdomain`, `phpenabled`, `imap`, `pop3`, `contract_date`, `contract_number`, `taxid`, `included_domains_qty`, `included_domains_tld`, `additional_traffic_fee`, `additional_traffic_unit`,`additional_diskspace_fee`, `additional_diskspace_unit`, `interval_fee`, `interval_length`, `interval_type`, `interval_payment`, `setup_fee`, `taxclass`, `service_active`, `servicestart_date`, `term_of_payment`, `calc_tax`, `payment_every`, `payment_method`, `bankaccount_holder`, `bankaccount_number`, `bankaccount_blz`, `bankaccount_bank`, `additional_service_description`, `aps_packages`) VALUES ('" . (int)$userinfo['adminid'] . "', '" . $db->escape($loginname) . "', '" . md5($password) . "', '" . $db->escape($name) . "', '" . $db->escape($firstname) . "', '" . $db->escape($title) . "', '" . $db->escape($company) . "', '" . $db->escape($street) . "', '" . $db->escape($zipcode) . "', '" . $db->escape($city) . "', '" . $db->escape($country) . "', '" . $db->escape($phone) . "', '" . $db->escape($fax) . "', '" . $db->escape($email) . "', '" . $db->escape($customernumber) . "','" . $db->escape($def_language) . "', '" . $db->escape($documentroot) . "', '" . $db->escape($guid) . "', '" . $db->escape($diskspace) . "', '" . $db->escape($traffic) . "', '" . $db->escape($subdomains) . "', '" . $db->escape($emails) . "', '" . $db->escape($email_accounts) . "', '" . $db->escape($email_forwarders) . "', '" . $db->escape($email_quota) . "', '" . $db->escape($ftps) . "', '" . $db->escape($tickets) . "', '" . $db->escape($mysqls) . "', '0', '" . $db->escape($phpenabled) . "', '" . $db->escape($email_imap) . "', '" . $db->escape($email_pop3) . "', '" . $db->escape($contract_date) . "', '" . $db->escape($contract_number) . "', '" . $db->escape($taxid) . "', '" . $db->escape($included_domains_qty) . "', '" . $db->escape($included_domains_tld) . "', '" . $db->escape($additional_traffic_fee) . "', '" . $db->escape($additional_traffic_unit) . "','" . $db->escape($additional_diskspace_fee) . "', '" . $db->escape($additional_diskspace_unit) . "','" . $db->escape($interval_fee) . "', '" . $db->escape($interval_length) . "', '" . $db->escape($interval_type) . "', '" . $db->escape($interval_payment) . "', '" . $db->escape($setup_fee) . "', '" . $db->escape($taxclass) . "', '" . $db->escape($service_active) . "', '" . $db->escape($servicestart_date) . "', '" . $db->escape($term_of_payment) . "', '" . $db->escape($calc_tax) . "', '" . $db->escape($payment_every) . "', '" . $db->escape($payment_method) . "', '" . $db->escape($bankaccount_holder) . "', '" . $db->escape($bankaccount_number) . "', '" . $db->escape($bankaccount_blz) . "', '" . $db->escape($bankaccount_bank) . "', '" . $db->escape($additional_service_description) . "', " . (int)$number_of_aps_packages . ")"); + $customerid = $db->insert_id(); + $admin_update_query = "UPDATE `" . TABLE_PANEL_ADMINS . "` SET `customers_used` = `customers_used` + 1"; + + if($mysqls != '-1') + { + $admin_update_query.= ", `mysqls_used` = `mysqls_used` + 0" . (int)$mysqls; + } + + if($emails != '-1') + { + $admin_update_query.= ", `emails_used` = `emails_used` + 0" . (int)$emails; + } + + if($email_accounts != '-1') + { + $admin_update_query.= ", `email_accounts_used` = `email_accounts_used` + 0" . (int)$email_accounts; + } + + if($email_forwarders != '-1') + { + $admin_update_query.= ", `email_forwarders_used` = `email_forwarders_used` + 0" . (int)$email_forwarders; + } + + if($email_quota != '-1') + { + $admin_update_query.= ", `email_quota_used` = `email_quota_used` + 0" . (int)$email_quota; + } + + if($subdomains != '-1') + { + $admin_update_query.= ", `subdomains_used` = `subdomains_used` + 0" . (int)$subdomains; + } + + if($ftps != '-1') + { + $admin_update_query.= ", `ftps_used` = `ftps_used` + 0" . (int)$ftps; + } + + if($tickets != '-1' + && $settings['ticket']['enabled'] == 1) + { + $admin_update_query.= ", `tickets_used` = `tickets_used` + 0" . (int)$tickets; + } + + if(($diskspace / 1024) != '-1') + { + $admin_update_query.= ", `diskspace_used` = `diskspace_used` + 0" . (int)$diskspace; + } + + if($number_of_aps_packages != '-1') + { + $admin_update_query.= ", `aps_packages_used` = `aps_packages_used` + 0" . (int)$number_of_aps_packages; + } + + $admin_update_query.= " WHERE `adminid` = '" . (int)$userinfo['adminid'] . "'"; + $db->query($admin_update_query); + $db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` " . "SET `value`='" . $db->escape($guid) . "' " . "WHERE `settinggroup`='system' AND `varname`='lastguid'"); + + if($accountnumber != intval($settings['system']['lastaccountnumber'])) + { + $db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` " . "SET `value`='" . $db->escape($accountnumber) . "' " . "WHERE `settinggroup`='system' AND `varname`='lastaccountnumber'"); + } + + $log->logAction(ADM_ACTION, LOG_INFO, "added user '" . $loginname . "'"); + inserttask('2', $loginname, $guid, $guid); + + // Add htpasswd for the webalizer stats + + if(CRYPT_STD_DES == 1) + { + $saltfordescrypt = substr(md5(uniqid(microtime(), 1)), 4, 2); + $htpasswdPassword = crypt($password, $saltfordescrypt); + } + else + { + $htpasswdPassword = crypt($password); + } + + $db->query("INSERT INTO `" . TABLE_PANEL_HTPASSWDS . "` " . "(`customerid`, `username`, `password`, `path`) " . "VALUES ('" . (int)$customerid . "', '" . $db->escape($loginname) . "', '" . $db->escape($htpasswdPassword) . "', '" . $db->escape(makeCorrectDir($documentroot . '/webalizer/')) . "')"); + $log->logAction(ADM_ACTION, LOG_NOTICE, "automatically added webalizer htpasswd for user '" . $loginname . "'"); + + if($settings['system']['awstats_enabled'] == '1') + { + $db->query("INSERT INTO `" . TABLE_PANEL_HTPASSWDS . "` " . "(`customerid`, `username`, `password`, `path`) " . "VALUES ('" . (int)$customerid . "', '" . $db->escape($loginname) . "', '" . $db->escape($htpasswdPassword) . "', '" . $db->escape(makeCorrectDir($documentroot . '/awstats/')) . "')"); + $log->logAction(ADM_ACTION, LOG_NOTICE, "automatically added awstats htpasswd for user '" . $loginname . "'"); + } + + inserttask('1'); + $result = $db->query("INSERT INTO `" . TABLE_FTP_USERS . "` " . "(`customerid`, `username`, `password`, `homedir`, `login_enabled`, `uid`, `gid`) " . "VALUES ('" . (int)$customerid . "', '" . $db->escape($loginname) . "', ENCRYPT('" . $db->escape($password) . "'), '" . $db->escape($documentroot) . "', 'y', '" . (int)$guid . "', '" . (int)$guid . "')"); + $result = $db->query("INSERT INTO `" . TABLE_FTP_GROUPS . "` " . "(`customerid`, `groupname`, `gid`, `members`) " . "VALUES ('" . (int)$customerid . "', '" . $db->escape($loginname) . "', '" . $db->escape($guid) . "', '" . $db->escape($loginname) . "')"); + $log->logAction(ADM_ACTION, LOG_NOTICE, "automatically added ftp-account for user '" . $loginname . "'"); + + if($createstdsubdomain == '1') + { + $db->query("INSERT INTO `" . TABLE_PANEL_DOMAINS . "` " . "(`domain`, `customerid`, `adminid`, `parentdomainid`, `ipandport`, `documentroot`, `zonefile`, `isemaildomain`, `caneditdomain`, `openbasedir`, `safemode`, `speciallogfile`, `specialsettings`) " . "VALUES ('" . $db->escape($loginname . '.' . $settings['system']['hostname']) . "', '" . (int)$customerid . "', '" . (int)$userinfo['adminid'] . "', '-1', '" . $db->escape($settings['system']['defaultip']) . "', '" . $db->escape($documentroot) . "', '', '0', '0', '1', '1', '0', '')"); + $domainid = $db->insert_id(); + $db->query('UPDATE `' . TABLE_PANEL_CUSTOMERS . '` SET `standardsubdomain`=\'' . (int)$domainid . '\' WHERE `customerid`=\'' . (int)$customerid . '\''); + $log->logAction(ADM_ACTION, LOG_NOTICE, "automatically added standardsubdomain for user '" . $loginname . "'"); + inserttask('1'); + } + + if($sendpassword == '1') + { + $replace_arr = array( + 'FIRSTNAME' => $firstname, + 'NAME' => $name, + 'TITLE' => $title, + 'COMPANY' => $company, + 'SALUTATION' => getCorrectUserSalutation(array('firstname' => $firstname, 'name' => $name, 'company' => $company)), + 'USERNAME' => $loginname, + 'PASSWORD' => $password + ); + + // Get mail templates from database; the ones from 'admin' are fetched for fallback + + $result = $db->query_first('SELECT `value` FROM `' . TABLE_PANEL_TEMPLATES . '` WHERE `adminid`=\'' . (int)$userinfo['adminid'] . '\' AND `language`=\'' . $db->escape($def_language) . '\' AND `templategroup`=\'mails\' AND `varname`=\'createcustomer_subject\''); + $mail_subject = html_entity_decode(replace_variables((($result['value'] != '') ? $result['value'] : $lng['mails']['createcustomer']['subject']), $replace_arr)); + $result = $db->query_first('SELECT `value` FROM `' . TABLE_PANEL_TEMPLATES . '` WHERE `adminid`=\'' . (int)$userinfo['adminid'] . '\' AND `language`=\'' . $db->escape($def_language) . '\' AND `templategroup`=\'mails\' AND `varname`=\'createcustomer_mailbody\''); + $mail_body = html_entity_decode(replace_variables((($result['value'] != '') ? $result['value'] : $lng['mails']['createcustomer']['mailbody']), $replace_arr)); + + $mail->From = $userinfo['email']; + $mail->FromName = $userinfo['name']; + $mail->Subject = $mail_subject; + $mail->Body = $mail_body; + $mail->AddAddress($email, getCorrectUserSalutation(array('firstname' => $firstname, 'name' => $name, 'company' => $company))); + + if(!$mail->Send()) + { + if($mail->ErrorInfo != '') + { + $mailerr_msg = $mail->ErrorInfo; + } + else + { + $mailerr_msg = $email; + } + + $log->logAction(ADM_ACTION, LOG_ERR, "Error sending mail: " . $mailerr_msg); + standard_error('errorsendingmail', $email); + } + + $mail->ClearAddresses(); + $log->logAction(ADM_ACTION, LOG_NOTICE, "automatically sent password to user '" . $loginname . "'"); + } + + redirectTo($filename, Array('page' => $page, 's' => $s)); + } + } + else + { + $language_options = ''; + + while(list($language_file, $language_name) = each($languages)) + { + $language_options.= makeoption($language_name, $language_file, $userinfo['def_language'], true); + } + + $diskspace_ul = makecheckbox('diskspace_ul', $lng['customer']['unlimited'], '-1', false, '0', true, true); + $traffic_ul = makecheckbox('traffic_ul', $lng['customer']['unlimited'], '-1', false, '0', true, true); + $subdomains_ul = makecheckbox('subdomains_ul', $lng['customer']['unlimited'], '-1', false, '0', true, true); + $emails_ul = makecheckbox('emails_ul', $lng['customer']['unlimited'], '-1', false, '0', true, true); + $email_accounts_ul = makecheckbox('email_accounts_ul', $lng['customer']['unlimited'], '-1', false, '0', true, true); + $email_forwarders_ul = makecheckbox('email_forwarders_ul', $lng['customer']['unlimited'], '-1', false, '0', true, true); + $email_quota_ul = makecheckbox('email_quota_ul', $lng['customer']['unlimited'], '-1', false, '0', true, true); + $ftps_ul = makecheckbox('ftps_ul', $lng['customer']['unlimited'], '-1', false, '0', true, true); + $tickets_ul = makecheckbox('tickets_ul', $lng['customer']['unlimited'], '-1', false, '0', true, true); + $mysqls_ul = makecheckbox('mysqls_ul', $lng['customer']['unlimited'], '-1', false, '0', true, true); + $number_of_aps_packages_ul = makecheckbox('number_of_aps_packages_ul', $lng['customer']['unlimited'], '-1', false, '0', true, true); + $createstdsubdomain = makeyesno('createstdsubdomain', '1', '0', '1'); + $email_imap = makeyesno('email_imap', '1', '0', '1'); + $email_pop3 = makeyesno('email_pop3', '1', '0', '1'); + $sendpassword = makeyesno('sendpassword', '1', '0', '1'); + $phpenabled = makeyesno('phpenabled', '1', '0', '1'); + eval("echo \"" . getTemplate("customers/customers_add") . "\";"); + } + } + } + elseif($action == 'edit' + && $id != 0) + { + $result = $db->query_first("SELECT * FROM `" . TABLE_PANEL_CUSTOMERS . "` WHERE `customerid`='" . (int)$id . "' " . ($userinfo['customers_see_all'] ? '' : " AND `adminid` = '" . (int)$userinfo['adminid'] . "' ")); + + if($result['loginname'] != '') + { + if(isset($_POST['send']) + && $_POST['send'] == 'send') + { + $name = validate($_POST['name'], 'name'); + $firstname = validate($_POST['firstname'], 'first name'); + $title = validate($_POST['title'], 'title'); + $company = validate($_POST['company'], 'company'); + $street = validate($_POST['street'], 'street'); + $zipcode = validate($_POST['zipcode'], 'zipcode', '/^[0-9 \-A-Z]*$/'); + $city = validate($_POST['city'], 'city'); + $country = validate($_POST['country'], 'country'); + $phone = validate($_POST['phone'], 'phone', '/^[0-9\- \+\(\)\/]*$/'); + $fax = validate($_POST['fax'], 'fax', '/^[0-9\- \+\(\)\/]*$/'); + $email = $idna_convert->encode(validate($_POST['email'], 'email')); + $customernumber = validate($_POST['customernumber'], 'customer number', '/^[A-Za-z0-9 \-]*$/Di'); + $def_language = validate($_POST['def_language'], 'default language'); + $password = validate($_POST['customer_password'], 'new password'); + $diskspace = intval_ressource($_POST['diskspace']); + + if(isset($_POST['diskspace_ul'])) + { + $diskspace = - 1; + } + + $traffic = doubleval_ressource($_POST['traffic']); + + if(isset($_POST['traffic_ul'])) + { + $traffic = - 1; + } + + $subdomains = intval_ressource($_POST['subdomains']); + + if(isset($_POST['subdomains_ul'])) + { + $subdomains = - 1; + } + + $emails = intval_ressource($_POST['emails']); + + if(isset($_POST['emails_ul'])) + { + $emails = - 1; + } + + $email_accounts = intval_ressource($_POST['email_accounts']); + + if(isset($_POST['email_accounts_ul'])) + { + $email_accounts = - 1; + } + + $email_forwarders = intval_ressource($_POST['email_forwarders']); + + if(isset($_POST['email_forwarders_ul'])) + { + $email_forwarders = - 1; + } + + if($settings['system']['mail_quota_enabled'] == '1') + { + $email_quota = validate($_POST['email_quota'], 'email_quota', '/^\d+$/', 'vmailquotawrong', array('0', '')); + + if(isset($_POST['email_quota_ul'])) + { + $email_quota = - 1; + } + } + else + { + $email_quota = - 1; + } + + $email_imap = intval_ressource($_POST['email_imap']); + $email_pop3 = intval_ressource($_POST['email_pop3']); + $ftps = intval_ressource($_POST['ftps']); + + if(isset($_POST['ftps_ul'])) + { + $ftps = - 1; + } + + $tickets = ($settings['ticket']['enabled'] == 1 ? intval_ressource($_POST['tickets']) : 0); + + if(isset($_POST['tickets_ul']) + && $settings['ticket']['enabled'] == '1') + { + $tickets = - 1; + } + + $mysqls = intval_ressource($_POST['mysqls']); + + if(isset($_POST['mysqls_ul'])) + { + $mysqls = - 1; + } + + $number_of_aps_packages = intval_ressource($_POST['number_of_aps_packages']); + + if(isset($_POST['number_of_aps_packages_ul'])) + { + $number_of_aps_packages = - 1; + } + + $createstdsubdomain = intval($_POST['createstdsubdomain']); + $deactivated = intval($_POST['deactivated']); + $phpenabled = intval($_POST['phpenabled']); + $diskspace = $diskspace * 1024; + $traffic = $traffic * 1024 * 1024; + + if(((($userinfo['diskspace_used'] + $diskspace - $result['diskspace']) > $userinfo['diskspace']) && ($userinfo['diskspace'] / 1024) != '-1') + || ((($userinfo['mysqls_used'] + $mysqls - $result['mysqls']) > $userinfo['mysqls']) && $userinfo['mysqls'] != '-1') + || ((($userinfo['emails_used'] + $emails - $result['emails']) > $userinfo['emails']) && $userinfo['emails'] != '-1') + || ((($userinfo['email_accounts_used'] + $email_accounts - $result['email_accounts']) > $userinfo['email_accounts']) && $userinfo['email_accounts'] != '-1') + || ((($userinfo['email_forwarders_used'] + $email_forwarders - $result['email_forwarders']) > $userinfo['email_forwarders']) && $userinfo['email_forwarders'] != '-1') + || ((($userinfo['email_quota_used'] + $email_quota - $result['email_quota']) > $userinfo['email_quota']) && $userinfo['email_quota'] != '-1' && $settings['system']['mail_quota_enabled'] == '1') + || ((($userinfo['ftps_used'] + $ftps - $result['ftps']) > $userinfo['ftps']) && $userinfo['ftps'] != '-1') + || ((($userinfo['tickets_used'] + $tickets - $result['tickets']) > $userinfo['tickets']) && $userinfo['tickets'] != '-1') + || ((($userinfo['subdomains_used'] + $subdomains - $result['subdomains']) > $userinfo['subdomains']) && $userinfo['subdomains'] != '-1') + || (($diskspace / 1024) == '-1' && ($userinfo['diskspace'] / 1024) != '-1') + || ((($userinfo['aps_packages'] + $number_of_aps_packages - $result['aps_packages']) > $userinfo['aps_packages']) && $userinfo['aps_packages'] != '-1' && $settings['aps']['aps_active'] == '1') + || ($mysqls == '-1' && $userinfo['mysqls'] != '-1') + || ($emails == '-1' && $userinfo['emails'] != '-1') + || ($email_accounts == '-1' && $userinfo['email_accounts'] != '-1') + || ($email_forwarders == '-1' && $userinfo['email_forwarders'] != '-1') + || ($email_quota == '-1' && $userinfo['email_quota'] != '-1' && $settings['system']['mail_quota_enabled'] == '1') + || ($ftps == '-1' && $userinfo['ftps'] != '-1') + || ($tickets == '-1' && $userinfo['tickets'] != '-1') + || ($subdomains == '-1' && $userinfo['subdomains'] != '-1') + || ($number_of_aps_packages == '-1' && $userinfo['aps_packages'] != '-1')) + { + standard_error('youcantallocatemorethanyouhave'); + exit; + } + + // Either $name and $firstname or the $company must be inserted + + if($name == '' + && $company == '') + { + standard_error(array('stringisempty', 'myname')); + } + elseif($firstname == '' + && $company == '') + { + standard_error(array('stringisempty', 'myfirstname')); + } + elseif($email == '') + { + standard_error(array('stringisempty', 'emailadd')); + } + elseif(!validateEmail($email)) + { + standard_error('emailiswrong', $email); + } + else + { + if($password != '') + { + $password = md5($password); + } + else + { + $password = $result['password']; + } + + if($createstdsubdomain != '1') + { + $createstdsubdomain = '0'; + } + + if($createstdsubdomain == '1' + && $result['standardsubdomain'] == '0') + { + $db->query("INSERT INTO `" . TABLE_PANEL_DOMAINS . "` " . "(`domain`, `customerid`, `adminid`, `parentdomainid`, `ipandport`, `documentroot`, `zonefile`, `isemaildomain`, `caneditdomain`, `openbasedir`, `safemode`, `speciallogfile`, `specialsettings`) " . "VALUES ('" . $db->escape($result['loginname'] . '.' . $settings['system']['hostname']) . "', '" . (int)$result['customerid'] . "', '" . (int)$userinfo['adminid'] . "', '-1', '" . $db->escape($settings['system']['defaultip']) . "', '" . $db->escape($result['documentroot']) . "', '', '0', '0', '1', '1', '0', '')"); + $domainid = $db->insert_id(); + $db->query('UPDATE `' . TABLE_PANEL_CUSTOMERS . '` SET `standardsubdomain`=\'' . (int)$domainid . '\' WHERE `customerid`=\'' . (int)$result['customerid'] . '\''); + $log->logAction(ADM_ACTION, LOG_NOTICE, "automatically added standardsubdomain for user '" . $result['loginname'] . "'"); + inserttask('1'); + } + + if($createstdsubdomain == '0' + && $result['standardsubdomain'] != '0') + { + $db->query('DELETE FROM `' . TABLE_PANEL_DOMAINS . '` WHERE `id`=\'' . (int)$result['standardsubdomain'] . '\''); + $db->query('UPDATE `' . TABLE_PANEL_CUSTOMERS . '` SET `standardsubdomain`=\'0\' WHERE `customerid`=\'' . (int)$result['customerid'] . '\''); + $log->logAction(ADM_ACTION, LOG_NOTICE, "automatically deleted standardsubdomain for user '" . $result['loginname'] . "'"); + inserttask('1'); + } + + if($deactivated != '1') + { + $deactivated = '0'; + } + + if($phpenabled != '0') + { + $phpenabled = '1'; + } + + if($phpenabled != $result['phpenabled']) + { + inserttask('1'); + } + + if($deactivated != $result['deactivated']) + { + $db->query("UPDATE `" . TABLE_MAIL_USERS . "` SET `postfix`='" . (($deactivated) ? 'N' : 'Y') . "', `pop3`='" . (($deactivated) ? '0' : '1') . "', `imap`='" . (($deactivated) ? '0' : '1') . "' WHERE `customerid`='" . (int)$id . "'"); + $db->query("UPDATE `" . TABLE_FTP_USERS . "` SET `login_enabled`='" . (($deactivated) ? 'N' : 'Y') . "' WHERE `customerid`='" . (int)$id . "'"); + $db->query("UPDATE `" . TABLE_PANEL_DOMAINS . "` SET `deactivated`='" . (int)$deactivated . "' WHERE `customerid`='" . (int)$id . "'"); + $log->logAction(ADM_ACTION, LOG_INFO, "deactivated user '" . $result['loginname'] . "'"); + inserttask('1'); + } + + // Disable or enable POP3 Login for customers Mail Accounts + + if($email_pop3 != $result['pop3']) + { + $db->query("UPDATE `" . TABLE_MAIL_USERS . "` SET `pop3`='" . (int)$email_pop3 . "' WHERE `customerid`='" . (int)$id . "'"); + } + + // Disable or enable IMAP Login for customers Mail Accounts + + if($email_imap != $result['imap']) + { + $db->query("UPDATE `" . TABLE_MAIL_USERS . "` SET `imap`='" . (int)$email_imap . "' WHERE `customerid`='" . (int)$id . "'"); + } + + $db->query("UPDATE `" . TABLE_PANEL_CUSTOMERS . "` SET `name`='" . $db->escape($name) . "', `firstname`='" . $db->escape($firstname) . "', `title`='" . $db->escape($title) . "', `company`='" . $db->escape($company) . "', `street`='" . $db->escape($street) . "', `zipcode`='" . $db->escape($zipcode) . "', `city`='" . $db->escape($city) . "', `country`='" . $db->escape($country) . "', `phone`='" . $db->escape($phone) . "', `fax`='" . $db->escape($fax) . "', `email`='" . $db->escape($email) . "', `customernumber`='" . $db->escape($customernumber) . "', `def_language`='" . $db->escape($def_language) . "', `password` = '" . $password . "', `diskspace`='" . $db->escape($diskspace) . "', `traffic`='" . $db->escape($traffic) . "', `subdomains`='" . $db->escape($subdomains) . "', `emails`='" . $db->escape($emails) . "', `email_accounts` = '" . $db->escape($email_accounts) . "', `email_forwarders`='" . $db->escape($email_forwarders) . "', `ftps`='" . $db->escape($ftps) . "', `tickets`='" . $db->escape($tickets) . "', `mysqls`='" . $db->escape($mysqls) . "', `deactivated`='" . $db->escape($deactivated) . "', `phpenabled`='" . $db->escape($phpenabled) . "', `email_quota`='" . $db->escape($email_quota) . "', `imap`='" . $db->escape($email_imap) . "', `pop3`='" . $db->escape($email_pop3) . "', `contract_date`='" . $db->escape($contract_date) . "', `contract_number`='" . $db->escape($contract_number) . "', `taxid`='" . $db->escape($taxid) . "', `included_domains_qty`='" . $db->escape($included_domains_qty) . "', `included_domains_tld`='" . $db->escape($included_domains_tld) . "', `additional_traffic_fee`='" . $db->escape($additional_traffic_fee) . "', `additional_traffic_unit`='" . $db->escape($additional_traffic_unit) . "', `additional_diskspace_fee`='" . $db->escape($additional_diskspace_fee) . "', `additional_diskspace_unit`='" . $db->escape($additional_diskspace_unit) . "', `interval_fee`='" . $db->escape($interval_fee) . "', `interval_length`='" . $db->escape($interval_length) . "', `interval_type`='" . $db->escape($interval_type) . "', `interval_payment`='" . $db->escape($interval_payment) . "', `setup_fee`='" . $db->escape($setup_fee) . "', `taxclass`='" . $db->escape($taxclass) . "', `service_active`='" . $db->escape($service_active) . "', `servicestart_date`='" . $db->escape($servicestart_date) . "', `serviceend_date`='" . $db->escape($serviceend_date) . "', `term_of_payment`='" . $db->escape($term_of_payment) . "', `calc_tax`='" . $db->escape($calc_tax) . "', `payment_every`='" . $db->escape($payment_every) . "', `payment_method`='" . $db->escape($payment_method) . "', `bankaccount_holder`='" . $db->escape($bankaccount_holder) . "', `bankaccount_number`='" . $db->escape($bankaccount_number) . "', `bankaccount_blz`='" . $db->escape($bankaccount_blz) . "', `bankaccount_bank`='" . $db->escape($bankaccount_bank) . "', `additional_service_description`='" . $db->escape($additional_service_description) . "', `aps_packages`=" . (int)$number_of_aps_packages . " WHERE `customerid`='" . (int)$id . "'"); + $admin_update_query = "UPDATE `" . TABLE_PANEL_ADMINS . "` SET `customers_used` = `customers_used` "; + + if($mysqls != '-1' + || $result['mysqls'] != '-1') + { + $admin_update_query.= ", `mysqls_used` = `mysqls_used` "; + + if($mysqls != '-1') + { + $admin_update_query.= " + 0" . (int)$mysqls . " "; + } + + if($result['mysqls'] != '-1') + { + $admin_update_query.= " - 0" . (int)$result['mysqls'] . " "; + } + } + + if($emails != '-1' + || $result['emails'] != '-1') + { + $admin_update_query.= ", `emails_used` = `emails_used` "; + + if($emails != '-1') + { + $admin_update_query.= " + 0" . (int)$emails . " "; + } + + if($result['emails'] != '-1') + { + $admin_update_query.= " - 0" . (int)$result['emails'] . " "; + } + } + + if($email_accounts != '-1' + || $result['email_accounts'] != '-1') + { + $admin_update_query.= ", `email_accounts_used` = `email_accounts_used` "; + + if($email_accounts != '-1') + { + $admin_update_query.= " + 0" . (int)$email_accounts . " "; + } + + if($result['email_accounts'] != '-1') + { + $admin_update_query.= " - 0" . (int)$result['email_accounts'] . " "; + } + } + + if($email_forwarders != '-1' + || $result['email_forwarders'] != '-1') + { + $admin_update_query.= ", `email_forwarders_used` = `email_forwarders_used` "; + + if($email_forwarders != '-1') + { + $admin_update_query.= " + 0" . (int)$email_forwarders . " "; + } + + if($result['email_forwarders'] != '-1') + { + $admin_update_query.= " - 0" . (int)$result['email_forwarders'] . " "; + } + } + + if($email_quota != '-1' + || $result['email_quota'] != '-1') + { + $admin_update_query.= ", `email_quota_used` = `email_quota_used` "; + + if($email_quota != '-1') + { + $admin_update_query.= " + 0" . (int)$email_quota . " "; + } + + if($result['email_quota'] != '-1') + { + $admin_update_query.= " - 0" . (int)$result['email_quota'] . " "; + } + } + + if($subdomains != '-1' + || $result['subdomains'] != '-1') + { + $admin_update_query.= ", `subdomains_used` = `subdomains_used` "; + + if($subdomains != '-1') + { + $admin_update_query.= " + 0" . (int)$subdomains . " "; + } + + if($result['subdomains'] != '-1') + { + $admin_update_query.= " - 0" . (int)$result['subdomains'] . " "; + } + } + + if($ftps != '-1' + || $result['ftps'] != '-1') + { + $admin_update_query.= ", `ftps_used` = `ftps_used` "; + + if($ftps != '-1') + { + $admin_update_query.= " + 0" . (int)$ftps . " "; + } + + if($result['ftps'] != '-1') + { + $admin_update_query.= " - 0" . (int)$result['ftps'] . " "; + } + } + + if($tickets != '-1' + || $result['tickets'] != '-1') + { + $admin_update_query.= ", `tickets_used` = `tickets_used` "; + + if($tickets != '-1') + { + $admin_update_query.= " + 0" . (int)$tickets . " "; + } + + if($result['tickets'] != '-1') + { + $admin_update_query.= " - 0" . (int)$result['tickets'] . " "; + } + } + + if(($diskspace / 1024) != '-1' + || ($result['diskspace'] / 1024) != '-1') + { + $admin_update_query.= ", `diskspace_used` = `diskspace_used` "; + + if(($diskspace / 1024) != '-1') + { + $admin_update_query.= " + 0" . (int)$diskspace . " "; + } + + if(($result['diskspace'] / 1024) != '-1') + { + $admin_update_query.= " - 0" . (int)$result['diskspace'] . " "; + } + } + + if($number_of_aps_packages != '-1' + || $result['aps_packages'] != '-1') + { + $admin_update_query.= ", `aps_packages_used` = `aps_packages_used` "; + + if($number_of_aps_packages != '-1') + { + $admin_update_query.= " + 0" . (int)$number_of_aps_packages . " "; + } + + if($result['aps_packages'] != '-1') + { + $admin_update_query.= " - 0" . (int)$result['aps_packages'] . " "; + } + } + + $admin_update_query.= " WHERE `adminid` = '" . (int)$result['adminid'] . "'"; + $db->query($admin_update_query); + $log->logAction(ADM_ACTION, LOG_INFO, "edited user '" . $result['loginname'] . "'"); + $redirect_props = Array( + 'page' => $page, + 's' => $s + ); + + redirectTo($filename, $redirect_props); + } + } + else + { + $language_options = ''; + + while(list($language_file, $language_name) = each($languages)) + { + $language_options.= makeoption($language_name, $language_file, $result['def_language'], true); + } + + $result['traffic'] = round($result['traffic'] / (1024 * 1024), $settings['panel']['decimal_places']); + $result['diskspace'] = round($result['diskspace'] / 1024, $settings['panel']['decimal_places']); + $result['email'] = $idna_convert->decode($result['email']); + $diskspace_ul = makecheckbox('diskspace_ul', $lng['customer']['unlimited'], '-1', false, $result['diskspace'], true, true); + + if($result['diskspace'] == '-1') + { + $result['diskspace'] = ''; + } + + $traffic_ul = makecheckbox('traffic_ul', $lng['customer']['unlimited'], '-1', false, $result['traffic'], true, true); + + if($result['traffic'] == '-1') + { + $result['traffic'] = ''; + } + + $subdomains_ul = makecheckbox('subdomains_ul', $lng['customer']['unlimited'], '-1', false, $result['subdomains'], true, true); + + if($result['subdomains'] == '-1') + { + $result['subdomains'] = ''; + } + + $emails_ul = makecheckbox('emails_ul', $lng['customer']['unlimited'], '-1', false, $result['emails'], true, true); + + if($result['emails'] == '-1') + { + $result['emails'] = ''; + } + + $email_accounts_ul = makecheckbox('email_accounts_ul', $lng['customer']['unlimited'], '-1', false, $result['email_accounts'], true, true); + + if($result['email_accounts'] == '-1') + { + $result['email_accounts'] = ''; + } + + $email_forwarders_ul = makecheckbox('email_forwarders_ul', $lng['customer']['unlimited'], '-1', false, $result['email_forwarders'], true, true); + + if($result['email_forwarders'] == '-1') + { + $result['email_forwarders'] = ''; + } + + $email_quota_ul = makecheckbox('email_quota_ul', $lng['customer']['unlimited'], '-1', false, $result['email_quota'], true, true); + + if($result['email_quota'] == '-1') + { + $result['email_quota'] = ''; + } + + $ftps_ul = makecheckbox('ftps_ul', $lng['customer']['unlimited'], '-1', false, $result['ftps'], true, true); + + if($result['ftps'] == '-1') + { + $result['ftps'] = ''; + } + + $tickets_ul = makecheckbox('tickets_ul', $lng['customer']['unlimited'], '-1', false, $result['tickets'], true, true); + + if($result['tickets'] == '-1') + { + $result['tickets'] = ''; + } + + $mysqls_ul = makecheckbox('mysqls_ul', $lng['customer']['unlimited'], '-1', false, $result['mysqls'], true, true); + + if($result['mysqls'] == '-1') + { + $result['mysqls'] = ''; + } + + $number_of_aps_packages_ul = makecheckbox('number_of_aps_packages_ul', $lng['customer']['unlimited'], '-1', false, $result['aps_packages'], true, true); + + if($result['aps_packages'] == '-1') + { + $result['aps_packages'] = ''; + } + + $createstdsubdomain = makeyesno('createstdsubdomain', '1', '0', (($result['standardsubdomain'] != '0') ? '1' : '0')); + $phpenabled = makeyesno('phpenabled', '1', '0', $result['phpenabled']); + $deactivated = makeyesno('deactivated', '1', '0', $result['deactivated']); + $email_imap = makeyesno('email_imap', '1', '0', $result['imap']); + $email_pop3 = makeyesno('email_pop3', '1', '0', $result['pop3']); + + $result = htmlentities_array($result); + eval("echo \"" . getTemplate("customers/customers_edit") . "\";"); + } + } + } +} + +?> diff --git a/admin_domains.php b/admin_domains.php new file mode 100644 index 0000000000..e7dccde98e --- /dev/null +++ b/admin_domains.php @@ -0,0 +1,1122 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Panel + * @version $Id: admin_domains.php 2692 2009-03-27 18:04:47Z flo $ + */ + +define('AREA', 'admin'); + +/** + * Include our init.php, which manages Sessions, Language etc. + */ + +require ("./lib/init.php"); + +if(isset($_POST['id'])) +{ + $id = intval($_POST['id']); +} +elseif(isset($_GET['id'])) +{ + $id = intval($_GET['id']); +} + +if($page == 'domains' + || $page == 'overview') +{ + // Let's see how many customers we have + + $countcustomers = $db->query_first("SELECT COUNT(`customerid`) as `countcustomers` FROM `" . TABLE_PANEL_CUSTOMERS . "` " . ($userinfo['customers_see_all'] ? '' : " WHERE `adminid` = '" . (int)$userinfo['adminid'] . "' ") . ""); + $countcustomers = (int)$countcustomers['countcustomers']; + + if($action == '') + { + $log->logAction(ADM_ACTION, LOG_NOTICE, "viewed admin_domains"); + $fields = array( + 'd.domain' => $lng['domains']['domainname'], + 'ip.ip' => $lng['admin']['ipsandports']['ip'], + 'ip.port' => $lng['admin']['ipsandports']['port'], + 'c.name' => $lng['customer']['name'], + 'c.firstname' => $lng['customer']['firstname'], + 'c.company' => $lng['customer']['company'], + 'c.loginname' => $lng['login']['username'], + 'd.aliasdomain' => $lng['domains']['aliasdomain'] + ); + $paging = new paging($userinfo, $db, TABLE_PANEL_DOMAINS, $fields, $settings['panel']['paging'], $settings['panel']['natsorting']); + $domains = ''; + $result = $db->query("SELECT `d`.*, `c`.`loginname`, `c`.`name`, `c`.`firstname`, `c`.`company`, `c`.`standardsubdomain`, `ad`.`id` AS `aliasdomainid`, `ad`.`domain` AS `aliasdomain`, `ip`.`id` AS `ipid`, `ip`.`ip`, `ip`.`port` " . "FROM `" . TABLE_PANEL_DOMAINS . "` `d` " . "LEFT JOIN `" . TABLE_PANEL_CUSTOMERS . "` `c` USING(`customerid`) " . "LEFT JOIN `" . TABLE_PANEL_DOMAINS . "` `ad` ON `d`.`aliasdomain`=`ad`.`id` " . "LEFT JOIN `" . TABLE_PANEL_IPSANDPORTS . "` `ip` ON (`d`.`ipandport` = `ip`.`id`) " . "WHERE `d`.`parentdomainid`='0' " . ($userinfo['customers_see_all'] ? '' : " AND `d`.`adminid` = '" . (int)$userinfo['adminid'] . "' ") . " " . $paging->getSqlWhere(true) . " " . $paging->getSqlOrderBy() . " " . $paging->getSqlLimit()); + $paging->setEntries($db->num_rows($result)); + $sortcode = $paging->getHtmlSortCode($lng); + $arrowcode = $paging->getHtmlArrowCode($filename . '?page=' . $page . '&s=' . $s); + $searchcode = $paging->getHtmlSearchCode($lng); + $pagingcode = $paging->getHtmlPagingCode($filename . '?page=' . $page . '&s=' . $s); + $domain_array = array(); + + while($row = $db->fetch_array($result)) + { + $row['domain'] = $idna_convert->decode($row['domain']); + $row['aliasdomain'] = $idna_convert->decode($row['aliasdomain']); + + if(filter_var($row['ip'], FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) + { + $row['ipandport'] = '[' . $row['ip'] . ']:' . $row['port']; + } + else + { + $row['ipandport'] = $row['ip'] . ':' . $row['port']; + } + + if(!isset($domain_array[$row['domain']])) + { + $domain_array[$row['domain']] = $row; + } + else + { + $domain_array[$row['domain']] = array_merge($row, $domain_array[$row['domain']]); + } + + if(isset($row['aliasdomainid']) && $row['aliasdomainid'] != NULL && isset($row['aliasdomain']) && $row['aliasdomain'] != '') + { + if(!isset($domain_array[$row['aliasdomain']])) + { + $domain_array[$row['aliasdomain']] = array(); + } + + $domain_array[$row['aliasdomain']]['domainaliasid'] = $row['id']; + $domain_array[$row['aliasdomain']]['domainalias'] = $row['domain']; + } + } + + /** + * We need ksort/krsort here to make sure idna-domains are also sorted correctly + */ + + if($paging->sortfield == 'd.domain' + && $paging->sortorder == 'asc') + { + ksort($domain_array); + } + elseif($paging->sortfield == 'd.domain' + && $paging->sortorder == 'desc') + { + krsort($domain_array); + } + + $i = 0; + $count = 0; + foreach($domain_array as $row) + { + if(isset($row['domain']) && $row['domain'] != '' && $paging->checkDisplay($i)) + { + $row['customername'] = getCorrectFullUserDetails($row); + $row = htmlentities_array($row); + eval("\$domains.=\"" . getTemplate("domains/domains_domain") . "\";"); + $count++; + } + + $i++; + } + + // Display the list + + eval("echo \"" . getTemplate("domains/domains") . "\";"); + } + elseif($action == 'delete' + && $id != 0) + { + + $result = $db->query_first("SELECT `d`.`id`, `d`.`domain`, `d`.`customerid`, `d`.`documentroot`, `d`.`isemaildomain`, `d`.`zonefile` FROM `" . TABLE_PANEL_DOMAINS . "` `d`, `" . TABLE_PANEL_CUSTOMERS . "` `c` WHERE `d`.`id`='" . (int)$id . "' AND `d`.`id` <> `c`.`standardsubdomain`" . ($userinfo['customers_see_all'] ? '' : " AND `d`.`adminid` = '" . (int)$userinfo['adminid'] . "' ")); + $alias_check = $db->query_first('SELECT COUNT(`id`) AS `count` FROM `' . TABLE_PANEL_DOMAINS . '` WHERE `aliasdomain`=\'' . (int)$id . '\''); + + if($result['domain'] != '' + && $alias_check['count'] == 0) + { + if(isset($_POST['send']) + && $_POST['send'] == 'send') + { + $query = 'SELECT `id` FROM `' . TABLE_PANEL_DOMAINS . '` WHERE (`id`="' . (int)$id . '" OR `parentdomainid`="' . (int)$id . '") AND `isemaildomain`="1"'; + $subResult = $db->query($query); + $idString = array(); + + while($subRow = $db->fetch_array($subResult)) + { + $idString[] = '`domainid` = "' . (int)$subRow['id'] . '"'; + } + + $idString = implode(' OR ', $idString); + + if($idString != '') + { + $query = 'DELETE FROM `' . TABLE_MAIL_USERS . '` WHERE ' . $idString; + $db->query($query); + $query = 'DELETE FROM `' . TABLE_MAIL_VIRTUAL . '` WHERE ' . $idString; + $db->query($query); + $log->logAction(ADM_ACTION, LOG_NOTICE, "deleted domain/s from mail-tables"); + } + + $db->query("DELETE FROM `" . TABLE_PANEL_DOMAINS . "` WHERE `id`='" . (int)$id . "' OR `parentdomainid`='" . (int)$result['id'] . "'"); + $deleted_domains = (int)$db->affected_rows(); + $db->query("UPDATE `" . TABLE_PANEL_CUSTOMERS . "` SET `subdomains_used` = `subdomains_used` - " . (int)($deleted_domains - 1) . " WHERE `customerid` = '" . (int)$result['customerid'] . "'"); + $db->query("UPDATE `" . TABLE_PANEL_ADMINS . "` SET `domains_used` = `domains_used` - 1 WHERE `adminid` = '" . (int)$userinfo['adminid'] . "'"); + $db->query('UPDATE `' . TABLE_PANEL_CUSTOMERS . '` SET `standardsubdomain`=\'0\' WHERE `standardsubdomain`=\'' . (int)$result['id'] . '\' AND `customerid`=\'' . (int)$result['customerid'] . '\''); + $log->logAction(ADM_ACTION, LOG_INFO, "deleted domain/subdomains (#" . $result['id'] . ")"); + updateCounters(); + inserttask('1'); + inserttask('4'); + redirectTo($filename, Array('page' => $page, 's' => $s)); + } + else + { + ask_yesno('admin_domain_reallydelete', $filename, array('id' => $id, 'page' => $page, 'action' => $action), $idna_convert->decode($result['domain'])); + } + } + } + elseif($action == 'add') + { + if($userinfo['domains_used'] < $userinfo['domains'] + || $userinfo['domains'] == '-1') + { + if(isset($_POST['send']) + && $_POST['send'] == 'send') + { + if($_POST['domain'] == $settings['system']['hostname']) + { + standard_error('admin_domain_emailsystemhostname'); + exit; + } + + $domain = $idna_convert->encode(preg_replace(Array('/\:(\d)+$/', '/^https?\:\/\//'), '', validate($_POST['domain'], 'domain'))); + $subcanemaildomain = intval($_POST['subcanemaildomain']); + $isemaildomain = intval($_POST['isemaildomain']); + $email_only = intval($_POST['email_only']); + $wwwserveralias = intval($_POST['wwwserveralias']); + $speciallogfile = intval($_POST['speciallogfile']); + $aliasdomain = intval($_POST['alias']); + $customerid = intval($_POST['customerid']); + $customer = $db->query_first("SELECT * FROM `" . TABLE_PANEL_CUSTOMERS . "` WHERE `customerid`='" . (int)$customerid . "' " . ($userinfo['customers_see_all'] ? '' : " AND `adminid` = '" . (int)$userinfo['adminid'] . "' ") . " "); + + if(empty($customer) + || $customer['customerid'] != $customerid) + { + standard_error('customerdoesntexist'); + } + + if($userinfo['customers_see_all'] == '1') + { + $adminid = intval($_POST['adminid']); + $admin = $db->query_first("SELECT * FROM `" . TABLE_PANEL_ADMINS . "` WHERE `adminid`='" . (int)$adminid . "' AND ( `domains_used` < `domains` OR `domains` = '-1' )"); + + if(empty($admin) + || $admin['adminid'] != $adminid) + { + standard_error('admindoesntexist'); + } + } + else + { + $adminid = $userinfo['adminid']; + $admin = $userinfo; + } + + $documentroot = $customer['documentroot']; + $registration_date = validate($_POST['registration_date'], 'registration_date', '/^(19|20)\d\d[-](0[1-9]|1[012])[-](0[1-9]|[12][0-9]|3[01])$/', '', array('0000-00-00', '0', '')); + + if($userinfo['change_serversettings'] == '1') + { + $isbinddomain = intval($_POST['isbinddomain']); + $caneditdomain = intval($_POST['caneditdomain']); + $zonefile = validate($_POST['zonefile'], 'zonefile'); + + if(isset($_POST['dkim'])) + { + $dkim = intval($_POST['dkim']); + } + else + { + $dkim = '1'; + } + + $specialsettings = validate(str_replace("\r\n", "\n", $_POST['specialsettings']), 'specialsettings', '/^[^\0]*$/'); + validate($_POST['documentroot'], 'documentroot'); + + if(isset($_POST['documentroot']) + && $_POST['documentroot'] != '') + { + if(substr($_POST['documentroot'], 0, 1) != '/' + && !preg_match('/^https?\:\/\//', $_POST['documentroot'])) + { + $documentroot.= '/' . $_POST['documentroot']; + } + else + { + $documentroot = $_POST['documentroot']; + } + } + } + else + { + $isbinddomain = '1'; + $caneditdomain = '1'; + $zonefile = ''; + $dkim = '1'; + $specialsettings = ''; + } + + if($userinfo['caneditphpsettings'] == '1' + || $userinfo['change_serversettings'] == '1') + { + $openbasedir = intval($_POST['openbasedir']); + $safemode = intval($_POST['safemode']); + + if((int)$settings['system']['mod_fcgid'] == 1) + { + $phpsettingid = (int)$_POST['phpsettingid']; + $phpsettingid_check = $db->query_first("SELECT * FROM `" . TABLE_PANEL_PHPCONFIGS . "` WHERE `id` = " . (int)$phpsettingid); + + if(!isset($phpsettingid_check['id']) + || $phpsettingid_check['id'] == '0' + || $phpsettingid_check['id'] != $phpsettingid) + { + standard_error('phpsettingidwrong'); + } + + $mod_fcgid_starter = validate($_POST['mod_fcgid_starter'], 'mod_fcgid_starter', '/^[0-9]*$/', '', array('-1', '')); + $mod_fcgid_maxrequests = validate($_POST['mod_fcgid_maxrequests'], 'mod_fcgid_maxrequests', '/^[0-9]*$/', '', array('-1', '')); + } + else + { + $phpsettingid = '1'; + $mod_fcgid_starter = '-1'; + $mod_fcgid_maxrequests = '-1'; + } + } + else + { + $openbasedir = '1'; + $safemode = '1'; + $phpsettingid = '1'; + $mod_fcgid_starter = '-1'; + $mod_fcgid_maxrequests = '-1'; + } + + if($userinfo['ip'] != "-1") + { + $admin_ip = $db->query_first("SELECT `id`, `ip`, `port` FROM `" . TABLE_PANEL_IPSANDPORTS . "` WHERE `id`='" . (int)$userinfo['ip'] . "' ORDER BY `ip`, `port` ASC"); + $additional_ip_condition = ' AND `ip` = \'' . $admin_ip['ip'] . '\' '; + } + else + { + $additional_ip_condition = ''; + } + + $ipandport = intval($_POST['ipandport']); + $ipandport_check = $db->query_first("SELECT `id`, `ip`, `port` FROM `" . TABLE_PANEL_IPSANDPORTS . "` WHERE `id` = '" . $db->escape($ipandport) . "' AND `ssl` = '0'" . $additional_ip_condition); + + if(!isset($ipandport_check['id']) + || $ipandport_check['id'] == '0' + || $ipandport_check['id'] != $ipandport) + { + standard_error('ipportdoesntexist'); + } + + if($settings['system']['use_ssl'] == "1" + && isset($_POST['ssl']) + && isset($_POST['ssl_redirect']) + && isset($_POST['ssl_ipandport']) + && $_POST['ssl'] != '0') + { + $ssl = (int)$_POST['ssl']; + $ssl_redirect = (int)$_POST['ssl_redirect']; + $ssl_ipandport = (int)$_POST['ssl_ipandport']; + $ssl_ipandport_check = $db->query_first("SELECT `id`, `ip`, `port` FROM `" . TABLE_PANEL_IPSANDPORTS . "` WHERE `id` = '" . $db->escape($ssl_ipandport) . "' AND `ssl` = '1'" . $additional_ip_condition); + + if(!isset($ssl_ipandport_check['id']) + || $ssl_ipandport_check['id'] == '0' + || $ssl_ipandport_check['id'] != $ssl_ipandport) + { + standard_error('ipportdoesntexist'); + } + } + else + { + $ssl = 0; + $ssl_redirect = 0; + $ssl_ipandport = 0; + } + + if(!preg_match('/^https?\:\/\//', $documentroot)) + { + $documentroot = makeCorrectDir($documentroot); + } + + $domain_check = $db->query_first("SELECT `id`, `domain` FROM `" . TABLE_PANEL_DOMAINS . "` WHERE `domain` = '" . $db->escape(strtolower($domain)) . "'"); + $aliasdomain_check = array( + 'id' => 0 + ); + + if($aliasdomain != 0) + { + $aliasdomain_check = $db->query_first('SELECT `id` FROM `' . TABLE_PANEL_DOMAINS . '` `d`,`' . TABLE_PANEL_CUSTOMERS . '` `c` WHERE `d`.`customerid`=\'' . (int)$customerid . '\' AND `d`.`aliasdomain` IS NULL AND `d`.`id`<>`c`.`standardsubdomain` AND `c`.`customerid`=\'' . (int)$customerid . '\' AND `d`.`id`=\'' . (int)$aliasdomain . '\''); + } + + if($openbasedir != '1') + { + $openbasedir = '0'; + } + + if($safemode != '1') + { + $safemode = '0'; + } + + if($speciallogfile != '1') + { + $speciallogfile = '0'; + } + + if($isbinddomain != '1') + { + $isbinddomain = '0'; + } + + if($isemaildomain != '1') + { + $isemaildomain = '0'; + } + + if($email_only == '1') + { + $isemaildomain = '1'; + } + else + { + $email_only = '0'; + } + + if($subcanemaildomain != '1' + && $subcanemaildomain != '2' + && $subcanemaildomain != '3') + { + $subcanemaildomain = '0'; + } + + if($dkim != '1') + { + $dkim = '0'; + } + + if($wwwserveralias != '1') + { + $wwwserveralias = '0'; + } + + if($caneditdomain != '1') + { + $caneditdomain = '0'; + } + + if($domain == '') + { + standard_error(array('stringisempty', 'mydomain')); + } + elseif(!validateDomain($domain)) + { + standard_error(array('stringiswrong', 'mydomain')); + } + elseif($documentroot == '') + { + standard_error(array('stringisempty', 'mydocumentroot')); + } + elseif($customerid == 0) + { + standard_error('adduserfirst'); + } + elseif(strtolower($domain_check['domain']) == strtolower($domain)) + { + standard_error('domainalreadyexists', $idna_convert->decode($domain)); + } + elseif($aliasdomain_check['id'] != $aliasdomain) + { + standard_error('domainisaliasorothercustomer'); + } + else + { + $params = array( + 'page' => $page, + 'action' => $action, + 'domain' => $domain, + 'customerid' => $customerid, + 'adminid' => $adminid, + 'documentroot' => $documentroot, + 'alias' => $aliasdomain, + 'isbinddomain' => $isbinddomain, + 'isemaildomain' => $isemaildomain, + 'email_only' => $email_only, + 'subcanemaildomain' => $subcanemaildomain, + 'caneditdomain' => $caneditdomain, + 'zonefile' => $zonefile, + 'dkim' => $dkim, + 'speciallogfile' => $speciallogfile, + 'wwwserveralias' => $wwwserveralias, + 'ipandport' => $ipandport, + 'ssl' => $ssl, + 'ssl_redirect' => $ssl_redirect, + 'ssl_ipandport' => $ssl_ipandport, + 'openbasedir' => $openbasedir, + 'safemode' => $safemode, + 'phpsettingid' => $phpsettingid, + 'mod_fcgid_starter' => $mod_fcgid_starter, + 'mod_fcgid_maxrequests' => $mod_fcgid_maxrequests, + 'specialsettings' => $specialsettings, + 'registration_date' => $registration_date + ); + + $security_questions = array( + 'reallydisablesecuritysetting' => (($openbasedir == '0' || $safemode == '0') && $userinfo['change_serversettings'] == '1'), + 'reallydocrootoutofcustomerroot' => (substr($documentroot, 0, strlen($customer['documentroot'])) != $customer['documentroot'] && !preg_match('/^https?\:\/\//', $documentroot)) + ); + foreach($security_questions as $question_name => $question_launch) + { + if($question_launch !== false) + { + $params[$question_name] = $question_name; + + if(!isset($_POST[$question_name]) + || $_POST[$question_name] != $question_name) + { + ask_yesno('admin_domain_' . $question_name, $filename, $params); + exit; + } + } + } + + $db->query("INSERT INTO `" . TABLE_PANEL_DOMAINS . "` (`domain`, `customerid`, `adminid`, `documentroot`, `ipandport`,`aliasdomain`, `zonefile`, `dkim`, `wwwserveralias`, `isbinddomain`, `isemaildomain`, `email_only`, `subcanemaildomain`, `caneditdomain`, `openbasedir`, `safemode`,`speciallogfile`, `specialsettings`, `ssl`, `ssl_redirect`, `ssl_ipandport`, `add_date`, `registration_date`, `phpsettingid`, `mod_fcgid_starter`, `mod_fcgid_maxrequests`) VALUES ('" . $db->escape($domain) . "', '" . (int)$customerid . "', '" . (int)$adminid . "', '" . $db->escape($documentroot) . "', '" . $db->escape($ipandport) . "', " . (($aliasdomain != 0) ? '\'' . $db->escape($aliasdomain) . '\'' : 'NULL') . ", '" . $db->escape($zonefile) . "', '" . $db->escape($dkim) . "', '" . $db->escape($wwwserveralias) . "', '" . $db->escape($isbinddomain) . "', '" . $db->escape($isemaildomain) . "', '" . $db->escape($email_only) . "', '" . $db->escape($subcanemaildomain) . "', '" . $db->escape($caneditdomain) . "', '" . $db->escape($openbasedir) . "', '" . $db->escape($safemode) . "', '" . $db->escape($speciallogfile) . "', '" . $db->escape($specialsettings) . "', '" . $ssl . "', '" . $ssl_redirect . "' , '" . $ssl_ipandport . "', '" . $db->escape(time()) . "', '" . $db->escape($registration_date) . "', '" . (int)$phpsettingid . "', '" . (int)$mod_fcgid_starter . "', '" . (int)$mod_fcgid_maxrequests . "')"); + $domainid = $db->insert_id(); + $db->query("UPDATE `" . TABLE_PANEL_ADMINS . "` SET `domains_used` = `domains_used` + 1 WHERE `adminid` = '" . (int)$adminid . "'"); + $log->logAction(ADM_ACTION, LOG_INFO, "added domain '" . $domain . "'"); + inserttask('1'); + inserttask('4'); + redirectTo($filename, Array('page' => $page, 's' => $s)); + } + } + else + { + $customers = makeoption($lng['panel']['please_choose'], 0, 0, true); + $result_customers = $db->query("SELECT `customerid`, `loginname`, `name`, `firstname`, `company` FROM `" . TABLE_PANEL_CUSTOMERS . "` " . ($userinfo['customers_see_all'] ? '' : " WHERE `adminid` = '" . (int)$userinfo['adminid'] . "' ") . " ORDER BY `name` ASC"); + + while($row_customer = $db->fetch_array($result_customers)) + { + $customers.= makeoption(getCorrectFullUserDetails($row_customer) . ' (' . $row_customer['loginname'] . ')', $row_customer['customerid']); + } + + $admins = ''; + + if($userinfo['customers_see_all'] == '1') + { + $result_admins = $db->query("SELECT `adminid`, `loginname`, `name`, `firstname`, `company` FROM `" . TABLE_PANEL_ADMINS . "` WHERE `domains_used` < `domains` OR `domains` = '-1' ORDER BY `name` ASC"); + + while($row_admin = $db->fetch_array($result_admins)) + { + $admins.= makeoption(getCorrectFullUserDetails($row_admin) . ' (' . $row_admin['loginname'] . ')', $row_admin['adminid'], $userinfo['adminid']); + } + } + + if($userinfo['ip'] == "-1") + { + $result_ipsandports = $db->query("SELECT `id`, `ip`, `port` FROM `" . TABLE_PANEL_IPSANDPORTS . "` WHERE `ssl`='0' ORDER BY `ip`, `port` ASC"); + $result_ssl_ipsandports = $db->query("SELECT `id`, `ip`, `port` FROM `" . TABLE_PANEL_IPSANDPORTS . "` WHERE `ssl`='1' ORDER BY `ip`, `port` ASC"); + } + else + { + $admin_ip = $db->query_first("SELECT `id`, `ip`, `port` FROM `" . TABLE_PANEL_IPSANDPORTS . "` WHERE `id`='" . (int)$userinfo['ip'] . "' ORDER BY `ip`, `port` ASC"); + $result_ipsandports = $db->query("SELECT `id`, `ip`, `port` FROM `" . TABLE_PANEL_IPSANDPORTS . "` WHERE `ssl`='0' AND `ip`='" . $admin_ip['ip'] . "' ORDER BY `ip`, `port` ASC"); + $result_ssl_ipsandports = $db->query("SELECT `id`, `ip`, `port` FROM `" . TABLE_PANEL_IPSANDPORTS . "` WHERE `ssl`='1' AND `ip`='" . $admin_ip['ip'] . "' ORDER BY `ip`, `port` ASC"); + } + + $ipsandports = ''; + + while($row_ipandport = $db->fetch_array($result_ipsandports)) + { + if(filter_var($row_ipandport['ip'], FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) + { + $row_ipandport['ip'] = '[' . $row_ipandport['ip'] . ']'; + } + + $ipsandports.= makeoption($row_ipandport['ip'] . ':' . $row_ipandport['port'], $row_ipandport['id']); + } + + $ssl_ipsandports = ''; + + while($row_ssl_ipandport = $db->fetch_array($result_ssl_ipsandports)) + { + if(filter_var($row_ssl_ipandport['ip'], FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) + { + $row_ssl_ipandport['ip'] = '[' . $row_ssl_ipandport['ip'] . ']'; + } + + $ssl_ipsandports.= makeoption($row_ssl_ipandport['ip'] . ':' . $row_ssl_ipandport['port'], $row_ssl_ipandport['id'], $settings['system']['defaultip']); + } + + $ssl = makeyesno('ssl', '1', '0', $result['ssl']); + $ssl_redirect = makeyesno('ssl_redirect', '1', '0', $result['ssl_redirect']); + $standardsubdomains = array(); + $result_standardsubdomains = $db->query('SELECT `id` FROM `' . TABLE_PANEL_DOMAINS . '` `d`, `' . TABLE_PANEL_CUSTOMERS . '` `c` WHERE `d`.`id`=`c`.`standardsubdomain`'); + + while($row_standardsubdomain = $db->fetch_array($result_standardsubdomains)) + { + $standardsubdomains[] = $db->escape($row_standardsubdomain['id']); + } + + if(count($standardsubdomains) > 0) + { + $standardsubdomains = 'AND `d`.`id` NOT IN (' . join(',', $standardsubdomains) . ') '; + } + else + { + $standardsubdomains = ''; + } + + $domains = makeoption($lng['domains']['noaliasdomain'], 0, NULL, true); + $result_domains = $db->query("SELECT `d`.`id`, `d`.`domain`, `c`.`loginname` FROM `" . TABLE_PANEL_DOMAINS . "` `d`, `" . TABLE_PANEL_CUSTOMERS . "` `c` WHERE `d`.`aliasdomain` IS NULL AND `d`.`parentdomainid`=0 " . $standardsubdomains . ($userinfo['customers_see_all'] ? '' : " AND `d`.`adminid` = '" . (int)$userinfo['adminid'] . "'") . " AND `d`.`customerid`=`c`.`customerid` ORDER BY `loginname`, `domain` ASC"); + + while($row_domain = $db->fetch_array($result_domains)) + { + $domains.= makeoption($idna_convert->decode($row_domain['domain']) . ' (' . $row_domain['loginname'] . ')', $row_domain['id']); + } + + $phpconfigs = ''; + $configs = $db->query("SELECT * FROM `" . TABLE_PANEL_PHPCONFIGS . "`"); + + while($row = $db->fetch_array($configs)) + { + $phpconfigs.= makeoption($row['description'], $row['id'], '1', true, true); + } + + $isbinddomain = makeyesno('isbinddomain', '1', '0', '1'); + $isemaildomain = makeyesno('isemaildomain', '1', '0', '1'); + $email_only = makeyesno('email_only', '1', '0', '0'); + $subcanemaildomain = makeoption($lng['admin']['subcanemaildomain']['never'], '0', '0', true, true) . makeoption($lng['admin']['subcanemaildomain']['choosableno'], '1', '0', true, true) . makeoption($lng['admin']['subcanemaildomain']['choosableyes'], '2', '0', true, true) . makeoption($lng['admin']['subcanemaildomain']['always'], '3', '0', true, true); + $dkim = makeyesno('dkim', '1', '0', '1'); + $wwwserveralias = makeyesno('wwwserveralias', '1', '0', '1'); + $caneditdomain = makeyesno('caneditdomain', '1', '0', '1'); + $openbasedir = makeyesno('openbasedir', '1', '0', '1'); + $safemode = makeyesno('safemode', '1', '0', '1'); + $speciallogfile = makeyesno('speciallogfile', '1', '0', '0'); + $add_date = date('Y-m-d'); + + eval("echo \"" . getTemplate("domains/domains_add") . "\";"); + } + } + } + elseif($action == 'edit' + && $id != 0) + { + $result = $db->query_first("SELECT `d`.`id`, `d`.`domain`, `d`.`customerid`, `d`.`adminid`, `d`.`email_only`, `d`.`documentroot`, `d`.`ssl`, `d`.`ssl_redirect`, `d`.`ssl_ipandport`,`d`.`ipandport`, `d`.`aliasdomain`, `d`.`isbinddomain`, `d`.`isemaildomain`, `d`.`subcanemaildomain`, `d`.`dkim`, `d`.`caneditdomain`, `d`.`zonefile`, `d`.`wwwserveralias`, `d`.`openbasedir`, `d`.`safemode`, `d`.`speciallogfile`, `d`.`specialsettings`, `d`.`add_date`, `d`.`registration_date`, `d`.`interval_fee`, `d`.`interval_length`, `d`.`interval_type`, `d`.`interval_payment`, `d`.`setup_fee`, `d`.`taxclass`, `d`.`service_active`, `d`.`servicestart_date`, `d`.`serviceend_date`, `d`.`lastinvoiced_date`, `c`.`loginname`, `c`.`name`, `c`.`firstname`, `c`.`company`, `d`.`phpsettingid`, `d`.`mod_fcgid_starter`, `d`.`mod_fcgid_maxrequests` " . "FROM `" . TABLE_PANEL_DOMAINS . "` `d` " . "LEFT JOIN `" . TABLE_PANEL_CUSTOMERS . "` `c` USING(`customerid`) " . "WHERE `d`.`parentdomainid`='0' AND `d`.`id`='" . (int)$id . "'" . ($userinfo['customers_see_all'] ? '' : " AND `d`.`adminid` = '" . (int)$userinfo['adminid'] . "' ")); + + if($result['domain'] != '') + { + $subdomains = $db->query_first('SELECT COUNT(`id`) AS count FROM `' . TABLE_PANEL_DOMAINS . '` WHERE `parentdomainid`=\'' . (int)$result['id'] . '\''); + $subdomains = $subdomains['count']; + $alias_check = $db->query_first('SELECT COUNT(`id`) AS count FROM `' . TABLE_PANEL_DOMAINS . '` WHERE `aliasdomain`=\'' . (int)$result['id'] . '\''); + $alias_check = $alias_check['count']; + $domain_emails_result = $db->query('SELECT `email`, `email_full`, `destination`, `popaccountid` AS `number_email_forwarders` FROM `' . TABLE_MAIL_VIRTUAL . '` WHERE `customerid` = "' . (int)$result['customerid'] . '" AND `domainid` = "' . (int)$result['id'] . '" '); + $emails = $db->num_rows($domain_emails_result); + $email_forwarders = 0; + $email_accounts = 0; + + while($domain_emails_row = $db->fetch_array($domain_emails_result)) + { + if($domain_emails_row['destination'] != '') + { + $domain_emails_row['destination'] = explode(' ', makeCorrectDestination($domain_emails_row['destination'])); + $email_forwarders+= count($domain_emails_row['destination']); + + if(in_array($domain_emails_row['email_full'], $domain_emails_row['destination'])) + { + $email_forwarders-= 1; + $email_accounts++; + } + } + } + + if(isset($_POST['send']) + && $_POST['send'] == 'send') + { + $customer = $customer_old = $db->query_first("SELECT * FROM " . TABLE_PANEL_CUSTOMERS . " WHERE `customerid`='" . (int)$result['customerid'] . "'"); + + if(isset($_POST['customerid']) + && ($customerid = intval($_POST['customerid'])) != $result['customerid'] + && $settings['panel']['allow_domain_change_customer'] == '1') + { + $customer = $db->query_first("SELECT * FROM `" . TABLE_PANEL_CUSTOMERS . "` WHERE `customerid`='" . (int)$customerid . "' AND (`subdomains_used` + " . (int)$subdomains . " <= `subdomains` OR `subdomains` = '-1' ) AND (`emails_used` + " . (int)$emails . " <= `emails` OR `emails` = '-1' ) AND (`email_forwarders_used` + " . (int)$email_forwarders . " <= `email_forwarders` OR `email_forwarders` = '-1' ) AND (`email_accounts_used` + " . (int)$email_accounts . " <= `email_accounts` OR `email_accounts` = '-1' ) " . ($userinfo['customers_see_all'] ? '' : " AND `adminid` = '" . (int)$userinfo['adminid'] . "' ") . " "); + + if(empty($customer) + || $customer['customerid'] != $customerid) + { + standard_error('customerdoesntexist'); + } + } + else + { + $customerid = $result['customerid']; + } + + $admin = $admin_old = $db->query_first("SELECT * FROM `" . TABLE_PANEL_ADMINS . "` WHERE `adminid`='" . (int)$result['adminid'] . "' "); + + if($userinfo['customers_see_all'] == '1') + { + if(isset($_POST['adminid']) + && ($adminid = intval($_POST['adminid'])) != $result['adminid'] + && $settings['panel']['allow_domain_change_admin'] == '1') + { + $admin = $db->query_first("SELECT * FROM `" . TABLE_PANEL_ADMINS . "` WHERE `adminid`='" . (int)$adminid . "' AND ( `domains_used` < `domains` OR `domains` = '-1' )"); + + if(empty($admin) + || $admin['adminid'] != $adminid) + { + standard_error('admindoesntexist'); + } + } + else + { + $adminid = $result['adminid']; + } + } + else + { + $adminid = $result['adminid']; + } + + $aliasdomain = intval($_POST['alias']); + $isemaildomain = intval($_POST['isemaildomain']); + $email_only = intval($_POST['email_only']); + $subcanemaildomain = intval($_POST['subcanemaildomain']); + $caneditdomain = intval($_POST['caneditdomain']); + $wwwserveralias = intval($_POST['wwwserveralias']); + $registration_date = validate($_POST['registration_date'], 'registration_date', '/^(19|20)\d\d[-](0[1-9]|1[012])[-](0[1-9]|[12][0-9]|3[01])$/', '', array('0000-00-00', '0', '')); + + if($userinfo['change_serversettings'] == '1') + { + $isbinddomain = intval($_POST['isbinddomain']); + $zonefile = validate($_POST['zonefile'], 'zonefile'); + + if($settings['dkim']['use_dkim'] == '1') + { + $dkim = intval($_POST['dkim']); + } + else + { + $dkim = $result['dkim']; + } + + $specialsettings = validate(str_replace("\r\n", "\n", $_POST['specialsettings']), 'specialsettings', '/^[^\0]*$/'); + $documentroot = validate($_POST['documentroot'], 'documentroot'); + + if($documentroot == '') + { + $documentroot = $customer['documentroot']; + } + } + else + { + $isbinddomain = $result['isbinddomain']; + $zonefile = $result['zonefile']; + $dkim = $result['dkim']; + $specialsettings = $result['specialsettings']; + $documentroot = $result['documentroot']; + } + + if($userinfo['caneditphpsettings'] == '1' + || $userinfo['change_serversettings'] == '1') + { + $openbasedir = intval($_POST['openbasedir']); + $safemode = intval($_POST['safemode']); + + if((int)$settings['system']['mod_fcgid'] == 1) + { + $phpsettingid = (int)$_POST['phpsettingid']; + $phpsettingid_check = $db->query_first("SELECT * FROM `" . TABLE_PANEL_PHPCONFIGS . "` WHERE `id` = " . (int)$phpsettingid); + + if(!isset($phpsettingid_check['id']) + || $phpsettingid_check['id'] == '0' + || $phpsettingid_check['id'] != $phpsettingid) + { + standard_error('phpsettingidwrong'); + } + + $mod_fcgid_starter = validate($_POST['mod_fcgid_starter'], 'mod_fcgid_starter', '/^[0-9]*$/', '', array('-1', '')); + $mod_fcgid_maxrequests = validate($_POST['mod_fcgid_maxrequests'], 'mod_fcgid_maxrequests', '/^[0-9]*$/', '', array('-1', '')); + } + else + { + $phpsettingid = $result['phpsettingid']; + $mod_fcgid_starter = $result['mod_fcgid_starter']; + $mod_fcgid_maxrequests = $result['mod_fcgid_maxrequests']; + } + } + else + { + $openbasedir = $result['openbasedir']; + $safemode = $result['safemode']; + $phpsettingid = $result['phpsettingid']; + $mod_fcgid_starter = $result['mod_fcgid_starter']; + $mod_fcgid_maxrequests = $result['mod_fcgid_maxrequests']; + } + + if($userinfo['ip'] != "-1") + { + $admin_ip = $db->query_first("SELECT `id`, `ip`, `port` FROM `" . TABLE_PANEL_IPSANDPORTS . "` WHERE `id`='" . (int)$userinfo['ip'] . "' ORDER BY `ip`, `port` ASC"); + $additional_ip_condition = ' AND `ip` = \'' . $admin_ip['ip'] . '\' '; + } + else + { + $additional_ip_condition = ''; + } + + $ipandport = intval($_POST['ipandport']); + $ipandport_check = $db->query_first("SELECT `id`, `ip`, `port` FROM `" . TABLE_PANEL_IPSANDPORTS . "` WHERE `id` = '" . $db->escape($ipandport) . "' AND `ssl` = '0'" . $additional_ip_condition); + + if(!isset($ipandport_check['id']) + || $ipandport_check['id'] == '0' + || $ipandport_check['id'] != $ipandport) + { + standard_error('ipportdoesntexist'); + } + + if($settings['system']['use_ssl'] == "1" + && isset($_POST['ssl']) + && isset($_POST['ssl_redirect']) + && isset($_POST['ssl_ipandport']) + && $_POST['ssl'] != '0') + { + $ssl = (int)$_POST['ssl']; + $ssl_redirect = (int)$_POST['ssl_redirect']; + $ssl_ipandport = (int)$_POST['ssl_ipandport']; + $ssl_ipandport_check = $db->query_first("SELECT `id`, `ip`, `port` FROM `" . TABLE_PANEL_IPSANDPORTS . "` WHERE `id` = '" . $db->escape($ssl_ipandport) . "' AND `ssl` = '1'" . $additional_ip_condition); + + if(!isset($ssl_ipandport_check['id']) + || $ssl_ipandport_check['id'] == '0' + || $ssl_ipandport_check['id'] != $ssl_ipandport) + { + standard_error('ipportdoesntexist'); + } + } + else + { + $ssl = 0; + $ssl_redirect = 0; + $ssl_ipandport = 0; + } + + if(!preg_match('/^https?\:\/\//', $documentroot)) + { + $documentroot = makeCorrectDir($documentroot); + } + + if($openbasedir != '1') + { + $openbasedir = '0'; + } + + if($safemode != '1') + { + $safemode = '0'; + } + + if($isbinddomain != '1') + { + $isbinddomain = '0'; + } + + if($isemaildomain != '1') + { + $isemaildomain = '0'; + } + + if($email_only == '1') + { + $isemaildomain = '1'; + } + else + { + $email_only = '0'; + } + + if($subcanemaildomain != '1' + && $subcanemaildomain != '2' + && $subcanemaildomain != '3') + { + $subcanemaildomain = '0'; + } + + if($dkim != '1') + { + $dkim = '0'; + } + + if($caneditdomain != '1') + { + $caneditdomain = '0'; + } + + $aliasdomain_check = array( + 'id' => 0 + ); + + if($aliasdomain != 0) + { + $aliasdomain_check = $db->query_first('SELECT `id` FROM `' . TABLE_PANEL_DOMAINS . '` `d`,`' . TABLE_PANEL_CUSTOMERS . '` `c` WHERE `d`.`customerid`=\'' . (int)$result['customerid'] . '\' AND `d`.`aliasdomain` IS NULL AND `d`.`id`<>`c`.`standardsubdomain` AND `c`.`customerid`=\'' . (int)$result['customerid'] . '\' AND `d`.`id`=\'' . (int)$aliasdomain . '\''); + } + + if($aliasdomain_check['id'] != $aliasdomain) + { + standard_error('domainisaliasorothercustomer'); + } + + $params = array( + 'id' => $id, + 'page' => $page, + 'action' => $action, + 'customerid' => $customerid, + 'adminid' => $adminid, + 'documentroot' => $documentroot, + 'alias' => $aliasdomain, + 'isbinddomain' => $isbinddomain, + 'isemaildomain' => $isemaildomain, + 'email_only' => $email_only, + 'subcanemaildomain' => $subcanemaildomain, + 'caneditdomain' => $caneditdomain, + 'zonefile' => $zonefile, + 'dkim' => $dkim, + 'wwwserveralias' => $wwwserveralias, + 'ipandport' => $ipandport, + 'ssl' => $ssl, + 'ssl_redirect' => $ssl_redirect, + 'ssl_ipandport' => $ssl_ipandport, + 'openbasedir' => $openbasedir, + 'safemode' => $safemode, + 'phpsettingid' => $phpsettingid, + 'mod_fcgid_starter' => $mod_fcgid_starter, + 'mod_fcgid_maxrequests' => $mod_fcgid_maxrequests, + 'specialsettings' => $specialsettings, + 'registration_date' => $registration_date + ); + + $security_questions = array( + 'reallydisablesecuritysetting' => (($openbasedir == '0' || $safemode == '0') && $userinfo['change_serversettings'] == '1'), + 'reallydocrootoutofcustomerroot' => (substr($documentroot, 0, strlen($customer['documentroot'])) != $customer['documentroot'] && !preg_match('/^https?\:\/\//', $documentroot)) + ); + foreach($security_questions as $question_name => $question_launch) + { + if($question_launch !== false) + { + $params[$question_name] = $question_name; + + if(!isset($_POST[$question_name]) + || $_POST[$question_name] != $question_name) + { + ask_yesno('admin_domain_' . $question_name, $filename, $params); + exit; + } + } + } + + if($documentroot != $result['documentroot'] + || $ipandport != $result['ipandport'] + || $ssl != $result['ssl'] + || $ssl_redirect != $result['ssl_redirect'] + || $ssl_ipandport != $result['ssl_ipandport'] + || $wwwserveralias != $result['wwwserveralias'] + || $openbasedir != $result['openbasedir'] + || $safemode != $result['safemode'] + || $phpsettingid != $result['phpsettingid'] + || $mod_fcgid_starter != $result['mod_fcgid_starter'] + || $mod_fcgid_maxrequests != $result['mod_fcgid_maxrequests'] + || $specialsettings != $result['specialsettings'] + || $aliasdomain != $result['aliasdomain']) + { + inserttask('1'); + } + + if($isbinddomain != $result['isbinddomain'] + || $zonefile != $result['zonefile'] + || $dkim != $result['dkim'] + || $ipandport != $result['ipandport']) + { + inserttask('4'); + } + + if($isemaildomain == '0' + && $result['isemaildomain'] == '1') + { + $db->query("DELETE FROM `" . TABLE_MAIL_USERS . "` WHERE `domainid`='" . (int)$id . "' "); + $db->query("DELETE FROM `" . TABLE_MAIL_VIRTUAL . "` WHERE `domainid`='" . (int)$id . "' "); + $log->logAction(ADM_ACTION, LOG_NOTICE, "deleted domain #" . $id . " from mail-tables"); + } + + $updatechildren = ''; + + if($subcanemaildomain == '0' + && $result['subcanemaildomain'] != '0') + { + $updatechildren = ', `isemaildomain`=\'0\' '; + } + elseif($subcanemaildomain == '3' + && $result['subcanemaildomain'] != '3') + { + $updatechildren = ', `isemaildomain`=\'1\' '; + } + + if($customerid != $result['customerid'] + && $settings['panel']['allow_domain_change_customer'] == '1') + { + $db->query("UPDATE `" . TABLE_MAIL_USERS . "` SET `customerid` = '" . (int)$customerid . "' WHERE `domainid` = '" . (int)$result['id'] . "' "); + $db->query("UPDATE `" . TABLE_MAIL_VIRTUAL . "` SET `customerid` = '" . (int)$customerid . "' WHERE `domainid` = '" . (int)$result['id'] . "' "); + $db->query("UPDATE `" . TABLE_PANEL_CUSTOMERS . "` SET `subdomains_used` = `subdomains_used` + '" . (int)$subdomains . "', `emails_used` = `emails_used` + '" . (int)$emails . "', `email_forwarders_used` = `email_forwarders_used` + '" . (int)$email_forwarders . "', `email_accounts_used` = `email_accounts_used` + '" . (int)$email_accounts . "' WHERE `customerid` = '" . (int)$customerid . "' "); + $db->query("UPDATE `" . TABLE_PANEL_CUSTOMERS . "` SET `subdomains_used` = `subdomains_used` - '" . (int)$subdomains . "', `emails_used` = `emails_used` - '" . (int)$emails . "', `email_forwarders_used` = `email_forwarders_used` - '" . (int)$email_forwarders . "', `email_accounts_used` = `email_accounts_used` - '" . (int)$email_accounts . "' WHERE `customerid` = '" . (int)$result['customerid'] . "' "); + } + + if($adminid != $result['adminid'] + && $settings['panel']['allow_domain_change_admin'] == '1') + { + $db->query("UPDATE `" . TABLE_PANEL_ADMINS . "` SET `domains_used` = `domains_used` + 1 WHERE `adminid` = '" . (int)$adminid . "' "); + $db->query("UPDATE `" . TABLE_PANEL_ADMINS . "` SET `domains_used` = `domains_used` - 1 WHERE `adminid` = '" . (int)$result['adminid'] . "' "); + } + + $result = $db->query("UPDATE `" . TABLE_PANEL_DOMAINS . "` SET `customerid` = '" . (int)$customerid . "', `adminid` = '" . (int)$adminid . "', `documentroot`='" . $db->escape($documentroot) . "', `ipandport`='" . $db->escape($ipandport) . "', `ssl`='" . (int)$ssl . "', `ssl_redirect`='" . (int)$ssl_redirect . "', `ssl_ipandport`='" . (int)$ssl_ipandport . "', `aliasdomain`=" . (($aliasdomain != 0 && $alias_check == 0) ? '\'' . $db->escape($aliasdomain) . '\'' : 'NULL') . ", `isbinddomain`='" . $db->escape($isbinddomain) . "', `isemaildomain`='" . $db->escape($isemaildomain) . "', `email_only`='" . $db->escape($email_only) . "', `subcanemaildomain`='" . $db->escape($subcanemaildomain) . "', `dkim`='" . $db->escape($dkim) . "', `caneditdomain`='" . $db->escape($caneditdomain) . "', `zonefile`='" . $db->escape($zonefile) . "', `wwwserveralias`='" . $db->escape($wwwserveralias) . "', `openbasedir`='" . $db->escape($openbasedir) . "', `safemode`='" . $db->escape($safemode) . "', `phpsettingid`='" . $db->escape($phpsettingid) . "', `mod_fcgid_starter`='" . $db->escape($mod_fcgid_starter) . "', `mod_fcgid_maxrequests`='" . $db->escape($mod_fcgid_maxrequests) . "', `specialsettings`='" . $db->escape($specialsettings) . "', `registration_date`='" . $db->escape($registration_date) . "', `interval_fee`='" . $db->escape($interval_fee) . "', `interval_length`='" . $db->escape($interval_length) . "', `interval_type`='" . $db->escape($interval_type) . "', `interval_payment`='" . $db->escape($interval_payment) . "', `setup_fee`='" . $db->escape($setup_fee) . "', `taxclass`='" . $db->escape($taxclass) . "', `service_active`='" . $db->escape($service_active) . "', `servicestart_date`='" . $db->escape($servicestart_date) . "', `serviceend_date`='" . $db->escape($serviceend_date) . "' WHERE `id`='" . (int)$id . "'"); + $result = $db->query("UPDATE `" . TABLE_PANEL_DOMAINS . "` SET `customerid` = '" . (int)$customerid . "', `adminid` = '" . (int)$adminid . "', `ipandport`='" . $db->escape($ipandport) . "', `openbasedir`='" . $db->escape($openbasedir) . "', `safemode`='" . $db->escape($safemode) . "', `phpsettingid`='" . $db->escape($phpsettingid) . "', `mod_fcgid_starter`='" . $db->escape($mod_fcgid_starter) . "', `mod_fcgid_maxrequests`='" . $db->escape($mod_fcgid_maxrequests) . "', `specialsettings`='" . $db->escape($specialsettings) . "'" . $updatechildren . " WHERE `parentdomainid`='" . (int)$id . "'"); + $log->logAction(ADM_ACTION, LOG_INFO, "edited domain #" . $id); + $redirect_props = Array( + 'page' => $page, + 's' => $s + ); + + redirectTo($filename, $redirect_props); + } + else + { + if($settings['panel']['allow_domain_change_customer'] == '1') + { + $customers = ''; + $result_customers = $db->query("SELECT `customerid`, `loginname`, `name`, `firstname`, `company` FROM `" . TABLE_PANEL_CUSTOMERS . "` WHERE ( (`subdomains_used` + " . (int)$subdomains . " <= `subdomains` OR `subdomains` = '-1' ) AND (`emails_used` + " . (int)$emails . " <= `emails` OR `emails` = '-1' ) AND (`email_forwarders_used` + " . (int)$email_forwarders . " <= `email_forwarders` OR `email_forwarders` = '-1' ) AND (`email_accounts_used` + " . (int)$email_accounts . " <= `email_accounts` OR `email_accounts` = '-1' ) " . ($userinfo['customers_see_all'] ? '' : " AND `adminid` = '" . (int)$userinfo['adminid'] . "' ") . ") OR `customerid` = '" . (int)$result['customerid'] . "' ORDER BY `name` ASC"); + + while($row_customer = $db->fetch_array($result_customers)) + { + $customers.= makeoption(getCorrectFullUserDetails($row_customer) . ' (' . $row_customer['loginname'] . ')', $row_customer['customerid'], $result['customerid']); + } + } + else + { + $customer = $db->query_first("SELECT `customerid`, `loginname`, `name`, `firstname`, `company` FROM `" . TABLE_PANEL_CUSTOMERS . "` WHERE `customerid` = '" . (int)$result['customerid'] . "'"); + $result['customername'] = getCorrectFullUserDetails($customer) . ' (' . $customer['loginname'] . ')'; + } + + if($userinfo['customers_see_all'] == '1') + { + if($settings['panel']['allow_domain_change_admin'] == '1') + { + $admins = ''; + $result_admins = $db->query("SELECT `adminid`, `loginname`, `name`, `firstname`, `company` FROM `" . TABLE_PANEL_ADMINS . "` WHERE (`domains_used` < `domains` OR `domains` = '-1') OR `adminid` = '" . (int)$result['adminid'] . "' ORDER BY `name` ASC"); + + while($row_admin = $db->fetch_array($result_admins)) + { + $admins.= makeoption(getCorrectFullUserDetails($row_admin) . ' (' . $row_admin['loginname'] . ')', $row_admin['adminid'], $result['adminid']); + } + } + else + { + $admin = $db->query_first("SELECT `adminid`, `loginname`, `name`, `firstname`, `company` FROM `" . TABLE_PANEL_ADMINS . "` WHERE `adminid` = '" . (int)$result['adminid'] . "'"); + $result['adminname'] = getCorrectFullUserDetails($admin) . ' (' . $admin['loginname'] . ')'; + } + } + + $result['domain'] = $idna_convert->decode($result['domain']); + $domains = makeoption($lng['domains']['noaliasdomain'], 0, NULL, true); + $result_domains = $db->query("SELECT `d`.`id`, `d`.`domain` FROM `" . TABLE_PANEL_DOMAINS . "` `d`, `" . TABLE_PANEL_CUSTOMERS . "` `c` WHERE `d`.`aliasdomain` IS NULL AND `d`.`parentdomainid`=0 AND `d`.`id`<>'" . (int)$result['id'] . "' AND `c`.`standardsubdomain`<>`d`.`id` AND `d`.`customerid`='" . (int)$result['customerid'] . "' AND `c`.`customerid`=`d`.`customerid` ORDER BY `d`.`domain` ASC"); + + while($row_domain = $db->fetch_array($result_domains)) + { + $domains.= makeoption($idna_convert->decode($row_domain['domain']), $row_domain['id'], $result['aliasdomain']); + } + + if($userinfo['ip'] == "-1") + { + $result_ipsandports = $db->query("SELECT `id`, `ip`, `port` FROM `" . TABLE_PANEL_IPSANDPORTS . "` WHERE `ssl`='0' ORDER BY `ip`, `port` ASC"); + $result_ssl_ipsandports = $db->query("SELECT `id`, `ip`, `port` FROM `" . TABLE_PANEL_IPSANDPORTS . "` WHERE `ssl`='1' ORDER BY `ip`, `port` ASC"); + } + else + { + $admin_ip = $db->query_first("SELECT `id`, `ip`, `port` FROM `" . TABLE_PANEL_IPSANDPORTS . "` WHERE `id`='" . (int)$userinfo['ip'] . "' ORDER BY `ip`, `port` ASC"); + $result_ipsandports = $db->query("SELECT `id`, `ip`, `port` FROM `" . TABLE_PANEL_IPSANDPORTS . "` WHERE `ssl`='0' AND `ip`='" . $admin_ip['ip'] . "' ORDER BY `ip`, `port` ASC"); + $result_ssl_ipsandports = $db->query("SELECT `id`, `ip`, `port` FROM `" . TABLE_PANEL_IPSANDPORTS . "` WHERE `ssl`='1' AND `ip`='" . $admin_ip['ip'] . "' ORDER BY `ip`, `port` ASC"); + } + + $ipsandports = ''; + + while($row_ipandport = $db->fetch_array($result_ipsandports)) + { + if(filter_var($row_ipandport['ip'], FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) + { + $row_ipandport['ip'] = '[' . $row_ipandport['ip'] . ']'; + } + + $ipsandports.= makeoption($row_ipandport['ip'] . ':' . $row_ipandport['port'], $row_ipandport['id'], $result['ipandport']); + } + + $ssl_ipsandports = ''; + + while($row_ssl_ipandport = $db->fetch_array($result_ssl_ipsandports)) + { + if(filter_var($row_ssl_ipandport['ip'], FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) + { + $row_ssl_ipandport['ip'] = '[' . $row_ssl_ipandport['ip'] . ']'; + } + + $ssl_ipsandports.= makeoption($row_ssl_ipandport['ip'] . ':' . $row_ssl_ipandport['port'], $row_ssl_ipandport['id'], $result['ssl_ipandport']); + } + + $result['specialsettings'] = $result['specialsettings']; + $isbinddomain = makeyesno('isbinddomain', '1', '0', $result['isbinddomain']); + $wwwserveralias = makeyesno('wwwserveralias', '1', '0', $result['wwwserveralias']); + $isemaildomain = makeyesno('isemaildomain', '1', '0', $result['isemaildomain']); + $email_only = makeyesno('email_only', '1', '0', $result['email_only']); + $ssl = makeyesno('ssl', '1', '0', $result['ssl']); + $ssl_redirect = makeyesno('ssl_redirect', '1', '0', $result['ssl_redirect']); + $subcanemaildomain = makeoption($lng['admin']['subcanemaildomain']['never'], '0', $result['subcanemaildomain'], true, true); + $subcanemaildomain.= makeoption($lng['admin']['subcanemaildomain']['choosableno'], '1', $result['subcanemaildomain'], true, true); + $subcanemaildomain.= makeoption($lng['admin']['subcanemaildomain']['choosableyes'], '2', $result['subcanemaildomain'], true, true); + $subcanemaildomain.= makeoption($lng['admin']['subcanemaildomain']['always'], '3', $result['subcanemaildomain'], true, true); + $dkim = makeyesno('dkim', '1', '0', $result['dkim']); + $caneditdomain = makeyesno('caneditdomain', '1', '0', $result['caneditdomain']); + $openbasedir = makeyesno('openbasedir', '1', '0', $result['openbasedir']); + $safemode = makeyesno('safemode', '1', '0', $result['safemode']); + $speciallogfile = ($result['speciallogfile'] == 1 ? $lng['panel']['yes'] : $lng['panel']['no']); + $result['add_date'] = date('Y-m-d', $result['add_date']); + + $phpconfigs = ''; + $phpconfigs_result = $db->query("SELECT * FROM `" . TABLE_PANEL_PHPCONFIGS . "`"); + + while($phpconfigs_row = $db->fetch_array($phpconfigs_result)) + { + $phpconfigs.= makeoption($phpconfigs_row['description'], $phpconfigs_row['id'], $result['phpsettingid'], true, true); + } + + $result = htmlentities_array($result); + eval("echo \"" . getTemplate("domains/domains_edit") . "\";"); + } + } + } +} + +?> diff --git a/admin_index.php b/admin_index.php new file mode 100644 index 0000000000..49442c69f7 --- /dev/null +++ b/admin_index.php @@ -0,0 +1,294 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Panel + * @version $Id: admin_index.php 2696 2009-04-10 13:03:32Z flo $ + */ + +define('AREA', 'admin'); + +/** + * Include our init.php, which manages Sessions, Language etc. + */ + +require ("./lib/init.php"); + +if($action == 'logout') +{ + $log->logAction(ADM_ACTION, LOG_NOTICE, "logged out"); + + if($settings['session']['allow_multiple_login'] == '1') + { + $db->query("DELETE FROM `" . TABLE_PANEL_SESSIONS . "` WHERE `userid` = '" . (int)$userinfo['adminid'] . "' AND `adminsession` = '1' AND `hash` = '" . $s . "'"); + } + else + { + $db->query("DELETE FROM `" . TABLE_PANEL_SESSIONS . "` WHERE `userid` = '" . (int)$userinfo['adminid'] . "' AND `adminsession` = '1'"); + } + + redirectTo('index.php'); + exit; +} + +if(isset($_POST['id'])) +{ + $id = intval($_POST['id']); +} +elseif(isset($_GET['id'])) +{ + $id = intval($_GET['id']); +} + +if($page == 'overview') +{ + $log->logAction(ADM_ACTION, LOG_NOTICE, "viewed admin_index"); + $overview = $db->query_first("SELECT COUNT(*) AS `number_customers`, + SUM(`diskspace_used`) AS `diskspace_used`, + SUM(`mysqls_used`) AS `mysqls_used`, + SUM(`emails_used`) AS `emails_used`, + SUM(`email_accounts_used`) AS `email_accounts_used`, + SUM(`email_forwarders_used`) AS `email_forwarders_used`, + SUM(`email_quota_used`) AS `email_quota_used`, + SUM(`ftps_used`) AS `ftps_used`, + SUM(`tickets_used`) AS `tickets_used`, + SUM(`subdomains_used`) AS `subdomains_used`, + SUM(`traffic_used`) AS `traffic_used`, + SUM(`aps_packages_used`) AS `aps_packages_used` + FROM `" . TABLE_PANEL_CUSTOMERS . "`" . ($userinfo['customers_see_all'] ? '' : " WHERE `adminid` = '" . (int)$userinfo['adminid'] . "' ")); + $overview['traffic_used'] = round($overview['traffic_used'] / (1024 * 1024), $settings['panel']['decimal_places']); + $overview['diskspace_used'] = round($overview['diskspace_used'] / 1024, $settings['panel']['decimal_places']); + $number_domains = $db->query_first("SELECT COUNT(*) AS `number_domains` FROM `" . TABLE_PANEL_DOMAINS . "` WHERE `parentdomainid`='0'" . ($userinfo['customers_see_all'] ? '' : " AND `adminid` = '" . (int)$userinfo['adminid'] . "' ")); + $overview['number_domains'] = $number_domains['number_domains']; + $phpversion = phpversion(); + $phpmemorylimit = @ini_get("memory_limit"); + + if($phpmemorylimit == "") + { + $phpmemorylimit = $lng['admin']['memorylimitdisabled']; + } + + $mysqlserverversion = mysql_get_server_info(); + $mysqlclientversion = mysql_get_client_info(); + $webserverinterface = strtoupper(@php_sapi_name()); + + if((isset($_GET['lookfornewversion']) && $_GET['lookfornewversion'] == 'yes') + || (isset($lookfornewversion) && $lookfornewversion == 'yes')) + { + $latestversion = @file('http://version.syscp.org/SysCP/legacy/' . $version . '-' . $dbversion ); + + if(is_array($latestversion) + && count($latestversion) >= 2) + { + $lookfornewversion_lable = $latestversion[0]; + $lookfornewversion_link = $latestversion[1]; + $lookfornewversion_addinfo = ''; + + if(count($latestversion) >= 3) + { + $addinfo = $latestversion; + unset($addinfo[0]); + unset($addinfo[1]); + $lookfornewversion_addinfo = implode("\n", $addinfo); + } + } + else + { + redirectTo('http://version.syscp.org/SysCP/legacy/' . $version . '-' . $dbversion . '/pretty', NULL); + } + } + else + { + $lookfornewversion_lable = $lng['admin']['lookfornewversion']['clickhere']; + $lookfornewversion_link = htmlspecialchars($filename . '?s=' . urlencode($s) . '&page=' . urlencode($page) . '&lookfornewversion=yes'); + $lookfornewversion_addinfo = ''; + } + + $userinfo['diskspace'] = round($userinfo['diskspace'] / 1024, $settings['panel']['decimal_places']); + $userinfo['diskspace_used'] = round($userinfo['diskspace_used'] / 1024, $settings['panel']['decimal_places']); + $userinfo['traffic'] = round($userinfo['traffic'] / (1024 * 1024), $settings['panel']['decimal_places']); + $userinfo['traffic_used'] = round($userinfo['traffic_used'] / (1024 * 1024), $settings['panel']['decimal_places']); + $userinfo = str_replace_array('-1', $lng['customer']['unlimited'], $userinfo, 'customers domains diskspace traffic mysqls emails email_accounts email_forwarders email_quota ftps tickets subdomains aps_packages'); + + if($settings['system']['last_tasks_run'] == 0) + { + $cronlastrun = $lng['cronjobs']['notyetrun']; + } + else + { + $cronlastrun = date("d.m.Y H:i:s", $settings['system']['last_tasks_run']); + } + + if($settings['system']['last_traffic_run'] == 0) + { + $trafficlastrun = $lng['cronjobs']['notyetrun']; + } + else + { + $trafficlastrun = date("d.m.Y H:i:s", $settings['system']['last_traffic_run']); + } + + if($settings['system']['last_archive_run'] == 0) + { + $archivelastrun = $lng['cronjobs']['notyetrun']; + } + else + { + $archivelastrun = date("d.m.Y H:i:s", $settings['system']['last_archive_run']); + } + + $opentickets = 0; + $opentickets = $db->query_first('SELECT COUNT(`id`) as `count` FROM `' . TABLE_PANEL_TICKETS . '` + WHERE `answerto` = "0" AND (`status` = "0" OR `status` = "1") + AND `lastreplier`="0" AND `adminid` = "' . $userinfo['adminid'] . '"'); + $awaitingtickets = $opentickets['count']; + $awaitingtickets_text = ''; + + if($opentickets > 0) + { + $awaitingtickets_text = strtr($lng['ticket']['awaitingticketreply'], array('%s' => '' . $opentickets['count'] . '')); + } + + if(function_exists('sys_getloadavg')) + { + $loadArray = sys_getloadavg(); + $load = number_format($loadArray[0], 2, '.', '') . " / " . number_format($loadArray[1], 2, '.', '') . " / " . number_format($loadArray[2], 2, '.', ''); + } + else + { + $load = @file_get_contents('/proc/loadavg'); + + if(!$load) + { + $load = $lng['admin']['noloadavailable']; + } + } + + if(function_exists('posix_uname')) + { + $showkernel = 1; + $kernel_nfo = posix_uname(); + $kernel = $kernel_nfo['release'] . ' (' . $kernel_nfo['machine'] . ')'; + } + else + { + $showkernel = 0; + $kernel = ''; + } + + // Try to get the uptime + // First: With exec (let's hope it's enabled for the SysCP - vHost) + + $uptime_array = explode(" ", @file_get_contents("/proc/uptime")); + + if(is_array($uptime_array) + && isset($uptime_array[0]) + && is_numeric($uptime_array[0])) + { + // Some calculatioon to get a nicly formatted display + + $seconds = round($uptime_array[0], 0); + $minutes = $seconds / 60; + $hours = $minutes / 60; + $days = floor($hours / 24); + $hours = floor($hours - ($days * 24)); + $minutes = floor($minutes - ($days * 24 * 60) - ($hours * 60)); + $seconds = floor($seconds - ($days * 24 * 60 * 60) - ($hours * 60 * 60) - ($minutes * 60)); + $uptime = "{$days}d, {$hours}h, {$minutes}m, {$seconds}s"; + + // Just cleanup + + unset($uptime_array, $seconds, $minutes, $hours, $days); + } + else + { + // Nothing of the above worked, show an error :/ + + $uptime = ''; + } + + eval("echo \"" . getTemplate("index/index") . "\";"); +} +elseif($page == 'change_password') +{ + if(isset($_POST['send']) + && $_POST['send'] == 'send') + { + $old_password = validate($_POST['old_password'], 'old password'); + + if(md5($old_password) != $userinfo['password']) + { + standard_error('oldpasswordnotcorrect'); + exit; + } + + $new_password = validate($_POST['new_password'], 'new password'); + $new_password_confirm = validate($_POST['new_password_confirm'], 'new password confirm'); + + if($old_password == '') + { + standard_error(array('stringisempty', 'oldpassword')); + } + elseif($new_password == '') + { + standard_error(array('stringisempty', 'newpassword')); + } + elseif($new_password_confirm == '') + { + standard_error(array('stringisempty', 'newpasswordconfirm')); + } + elseif($new_password != $new_password_confirm) + { + standard_error('newpasswordconfirmerror'); + } + else + { + $db->query("UPDATE `" . TABLE_PANEL_ADMINS . "` SET `password`='" . md5($new_password) . "' WHERE `adminid`='" . (int)$userinfo['adminid'] . "' AND `password`='" . md5($old_password) . "'"); + $log->logAction(ADM_ACTION, LOG_NOTICE, 'changed password'); + redirectTo($filename, Array('s' => $s)); + } + } + else + { + eval("echo \"" . getTemplate("index/change_password") . "\";"); + } +} +elseif($page == 'change_language') +{ + if(isset($_POST['send']) + && $_POST['send'] == 'send') + { + $def_language = validate($_POST['def_language'], 'default language'); + + if(isset($languages[$def_language])) + { + $db->query("UPDATE `" . TABLE_PANEL_ADMINS . "` SET `def_language`='" . $db->escape($def_language) . "' WHERE `adminid`='" . (int)$userinfo['adminid'] . "'"); + $db->query("UPDATE `" . TABLE_PANEL_SESSIONS . "` SET `language`='" . $db->escape($def_language) . "' WHERE `hash`='" . $db->escape($s) . "'"); + } + + $log->logAction(ADM_ACTION, LOG_NOTICE, "changed his/her default language to '" . $def_language . "'"); + redirectTo($filename, Array('s' => $s)); + } + else + { + $language_options = ''; + + while(list($language_file, $language_name) = each($languages)) + { + $language_options.= makeoption($language_name, $language_file, $userinfo['def_language'], true); + } + + eval("echo \"" . getTemplate("index/change_language") . "\";"); + } +} + +?> diff --git a/admin_ipsandports.php b/admin_ipsandports.php new file mode 100644 index 0000000000..3bb7de82e3 --- /dev/null +++ b/admin_ipsandports.php @@ -0,0 +1,320 @@ + + * @author Michael Duergner + * @author Luca Longinotti + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Panel + * @version $Id: admin_ipsandports.php 2699 2009-04-14 11:21:26Z flo $ + */ + +define('AREA', 'admin'); + +/** + * Include our init.php, which manages Sessions, Language etc. + */ + +require ("./lib/init.php"); + +if(isset($_POST['id'])) +{ + $id = intval($_POST['id']); +} +elseif(isset($_GET['id'])) +{ + $id = intval($_GET['id']); +} + +if($page == 'ipsandports' + || $page == 'overview') +{ + if($action == '') + { + $log->logAction(ADM_ACTION, LOG_NOTICE, "viewed admin_ipsandports"); + $fields = array( + 'ip' => $lng['admin']['ipsandports']['ip'], + 'port' => $lng['admin']['ipsandports']['port'] + ); + $paging = new paging($userinfo, $db, TABLE_PANEL_IPSANDPORTS, $fields, $settings['panel']['paging'], $settings['panel']['natsorting']); + $ipsandports = ''; + $result = $db->query("SELECT `id`, `ip`, `port`, `listen_statement`, `namevirtualhost_statement`, `vhostcontainer`, `vhostcontainer_servername_statement`, `specialsettings`, `ssl` FROM `" . TABLE_PANEL_IPSANDPORTS . "` " . $paging->getSqlWhere(false) . " " . $paging->getSqlOrderBy() . " " . $paging->getSqlLimit()); + $paging->setEntries($db->num_rows($result)); + $sortcode = $paging->getHtmlSortCode($lng); + $arrowcode = $paging->getHtmlArrowCode($filename . '?page=' . $page . '&s=' . $s); + $searchcode = $paging->getHtmlSearchCode($lng); + $pagingcode = $paging->getHtmlPagingCode($filename . '?page=' . $page . '&s=' . $s); + $i = 0; + $count = 0; + + while($row = $db->fetch_array($result)) + { + if($paging->checkDisplay($i)) + { + $row = htmlentities_array($row); + + if(filter_var($row['ip'], FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) + { + $row['ip'] = '[' . $row['ip'] . ']'; + } + + eval("\$ipsandports.=\"" . getTemplate("ipsandports/ipsandports_ipandport") . "\";"); + $count++; + } + + $i++; + } + + eval("echo \"" . getTemplate("ipsandports/ipsandports") . "\";"); + } + elseif($action == 'delete' + && $id != 0) + { + $result = $db->query_first("SELECT `id`, `ip`, `port` FROM `" . TABLE_PANEL_IPSANDPORTS . "` WHERE `id`='" . (int)$id . "'"); + + if(isset($result['id']) + && $result['id'] == $id) + { + $result_checkdomain = $db->query_first("SELECT `id` FROM `" . TABLE_PANEL_DOMAINS . "` WHERE `ipandport`='" . (int)$id . "'"); + + if($result_checkdomain['id'] == '') + { + if($result['id'] != $settings['system']['defaultip']) + { + $result_sameipotherport = $db->query_first("SELECT `id` FROM `" . TABLE_PANEL_IPSANDPORTS . "` WHERE `ip`='" . $db->escape($result['ip']) . "' AND `id`!='" . (int)$id . "'"); + + if(($result['ip'] != $settings['system']['ipaddress']) + || ($result['ip'] == $settings['system']['ipaddress'] && $result_sameipotherport['id'] != '')) + { + $result = $db->query_first("SELECT `ip`, `port` FROM `" . TABLE_PANEL_IPSANDPORTS . "` WHERE `id`='" . (int)$id . "'"); + + if($result['ip'] != '') + { + if(isset($_POST['send']) + && $_POST['send'] == 'send') + { + $db->query("DELETE FROM `" . TABLE_PANEL_IPSANDPORTS . "` WHERE `id`='" . (int)$id . "'"); + $log->logAction(ADM_ACTION, LOG_WARNING, "deleted IP/port '" . $result['ip'] . ":" . $result['port'] . "'"); + inserttask('1'); + inserttask('4'); + redirectTo($filename, Array('page' => $page, 's' => $s)); + } + else + { + ask_yesno('admin_ip_reallydelete', $filename, array('id' => $id, 'page' => $page, 'action' => $action), $result['ip'] . ':' . $result['port']); + } + } + } + else + { + standard_error('cantdeletesystemip'); + } + } + else + { + standard_error('cantdeletedefaultip'); + } + } + else + { + standard_error('ipstillhasdomains'); + } + } + } + elseif($action == 'add') + { + if(isset($_POST['send']) + && $_POST['send'] == 'send') + { + $ip = validate_ip($_POST['ip']); + $port = validate($_POST['port'], 'port', '/^(([1-9])|([1-9][0-9])|([1-9][0-9][0-9])|([1-9][0-9][0-9][0-9])|([1-5][0-9][0-9][0-9][0-9])|(6[0-4][0-9][0-9][0-9])|(65[0-4][0-9][0-9])|(655[0-2][0-9])|(6553[0-5]))$/Di', array('stringisempty', 'myport')); + $listen_statement = intval($_POST['listen_statement']); + $namevirtualhost_statement = intval($_POST['namevirtualhost_statement']); + $vhostcontainer = intval($_POST['vhostcontainer']); + $specialsettings = validate(str_replace("\r\n", "\n", $_POST['specialsettings']), 'specialsettings', '/^[^\0]*$/'); + $vhostcontainer_servername_statement = intval($_POST['vhostcontainer_servername_statement']); + $ssl = intval($_POST['ssl']); + $ssl_cert_file = validate($_POST['ssl_cert_file'], 'ssl_cert_file'); + $ssl_key_file = validate($_POST['ssl_key_file'], 'ssl_key_file'); + $ssl_ca_file = validate($_POST['ssl_ca_file'], 'ssl_ca_file'); + $default_vhostconf_domain = validate(str_replace("\r\n", "\n", $_POST['default_vhostconf_domain']), 'default_vhostconf_domain', '/^[^\0]*$/'); + + if($listen_statement != '1') + { + $listen_statement = '0'; + } + + if($namevirtualhost_statement != '1') + { + $namevirtualhost_statement = '0'; + } + + if($vhostcontainer != '1') + { + $vhostcontainer = '0'; + } + + if($vhostcontainer_servername_statement != '1') + { + $vhostcontainer_servername_statement = '0'; + } + + if($ssl != '1') + { + $ssl = '0'; + } + + if($ssl_cert_file != '') + { + $ssl_cert_file = makeCorrectFile($ssl_cert_file); + } + + if($ssl_key_file != '') + { + $ssl_key_file = makeCorrectFile($ssl_key_file); + } + + if($ssl_ca_file != '') + { + $ssl_ca_file = makeCorrectFile($ssl_ca_file); + } + + $result_checkfordouble = $db->query_first("SELECT `id` FROM `" . TABLE_PANEL_IPSANDPORTS . "` WHERE `ip`='" . $db->escape($ip) . "' AND `port`='" . (int)$port . "'"); + + if($result_checkfordouble['id'] != '') + { + standard_error('myipnotdouble'); + } + else + { + $db->query("INSERT INTO `" . TABLE_PANEL_IPSANDPORTS . "` (`ip`, `port`, `listen_statement`, `namevirtualhost_statement`, `vhostcontainer`, `vhostcontainer_servername_statement`, `specialsettings`, `ssl`, `ssl_cert_file`, `ssl_key_file`, `ssl_ca_file`, `default_vhostconf_domain`) VALUES ('" . $db->escape($ip) . "', '" . (int)$port . "', '" . (int)$listen_statement . "', '" . (int)$namevirtualhost_statement . "', '" . (int)$vhostcontainer . "', '" . (int)$vhostcontainer_servername_statement . "', '" . $db->escape($specialsettings) . "', '" . (int)$ssl . "', '" . $db->escape($ssl_cert_file) . "', '" . $db->escape($ssl_key_file) . "', '" . $db->escape($ssl_ca_file) . "', '" . $db->escape($default_vhostconf_domain) . "')"); + + if(filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) + { + $ip = '[' . $ip . ']'; + } + + $log->logAction(ADM_ACTION, LOG_WARNING, "added IP/port '" . $ip . ":" . $port . "'"); + inserttask('1'); + inserttask('4'); + redirectTo($filename, Array('page' => $page, 's' => $s)); + } + } + else + { + $enable_ssl = makeyesno('ssl', '1', '0', '0'); + $listen_statement = makeyesno('listen_statement', '1', '0', '1'); + $namevirtualhost_statement = makeyesno('namevirtualhost_statement', '1', '0', '1'); + $vhostcontainer = makeyesno('vhostcontainer', '1', '0', '1'); + $vhostcontainer_servername_statement = makeyesno('vhostcontainer_servername_statement', '1', '0', '1'); + eval("echo \"" . getTemplate("ipsandports/ipsandports_add") . "\";"); + } + } + elseif($action == 'edit' + && $id != 0) + { + $result = $db->query_first("SELECT * FROM `" . TABLE_PANEL_IPSANDPORTS . "` WHERE `id`='" . (int)$id . "'"); + + if($result['ip'] != '') + { + if(isset($_POST['send']) + && $_POST['send'] == 'send') + { + $ip = validate_ip($_POST['ip']); + $port = validate($_POST['port'], 'port', '/^(([1-9])|([1-9][0-9])|([1-9][0-9][0-9])|([1-9][0-9][0-9][0-9])|([1-5][0-9][0-9][0-9][0-9])|(6[0-4][0-9][0-9][0-9])|(65[0-4][0-9][0-9])|(655[0-2][0-9])|(6553[0-5]))$/Di', array('stringisempty', 'myport')); + $result_checkfordouble = $db->query_first("SELECT `id` FROM `" . TABLE_PANEL_IPSANDPORTS . "` WHERE `ip`='" . $db->escape($ip) . "' AND `port`='" . (int)$port . "'"); + $result_sameipotherport = $db->query_first("SELECT `id` FROM `" . TABLE_PANEL_IPSANDPORTS . "` WHERE `ip`='" . $db->escape($result['ip']) . "' AND `id`!='" . (int)$id . "'"); + $listen_statement = intval($_POST['listen_statement']); + $namevirtualhost_statement = intval($_POST['namevirtualhost_statement']); + $vhostcontainer = intval($_POST['vhostcontainer']); + $specialsettings = validate(str_replace("\r\n", "\n", $_POST['specialsettings']), 'specialsettings', '/^[^\0]*$/'); + $vhostcontainer_servername_statement = intval($_POST['vhostcontainer_servername_statement']); + $ssl = intval($_POST['ssl']); + $ssl_cert_file = validate($_POST['ssl_cert_file'], 'ssl_cert_file'); + $ssl_key_file = validate($_POST['ssl_key_file'], 'ssl_key_file'); + $ssl_ca_file = validate($_POST['ssl_ca_file'], 'ssl_ca_file'); + $default_vhostconf_domain = validate(str_replace("\r\n", "\n", $_POST['default_vhostconf_domain']), 'default_vhostconf_domain', '/^[^\0]*$/'); + + if($listen_statement != '1') + { + $listen_statement = '0'; + } + + if($namevirtualhost_statement != '1') + { + $namevirtualhost_statement = '0'; + } + + if($vhostcontainer != '1') + { + $vhostcontainer = '0'; + } + + if($vhostcontainer_servername_statement != '1') + { + $vhostcontainer_servername_statement = '0'; + } + + if($ssl != '1') + { + $ssl = '0'; + } + + if($ssl_cert_file != '') + { + $ssl_cert_file = makeCorrectFile($ssl_cert_file); + } + + if($ssl_key_file != '') + { + $ssl_key_file = makeCorrectFile($ssl_key_file); + } + + if($ssl_ca_file != '') + { + $ssl_ca_file = makeCorrectFile($ssl_ca_file); + } + + if($result['ip'] != $ip + && $result['ip'] == $settings['system']['ipaddress'] + && $result_sameipotherport['id'] == '') + { + standard_error('cantchangesystemip'); + } + elseif($result_checkfordouble['id'] != '' + && $result_checkfordouble['id'] != $id) + { + standard_error('myipnotdouble'); + } + else + { + $db->query("UPDATE `" . TABLE_PANEL_IPSANDPORTS . "` SET `ip`='" . $db->escape($ip) . "', `port`='" . (int)$port . "', `listen_statement`='" . (int)$listen_statement . "', `namevirtualhost_statement`='" . (int)$namevirtualhost_statement . "', `vhostcontainer`='" . (int)$vhostcontainer . "', `vhostcontainer_servername_statement`='" . (int)$vhostcontainer_servername_statement . "', `specialsettings`='" . $db->escape($specialsettings) . "', `ssl`='" . (int)$ssl . "', `ssl_cert_file`='" . $db->escape($ssl_cert_file) . "', `ssl_key_file`='" . $db->escape($ssl_key_file) . "', `ssl_ca_file`='" . $db->escape($ssl_ca_file) . "', `default_vhostconf_domain`='" . $db->escape($default_vhostconf_domain) . "' WHERE `id`='" . (int)$id . "'"); + $log->logAction(ADM_ACTION, LOG_WARNING, "changed IP/port from '" . $result['ip'] . ":" . $result['port'] . "' to '" . $ip . ":" . $port . "'"); + inserttask('1'); + inserttask('4'); + redirectTo($filename, Array('page' => $page, 's' => $s)); + } + } + else + { + $enable_ssl = makeyesno('ssl', '1', '0', $result['ssl']); + $result = htmlentities_array($result); + $listen_statement = makeyesno('listen_statement', '1', '0', $result['listen_statement']); + $namevirtualhost_statement = makeyesno('namevirtualhost_statement', '1', '0', $result['namevirtualhost_statement']); + $vhostcontainer = makeyesno('vhostcontainer', '1', '0', $result['vhostcontainer']); + $vhostcontainer_servername_statement = makeyesno('vhostcontainer_servername_statement', '1', '0', $result['vhostcontainer_servername_statement']); + eval("echo \"" . getTemplate("ipsandports/ipsandports_edit") . "\";"); + } + } + } +} + +?> \ No newline at end of file diff --git a/admin_logger.php b/admin_logger.php new file mode 100644 index 0000000000..762df100cf --- /dev/null +++ b/admin_logger.php @@ -0,0 +1,175 @@ + + * @license http://www.gnu.org/licenses/gpl.txt + * @package Panel + * @version CVS: $Id: admin_logger.php 2452 2008-11-30 13:12:36Z flo $ + * @link http://www.nutime.de/ + * @since File available since Release 1.2.20 + */ + +define('AREA', 'admin'); + +/** + * Include our init.php, which manages Sessions, Language etc. + */ + +require ("./lib/init.php"); + +if($page == 'log' + && $userinfo['change_serversettings'] == '1') +{ + if($action == '') + { + $fields = array( + 'action' => $lng['logger']['action'], + 'date' => $lng['logger']['date'], + 'type' => $lng['logger']['type'], + 'user' => $lng['logger']['user'] + ); + $paging = new paging($userinfo, $db, TABLE_PANEL_LOG, $fields, $settings['panel']['paging'], $settings['panel']['natsorting']); + $paging->sortfield = 'date'; + $paging->sortorder = 'desc'; + $result = $db->query('SELECT * FROM `' . TABLE_PANEL_LOG . '` ' . $paging->getSqlWhere(false) . ' ' . $paging->getSqlOrderBy() . ' ' . $paging->getSqlLimit()); + $paging->setEntries($db->num_rows($result)); + $sortcode = $paging->getHtmlSortCode($lng); + $arrowcode = $paging->getHtmlArrowCode($filename . '?page=' . $page . '&s=' . $s); + $searchcode = $paging->getHtmlSearchCode($lng); + $pagingcode = $paging->getHtmlPagingCode($filename . '?page=' . $page . '&s=' . $s); + $clog = array(); + + while($row = $db->fetch_array($result)) + { + if(!isset($clog[$row['action']]) + || !is_array($clog[$row['action']])) + { + $clog[$row['action']] = array(); + } + + $clog[$row['action']][$row['logid']] = $row; + } + + if($paging->sortfield == 'date' + && $paging->sortorder == 'desc') + { + krsort($clog); + } + else + { + ksort($clog); + } + + $i = 0; + $count = 0; + $log_count = 0; + $log = ''; + foreach($clog as $action => $logrows) + { + $_action = 0; + foreach($logrows as $row) + { + if($paging->checkDisplay($i)) + { + $row = htmlentities_array($row); + $row['date'] = date("d.m.y H:i:s", $row['date']); + + if($_action != $action) + { + switch($action) + { + case USR_ACTION: + $_action = $lng['admin']['customer']; + break; + case RES_ACTION: + $_action = 'Reseller'; + break; + case ADM_ACTION: + $_action = 'Administrator'; + break; + case CRON_ACTION: + $_action = 'Cronjob'; + break; + case LOG_ERROR: + $_action = 'Internal'; + break; + default: + $_action = 'Unknown'; + break; + } + + $row['action'] = $_action; + eval("\$log.=\"" . getTemplate("logger/logger_action") . "\";"); + } + + $log_count++; + $type = $row['type']; + $_type = 'unknown'; + + switch($type) + { + case LOG_INFO: + $_type = 'Information'; + break; + case LOG_NOTICE: + $_type = 'Notice'; + break; + case LOG_WARNING: + $_type = 'Warning'; + break; + case LOG_ERR: + $_type = 'Error'; + break; + case LOG_CRIT: + $_type = 'Critical'; + break; + default: + $_type = 'Unknown'; + break; + } + + $row['type'] = $_type; + eval("\$log.=\"" . getTemplate("logger/logger_log") . "\";"); + $count++; + $_action = $action; + } + } + + $i++; + } + + eval("echo \"" . getTemplate("logger/logger") . "\";"); + } + elseif($action == 'truncate') + { + if(isset($_POST['send']) + && $_POST['send'] == 'send') + { + $yesterday = time() - (60 * 10); + + /* (60*60*24); */ + + $db->query("DELETE FROM `" . TABLE_PANEL_LOG . "` WHERE `date` < '" . $yesterday . "'"); + $log->logAction(ADM_ACTION, LOG_WARNING, "truncated the system-log (mysql)"); + redirectTo($filename, Array('page' => $page, 's' => $s)); + } + else + { + ask_yesno('logger_reallytruncate', $filename, array('page' => $page, 'action' => $action), TABLE_PANEL_LOG); + } + } +} + +?> \ No newline at end of file diff --git a/admin_message.php b/admin_message.php new file mode 100644 index 0000000000..db23070b01 --- /dev/null +++ b/admin_message.php @@ -0,0 +1,146 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Panel + * @version $Id: admin_message.php 2692 2009-03-27 18:04:47Z flo $ + */ + +define('AREA', 'admin'); + +/** + * Include our init.php, which manages Sessions, Language etc. + */ + +require ("./lib/init.php"); + +if(isset($_POST['id'])) +{ + $id = intval($_POST['id']); +} +elseif(isset($_GET['id'])) +{ + $id = intval($_GET['id']); +} + +if($page == 'message') +{ + if($action == '') + { + $log->logAction(ADM_ACTION, LOG_NOTICE, "viewed panel_message"); + + if(isset($_POST['send']) + && $_POST['send'] == 'send') + { + if($_POST['receipient'] == 0 + && $userinfo['customers_see_all'] == '1') + { + $log->logAction(ADM_ACTION, LOG_NOTICE, "sending messages to admins"); + $result = $db->query('SELECT `firstname`, `name`, `email` FROM `' . TABLE_PANEL_ADMINS . "`"); + } + elseif($_POST['receipient'] == 1) + { + if($userinfo['customers_see_all'] == "1") + { + $log->logAction(ADM_ACTION, LOG_NOTICE, "sending messages to ALL customers"); + $result = $db->query('SELECT `firstname`, `name`, `email` FROM `' . TABLE_PANEL_CUSTOMERS . "`"); + } + else + { + $log->logAction(ADM_ACTION, LOG_NOTICE, "sending messages to customers"); + $result = $db->query('SELECT `firstname`, `name`, `email` FROM `' . TABLE_PANEL_CUSTOMERS . "` WHERE `adminid`='" . $userinfo['adminid'] . "'"); + } + } + else + { + standard_error('noreceipientsgiven'); + } + + $subject = $_POST['subject']; + $message = wordwrap($_POST['message'], 70); + + if(!empty($message)) + { + $mailcounter = 0; + $mail->Body = $message; + $mail->Subject = $subject; + + while($row = $db->fetch_array($result)) + { + $mail->AddAddress($row['email'], $row['firstname'] . ' ' . $row['name']); + $mail->From = $userinfo['email']; + $mail->FromName = $userinfo['firstname'] . ' ' . $userinfo['name']; + + if(!$mail->Send()) + { + if($mail->ErrorInfo != '') + { + $mailerr_msg = $mail->ErrorInfo; + } + else + { + $mailerr_msg = $row["email"]; + } + + $log->logAction(ADM_ACTION, LOG_ERR, "Error sending mail: " . $mailerr_msg); + standard_error('errorsendingmail', $row["email"]); + } + + $mailcounter++; + $mail->ClearAddresses(); + } + + redirectTo($filename, Array('page' => $page, 's' => $s, 'action' => 'showsuccess', 'sentitems' => $mailcounter)); + } + else + { + standard_error('nomessagetosend'); + } + } + } + + if($action == 'showsuccess') + { + $success = 1; + $sentitems = isset($_GET['sentitems']) ? (int)$_GET['sentitems'] : 0; + + if($sentitems == 0) + { + $successmessage = $lng['message']['noreceipients']; + } + else + { + $successmessage = str_replace('%s', $sentitems, $lng['message']['success']); + } + + $action = ''; + } + else + { + $success = 0; + $sentitems = 0; + $successmessage = ''; + $action = ''; + } + + $receipients = ''; + + if($userinfo['customers_see_all'] == "1") + { + $receipients.= makeoption($lng['panel']['reseller'], 0); + } + + $receipients.= makeoption($lng['panel']['customer'], 1); + eval("echo \"" . getTemplate("message/message") . "\";"); +} + +?> diff --git a/admin_phpsettings.php b/admin_phpsettings.php new file mode 100644 index 0000000000..36f0aabc78 --- /dev/null +++ b/admin_phpsettings.php @@ -0,0 +1,185 @@ + + * @author Florian Lippert + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Panel + * @version $Id: admin_phpsettings.php 2692 2009-03-27 18:04:47Z flo $ + * @todo + */ + +define('AREA', 'admin'); + +/** + * Include our init.php, which manages Sessions, Language etc. + */ + +require ("./lib/init.php"); + +if(isset($_POST['id'])) +{ + $id = intval($_POST['id']); +} +elseif(isset($_GET['id'])) +{ + $id = intval($_GET['id']); +} + +if($page == 'overview') +{ + if($action == '') + { + $tablecontent = ''; + $result = $db->query("SELECT * FROM `" . TABLE_PANEL_PHPCONFIGS . "`"); + + while($row = $db->fetch_array($result)) + { + $domainresult = false; + + if((int)$userinfo['domains_see_all'] == 0) + { + $domainresult = $db->query("SELECT * FROM `" . TABLE_PANEL_DOMAINS . "` WHERE `adminid` = " . (int)$userinfo['userid'] . " AND `phpsettingid` = " . (int)$row['id']); + } + else + { + $domainresult = $db->query("SELECT * FROM `" . TABLE_PANEL_DOMAINS . "` WHERE `phpsettingid` = " . (int)$row['id']); + } + + $domains = ''; + + if($db->num_rows($domainresult) > 0) + { + while($row2 = $db->fetch_array($domainresult)) + { + $domains.= $row2['domain'] . '
'; + } + } + else + { + $domains = $lng['admin']['phpsettings']['notused']; + } + + eval("\$tablecontent.=\"" . getTemplate("phpconfig/overview_overview") . "\";"); + } + + $log->logAction(ADM_ACTION, LOG_INFO, "php.ini setting overview has been viewed by '" . $userinfo['loginname'] . "'"); + eval("echo \"" . getTemplate("phpconfig/overview") . "\";"); + } + + if($action == 'add') + { + if((int)$userinfo['change_serversettings'] == 1) + { + if(isset($_POST['send']) + && $_POST['send'] == 'send') + { + $description = validate($_POST['description'], 'description'); + $binary = makeCorrectFile(validate($_POST['binary'], 'binary')); + $file_extensions = validate($_POST['file_extensions'], 'file_extensions', '/^[a-zA-Z0-9\s]*$/'); + $phpsettings = validate(str_replace("\r\n", "\n", $_POST['phpsettings']), 'phpsettings', '/^[^\0]*$/'); + $mod_fcgid_starter = validate($_POST['mod_fcgid_starter'], 'mod_fcgid_starter', '/^[0-9]*$/', '', array('-1', '')); + $mod_fcgid_maxrequests = validate($_POST['mod_fcgid_maxrequests'], 'mod_fcgid_maxrequests', '/^[0-9]*$/', '', array('-1', '')); + + if(strlen($description) == 0 + || strlen($description) > 50) + { + standard_error('descriptioninvalid'); + } + + $db->query("INSERT INTO `" . TABLE_PANEL_PHPCONFIGS . "` SET `description` = '" . $db->escape($description) . "', `binary` = '" . $db->escape($binary) . "', `file_extensions` = '" . $db->escape($file_extensions) . "', `mod_fcgid_starter` = '" . $db->escape($mod_fcgid_starter) . "', `mod_fcgid_maxrequests` = '" . $db->escape($mod_fcgid_maxrequests) . "', `phpsettings` = '" . $db->escape($phpsettings) . "'"); + inserttask('1'); + $log->logAction(ADM_ACTION, LOG_INFO, "php.ini setting with description '" . $value . "' has been created by '" . $userinfo['loginname'] . "'"); + redirectTo($filename, Array('page' => $page, 's' => $s)); + } + else + { + $result = $db->query_first("SELECT * FROM `" . TABLE_PANEL_PHPCONFIGS . "` WHERE `id` = 1"); + eval("echo \"" . getTemplate("phpconfig/overview_add") . "\";"); + } + } + else + { + standard_error('nopermissionsorinvalidid'); + } + } + + if($action == 'delete') + { + $result = $db->query_first("SELECT * FROM `" . TABLE_PANEL_PHPCONFIGS . "` WHERE `id` = " . (int)$id); + + if($result['id'] != 0 + && $result['id'] == $id + && (int)$userinfo['change_serversettings'] == 1 + && $id != 1) + { + if(isset($_POST['send']) + && $_POST['send'] == 'send') + { + $db->query("UPDATE `" . TABLE_PANEL_DOMAINS . "` SET `phpsettingid` = 1 WHERE `phpsettingid` = " . (int)$id); + $db->query("DELETE FROM `" . TABLE_PANEL_PHPCONFIGS . "` WHERE `id` = " . (int)$id); + inserttask('1'); + $log->logAction(ADM_ACTION, LOG_INFO, "php.ini setting with id #" . (int)$id . " has been deleted by '" . $userinfo['loginname'] . "'"); + redirectTo($filename, Array('page' => $page, 's' => $s)); + } + else + { + ask_yesno('phpsetting_reallydelete', $filename, array('id' => $id, 'page' => $page, 'action' => $action), $result['description']); + } + } + else + { + standard_error('nopermissionsorinvalidid'); + } + } + + if($action == 'edit') + { + $result = $db->query_first("SELECT * FROM `" . TABLE_PANEL_PHPCONFIGS . "` WHERE `id` = " . (int)$id); + + if($result['id'] != 0 + && $result['id'] == $id + && (int)$userinfo['change_serversettings'] == 1) + { + if(isset($_POST['send']) + && $_POST['send'] == 'send') + { + $description = validate($_POST['description'], 'description'); + $binary = makeCorrectFile(validate($_POST['binary'], 'binary')); + $file_extensions = validate($_POST['file_extensions'], 'file_extensions', '/^[a-zA-Z0-9\s]*$/'); + $phpsettings = validate(str_replace("\r\n", "\n", $_POST['phpsettings']), 'phpsettings', '/^[^\0]*$/'); + $mod_fcgid_starter = validate($_POST['mod_fcgid_starter'], 'mod_fcgid_starter', '/^[0-9]*$/', '', array('-1', '')); + $mod_fcgid_maxrequests = validate($_POST['mod_fcgid_maxrequests'], 'mod_fcgid_maxrequests', '/^[0-9]*$/', '', array('-1', '')); + + if(strlen($description) == 0 + || strlen($description) > 50) + { + standard_error('descriptioninvalid'); + } + + $db->query("UPDATE `" . TABLE_PANEL_PHPCONFIGS . "` SET `description` = '" . $db->escape($description) . "', `binary` = '" . $db->escape($binary) . "', `file_extensions` = '" . $db->escape($file_extensions) . "', `mod_fcgid_starter` = '" . $db->escape($mod_fcgid_starter) . "', `mod_fcgid_maxrequests` = '" . $db->escape($mod_fcgid_maxrequests) . "', `phpsettings` = '" . $db->escape($phpsettings) . "' WHERE `id` = " . (int)$id); + inserttask('1'); + $log->logAction(ADM_ACTION, LOG_INFO, "php.ini setting with description '" . $description . "' has been changed by '" . $userinfo['loginname'] . "'"); + redirectTo($filename, Array('page' => $page, 's' => $s)); + } + else + { + eval("echo \"" . getTemplate("phpconfig/overview_edit") . "\";"); + } + } + else + { + standard_error('nopermissionsorinvalidid'); + } + } +} + +?> diff --git a/admin_settings.php b/admin_settings.php new file mode 100644 index 0000000000..950f9cd106 --- /dev/null +++ b/admin_settings.php @@ -0,0 +1,159 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Panel + * @version $Id: admin_settings.php 2733 2009-11-06 09:32:00Z flo $ + */ + +define('AREA', 'admin'); + +/** + * Include our init.php, which manages Sessions, Language etc. + */ + +$need_db_sql_data = true; +$need_root_db_sql_data = true; +require ("./lib/init.php"); + +if(($page == 'settings' || $page == 'overview') + && $userinfo['change_serversettings'] == '1') +{ + $settings_data = loadConfigArrayDir('./actions/admin/settings/'); + $settings = loadSettings(&$settings_data, &$db); + + if(isset($_POST['send']) + && $_POST['send'] == 'send') + { + if(processForm(&$settings_data, &$_POST, array('filename' => $filename, 'action' => $action, 'page' => $page))) + { + standard_success('settingssaved', '', array('filename' => $filename, 'action' => $action, 'page' => $page)); + } + } + else + { + $fields = buildForm(&$settings_data); + eval("echo \"" . getTemplate("settings/settings") . "\";"); + } +} +elseif($page == 'rebuildconfigs' + && $userinfo['change_serversettings'] == '1') +{ + if(isset($_POST['send']) + && $_POST['send'] == 'send') + { + $log->logAction(ADM_ACTION, LOG_INFO, "rebuild configfiles"); + inserttask('1'); + inserttask('4'); + inserttask('5'); + redirectTo('admin_index.php', array('s' => $s)); + } + else + { + ask_yesno('admin_configs_reallyrebuild', $filename, array('page' => $page)); + } +} +elseif($page == 'updatecounters' + && $userinfo['change_serversettings'] == '1') +{ + if(isset($_POST['send']) + && $_POST['send'] == 'send') + { + $log->logAction(ADM_ACTION, LOG_INFO, "updated resource-counters"); + $updatecounters = updateCounters(true); + $customers = ''; + foreach($updatecounters['customers'] as $customerid => $customer) + { + eval("\$customers.=\"" . getTemplate("settings/updatecounters_row_customer") . "\";"); + } + + $admins = ''; + foreach($updatecounters['admins'] as $adminid => $admin) + { + eval("\$admins.=\"" . getTemplate("settings/updatecounters_row_admin") . "\";"); + } + + eval("echo \"" . getTemplate("settings/updatecounters") . "\";"); + } + else + { + ask_yesno('admin_counters_reallyupdate', $filename, array('page' => $page)); + } +} +elseif($page == 'wipecleartextmailpws' + && $userinfo['change_serversettings'] == '1') +{ + if(isset($_POST['send']) + && $_POST['send'] == 'send') + { + $log->logAction(ADM_ACTION, LOG_WARNING, "wiped all cleartext mail passwords"); + $db->query("UPDATE `" . TABLE_MAIL_USERS . "` SET `password`='' "); + $db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `value`='0' WHERE `settinggroup`='system' AND `varname`='mailpwcleartext'"); + redirectTo('admin_settings.php', array('s' => $s)); + } + else + { + ask_yesno('admin_cleartextmailpws_reallywipe', $filename, array('page' => $page)); + } +} +elseif($page == 'wipequotas' + && $userinfo['change_serversettings'] == '1') +{ + if(isset($_POST['send']) + && $_POST['send'] == 'send') + { + $log->logAction(ADM_ACTION, LOG_WARNING, "wiped all mailquotas"); + + // Set the quota to 0 which means unlimited + + $db->query("UPDATE `" . TABLE_MAIL_USERS . "` SET `quota`='0' "); + $db->query("UPDATE " . TABLE_PANEL_CUSTOMERS . " SET `email_quota_used` = 0"); + redirectTo('admin_settings.php', array('s' => $s)); + } + else + { + ask_yesno('admin_quotas_reallywipe', $filename, array('page' => $page)); + } +} +elseif($page == 'enforcequotas' + && $userinfo['change_serversettings'] == '1') +{ + if(isset($_POST['send']) + && $_POST['send'] == 'send') + { + // Fetch all accounts + + $result = $db->query("SELECT `quota`, `customerid` FROM " . TABLE_MAIL_USERS); + + while($array = $db->fetch_array($result)) + { + $difference = $settings['system']['mail_quota'] - $array['quota']; + $db->query("UPDATE " . TABLE_PANEL_CUSTOMERS . " SET `email_quota_used` = `email_quota_used` + " . (int)$difference . " WHERE `customerid` = '" . $array['customerid'] . "'"); + } + + // Set the new quota + + $db->query("UPDATE `" . TABLE_MAIL_USERS . "` SET `quota`='" . $settings['system']['mail_quota'] . "'"); + + // Update the Customer, if the used quota is bigger than the allowed quota + + $db->query("UPDATE " . TABLE_PANEL_CUSTOMERS . " SET `email_quota` = `email_quota_used` WHERE `email_quota` < `email_quota_used`"); + $log->logAction(ADM_ACTION, LOG_WARNING, 'enforcing mailquota to all customers: ' . $settings['system']['mail_quota'] . ' MB'); + redirectTo('admin_settings.php', array('s' => $s)); + } + else + { + ask_yesno('admin_quotas_reallyenforce', $filename, array('page' => $page)); + } +} + +?> \ No newline at end of file diff --git a/admin_templates.php b/admin_templates.php new file mode 100644 index 0000000000..4eb0ad78f6 --- /dev/null +++ b/admin_templates.php @@ -0,0 +1,379 @@ + + * @author Florian Lippert + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Panel + * @version $Id: admin_templates.php 2692 2009-03-27 18:04:47Z flo $ + */ + +define('AREA', 'admin'); + +/** + * Include our init.php, which manages Sessions, Language etc. + */ + +require ("./lib/init.php"); + +if(isset($_POST['subjectid'])) +{ + $subjectid = intval($_POST['subjectid']); + $mailbodyid = intval($_POST['mailbodyid']); +} +elseif(isset($_GET['subjectid'])) +{ + $subjectid = intval($_GET['subjectid']); + $mailbodyid = intval($_GET['mailbodyid']); +} + +if(isset($_POST['id'])) +{ + $id = intval($_POST['id']); +} +elseif(isset($_GET['id'])) +{ + $id = intval($_GET['id']); +} + +$available_templates = array( + 'createcustomer', + 'pop_success', + 'trafficninetypercent', + 'new_ticket_by_customer', + 'new_ticket_for_customer', + 'new_ticket_by_staff', + 'new_reply_ticket_by_customer', + 'new_reply_ticket_by_staff' +); +$file_templates = array( + 'index_html' +); + +if($action == '') +{ + //email templates + + $log->logAction(ADM_ACTION, LOG_NOTICE, "viewed admin_templates"); + + if($settings['panel']['sendalternativemail'] == 1) + { + $available_templates[] = 'pop_success_alternative'; + } + + $templates_array = array(); + $result = $db->query("SELECT `id`, `language`, `varname` FROM `" . TABLE_PANEL_TEMPLATES . "` WHERE `adminid`='" . (int)$userinfo['adminid'] . "' AND `templategroup`='mails' ORDER BY `language`, `varname`"); + + while($row = $db->fetch_array($result)) + { + $parts = array(); + preg_match('/^([a-z]([a-z_]+[a-z])*)_(mailbody|subject)$/', $row['varname'], $parts); + $templates_array[$row['language']][$parts[1]][$parts[3]] = $row['id']; + } + + $templates = ''; + foreach($templates_array as $language => $template_defs) + { + foreach($template_defs as $action => $email) + { + $subjectid = $email['subject']; + $mailbodyid = $email['mailbody']; + $template = $lng['admin']['templates'][$action]; + eval("\$templates.=\"" . getTemplate("templates/templates_template") . "\";"); + } + } + + $add = false; + + while(list($language_file, $language_name) = each($languages)) + { + $templates_done = array(); + $result = $db->query('SELECT `varname` FROM `' . TABLE_PANEL_TEMPLATES . '` WHERE `adminid`=\'' . (int)$userinfo['adminid'] . '\' AND `language`=\'' . $db->escape($language_name) . '\' AND `templategroup`=\'mails\' AND `varname` LIKE \'%_subject\''); + + while(($row = $db->fetch_array($result)) != false) + { + $templates_done[] = str_replace('_subject', '', $row['varname']); + } + + if(count(array_diff($available_templates, $templates_done)) > 0) + { + $add = true; + } + } + + //filetemplates + + $filetemplates = ''; + $filetemplateadd = false; + $result = $db->query("SELECT `id`, `varname` FROM `" . TABLE_PANEL_TEMPLATES . "` WHERE `adminid`='" . (int)$userinfo['adminid'] . "' AND `templategroup`='files'"); + + if($db->num_rows($result) != count($file_templates))$filetemplateadd = true; + + while($row = $db->fetch_array($result)) + { + eval("\$filetemplates.=\"" . getTemplate("templates/templates_filetemplate") . "\";"); + } + + eval("echo \"" . getTemplate("templates/templates") . "\";"); +} +elseif($action == 'delete' + && $subjectid != 0 + && $mailbodyid != 0) +{ + //email templates + + $result = $db->query_first("SELECT `language`, `varname` FROM `" . TABLE_PANEL_TEMPLATES . "` WHERE `adminid`='" . (int)$userinfo['adminid'] . "' AND `id`='" . (int)$subjectid . "'"); + + if($result['varname'] != '') + { + if(isset($_POST['send']) + && $_POST['send'] == 'send') + { + $db->query("DELETE FROM `" . TABLE_PANEL_TEMPLATES . "` WHERE `adminid`='" . (int)$userinfo['adminid'] . "' AND (`id`='" . (int)$subjectid . "' OR `id`='" . (int)$mailbodyid . "')"); + $log->logAction(ADM_ACTION, LOG_INFO, "deleted template '" . $result['language'] . ' - ' . $lng['admin']['templates'][str_replace('_subject', '', $result['varname'])] . "'"); + redirectTo($filename, Array('page' => $page, 's' => $s)); + } + else + { + ask_yesno('admin_template_reallydelete', $filename, array('subjectid' => $subjectid, 'mailbodyid' => $mailbodyid, 'page' => $page, 'action' => $action), $result['language'] . ' - ' . $lng['admin']['templates'][str_replace('_subject', '', $result['varname'])]); + } + } +} +elseif($action == 'delete' + && $id != 0) +{ + //file templates + + $result = $db->query("SELECT * FROM `" . TABLE_PANEL_TEMPLATES . "` WHERE `adminid`='" . (int)$userinfo['adminid'] . "' AND `id`='" . (int)$id . "'"); + + if($db->num_rows($result) > 0) + { + $row = $db->fetch_array($result); + + if(isset($_POST['send']) + && $_POST['send'] == 'send') + { + $db->query("DELETE FROM `" . TABLE_PANEL_TEMPLATES . "` WHERE `adminid`=" . (int)$userinfo['adminid'] . " AND `id`=" . (int)$id . ""); + $log->logAction(ADM_ACTION, LOG_INFO, "deleted template '" . $lng['admin']['templates'][$row['varname']] . "'"); + redirectTo($filename, Array('page' => $page, 's' => $s)); + } + else + { + ask_yesno('admin_template_reallydelete', $filename, array('id' => $id, 'page' => $page, 'action' => $action), $lng['admin']['templates'][$row['varname']]); + } + } + else + { + standard_error('templatenotfound'); + exit; + } +} +elseif($action == 'add') +{ + if($settings['panel']['sendalternativemail'] == 1) + { + $available_templates[] = 'pop_success_alternative'; + } + + if(isset($_POST['prepare']) + && $_POST['prepare'] == 'prepare') + { + //email templates + + $language = validate($_POST['language'], 'language'); + $templates = array(); + $result = $db->query('SELECT `varname` FROM `' . TABLE_PANEL_TEMPLATES . '` WHERE `adminid`=\'' . (int)$userinfo['adminid'] . '\' AND `language`=\'' . $db->escape($language) . '\' AND `templategroup`=\'mails\' AND `varname` LIKE \'%_subject\''); + + while(($row = $db->fetch_array($result)) != false) + { + $templates[] = str_replace('_subject', '', $row['varname']); + } + + $templates = array_diff($available_templates, $templates); + $template_options = ''; + foreach($templates as $template) + { + $template_options.= makeoption($lng['admin']['templates'][$template], $template, NULL, true); + } + + eval("echo \"" . getTemplate("templates/templates_add_2") . "\";"); + } + elseif(isset($_POST['send']) + && $_POST['send'] == 'send') + { + //email templates + + $language = validate($_POST['language'], 'language', '/^[^\r\n\0"\']+$/', 'nolanguageselect'); + $template = validate($_POST['template'], 'template'); + $subject = validate($_POST['subject'], 'subject', '/^[^\r\n\0]+$/', 'nosubjectcreate'); + $mailbody = validate($_POST['mailbody'], 'mailbody', '/^[^\0]+$/', 'nomailbodycreate'); + $templates = array(); + $result = $db->query('SELECT `varname` FROM `' . TABLE_PANEL_TEMPLATES . '` WHERE `adminid`=\'' . (int)$userinfo['adminid'] . '\' AND `language`=\'' . $db->escape($language) . '\' AND `templategroup`=\'mails\' AND `varname` LIKE \'%_subject\''); + + while(($row = $db->fetch_array($result)) != false) + { + $templates[] = str_replace('_subject', '', $row['varname']); + } + + $templates = array_diff($available_templates, $templates); + + if(array_search($template, $templates) === false) + { + standard_error('templatenotfound'); + } + else + { + $result = $db->query("INSERT INTO `" . TABLE_PANEL_TEMPLATES . "` (`adminid`, `language`, `templategroup`, `varname`, `value`) + VALUES ('" . (int)$userinfo['adminid'] . "', '" . $db->escape($language) . "', 'mails', '" . $db->escape($template) . "_subject','" . $db->escape($subject) . "')"); + $result = $db->query("INSERT INTO `" . TABLE_PANEL_TEMPLATES . "` (`adminid`, `language`, `templategroup`, `varname`, `value`) + VALUES ('" . (int)$userinfo['adminid'] . "', '" . $db->escape($language) . "', 'mails', '" . $db->escape($template) . "_mailbody','" . $db->escape($mailbody) . "')"); + $log->logAction(ADM_ACTION, LOG_INFO, "added template '" . $language . ' - ' . $template . "'"); + redirectTo($filename, Array('page' => $page, 's' => $s)); + } + } + elseif(isset($_POST['filesend']) + && $_POST['filesend'] == 'filesend') + { + //file templates + + $template = validate($_POST['template'], 'template'); + $filecontent = validate($_POST['filecontent'], 'filecontent', '/^[^\0]+$/', 'filecontentnotset'); + $db->query("INSERT INTO `" . TABLE_PANEL_TEMPLATES . "` (`adminid`, `language`, `templategroup`, `varname`, `value`) + VALUES ('" . (int)$userinfo['adminid'] . "', '', 'files', '" . $db->escape($template) . "','" . $db->escape($filecontent) . "')"); + $log->logAction(ADM_ACTION, LOG_INFO, "added template '" . $template . "'"); + redirectTo($filename, Array('page' => $page, 's' => $s)); + } + elseif(!isset($_GET['files'])) + { + //email templates + + $add = false; + $language_options = ''; + + while(list($language_file, $language_name) = each($languages)) + { + $templates = array(); + $result = $db->query('SELECT `varname` FROM `' . TABLE_PANEL_TEMPLATES . '` WHERE `adminid`=\'' . (int)$userinfo['adminid'] . '\' AND `language`=\'' . $db->escape($language_name) . '\' AND `templategroup`=\'mails\' AND `varname` LIKE \'%_subject\''); + + while(($row = $db->fetch_array($result)) != false) + { + $templates[] = str_replace('_subject', '', $row['varname']); + } + + if(count(array_diff($available_templates, $templates)) > 0) + { + $add = true; + $language_options.= makeoption($language_name, $language_file, $userinfo['language'], true); + } + } + + if($add) + { + eval("echo \"" . getTemplate("templates/templates_add_1") . "\";"); + } + else + { + standard_error('alltemplatesdefined'); + exit; + } + } + else + { + //filetemplates + + $result = $db->query("SELECT `id`, `varname` FROM `" . TABLE_PANEL_TEMPLATES . "` WHERE `adminid`='" . (int)$userinfo['adminid'] . "' AND `templategroup`='files'"); + + if($db->num_rows($result) == count($file_templates)) + { + standard_error('alltemplatesdefined'); + exit; + } + else + { + $templatesdefined = array(); + $free_templates = ''; + + while($row = $db->fetch_array($result))$templatesdefined[] = $row['varname']; + foreach(array_diff($file_templates, $templatesdefined) as $template) + { + $free_templates.= makeoption($lng['admin']['templates'][$template], $template, '', true); + } + + eval("echo \"" . getTemplate("templates/filetemplates_add") . "\";"); + } + } +} +elseif($action == 'edit' + && $subjectid != 0 + && $mailbodyid != 0) +{ + //email templates + + $result = $db->query_first("SELECT `language`, `varname`, `value` FROM `" . TABLE_PANEL_TEMPLATES . "` WHERE `adminid`='" . (int)$userinfo['adminid'] . "' AND `id`='" . (int)$subjectid . "'"); + + if($result['varname'] != '') + { + if(isset($_POST['send']) + && $_POST['send'] == 'send') + { + $subject = validate($_POST['subject'], 'subject', '/^[^\r\n\0]+$/', 'nosubjectcreate'); + $mailbody = validate($_POST['mailbody'], 'mailbody', '/^[^\0]+$/', 'nomailbodycreate'); + $db->query("UPDATE `" . TABLE_PANEL_TEMPLATES . "` SET `value`='" . $db->escape($subject) . "' WHERE `adminid`='" . (int)$userinfo['adminid'] . "' AND `id`='" . (int)$subjectid . "'"); + $db->query("UPDATE `" . TABLE_PANEL_TEMPLATES . "` SET `value`='" . $db->escape($mailbody) . "' WHERE `adminid`='" . (int)$userinfo['adminid'] . "' AND `id`='" . (int)$mailbodyid . "'"); + $log->logAction(ADM_ACTION, LOG_INFO, "edited template '" . $result['varname'] . "'"); + redirectTo($filename, Array('page' => $page, 's' => $s)); + } + else + { + $result = htmlentities_array($result); + $template = $lng['admin']['templates'][str_replace('_subject', '', $result['varname'])]; + $subject = $result['value']; + $result = $db->query_first("SELECT `language`, `varname`, `value` FROM `" . TABLE_PANEL_TEMPLATES . "` WHERE `id`='$mailbodyid'"); + $result = htmlentities_array($result); + $mailbody = $result['value']; + eval("echo \"" . getTemplate("templates/templates_edit") . "\";"); + } + } +} +elseif($action == 'edit' + && $id != 0) +{ + //file templates + + $result = $db->query("SELECT * FROM `" . TABLE_PANEL_TEMPLATES . "` WHERE `adminid`='" . (int)$userinfo['adminid'] . "' AND `id`='" . (int)$id . "'"); + + if($db->num_rows($result) > 0) + { + $row = $db->fetch_array($result); + + //filetemplates + + if(isset($_POST['filesend']) + && $_POST['filesend'] == 'filesend') + { + $filecontent = validate($_POST['filecontent'], 'filecontent', '/^[^\0]+$/', 'filecontentnotset'); + $db->query("UPDATE `" . TABLE_PANEL_TEMPLATES . "` SET `value`='" . $db->escape($filecontent) . "' WHERE `adminid`='" . (int)$userinfo['adminid'] . "' AND `id`='" . (int)$id . "'"); + $log->logAction(ADM_ACTION, LOG_INFO, "edited template '" . $row['varname'] . "'"); + redirectTo($filename, Array('page' => $page, 's' => $s)); + } + else + { + eval("echo \"" . getTemplate("templates/filetemplates_edit") . "\";"); + } + } + else + { + standard_error('templatenotfound'); + exit; + } +} + +?> \ No newline at end of file diff --git a/admin_tickets.php b/admin_tickets.php new file mode 100644 index 0000000000..47f4890d3e --- /dev/null +++ b/admin_tickets.php @@ -0,0 +1,802 @@ + + * @license http://www.gnu.org/licenses/gpl.txt + * @package Panel + * @version CVS: $Id: admin_tickets.php 2537 2008-12-12 15:30:38Z flo $ + * @link http://www.nutime.de/ + * @since File available since Release 1.2.18 + */ + +define('AREA', 'admin'); + +/** + * Include our init.php, which manages Sessions, Language etc. + */ + +require ("./lib/init.php"); + +if(isset($_POST['id'])) +{ + $id = intval($_POST['id']); +} +elseif(isset($_GET['id'])) +{ + $id = intval($_GET['id']); +} + +if($page == 'tickets' + && $userinfo['customers'] != '0') +{ + if($action == '') + { + $log->logAction(ADM_ACTION, LOG_NOTICE, "viewed admin_tickets"); + $fields = array( + 'status' => $lng['ticket']['status'], + 'priority' => $lng['ticket']['priority'], + 'lastchange' => $lng['ticket']['lastchange'], + 'ticket_answers' => $lng['ticket']['ticket_answers'], + 'subject' => $lng['ticket']['subject'], + 'lastreplier' => $lng['ticket']['lastreplier'] + ); + $paging = new paging($userinfo, $db, TABLE_PANEL_TICKETS, $fields, $settings['panel']['paging'], $settings['panel']['natsorting']); + $paging->sortfield = 'lastchange'; + $paging->sortorder = 'desc'; + $result = $db->query('SELECT `main`.`id`, `main`.`customerid`, (SELECT COUNT(`sub`.`id`) FROM `' . TABLE_PANEL_TICKETS . '` `sub` WHERE `sub`.`answerto` = `main`.`id`) as `ticket_answers`, `main`.`lastchange`, `main`.`subject`, `main`.`status`, `main`.`lastreplier`, `main`.`priority` FROM `' . TABLE_PANEL_TICKETS . '` as `main` WHERE `main`.`answerto` = "0" AND `archived` = "0" AND `adminid` = "' . (int)$userinfo['adminid'] . '" ' . $paging->getSqlWhere(true) . " " . $paging->getSqlOrderBy() . " " . $paging->getSqlLimit()); + $paging->setEntries($db->num_rows($result)); + $sortcode = $paging->getHtmlSortCode($lng); + $arrowcode = $paging->getHtmlArrowCode($filename . '?page=' . $page . '&s=' . $s); + $searchcode = $paging->getHtmlSearchCode($lng); + $pagingcode = $paging->getHtmlPagingCode($filename . '?page=' . $page . '&s=' . $s); + $ctickets = array(); + + while($row = $db->fetch_array($result)) + { + if(!isset($ctickets[$row['customerid']]) + || !is_array($ctickets[$row['customerid']])) + { + $ctickets[$row['customerid']] = array(); + } + + $ctickets[$row['customerid']][$row['id']] = $row; + } + + if($paging->sortfield == 'customerid' + && $paging->sortorder == 'desc') + { + krsort($ctickets); + } + else + { + ksort($ctickets); + } + + $i = 0; + $count = 0; + $tickets_count = 0; + $tickets = ''; + foreach($ctickets as $cid => $ticketrows) + { + $_cid = 0; + foreach($ticketrows as $row) + { + if($paging->checkDisplay($i)) + { + $row = htmlentities_array($row); + $row['lastchange'] = date("d.m.y H:i", $row['lastchange']); + + if($_cid != $row['customerid']) + { + $cid = $row['customerid']; + $usr = $db->query_first('SELECT `firstname`, `name`, `loginname` FROM `' . TABLE_PANEL_CUSTOMERS . '` + WHERE `customerid` = "' . (int)$cid . '"'); + $customer = $usr['firstname'] . " " . $usr['name'] . " (" . $usr['loginname'] . ")"; + eval("\$tickets.=\"" . getTemplate("ticket/tickets_customer") . "\";"); + } + + $tickets_count++; + + if($row['status'] >= 0 + && $row['status'] <= 2) + { + $reopen = 0; + } + else + { + $reopen = 1; + } + + $row['status'] = ticket::getStatusText($lng, $row['status']); + $row['priority'] = ticket::getPriorityText($lng, $row['priority']); + + if($row['lastreplier'] == '1') + { + $row['lastreplier'] = $lng['ticket']['staff']; + $cananswer = 0; + } + else + { + $row['lastreplier'] = $lng['ticket']['customer']; + $cananswer = 1; + } + + if(strlen($row['subject']) > 20) + { + $row['subject'] = substr($row['subject'], 0, 17) . '...'; + } + + eval("\$tickets.=\"" . getTemplate("ticket/tickets_tickets") . "\";"); + $count++; + $_cid = $row['customerid']; + } + } + + $i++; + } + + eval("echo \"" . getTemplate("ticket/tickets") . "\";"); + } + elseif($action == 'new') + { + if($userinfo['tickets_used'] < $userinfo['tickets'] + || $userinfo['tickets'] == '-1') + { + if(isset($_POST['send']) + && $_POST['send'] == 'send') + { + $newticket = ticket::getInstanceOf($userinfo, $db, $settings, -1); + $newticket->Set('subject', validate($_POST['subject'], 'subject'), true, false); + $newticket->Set('priority', validate($_POST['priority'], 'priority'), true, false); + $newticket->Set('category', validate($_POST['category'], 'category'), true, false); + $newticket->Set('customer', validate($_POST['customer'], 'customer'), true, false); + $newticket->Set('message', validate(str_replace("\r\n", "\n", $_POST['message']), 'message', '/^[^\0]*$/'), true, false); + + if($newticket->Get('subject') == null) + { + standard_error(array('stringisempty', 'mysubject')); + } + elseif($newticket->Get('message') == null) + { + standard_error(array('stringisempty', 'mymessage')); + } + else + { + $now = time(); + $newticket->Set('admin', $userinfo['adminid'], true, true); + $newticket->Set('dt', $now, true, true); + $newticket->Set('lastchange', $now, true, true); + $newticket->Set('ip', $_SERVER['REMOTE_ADDR'], true, true); + $newticket->Set('status', '0', true, true); + $newticket->Set('lastreplier', '1', true, true); + $newticket->Set('by', '1', true, true); + $newticket->Insert(); + $newticket->sendMail((int)$newticket->Get('customer'), 'new_ticket_by_staff_subject', $lng['mails']['new_ticket_by_staff']['subject'], 'new_ticket_by_staff_mailbody', $lng['mails']['new_ticket_by_staff']['mailbody']); + $log->logAction(ADM_ACTION, LOG_NOTICE, "opened a new ticket for customer #" . $newticket->Get('customer') . " - '" . $newticket->Get('subject') . "'"); + redirectTo($filename, Array('page' => $page, 's' => $s)); + } + } + else + { + $categories = ''; + $result = $db->query_first('SELECT `id`, `name` FROM `' . TABLE_PANEL_TICKET_CATS . '` WHERE `adminid` = "' . $userinfo['adminid'] . '" ORDER BY `name` ASC'); + + if(isset($result['name']) + && $result['name'] != '') + { + $result2 = $db->query('SELECT `id`, `name` FROM `' . TABLE_PANEL_TICKET_CATS . '` WHERE `adminid` = "' . $userinfo['adminid'] . '" ORDER BY `name` ASC'); + + while($row = $db->fetch_array($result2)) + { + $categories.= makeoption($row['name'], $row['id']); + } + } + else + { + $categories = makeoption($lng['ticket']['no_cat'], '0'); + } + + $customers = ''; + $result_customers = $db->query("SELECT `customerid`, `loginname`, `name`, `firstname`, `company` FROM `" . TABLE_PANEL_CUSTOMERS . "` " . ($userinfo['customers_see_all'] ? '' : " WHERE `adminid` = '" . (int)$userinfo['adminid'] . "' ") . " ORDER BY `name` ASC"); + + while($row_customer = $db->fetch_array($result_customers)) + { + if($row_customer['company'] == '') + { + $customers.= makeoption($row_customer['name'] . ', ' . $row_customer['firstname'] . ' (' . $row_customer['loginname'] . ')', $row_customer['customerid']); + } + else + { + if($row_customer['name'] != '' + && $row_customer['firstname'] != '') + { + $customers.= makeoption($row_customer['name'] . ', ' . $row_customer['firstname'] . ' | ' . $row_customer['company'] . ' (' . $row_customer['loginname'] . ')', $row_customer['customerid']); + } + else + { + $customers.= makeoption($row_customer['company'] . ' (' . $row_customer['loginname'] . ')', $row_customer['customerid']); + } + } + } + + $priorities = makeoption($lng['ticket']['unf_high'], '1'); + $priorities.= makeoption($lng['ticket']['unf_normal'], '2'); + $priorities.= makeoption($lng['ticket']['unf_low'], '3'); + eval("echo \"" . getTemplate("ticket/tickets_new") . "\";"); + } + } + else + { + standard_error('nomoreticketsavailable'); + } + } + elseif($action == 'answer' + && $id != 0) + { + if(isset($_POST['send']) + && $_POST['send'] == 'send') + { + $replyticket = ticket::getInstanceOf($userinfo, $db, $settings, -1); + $replyticket->Set('subject', validate($_POST['subject'], 'subject'), true, false); + $replyticket->Set('priority', validate($_POST['priority'], 'priority'), true, false); + $replyticket->Set('message', validate(str_replace("\r\n", "\n", $_POST['message']), 'message', '/^[^\0]*$/'), true, false); + + if($replyticket->Get('message') == null) + { + standard_error(array('stringisempty', 'mymessage')); + } + else + { + $now = time(); + $mainticket = ticket::getInstanceOf($userinfo, $db, $settings, (int)$id); + $replyticket->Set('customerid', $mainticket->Get('customer'), true, true); + $replyticket->Set('lastchange', $now, true, true); + $replyticket->Set('ip', $_SERVER['REMOTE_ADDR'], true, true); + $replyticket->Set('status', '1', true, true); + $replyticket->Set('answerto', (int)$id, true, false); + $replyticket->Set('by', '1', true, true); + $replyticket->Insert(); + + // Update priority if changed + + if($replyticket->Get('priority') != $mainticket->Get('priority')) + { + $mainticket->Set('priority', $replyticket->Get('priority'), true); + } + + $mainticket->Set('lastchange', $now); + $mainticket->Set('lastreplier', '1'); + $mainticket->Set('status', '2'); + $mainticket->Update(); + $mainticket->sendMail((int)$mainticket->Get('customer'), 'new_reply_ticket_by_staff_subject', $lng['mails']['new_reply_ticket_by_staff']['subject'], 'new_reply_ticket_by_staff_mailbody', $lng['mails']['new_reply_ticket_by_staff']['mailbody']); + $log->logAction(ADM_ACTION, LOG_NOTICE, "answered ticket '" . $mainticket->Get('subject') . "'"); + redirectTo($filename, Array('page' => $page, 's' => $s)); + } + } + else + { + $ticket_replies = ''; + $mainticket = ticket::getInstanceOf($userinfo, $db, $settings, (int)$id); + $lastchange = date("d.m.Y H:i\h", $mainticket->Get('lastchange')); + $status = ticket::getStatusText($lng, $mainticket->Get('status')); + + if($mainticket->Get('status') >= 0 + && $mainticket->Get('status') <= 2) + { + $isclosed = 0; + } + else + { + $isclosed = 1; + } + + if($mainticket->Get('by') == '1') + { + $by = $lng['ticket']['staff']; + } + else + { + $by = $lng['ticket']['customer']; + } + + $subject = $mainticket->Get('subject'); + $message = $mainticket->Get('message'); + eval("\$ticket_replies.=\"" . getTemplate("ticket/tickets_tickets_main") . "\";"); + $result = $db->query('SELECT `name` FROM `' . TABLE_PANEL_TICKET_CATS . '` + WHERE `id`="' . (int)$mainticket->Get('category') . '"'); + $row = $db->fetch_array($result); + $andere = $db->query('SELECT * FROM `' . TABLE_PANEL_TICKETS . '` WHERE `answerto`="' . (int)$id . '" ORDER BY `lastchange` DESC'); + + while($row2 = $db->fetch_array($andere)) + { + $subticket = ticket::getInstanceOf($userinfo, $db, $settings, (int)$row2['id']); + $lastchange = date("d.m.Y H:i\h", $subticket->Get('lastchange')); + + if($subticket->Get('by') == '1') + { + $by = $lng['ticket']['staff']; + } + else + { + $by = $lng['ticket']['customer']; + } + + $subject = $subticket->Get('subject'); + $message = $subticket->Get('message'); + eval("\$ticket_replies.=\"" . getTemplate("ticket/tickets_tickets_list") . "\";"); + } + + $priorities = makeoption($lng['ticket']['high'], '1', $mainticket->Get('priority'), true, true); + $priorities.= makeoption($lng['ticket']['normal'], '2', $mainticket->Get('priority'), true, true); + $priorities.= makeoption($lng['ticket']['low'], '3', $mainticket->Get('priority'), true, true); + $subject = $mainticket->Get('subject'); + $ticket_replies_count = $db->num_rows($andere) + 1; + + // don't forget the main-ticket! + + eval("echo \"" . getTemplate("ticket/tickets_reply") . "\";"); + } + } + elseif($action == 'close' + && $id != 0) + { + if(isset($_POST['send']) + && $_POST['send'] == 'send') + { + $now = time(); + $mainticket = ticket::getInstanceOf($userinfo, $db, $settings, (int)$id); + $mainticket->Set('lastchange', $now, true, true); + $mainticket->Set('lastreplier', '1', true, true); + $mainticket->Set('status', '3', true, true); + $mainticket->Update(); + $log->logAction(ADM_ACTION, LOG_NOTICE, "closed ticket '" . $mainticket->Get('subject') . "'"); + redirectTo($filename, Array('page' => $page, 's' => $s)); + } + else + { + $mainticket = ticket::getInstanceOf($userinfo, $db, $settings, (int)$id); + ask_yesno('ticket_reallyclose', $filename, array('id' => $id, 'page' => $page, 'action' => $action), $mainticket->Get('subject')); + } + } + elseif($action == 'reopen' + && $id != 0) + { + $now = time(); + $mainticket = ticket::getInstanceOf($userinfo, $db, $settings, (int)$id); + $mainticket->Set('lastchange', $now, true, true); + $mainticket->Set('lastreplier', '1', true, true); + $mainticket->Set('status', '0', true, true); + $mainticket->Update(); + $log->logAction(ADM_ACTION, LOG_NOTICE, "reopened ticket '" . $mainticket->Get('subject') . "'"); + redirectTo($filename, Array('page' => $page, 's' => $s)); + } + elseif($action == 'archive' + && $id != 0) + { + if(isset($_POST['send']) + && $_POST['send'] == 'send') + { + $now = time(); + $mainticket = ticket::getInstanceOf($userinfo, $db, $settings, (int)$id); + $mainticket->Set('lastchange', $now, true, true); + $mainticket->Set('lastreplier', '1', true, true); + $mainticket->Set('status', '3', true, true); + $mainticket->Update(); + $mainticket->Archive(); + $log->logAction(ADM_ACTION, LOG_NOTICE, "archived ticket '" . $mainticket->Get('subject') . "'"); + redirectTo($filename, Array('page' => $page, 's' => $s)); + } + else + { + $mainticket = ticket::getInstanceOf($userinfo, $db, $settings, (int)$id); + ask_yesno('ticket_reallyarchive', $filename, array('id' => $id, 'page' => $page, 'action' => $action), $mainticket->Get('subject')); + } + } + elseif($action == 'delete' + && $id != 0) + { + if(isset($_POST['send']) + && $_POST['send'] == 'send') + { + $mainticket = ticket::getInstanceOf($userinfo, $db, $settings, (int)$id); + $log->logAction(ADM_ACTION, LOG_INFO, "deleted ticket '" . $mainticket->Get('subject') . "'"); + $mainticket->Delete(); + redirectTo($filename, Array('page' => $page, 's' => $s)); + } + else + { + $mainticket = ticket::getInstanceOf($userinfo, $db, $settings, (int)$id); + ask_yesno('ticket_reallydelete', $filename, array('id' => $id, 'page' => $page, 'action' => $action), $mainticket->Get('subject')); + } + } +} +elseif($page == 'categories' + && $userinfo['customers'] != '0') +{ + if($action == '') + { + $log->logAction(ADM_ACTION, LOG_NOTICE, "viewed admin_tickets::categories"); + $fields = array( + 'name' => $lng['ticket']['category'] + ); + $paging = new paging($userinfo, $db, TABLE_PANEL_TICKET_CATS, $fields, $settings['panel']['paging'], $settings['panel']['natsorting']); + $result = $db->query("SELECT `main`.`id`, `main`.`name`, ( + SELECT COUNT(`sub`.`id`) FROM `" . TABLE_PANEL_TICKETS . "` `sub` + WHERE `sub`.`category` = `main`.`id` + AND `sub`.`answerto` = '0' AND `sub`.`adminid` = '" . $userinfo['adminid'] . "') + as `ticketcount`, ( + SELECT COUNT(`sub2`.`id`) FROM `" . TABLE_PANEL_TICKETS . "` `sub2` + WHERE `sub2`.`category` = `main`.`id` + AND `sub2`.`answerto` = '0' + AND (`sub2`.`status` = '0' OR `sub2`.`status` = '1' OR `sub2`.`status` = '2') + AND `sub2`.`adminid` = '" . $userinfo['adminid'] . "' + ) as `ticketcountnotclosed` + FROM `" . TABLE_PANEL_TICKET_CATS . "` `main` WHERE `main`.`adminid` = '" . (int)$userinfo['adminid'] . "' " . $paging->getSqlWhere(true) . " " . $paging->getSqlOrderBy() . " " . $paging->getSqlLimit()); + $paging->setEntries($db->num_rows($result)); + $sortcode = $paging->getHtmlSortCode($lng); + $arrowcode = $paging->getHtmlArrowCode($filename . '?page=' . $page . '&s=' . $s); + $searchcode = $paging->getHtmlSearchCode($lng); + $pagingcode = $paging->getHtmlPagingCode($filename . '?page=' . $page . '&s=' . $s); + $i = 0; + $count = 0; + $ticketcategories = ''; + $categories_count = $db->num_rows($result); + + while($row = $db->fetch_array($result)) + { + if($paging->checkDisplay($i)) + { + $row = htmlentities_array($row); + $closedtickets_count = ($row['ticketcount'] - $row['ticketcountnotclosed']); + eval("\$ticketcategories.=\"" . getTemplate("ticket/tickets_categories") . "\";"); + $count++; + } + + $i++; + } + + eval("echo \"" . getTemplate("ticket/categories") . "\";"); + } + elseif($action == 'addcategory') + { + if(isset($_POST['send']) + && $_POST['send'] == 'send') + { + $category = validate($_POST['category'], 'category'); + + if($category == '') + { + standard_error(array('stringisempty', 'mycategory')); + } + else + { + ticket::addCategory($db, $category, $userinfo['adminid']); + $log->logAction(ADM_ACTION, LOG_INFO, "added ticket-category '" . $category . "'"); + redirectTo($filename, Array('page' => $page, 's' => $s)); + } + } + else + { + eval("echo \"" . getTemplate("ticket/tickets_newcategory") . "\";"); + } + } + elseif($action == 'editcategory' + && $id != 0) + { + if(isset($_POST['send']) + && $_POST['send'] == 'send') + { + $category = validate($_POST['category'], 'category'); + + if($category == '') + { + standard_error(array('stringisempty', 'mycategory')); + } + else + { + ticket::editCategory($db, $category, $id); + $log->logAction(ADM_ACTION, LOG_INFO, "edited ticket-category '" . $category . "'"); + redirectTo($filename, Array('page' => $page, 's' => $s)); + } + } + else + { + $row = $db->query_first('SELECT * FROM `' . TABLE_PANEL_TICKET_CATS . '` WHERE `id` = "' . (int)$id . '"'); + eval("echo \"" . getTemplate("ticket/tickets_editcategory") . "\";"); + } + } + elseif($action == 'deletecategory' + && $id != 0) + { + if(isset($_POST['send']) + && $_POST['send'] == 'send') + { + if(ticket::deleteCategory($db, $id) == false) + { + standard_error('categoryhastickets'); + } + + $log->logAction(ADM_ACTION, LOG_INFO, "deleted ticket-category #" . $id); + redirectTo($filename, Array('page' => $page, 's' => $s)); + } + else + { + $name = ticket::getCategoryName($db, $id); + ask_yesno('ticket_reallydeletecat', $filename, array('id' => $id, 'page' => $page, 'action' => $action), $name); + } + } +} +elseif($page == 'archive' + && $userinfo['customers'] != '0') +{ + if($action == '') + { + $log->logAction(ADM_ACTION, LOG_NOTICE, "viewed admin_tickets::archive"); + + if(isset($_POST['send']) + && $_POST['send'] == 'send') + { + $priority = array(); + $categories = array(); + $subject = validate($_POST['subject'], 'subject'); + $priority[0] = isset($_POST['priority1']) ? $_POST['priority1'] : ''; + $priority[1] = isset($_POST['priority2']) ? $_POST['priority2'] : ''; + $priority[2] = isset($_POST['priority3']) ? $_POST['priority3'] : ''; + $fromdate = validate($_POST['fromdate'], 'fromdate'); + $todate = validate($_POST['todate'], 'todate'); + $message = validate($_POST['message'], 'message'); + $customer = validate($_POST['customer'], 'customer'); + $cat = $db->query_first('SELECT COUNT(`id`) as `ccount` FROM `' . TABLE_PANEL_TICKET_CATS . '`'); + for ($x = 0;$x < $cat['ccount'];$x++) + { + $categories[$x] = isset($_POST['category' . $x]) ? $_POST['category' . $x] : ''; + } + + $query = ticket::getArchiveSearchStatement($subject, $priority, $fromdate, $todate, $message, $customer, $userinfo['adminid'], $categories); + $fields = array( + 'lastchange' => $lng['ticket']['lastchange'], + 'ticket_answers' => $lng['ticket']['ticket_answers'], + 'subject' => $lng['ticket']['subject'], + 'lastreplier' => $lng['ticket']['lastreplier'], + 'priority' => $lng['ticket']['priority'] + ); + $paging = new paging($userinfo, $db, TABLE_PANEL_TICKETS, $fields, $settings['panel']['paging'], $settings['panel']['natsorting']); + $result = $db->query($query . $paging->getSqlWhere(true) . " " . $paging->getSqlOrderBy() . " " . $paging->getSqlLimit()); + $sortcode = $paging->getHtmlSortCode($lng); + $arrowcode = $paging->getHtmlArrowCode($filename . '?page=' . $page . '&s=' . $s); + $searchcode = $paging->getHtmlSearchCode($lng); + $pagingcode = $paging->getHtmlPagingCode($filename . '?page=' . $page . '&s=' . $s); + $ctickets = array(); + + while($row = $db->fetch_array($result)) + { + if(!isset($ctickets[$row['customerid']]) + || !is_array($ctickets[$row['customerid']])) + { + $ctickets[$row['customerid']] = array(); + } + + $ctickets[$row['customerid']][$row['id']] = $row; + } + + if($paging->sortfield == 'customerid' + && $paging->sortorder == 'desc') + { + krsort($ctickets); + } + else + { + ksort($ctickets); + } + + $i = 0; + $count = 0; + $tickets_count = 0; + $tickets = ''; + foreach($ctickets as $cid => $ticketrows) + { + if($paging->sortfield == 'lastchange' + && $paging->sortorder == 'desc') + { + krsort($ticketrows); + } + else + { + ksort($ticketrows); + } + + $_cid = 0; + foreach($ticketrows as $ticket) + { + if($paging->checkDisplay($i)) + { + $ticket = htmlentities_array($ticket); + $ticket['lastchange'] = date("d.m.y H:i", $ticket['lastchange']); + + if($_cid != $ticket['customerid']) + { + $cid = $ticket['customerid']; + $usr = $db->query_first('SELECT `firstname`, `name`, `loginname` FROM `' . TABLE_PANEL_CUSTOMERS . '` + WHERE `customerid` = "' . (int)$cid . '"'); + $customer = $usr['firstname'] . " " . $usr['name'] . " (" . $usr['loginname'] . ")"; + eval("\$tickets.=\"" . getTemplate("ticket/tickets_customer") . "\";"); + } + + $tickets_count++; + $ticket['priority'] = ticket::getPriorityText($lng, $ticket['priority']); + + if($ticket['lastreplier'] == '1') + { + $ticket['lastreplier'] = $lng['ticket']['staff']; + } + else + { + $ticket['lastreplier'] = $lng['ticket']['customer']; + } + + if(strlen($ticket['subject']) > 20) + { + $ticket['subject'] = substr($ticket['subject'], 0, 17) . '...'; + } + + eval("\$tickets.=\"" . getTemplate("ticket/archived_tickets") . "\";"); + $count++; + $_cid = $ticket['customerid']; + } + } + + $i++; + } + + eval("echo \"" . getTemplate("ticket/archivesearch") . "\";"); + } + else + { + $archived = array(); + $archived = ticket::getLastArchived($db, 6, $userinfo['adminid']); + $tickets = ''; + + if($archived !== false) + { + foreach($archived as $id => $ticket) + { + $ticket['lastchange'] = date("d.m.y H:i", $ticket['lastchange']); + $ticket['priority'] = ticket::getPriorityText($lng, $ticket['priority']); + + if($ticket['lastreplier'] == '1') + { + $ticket['lastreplier'] = $lng['ticket']['staff']; + } + else + { + $ticket['lastreplier'] = $lng['ticket']['customer']; + } + + if(strlen($ticket['subject']) > 20) + { + $ticket['subject'] = substr($ticket['subject'], 0, 17) . '...'; + } + + eval("\$tickets.=\"" . getTemplate("ticket/archived_tickets") . "\";"); + } + } + + $priorities_options = makecheckbox('priority1', $lng['ticket']['unf_high'], '1'); + $priorities_options.= makecheckbox('priority2', $lng['ticket']['unf_normal'], '2'); + $priorities_options.= makecheckbox('priority3', $lng['ticket']['unf_low'], '3'); + $category_options = ''; + $ccount = 0; + $result = $db->query('SELECT * FROM `' . TABLE_PANEL_TICKET_CATS . '` ORDER BY `name` ASC'); + + while($row = $db->fetch_array($result)) + { + $category_options.= makecheckbox('category' . $ccount, $row['name'], $row['id'], true); + $ccount++; + } + + $customers = makeoption($lng['ticket']['nocustomer'], '-1', '-1'); + $result = $db->query_first('SELECT `customerid` FROM `' . TABLE_PANEL_CUSTOMERS . '` ' . ($userinfo['customers_see_all'] ? '' : ' WHERE `adminid` = "' . (int)$userinfo['adminid'] . '" ') . 'ORDER BY `name` ASC'); + + if(isset($result['customerid']) + && $result['customerid'] != '') + { + $result2 = $db->query('SELECT `customerid`, `loginname`, `firstname`, `name` + FROM `' . TABLE_PANEL_CUSTOMERS . '` ' . ($userinfo['customers_see_all'] ? '' : ' WHERE `adminid` = "' . (int)$userinfo['adminid'] . '" ') . ' ORDER BY `name` ASC'); + + while($row = $db->fetch_array($result2)) + { + $customers.= makeoption($row['name'] . ', ' . $row['firstname'] . ' (' . $row['loginname'] . ')', $row['customerid']); + } + } + + eval("echo \"" . getTemplate("ticket/archive") . "\";"); + } + } + elseif($action == 'view' + && $id != 0) + { + $log->logAction(ADM_ACTION, LOG_NOTICE, "viewed archived-ticket #" . $id); + $ticket_replies = ''; + $mainticket = ticket::getInstanceOf($userinfo, $db, $settings, (int)$id); + $lastchange = date("d.m.Y H:i\h", $mainticket->Get('lastchange')); + $status = ticket::getStatusText($lng, $mainticket->Get('status')); + $isclosed = 1; + + if($mainticket->Get('by') == '1') + { + $by = $lng['ticket']['staff']; + } + else + { + $by = $lng['ticket']['customer']; + } + + $subject = $mainticket->Get('subject'); + $message = $mainticket->Get('message'); + eval("\$ticket_replies.=\"" . getTemplate("ticket/tickets_tickets_main") . "\";"); + $result = $db->query('SELECT `name` FROM `' . TABLE_PANEL_TICKET_CATS . '` + WHERE `id`="' . (int)$mainticket->Get('category') . '"'); + $row = $db->fetch_array($result); + $andere = $db->query('SELECT * FROM `' . TABLE_PANEL_TICKETS . '` WHERE `answerto`="' . (int)$id . '"'); + + while($row2 = $db->fetch_array($andere)) + { + $subticket = ticket::getInstanceOf($userinfo, $db, $settings, (int)$row2['id']); + $lastchange = date("d.m.Y H:i\h", $subticket->Get('lastchange')); + + if($subticket->Get('by') == '1') + { + $by = $lng['ticket']['staff']; + } + else + { + $by = $lng['ticket']['customer']; + } + + $subject = $subticket->Get('subject'); + $message = $subticket->Get('message'); + eval("\$ticket_replies.=\"" . getTemplate("ticket/tickets_tickets_list") . "\";"); + } + + $priorities = makeoption($lng['ticket']['high'], '1', $mainticket->Get('priority'), true, true); + $priorities.= makeoption($lng['ticket']['normal'], '2', $mainticket->Get('priority'), true, true); + $priorities.= makeoption($lng['ticket']['low'], '3', $mainticket->Get('priority'), true, true); + $subject = $mainticket->Get('subject'); + $ticket_replies_count = $db->num_rows($andere) + 1; + + // don't forget the main-ticket! + + eval("echo \"" . getTemplate("ticket/tickets_view") . "\";"); + } + elseif($action == 'delete' + && $id != 0) + { + if(isset($_POST['send']) + && $_POST['send'] == 'send') + { + $mainticket = ticket::getInstanceOf($userinfo, $db, $settings, (int)$id); + $log->logAction(ADM_ACTION, LOG_INFO, "deleted archived ticket '" . $mainticket->Get('subject') . "'"); + $mainticket->Delete(); + redirectTo($filename, Array('page' => $page, 's' => $s)); + } + else + { + $mainticket = ticket::getInstanceOf($userinfo, $db, $settings, (int)$id); + ask_yesno('ticket_reallydelete', $filename, array('id' => $id, 'page' => $page, 'action' => $action), $mainticket->Get('subject')); + } + } +} + +?> diff --git a/customer_aps.php b/customer_aps.php new file mode 100644 index 0000000000..d380122e53 --- /dev/null +++ b/customer_aps.php @@ -0,0 +1,34 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Panel + * @version $Id: customer_aps.php 2692 2009-03-27 18:04:47Z flo $ + * @todo + */ + +// Required code + +define('AREA', 'customer'); +require ("./lib/init.php"); +require ("./lib/class_apsparser.php"); +$Id = 0; + +if(isset($_GET['id']))$Id = (int)$_GET['id']; + +if(isset($_POST['id']))$Id = (int)$_POST['id']; +eval("echo \"" . getTemplate("aps/header") . "\";"); +$Aps = new ApsParser($userinfo, $settings, $db); +$Aps->MainHandler($action); +eval("echo \"" . getTemplate("aps/footer") . "\";"); + +?> \ No newline at end of file diff --git a/customer_autoresponder.php b/customer_autoresponder.php new file mode 100644 index 0000000000..6c4c9d620f --- /dev/null +++ b/customer_autoresponder.php @@ -0,0 +1,216 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Panel + * @version $Id: customer_autoresponder.php 2692 2009-03-27 18:04:47Z flo $ + * @todo - add function to select periods when responders are active + */ + +// Required code + +define('AREA', 'customer'); +require ("./lib/init.php"); + +// Create new autoresponder + +if($action == "add") +{ + if(isset($_POST['send']) + && $_POST['send'] == 'send') + { + $account = trim($_POST['account']); + $subject = trim($_POST['subject']); + $message = trim($_POST['message']); + + if(empty($account) + || empty($subject) + || empty($message)) + { + standard_error('missingfields'); + } + + // Does account exist? + + $result = $db->query("SELECT `email` FROM `" . TABLE_MAIL_USERS . "` WHERE `customerid` = '" . (int)$userinfo['customerid'] . "' AND `email` = '" . $db->escape($account) . "' LIMIT 0,1"); + + if($db->num_rows($result) == 0) + { + standard_error('accountnotexisting'); + } + + // Does autoresponder exist? + + $result = $db->query("SELECT `email` FROM `" . TABLE_MAIL_AUTORESPONDER . "` WHERE `customerid` = '" . (int)$userinfo['customerid'] . "' AND `email` = '" . $db->escape($account) . "' LIMIT 0,1"); + + if($db->num_rows($result) == 1) + { + standard_error('autoresponderalreadyexists'); + } + + $db->query("INSERT INTO `" . TABLE_MAIL_AUTORESPONDER . "` + SET `email` = '" . $db->escape($account) . "', + `message` = '" . $db->escape($message) . "', + `enabled` = '" . (int)$_POST['active'] . "', + `subject` = '" . $db->escape($subject) . "', + `customerid` = '" . $db->escape((int)$userinfo['customerid']) . "' + "); + redirectTo($filename, Array('s' => $s)); + } + + // Get accounts + + $result = $db->query("SELECT `email` FROM `" . TABLE_MAIL_USERS . "` WHERE `customerid` = '" . (int)$userinfo['customerid'] . "' AND `email` NOT IN (SELECT `email` FROM `" . TABLE_MAIL_AUTORESPONDER . "`) ORDER BY email ASC"); + + if($db->num_rows($result) == 0) + { + standard_error('noemailaccount'); + } + + $accounts = ''; + + while($row = $db->fetch_array($result)) + { + $accounts.= ""; + } + + eval("echo \"" . getTemplate("email/autoresponder_add") . "\";"); +} + +// Edit autoresponder + +else + +if($action == "edit") +{ + if(isset($_POST['send']) + && $_POST['send'] == 'send') + { + $account = trim($_POST['account']); + $subject = trim($_POST['subject']); + $message = trim($_POST['message']); + + if(empty($account) + || empty($subject) + || empty($message)) + { + standard_error('missingfields'); + } + + // Does account exist? + + $result = $db->query("SELECT `email` FROM `" . TABLE_MAIL_USERS . "` WHERE `customerid` = '" . (int)$userinfo['customerid'] . "' AND `email` = '" . $db->escape($account) . "' LIMIT 0,1"); + + if($db->num_rows($result) == 0) + { + standard_error('accountnotexisting'); + } + + // Does autoresponder exist? + + $result = $db->query("SELECT `email` FROM `" . TABLE_MAIL_AUTORESPONDER . "` WHERE `customerid` = '" . (int)$userinfo['customerid'] . "' AND `email` = '" . $db->escape($account) . "' LIMIT 0,1"); + + if($db->num_rows($result) == 0) + { + standard_error('invalidautoresponder'); + } + + $ResponderActive = 0; + + if(isset($_POST['active']) + && $_POST['active'] == '1') + { + $ResponderActive = 1; + } + + $db->query("UPDATE `" . TABLE_MAIL_AUTORESPONDER . "` + SET `message` = '" . $db->escape($message) . "', + `enabled` = '" . (int)$ResponderActive . "', + `subject` = '" . $db->escape($subject) . "' + WHERE `email` = '" . $db->escape($account) . "' + AND `customerid` = '" . $db->escape((int)$userinfo['customerid']) . "' + "); + redirectTo($filename, Array('s' => $s)); + } + + $email = trim(htmlspecialchars($_GET['email'])); + + // Get account data + + $result = $db->query("SELECT * FROM `" . TABLE_MAIL_AUTORESPONDER . "` WHERE `customerid` = '" . (int)$userinfo['customerid'] . "' AND `email` = '" . $db->escape($email) . "' LIMIT 0,1"); + + if($db->num_rows($result) == 0) + { + standard_error('invalidautoresponder'); + } + + $row = $db->fetch_array($result); + $subject = htmlspecialchars($row['subject']); + $message = htmlspecialchars($row['message']); + $checked = ''; + + if($row['enabled'] == 1) + { + $checked = "checked=\"checked\""; + } + + eval("echo \"" . getTemplate("email/autoresponder_edit") . "\";"); +} + +// Delete autoresponder + +else + +if($action == "delete") +{ + if(isset($_POST['send']) + && $_POST['send'] == 'send') + { + $account = trim($_POST['account']); + + // Does autoresponder exist? + + $result = $db->query("SELECT `email` FROM `" . TABLE_MAIL_AUTORESPONDER . "` WHERE `customerid` = '" . (int)$userinfo['customerid'] . "' AND `email` = '" . $db->escape($account) . "' LIMIT 0,1"); + + if($db->num_rows($result) == 0) + { + standard_error('invalidautoresponder'); + } + + $db->query("DELETE FROM `" . TABLE_MAIL_AUTORESPONDER . "` + WHERE `email` = '" . $db->escape($account) . "' + AND `customerid` = '" . $db->escape((int)$userinfo['customerid']) . "' + "); + redirectTo($filename, Array('s' => $s)); + } + + $email = trim(htmlspecialchars($_GET['email'])); + ask_yesno('autoresponderdelete', $filename, array('action' => $action, 'account' => $email)); +} + +// List existing autoresponders + +else +{ + $autoresponder = ''; + $result = $db->query("SELECT * FROM `" . TABLE_MAIL_AUTORESPONDER . "` WHERE `customerid` = '" . (int)$userinfo['customerid'] . "' ORDER BY email ASC"); + + while($row = $db->fetch_array($result)) + { + eval("\$autoresponder.=\"" . getTemplate("email/autoresponder_autoresponder") . "\";"); + } + + eval("echo \"" . getTemplate("email/autoresponder") . "\";"); +} + +?> \ No newline at end of file diff --git a/customer_domains.php b/customer_domains.php new file mode 100644 index 0000000000..956c192bb2 --- /dev/null +++ b/customer_domains.php @@ -0,0 +1,492 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Panel + * @version $Id: customer_domains.php 2713 2009-04-17 08:55:53Z flo $ + */ + +define('AREA', 'customer'); + +/** + * Include our init.php, which manages Sessions, Language etc. + */ + +require ("./lib/init.php"); + +if(isset($_POST['id'])) +{ + $id = intval($_POST['id']); +} +elseif(isset($_GET['id'])) +{ + $id = intval($_GET['id']); +} + +if($page == 'overview') +{ + $log->logAction(USR_ACTION, LOG_NOTICE, "viewed customer_domains"); + eval("echo \"" . getTemplate("domains/domains") . "\";"); +} +elseif($page == 'domains') +{ + if($action == '') + { + $log->logAction(USR_ACTION, LOG_NOTICE, "viewed customer_domains::domains"); + $fields = array( + 'd.domain' => $lng['domains']['domainname'], + 'd.documentroot' => $lng['panel']['path'], + 'd.aliasdomain' => $lng['domains']['aliasdomain'] + ); + $paging = new paging($userinfo, $db, TABLE_PANEL_DOMAINS, $fields, $settings['panel']['paging'], $settings['panel']['natsorting']); + $result = $db->query("SELECT `d`.`id`, " . " `d`.`customerid`, " . " `d`.`domain`, " . " `d`.`documentroot`, " . " `d`.`isemaildomain`, " . " `d`.`caneditdomain`, " . " `d`.`iswildcarddomain`, " . " `d`.`parentdomainid`, " . " `ad`.`id` AS `aliasdomainid`, " . " `ad`.`domain` AS `aliasdomain`, " . " `da`.`id` AS `domainaliasid`, " . " `da`.`domain` AS `domainalias` " . "FROM `" . TABLE_PANEL_DOMAINS . "` `d` " . "LEFT JOIN `" . TABLE_PANEL_DOMAINS . "` `ad` ON `d`.`aliasdomain`=`ad`.`id` " . "LEFT JOIN `" . TABLE_PANEL_DOMAINS . "` `da` ON `da`.`aliasdomain`=`d`.`id` " . "WHERE `d`.`customerid`='" . (int)$userinfo['customerid'] . "' " . " AND `d`.`email_only`='0' AND `d`.`id` <> " . (int)$userinfo['standardsubdomain'] . " " . $paging->getSqlWhere(true) . " " . $paging->getSqlOrderBy() . " " . $paging->getSqlLimit()); + $paging->setEntries($db->num_rows($result)); + $sortcode = $paging->getHtmlSortCode($lng); + $arrowcode = $paging->getHtmlArrowCode($filename . '?page=' . $page . '&s=' . $s); + $searchcode = $paging->getHtmlSearchCode($lng); + $pagingcode = $paging->getHtmlPagingCode($filename . '?page=' . $page . '&s=' . $s); + $domains = ''; + $parentdomains_count = 0; + $domains_count = 0; + $domain_array = array(); + + while($row = $db->fetch_array($result)) + { + $row['domain'] = $idna_convert->decode($row['domain']); + $row['aliasdomain'] = $idna_convert->decode($row['aliasdomain']); + $row['domainalias'] = $idna_convert->decode($row['domainalias']); + + if($row['parentdomainid'] == '0' + && $row['iswildcarddomain'] != '1' + && $row['caneditdomain'] == '1') + { + $parentdomains_count++; + } + + $domains_count++; + $domainparts = explode('.', $row['domain']); + $domainparts = array_reverse($domainparts); + $sortkey = ''; + foreach($domainparts as $key => $part) + { + $sortkey.= $part . '.'; + } + + $domain_array[$sortkey] = $row; + } + + ksort($domain_array); + $domain_id_array = array(); + foreach($domain_array as $sortkey => $row) + { + $domain_id_array[$row['id']] = $sortkey; + } + + $domain_sort_array = array(); + foreach($domain_array as $sortkey => $row) + { + if($row['parentdomainid'] == 0) + { + $domain_sort_array[$sortkey][$sortkey] = $row; + } + else + { + $domain_sort_array[$domain_id_array[$row['parentdomainid']]][$sortkey] = $row; + } + } + + $domain_array = array(); + + if($paging->sortfield == 'd.domain' + && $paging->sortorder == 'asc') + { + ksort($domain_sort_array); + } + elseif($paging->sortfield == 'd.domain' + && $paging->sortorder == 'desc') + { + krsort($domain_sort_array); + } + + $i = 0; + foreach($domain_sort_array as $sortkey => $domain_array) + { + if($paging->checkDisplay($i)) + { + $row = htmlentities_array($domain_array[$sortkey]); + eval("\$domains.=\"" . getTemplate("domains/domains_delimiter") . "\";"); + + if($paging->sortfield == 'd.domain' + && $paging->sortorder == 'asc') + { + ksort($domain_array); + } + elseif($paging->sortfield == 'd.domain' + && $paging->sortorder == 'desc') + { + krsort($domain_array); + } + + foreach($domain_array as $row) + { + if(strpos($row['documentroot'], $userinfo['documentroot']) === 0) + { + $row['documentroot'] = makeCorrectDir(substr($row['documentroot'], strlen($userinfo['documentroot']))); + } + + $row = htmlentities_array($row); + eval("\$domains.=\"" . getTemplate("domains/domains_domain") . "\";"); + } + } + + $i+= count($domain_array); + } + + eval("echo \"" . getTemplate("domains/domainlist") . "\";"); + } + elseif($action == 'delete' + && $id != 0) + { + $result = $db->query_first("SELECT `id`, `customerid`, `domain`, `documentroot`, `isemaildomain`, `parentdomainid` FROM `" . TABLE_PANEL_DOMAINS . "` WHERE `customerid`='" . (int)$userinfo['customerid'] . "' AND `id`='" . (int)$id . "'"); + $alias_check = $db->query_first('SELECT COUNT(`id`) AS `count` FROM `' . TABLE_PANEL_DOMAINS . '` WHERE `aliasdomain`=\'' . (int)$id . '\''); + + if(isset($result['parentdomainid']) + && $result['parentdomainid'] != '0' + && $alias_check['count'] == 0) + { + if(isset($_POST['send']) + && $_POST['send'] == 'send') + { + if($result['isemaildomain'] == '1') + { + $emails = $db->query_first('SELECT COUNT(`id`) AS `count` FROM `' . TABLE_MAIL_VIRTUAL . '` WHERE `customerid`=\'' . (int)$userinfo['customerid'] . '\' AND `domainid`=\'' . (int)$id . '\''); + + if($emails['count'] != '0') + { + standard_error('domains_cantdeletedomainwithemail'); + } + } + + $log->logAction(USR_ACTION, LOG_INFO, "deleted subdomain '" . $idna_convert->decode($result['domain']) . "'"); + $result = $db->query("DELETE FROM `" . TABLE_PANEL_DOMAINS . "` WHERE `customerid`='" . (int)$userinfo['customerid'] . "' AND `id`='" . (int)$id . "'"); + $result = $db->query("UPDATE `" . TABLE_PANEL_CUSTOMERS . "` SET `subdomains_used`=`subdomains_used`-1 WHERE `customerid`='" . (int)$userinfo['customerid'] . "'"); + inserttask('1'); + inserttask('4'); + redirectTo($filename, Array('page' => $page, 's' => $s)); + } + else + { + ask_yesno('domains_reallydelete', $filename, array('id' => $id, 'page' => $page, 'action' => $action), $idna_convert->decode($result['domain'])); + } + } + else + { + standard_error('domains_cantdeletemaindomain'); + } + } + elseif($action == 'add') + { + if($userinfo['subdomains_used'] < $userinfo['subdomains'] + || $userinfo['subdomains'] == '-1') + { + if(isset($_POST['send']) + && $_POST['send'] == 'send') + { + $subdomain = $idna_convert->encode(preg_replace(Array('/\:(\d)+$/', '/^https?\:\/\//'), '', validate($_POST['subdomain'], 'subdomain', '', 'subdomainiswrong'))); + $domain = $idna_convert->encode($_POST['domain']); + $domain_check = $db->query_first("SELECT * FROM `" . TABLE_PANEL_DOMAINS . "` WHERE `domain`='" . $db->escape($domain) . "' AND `customerid`='" . (int)$userinfo['customerid'] . "' AND `parentdomainid`='0' AND `email_only`='0' AND `iswildcarddomain`='0' AND `caneditdomain`='1' "); + $completedomain = $subdomain . '.' . $domain; + $completedomain_check = $db->query_first("SELECT * FROM `" . TABLE_PANEL_DOMAINS . "` WHERE `domain`='" . $db->escape($completedomain) . "' AND `customerid`='" . (int)$userinfo['customerid'] . "' AND `email_only`='0' AND `caneditdomain` = '1'"); + $aliasdomain = intval($_POST['alias']); + $aliasdomain_check = array( + 'id' => 0 + ); + + if($aliasdomain != 0) + { + $aliasdomain_check = $db->query_first('SELECT `id` FROM `' . TABLE_PANEL_DOMAINS . '` `d`,`' . TABLE_PANEL_CUSTOMERS . '` `c` WHERE `d`.`customerid`=\'' . (int)$userinfo['customerid'] . '\' AND `d`.`aliasdomain` IS NULL AND `d`.`id`<>`c`.`standardsubdomain` AND `c`.`customerid`=\'' . (int)$userinfo['customerid'] . '\' AND `d`.`id`=\'' . (int)$aliasdomain . '\''); + } + + if(isset($_POST['url']) + && $_POST['url'] != '' + && validateUrl($idna_convert->encode($_POST['url']))) + { + $path = $_POST['url']; + } + else + { + $path = validate($_POST['path'], 'path'); + } + + if(!preg_match('/^https?\:\/\//', $path) + || !validateUrl($idna_convert->encode($path))) + { + $path = $userinfo['documentroot'] . '/' . $path; + $path = makeCorrectDir($path); + } + + if(isset($_POST['openbasedir_path']) + && $_POST['openbasedir_path'] == '1') + { + $openbasedir_path = '1'; + } + else + { + $openbasedir_path = '0'; + } + + if(isset($_POST['ssl_redirect']) + && $_POST['ssl_redirect'] == '1') + { + $ssl_redirect = '1'; + } + else + { + $ssl_redirect = '0'; + } + + if($path == '') + { + standard_error('patherror'); + } + elseif($subdomain == '') + { + standard_error(array('stringisempty', 'domainname')); + } + elseif($subdomain == 'www' && $domain_check['wwwserveralias'] == '1') + { + standard_error('wwwnotallowed'); + } + elseif($domain == '') + { + standard_error('domaincantbeempty'); + } + elseif(strtolower($completedomain_check['domain']) == strtolower($completedomain)) + { + standard_error('domainexistalready', $completedomain); + } + elseif(strtolower($domain_check['domain']) != strtolower($domain)) + { + standard_error('maindomainnonexist', $domain); + } + elseif($aliasdomain_check['id'] != $aliasdomain) + { + standard_error('domainisaliasorothercustomer'); + } + else + { + $result = $db->query("INSERT INTO `" . TABLE_PANEL_DOMAINS . "` (`customerid`, `domain`, `documentroot`, `ipandport`, `aliasdomain`, `parentdomainid`, `isemaildomain`, `openbasedir`, `openbasedir_path`, `safemode`, `speciallogfile`, `specialsettings`, `ssl_redirect`) VALUES ('" . (int)$userinfo['customerid'] . "', '" . $db->escape($completedomain) . "', '" . $db->escape($path) . "', '" . $db->escape($domain_check['ipandport']) . "', " . (($aliasdomain != 0) ? "'" . $db->escape($aliasdomain) . "'" : "NULL") . ", '" . (int)$domain_check['id'] . "', '" . ($domain_check['subcanemaildomain'] == '3' ? '1' : '0') . "', '" . $db->escape($domain_check['openbasedir']) . "', '" . $db->escape($openbasedir_path) . "', '" . $db->escape($domain_check['safemode']) . "', '" . $db->escape($domain_check['speciallogfile']) . "', '" . $db->escape($domain_check['specialsettings']) . "', '" . $ssl_redirect . "')"); + $result = $db->query("UPDATE `" . TABLE_PANEL_CUSTOMERS . "` SET `subdomains_used`=`subdomains_used`+1 WHERE `customerid`='" . (int)$userinfo['customerid'] . "'"); + $log->logAction(USR_ACTION, LOG_INFO, "added subdomain '" . $completedomain . "'"); + inserttask('1'); + inserttask('4'); + redirectTo($filename, Array('page' => $page, 's' => $s)); + } + } + else + { + $result = $db->query("SELECT `id`, `domain`, `documentroot`, `ssl_redirect`,`isemaildomain` FROM `" . TABLE_PANEL_DOMAINS . "` WHERE `customerid`='" . (int)$userinfo['customerid'] . "' AND `parentdomainid`='0' AND `email_only`='0' AND `iswildcarddomain`='0' AND `caneditdomain`='1' ORDER BY `domain` ASC"); + $domains = ''; + + while($row = $db->fetch_array($result)) + { + $domains.= makeoption($idna_convert->decode($row['domain']), $row['domain']); + } + + $aliasdomains = makeoption($lng['domains']['noaliasdomain'], 0, NULL, true); + $result_domains = $db->query("SELECT `d`.`id`, `d`.`domain` FROM `" . TABLE_PANEL_DOMAINS . "` `d`, `" . TABLE_PANEL_CUSTOMERS . "` `c` WHERE `d`.`aliasdomain` IS NULL AND `d`.`id` <> `c`.`standardsubdomain` AND `d`.`customerid`=`c`.`customerid` AND `d`.`email_only`='0' AND `d`.`customerid`=" . (int)$userinfo['customerid'] . " ORDER BY `d`.`domain` ASC"); + + while($row_domain = $db->fetch_array($result_domains)) + { + $aliasdomains.= makeoption($idna_convert->decode($row_domain['domain']), $row_domain['id']); + } + + $ssl_redirect = makeyesno('ssl_redirect', '1', '0', $result['ssl_redirect']); + $openbasedir = makeoption($lng['domain']['docroot'], 0, NULL, true) . makeoption($lng['domain']['homedir'], 1, NULL, true); + $pathSelect = makePathfield($userinfo['documentroot'], $userinfo['guid'], $userinfo['guid'], $settings['panel']['pathedit']); + eval("echo \"" . getTemplate("domains/domains_add") . "\";"); + } + } + } + elseif($action == 'edit' + && $id != 0) + { + $result = $db->query_first("SELECT `d`.`id`, `d`.`customerid`, `d`.`domain`, `d`.`documentroot`, `d`.`isemaildomain`, `d`.`iswildcarddomain`, `d`.`parentdomainid`, `d`.`ssl_redirect`, `d`.`aliasdomain`, `d`.`openbasedir_path` ,`pd`.`subcanemaildomain` FROM `" . TABLE_PANEL_DOMAINS . "` `d`, `" . TABLE_PANEL_DOMAINS . "` `pd` WHERE `d`.`customerid`='" . (int)$userinfo['customerid'] . "' AND `d`.`id`='" . (int)$id . "' AND ((`d`.`parentdomainid`!='0' AND `pd`.`id`=`d`.`parentdomainid`) OR (`d`.`parentdomainid`='0' AND `pd`.`id`=`d`.`id`)) AND `d`.`caneditdomain`='1'"); + $alias_check = $db->query_first('SELECT COUNT(`id`) AS count FROM `' . TABLE_PANEL_DOMAINS . '` WHERE `aliasdomain`=\'' . (int)$result['id'] . '\''); + $alias_check = $alias_check['count']; + + if(isset($result['customerid']) + && $result['customerid'] == $userinfo['customerid']) + { + if(isset($_POST['send']) + && $_POST['send'] == 'send') + { + if(isset($_POST['url']) + && $_POST['url'] != '' + && validateUrl($idna_convert->encode($_POST['url']))) + { + $path = $_POST['url']; + } + else + { + $path = validate($_POST['path'], 'path'); + } + + if(!preg_match('/^https?\:\/\//', $path) + || !validateUrl($idna_convert->encode($path))) + { + $path = $userinfo['documentroot'] . '/' . $path; + $path = makeCorrectDir($path); + } + + $aliasdomain = intval($_POST['alias']); + + if(isset($_POST['iswildcarddomain']) + && $_POST['iswildcarddomain'] == '1' + && $result['parentdomainid'] == '0' + && $userinfo['subdomains'] != '0') + { + $wildcarddomaincheck = $db->query("SELECT `id` FROM `" . TABLE_PANEL_DOMAINS . "` WHERE `parentdomainid` = '" . (int)$result['id'] . "'"); + + if($db->num_rows($wildcarddomaincheck) != '0') + { + standard_error('firstdeleteallsubdomains'); + exit; + } + + $iswildcarddomain = '1'; + } + else + { + $iswildcarddomain = '0'; + } + + if($result['parentdomainid'] != '0' + && ($result['subcanemaildomain'] == '1' || $result['subcanemaildomain'] == '2') + && isset($_POST['isemaildomain'])) + { + $isemaildomain = intval($_POST['isemaildomain']); + } + else + { + $isemaildomain = $result['isemaildomain']; + } + + $aliasdomain_check = array( + 'id' => 0 + ); + + if($aliasdomain != 0) + { + $aliasdomain_check = $db->query_first('SELECT `id` FROM `' . TABLE_PANEL_DOMAINS . '` `d`,`' . TABLE_PANEL_CUSTOMERS . '` `c` WHERE `d`.`customerid`=\'' . (int)$result['customerid'] . '\' AND `d`.`aliasdomain` IS NULL AND `d`.`id`<>`c`.`standardsubdomain` AND `c`.`customerid`=\'' . (int)$result['customerid'] . '\' AND `d`.`id`=\'' . (int)$aliasdomain . '\''); + } + + if($aliasdomain_check['id'] != $aliasdomain) + { + standard_error('domainisaliasorothercustomer'); + } + + if(isset($_POST['openbasedir_path']) + && $_POST['openbasedir_path'] == '1') + { + $openbasedir_path = '1'; + } + else + { + $openbasedir_path = '0'; + } + + if(isset($_POST['ssl_redirect']) + && $_POST['ssl_redirect'] == '1') + { + $ssl_redirect = '1'; + } + else + { + $ssl_redirect = '0'; + } + + if($path == '') + { + standard_error('patherror'); + } + else + { + if(($result['isemaildomain'] == '1') + && ($isemaildomain == '0')) + { + $db->query("DELETE FROM `" . TABLE_MAIL_USERS . "` WHERE `customerid`='" . (int)$userinfo['customerid'] . "' AND `domainid`='" . (int)$id . "'"); + $db->query("DELETE FROM `" . TABLE_MAIL_VIRTUAL . "` WHERE `customerid`='" . (int)$userinfo['customerid'] . "' AND `domainid`='" . (int)$id . "'"); + $log->logAction(USR_ACTION, LOG_NOTICE, "automatically deleted mail-table entries for '" . $idna_convert->decode($result['domain']) . "'"); + } + + if($path != $result['documentroot'] + || $isemaildomain != $result['isemaildomain'] + || $iswildcarddomain != $result['iswildcarddomain'] + || $aliasdomain != $result['aliasdomain'] + || $openbasedir_path != $result['openbasedir_path'] + || $ssl_redirect != $result['ssl_redirect']) + { + $log->logAction(USR_ACTION, LOG_INFO, "edited domain '" . $idna_convert->decode($result['domain']) . "'"); + inserttask('1'); + inserttask('4'); + $result = $db->query("UPDATE `" . TABLE_PANEL_DOMAINS . "` SET `documentroot`='" . $db->escape($path) . "', `isemaildomain`='" . (int)$isemaildomain . "', `iswildcarddomain`='" . (int)$iswildcarddomain . "', `aliasdomain`=" . (($aliasdomain != 0 && $alias_check == 0) ? '\'' . $db->escape($aliasdomain) . '\'' : 'NULL') . ",`openbasedir_path`='" . $db->escape($openbasedir_path) . "', `ssl_redirect`='" . $ssl_redirect . "' WHERE `customerid`='" . (int)$userinfo['customerid'] . "' AND `id`='" . (int)$id . "'"); + } + + redirectTo($filename, Array('page' => $page, 's' => $s)); + } + } + else + { + $result['domain'] = $idna_convert->decode($result['domain']); + $domains = makeoption($lng['domains']['noaliasdomain'], 0, $result['aliasdomain'], true); + $result_domains = $db->query("SELECT `d`.`id`, `d`.`domain` FROM `" . TABLE_PANEL_DOMAINS . "` `d`, `" . TABLE_PANEL_CUSTOMERS . "` `c` WHERE `d`.`aliasdomain` IS NULL AND `d`.`id`<>'" . (int)$result['id'] . "' AND `c`.`standardsubdomain`<>`d`.`id` AND `d`.`customerid`='" . (int)$userinfo['customerid'] . "' AND `c`.`customerid`=`d`.`customerid` ORDER BY `d`.`domain` ASC"); + + while($row_domain = $db->fetch_array($result_domains)) + { + $domains.= makeoption($idna_convert->decode($row_domain['domain']), $row_domain['id'], $result['aliasdomain']); + } + + if(preg_match('/^https?\:\/\//', $result['documentroot']) + && validateUrl($idna_convert->encode($result['documentroot'])) + && $settings['panel']['pathedit'] == 'Dropdown') + { + $urlvalue = $result['documentroot']; + $pathSelect = makePathfield($userinfo['documentroot'], $userinfo['guid'], $userinfo['guid'], $settings['panel']['pathedit']); + } + else + { + $urlvalue = ''; + $pathSelect = makePathfield($userinfo['documentroot'], $userinfo['guid'], $userinfo['guid'], $settings['panel']['pathedit'], $result['documentroot']); + } + + $ssl_redirect = makeyesno('ssl_redirect', '1', '0', $result['ssl_redirect']); + $iswildcarddomain = makeyesno('iswildcarddomain', '1', '0', $result['iswildcarddomain']); + $isemaildomain = makeyesno('isemaildomain', '1', '0', $result['isemaildomain']); + $openbasedir = makeoption($lng['domain']['docroot'], 0, $result['openbasedir_path'], true) . makeoption($lng['domain']['homedir'], 1, $result['openbasedir_path'], true); + $result = htmlentities_array($result); + + if($settings['system']['use_ssl'] == "1") + { + } + + eval("echo \"" . getTemplate("domains/domains_edit") . "\";"); + } + } + else + { + standard_error('domains_canteditdomain'); + } + } +} + +?> diff --git a/customer_email.php b/customer_email.php new file mode 100644 index 0000000000..6ef69c0f5d --- /dev/null +++ b/customer_email.php @@ -0,0 +1,712 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Panel + * @version $Id: customer_email.php 2718 2009-04-30 18:36:58Z flo $ + */ + +define('AREA', 'customer'); + +/** + * Include our init.php, which manages Sessions, Language etc. + */ + +require ("./lib/init.php"); + +if(isset($_POST['id'])) +{ + $id = intval($_POST['id']); +} +elseif(isset($_GET['id'])) +{ + $id = intval($_GET['id']); +} + +if($page == 'overview') +{ + $log->logAction(USR_ACTION, LOG_NOTICE, "viewed customer_email"); + eval("echo \"" . getTemplate("email/email") . "\";"); +} +elseif($page == 'emails') +{ + if($action == '') + { + $log->logAction(USR_ACTION, LOG_NOTICE, "viewed customer_email::emails"); + $fields = array( + 'd.domain' => $lng['domains']['domainname'], + 'm.email_full' => $lng['emails']['emailaddress'], + 'm.destination' => $lng['emails']['forwarders'] + ); + $paging = new paging($userinfo, $db, TABLE_MAIL_VIRTUAL, $fields, $settings['panel']['paging'], $settings['panel']['natsorting']); + $result = $db->query('SELECT `m`.`id`, `m`.`domainid`, `m`.`email`, `m`.`email_full`, `m`.`iscatchall`, `u`.`quota`, `m`.`destination`, `m`.`popaccountid`, `d`.`domain` FROM `' . TABLE_MAIL_VIRTUAL . '` `m` LEFT JOIN `' . TABLE_PANEL_DOMAINS . '` `d` ON (`m`.`domainid` = `d`.`id`) LEFT JOIN `' . TABLE_MAIL_USERS . '` `u` ON (`m`.`popaccountid` = `u`.`id`) WHERE `m`.`customerid`="' . $db->escape($userinfo['customerid']) . '" ' . $paging->getSqlWhere(true) . " " . $paging->getSqlOrderBy() . " " . $paging->getSqlLimit()); + $paging->setEntries($db->num_rows($result)); + $sortcode = $paging->getHtmlSortCode($lng); + $arrowcode = $paging->getHtmlArrowCode($filename . '?page=' . $page . '&s=' . $s); + $searchcode = $paging->getHtmlSearchCode($lng); + $pagingcode = $paging->getHtmlPagingCode($filename . '?page=' . $page . '&s=' . $s); + $emails = array(); + + while($row = $db->fetch_array($result)) + { + if(!isset($emails[$row['domain']]) + || !is_array($emails[$row['domain']])) + { + $emails[$row['domain']] = array(); + } + + $emails[$row['domain']][$row['email_full']] = $row; + } + + if($paging->sortfield == 'd.domain' + && $paging->sortorder == 'desc') + { + krsort($emails); + } + else + { + ksort($emails); + } + + $i = 0; + $count = 0; + $accounts = ''; + $emails_count = 0; + $domainname = ''; + foreach($emails as $domainid => $emailaddresses) + { + if($paging->sortfield == 'm.email_full' + && $paging->sortorder == 'desc') + { + krsort($emailaddresses); + } + else + { + ksort($emailaddresses); + } + + foreach($emailaddresses as $row) + { + if($paging->checkDisplay($i)) + { + if($domainname != $idna_convert->decode($row['domain'])) + { + $domainname = $idna_convert->decode($row['domain']); + eval("\$accounts.=\"" . getTemplate("email/emails_domain") . "\";"); + } + + $emails_count++; + $row['email'] = $idna_convert->decode($row['email']); + $row['email_full'] = $idna_convert->decode($row['email_full']); + $row['destination'] = explode(' ', $row['destination']); + uasort($row['destination'], 'strcasecmp'); + + while(list($dest_id, $destination) = each($row['destination'])) + { + $row['destination'][$dest_id] = $idna_convert->decode($row['destination'][$dest_id]); + + if($row['destination'][$dest_id] == $row['email_full']) + { + unset($row['destination'][$dest_id]); + } + } + + $destinations_count = count($row['destination']); + $row['destination'] = implode(', ', $row['destination']); + + if(strlen($row['destination']) > 35) + { + $row['destination'] = substr($row['destination'], 0, 32) . '... (' . $destinations_count . ')'; + } + + $row = htmlentities_array($row); + eval("\$accounts.=\"" . getTemplate("email/emails_email") . "\";"); + $count++; + } + + $i++; + } + } + + $emaildomains_count = $db->query_first("SELECT COUNT(`id`) AS `count` FROM `" . TABLE_PANEL_DOMAINS . "` WHERE `customerid`='" . $userinfo['customerid'] . "' AND `isemaildomain`='1' ORDER BY `domain` ASC"); + $emaildomains_count = $emaildomains_count['count']; + eval("echo \"" . getTemplate("email/emails") . "\";"); + } + elseif($action == 'delete' + && $id != 0) + { + $result = $db->query_first("SELECT `id`, `email`, `email_full`, `iscatchall`, `destination`, `customerid`, `popaccountid` FROM `" . TABLE_MAIL_VIRTUAL . "` WHERE `customerid`='" . (int)$userinfo['customerid'] . "' AND `id`='" . (int)$id . "'"); + + if(isset($result['email']) + && $result['email'] != '') + { + if(isset($_POST['send']) + && $_POST['send'] == 'send') + { + $update_users_query_addon = ''; + + if($result['destination'] != '') + { + $result['destination'] = explode(' ', $result['destination']); + $number_forwarders = count($result['destination']); + + if($result['popaccountid'] != 0) + { + // Free the Quota used by the email account + + if($settings['system']['mail_quota_enabled'] == 1) + { + $res_quota = $db->query_first("SELECT `quota` FROM `" . TABLE_MAIL_USERS . "` WHERE `customerid`='" . (int)$userinfo['customerid'] . "' AND `id`='" . (int)$result['popaccountid'] . "'"); + $update_users_query_addon.= " , `email_quota_used` = `email_quota_used` - " . (int)$res_quota['quota'] . " "; + } + + $db->query("DELETE FROM `" . TABLE_MAIL_USERS . "` WHERE `customerid`='" . (int)$userinfo['customerid'] . "' AND `id`='" . (int)$result['popaccountid'] . "'"); + $update_users_query_addon .= " , `email_accounts_used` = `email_accounts_used` - 1 "; + $number_forwarders-= 1; + $log->logAction(USR_ACTION, LOG_NOTICE, "deleted forwarder for email address '" . $result['email'] . "'"); + } + } + else + { + $number_forwarders = 0; + } + + $db->query("DELETE FROM `" . TABLE_MAIL_VIRTUAL . "` WHERE `customerid`='" . (int)$userinfo['customerid'] . "' AND `id`='" . (int)$id . "'"); + $db->query("UPDATE `" . TABLE_PANEL_CUSTOMERS . "` SET `emails_used`=`emails_used` - 1 , `email_forwarders_used` = `email_forwarders_used` - " . (int)$number_forwarders . " $update_users_query_addon WHERE `customerid`='" . (int)$userinfo['customerid'] . "'"); + $log->logAction(USR_ACTION, LOG_INFO, "deleted email address '" . $result['email'] . "'"); + redirectTo($filename, Array('page' => $page, 's' => $s)); + } + else + { + ask_yesno('email_reallydelete', $filename, array('id' => $id, 'page' => $page, 'action' => $action), $idna_convert->decode($result['email_full'])); + } + } + } + elseif($action == 'add') + { + if($userinfo['emails_used'] < $userinfo['emails'] + || $userinfo['emails'] == '-1') + { + if(isset($_POST['send']) + && $_POST['send'] == 'send') + { + $email_part = $_POST['email_part']; + $domain = $idna_convert->encode(validate($_POST['domain'], 'domain')); + $domain_check = $db->query_first("SELECT `id`, `domain`, `customerid` FROM `" . TABLE_PANEL_DOMAINS . "` WHERE `domain`='" . $db->escape($domain) . "' AND `customerid`='" . (int)$userinfo['customerid'] . "' AND `isemaildomain`='1' "); + + if(isset($_POST['iscatchall']) + && $_POST['iscatchall'] == '1') + { + $iscatchall = '1'; + $email = '@' . $domain; + } + else + { + $iscatchall = '0'; + $email = $email_part . '@' . $domain; + } + + $email_full = $email_part . '@' . $domain; + + if(!validateEmail($email_full)) + { + standard_error('emailiswrong', $email_full); + } + + $email_check = $db->query_first("SELECT `id`, `email`, `email_full`, `iscatchall`, `destination`, `customerid` FROM `" . TABLE_MAIL_VIRTUAL . "` WHERE ( `email`='" . $db->escape($email) . "' OR `email_full` = '" . $db->escape($email_full) . "' ) AND `customerid`='" . (int)$userinfo['customerid'] . "'"); + + if($email == '' + || $email_full == '' + || $email_part == '') + { + standard_error(array('stringisempty', 'emailadd')); + } + elseif($domain == '') + { + standard_error('domaincantbeempty'); + } + elseif($domain_check['domain'] != $domain) + { + standard_error('maindomainnonexist', $domain); + } + elseif($email_check['email_full'] == $email_full) + { + standard_error('emailexistalready', $email_full); + } + elseif($email_check['email'] == $email) + { + standard_error('youhavealreadyacatchallforthisdomain'); + exit; + } + else + { + $db->query("INSERT INTO `" . TABLE_MAIL_VIRTUAL . "` (`customerid`, `email`, `email_full`, `iscatchall`, `domainid`) VALUES ('" . (int)$userinfo['customerid'] . "', '" . $db->escape($email) . "', '" . $db->escape($email_full) . "', '" . $db->escape($iscatchall) . "', '" . (int)$domain_check['id'] . "')"); + $address_id = $db->insert_id(); + $db->query("UPDATE " . TABLE_PANEL_CUSTOMERS . " SET `emails_used` = `emails_used` + 1 WHERE `customerid`='" . (int)$userinfo['customerid'] . "'"); + $log->logAction(USR_ACTION, LOG_INFO, "added email address '" . $email_full . "'"); + redirectTo($filename, Array('page' => $page, 'action' => 'edit', 'id' => $address_id, 's' => $s)); + } + } + else + { + $result = $db->query("SELECT `id`, `domain`, `customerid` FROM `" . TABLE_PANEL_DOMAINS . "` WHERE `customerid`='" . (int)$userinfo['customerid'] . "' AND `isemaildomain`='1' ORDER BY `domain` ASC"); + $domains = ''; + + while($row = $db->fetch_array($result)) + { + $domains.= makeoption($idna_convert->decode($row['domain']), $row['domain']); + } + + $iscatchall = makeyesno('iscatchall', '1', '0', '0'); + eval("echo \"" . getTemplate("email/emails_add") . "\";"); + } + } + else + { + standard_error('allresourcesused'); + } + } + elseif($action == 'edit' + && $id != 0) + { + $result = $db->query_first("SELECT `v`.`id`, `v`.`email`, `v`.`email_full`, `v`.`iscatchall`, `v`.`destination`, `v`.`customerid`, `v`.`popaccountid`, `u`.`quota` FROM `" . TABLE_MAIL_VIRTUAL . "` `v` LEFT JOIN `" . TABLE_MAIL_USERS . "` `u` ON(`v`.`popaccountid` = `u`.`id`)WHERE `v`.`customerid`='" . (int)$userinfo['customerid'] . "' AND `v`.`id`='" . (int)$id . "'"); + + if(isset($result['email']) + && $result['email'] != '') + { + $result['email'] = $idna_convert->decode($result['email']); + $result['email_full'] = $idna_convert->decode($result['email_full']); + $result['destination'] = explode(' ', $result['destination']); + uasort($result['destination'], 'strcasecmp'); + $forwarders = ''; + $forwarders_count = 0; + + while(list($dest_id, $destination) = each($result['destination'])) + { + $destination = $idna_convert->decode($destination); + + if($destination != $result['email_full'] + && $destination != '') + { + eval("\$forwarders.=\"" . getTemplate("email/emails_edit_forwarder") . "\";"); + $forwarders_count++; + } + + $result['destination'][$dest_id] = $destination; + } + + $destinations_count = count($result['destination']); + $result = htmlentities_array($result); + eval("echo \"" . getTemplate("email/emails_edit") . "\";"); + } + } + elseif($action == 'togglecatchall' + && $id != 0) + { + $result = $db->query_first("SELECT `id`, `email`, `email_full`, `iscatchall`, `destination`, `customerid`, `popaccountid` FROM `" . TABLE_MAIL_VIRTUAL . "` WHERE `customerid`='" . (int)$userinfo['customerid'] . "' AND `id`='" . (int)$id . "'"); + + if(isset($result['email']) + && $result['email'] != '') + { + if($result['iscatchall'] == '1') + { + $db->query("UPDATE `" . TABLE_MAIL_VIRTUAL . "` SET `email` = '" . $db->escape($result['email_full']) . "', `iscatchall` = '0' WHERE `customerid`='" . (int)$userinfo['customerid'] . "' AND `id`='" . (int)$result['id'] . "'"); + } + else + { + $email_parts = explode('@', $result['email_full']); + $email = '@' . $email_parts[1]; + $email_check = $db->query_first("SELECT `id`, `email`, `email_full`, `iscatchall`, `destination`, `customerid` FROM `" . TABLE_MAIL_VIRTUAL . "` WHERE `email`='" . $db->escape($email) . "' AND `customerid`='" . (int)$userinfo['customerid'] . "'"); + + if($email_check['email'] == $email) + { + standard_error('youhavealreadyacatchallforthisdomain'); + exit; + } + else + { + $db->query("UPDATE `" . TABLE_MAIL_VIRTUAL . "` SET `email` = '$email' , `iscatchall` = '1' WHERE `customerid`='" . $userinfo['customerid'] . "' AND `id`='" . $result['id'] . "'"); + $log->logAction(USR_ACTION, LOG_INFO, "edited email address '" . $email . "'"); + } + } + + redirectTo($filename, Array('page' => $page, 'action' => 'edit', 'id' => $id, 's' => $s)); + } + } +} +elseif($page == 'accounts') +{ + if($action == 'add' + && $id != 0) + { + // ensure the int is a positive one + + if(isset($_POST['email_quota'])) + { + $quota = validate($_POST['email_quota'], 'email_quota', '/^\d+$/', 'vmailquotawrong'); + } + + if($userinfo['email_accounts'] == '-1' + || ($userinfo['email_accounts_used'] < $userinfo['email_accounts'])) + { + $result = $db->query_first("SELECT `id`, `email`, `email_full`, `iscatchall`, `destination`, `customerid`, `popaccountid`, `domainid` FROM `" . TABLE_MAIL_VIRTUAL . "` WHERE `customerid`='" . (int)$userinfo['customerid'] . "' AND `id`='" . (int)$id . "'"); + + if(isset($result['email']) + && $result['email'] != '' + && $result['popaccountid'] == '0') + { + if(isset($_POST['send']) + && $_POST['send'] == 'send') + { + $email_full = $result['email_full']; + $username = $idna_convert->decode($email_full); + $password = validate($_POST['email_password'], 'password'); + + if($settings['panel']['sendalternativemail'] == 1) + { + $alternative_email = $idna_convert->encode(validate($_POST['alternative_email'], 'alternative_email')); + } + else + { + $alternative_email = ''; + } + + if($settings['system']['mail_quota_enabled'] == 1) + { + if($userinfo['email_quota'] != '-1' + && ($quota == 0 || ($quota + $userinfo['email_quota_used']) > $userinfo['email_quota'])) + { + standard_error('allocatetoomuchquota', $quota); + } + } + else + { + $quota = 0; + } + + if($email_full == '') + { + standard_error(array('stringisempty', 'emailadd')); + } + elseif($password == '' + && !($settings['panel']['sendalternativemail'] == 1 && validateEmail($alternative_email))) + { + standard_error(array('stringisempty', 'mypassword')); + } + else + { + if($password == '') + { + $password = substr(md5(uniqid(microtime(), 1)), 12, 6); + } + + $db->query("INSERT INTO `" . TABLE_MAIL_USERS . "` (`customerid`, `email`, `username`, " . ($settings['system']['mailpwcleartext'] == '1' ? '`password`, ' : '') . " `password_enc`, `homedir`, `maildir`, `uid`, `gid`, `domainid`, `postfix`, `quota`, `imap`, `pop3`) VALUES ('" . (int)$userinfo['customerid'] . "', '" . $db->escape($email_full) . "', '" . $db->escape($username) . "', " . ($settings['system']['mailpwcleartext'] == '1' ? "'" . $db->escape($password) . "'," : '') . " ENCRYPT('" . $db->escape($password) . "'), '" . $db->escape($settings['system']['vmail_homedir']) . "', '" . $db->escape($userinfo['loginname'] . '/' . $email_full . '/') . "', '" . (int)$settings['system']['vmail_uid'] . "', '" . (int)$settings['system']['vmail_gid'] . "', '" . (int)$result['domainid'] . "', 'y', '" . (int)$quota . "', '" . (int)$userinfo['imap'] . "', '" . (int)$userinfo['pop3'] . "')"); + $popaccountid = $db->insert_id(); + $result['destination'].= ' ' . $email_full; + $db->query("UPDATE `" . TABLE_MAIL_VIRTUAL . "` SET `destination` = '" . $db->escape(makeCorrectDestination($result['destination'])) . "', `popaccountid` = '" . (int)$popaccountid . "' WHERE `customerid`='" . (int)$userinfo['customerid'] . "' AND `id`='" . (int)$id . "'"); + $db->query("UPDATE `" . TABLE_PANEL_CUSTOMERS . "` SET `email_accounts_used`=`email_accounts_used`+1, `email_quota_used`=`email_quota_used`+" . (int)$quota . " WHERE `customerid`='" . (int)$userinfo['customerid'] . "'"); + $log->logAction(USR_ACTION, LOG_INFO, "added email account for '" . $email_full . "'"); + $replace_arr = array( + 'EMAIL' => $email_full, + 'USERNAME' => $username, + 'PASSWORD' => $password + ); + $admin = $db->query_first('SELECT `firstname`, `name`, `company`, `email` FROM `' . TABLE_PANEL_ADMINS . '` WHERE `adminid`=\'' . (int)$userinfo['adminid'] . '\''); + $result = $db->query_first('SELECT `value` FROM `' . TABLE_PANEL_TEMPLATES . '` WHERE `adminid`=\'' . (int)$userinfo['adminid'] . '\' AND `language`=\'' . $db->escape($userinfo['def_language']) . '\' AND `templategroup`=\'mails\' AND `varname`=\'pop_success_subject\''); + $mail_subject = html_entity_decode(replace_variables((($result['value'] != '') ? $result['value'] : $lng['mails']['pop_success']['subject']), $replace_arr)); + $result = $db->query_first('SELECT `value` FROM `' . TABLE_PANEL_TEMPLATES . '` WHERE `adminid`=\'' . (int)$userinfo['adminid'] . '\' AND `language`=\'' . $db->escape($userinfo['def_language']) . '\' AND `templategroup`=\'mails\' AND `varname`=\'pop_success_mailbody\''); + $mail_body = html_entity_decode(replace_variables((($result['value'] != '') ? $result['value'] : $lng['mails']['pop_success']['mailbody']), $replace_arr)); + $mail->From = $admin['email']; + $mail->FromName = getCorrectUserSalutation($admin); + $mail->Subject = $mail_subject; + $mail->Body = $mail_body; + $mail->AddAddress($email_full, getCorrectUserSalutation($userinfo)); + + if(!$mail->Send()) + { + if($mail->ErrorInfo != '') + { + $mailerr_msg = $mail->ErrorInfo; + } + else + { + $mailerr_msg = $email; + } + + $log->logAction(USR_ACTION, LOG_ERR, "Error sending mail: " . $mailerr_msg); + standard_error('errorsendingmail', $email); + } + + $mail->ClearAddresses(); + + if(validateEmail($alternative_email) + && $settings['panel']['sendalternativemail'] == 1) + { + $result = $db->query_first('SELECT `value` FROM `' . TABLE_PANEL_TEMPLATES . '` WHERE `adminid`=\'' . (int)$userinfo['adminid'] . '\' AND `language`=\'' . $db->escape($userinfo['def_language']) . '\' AND `templategroup`=\'mails\' AND `varname`=\'pop_success_alternative_subject\''); + $mail_subject = replace_variables((($result['value'] != '') ? $result['value'] : $lng['mails']['pop_success_alternative']['subject']), $replace_arr); + $result = $db->query_first('SELECT `value` FROM `' . TABLE_PANEL_TEMPLATES . '` WHERE `adminid`=\'' . (int)$userinfo['adminid'] . '\' AND `language`=\'' . $db->escape($userinfo['def_language']) . '\' AND `templategroup`=\'mails\' AND `varname`=\'pop_success_alternative_mailbody\''); + $mail_body = replace_variables((($result['value'] != '') ? $result['value'] : $lng['mails']['pop_success_alternative']['mailbody']), $replace_arr); + $mail->From = $admin['email']; + $mail->FromName = getCorrectUserSalutation($admin); + $mail->Subject = $mail_subject; + $mail->Body = $mail_body; + $mail->AddAddress($idna_convert->encode($alternative_email), getCorrectUserSalutation($userinfo)); + + if(!$mail->Send()) + { + if($mail->ErrorInfo != '') + { + $mailerr_msg = $mail->ErrorInfo; + } + else + { + $mailerr_msg = $alternative_email; + } + + $log->logAction(USR_ACTION, LOG_ERR, "Error sending mail: " . $mailerr_msg); + standard_error(array('errorsendingmail', $alternative_email)); + } + + $mail->ClearAddresses(); + } + + redirectTo($filename, Array('page' => 'emails', 'action' => 'edit', 'id' => $id, 's' => $s)); + } + } + else + { + $result['email_full'] = $idna_convert->decode($result['email_full']); + $result = htmlentities_array($result); + $quota = $settings['system']['mail_quota']; + eval("echo \"" . getTemplate("email/account_add") . "\";"); + } + } + } + else + { + standard_error(array('allresourcesused', 'allocatetoomuchquota'), $quota); + } + } + elseif($action == 'changepw' + && $id != 0) + { + $result = $db->query_first("SELECT `id`, `email`, `email_full`, `iscatchall`, `destination`, `customerid`, `popaccountid` FROM `" . TABLE_MAIL_VIRTUAL . "` WHERE `customerid`='" . (int)$userinfo['customerid'] . "' AND `id`='" . (int)$id . "'"); + + if(isset($result['popaccountid']) + && $result['popaccountid'] != '') + { + if(isset($_POST['send']) + && $_POST['send'] == 'send') + { + $password = validate($_POST['email_password'], 'password'); + + if($password == '') + { + standard_error(array('stringisempty', 'mypassword')); + exit; + } + else + { + $log->logAction(USR_ACTION, LOG_NOTICE, "changed email password for '" . $result['email_full'] . "'"); + $result = $db->query("UPDATE `" . TABLE_MAIL_USERS . "` SET " . ($settings['system']['mailpwcleartext'] == '1' ? "`password` = '" . $db->escape($password) . "', " : '') . " `password_enc`=ENCRYPT('" . $db->escape($password) . "') WHERE `customerid`='" . (int)$userinfo['customerid'] . "' AND `id`='" . (int)$result['popaccountid'] . "'"); + redirectTo($filename, Array('page' => 'emails', 'action' => 'edit', 'id' => $id, 's' => $s)); + } + } + else + { + $result['email_full'] = $idna_convert->decode($result['email_full']); + $result = htmlentities_array($result); + eval("echo \"" . getTemplate("email/account_changepw") . "\";"); + } + } + } + elseif($action == 'changequota' + && $settings['system']['mail_quota_enabled'] == '1' + && $id != 0) + { + $result = $db->query_first("SELECT `v`.`id`, `v`.`email`, `v`.`email_full`, `v`.`iscatchall`, `v`.`destination`, `v`.`customerid`, `v`.`popaccountid`, `u`.`quota` FROM `" . TABLE_MAIL_VIRTUAL . "` `v` LEFT JOIN `" . TABLE_MAIL_USERS . "` `u` ON(`v`.`popaccountid` = `u`.`id`)WHERE `v`.`customerid`='" . (int)$userinfo['customerid'] . "' AND `v`.`id`='" . (int)$id . "'"); + + if(isset($result['popaccountid']) + && $result['popaccountid'] != '') + { + if(isset($_POST['send']) + && $_POST['send'] == 'send') + { + $quota = (int)validate($_POST['email_quota'], 'email_quota', '/^\d+$/', 'vmailquotawrong'); + + if($userinfo['email_quota'] != '-1' + && ($quota == 0 || ($quota + $userinfo['email_quota_used'] - $result['quota']) > $userinfo['email_quota'])) + { + standard_error('allocatetoomuchquota', $quota); + } + else + { + $log->logAction(USR_ACTION, LOG_NOTICE, "updated quota for email address '" . $result['email'] . "' to " . $quota . " MB"); + $db->query("UPDATE `" . TABLE_MAIL_USERS . "` SET `quota` = '" . (int)$quota . "' WHERE `id` = " . $result['popaccountid'] . " AND `customerid`='" . $userinfo['customerid'] . "'"); + + if($userinfo['email_quota'] != '-1') + { + $new_used_quota = $userinfo['email_quota_used'] + ($quota - $result['quota']); + $db->query("UPDATE `" . TABLE_PANEL_CUSTOMERS . "` SET `email_quota_used` = " . $new_used_quota . " WHERE `customerid` = '" . $userinfo['customerid'] . "'"); + } + + redirectTo($filename, Array('page' => 'emails', 'action' => 'edit', 'id' => $id, 's' => $s)); + } + } + else + { + $result['email_full'] = $idna_convert->decode($result['email_full']); + $result = htmlentities_array($result); + eval("echo \"" . getTemplate("email/account_changequota") . "\";"); + } + } + } + elseif($action == 'delete' + && $id != 0) + { + $result = $db->query_first("SELECT `v`.`id`, `v`.`email`, `v`.`email_full`, `v`.`iscatchall`, `v`.`destination`, `v`.`customerid`, `v`.`popaccountid`, `u`.`quota` FROM `" . TABLE_MAIL_VIRTUAL . "` `v` LEFT JOIN `" . TABLE_MAIL_USERS . "` `u` ON(`v`.`popaccountid` = `u`.`id`)WHERE `v`.`customerid`='" . (int)$userinfo['customerid'] . "' AND `v`.`id`='" . (int)$id . "'"); + + if(isset($result['popaccountid']) + && $result['popaccountid'] != '') + { + if(isset($_POST['send']) + && $_POST['send'] == 'send') + { + $db->query("DELETE FROM `" . TABLE_MAIL_USERS . "` WHERE `customerid`='" . (int)$userinfo['customerid'] . "' AND `id`='" . (int)$result['popaccountid'] . "'"); + $result['destination'] = str_replace($result['email_full'], '', $result['destination']); + $db->query("UPDATE `" . TABLE_MAIL_VIRTUAL . "` SET `destination` = '" . $db->escape(makeCorrectDestination($result['destination'])) . "', `popaccountid` = '0' WHERE `customerid`='" . (int)$userinfo['customerid'] . "' AND `id`='" . (int)$id . "'"); + + if($settings['system']['mail_quota_enabled'] == '1' + && $userinfo['email_quota'] != '-1') + { + $quota = (int)$result['quota']; + } + else + { + $quota = 0; + } + + $db->query("UPDATE `" . TABLE_PANEL_CUSTOMERS . "` SET `email_accounts_used` = `email_accounts_used` - 1, `email_quota_used` = `email_quota_used` - " . (int)$quota . " WHERE `customerid`='" . (int)$userinfo['customerid'] . "'"); + $log->logAction(USR_ACTION, LOG_INFO, "deleted email account for '" . $result['email_full'] . "'"); + redirectTo($filename, Array('page' => 'emails', 'action' => 'edit', 'id' => $id, 's' => $s)); + } + else + { + ask_yesno('email_reallydelete_account', $filename, array('id' => $id, 'page' => $page, 'action' => $action), $idna_convert->decode($result['email_full'])); + } + } + } +} +elseif($page == 'forwarders') +{ + if($action == 'add' + && $id != 0) + { + if($userinfo['email_forwarders_used'] < $userinfo['email_forwarders'] + || $userinfo['email_forwarders'] == '-1') + { + $result = $db->query_first("SELECT `id`, `email`, `email_full`, `iscatchall`, `destination`, `customerid`, `popaccountid`, `domainid` FROM `" . TABLE_MAIL_VIRTUAL . "` WHERE `customerid`='" . (int)$userinfo['customerid'] . "' AND `id`='" . (int)$id . "'"); + + if(isset($result['email']) + && $result['email'] != '') + { + if(isset($_POST['send']) + && $_POST['send'] == 'send') + { + $destination = $idna_convert->encode($_POST['destination']); + $result['destination_array'] = explode(' ', $result['destination']); + + if($destination == '') + { + standard_error('destinationnonexist'); + } + elseif(!validateEmail($destination)) + { + standard_error('destinationiswrong', $destination); + } + elseif($destination == $result['email']) + { + standard_error('destinationalreadyexistasmail', $destination); + } + elseif(in_array($destination, $result['destination_array'])) + { + standard_error('destinationalreadyexist', $destination); + } + else + { + $result['destination'].= ' ' . $destination; + $db->query("UPDATE `" . TABLE_MAIL_VIRTUAL . "` SET `destination` = '" . $db->escape(makeCorrectDestination($result['destination'])) . "' WHERE `customerid`='" . (int)$userinfo['customerid'] . "' AND `id`='" . (int)$id . "'"); + $db->query("UPDATE `" . TABLE_PANEL_CUSTOMERS . "` SET `email_forwarders_used` = `email_forwarders_used` + 1 WHERE `customerid`='" . (int)$userinfo['customerid'] . "'"); + $log->logAction(USR_ACTION, LOG_NOTICE, "added email forwarder for '" . $result['email_full'] . "'"); + redirectTo($filename, Array('page' => 'emails', 'action' => 'edit', 'id' => $id, 's' => $s)); + } + } + else + { + $result['email_full'] = $idna_convert->decode($result['email_full']); + $result = htmlentities_array($result); + eval("echo \"" . getTemplate("email/forwarder_add") . "\";"); + } + } + } + else + { + standard_error('allresourcesused'); + } + } + elseif($action == 'delete' + && $id != 0) + { + $result = $db->query_first("SELECT `id`, `email`, `email_full`, `iscatchall`, `destination`, `customerid`, `popaccountid` FROM `" . TABLE_MAIL_VIRTUAL . "` WHERE `customerid`='" . (int)$userinfo['customerid'] . "' AND `id`='" . (int)$id . "'"); + + if(isset($result['destination']) + && $result['destination'] != '') + { + if(isset($_POST['forwarderid'])) + { + $forwarderid = intval($_POST['forwarderid']); + } + elseif(isset($_GET['forwarderid'])) + { + $forwarderid = intval($_GET['forwarderid']); + } + else + { + $forwarderid = 0; + } + + $result['destination'] = explode(' ', $result['destination']); + + if(isset($result['destination'][$forwarderid]) && $result['email'] != $result['destination'][$forwarderid]) + { + $forwarder = $result['destination'][$forwarderid]; + + if(isset($_POST['send']) + && $_POST['send'] == 'send') + { + unset($result['destination'][$forwarderid]); + $result['destination'] = implode(' ', $result['destination']); + $db->query("UPDATE `" . TABLE_MAIL_VIRTUAL . "` SET `destination` = '" . $db->escape(makeCorrectDestination($result['destination'])) . "' WHERE `customerid`='" . (int)$userinfo['customerid'] . "' AND `id`='" . (int)$id . "'"); + $db->query("UPDATE `" . TABLE_PANEL_CUSTOMERS . "` SET `email_forwarders_used` = `email_forwarders_used` - 1 WHERE `customerid`='" . (int)$userinfo['customerid'] . "'"); + $log->logAction(USR_ACTION, LOG_NOTICE, "deleted email forwarder for '" . $result['email_full'] . "'"); + redirectTo($filename, Array('page' => 'emails', 'action' => 'edit', 'id' => $id, 's' => $s)); + } + else + { + ask_yesno('email_reallydelete_forwarder', $filename, array('id' => $id, 'forwarderid' => $forwarderid, 'page' => $page, 'action' => $action), $idna_convert->decode($result['email_full']) . ' -> ' . $idna_convert->decode($forwarder)); + } + } + } + } +} + +?> diff --git a/customer_extras.php b/customer_extras.php new file mode 100644 index 0000000000..f08d71733e --- /dev/null +++ b/customer_extras.php @@ -0,0 +1,426 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Panel + * @version $Id: customer_extras.php 2692 2009-03-27 18:04:47Z flo $ + */ + +define('AREA', 'customer'); + +/** + * Include our init.php, which manages Sessions, Language etc. + */ + +require ("./lib/init.php"); + +if(isset($_POST['id'])) +{ + $id = intval($_POST['id']); +} +elseif(isset($_GET['id'])) +{ + $id = intval($_GET['id']); +} + +if($page == 'overview') +{ + $log->logAction(USR_ACTION, LOG_NOTICE, "viewed customer_extras"); + eval("echo \"" . getTemplate("extras/extras") . "\";"); +} +elseif($page == 'htpasswds') +{ + if($action == '') + { + $log->logAction(USR_ACTION, LOG_NOTICE, "viewed customer_extras::htpasswds"); + $fields = array( + 'username' => $lng['login']['username'], + 'path' => $lng['panel']['path'] + ); + $paging = new paging($userinfo, $db, TABLE_PANEL_HTPASSWDS, $fields, $settings['panel']['paging'], $settings['panel']['natsorting']); + $result = $db->query("SELECT `id`, `username`, `path` FROM `" . TABLE_PANEL_HTPASSWDS . "` WHERE `customerid`='" . (int)$userinfo['customerid'] . "' " . $paging->getSqlWhere(true) . " " . $paging->getSqlOrderBy() . " " . $paging->getSqlLimit()); + $paging->setEntries($db->num_rows($result)); + $sortcode = $paging->getHtmlSortCode($lng); + $arrowcode = $paging->getHtmlArrowCode($filename . '?page=' . $page . '&s=' . $s); + $searchcode = $paging->getHtmlSearchCode($lng); + $pagingcode = $paging->getHtmlPagingCode($filename . '?page=' . $page . '&s=' . $s); + $i = 0; + $count = 0; + $htpasswds = ''; + + while($row = $db->fetch_array($result)) + { + if($paging->checkDisplay($i)) + { + if(strpos($row['path'], $userinfo['documentroot']) === 0) + { + $row['path'] = substr($row['path'], strlen($userinfo['documentroot'])); + } + + $row = htmlentities_array($row); + eval("\$htpasswds.=\"" . getTemplate("extras/htpasswds_htpasswd") . "\";"); + $count++; + } + + $i++; + } + + eval("echo \"" . getTemplate("extras/htpasswds") . "\";"); + } + elseif($action == 'delete' + && $id != 0) + { + $result = $db->query_first("SELECT `id`, `customerid`, `username`, `path` FROM `" . TABLE_PANEL_HTPASSWDS . "` WHERE `customerid`='" . (int)$userinfo['customerid'] . "' AND `id`='" . (int)$id . "'"); + + if(isset($result['username']) + && $result['username'] != '') + { + if(isset($_POST['send']) + && $_POST['send'] == 'send') + { + $db->query("DELETE FROM `" . TABLE_PANEL_HTPASSWDS . "` WHERE `customerid`='" . (int)$userinfo['customerid'] . "' AND `id`='$id'"); + $log->logAction(USR_ACTION, LOG_INFO, "deleted htpasswd for '" . $result['username'] . " (" . $result['path'] . ")'"); + inserttask('1'); + redirectTo($filename, Array('page' => $page, 's' => $s)); + } + else + { + if(strpos($result['path'], $userinfo['documentroot']) === 0) + { + $result['path'] = substr($result['path'], strlen($userinfo['documentroot'])); + } + + ask_yesno('extras_reallydelete', $filename, array('id' => $id, 'page' => $page, 'action' => $action), $result['username'] . ' (' . $result['path'] . ')'); + } + } + } + elseif($action == 'add') + { + if(isset($_POST['send']) + && $_POST['send'] == 'send') + { + $path = makeCorrectDir(validate($_POST['path'], 'path')); + $userpath = $path; + $path = makeCorrectDir($userinfo['documentroot'] . '/' . $path); + $username = validate($_POST['username'], 'username', '/^[a-zA-Z0-9][a-zA-Z0-9\-_]+\$?$/'); + validate($_POST['directory_password'], 'password'); + $username_path_check = $db->query_first("SELECT `id`, `username`, `path` FROM `" . TABLE_PANEL_HTPASSWDS . "` WHERE `username`='" . $db->escape($username) . "' AND `path`='" . $db->escape($path) . "' AND `customerid`='" . (int)$userinfo['customerid'] . "'"); + + if(CRYPT_STD_DES == 1) + { + $saltfordescrypt = substr(md5(uniqid(microtime(), 1)), 4, 2); + $password = crypt($_POST['directory_password'], $saltfordescrypt); + } + else + { + $password = crypt($_POST['directory_password']); + } + + if(!$_POST['path']) + { + standard_error('invalidpath'); + } + + if($username == '') + { + standard_error(array('stringisempty', 'myloginname')); + } + elseif($username_path_check['username'] == $username + && $username_path_check['path'] == $path) + { + standard_error('userpathcombinationdupe'); + } + elseif($_POST['directory_password'] == '') + { + standard_error(array('stringisempty', 'mypassword')); + } + elseif($path == '') + { + standard_error('patherror'); + } + else + { + $db->query("INSERT INTO `" . TABLE_PANEL_HTPASSWDS . "` (`customerid`, `username`, `password`, `path`) VALUES ('" . (int)$userinfo['customerid'] . "', '" . $db->escape($username) . "', '" . $db->escape($password) . "', '" . $db->escape($path) . "')"); + $log->logAction(USR_ACTION, LOG_INFO, "added htpasswd for '" . $username . " (" . $path . ")'"); + inserttask('1'); + redirectTo($filename, Array('page' => $page, 's' => $s)); + } + } + else + { + $pathSelect = makePathfield($userinfo['documentroot'], $userinfo['guid'], $userinfo['guid'], $settings['panel']['pathedit']); + eval("echo \"" . getTemplate("extras/htpasswds_add") . "\";"); + } + } + elseif($action == 'edit' + && $id != 0) + { + $result = $db->query_first("SELECT `id`, `username`, `path` FROM `" . TABLE_PANEL_HTPASSWDS . "` WHERE `customerid`='" . (int)$userinfo['customerid'] . "' AND `id`='" . (int)$id . "'"); + + if(isset($result['username']) + && $result['username'] != '') + { + if(isset($_POST['send']) + && $_POST['send'] == 'send') + { + validate($_POST['directory_password'], 'password'); + + if(CRYPT_STD_DES == 1) + { + $saltfordescrypt = substr(md5(uniqid(microtime(), 1)), 4, 2); + $password = crypt($_POST['directory_password'], $saltfordescrypt); + } + else + { + $password = crypt($_POST['directory_password']); + } + + if($_POST['directory_password'] == '') + { + standard_error(array('stringisempty', 'mypassword')); + } + else + { + $db->query("UPDATE `" . TABLE_PANEL_HTPASSWDS . "` SET `password`='" . $db->escape($password) . "' WHERE `customerid`='" . (int)$userinfo['customerid'] . "' AND `id`='" . (int)$id . "'"); + $log->logAction(USR_ACTION, LOG_INFO, "edited htpasswd for '" . $result['username'] . " (" . $result['path'] . ")'"); + inserttask('1'); + redirectTo($filename, Array('page' => $page, 's' => $s)); + } + } + else + { + if(strpos($result['path'], $userinfo['documentroot']) === 0) + { + $result['path'] = substr($result['path'], strlen($userinfo['documentroot'])); + } + + $result = htmlentities_array($result); + eval("echo \"" . getTemplate("extras/htpasswds_edit") . "\";"); + } + } + } +} +elseif($page == 'htaccess') +{ + if($action == '') + { + $log->logAction(USR_ACTION, LOG_NOTICE, "viewed customer_extras::htaccess"); + $fields = array( + 'path' => $lng['panel']['path'], + 'options_indexes' => $lng['extras']['view_directory'], + 'error404path' => $lng['extras']['error404path'], + 'error403path' => $lng['extras']['error403path'], + 'error500path' => $lng['extras']['error500path'] + ); + $paging = new paging($userinfo, $db, TABLE_PANEL_HTACCESS, $fields, $settings['panel']['paging'], $settings['panel']['natsorting']); + $result = $db->query("SELECT `id`, `path`, `options_indexes`, `error404path`, `error403path`, `error500path` FROM `" . TABLE_PANEL_HTACCESS . "` WHERE `customerid`='" . (int)$userinfo['customerid'] . "' " . $paging->getSqlWhere(true) . " " . $paging->getSqlOrderBy() . " " . $paging->getSqlLimit()); + $paging->setEntries($db->num_rows($result)); + $sortcode = $paging->getHtmlSortCode($lng); + $arrowcode = $paging->getHtmlArrowCode($filename . '?page=' . $page . '&s=' . $s); + $searchcode = $paging->getHtmlSearchCode($lng); + $pagingcode = $paging->getHtmlPagingCode($filename . '?page=' . $page . '&s=' . $s); + $i = 0; + $count = 0; + $htaccess = ''; + + while($row = $db->fetch_array($result)) + { + if($paging->checkDisplay($i)) + { + if(strpos($row['path'], $userinfo['documentroot']) === 0) + { + $row['path'] = substr($row['path'], strlen($userinfo['documentroot'])); + } + + $row['options_indexes'] = str_replace('1', $lng['panel']['yes'], $row['options_indexes']); + $row['options_indexes'] = str_replace('0', $lng['panel']['no'], $row['options_indexes']); + $row = htmlentities_array($row); + eval("\$htaccess.=\"" . getTemplate("extras/htaccess_htaccess") . "\";"); + $count++; + } + + $i++; + } + + eval("echo \"" . getTemplate("extras/htaccess") . "\";"); + } + elseif($action == 'delete' + && $id != 0) + { + $result = $db->query_first("SELECT * FROM `" . TABLE_PANEL_HTACCESS . "` WHERE `customerid`='" . (int)$userinfo['customerid'] . "' AND `id`='" . (int)$id . "'"); + + if(isset($result['customerid']) + && $result['customerid'] != '' + && $result['customerid'] == $userinfo['customerid']) + { + if(isset($_POST['send']) + && $_POST['send'] == 'send') + { + $db->query("DELETE FROM `" . TABLE_PANEL_HTACCESS . "` WHERE `customerid`='" . (int)$userinfo['customerid'] . "' AND `id`='" . (int)$id . "'"); + $log->logAction(USR_ACTION, LOG_INFO, "deleted htaccess for '" . str_replace($userinfo['documentroot'], '', $result['path']) . "'"); + inserttask('1'); + redirectTo($filename, Array('page' => $page, 's' => $s)); + } + else + { + ask_yesno('extras_reallydelete_pathoptions', $filename, array('id' => $id, 'page' => $page, 'action' => $action), str_replace($userinfo['documentroot'], '', $result['path'])); + } + } + } + elseif($action == 'add') + { + if(isset($_POST['send']) + && $_POST['send'] == 'send') + { + $path = makeCorrectDir(validate($_POST['path'], 'path')); + $userpath = $path; + $path = makeCorrectDir($userinfo['documentroot'] . '/' . $path); + $path_dupe_check = $db->query_first("SELECT `id`, `path` FROM `" . TABLE_PANEL_HTACCESS . "` WHERE `path`='" . $db->escape($path) . "' AND `customerid`='" . (int)$userinfo['customerid'] . "'"); + + if(!$_POST['path']) + { + standard_error('invalidpath'); + } + + if(($_POST['error404path'] === '') + || (validateUrl($idna_convert->encode($_POST['error404path'])))) + { + $error404path = $_POST['error404path']; + } + else + { + standard_error('mustbeurl'); + } + + if(($_POST['error403path'] === '') + || (validateUrl($idna_convert->encode($_POST['error403path'])))) + { + $error403path = $_POST['error403path']; + } + else + { + standard_error('mustbeurl'); + } + + if(($_POST['error500path'] === '') + || (validateUrl($idna_convert->encode($_POST['error500path'])))) + { + $error500path = $_POST['error500path']; + } + else + { + standard_error('mustbeurl'); + } + + if($path_dupe_check['path'] == $path) + { + standard_error('errordocpathdupe', $userpath); + } + elseif($path == '') + { + standard_error('patherror'); + } + else + { + $db->query('INSERT INTO `' . TABLE_PANEL_HTACCESS . '` (`customerid`, `path`, `options_indexes`, `error404path`, `error403path`, `error500path` ) VALUES ("' . (int)$userinfo['customerid'] . '", "' . $db->escape($path) . '", "' . $db->escape($_POST['options_indexes'] == '1' ? '1' : '0') . '", "' . $db->escape($error404path) . '", "' . $db->escape($error403path) . '", "' . $db->escape($error500path) . '" )'); + $log->logAction(USR_ACTION, LOG_INFO, "added htaccess for '" . $path . "'"); + inserttask('1'); + redirectTo($filename, Array('page' => $page, 's' => $s)); + } + } + else + { + $pathSelect = makePathfield($userinfo['documentroot'], $userinfo['guid'], $userinfo['guid'], $settings['panel']['pathedit']); + $options_indexes = makeyesno('options_indexes', '1', '0', '1'); + eval("echo \"" . getTemplate("extras/htaccess_add") . "\";"); + } + } + elseif(($action == 'edit') + && ($id != 0)) + { + $result = $db->query_first('SELECT * FROM `' . TABLE_PANEL_HTACCESS . '` WHERE `customerid` = "' . (int)$userinfo['customerid'] . '" AND `id` = "' . (int)$id . '"'); + + if((isset($result['customerid'])) + && ($result['customerid'] != '') + && ($result['customerid'] == $userinfo['customerid'])) + { + if(isset($_POST['send']) + && $_POST['send'] == 'send') + { + $option_indexes = intval($_POST['options_indexes']); + + if($option_indexes != '1') + { + $option_indexes = '0'; + } + + if(($_POST['error404path'] === '') + || (validateUrl($idna_convert->encode($_POST['error404path'])))) + { + $error404path = $_POST['error404path']; + } + else + { + standard_error('mustbeurl'); + } + + if(($_POST['error403path'] === '') + || (validateUrl($idna_convert->encode($_POST['error403path'])))) + { + $error403path = $_POST['error403path']; + } + else + { + standard_error('mustbeurl'); + } + + if(($_POST['error500path'] === '') + || (validateUrl($idna_convert->encode($_POST['error500path'])))) + { + $error500path = $_POST['error500path']; + } + else + { + standard_error('mustbeurl'); + } + + if(($option_indexes != $result['options_indexes']) + || ($error404path != $result['error404path']) + || ($error403path != $result['error403path']) + || ($error500path != $result['error500path'])) + { + inserttask('1'); + $db->query('UPDATE `' . TABLE_PANEL_HTACCESS . '` SET `options_indexes` = "' . $db->escape($option_indexes) . '", `error404path` = "' . $db->escape($error404path) . '", `error403path` = "' . $db->escape($error403path) . '", `error500path` = "' . $db->escape($error500path) . '" WHERE `customerid` = "' . (int)$userinfo['customerid'] . '" AND `id` = "' . (int)$id . '"'); + $log->logAction(USR_ACTION, LOG_INFO, "edited htaccess for '" . str_replace($userinfo['documentroot'], '', $result['path']) . "'"); + } + + redirectTo($filename, Array('page' => $page, 's' => $s)); + } + else + { + if(strpos($result['path'], $userinfo['documentroot']) === 0) + { + $result['path'] = substr($result['path'], strlen($userinfo['documentroot'])); + } + + $result['error404path'] = $result['error404path']; + $result['error403path'] = $result['error403path']; + $result['error500path'] = $result['error500path']; + $options_indexes = makeyesno('options_indexes', '1', '0', $result['options_indexes']); + $result = htmlentities_array($result); + eval("echo \"" . getTemplate("extras/htaccess_edit") . "\";"); + } + } + } +} + +?> diff --git a/customer_ftp.php b/customer_ftp.php new file mode 100644 index 0000000000..45e0947bd3 --- /dev/null +++ b/customer_ftp.php @@ -0,0 +1,243 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Panel + * @version $Id: customer_ftp.php 2707 2009-04-17 07:47:29Z flo $ + */ + +define('AREA', 'customer'); + +/** + * Include our init.php, which manages Sessions, Language etc. + */ + +require ("./lib/init.php"); + +if(isset($_POST['id'])) +{ + $id = intval($_POST['id']); +} +elseif(isset($_GET['id'])) +{ + $id = intval($_GET['id']); +} + +if($page == 'overview') +{ + $log->logAction(USR_ACTION, LOG_NOTICE, "viewed customer_ftp"); + eval("echo \"" . getTemplate("ftp/ftp") . "\";"); +} +elseif($page == 'accounts') +{ + if($action == '') + { + $log->logAction(USR_ACTION, LOG_NOTICE, "viewed customer_ftp::accounts"); + $fields = array( + 'username' => $lng['login']['username'], + 'homedir' => $lng['panel']['path'] + ); + $paging = new paging($userinfo, $db, TABLE_FTP_USERS, $fields, $settings['panel']['paging'], $settings['panel']['natsorting']); + $result = $db->query("SELECT `id`, `username`, `homedir` FROM `" . TABLE_FTP_USERS . "` WHERE `customerid`='" . $userinfo['customerid'] . "' " . $paging->getSqlWhere(true) . " " . $paging->getSqlOrderBy() . " " . $paging->getSqlLimit()); + $paging->setEntries($db->num_rows($result)); + $sortcode = $paging->getHtmlSortCode($lng); + $arrowcode = $paging->getHtmlArrowCode($filename . '?page=' . $page . '&s=' . $s); + $searchcode = $paging->getHtmlSearchCode($lng); + $pagingcode = $paging->getHtmlPagingCode($filename . '?page=' . $page . '&s=' . $s); + $i = 0; + $count = 0; + $accounts = ''; + + while($row = $db->fetch_array($result)) + { + if($paging->checkDisplay($i)) + { + if(strpos($row['homedir'], $userinfo['documentroot']) === 0) + { + $row['documentroot'] = substr($row['homedir'], strlen($userinfo['documentroot'])); + } + else + { + $row['documentroot'] = $row['homedir']; + } + + $row['documentroot'] = makeCorrectDir($row['documentroot']); + + $row = htmlentities_array($row); + eval("\$accounts.=\"" . getTemplate("ftp/accounts_account") . "\";"); + $count++; + } + + $i++; + } + + $ftps_count = $db->num_rows($result); + eval("echo \"" . getTemplate("ftp/accounts") . "\";"); + } + elseif($action == 'delete' + && $id != 0) + { + $result = $db->query_first("SELECT `id`, `username`, `homedir`, `up_count`, `up_bytes`, `down_count`, `down_bytes` FROM `" . TABLE_FTP_USERS . "` WHERE `customerid`='" . (int)$userinfo['customerid'] . "' AND `id`='" . (int)$id . "'"); + + if(isset($result['username']) + && $result['username'] != $userinfo['loginname']) + { + if(isset($_POST['send']) + && $_POST['send'] == 'send') + { + $db->query("UPDATE `" . TABLE_FTP_USERS . "` SET `up_count`=`up_count`+'" . (int)$result['up_count'] . "', `up_bytes`=`up_bytes`+'" . (int)$result['up_bytes'] . "', `down_count`=`down_count`+'" . (int)$result['down_count'] . "', `down_bytes`=`down_bytes`+'" . (int)$result['down_bytes'] . "' WHERE `username`='" . $db->escape($userinfo['loginname']) . "'"); + $db->query("DELETE FROM `" . TABLE_FTP_USERS . "` WHERE `customerid`='" . (int)$userinfo['customerid'] . "' AND `id`='" . (int)$id . "'"); + $log->logAction(USR_ACTION, LOG_INFO, "deleted ftp-account '" . $result['username'] . "'"); + $db->query("UPDATE `" . TABLE_FTP_GROUPS . "` SET `members`=REPLACE(`members`,'," . $db->escape($result['username']) . "','') WHERE `customerid`='" . (int)$userinfo['customerid'] . "'"); + + // $db->query("DELETE FROM `".TABLE_FTP_GROUPS."` WHERE `customerid`='".$userinfo['customerid']."' AND `id`='$id'"); + + if($userinfo['ftps_used'] == '1') + { + $resetaccnumber = " , `ftp_lastaccountnumber`='0'"; + } + else + { + $resetaccnumber = ''; + } + + $result = $db->query("UPDATE `" . TABLE_PANEL_CUSTOMERS . "` SET `ftps_used`=`ftps_used`-1 $resetaccnumber WHERE `customerid`='" . (int)$userinfo['customerid'] . "'"); + redirectTo($filename, Array('page' => $page, 's' => $s)); + } + else + { + ask_yesno('ftp_reallydelete', $filename, array('id' => $id, 'page' => $page, 'action' => $action), $result['username']); + } + } + else + { + standard_error('ftp_cantdeletemainaccount'); + } + } + elseif($action == 'add') + { + if($userinfo['ftps_used'] < $userinfo['ftps'] + || $userinfo['ftps'] == '-1') + { + if(isset($_POST['send']) + && $_POST['send'] == 'send') + { + $path = validate($_POST['path'], 'path'); + $password = validate($_POST['ftp_password'], 'password'); + + if($settings['customer']['ftpatdomain'] == '1') + { + $ftpusername = validate($_POST['ftp_username'], 'username', '/^[a-zA-Z0-9][a-zA-Z0-9\-_]+\$?$/'); + if($ftpusername == '') + { + standard_error(array('stringisempty', 'username')); + } + $ftpdomain = $idna_convert->encode(validate($_POST['ftp_domain'], 'domain')); + $ftpdomain_check = $db->query_first("SELECT `id`, `domain`, `customerid` FROM `" . TABLE_PANEL_DOMAINS . "` WHERE `domain`='" . $db->escape($ftpdomain) . "' AND `customerid`='" . (int)$userinfo['customerid'] . "'"); + if($ftpdomain_check['domain'] != $ftpdomain) + { + standard_error('maindomainnonexist', $domain); + } + $username = $ftpusername . "@" . $ftpdomain; + } + else + { + $username = $userinfo['loginname'] . $settings['customer']['ftpprefix'] . (intval($userinfo['ftp_lastaccountnumber']) + 1); + } + + $username_check = $db->query_first('SELECT * FROM `' . TABLE_FTP_USERS .'` WHERE `username` = \'' . $db->escape($username) . '\''); + + if(!empty($username_check) && $username_check['username'] = $username) + { + standard_error('usernamealreadyexists', $username); + } + elseif($password == '') + { + standard_error(array('stringisempty', 'mypassword')); + } + elseif($path == '') + { + standard_error('patherror'); + } + else + { + $userpath = makeCorrectDir($path); + $path = makeCorrectDir($userinfo['documentroot'] . '/' . $path); + + $db->query("INSERT INTO `" . TABLE_FTP_USERS . "` (`customerid`, `username`, `password`, `homedir`, `login_enabled`, `uid`, `gid`) VALUES ('" . (int)$userinfo['customerid'] . "', '" . $db->escape($username) . "', ENCRYPT('" . $db->escape($password) . "'), '" . $db->escape($path) . "', 'y', '" . (int)$userinfo['guid'] . "', '" . (int)$userinfo['guid'] . "')"); + $db->query("UPDATE `" . TABLE_FTP_GROUPS . "` SET `members`=CONCAT_WS(',',`members`,'" . $db->escape($username) . "') WHERE `customerid`='" . $userinfo['customerid'] . "' AND `gid`='" . (int)$userinfo['guid'] . "'"); + + // $db->query("INSERT INTO `".TABLE_FTP_GROUPS."` (`customerid`, `groupname`, `gid`, `members`) VALUES ('".$userinfo['customerid']."', '$username', '$uid', '$username')"); + + $db->query("UPDATE `" . TABLE_PANEL_CUSTOMERS . "` SET `ftps_used`=`ftps_used`+1, `ftp_lastaccountnumber`=`ftp_lastaccountnumber`+1 WHERE `customerid`='" . (int)$userinfo['customerid'] . "'"); + + // $db->query("UPDATE `".TABLE_PANEL_SETTINGS."` SET `value`='$uid' WHERE settinggroup='ftp' AND varname='lastguid'"); + + $log->logAction(USR_ACTION, LOG_INFO, "added ftp-account '" . $username . " (" . $path . ")'"); + inserttask(5); + redirectTo($filename, Array('page' => $page, 's' => $s)); + } + } + else + { + $pathSelect = makePathfield($userinfo['documentroot'], $userinfo['guid'], $userinfo['guid'], $settings['panel']['pathedit']); + + if($settings['customer']['ftpatdomain'] == '1') + { + $domains = ''; + + $result_domains = $db->query("SELECT `domain` FROM `" . TABLE_PANEL_DOMAINS . "` WHERE `customerid`='" . (int)$userinfo['customerid'] . "'"); + + while($row_domain = $db->fetch_array($result_domains)) + { + $domains.= makeoption($idna_convert->decode($row_domain['domain']), $row_domain['domain']); + } + } + + eval("echo \"" . getTemplate("ftp/accounts_add") . "\";"); + } + } + } + elseif($action == 'edit' + && $id != 0) + { + $result = $db->query_first("SELECT `id`, `username`, `homedir` FROM `" . TABLE_FTP_USERS . "` WHERE `customerid`='" . (int)$userinfo['customerid'] . "' AND `id`='" . (int)$id . "'"); + + if(isset($result['username']) + && $result['username'] != '') + { + if(isset($_POST['send']) + && $_POST['send'] == 'send') + { + $password = validate($_POST['ftp_password'], 'password'); + + if($password == '') + { + standard_error(array('stringisempty', 'mypassword')); + exit; + } + else + { + $db->query("UPDATE `" . TABLE_FTP_USERS . "` SET `password`=ENCRYPT('" . $db->escape($password) . "') WHERE `customerid`='" . (int)$userinfo['customerid'] . "' AND `id`='" . (int)$id . "'"); + $log->logAction(USR_ACTION, LOG_INFO, "edited ftp-account '" . $result['username'] . "'"); + redirectTo($filename, Array('page' => $page, 's' => $s)); + } + } + else + { + eval("echo \"" . getTemplate("ftp/accounts_edit") . "\";"); + } + } + } +} + +?> \ No newline at end of file diff --git a/customer_index.php b/customer_index.php new file mode 100644 index 0000000000..a2445d8303 --- /dev/null +++ b/customer_index.php @@ -0,0 +1,182 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Panel + * @version $Id: customer_index.php 2692 2009-03-27 18:04:47Z flo $ + */ + +define('AREA', 'customer'); + +/** + * Include our init.php, which manages Sessions, Language etc. + */ + +require ("./lib/init.php"); + +if($action == 'logout') +{ + $log->logAction(USR_ACTION, LOG_NOTICE, "logged out"); + + if($settings['session']['allow_multiple_login'] == '1') + { + $db->query("DELETE FROM `" . TABLE_PANEL_SESSIONS . "` WHERE `userid` = '" . (int)$userinfo['customerid'] . "' AND `adminsession` = '0' AND `hash` = '" . $s . "'"); + } + else + { + $db->query("DELETE FROM `" . TABLE_PANEL_SESSIONS . "` WHERE `userid` = '" . (int)$userinfo['customerid'] . "' AND `adminsession` = '0'"); + } + + redirectTo('index.php'); + exit; +} + +if($page == 'overview') +{ + $log->logAction(USR_ACTION, LOG_NOTICE, "viewed customer_index"); + $domains = ''; + $result = $db->query("SELECT `domain` FROM `" . TABLE_PANEL_DOMAINS . "` WHERE `customerid`='" . (int)$userinfo['customerid'] . "' AND `parentdomainid`='0' AND `id` <> '" . (int)$userinfo['standardsubdomain'] . "' "); + $domainArray = array(); + + while($row = $db->fetch_array($result)) + { + $domainArray[] = $idna_convert->decode($row['domain']); + } + + natsort($domainArray); + $domains = implode(', ', $domainArray); + $userinfo['email'] = $idna_convert->decode($userinfo['email']); + $yesterday = time() - (60 * 60 * 24); + $month = date('M Y', $yesterday); + + /* $traffic=$db->query_first("SELECT SUM(http) AS http_sum, SUM(ftp_up) AS ftp_up_sum, SUM(ftp_down) AS ftp_down_sum, SUM(mail) AS mail_sum FROM ".TABLE_PANEL_TRAFFIC." WHERE year='".date('Y')."' AND month='".date('m')."' AND day<='".date('d')."' AND customerid='".$userinfo['customerid']."'"); + $userinfo['traffic_used']=$traffic['http_sum']+$traffic['ftp_up_sum']+$traffic['ftp_down_sum']+$traffic['mail_sum'];*/ + + $userinfo['diskspace'] = round($userinfo['diskspace'] / 1024, $settings['panel']['decimal_places']); + $userinfo['diskspace_used'] = round($userinfo['diskspace_used'] / 1024, $settings['panel']['decimal_places']); + $userinfo['traffic'] = round($userinfo['traffic'] / (1024 * 1024), $settings['panel']['decimal_places']); + $userinfo['traffic_used'] = round($userinfo['traffic_used'] / (1024 * 1024), $settings['panel']['decimal_places']); + $userinfo = str_replace_array('-1', $lng['customer']['unlimited'], $userinfo, 'diskspace traffic mysqls emails email_accounts email_forwarders email_quota ftps tickets subdomains aps_packages'); + $opentickets = 0; + $opentickets = $db->query_first('SELECT COUNT(`id`) as `count` FROM `' . TABLE_PANEL_TICKETS . '` + WHERE `customerid` = "' . $userinfo['customerid'] . '" + AND `answerto` = "0" + AND (`status` = "0" OR `status` = "2") + AND `lastreplier`="1"'); + $awaitingtickets = $opentickets['count']; + $awaitingtickets_text = ''; + + if($opentickets > 0) + { + $awaitingtickets_text = strtr($lng['ticket']['awaitingticketreply'], array('%s' => '' . $opentickets['count'] . '')); + } + + eval("echo \"" . getTemplate("index/index") . "\";"); +} +elseif($page == 'change_password') +{ + if(isset($_POST['send']) + && $_POST['send'] == 'send') + { + $old_password = validate($_POST['old_password'], 'old password'); + + if(md5($old_password) != $userinfo['password']) + { + standard_error('oldpasswordnotcorrect'); + exit; + } + + $new_password = validate($_POST['new_password'], 'new password'); + $new_password_confirm = validate($_POST['new_password_confirm'], 'new password confirm'); + + if($old_password == '') + { + standard_error(array('stringisempty', 'oldpassword')); + } + elseif($new_password == '') + { + standard_error(array('stringisempty', 'newpassword')); + } + elseif($new_password_confirm == '') + { + standard_error(array('stringisempty', 'newpasswordconfirm')); + } + elseif($new_password != $new_password_confirm) + { + standard_error('newpasswordconfirmerror'); + } + else + { + $db->query("UPDATE `" . TABLE_PANEL_CUSTOMERS . "` SET `password`='" . md5($new_password) . "' WHERE `customerid`='" . (int)$userinfo['customerid'] . "' AND `password`='" . md5($old_password) . "'"); + $log->logAction(USR_ACTION, LOG_NOTICE, 'changed password'); + + if(isset($_POST['change_main_ftp']) + && $_POST['change_main_ftp'] == 'true') + { + $db->query("UPDATE `" . TABLE_FTP_USERS . "` SET `password`=ENCRYPT('" . $db->escape($new_password) . "') WHERE `customerid`='" . (int)$userinfo['customerid'] . "' AND `username`='" . $db->escape($userinfo['loginname']) . "'"); + $log->logAction(USR_ACTION, LOG_NOTICE, 'changed main ftp password'); + } + + if(isset($_POST['change_webalizer']) + && $_POST['change_webalizer'] == 'true') + { + if(CRYPT_STD_DES == 1) + { + $saltfordescrypt = substr(md5(uniqid(microtime(), 1)), 4, 2); + $new_webalizer_password = crypt($new_password, $saltfordescrypt); + } + else + { + $new_webalizer_password = crypt($new_password); + } + + $db->query("UPDATE `" . TABLE_PANEL_HTPASSWDS . "` SET `password`='" . $db->escape($new_webalizer_password) . "' WHERE `customerid`='" . (int)$userinfo['customerid'] . "' AND `username`='" . $db->escape($userinfo['loginname']) . "'"); + } + + redirectTo($filename, Array('s' => $s)); + } + } + else + { + eval("echo \"" . getTemplate("index/change_password") . "\";"); + } +} +elseif($page == 'change_language') +{ + if(isset($_POST['send']) + && $_POST['send'] == 'send') + { + $def_language = validate($_POST['def_language'], 'default language'); + + if(isset($languages[$def_language])) + { + $db->query("UPDATE `" . TABLE_PANEL_CUSTOMERS . "` SET `def_language`='" . $db->escape($def_language) . "' WHERE `customerid`='" . (int)$userinfo['customerid'] . "'"); + $db->query("UPDATE `" . TABLE_PANEL_SESSIONS . "` SET `language`='" . $db->escape($def_language) . "' WHERE `hash`='" . $db->escape($s) . "'"); + $log->logAction(USR_ACTION, LOG_NOTICE, "changed default language to '" . $def_language . "'"); + } + + redirectTo($filename, Array('s' => $s)); + } + else + { + $language_options = ''; + + while(list($language_file, $language_name) = each($languages)) + { + $language_options.= makeoption($language_name, $language_file, $userinfo['def_language'], true); + } + + eval("echo \"" . getTemplate("index/change_language") . "\";"); + } +} + +?> diff --git a/customer_mysql.php b/customer_mysql.php new file mode 100644 index 0000000000..f18d6b44b4 --- /dev/null +++ b/customer_mysql.php @@ -0,0 +1,252 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Panel + * @version $Id: customer_mysql.php 2732 2009-10-30 16:24:48Z flo $ + */ + +define('AREA', 'customer'); + +/** + * Include our init.php, which manages Sessions, Language etc. + */ + +$need_root_db_sql_data = true; +require ("./lib/init.php"); + +if(isset($_POST['id'])) +{ + $id = intval($_POST['id']); +} +elseif(isset($_GET['id'])) +{ + $id = intval($_GET['id']); +} + +if($page == 'overview') +{ + $log->logAction(USR_ACTION, LOG_NOTICE, "viewed customer_mysql"); + $lng['mysql']['description'] = str_replace('', $sql['host'], $lng['mysql']['description']); + eval("echo \"" . getTemplate("mysql/mysql") . "\";"); +} +elseif($page == 'mysqls') +{ + if($action == '') + { + $log->logAction(USR_ACTION, LOG_NOTICE, "viewed customer_mysql::mysqls"); + $fields = array( + 'databasename' => $lng['mysql']['databasename'], + 'description' => $lng['mysql']['databasedescription'] + ); + $paging = new paging($userinfo, $db, TABLE_PANEL_DATABASES, $fields, $settings['panel']['paging'], $settings['panel']['natsorting']); + $result = $db->query("SELECT `id`, `databasename`, `description`, `dbserver` FROM `" . TABLE_PANEL_DATABASES . "` WHERE `customerid`='" . (int)$userinfo['customerid'] . "' " . $paging->getSqlWhere(true) . " " . $paging->getSqlOrderBy() . " " . $paging->getSqlLimit()); + $paging->setEntries($db->num_rows($result)); + $sortcode = $paging->getHtmlSortCode($lng); + $arrowcode = $paging->getHtmlArrowCode($filename . '?page=' . $page . '&s=' . $s); + $searchcode = $paging->getHtmlSearchCode($lng); + $pagingcode = $paging->getHtmlPagingCode($filename . '?page=' . $page . '&s=' . $s); + $i = 0; + $count = 0; + $mysqls = ''; + + while($row = $db->fetch_array($result)) + { + if($paging->checkDisplay($i)) + { + $row = htmlentities_array($row); + eval("\$mysqls.=\"" . getTemplate("mysql/mysqls_database") . "\";"); + $count++; + } + + $i++; + } + + $mysqls_count = $db->num_rows($result); + eval("echo \"" . getTemplate("mysql/mysqls") . "\";"); + } + elseif($action == 'delete' + && $id != 0) + { + $result = $db->query_first('SELECT `id`, `databasename`, `dbserver` FROM `' . TABLE_PANEL_DATABASES . '` WHERE `customerid`="' . (int)$userinfo['customerid'] . '" AND `id`="' . (int)$id . '"'); + + if(isset($result['databasename']) + && $result['databasename'] != '') + { + if(!isset($sql_root[$result['dbserver']]) || !is_array($sql_root[$result['dbserver']])) + { + $result['dbserver'] = 0; + } + + if(isset($_POST['send']) + && $_POST['send'] == 'send') + { + // Begin root-session + + $db_root = new db($sql_root[$result['dbserver']]['host'], $sql_root[$result['dbserver']]['user'], $sql_root[$result['dbserver']]['password'], ''); + unset($db_root->password); + foreach(array_map('trim', array_unique(explode(',', $settings['system']['mysql_access_host']))) as $mysql_access_host) + { + $db_root->query('REVOKE ALL PRIVILEGES ON * . * FROM `' . $db_root->escape($result['databasename']) . '`@`' . $db_root->escape($mysql_access_host) . '`'); + $db_root->query('REVOKE ALL PRIVILEGES ON `' . str_replace('_', '\_', $db_root->escape($result['databasename'])) . '` . * FROM `' . $db_root->escape($result['databasename']) . '`@`' . $db_root->escape($mysql_access_host) . '`'); + $db_root->query('DELETE FROM `mysql`.`user` WHERE `User` = "' . $db_root->escape($result['databasename']) . '" AND `Host` = "' . $db_root->escape($mysql_access_host) . '"'); + } + + $db_root->query('DROP DATABASE IF EXISTS `' . $db_root->escape($result['databasename']) . '`'); + $db_root->query('FLUSH PRIVILEGES'); + $db_root->close(); + + // End root-session + + $db->query('DELETE FROM `' . TABLE_PANEL_DATABASES . '` WHERE `customerid`="' . (int)$userinfo['customerid'] . '" AND `id`="' . (int)$id . '"'); + + if($userinfo['mysqls_used'] == '1') + { + $resetaccnumber = " , `mysql_lastaccountnumber`='0' "; + } + else + { + $resetaccnumber = ''; + } + + $result = $db->query('UPDATE `' . TABLE_PANEL_CUSTOMERS . '` SET `mysqls_used`=`mysqls_used`-1 ' . $resetaccnumber . 'WHERE `customerid`="' . (int)$userinfo['customerid'] . '"'); + redirectTo($filename, Array('page' => $page, 's' => $s)); + } + else + { + ask_yesno('mysql_reallydelete', $filename, array('id' => $id, 'page' => $page, 'action' => $action), $result['databasename']); + } + } + } + elseif($action == 'add') + { + if($userinfo['mysqls_used'] < $userinfo['mysqls'] + || $userinfo['mysqls'] == '-1') + { + if(isset($_POST['send']) + && $_POST['send'] == 'send') + { + $password = validate($_POST['mysql_password'], 'password'); + + if($password == '') + { + standard_error(array('stringisempty', 'mypassword')); + } + else + { + $username = $userinfo['loginname'] . $settings['customer']['mysqlprefix'] . (intval($userinfo['mysql_lastaccountnumber']) + 1); + + if(count($sql_root) > 1) + { + $dbserver = validate($_POST['mysql_server'], html_entity_decode($lng['mysql']['mysql_server']), '', '', 0); + + if(!isset($sql_root[$dbserver]) || !is_array($sql_root[$dbserver])) + { + $dbserver = 0; + } + } + else + { + $dbserver = 0; + } + + // Begin root-session + + $db_root = new db($sql_root[$dbserver]['host'], $sql_root[$dbserver]['user'], $sql_root[$dbserver]['password'], ''); + unset($db_root->password); + $db_root->query('CREATE DATABASE `' . $db_root->escape($username) . '`'); + $log->logAction(USR_ACTION, LOG_INFO, "created database '" . $username . "'"); + foreach(array_map('trim', explode(',', $settings['system']['mysql_access_host'])) as $mysql_access_host) + { + $db_root->query('GRANT ALL PRIVILEGES ON `' . str_replace('_', '\_', $db_root->escape($username)) . '`.* TO `' . $db_root->escape($username) . '`@`' . $db_root->escape($mysql_access_host) . '` IDENTIFIED BY \'password\''); + $db_root->query('SET PASSWORD FOR `' . $db_root->escape($username) . '`@`' . $db_root->escape($mysql_access_host) . '` = PASSWORD(\'' . $db_root->escape($password) . '\')'); + $log->logAction(USR_ACTION, LOG_NOTICE, "grant all privileges for '" . $username . "'@'" . $mysql_access_host . "'"); + } + + $db_root->query('FLUSH PRIVILEGES'); + $db_root->close(); + + // End root-session + // Statement modifyed for Database description -- PH 2004-11-29 + + $databasedescription = validate($_POST['description'], 'description'); + $result = $db->query('INSERT INTO `' . TABLE_PANEL_DATABASES . '` (`customerid`, `databasename`, `description`, `dbserver`) VALUES ("' . (int)$userinfo['customerid'] . '", "' . $db->escape($username) . '", "' . $db->escape($databasedescription) . '", "' . $db->escape($dbserver) . '")'); + $result = $db->query('UPDATE `' . TABLE_PANEL_CUSTOMERS . '` SET `mysqls_used`=`mysqls_used`+1, `mysql_lastaccountnumber`=`mysql_lastaccountnumber`+1 WHERE `customerid`="' . (int)$userinfo['customerid'] . '"'); + redirectTo($filename, Array('page' => $page, 's' => $s)); + } + } + else + { + $mysql_servers = ''; + + foreach($sql_root as $mysql_server => $mysql_server_details) + { + $mysql_servers .= makeoption($mysql_server_details['caption'], $mysql_server); + } + + eval("echo \"" . getTemplate("mysql/mysqls_add") . "\";"); + } + } + } + elseif($action == 'edit' + && $id != 0) + { + $result = $db->query_first('SELECT `id`, `databasename`, `description`, `dbserver` FROM `' . TABLE_PANEL_DATABASES . '` WHERE `customerid`="' . $userinfo['customerid'] . '" AND `id`="' . $id . '"'); + + if(isset($result['databasename']) + && $result['databasename'] != '') + { + if(!isset($sql_root[$result['dbserver']]) || !is_array($sql_root[$result['dbserver']])) + { + $result['dbserver'] = 0; + } + + if(isset($_POST['send']) + && $_POST['send'] == 'send') + { + // Only change Password if it is set, do nothing if it is empty! -- PH 2004-11-29 + + $password = validate($_POST['mysql_password'], 'password'); + + if($password != '') + { + // Begin root-session + + $db_root = new db($sql_root[$result['dbserver']]['host'], $sql_root[$result['dbserver']]['user'], $sql_root[$result['dbserver']]['password'], ''); + unset($db_root->password); + foreach(array_map('trim', explode(',', $settings['system']['mysql_access_host'])) as $mysql_access_host) + { + $db_root->query('SET PASSWORD FOR `' . $db_root->escape($result['databasename']) . '`@`' . $db_root->escape($mysql_access_host) . '` = PASSWORD(\'' . $db_root->escape($password) . '\')'); + } + + $db_root->query('FLUSH PRIVILEGES'); + $db_root->close(); + + // End root-session + } + + // Update the Database description -- PH 2004-11-29 + + $log->logAction(USR_ACTION, LOG_INFO, "edited database '" . $result['databasename'] . "'"); + $databasedescription = validate($_POST['description'], 'description'); + $result = $db->query('UPDATE `' . TABLE_PANEL_DATABASES . '` SET `description`="' . $db->escape($databasedescription) . '" WHERE `customerid`="' . (int)$userinfo['customerid'] . '" AND `id`="' . (int)$id . '"'); + redirectTo($filename, Array('page' => $page, 's' => $s)); + } + else + { + eval("echo \"" . getTemplate("mysql/mysqls_edit") . "\";"); + } + } + } +} + +?> \ No newline at end of file diff --git a/customer_tickets.php b/customer_tickets.php new file mode 100644 index 0000000000..ecdd27a811 --- /dev/null +++ b/customer_tickets.php @@ -0,0 +1,418 @@ + + * @license http://www.gnu.org/licenses/gpl.txt + * @package Panel + * @version CVS: $Id: customer_tickets.php 2452 2008-11-30 13:12:36Z flo $ + * @link http://www.nutime.de/ + * @since File available since Release 1.2.18 + */ + +define('AREA', 'customer'); + +/** + * Include our init.php, which manages Sessions, Language etc. + */ + +require ("./lib/init.php"); + +if(isset($_POST['id'])) +{ + $id = intval($_POST['id']); +} +elseif(isset($_GET['id'])) +{ + $id = intval($_GET['id']); +} + +if($page == 'overview') +{ + $log->logAction(USR_ACTION, LOG_NOTICE, "viewed customer_tickets"); + eval("echo \"" . getTemplate("ticket/ticket") . "\";"); +} +elseif($page == 'tickets') +{ + if($action == '') + { + $log->logAction(USR_ACTION, LOG_NOTICE, "viewed customer_tickets::tickets"); + $fields = array( + 'status' => $lng['ticket']['status'], + 'priority' => $lng['ticket']['priority'], + 'lastchange' => $lng['ticket']['lastchange'], + 'ticket_answers' => $lng['ticket']['ticket_answers'], + 'subject' => $lng['ticket']['subject'], + 'lastreplier' => $lng['ticket']['lastreplier'] + ); + $paging = new paging($userinfo, $db, TABLE_PANEL_TICKETS, $fields, $settings['panel']['paging'], $settings['panel']['natsorting']); + $paging->sortfield = 'lastchange'; + $paging->sortorder = 'desc'; + $result = $db->query('SELECT `main`.`id`, (SELECT COUNT(`sub`.`id`) FROM `' . TABLE_PANEL_TICKETS . '` `sub` WHERE `sub`.`answerto` = `main`.`id`) as `ticket_answers`, `main`.`lastchange`, `main`.`subject`, `main`.`status`, `main`.`lastreplier`, `main`.`priority` FROM `' . TABLE_PANEL_TICKETS . '` as `main` WHERE `main`.`answerto` = "0" AND `archived` = "0" AND `customerid`="' . (int)$userinfo['customerid'] . '" AND `adminid`="' . (int)$userinfo['adminid'] . '" ' . $paging->getSqlWhere(true) . " " . $paging->getSqlOrderBy() . " " . $paging->getSqlLimit()); + $paging->setEntries($db->num_rows($result)); + $sortcode = $paging->getHtmlSortCode($lng); + $arrowcode = $paging->getHtmlArrowCode($filename . '?page=' . $page . '&s=' . $s); + $searchcode = $paging->getHtmlSearchCode($lng); + $pagingcode = $paging->getHtmlPagingCode($filename . '?page=' . $page . '&s=' . $s); + $i = 0; + $count = 0; + $tickets = ''; + $tickets_count = 0; + + while($row = $db->fetch_array($result)) + { + if($paging->checkDisplay($i)) + { + $tickets_count++; + $row = htmlentities_array($row); + $row['lastchange'] = date("d.m.y H:i", $row['lastchange']); + + if($row['status'] >= 0 + && $row['status'] <= 2) + { + $reopen = 0; + } + else + { + $reopen = 1; + } + + $row['status'] = ticket::getStatusText($lng, $row['status']); + $row['priority'] = ticket::getPriorityText($lng, $row['priority']); + + if($row['lastreplier'] == '1') + { + $row['lastreplier'] = $lng['ticket']['staff']; + $cananswer = 1; + } + else + { + $row['lastreplier'] = $lng['ticket']['customer']; + $cananswer = 0; + } + + if(strlen($row['subject']) > 20) + { + $row['subject'] = substr($row['subject'], 0, 17) . '...'; + } + + eval("\$tickets.=\"" . getTemplate("ticket/tickets_tickets") . "\";"); + $count++; + } + + $i++; + } + + $supportavailable = 0; + $time = date("Hi", time()); + $day = date("w", time()); + $start = substr($settings['ticket']['worktime_begin'], 0, 2) . substr($settings['ticket']['worktime_begin'], 3, 2); + $end = substr($settings['ticket']['worktime_end'], 0, 2) . substr($settings['ticket']['worktime_end'], 3, 2); + + if($time >= $start + && $time <= $end) + { + $supportavailable = 1; + } + + if($settings['ticket']['worktime_sat'] == "0" + && $day == "6") + { + $supportavailable = 0; + } + + if($settings['ticket']['worktime_sun'] == "0" + && $day == "0") + { + $supportavailable = 0; + } + + if($settings['ticket']['worktime_all'] == "1") + { + $supportavailable = 1; + } + + $ticketsopen = 0; + $opentickets = $db->query_first('SELECT COUNT(`id`) as `count` FROM `' . TABLE_PANEL_TICKETS . '` + WHERE `customerid` = "' . $userinfo['customerid'] . '" + AND `answerto` = "0" + AND (`status` = "0" OR `status` = "1" OR `status` = "2")'); + + if($settings['ticket']['concurrently_open'] != - 1 + && $settings['ticket']['concurrently_open'] != '') + { + $notmorethanxopentickets = strtr($lng['ticket']['notmorethanxopentickets'], array('%s' => $settings['ticket']['concurrently_open'])); + } + else + { + $notmorethanxopentickets = ''; + } + + $ticketsopen = (int)$opentickets['count']; + eval("echo \"" . getTemplate("ticket/tickets") . "\";"); + } + elseif($action == 'new') + { + if($userinfo['tickets_used'] < $userinfo['tickets'] + || $userinfo['tickets'] == '-1') + { + if(isset($_POST['send']) + && $_POST['send'] == 'send') + { + $newticket = ticket::getInstanceOf($userinfo, $db, $settings, -1); + $newticket->Set('subject', validate($_POST['subject'], 'subject'), true, false); + $newticket->Set('priority', validate($_POST['priority'], 'priority'), true, false); + $newticket->Set('category', validate($_POST['category'], 'category'), true, false); + $newticket->Set('customer', (int)$userinfo['customerid'], true, false); + $newticket->Set('admin', (int)$userinfo['adminid'], true, false); + $newticket->Set('message', validate(str_replace("\r\n", "\n", $_POST['message']), 'message', '/^[^\0]*$/'), true, false); + + if($newticket->Get('subject') == null) + { + standard_error(array('stringisempty', 'mysubject')); + } + elseif($newticket->Get('message') == null) + { + standard_error(array('stringisempty', 'mymessage')); + } + else + { + $now = time(); + $newticket->Set('dt', $now, true, true); + $newticket->Set('lastchange', $now, true, true); + $newticket->Set('ip', $_SERVER['REMOTE_ADDR'], true, true); + $newticket->Set('status', '0', true, true); + $newticket->Set('lastreplier', '0', true, true); + $newticket->Set('by', '0', true, true); + $newticket->Insert(); + $log->logAction(USR_ACTION, LOG_NOTICE, "opened support-ticket '" . $newticket->Get('subject') . "'"); + $db->query('UPDATE `' . TABLE_PANEL_CUSTOMERS . '` + SET `tickets_used`=`tickets_used`+1 WHERE `customerid`="' . (int)$userinfo['customerid'] . '"'); + + // Customer mail + + $newticket->sendMail((int)$userinfo['customerid'], 'new_ticket_for_customer_subject', $lng['mails']['new_ticket_for_customer']['subject'], 'new_ticket_for_customer_mailbody', $lng['mails']['new_ticket_for_customer']['mailbody']); + + // Admin mail + + $newticket->sendMail(-1, 'new_ticket_by_customer_subject', $lng['mails']['new_ticket_by_customer']['subject'], 'new_ticket_by_customer_mailbody', $lng['mails']['new_ticket_by_customer']['mailbody']); + redirectTo($filename, Array('page' => $page, 's' => $s)); + } + } + else + { + $categories = ''; + $result = $db->query_first('SELECT `id`, `name` FROM `' . TABLE_PANEL_TICKET_CATS . '` ORDER BY `name` ASC'); + + if(isset($result['name']) + && $result['name'] != '') + { + $result2 = $db->query('SELECT `id`, `name` FROM `' . TABLE_PANEL_TICKET_CATS . '` ORDER BY `name` ASC'); + + while($row = $db->fetch_array($result2)) + { + $categories.= makeoption($row['name'], $row['id']); + } + } + else + { + $categories = makeoption($lng['ticket']['no_cat'], '0'); + } + + $priorities = makeoption($lng['ticket']['unf_high'], '1'); + $priorities.= makeoption($lng['ticket']['unf_normal'], '2'); + $priorities.= makeoption($lng['ticket']['unf_low'], '3'); + $ticketsopen = 0; + $opentickets = $db->query_first('SELECT COUNT(`id`) as `count` FROM `' . TABLE_PANEL_TICKETS . '` + WHERE `customerid` = "' . $userinfo['customerid'] . '" + AND `answerto` = "0" + AND (`status` = "0" OR `status` = "1" OR `status` = "2")'); + + if($settings['ticket']['concurrently_open'] != - 1 + && $settings['ticket']['concurrently_open'] != '') + { + $notmorethanxopentickets = strtr($lng['ticket']['notmorethanxopentickets'], array('%s' => $settings['ticket']['concurrently_open'])); + } + else + { + $notmorethanxopentickets = ''; + } + + $ticketsopen = (int)$opentickets['count']; + eval("echo \"" . getTemplate("ticket/tickets_new") . "\";"); + } + } + else + { + standard_error('nomoreticketsavailable'); + } + } + elseif($action == 'answer' + && $id != 0) + { + if(isset($_POST['send']) + && $_POST['send'] == 'send') + { + $replyticket = ticket::getInstanceOf($userinfo, $db, $settings, -1); + $replyticket->Set('subject', validate($_POST['subject'], 'subject'), true, false); + $replyticket->Set('priority', validate($_POST['priority'], 'priority'), true, false); + $replyticket->Set('message', validate(str_replace("\r\n", "\n", $_POST['message']), 'message', '/^[^\0]*$/'), true, false); + + if($replyticket->Get('message') == null) + { + standard_error(array('stringisempty', 'mymessage')); + } + else + { + $now = time(); + $replyticket->Set('customerid', (int)$userinfo['customerid'], true, true); + $replyticket->Set('lastchange', $now, true, true); + $replyticket->Set('ip', $_SERVER['REMOTE_ADDR'], true, true); + $replyticket->Set('status', '1', true, true); + $replyticket->Set('answerto', (int)$id, true, false); + $replyticket->Set('by', '0', true, true); + $replyticket->Insert(); + + // Update priority if changed + + $mainticket = ticket::getInstanceOf($userinfo, $db, $settings, (int)$id); + + if($replyticket->Get('priority') != $mainticket->Get('priority')) + { + $mainticket->Set('priority', $replyticket->Get('priority'), true); + } + + $mainticket->Set('lastchange', $now); + $mainticket->Set('lastreplier', '0'); + $mainticket->Set('status', '1'); + $mainticket->Update(); + $log->logAction(USR_ACTION, LOG_NOTICE, "answered support-ticket '" . $mainticket->Get('subject') . "'"); + $mainticket->sendMail(-1, 'new_reply_ticket_by_customer_subject', $lng['mails']['new_reply_ticket_by_customer']['subject'], 'new_reply_ticket_by_customer_mailbody', $lng['mails']['new_reply_ticket_by_customer']['mailbody']); + redirectTo($filename, Array('page' => $page, 's' => $s)); + } + } + else + { + $ticket_replies = ''; + $mainticket = ticket::getInstanceOf($userinfo, $db, $settings, (int)$id); + $lastchange = date("d.m.Y H:i\h", $mainticket->Get('lastchange')); + $status = ticket::getStatusText($lng, $mainticket->Get('status')); + + if($mainticket->Get('status') >= 0 + && $mainticket->Get('status') <= 2) + { + $isclosed = 0; + } + else + { + $isclosed = 1; + } + + if($mainticket->Get('by') == '1') + { + $by = $lng['ticket']['staff']; + } + else + { + $by = $lng['ticket']['customer']; + } + + $subject = $mainticket->Get('subject'); + $message = $mainticket->Get('message'); + eval("\$ticket_replies.=\"" . getTemplate("ticket/tickets_tickets_main") . "\";"); + $result = $db->query('SELECT `name` FROM `' . TABLE_PANEL_TICKET_CATS . '` + WHERE `id`="' . (int)$mainticket->Get('category') . '"'); + $row = $db->fetch_array($result); + $andere = $db->query('SELECT * FROM `' . TABLE_PANEL_TICKETS . '` WHERE `answerto`="' . (int)$id . '" ORDER BY `lastchange` DESC'); + + while($row2 = $db->fetch_array($andere)) + { + $subticket = ticket::getInstanceOf($userinfo, $db, $settings, (int)$row2['id']); + $lastchange = date("d.m.Y H:i\h", $subticket->Get('lastchange')); + + if($subticket->Get('by') == '1') + { + $by = $lng['ticket']['staff']; + } + else + { + $by = $lng['ticket']['customer']; + } + + $subject = $subticket->Get('subject'); + $message = $subticket->Get('message'); + eval("\$ticket_replies.=\"" . getTemplate("ticket/tickets_tickets_list") . "\";"); + } + + $priorities = makeoption($lng['ticket']['high'], '1', $mainticket->Get('priority'), true, true); + $priorities.= makeoption($lng['ticket']['normal'], '2', $mainticket->Get('priority'), true, true); + $priorities.= makeoption($lng['ticket']['low'], '3', $mainticket->Get('priority'), true, true); + $subject = $mainticket->Get('subject'); + $ticket_replies_count = $db->num_rows($andere) + 1; + + // don't forget the main-ticket! + + eval("echo \"" . getTemplate("ticket/tickets_reply") . "\";"); + } + } + elseif($action == 'close' + && $id != 0) + { + if(isset($_POST['send']) + && $_POST['send'] == 'send') + { + $now = time(); + $mainticket = ticket::getInstanceOf($userinfo, $db, $settings, (int)$id); + $mainticket->Set('lastchange', $now, true, true); + $mainticket->Set('lastreplier', '0', true, true); + $mainticket->Set('status', '3', true, true); + $mainticket->Update(); + $log->logAction(USR_ACTION, LOG_NOTICE, "closed support-ticket '" . $mainticket->Get('subject') . "'"); + redirectTo($filename, Array('page' => $page, 's' => $s)); + } + else + { + $mainticket = ticket::getInstanceOf($userinfo, $db, $settings, (int)$id); + ask_yesno('ticket_reallyclose', $filename, array('id' => $id, 'page' => $page, 'action' => $action), $mainticket->Get('subject')); + } + } + elseif($action == 'reopen' + && $id != 0) + { + $ticketsopen = 0; + $opentickets = $db->query_first('SELECT COUNT(`id`) as `count` FROM `' . TABLE_PANEL_TICKETS . '` + WHERE `customerid` = "' . $userinfo['customerid'] . '" + AND `answerto` = "0" + AND (`status` = "0" OR `status` = "1" OR `status` = "2")'); + $ticketsopen = (int)$opentickets['count']; + + if($ticketsopen > $settings['ticket']['concurrently_open'] + && $settings['ticket']['concurrently_open'] != - 1 + && $settings['ticket']['concurrently_open'] != '') + { + standard_error('notmorethanxopentickets', $settings['ticket']['concurrently_open']); + } + + $now = time(); + $mainticket = ticket::getInstanceOf($userinfo, $db, $settings, (int)$id); + $mainticket->Set('lastchange', $now, true, true); + $mainticket->Set('lastreplier', '0', true, true); + $mainticket->Set('status', '0', true, true); + $mainticket->Update(); + $log->logAction(USR_ACTION, LOG_NOTICE, "reopened support-ticket '" . $mainticket->Get('subject') . "'"); + redirectTo($filename, Array('page' => $page, 's' => $s)); + } +} + +?> diff --git a/customer_traffic.php b/customer_traffic.php new file mode 100644 index 0000000000..758d5e81ec --- /dev/null +++ b/customer_traffic.php @@ -0,0 +1,280 @@ + + * @author microft + * @author falzo + * @author Florian Aders + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Panel + * @version $Id: customer_traffic.php 2692 2009-03-27 18:04:47Z flo $ + * @since File available since Release 1.2.20 + */ + +define('AREA', 'customer'); + +/** + * Include our init.php, which manages Sessions, Language etc. + */ + +require ("./lib/init.php"); +$traffic = ''; +$month = null; +$year = null; + +if(isset($_POST['month']) + && isset($_POST['year'])) +{ + $month = intval($_POST['month']); + $year = intval($_POST['year']); +} +elseif(isset($_GET['month']) + && isset($_GET['year'])) +{ + $month = intval($_GET['month']); + $year = intval($_GET['year']); +} + +//BAM! $_GET??? + +elseif (isset($_GET['page']) + && $_GET['page'] == "current") +{ + if(date('d') != '01') + { + $month = date('m'); + $year = date('Y'); + } + else + { + if(date('m') == '01') + { + $month = 12; + $year = date('Y') - 1; + } + else + { + $month = date('m') - 1; + $year = date('Y'); + } + } +} + +if(!is_null($month) + && !is_null($year)) +{ + $traf['byte'] = 0; + $result = $db->query("SELECT MAX(`http`), MAX(`ftp_up`+`ftp_down`), MAX(`mail`) + FROM `" . TABLE_PANEL_TRAFFIC . "` + WHERE `customerid`='" . $userinfo['customerid'] . "' + AND `month` = '" . $month . "' + AND `year` = '" . $year . "'"); + rsort($row = mysql_fetch_row($result)); + $traf['max'] = $row[0]; + $result = $db->query("SELECT + SUM(`http`) as 'http', SUM(`ftp_up`) AS 'ftp_up', SUM(`ftp_down`) as 'ftp_down', SUM(`mail`) as 'mail', + `day`, `month`, `year` + FROM `" . TABLE_PANEL_TRAFFIC . "` + WHERE `customerid`='" . $userinfo['customerid'] . "' + AND `month` = '" . $month . "' AND `year` = '" . $year . "' + GROUP BY `day` ORDER BY `day` ASC"); + $traffic_complete['http'] = 0; + $traffic_complete['ftp'] = 0; + $traffic_complete['mail'] = 0; + $show = ''; + + while($row = $db->fetch_array($result)) + { + $http = $row['http']; + $ftp = $row['ftp_up'] + $row['ftp_down']; + $mail = $row['mail']; + $traf['byte'] = $http + $ftp + $mail; + $traffic_complete['http']+= $http; + $traffic_complete['ftp']+= $ftp; + $traffic_complete['mail']+= $mail; + $traf['day'] = $row['day']; + + if(extension_loaded('bcmath')) + { + $traf['ftptext'] = bcdiv($row['ftp_up'], 1024, $settings['panel']['decimal_places']) . " MB up/ " . bcdiv($row['ftp_down'], 1024, $settings['panel']['decimal_places']) . " MB down (FTP)"; + $traf['httptext'] = bcdiv($http, 1024, $settings['panel']['decimal_places']) . " MB (HTTP)"; + $traf['mailtext'] = bcdiv($mail, 1024, $settings['panel']['decimal_places']) . " MB (Mail)"; + } + else + { + $traf['ftptext'] = round($row['ftp_up'] / 1024, $settings['panel']['decimal_places']) . " MB up/ " . round($row['ftp_down'] / 1024, $settings['panel']['decimal_places']) . " MB down (FTP)"; + $traf['httptext'] = round($http / 1024, $settings['panel']['decimal_places']) . " MB (HTTP)"; + $traf['mailtext'] = round($mail / 1024, $settings['panel']['decimal_places']) . " MB (Mail)"; + } + + if($traf['byte'] != 0 + && $traf['max'] != 0) + { + $proz = $traf['max'] / 100; + $traf['http'] = round($http / $proz, 0); + $traf['ftp'] = round($ftp / $proz, 0); + $traf['mail'] = round($mail / $proz, 0); + + if($traf['http'] == 0) + { + $traf['http'] = 1; + } + + if($traf['ftp'] == 0) + { + $traf['ftp'] = 1; + } + + if($traf['mail'] == 0) + { + $traf['mail'] = 1; + } + } + else + { + $traf['http'] = 0; + $traf['ftp'] = 0; + $traf['mail'] = 0; + } + + if(extension_loaded('bcmath')) + { + $traf['byte'] = bcdiv($traf['byte'], 1024, $settings['panel']['decimal_places']); + } + else + { + $traf['byte'] = round($traf['byte'] / 1024, $settings['panel']['decimal_places']); + } + + eval("\$traffic.=\"" . getTemplate("traffic/traffic_month") . "\";"); + $show = $lng['traffic']['months'][intval($row['month'])] . " " . $row['year']; + } + + if(extension_loaded('bcmath')) + { + $traffic_complete['http'] = bcdiv($traffic_complete['http'], 1024, $settings['panel']['decimal_places']); + $traffic_complete['ftp'] = bcdiv($traffic_complete['ftp'], 1024, $settings['panel']['decimal_places']); + $traffic_complete['mail'] = bcdiv($traffic_complete['mail'], 1024, $settings['panel']['decimal_places']); + } + else + { + $traffic_complete['http'] = round($traffic_complete['http'] / 1024, $settings['panel']['decimal_places']); + $traffic_complete['ftp'] = round($traffic_complete['ftp'] / 1024, $settings['panel']['decimal_places']); + $traffic_complete['mail'] = round($traffic_complete['mail'] / 1024, $settings['panel']['decimal_places']); + } + + eval("echo \"" . getTemplate("traffic/traffic_details") . "\";"); +} +else +{ + $result = $db->query("(SELECT SUM(`http`) as sum FROM `" . TABLE_PANEL_TRAFFIC . "` + WHERE `customerid` = '" . $userinfo['customerid'] . "' + GROUP BY CONCAT(`year`,`month`) ORDER BY CONCAT(`year`,`month`) DESC LIMIT 12) UNION + (SELECT SUM(`ftp_up`+`ftp_down`) FROM `" . TABLE_PANEL_TRAFFIC . "` + WHERE `customerid` = '" . $userinfo['customerid'] . "' + GROUP BY CONCAT(`year`,`month`) ORDER BY CONCAT(`year`,`month`) DESC LIMIT 12) UNION + (SELECT SUM(`mail`) FROM `" . TABLE_PANEL_TRAFFIC . "` + WHERE `customerid` = '" . $userinfo['customerid'] . "' + GROUP BY CONCAT(`year`,`month`) ORDER BY CONCAT(`year`,`month`) DESC LIMIT 12) ORDER BY sum DESC LIMIT 1"); + $row = $db->fetch_array($result); + $traf['max'] = $row['sum']; + $result = $db->query("SELECT `month`, `year`, SUM(`http`) AS http, SUM(`ftp_up`) AS ftp_up, SUM(`ftp_down`) AS ftp_down, SUM(`mail`) AS mail + FROM `" . TABLE_PANEL_TRAFFIC . "` WHERE `customerid` = '" . $userinfo['customerid'] . "' + GROUP BY CONCAT(`year`,`month`) ORDER BY CONCAT(`year`,`month`) DESC LIMIT 12"); + $traffic_complete['http'] = 0; + $traffic_complete['ftp'] = 0; + $traffic_complete['mail'] = 0; + + while($row = $db->fetch_array($result)) + { + $http = $row['http']; + $ftp_up = $row['ftp_up']; + $ftp_down = $row['ftp_down']; + $mail = $row['mail']; + $traffic_complete['http']+= $http; + $traffic_complete['ftp']+= $ftp_up + $ftp_down; + $traffic_complete['mail']+= $mail; + $traf['month'] = $row['month']; + $traf['year'] = $row['year']; + $traf['monthname'] = $lng['traffic']['months'][intval($row['month'])] . " " . $row['year']; + $traf['byte'] = $http + $ftp_up + $ftp_down + $mail; + + if(extension_loaded('bcmath')) + { + $traf['ftptext'] = bcdiv($ftp_up, 1024 * 1024, $settings['panel']['decimal_places']) . " GB up/ " . bcdiv($ftp_down, 1024 * 1024, $settings['panel']['decimal_places']) . " GB down (FTP)"; + $traf['httptext'] = bcdiv($http, 1024 * 1024, $settings['panel']['decimal_places']) . " GB (HTTP)"; + $traf['mailtext'] = bcdiv($mail, 1024 * 1024, $settings['panel']['decimal_places']) . " GB (Mail)"; + } + else + { + $traf['ftptext'] = round($ftp_up / 1024 * 1024, $settings['panel']['decimal_places']) . " GB up/ " . round($ftp_down / 1024 * 1024, $settings['panel']['decimal_places']) . " GB down (FTP)"; + $traf['httptext'] = round($http / 1024 * 1024, $settings['panel']['decimal_places']) . " GB (HTTP)"; + $traf['mailtext'] = round($mail / 1024 * 1024, $settings['panel']['decimal_places']) . " GB (Mail)"; + } + + if($traf['max'] != 0) + { + $proz = $traf['max'] / 100; + $traf['ftp'] = round(($ftp_up + $ftp_down) / $proz, 0); + $traf['http'] = round($http / $proz, 0); + $traf['mail'] = round($mail / $proz, 0); + + if($traf['http'] == 0) + { + $traf['http'] = 1; + } + + if($traf['ftp'] == 0) + { + $traf['ftp'] = 1; + } + + if($traf['mail'] == 0) + { + $traf['mail'] = 1; + } + } + else + { + $traf['ftp'] = 0; + $traf['http'] = 0; + $traf['mail'] = 0; + } + + if(extension_loaded('bcmath')) + { + $traf['byte'] = bcadd($traf['byte'] / (1024 * 1024), 0.0000, 4); + } + else + { + $traf['byte'] = round($traf['byte'] + (1024 * 1024), 4); + } + + eval("\$traffic.=\"" . getTemplate("traffic/traffic_traffic") . "\";"); + } + + if(extension_loaded('bcmath')) + { + $traffic_complete['http'] = bcdiv($traffic_complete['http'], 1024 * 1024, $settings['panel']['decimal_places']); + $traffic_complete['ftp'] = bcdiv($traffic_complete['ftp'], 1024 * 1024, $settings['panel']['decimal_places']); + $traffic_complete['mail'] = bcdiv($traffic_complete['mail'], 1024 * 1024, $settings['panel']['decimal_places']); + } + else + { + $traffic_complete['http'] = round($traffic_complete['http'] / 1024 * 1024, $settings['panel']['decimal_places']); + $traffic_complete['ftp'] = round($traffic_complete['ftp'] / 1024 * 1024, $settings['panel']['decimal_places']); + $traffic_complete['mail'] = round($traffic_complete['mail'] / 1024 * 1024, $settings['panel']['decimal_places']); + } + + eval("echo \"" . getTemplate("traffic/traffic") . "\";"); +} + +?> diff --git a/images/ball.gif b/images/ball.gif new file mode 100644 index 0000000000000000000000000000000000000000..2a681e4f2a689ebfbd6f78eeffb596f500a86a14 GIT binary patch literal 51 zcmZ?wbhEHbWM^P!XkcXcF+=VD|Nn|VSs1w(7#VaJfB+=pz{J&4pRlX44zLCcy95F$EibYO1uZToo(~bJ4G4%A6`~UiFETVRGb>~zC4U|t zq!$%SFE6bX8P*L9ycHBSIy}D`9auIu-4hU|A|v7v8$3Wl*%lVHARj?LLcJa%IYUD} zLpwx7F+xQ+OhQCPL`R-2EVm{qJxEE)A|ypeMMFtI8%~bs9Uqi6GsP$=Rz^rdO-@Hl zPGm+$N>4^iPD|<|C`M6IB~+FhSe}VNK(;v;Qd2+FE-}_FEHPD*env!5Q&7A%Hs3BV zJXd;5R#!1uiC|Jr@+&4(R!$>aqt-VORaaD)MMZK@OhsC9^ery*E;LwLS5{kIXIEA- zV4KrAJ6&5-twlrQHabvRi9BDG|1UHrW366ZMpIsEFJiIjIX7NmQJGOpJ7uV1VO_~Z zL^Wo$O=XLzQabiLIA~=@E^N8pMMd96JYHvVyiZQ;L@)6|L2qbF%ug~@Ylr$lL1}4b z#8w?ZZoZdaST}OPIdaEsZdw;JPDJfZPET{Fw_RLUbe=$W&D~W~!D1zp zYG_z=yJvH)>RT{)cy)GlrPgT-)?r_KeP`fgVqAp0_+MbmYisOfV{(JB#d30~fK%Xa zZ1-zZj*C-?igk>NZj6eD*nb?&fHn1aMe%r1ejqsGz~;<+4V# zwzKH9F37XA?W(HduC2DZz{9?S?YL_7xo+siJ=eg(?a4UK#K_Ldmfy;C$H>yi$;R%# zzx2#j^~!GU*$dpy(9zS-^4%xt(9ZPVHsjlt+1l6S*Vp6St@q0|WihU@3J`|E7`>~!_*kN54F>FVeF?|%I7h4$&`{qv6c@vHjuxA5}r`u4y5 z_{;eE_y7O@A^8LW3IP8AEC2ui0BZni06+--0RIUbNU)&6g9sBUT*$DY!-oX1NSx@! z%NL7ZE>_$)v75`_; zpf%BfvSm$1kEpRsS*=A26DCG<$S5&GL=C}8lH{2*$&)Elu!6&qB})`2QN@Z$rd&A= zIe-4{Y11Xj4;3n0&~(XyMNNwnA;SKj7=MC>c^^H7sE@+Fz4{(K%(GwtK0Jo|5h5f= zaA3dy0RjLZAb|cIaKL`~-KU^};WZe-2|#?L5Ef&=qKhut+@qCM^pLX(7I$FbLxbd% zcV2qywa4Cj@zF3}eIY2A-+ul57odOu04RWeJQ`@=ehB85pbt$l1ZXiC^AVNC}622mtKM? zW|?LxmS%2iy14_Ka;8A12mW^AdFKTV)LKCW59BJrt_mms!LJZ7z(51U^7h7}%>5HY zrlxpuMK08cBhESJq?67%?Z5+1JoVIL4?g(VBW}0d#$)cb@oclrFtq?OCkL_0N~^87 z>dLFHzzR!j1HTIL`>9%Fn8FBJ|Lmq++zu zzyM>7Iq&r2wA1|PQ}aCT#M92lAdf7q$tA1o^*r;q40Ft6m+g=ZL8P6w*=)D%_S_p{MHkDq=5o&TDi3M3GVTP6@dau>DTYvKu z_*`_Y0K(@W!&0Fz`=8$M0C7W!=FxzjdPAtV;t=r3 zM_+?7V(`KX-@SkY5><2rhHGzR0ZA;sSPt2c1PdiG$w^Ss4tLZLgb|5{JmouIid4iR z_rXX;`r(g%0ED9)5r{_v@X>(^Whe}szy=YbUUQz~kA2)D9L&%KCH}HYQkT9ICLxllh-zY!s#rCrI>~BQwQ|6%a`k{+ zNuXE23f8cQ#X5gE4vbAm$g&jSiAlUMj-aCBsD_9~Hnr(Zaq1(i{z!p&39?>=yjLRi zRV+_9GG+p+TFDSrt!rg#TiyCrxW+{;idhUE8PgcYJeCfSor4rEvQB^aL`g=w``a$Ato_jS}d3x>zK!kskLr$&1))?hdjhKKrFby z4HEuof(_ti1GE)sB4bEICsc6@VOV1vI@1~0^Y^r9Hes75y` zl8Njg5OjFNCoFLYweZewaIpd$!f=MsY+(y~*aM~*$I*sJBoIWvU1oG=QkwKGb8!)z zQ0&r_LQ%Y9EMpqpC`a?80zG!910Cqlh5%!xRkQ3gEqn7S=2E)3;PC|#e2{|^YGc;Y zoep({In0^b&=|)+X0Np?$z^f}Sj+vCu)w1WQIB^Qu-0i#=i9N6mCX;dSwb9G)_>2Z&HsKd7P zgq%t*!Ha6xRUPVhUR1I{i>qRx3Qeej8>#>w6sgZW>Vmf%;rLJ!UO=DmRM zBOqnK1@{9&6Vh9S7N;gPM~Z_tv|-5uJ_$Pt?2Zj!M7|TD@4X#<5&S|-qYd6@Kp*T8 zp@Nj4`NEqZv#WiUaLZd}7D;jjZ65CJCV7{nnG(NuX%6)5FY0t;AR0|h_;0Xn$oE4um7hni`W zleDBwJ3C7c?#sUpNYtPEwTZ|qI5)@vk&rm zFP}l^X9y-)$xA95-kZE5s-Io&R^6MF)<&fv`z_6X2Ry+Mp{PRsCTR*wVyO?9a78YV zp)Q8y5+5w%1~;O?u3EeT5PDEmv@K3;dFfl@s`U51JmE@#honfQ;6^-VIjveQ43`eu zWyE@Uu5)HAozg%?D=2Y<3wZtKgxq*E6}hk97-FJii)B5So-kXwJnH16dc~}cv2+rX zom%7C$>51Hd$bJg+1zHq4%T#VzI~hyomkZ`cJ*PdGi!O*JKs^}j(NT;?b@_iH_w5s zdfY4@{CJw^N8b;AF3lWK(}(hXM2$QNR|hCoCj5~J`50{97|Fbe+{2!T)Ls z1zbb;g~tVkwsAT~Gzn`33$ySGzt9YXScuF(4F1D$Ss>R@ap;3QrG<5vfx%N7BJeq7 zbyklBS%-lbXHr?RLxs%ISCTV_CpB1H7(Ao3417Tfh$ROzkcos5S%xuLo~VdCc!iGG zS*3`9Ef`uuMOsJb4cSl))i4dm@C&n0asoDBs#95h;0Usy4cE1ZBhiB>NQ%D2f-Wc& z%V31Sh&-m1hS615(Gw|em|3`ZjgLr&rf7#i4{nP@>;*SgF59nYDW#A;7mSbvwnGd9yVzyy?>6sq}nuk_oRJ3MEMktWBAP#Z@ zEdXT`G6u6yK)r@QI3^_w6a$(5iD421oMc95!-+x0sb)yVXiBzZTU0_P5ChQ3C{k9P zPr?O`01C2D3Ej~^+qs$E*_q&ZX2qFiiZ+@B;%H2kASY0j*Y^(ulm|~R3Cy4l)nyfH z)Ma1RV}Qn)Q4nO|8Jfpgp0-Ay=?Q5*5PS(rA-{kQ*`qyGu|^?Mp?}t$S}C0VDMg7^ zMM*ZG=m}>;Vk8sdDCmY2))fxgfQVj?uq@B>Vc1!p-t!$SsSkOfTi13v%* zFrWe|@Ru}dWHxG^I66WF+C`E^mW~M>+5iiVAOyK7B{!5qAus|uPy#j3B@kyvrIHw@ zqDMP010^5>8=wIifB^mrkN{qaoM4JYIa)#*QKE6s47xC7*4b${^adb+0+{-6nuMoh z;%t1nbA1#quNG?oP;2KYrXhML7g3_`X=6~r1%7ZW#dd7&mPw^1Z+iL!6t`-kgl~Xk zD-N(Hu+}FCK&T6FtjM|m2%rUqpals!MoE$-WdIA!5Dws_4r^3wVt{O;cBjoYZ=cFX z(>6-g26pxWO{?^8jr6S2$qXopXWO%GZNw?Hx@-}br)Z+9;c9O^mv8hEc0t#1`?4G2 zh7jb&LXUE1TCr}LLa)j8Zkzh8xw@;MIAEi;=Q!1e5G04PnA8VWiwURT3a;=9uW$-p>$Qy#wrN6dylSx+m$72kw8TPm zA4?fi+bLJT3d%qYP8UuuCv_6D4Kl|rH@7M;d$Ab@u;?muYg=^w_z;uS3((L_-{f{s zhj>$0E{nH%7_$vp2M9+1FEM*cf=ja;+b>be9I>=?gx7XYCr%HOc;>`-thX`5ly$k# z3e9vYKsUGoODtv=x|E@IY*)93m%5Rwcyq_P!sNP-_j)7aP06%Otgs2ry9un23&DUg z_3(Eh{wKOvFfeOZy1x6kz*|m}i%zXqOpuqnk~evNcTJclc)e?Q-ix<#_e$s>3zmhw=lv}*&RKNFozI-Q7{hKWR>kf=tcncE`;(`x1 zvrwrUzr<^I$7{c^XEOThz?WBh@=z`DAP@PVeEiVD`oItG@D5B9!!+D9q*r=UgL)Gq zOm|nlB7?vBOMPSGzuJ^g^KcEe&- z(FZrAHQMNSpLEb2` zGo&o3?WQ{Wl=M-F%#26Yfv8B?CZRTGSTxwqT9-ra0IFz_onEWc z4Nzcz0KgS(0GOizz|mX)khz%Y*<%3!*l8;>vSY-=*sT~b0FUmR0w0_S(;Jb|5P1)r ziAmA#Ren+e8F9*-EWOy~6UH~#N!rJBA)TYGr!S&&`4X#Agzf-21fGsIS8-4^P=>XE*hDXr^ zYbM%*2f#5iMB3hVIjWjY>c26Ip$m z*0(r$4#g<9+ihb{9?S+q)DAw`1CTI?Yg@G%9cP%Ez8;0}iM=icR|CsVRk~&~Yb}bm z3k@mB*V#0x_HSO>tOPB{;`>L+AwORe{M2?(m96x?9WbaQ)Wzs8+6xZWymTrD| zo9rwS-%Dihx07VHC^|1$Y{RCX08-C9nst!fgLU?W;oeJ->O%$HnZn;&#) zHn?aTorH*!cm_v(AB|QISF_Imkv+r5Iw_Be&9e%cMf`juE^KG~xG~B1%e+)65BaXK zYZpMnAe_JR4|*1@t0dSJs_0DqUTV6m*{L?JgRK7Q9+luEkJ^!dS(u^%jHrDDDXT&^m&W3t*L zA8!OiJ(y*qLpoaz)Z3k9`?*m@3t^=&GX_El6`dP)GdDO$VG&9su z`TN)Zd==C7jp`iTG?nsLl#7eOxB3jq zr#|?qk6~shRL+O*qh}TWAUf3azFvu1n%)OfRMfICik;koKg{{N@JTOfYfVgJsHdj~ zucpSsD=EeB+EQ3^DOhz;-B_&pM&;#@XBEu`<@9*Q|dgITgK-rp4O_0BaXy!T|jgqppwJn`g ztycvJyX!&rwa*kW)v;xX|9-wm^P4!%A6e?$1_;(U9>;A+9@)anFsHq|Lir8;L)?I* z@zv=sHcj8in^L=X%Vsfg-HAfo$ue5@azP-wK{KfNrke27eaj$Ya)S&B(4ns^fJ%*P ze8T1i*BJGpmeq-{u}YPubSf)PWdYE_EZ`6PsVP|p4J(`#w^oO8OC^M8M}{YU5Q7Jy zd*eVIw+5C8pXi`MxH}I(x>pp-dsY=oAZQ54Whoov^GhD1m0tQ>RS)%A(MipN z;OsL`$f(K~bDNtCsr4|8cAArcbqso;o31~H(cg)?juaqc#yu9RbD8MizD-o_21}fs zaQi{ae{jvy{Gs+2FS_t}JWwl5Z6|tUD?IjHet@;fAv;FnTG6vS8p*B$WPcC|(-62v zt{@F23b&v((}TW)V8E|65F9}`@V#G77gitM%UusAy4f+h=|C@x@)MtNHv8gU_gQjAqWof781O_sXsvb zoT#xSw8jb~h)HZ)R*SQb%CP>YUj;HbnZvh%lW<1@$@s6#l|p$ARWjG)MASNv1N*Z2 z;*M4c4pt#nTB=g?M>=J3Lp0t!qa=|HY0XYHUI$*oFibH$YX|_R2aHqU3yjWl=Gcbi z)3Ry@LgdcG6jsccTJ5pQIdEjQ(u(4ucl{CbO7R@ay!%J}#7gs4`@8V$#?$*+U9Nni zW?J(PU50e8ug>2Aajz`qIURiqAR%?E9VI~2J(%PLte!bYeOdxiXE8IeytkbW5DMT( z-~!$tF}w{sS#AD1sN~=D4?7lf&B|h$f*{Vk)AG!C`i&+1kzrOM8zMY_J8~`kHiT{% zHIB}KceLtjc>8cQb&Fr8AfANJiGbB`D4y!R@F@+;hIUifYgzetSBw+v}1QTZ&$x2Sum_^xFZcC=8e)Hive zC>Fv5Jo1i-3xLSPW^_x@_3r)~?LAb4{A}3!ghx$@+Hmsq=SLLR18Ld&A>z-=p1E99 zuMl&4JSM|&h5E1b1m6w!Fj z&A)JE;)H*mr-l4E8Asi31y>MIW~I@4OIlVZSn(N zWFXHjdr5VR8TW$^BMd-q*>n8#QIGhIIikfg1>Y)6`Lh&U)Oz{{XVV|Z9m_C+pY59B z``|)D5}^CC8v$VAV=jXQJ-LO^J_#nw^I#OP?O#)*4jd>*)_-!RN&%Z6(RM94B=X7u z$pX!1DVet$QbeAfQ8#o7+}#xDFm~Dkz(cghX_(V9EH?;s+&F4I;?9X{2jJ|5eD>;A~i2*VK<-9yWD3XXxHIi}XHB?V43K>!4~@XlqB zeV$k*G%6IOPELC`ci|4jM5vi$a@2q5_J zXmDiD5w+;uS-Jcn=7q0u*f)}#{s+Y9#7c~$B=qk$vJ1rpsVQ##8^6jc>A*)SDbW#{ zwD7M}v_7?PX6qS4nau3?4#KO<%*@a*`+wG9a-kjdnL>3Z023G-^O`Z6z02^OFg{g+ z->0kC&U{=iRUvF-6z3&emK|3B+joo!XMp@vd(mwF?R2BZ2<;0C))#2%44Bn2CQAQd^Y8*z~-|-O_+^r!v~}1Oswsps?k}x8DjW*mGDq zo!f6>5=*;8`+^8hW#Wz}n&mM8;_!!4XwR5Aa<~NZjp|Xr_Mwtr{>W2np6vy^h#Cw@GmNy5ewMan zx>7<-e3pt~#t201>%-F0j&g}BCn3?FcS8j^ow;Xlk)5NXw2H!EKRS=4ss7VpZd}5t`qT1WZ5AuEC2JB{xO(50p$#Adi@U=K?gg|l^+7ushFm(lb zn9N`AYObThfiFT#jIZ?7%pTFfjeilgJ=>?5~$$QHh z3l3495qIEM zBe5QnC()$Tx98^k?-#mv_kVe!Wn9{vsCj~xSO3U2o}T@;@gjU zypqGbnGEz|U6jSxnlJ%2YOUFg#)OX~A69~&DgfF0PqN<$GY3$D214iL`M5Meq5jbp zI`j=>|1YZ}={3Kk#O>1D;b>{N)axjG@pbDIbo&^&EX>aam{&@~yG;S|(? zhWc)Wg8<>`4II0|E7X}5U+WGa@%s@$uvw@?q&jN!v2069jErN33Fa+}Y&$pJt29#i z40P#JrApg_miN6t39U*&iLwb{dO!XKGG>2vv+ABpJinWat)4J-ZI9b8ei5moi+|#$ z(*?NOLezPJB$q*$&w@A7&vY}bshjk18w!!CHFol ScNBDn04sAlvl|^alxTiN*gUFxNA#-pWo%%ej$J za4WOmW@ce}Zb?=_S$1IsHm@|d_-pmaYao*X*KR{ZFzNlRc%vEeQQnq6a1r= zx~Auit?iGWcRhL0{jBXx+sn?ju6LcU`(D2rdi(c>_q`*7gF}6TV; zG^4~8F3e;XBK9} z#A9l1W_DqEc43mvqEE4>XP7fHOvW^4W`;F0%bb~I&CD@pXT?~vbF8^JahbDo?73~6 z*;)47yclP8o;^R$nP1?{Z=c+Gu?6nJg1Eee1>XDue|nZTw;*7OPbP1kDK3A3CAP$5 z@|a9Mlf`E;7n!U@);2ziEv|qmE?dB2FR?gFY_@>SUSe~WIO5F_usK4`wq+Ju$mR+; z+m<=JWiEG_yImoNx5DMFaCs{{@!);tiSbu>{LfteXFgxNzwj2n@cCc(;x2w&-1ddT z`@-gY<_o?qZu_#hDB>-O76qckC9%~-!Ky$Y5-f=X;<2>4BqkJ(wWV$A0^!=yw)LfD zu{EJ^UAVk16s`$Z#OH=^d1HCorf_9rd1XVmvbnsnxkp0$wtou<*)0jlLM<?0fEVu8oB1@x?$b^DJ%2CBVN1kopZ$_CCiw|+~inW3N_g*wOy`MdzScZAK^k&Puv zQ+pjMOD9Xd;z@AanZbPc@`<^ySIJAf!R6o==z)AWjnStB);V&$Z^OA~)14O??WxNq z%(RG3y@Aw9X9LpOn2O|9{)Da5`EpQ zc<{;052|plYO{pIHMxoki_VzdiL9o3)@UMEEs$S$_3P#Qt&u#t=5f78N9(?^q&^%o zKwzJqJ_}s(Z}7rF(>pUC|HpWV2Re*|#&*`rhsTlOM=d(JR|+h9R{Aup`+o=cSP$w2 zf^CQOC}6uWM447p2~wl#EIa&e{eh*9N~MDj2kn%dHkcVYhnstw8ZJtZ_?!~wXnjPJK1~ZsMXk`L7y`*rqWtb<;d(~F?e!zRs5)Aj{em> zS;L0c2jnIVu&6;_YuXl#pWDl8D{Peja#<#asFg*Fa^=bP`n-#0S$RCZlq|H!46 zMRu%Aithmdfm3|whhV(~A!RXuy4+P4G2>>V_E;+J$S+a9G9o@Y)6=LTGdv09;0e+Q ziMN^4ICV+VLyMj+>7jkTl69)eMO|HHEA^^jmS^DgLxVX67-@j4QD%hug7HuP`ZKp{ z3VC^^57MCCX6M^@-r>(ljS(50g8G8fZ-28jt<&YsjoN(792srN^KD?*7oW`-`#cq0 z#y-Fy{(=^E4Y`Is-{dxIyl@1>18}ItyJ6rS|8lOf?v=|xRj4X*0y0*E$(jlcH>%ON zK-vH$qq)?wxwG|>p1N@Z2~@q;}E?kO>zqwu@e_cz_xZWr8OTT6>Zs4hQIN7`afkM`3MMn&!QX( z4^Xd7gRi2|CZ`BTeoYMPzn!x%LsmW17ZA!FHd#ftMHvQwblHA*vFf)a3Y-Yh@CgB= z*M{JE(&hOwt&vG_RY4%vdz#@~7pr%IL91LOSW!Jg`?-{=otxXPK&PSPt|y~kNUZu~ zVy=E4Mcw%lrbK^@kOMGBBIU7w$8*vbg5G{`x1NyFN5x&#*LG1WM!1{6(B7ux$fNb^ z5Q~sS6UU|EtD_|6AOA=yc_8xxwwh{NsOGA=xh8To z_$e?d@jwC8DkD-m5^7^j>IYyyhh&ZlWmOOXnZ}0ca=!6^9o0!$)lI&RVe#jD#}`4L z3wsOyLS*QU!gd~*H8S^YThRU2(6cq@tn>8|Wf;&*4j}KnrwXrU=0Zkv5!}_EF~T1S z0v>z2ds#I}f#G%-u+N+4+MuGjy?RM+V_Q`8%pt=LLkY#2c^-Rhyc>(wdUbBc1R0u} zd3m}2>d_S;WVEJ2l`~b`O?}&7v#w237p{RUqk9!jwiN5M8}I*8-dl)}Q~u45P&+_n z#a$z8W$gSR%GuvF?6;LM022jHdP}q(mI0~+%TYC6^#C*oxTAYw+rq(L++FUogR=Kg zY5j&K$+T{dWaEZ|>WyY6mIQ_7hwZ9UnAQdkwkzl?#-UOdD{1@OOLyMT9sTr!? z;sAm!vgJ>b;1BE9v#fsf75J)WXc_MHuqj7Z_Tet*O!=a}5G0k<@}zp&u{kj?Z{^en zuL#0FladJHykQ$2gmQ+`E{N{y~fzHH4mUTb=WGa2@%oes3 zTib-8C||MFGko6X;KlgacN;>@9-cs>)YhJC96~Lsb>O{uSgXc$Cd?j25*DL$+OGT9 zKSe8Ex*_Fm=91$u!U{He<+^tr=jopCp}O!wkhUTop_0{&J#iQ&y{{!*(YiiEesF?|n_{OpXu*)&p`c1j7?bw3=&DKMwo+ zwn>)|TJL(VLz9{c47i#~vVaamM)(9+>qlnGHj=?!#vS7CYR&t%7nMf4W3p{_S*?;j z>J(W%0|Kjfa$b0VTDK$Awb~w%`r3Zaj&#|buj3M{jk9*Q48Vgw^xfS$=d#19iUvNb zb)kxxGuA*@jY}c+>&i6${pTcHB_(_Swnk}I`1jjPv_GErMu-S%4Kju+AK_&L#yAfj%A+`kYa2RF zzLxV#dEZ~BG8kNR3(pNDX`FkfR^aOirmDLReXt&~tyC@gt6Zh7WGZ(5i57a|Mn!o$ z;3@H{yC@i1avqjaJ)?Orpw)@C-zf&_dBSm!jpJ4ZVX^8zw*Gaul)a_UFgTu!S=&)> z>Fg_aZe-^Qf%^NivPu^5z=?W!xg+6~kZPtf;3E|C+!3Yjp{beJX6Wsy(1}xMrE9*E zK$Vw+Uo?ZCts9Msz+IY(#bmA54X8V%ii<=jpLqUnj&=hwIio^H`qf_Few9nZA#W0- zdfMC^nNpJ!djqr{eGxeI9e4ug9%H8;2JzURzGK!%`Y>8L79W}@l3veHv)V74Y;78d zc1TI|Odc}*=7}hmz+f?ERj${bNNAd5BNd^JZ{uV1H;@n79d!e=NTlp>M0#P{Df4J; zXIe1AB)ZR7S%mO!VJSaL2x)($vg-rZ!t3HY%*8D~H6K@IfEN>3#Ly!qgN`%Z&usWK zY{H{(c~rHab5I#JQf8wp$X3SlXW8Lox4*&?_Yv%3l&J*sFO5aMI0K;aQ%gg9;W*rcF8r)vUeib zhXqQV<=3e4@#*1-XoZf5wCL`Fo2#+C zcq9G9QZf;Y+qdh$IcQgg;v7lwxvdhH6s)qT)POYJjEEj`4Wa(ny;}|j>J53DAl1P? zda57h76EjPPw3GE{!ga+8==)%AAxWw4<-LYv|348IoM4hV@io3pHE$&^ z;woSV36(olYhB}ShHC_#eVGxE24a^5oBZrTwnmV*ATn5hdR7toGU5nU0dZ+9CVh=y-($?#0q&*=XEN>Bt76 zSzJ2i4i>2#kbSN@O;bM3-b7J1w7Kl=u3vn`KPF0sRZ5T4l2`EezD1ngL>>B0Ql(f kUx!hT!0MxR4?uR^%D-2GJbm3<`BrK&<*~n{q{PAh1ESlyyZ`_I literal 0 HcmV?d00001 diff --git a/images/error.gif b/images/error.gif new file mode 100644 index 0000000000000000000000000000000000000000..694a789d25e1027c0632fcf1749b8a1473033658 GIT binary patch literal 1294 zcmV+p1@ZbvNk%w1VHN-w0OtV!00030|Ns8}{`~y>@9*#K?(RuMK`jvj!AlSAT@&eC z6X{zM-Bl9FPY~x?6XjVG;#d>lR}6Wdf0s6h_iR}{QT5yMRrszea6M-rk*8RTp) z=5RFSb2=~>4B>M<;dVjgc|_!UMyqmFjAKopb6u-|X`FUrv4?Tqvz=5@QBhA$T3Ag z5x+$b+EWtQQxeuu64X!<)K3z%MGvz?4}>xc!Ala@R27Ie4uUif+FBg9Nf^ggA%8a& z#a1QPU@F&REW=qUEENi-PbU=$1<7MI-*P=D6bly&2jhB2!)QI)bw<~8MbmOc(QrlG zdP>!GNXl(Q;Zr>&3KWAO&$H27f6Bd?*K(F$sq(2!$*Nbtea!GYXC`38FR& zp*9PjH49oE238#gwLcBAJ`J!v4X8N`rZ^0wHw>aT43{+vhb{_#D+#$m4z@rJwLlK8 zJPoWn4XQc~sX7gzHVl(93v?+7Y9t7~L=U_}4;KgmBMk($M;Dqt7iTLGv`ZhbNFN*w z1-(%tzf>l;P$jlcC9g~*9SsJ=S1G(yC%027v{5RsP${!fDy>l|z*;Z6ST49#F0@oF zv{f#~U^Tp3G8761$7Vb(7!S;DMb2_cA`=bRlXcRLa;SZ4*`tlzsFLNfoZG3DML<4F zMnq>I1!f-wUmgWs9R*z-1x*+Pi7W_vCkJdH21gbIf+`4QAO>U~22mLWL=^;YBL|Kz z3L6OmgDeUl3j-$?5fKXsL_Rz{HZ(yxI3pq=As`_A{r&p-`uO(^aA^8LW00930EC2ui02Tlk06+--0RIX6N1&j=g9Zl*r1vDu1PBXE1PG8K z!-YES0>H^NNztWh_6T^>HA&JAQEP(bl7z~YFk-h>4f3N07y*I>?i3Nx0RjXG6NLDX zapQ-iM|0TS1O=u>3?D;;B%w2LA|5D`5P56_Xxl*+hB7r8>xfVxYRmLoQ;|?$!FBaK z9B~q+iLDmH@paAT~Hi&;Y>#2n>YSaFN4PM@}KNi18t0LIevas#b0Dix;9w zi?mtcH|s}^8#B^uZd0|GDol+8G3!S_T?brK!JPXSRFWEid?<|$QA4sEMPzh7BU~02#sMQ$Bs?l5*AEmBm@Ts3l=1H)i;PgAFpgKmi@>XeIz2r|`(g zAj<3#&l!?*@&gUSOk~Uzt;8|WF|aTa2p`zYLjXLZ)Dj9Mlh8s7C5R-FiY>ClGDsiU zOe4=h;&6jYDVJP=$s)lGQb;t`R1;2k1l8sa8ixP^%^rDF)66qy#4}xT2z7dsLID8) EJBeca;s5{u literal 0 HcmV?d00001 diff --git a/images/error.png b/images/error.png new file mode 100644 index 0000000000000000000000000000000000000000..4bd83676556113763715cafb46bc450e04c8ab2f GIT binary patch literal 1788 zcmVKNjW+;pls90#BqA0C^wjkA*Ce{}dTT_z?54D$< zJ{z?!YK{B>O*Cp!TT|mDrl}(3Qp&w_fGRW0Ff;t_=j`pnK0gLpU>FkPN>q<9BCCvEgsY3DUEDH=ElCcGA!2=%+x#-58Q}P;=47mhh?7 z-&ohl;p1@h0>it8`kGqwx94n2io0TCn%K_HZqvF z3RkPhbb*2O3!em*-kB+v5)uV>qyq8_oA#~z%5ZSy;31F!CXO*x0aC$x#~IwUyrE^j z|11K8zP%zXQ6-)e1Dgl8t$!>&{|@CS#F`3Ju3(}uY+QCM*ilw(Ui<{GX4d^DHQ`PH zcx}t(zcBRW<#P1M`v^}{8u^g%Gn0&-Dlv8L5@-oWPtd=+$8YaSJ;zMhxvfZRU^WGI zt@`SQ4b^wwK!jPUBPYr2_!V6*Rp@-NLh5UOr263)6k`}a&FZa79=0)G!osaoSV;MI z#z14oip9?_`%I3B56+{MhmAmIny*dJnGA6mtkCf8S$ZC66YYz$F94~VT1>LQa0dXS z5|0n>ShuWl;4SbPk#QAmz?7zD>=h@8A}|rI#-2aUng?6&jSbtafKRA&Wq95^Z&m=U zUBip_b`QeD#mi_dur|h8Za86!B#t3gV9LPj|7P);3Jbb}=YZ_Z7!XpDo8N%EU9s>| z`ld>)Y7-%~b6KwTi%(5mH#RH25ijZ$Oqx*CtEP5`-?mP@s}8mm#&V#FGBh zcYyxu9n|@gO2hSvfNX2(nft!bp|74AAqX`RgVq+Ek;v%+-U*PIju`;?enRbP5pe=U z03mR8noXa}q?ISW2cSKtp6|YDTl-@G=5bi_qsLP~$aZ z6EN`?h(=-L5AfHQkhL*X+BFzL0A9jE0d%kA@_Dsl{8IFLsrcxISa@ad2LE2ug6x}n zemJ3XXYE`~?eM(**gt?BT4bS&)_9GN#`Npe3=KfdLo^bFDB8EFrYze(7ycE z>Mi*``}b2shbQrB2GsxLx+9;8Coeja{#2KtF#Kn_TyAn@J1vh|wXlRDBuR$~p|9K1E*$eq@ zP%4S!`c*0*P96jTC_+~+96n@wP0W6vs`f0C*vLM+Zn@bJMg}sDZK;7kf-fQT9ikur zKZH~RGTKn#4{MpiM zIagH>)blw6d<(vEh(hh?4^ocmumKvop{YAbXbIAQjey8~tpQ`8W@lbT1?cF7V%W8O z{NnU}?Wc8n$NF^(;sdV}q`*rHcit%p*}yqVXPm=y1ElicH$kciRMyqxxCFIHs7yk6 z0?Lz6nu5|al!{PvEgJ@?8K_uRJ$!%9$gy89)U`r&yrvBqLzi!qis8OJerX|2TDzdK{f+}_{Z zKG@zmsl%=9{jKeTt?k3@6S94{_2=NvN&Iv8=Y;$@*gi2Qqa=bGY;8q>ldV z9Q@fi{Ihekb3%5G{_Gy^p2Xdw-4n8VxN~Ao$p7^3&fek9-qGIfN&Vg3JKWtn+THuR zcS835?(QG$pTzyY`zK`oXz#?FkpJoN-oeq{!QX@ZlRDl%INCq>yMJ(ea6%4__YeOb zp2WlB!xM7&_u#~wkpJnwgQMf4!;|`Vc=Y%1==kvH-_Z#<`gi#E`0q*l`|s}w`FnhH zVou2alzDXg@A&UYG5;PP|2_Wq_n3KnLXMgLj{p5T@h9?+`R{-0ME^TxGMWEQ>c9U9 z^S_hCWd3(@`|tl=C-x-#PyYYpTWPz#+SywOkO6qyO`rgeqA;}V;> zy2j{BNa=_;H~5o4d62@5(@WW0A{%-S;E}gYLn($nBRFeQ#RzN!9I1e;3$%PZxyEFz|5t+lL;r^~%1x?80rnz4S2OYn;N*y*s#Wy@PUzXyi&hB#Vr2 zeb&5uti-H3;ud+^eCeC5?r1iK(8EmlPr?v}_)Q?efZ{mQ!#z`46L+McSv+p%vp6x5 z%Dg3EisKpLF@wxQkb5%IRHUtZ{a^x@3ObQ$r=*#PvbD_dPC{SS96~t+I{*5ihZio_mWDPhKt-dw8@}DW z+MRRi?&UY+Z=zRwy^}?6iv^E}UYp`E5zQ1^OcsrwQvO~+Ra`U?zr9J6u8Q59POiT( zznm<7?O&Y^$yxf!Rurk_HU}!gn z%eJ&L!{^V+J;WCPLg5S`w@8arF-N=^zC=D_3}5J;Yli1`YlBO%`u2|vmjzCk;RT}P zw?|=k2NeJ-XTAymjIzlAvRI;!6WB=+r0E%PItj>*3C{t^6hs5S(qpp>kW%wt?u^Fw zSrS;&Hhk8K55wnZZ?3z`0NejGB(flEI`bWUZif}J1bEOj-1x#k=&;YHa_r9rttA1Unj z9=_>kSDgL2$lf#eMu?;RX@CKTLW|x}sQP=S0Zx_Uy*rV;?=};-Gy%84k*}AR2Dr~+ zt|k1Q6TRk+(7c|UfOuQ;t^C?tBCFW$IT4^C&j<0=Pq%)u^of)HZe9CyWIV`Panlkr zKS*VhTGLBF8WYbYnOn9RqO6@k=^7{&8LFuP%)u5FV9282ux#W);t|l#Pn1_f7%Nrw z^Lyf|MEPXQw2%V=&*(VZa*DYtD4}4Kk*E?*Hd9bDKvz4|$Yu6%1Zci49E`42Z!zO! z#*8lu&C{W(YYo<+UU`DFwOVa;<*9OFXF_LxZ>)bciX2rJ|jaCunj&(kBO-#UjN0$3eo!W*H9K@z`93Vs@f{J00 zf%&P=AYS+s;;Ld`hHCmeQ;`rXdQ09!M4uAsC8a0U06;td^vi_LX5(@E{cnCjh{%KFGW3^dJ+afteLj>3r1} zNU$Dx@wIcCIvWZFIMOBJv=W57a67A$HlwymKomqohSSm!B) z>>ZN|VlD67^rrZ^*Ah<$@er5!2Y|@Y9hD+2OK%+|Eu=_Rc%d@cPc{!d2IEsLmdms` z`>kZM#8|D1yuN0`sy#DF*JzEh;-vC|=e|RsP3+c@^!DC&GRa!LPk~XhJ-wptr()ms zab0bae7hO=O>z39^6b>}G2QN9p~%N7oqqnJGpNn$zhITClPXHthVfOiGAkcOukhxzn|U!Wz}# zCNY;n)lrdvWvf9|W^F7K{btZTB%Eq!gLy#UgQ$l50hJw^Wh9oDYfi~fv*x>{8IBiO zzE-QzJJ##8!+ZCr+Vkw7giS<>K{eMdRDZfJJwvui;PjBOUa_tH-R*p#{i#N6l{EWn zq|c)J^&`6cD^A?}{1_HnIe!UCf2w<-1hb{-q5`|?)50Cs$C+-W${^LsA!so1i@wYj#7dBqUCw6~HMRJFKpiYk?2)?)6i&nsZxHjH$F z2M2(7?-0;Z^af%CcwuSkR`q9kCtHo2yHpp^?$Hiv)?QT zAYLeX=`M`GnBl?%)+kH{nLbXniJRf2syGCj4EZN_Yt$jl#bNC^W?Z<75>$8=CY})n|e%M^p z`IyEvL)L_8#~5hm4XY0Ceah=hMXfog^_5(M1fkU|=x}Tw=lFW>r_s6CXL)klFK_<( z>cM*BC(rq7;|5Rn>QBLLezw6*Ex^6`4eZ19 zfq#o6I1{DWa5MKpI&HT2MG;1_`nC|}#aV`kOP`6rU~_icl%(QyvWXI_Vt$r`K5rMz zOjZPpb~S~5wiB>$??(!UYetLI!Y#r~UzZkk8~)*%PPvR;i5>eZrMV&VG;7?RK6|H5 zGtk!Nn$oOj@8wUsx7Ig89cD!jEb8@?#_daw41~TsXzYwiW87(TBuC*>yuJiqNI(r@ zAgM4@CYwtNq*d~^W6C9Bh%4s7>ZwP33L(w81t0rYv5W%6XyS^8M%G{^@f>{mb2{=# z?**EiM5;G3)(fOMKY}iV`wFR+0NjeDqzk`fhPjNtK8{o$$UuO@d9jxQT(mO(Qz;hp z!U_<-nQE_CmyvN(0z?MrJ+lEoI79!dMC>@I;0GpQ@iIJKX%PMoQ#D@Nq2JHc8#b#< zH_Sel6QYyqwCDw0q>js1Kigg#05&EGMD_t64hIJTL5;(9ijE*P7BXy9fcnQiOIffm zLbE_ZP@V)Dxe8)9h1MuL)NMK31!_M~)|QeMQl(K^c+V=+gggIe_oxatx9U7nzC29^ zKWWz)0g8Ms)X`|sSpZ&Gh@dW3=$fI$EbDc@wTgY(68%CJ|FbOS&@FDr5MRx6&fvqq zD44xIXKo+y+(Z}OZWrJAi2tf2gzCf5xXNEzZaS@Ewr@lGoE*&%3<4YVl5z@pm2xy>+y;Sn~KdS%5h zj3ITI4!xltbIm8sZWT(2ym%SOnz#bJiedGvGs>i-w;f0ybV_@DyI5>zoDu1DyX9(A zuIxW`nW{F~7LXhZzc?LfVuW zuFGtpKXzqC;SJJ!jiR`|ZT=B^`VaPWjR`ypae7A|u7CBkv6KbS*TRrr2?oCbuJS9S zDT&%E!F`oqRr}q+D3^x&_n(PhpsEbNwOVwr=FbTT=nBw~1b|7_QF}bl7M^toukuzd z8-f|A0_0u%mb*LxP)y}L$mi9o2$b(beYv3S1?EGLP|$)~aP|EBy&wl~J8Qu+jzs>@ z&-o!lU`U0AYlU6?SN`y2U_23>_~%SwAE_fiP$fpw#|6|{NG_ZX!Fz!!wn7wWpgYrA zc|@U#2q9~KA*FE8!wR9>3!sa0q5al3vWaM3!HrCM8={-&Usya zDW~DdIPF!3LXR$F`8;iYvEb^!9TgEEMs5vfi%uIY^{9cce@D zkjo_)!B>-oV+De&gEY*YgHk0V>|CW+A~;vEYPpg|ZONLEZW0$HX*l;;)aNiLtUkD!hb28_$QkbirHRDiZ^)zO&jed6octh}&Pz1o>Cx z=NjMMyT-Tkh`+p6Blk#MfW$Ax$M3hyFUz7CXMn!{COBpbNU9J(NP~h??QxrDLQ6E$ zZOH{Zf`vo}gU+JrX{`#|`=tij_rQ*=5{?Qs;3}|F(`V3=2uF2#@iSYerxIa{g(3rg zgoEc23`TV#zc~E}D2d|JJ-1Xc*9YD-7W=g%o5&iK}37BE$Kx)fw(1 zZbEnA#$rIob4La)W$F?_`Vk@X67+%y`dq|VtORR*i>w_{&4+}OC>U8 zjVS-N96u=OFrz5FMsc1<_dTiZ~l9iud#t6m-S5)~QvRaVGVuX?1(4N}D&q)AgQ>&-!#c$-d+uU@yk zV11R9q#Zd@i`>mK*K4$DGRr74*g&vw=M#VTqm+;vc_9<18zS2Sd! z?G~SYjI%hJ$v(dhE8Mi`A5=1RQsN)5EF#skv#N}*-Vpoj@0DgHoQeqO;Ry@Kg(3jL z5xMu?sfc;=un>6^?UCZGH{;WgjrReBs!JSnHPbxgzTcCTYrH1Qyp%Xpx)V^39K-|Y zErJ4(jwmPP+jia!7i?`WMiof1kirel#IzS&Ve&kc-VKi65x^{wVzvt8@%9*urk+tq zVk??|zEMciK@Trjq)M@@DZ&R*ZVNgpc{NoogN`hUpD%+R0G*iZ!tH(95D^i#0ukN7 z%j3$T?Gn_taTi`DP(Qiq-7^!f7^8mO5;NHZSDWd6^mV4xB(}jZe_Z?7Sd%jNSn}t> zgNl>5>duLR2JA=@=V=7Kk(N`ru2J1s{ucyS5)1E>WakzZ=S_*zGm>W8ED30L)ki5h zm)uqBqK0D(^ef#hDR}h`{3}O;@-@8wjEDae^uqStP!d$*M%q{Zv=|>x>p|$hhM1I< zn7El!Su6Lhcu8Nzu*Q(+uK7kculYfJZ?LB-Kfb19v#31L0iT&w7X7U3Rr*-QAONYH%R&zL zI2*9Qar5qrTzy|vt$OC(kHn%tl8c3yA?)I

_+NM3^ zx-~#EB}&s|PS7ewtH?eSPh)CTMug%Spz3J{>lhH7_pGXJ(=%nEmUhSLs^>Ler>@t< z+LPKkqau&mofe%+G-x_{OW-l^g+jp#Q8l7(B6Mw2bWN2YwF_c(@WffkJD<(NSE}?f z{2}R%;=leR!tBKVrrlv{!(3L7I4~g46VK6ilLY%CE}LRy`dw8)Zju66Wl)N}4biQI z$S0hla4p3oKBcb{XFb8CPswrc}@Cvr?fw-Om-ye)09&QIvIxr*KV{J-_d{P@PjpWL?(DOgJYQ0 zh24}Z$y5aDolsOM#Dpr0AQjS1DZIp*zoPh*b;N3v!W6HLZv`rrT~bh$dhuWt)(YwV zsSnR?d9jD}%ia9gocw~Qp_J>Tlp(A%oPT53-QO-ixeyV5Aq_6{dSa&9ujq!#>-gH0 z9mHZZ;$ufV+BP68$y!nJCe9Xl${X4I_tNLkI?IH-)f_>CHR43UhQ=pPjs;Jykj6gGFPqEvShNov5tU z+7*)e**=r!zO;>y42E(y=f3=s=Jpec9gFaxoKQ>N*RBZR_NwBiw#8m7A{zB!QJ&2c zwk7k*)Da0$X5`Sfcjgz~A2oln)vJ&x<&U3BO%!*#30af8vjP_1Z54AyV`!bu$J2>> zJQ!OVWRLAFXJiuJ_Cpan0@pVPMr8oaI-n!Z!Z+)xh;>WWou3jUs@csWL*_F)a7t&O zDs?zTln2e!KykIz8xUQjo9Z4ZW%zAqT+z_-n?bk_l#uUH6FBTQV|XREo%o{tLCUEs zUi4pl7v1t@yl~PT|3;YVvVD`R8)BmgP4BO6zPoV8tFiKZ%&gaopI*0Ey}MLQWwl{4 z=5qHoFXJD3ms%+s)FO$16+Z+^pNjTv0E?Hk01(h{KUdQi zz&53-Oa@SgRb?WOvJvOyDqeCbo!`gZ`c)R_{9N7b53k{tnth**V_v?po-NXUDqNLM zcqu>dQ@%^AM!5Y{(DZGCmjz8Tu)|~QsTGaYN9ck+&EGc!6U9RZ zl8R&$gocd2-m`aONAk7wQ(WGk|^A&%L zxr{TSf5lhZk8s`7yJ>u@*PyMs{M=2uuZP{qxO-<6_74v8UUR=J)QMt3f~7B2=xeb^ zU|pl9DymXAM0KfZ>lFq`_1Ma|lxeJChKRCHv@{RaFs(x)tub)A(l7(1?pi&XDS-$Lte}6}(KbhxbH z`&kxfc=T7p?Sn1Lw4>TqUH3v40imCy2mliBT~7=sx&(%@Xn5`h947se=&FntsjP9YJcd!GM}cDN?aDT!AAk73;J&!iB5l$&gPJ7?$5 zgV?t3FOk`}bXv~+$JM(8;*zf?fZ61)Z-O}GX9-{~&3Z2bF0~1U0hb7B8qBS$lmq6q z-Jyd8bP+%ZLUWBoFx^rof6D6bu+A`zLULr&zi4kRb? zKd5d?lyC2CvpD^*qasn@LA*o~e{diWigs=BhN^ql_azAhlbFjaTFbqCCp}bBJ5*$+ z%>Jb=>xX4l-P_&E$@&oo%dEycH#=-ig!!;A3$mR9U4FoT*Xg-}WPemJF>KPr?%HvhKJ~~IQOovNc0+%(QMR#VH11B0F;Y2%r*)-~ zUGYhmKIHV1XNz*DdxhLWk&Nw1KNS;f#UPJ4Hpej69QR!g`2v?dc>0CnyNO&&jkof= zmWm60d9!ND9=r=acdTL-J)bM=edQorCIKj5(&KjtRf>;*FnYN*5K7|GUP^!d0QjTJ zz>E9~?F@+fHGa~)hoF~U_CkcDv!5QWSe&N7FewBI>niUjGK?#JiOdwDV{ZMol1w17 ziM3#EvF{a~(`S(su}v1*k>H{R8gR`_0hs3F2jVzD za3gW0Tvkh^>Qg181T%dgyuMnWuaE(8b)Cs?+tEkgGPCqupD7L3tQG3@vOaws$l;Cv zV;(dllXCO8zo6R`uW3g3MvbrXqMTbQvXsM)yy;`+rFZU*2-Ud4}|Lq=X006DeiljKi9*j;VI zDJYtwf{aZFTVZq|e{DF+B^fz(CwhO!sDJa7APIK2`9hiY7Df9-Ij`S6Zv{MKPscCI zUGxPcFh-S(bjlD-MyJA|3v$yS0_jbi8xw9J|^mk*{Sc zMTNQmjR`blJ#I=coh75D0}XICJTN`4O740mBaxPzU^$q+Wb>XW9j zQGmw_5AgSfQ$5Vdg*~ej#itkx&EA>P!BvXD#8Qe<3b}MJdO))Qo)**gn!ZE@pZgM& z8oOS}iF7nFi{;6<80t{Fa`xh(Mlh@p)L%nzY*6iAhsAK{3xhdEoZvICNBSVKObi4E zKwe0|Rb%o1EFM6+oMcN}8~=joMcp5+b_Y%L5^3ElSXMLcYDs#Sbgc2Q&X@mY1F3chC3-cUl$-}ZJHo-c??wcOc3)<#%K zX)O25PSmQ~l?QJ`+LM|VYXOrI1i-T%kq)tM02WOK077?Kw=rq{(3b`38F;hB#1S4& zMRSEUy#4i5K6Fb-tzO^1pf_(MW+ua?x`7`R`?QMf|5as%|f8-4^2>qNh z)YL$TP74$@te8qOH4?r4GsMFo5%CIG52W>cmnDrB~EO4T^sAQKx|yF7DD zjm%sN%h*%oR6{g~uYphZZB?IE?dxFI(ym2Myj?zbT}zpJ);yUTr%*U4$XCG$IR}u5!)=Sm9M?#40x6z zylV3`tGnXmZ=J>`dzY#|7zY2{Fgv)P)Oin~cFIqV&5&;#)d*PO z=51zsx08K4)!IldJrL4=I!09=m&FSQ3?3ncbF8jnQIt4IT$*nycyO!j9UE^ITr2P0mQ!>*FE7+F!| ztA%;|7;8qx^=Ziv$tbk8P%u)lwc@+0qJWnoMwVBAo>yC?Xz73z2AoE>0MC}>-5=OVU^s6F44cSBAKXFat*l7R(| zJk_j!_#m&(;t17V#NNOle$yVDe?>3v4_rtCB}BRAWfjP5W!OTc$PQE#xd3|ghkqgg ze=DaZUgBx|cS^hrm}2(y#zKv|Y%xiqjS~A*+P*k}xizAoDyTlMqSoD(Dk!KX4Nj;> zC+(mwQ^1KZ)d*Qw#`T0d#1w5zJB{>=d>}|YFugkStRkm99aDO4G(mSwusR~OaI~G| zGnVA@oFWVP`#0fXE8E|Yj!wZljfDCR3AXCBvHGQs2LSd*f{d;}NXwMkV<5X>ASB-v z^3a*krzMha*J(nhJ{u*tK_UvUAsEYs~xj z^E2OtbG--Nf2Rp(2FWdYbG=i#FLK=V1CzBznD|NKda}Ybl%KWf43Ox(yQK-(Xcha} zYAFNJJc!_ihXddY{o`=)VWj5KbT+W$9`ipl1SE)d@E8EwYJ$a1o{1lTATimzJSRQC z532yg8UT@t;i1vtGdb^(z@?6y<=$q=#~5Di+*Mg1ijMpgDWNC>{32BG+3rC_$b-{4 z4@87`ziRV}RPxrelQ%$E?UFp(CZJG#-nQLo`M65aP2SU$uTCHJ7@Osbq9x6i$sK2_ z07IzrJbbQHKEVBafGXeF#wz`lArLRfbK$IkIYoNviC0OBKh@aB#rRY)h|3LUhHUlA z0U=)$T7Zfy*7>h=@H=kftXBAAv`iFRTBF85_9_B5%!)*s@$NIz?mopAWTjLA2_CL! z{AavMVB7oGXleUestj0-&Xh{CO~{?D&5uaPBI=zXfeV7bxp37KFTu$1lzSB=+V}Oc zx>IQ3sdO`VtU0`zXkRr3FN8^#%_ry_s5WRlFL^ISSr;nlJ@+8>c{OaDTKU|pN-aIN z-ux`Y<}4&@J*~5){^5aeZd-c2yo|#@dQ)`ga~ic-hhxk+<3%fVxQ{U+VR4aH;{`4A z?s`K&)ZD9Z*~)%uZCqDR$BU1&^4`I6v;!9iab{H$;5{kYj1*g0==yQpGRoo+&fW3{ z{Y=c+?4K=S>)*wm1#@q1J^G{EbQDDThem82-ajI9C;Z9&7k-bO-UMC%C^a>4v@}5< z(>PKMCi^GjKhS2F6gq1ohUyG&6&A^cGEdC< z$e07H>JK; zH%ef;PwKco|2%zN4Y0%ZpjfzNQ#z|B-6$N=Gd=rbSJ4SL>94C$aoeG8E@ct zRxjdy)?yOgX94STQXpEAUT~u__tiz~#vPyZz7XIbeMs&5MCSr@Yxs7S`*g~7fF3QG z$!$1K4ENselI6bkI_qcs-FUa`>*@VF2XeRAFB}$g_u0KYiU9P@WcM`!MzohfW^ey% zkpFL99MCV%ww3*IMIO{IuZ3#9$@%!EI?t?%f>;m_mo!kQ6@xh>NfMhy$#hX~AA~k@ zg zB2c^-r4Wgdk9=qv`{V%2XAY#;0zpuFS73-FlTrY@|KvY&igxKD5n15q-2%^~xHe1~ zfN(@C{{y3HvpD`!bbgs|O0Z1fl?;lUbZZD4Zy(p%##tjUKzTW!)ANPjf$b@JXj*tu zSpfkSt-)U{8A)6ylKfIbil~)-p_?@Q)N9csHE1S8Rxn}psq9eg=#YE%p^E&_*DJ0i zMS^uI7O=80n937aPBkpM1s1Dfrk$s%HwuoWq}EFak;dCkw)RdSe4i;-U)FN2V&05+ zAVh!(6P(#rImeUrXFF{@A+yiZUCqCin_KX8K7lpZvo~0Map)Tp8A5OjY^9IPvk%B{ zApAbPaK8Ae0n*+9@wsvF)t1OB+FX@+*V|2wx6_|IKZvewW`0WT`vAyVg*_TT0m9_Y zM7h0Lb0)1!XT_X7^RxKT=F;8kQTNB+-~aX45@4H6iOSxZUIG#2PjOSNc?X|Y_tokK|iM0a^jv|xEaPn`_m2Gwn92@caKusU!f6n6fjx)4#MYP(KTAl6U)o z%%;jWQcsMPtNwex0DPKX>F;XShpOc(@P#P-w><KAGlw$1g{y5f&A=K8>5c)4B=O6>1i^no}e8)2e5)~Wp?P(R&z=Yw+nN>Mh?n3Q^Xk7{>B^eEi=mM+orY4M* zsQaHPd#tB@4EB&J%DwS!l7wgFNo>QIw6KB>d@LLQVH`eZDjULPUKr+v;3e zgO~7wVsi^gcGH6N^C9de#dkWxsn1$Jri*1{GSeO0m?A?;WkWd}V^bo}ojHc*896UG zCf6GB_%-TQ)GM%!=3b4pk&QLupGt2L(HvRt=ViS`@A@c^T8x>5KnQN6ujK6My08s zFwlm{m#zcsN|+bO$L!8IEQ>U*;+&gvA$*4bg!W^uxR_N4GHH%yKnjSm$u)>KlzyBm zXZ@h!-HK2onb%aiIs~Yym1o}jpe`gYuUY%m1F|r{s3@#bHwgQujV!vPz1@g?@Wi*A zZ~y(*&#K5p2SKG8Q3|#@-_x+*16Rv4xszWWKR##`UlV7w#qgA2qn|h2AAcQZxQ@F7 zydEgi+U_`Q|8>~$R;yDN$X!ujvK@5QrN}W&phrPB<6e!JXo4aD{H&&ivJ6rI6nm}U zT|uUYA4iTgYRCTRUP@B=_yeu6cIC9HV6uEk(vFm}n;`Xi0!6cqMu0_nhHF}!s!)bk z@RU|AZ|Xg%(^G~2&MPeqOs!~z#|50zXP>=uJhqgm)}G2{xO=Ic2x&=Hds4yHaV$5Db=TJ?wq>``X^{KW?QYBZC!%I zr{zgo*O-Ty8?E!nxK!IjFdL1`QL?U$(UW#g7O!ia+X5>niR`YeZcC9B78fi&^jseb z6ny>Y7h2J)J442x*s?^$7j#O|9UbAT8X$7V#ojp5M>X}WbAWwPX6az)n|g2Go=KrI zwF})YufKK#XWs8^vbHSEfj!RoW^f1!XHu6I0asQzUU$omX(Dw2@}X zd6xZ^lKBoQpK*oG$T1wVfPqfM7wn8y;q;D7Q!{n>gFa_y1glg@mHD-$=ITYx;7%2X zM~>x}+Kj=AJmSXi0Pi#z!2h}_0mVRo7XttVgp*1y33&m4tN~X~0OnC6^nvU2TGks8 zI;8am9vuLY1?fNlvOHRe3t@S>Jq~0MatH^uK8p+|vIw~|fbIOD406ke%9D+@3D*~) ztRmOLo4Y3BHi0lv(h?Cal8*sB#$N~M!|}AuUr&A&hJ)aLa>FUT(j71Qdk=cv>9fm} z0m7N=U;&*?I2?QoV#sw*^$&17*;Hbv%ZnJWpYB#N;8g0hG2qk~TWamjqpQ8uw4=LyVCyyhP#0wu ze%H{}p^xFMMl1qR_-D=@3E;i!p6j(WQ{4+7iF2 zR`22U%k{Rx8<*+Bt|1+dCGPyZJn#K3tmpI9_fA#9v?_W2%F)xT{VGv-C2}5(DruLG6)~b9H5;kvktiJYu--(}(hjd^ z3%7J$K^BfurR0G%sN5E0Nee_usiMZJ*oN0>ai%D86t0{&X6a*RUvm9GN}C4*xFp0V z=U|-D6U3aSY}?cGM^EVsdI3}IR;tzJq%C98fF~S0SQ9g0N>|SGN&gZA*+1CSBkxa1G1uA1UC$T2bmgPcH$A&T!n%T$wrF( zs+nsXIN}S~v^I!Zl>-SfLF-#k+j1KwUrTMFD06KAd3P}qa2H{=`AQlD&*30*>Fk}i z#T1PO5}qyM2iu3zT$WV33VC~_7awKQ3cEr(t~eE2@OLBZa-2;Ql^9McqK73km#Rj==3a8TdcmmTC!FL5uw|}>jO{%43fDh z-7Zhxp$0wWxu4dW!D%{o^XwM@D=or-8QS~szMmuc!c$q$<5IrHxLpzuJaZu~-nS)* zPoCXU4vbnNu@pK2gIr!@4=(aUyE~i1T;y^^5kNSBVa9EW%#{zgaO!Q1qHVuL-i``c zZtIJ=$UO!G=Ul^xECZ2ha=naSI``2+{qlhsKFTe9gSp==(#kpf#M{ZLaFC_&6h>ms z&&43r3qgJlDC3v;L*U3oq-YwJogE-rCTZkm+l0N8aJj@YEBLB#6o-@3TC{F4ekCcw z8LT%ZWP>aZtfEea=mxFX3I!L)4F0@~Xm;ak)ITFzY;?tSO}OrFSK_mX3b~}S4Q4DC zicYT@MaX){d-qP zdi)OEPpU`0;*3cdaQZ=iqB*$C)$PI+-5VzIFw0GQW@{jN1L35%LDY@@GH{*oN9=mY z72Th3@!M}CQ?@u);*-(h7_Po&&)HVu$xpc{km+Z`iYfXTRx~EE8aAQ=BI4VcE?MM9 z@ZHp)z-MjoVtthyKH&-6kjI&xt9=FS$EGDy3h>PIRG#5*UMIT>j{AdnITy3!i%4u~ zoOJCupn1=NI&XQgW*rDcNVPr#h^>&`-IBF^#!foA!A&AT-PhC0U1veP%m&Abt!D>T zpM}J|ydbX{K@W17faXvmAbjHKg>DLT9RP?si1u>HIit^Y#mQMc}LsKe5@eQji7gZr1u z$hmihA13Q|CjkK{0ZX8J8OjsK)o5hBj7T!iA+Ej`@^;VivP`l}A#aX zS3M_y(VIjLQ!E;GNxdH%3QO8KpKNG4(rF5|>X+;_OC<#58NF|U`BH;Q z_;Z&E@$(4I0$L#r0S}{0JVg}DPjMcKM8R{S63u{?0!SbM&;h@TAOT^Fd!)BB%C@g} z$B^(ezRtI?9_I67K9zpsam^R%l-Me%JhfDhx^SL`Xtu`cw1y^gWhcTdTN0Q+U@EVq zk%^@DhvQ-kJfFUpKlCHCaj-8-Scu!cNFuU#Dk1S6FS`8L(`|FR;{n~KVrQ@Bu4b~c z_WC}F_UsK6d)Au{&k&Q_O_w>WS{D>l5M5C0B%Kc87(d7zp<5OdSQ_+ajOAO7afna& zII?aK&EFGW{M$5>Y(|$y#*aYEWbF*F?9Yo&z8_< z7oJ%qW3(X8;;4yQG&FL}XJHO;I(wn&98q-@EN&>Sx;Z1GocuFs^;5C})S4hS54{7OR)er%hZ&JHcB+HzVZS=*B z5qLvdNP$ykF+VGrmf=UqmWSv1fuuqy*)}WTR#=W85Zi89QDCZ6oLO zY-~nw`s&ZIauLGo&eRGWQC_R@*oLACY4h6mD{sQeZ*&UO%BP_ta_Sgqb@d)#8e3Be z8$|On*c9;LDckKYX;f|Jhp=>N07*m2q7!Ga%;Jghch+Qz&1h=aJ)(W?E@OwsGjyyy zpOP$AV+pL)7QKOYza17oIhdDOsAm-0_0t)BJI;i!$i6bbz;SMlw6BwC@7rsd$Lx^+B@-ugzNq z_ZIRjTc}7Xga=1Nl0NCN7@gbVwPqUf;#l6ISoHA@?=Z6;9E?7g8UZLQA1zU??OKj(|t@~`TLjA! zoC@6-xpk=smQ$=*bf-EsrWsz+4ZnjR$h{nk=FGVlS|q3a;X0m#ntWRoC|W&OS>u&f zivuX7@!TS_HBF=~{uB^wWmEo`raEK(aEgsgL~DE%ZCfpGTlIj3GFZFcKn&_B>^MY%b+#R3X0P=J`GOdFHEU-W7*v(9yx2=Q5)hc~d`$ zQD5D%;h0fBVoK_&RH_;UD?+<8=`EJVkKgddrMwSO4$W#B4bi29jHTdp^mAtmu~L;Z zs?F&56h6=_k4DR+%AaxujedO}d9!XT=~7gAsx&iI`a!CUQxS@fA-B?mnlzi$aerQh;|t^WMl_kz)p4qvj6pJrE( z$yh?-hB`=0HU!652Vh0xGRFkq^r2l|CuzK%<12+jg%dKWlgH7tFgZ)wUM5X)402&0 zCeIem0^tl=cj&Y<4+RXa@S{O0PG zVj@as5hX2aH=p@I(}7QO$jD>J#dO^W&gIHTbe6|Bdd_*C(6CSMm1b;GfOJy8^+g-fFG8g9xv>h}eJPM4| zEO_(}>hPB6JWX`g3W$Pvi@hg`^_oEc>k}(>bhZIggTk|F|^#xxWM(xG=t( zsq}A9&ey6iKglhGR{qoL0z)>$u zBafW2H=N)LqZ2hYl8W&B_>HT#wh9IjW6bx(3}tR$S`?fRlbCu>?L)NS$;TNhD>NSZ zWCb+|ub~&+!=$}LMk)z0s^W7S|wfe)4sPTDMk5SA`1qh)$PxtnS=z;u)RsFc4JJAA+xA87pM9 z-Gdd-vQ4q!5@z9F+&Rb^96#TWMt+k@G8+dGfOL3l(l?oBT}V#S-Cj5y!YG?Hld~?L zksu)**~Ctp^Zi_@2%na?ou>Haf)JUlVKfcgYc9BK4z>vczi0dKK~ya4(N)P8^S7is zu7`Dmh7Fvy5RWJxIz6)xXK^EYzN_0}wWfG=tnCTO;--b?$DZ`(ErioWgwu6)ByLT1 zl;AR#pMs2P-`Y$+Ekph9N2LnOS2u#bSx0e>0usN8ji&tJ?#@X5V_BT}y~GEyvrI@k zM>XTfG^JBFhGpJlK;9gNF`uXsv6)YAgf*F-Z0Kzly6~#WtgKXVn|Nqcn)NIAO@zv zuX*5S&^hY}8yld3QTY^WoM2J~D^%sqQYkP4PgMkSmGB^NQ|I7sc-vMTkMSJ3S6wio zH;;OdM_hG}dX%+$Bu5pagvCTkzB$h%-m&Hws$sSmv}LkoRAHD3AU4V zX=m4T)d@ft03cw%00IC805Bkcz<~k+3lIoEz`%e53k?`JaQ^Y4MvVzFeoUaC!Ge+p z5-@0>U?a){4PZ84pddj^n=v22%o!oVg9i{EIM^wnXM_e69w4Pqp@LEhPnj}(O2Gn! z3l=n3;J|c4(+eClXxPeu!_^BHDr`7QmTghwd6TY!k<^;|7i!K5Y01j^oGh;6Hv)&yE8Kb?Q8X z{0IUhNRS`lgMKpUNPrv(g5-z%BS?xML2^Wh{t_ffj!;5AA_7!GKm!eILcai$ zNCF81qfjEk38Sdc2?!;uP{S#v(6B-dr;sAVD5%JS3J|p@k;5!fq{2lNxu8Oe8MVMd zMlHC|VhS!;#E}agzu4l(F}~nJj4j0AVhkmh9CC~?%82sGFqGsX$}*nB(u^y~h;j`x z#@Lb#GsY~F4K~(5V~sQ0SR+k0+$e($H_&uL4LIj)!wo&*q=OAV-JnCzK;NJv&_3g^ zLs2^Fu!9aeR9;zt zmoplGp@j+%zyOLGim0KAJZi}RkThC=BLosa;D7}XSjnXZP$J2u1xTvtrkfmyi2?{3 z$jPUwD|kQxsG6cc0tq0f0D`5^hTv?bu8JybtI*28f(kCkK!Xgts@tr!*!qeC5Bw&p zgTLv53xvQ3??5ocIUwN!!u%>hgbw}?dt9&*91Fp6#0I;pgw9e(fdt7?h>WuqO!!=~ z(@$T`br(i^!G+XRd%?BbPOD*t+F*cTHydhu!3G#^8!kEBh9l0l>VnfvyX>~JVLRxj z$Bu^|axhQ(AIRf=JnYbuFNpi%<1f7h=hIJ#^pg;9KL`DLu>B??WI{p-+mGTw10Spq z!VjeoAtwaTLm>K46+%P>DYyuMQ6OLzreGooo(Kym%2AA{umuZFL4!idkrsrsq$1_$ z3qJA@lbkdpD`^Q!V<3YWzz`-VLFo)*I71n}^d&RsaEE9@QyI)aCN#K#Ok-*Tnbx3& zHn8DNXPOh7pcq9x4eC&Wvi?J%>Od(&#o-Q&O4J?P@P;~UYK)tr!>2aIsXLI$Q+8;T zr~KfDJov#=vHC+CQ$%9X2d^#?%!!c~Oa6|iuXEMY0KSB4k_vzmo0WIYR# zh;YQV8o>xeEFux%Qp6${k%(@Mt6P~&*S6B-E=Np)66})1Bp&gINK|5#0D~7T^L4O) z;R}}t>({@2sfm7VEMl0@gv2a{36EuhV<6*%GD#NAl9`N}0Fa2v4ze-=3;-hs0Ki3T zmXVEgGb9?>h|ydkPLwRboCjdQ0g~p<1PBc#Dk(`x5+Jpy;e?-GgGo;wU=+1AAOb*v zN>U>56bCRRDN=Fh{!-8a7PNFl0~N4<1$C74WSB7-@}M5YBlJ%MLN)4I-ZW_G24fofWi z8seqqc2BJVY_6J`sPaZPFDQ=jjPtwU=s-Bi5zY>Fu$}98=Xu(B9(LY}9q)~&JVJ<1 zeaa)A@(iIo_VH`{^z)!21ZY2n^-mJ?r#}8E!9h?!kcTqlAq|NrL>!`mWL>mC6IE6U z5X^!EKP#gxgcb{1IMI)|purTK@Pj7&pbAmgBqu$IwpEJZ46)RuE8!4`VFDr$%LGI- z5RnaK*b|-p=A?!*!KsJGozoMaOQ$Fz%8G7~L!cf-hc`Hi4vC6`p~iTrMTwVEWK5%? z&})Z2(6Ll}@YEgd_(oaXfsTKWl^tpwRCX6Y(eg7|MCtaU74De_v) zI+i4}#jH<;t6bL_mnF@$h;NN6lj~YnD&vK&N(9Uik*L?fB=Ig3vyzp-RG2RRWiS|9 zViTLtgfKxSv5wi;V?2f?Cp7jkX^O0x)>K)_R%Xot7$hMR3BW`g;!T1az-HVOCpSCN z&T~SoXbSK$(-^RTc`{AR`5f~-_jwbeBn2o9s9HfCux79MBq?9}S_Kjc6+MTI&lJ!A z1vviD6|~ST17xWHN10MlvRptc9xcmU-Xa&1k_9i3CW{D2Ft`%@&2cid3#RK*f)6|< zs3AB(Vvahx(uuAyo(Uc5I_gD&%2trPX0*5MeS%GUIfK#Z#i56(t2%cyPS}+k6tZ z&S_0gTmy2CYbZe($_-$&L!Z*?hVORKQE&Keqb4;eNnHw4?%fn0N@a&Uq|sD<;KQoy z8!Gt5N>=tQ`+ie}t6SZwzq|SaBK~U#LlmOF07h`IY9*~^E#g^`43@YM(TGG?OYqSG zr6Vjk%1fGy!yjhXxE>*|62l8$ld$~3OdPNg)3RUj%KX7J@8TGLtX~XcX2dE{F-&ZN zV;rl5FhdrxXU2ZWoG9`_5K>K)S@UHCuvyAzrVxS<;2|8b**HC70Ct+wob!wtJ3(^h z21u;*kYXDHfmbI=erEEy4z@4SC6u12uqG!PyqtT+3{zGS!ZeS4$ zNFVJMx`Z??ap6l|My+xFM$}SD1V)W81|y{?gVZSF)Q+mBJ|{9#r>F))FkEM;lu89q z!`3)(G-g0HPGbh5DypW+*Mz65jw3me$2wTB283fesN)8#Z91S02B9Z7%p-f`iU-U? zuC#|d(BlW-qX*5cu*}B@jxY;qh>B}Xr0cnUP7RDpP9iaihz=90hz`2`h*1{B4ea2%?0`}h zrM%L}QaXiG#Ou7sj=si@zFfsq?r2tKk&n)q9jZLpVEvcD1e{{s-V74DZ<8U)aGqa(kb-p zDb6A*+{XUs#wwP={x|@mzG5wQvMu}uE+~yICTA{2?Qs4)0MzmV0W0GJ7UQM_gED&R za*j%LOlLAuAl4pmsc5YBM|tpaJEVi#rsF((&^*>7uYRBi%%k1P13rp?uY@2ygm5tj>pt8qK$g%51gk)( z&_VjgKPtpQqQKrL1WJUl2-~cQ_04|~-vaFndCL)a{pNs|pgoXiXLd=9lYBn+^ z>?zIoNhgqE`y!wMzAtOWCTphRZ62U0?35`iU~LAC(5xaY*ro!?;wso;12%vy8qF=( zLel<*El40yL15CzVlY~&aSlgum{Qc7{*rT`@~9e6r%Yf|i;4tVKvX5;Q$KYxl4>=& zGOASL)?gdn`gDhj?H?B$rQ)300?W@GfIdDKaoM$<9zz48R+u+KrdY}idCkM$R zuh4BV^C}3200^KpJkE{WB6F|=%YD=>K+*?6qEJ6L^RXC9-$L_4`b`P4FblU3HBqw) zwopbIjzmy%vrtns<#c23NoI*Tiaph&r*2)dx?Po@jIwx|x`K#VL!=n4h9qArU@5xu&I zQ}_VAV&!HPg+ATrX6?%kL}d^D@KeA1KvvdkR{jWS0qhWjF;%2R?hHW~l|@}A@^tB7 zcJ!D2#hE?^Vj!kpHX#!}JC0W(J@DvdqfH zDFMdmB0LwKLPBUhQlF|1Osh{O(A4|fEc^aRY>vVw0P1RxqHK7gpz0KDz$Pj%3U2m> zDYk-88ST&v4NwoYZ`^{U_)pS200jD?d7Jlnl^4@u3NaERDKST;thWI>XLKq@Ov)$A!J@}(r_hWpT@IRbTeH?^-@~vDQ>s&SDey&gnmLPy4 zO9~3ELsa-QNkj^?;NLoHwHVGtBxpuF=!15I3*yj*Rcj0!ZiL2w;tsZ96PAc2HepHb zh{wR>j+3`=NQQbShst1xh^Xh}1P!bcPNefr=)^kf#0}t}J2UY+wTlka(~9DtJdchO zhpxQdlMZwi4{X*B{-BL+cI&LJXwA-4U`11EaX-_J5YR4H)-F{XiB<+-?&uC#00BWC z%)y$4Y9ASEBSS1)!X?8jxkE3hls0S|adU8Rba#7wdU<_-frf~MhlEX%)LN0kQk27Ck-Sco(O#0u zWRb&QkJ-CUZ`UYXWb zoY+pD-%*|BW|`7$nap&Vx>=svaGJnnoXvNbz?7AeWSroVmYH0k-g=(0WTDuIo3m%3 z--DjDf1kQors$2FuZEqvW2ESBqS}a`uwka+jGwD(q~c(x-fE`anx3Fssq3Adn}MRs zc%;{8so7+y=7^)ZY^dOQr^kV%$8f3CeWuNFsM=(#;$W=rhNi-3tm%2F)sLpQajNNL zuIg{B<6^JzXs_jLt?_xQ7%HtZn5uwuG@IA z+;6h*b+PG!uHuib%aN_ng|gFtv)G5R*mkw%im={tFN+$x8#qw;FGx8 ze!cFAyyAzv?}fhUjlAiCzV@2B*QB`8rn$wVyUdin=D51Hwz|EPzx0m7_J_syp2Fph z#`31Z=cL5pm&Wv!$nT)V^{K_&z{0+p$?Ctu#+J(dq{!=-%kq=V_^`*>smbP?%lV

&VK+zRcOK&+N6$?8eN_y3Xgv&CjmV=(W)3 z$EGw@F)9D?(5d`{^arh-}C>{_y6nh^Y8KQ?DG5W^Y-%e@aFgZ@b>uB{{P$j|Md3r;`{&g z`u*?x{ptVyEC2ui04W1n000R70BhBnC9t5tSp)|vG{~^wL52hqHjKCsqQi$09cH9B z5MjlK6E9xms1f8sk0vW-JV;UE%8&&~rbNlo;7gYuMaqn6Gv~*b7)y$rxH09>jzfX^ z?0FO<(4stWw^=^I@KcyWW<}IVWSvf-iqg{L|vz-kWz*9W0qNbEa<%7dO3n z_)N-x$I9iKyEDeu(AoZ)4XTkKuJh>8*Gi9TJ^T0R-M5#|p8kCG@#~*=Z$Ey2_yWQA z-hb^0s2_d>9%vwd2_ooVdkCqbnSk{Dw_b(nVW{AS{Mkofef;fbAchux_~3vHf{3Ds zEN1wihb_jqUx*9dC!>4>nn>e`JN9>BjWFiepo<8?DC34F#;DXsU{&sGVjRAexz` z$!0Fp=5k)O)#8G!w%A(R?YG;83ofn^(5&TFl^_O45A zyxxv$E}xz-AwdEOAYecN1{`p(0SPRyzylQ=s*1kv?ptoW^YV+Yz5RAvalQVI%Q3tp z`#W;TD5qR8$`pT`?aMHmtFp}Z*37TED}Q|Qw&=avvd8k4406dcUp%zQM8|w`dNiAR zG``~I>#@cmKRvU`JNH}f#W5qT_1EZjeec#QkG!+lEH^DKylC?rbl4q3t#-C;SG{)5 zc&99N{?g>m60igd91s8igcojj;QaQn%ed?-1j(pL*Z*IBXVZZJ??K#)0iogjBe)#+F2arGx zo}hpH?xLf9HQ9P+EcD}Z!ynz?20*vf%xmhpS^9{lyQQTLfzz{G_aOK?+zqdQYO@~$ zy{A0ram;GwJKh98c);&<&Se(lozAQ`KAHhfgfGKh1ZPOY8rtxNILzS;YvG9rEI+%xNYP zmARy(Gf7#^ZhG^Z;0&iY$4O3I;6fESXx|{$dAI^N;0A~+r#$CL&wASPp7{REr#|<| z&wl#zp8yT0Koz-*f*SOo2u-L$7s}9vI`p9sji^K?O3{iIv=#zG06RBoxBxuB6BZ4r zNJmQ2lA83SC{3wKSIW|sy7Z+mjj2p$O4FL!^rkb#1t2Ow0FL^Ua0kf2EO1KHq8jz6 zNKL9zm&(+pI#r^)h^kblO4X`b^{QCSs#dqk)vkK=t6&XlE*=qqK>qZn2w*}k!phdR zy7jGajjLSeO4qvD^{#l$t6ulY*S`AouYi5)8wN|*M+6qGut=<8VG&qeyx{>rJnK(A zs*1x}_Oh7GtY$aM+0J_Qv!Dg+FGkCY(f*>ercEtsNt@c%y7siM{r&|y9bi`Y9e@E8 zU;-pcyIS7%R<*!ot!Y;)T;h@zwY%8FAo{R|<~rB8eGtSZMloF23gWuh&2DxTG2LB6 z6}GCKg%fJK(E$uV0Ol2ddes{M_rb3KYCSD#iOXB?+E=ynHEwKKTi@6IHn_s|Z*1wi z-~HwUU7gSd|VD6n7=8;uZ@A6V+~iB#HbC%FO(dNCOetQ zOjGnnw!@ zINRB|f`EmZaZ!N+{B!`2c*Gw9?F1&=U;+?mfCChO0D~cbybe$Wmd`BaG?N+1VMeo> zp+|9O_9^y2_irw52s|=2lxe%d776r8iw>O2hiqo~E^|O|9xwi+R+Q zPPMN;Eo)K#TGgZ`_OX>bY+RdJ*q~-Mrep1FW!JjXTCR1rUk&YBV_VJ5p7yTCP3}?$ zJK5zw*ajII94J>Rn#!LKnNR)+=7Y zrwH93vH%!>6Lul*id+2R7|*!IH_q{nd;H@d54p(xM^5sRoBZS%ABM_T&hjR&JQyrj zIm~5F^Op}}<}n{ezzsKm3A|wzFnivbzH}!io#`9Oc)#Nu@Q#Q4fAiI|9`vklz3Kn%`o()b^rFXo=Z~&>+~;2Dh*!PkC13l-|6cRM zkG2fz2Vum1SY|NGVtJJmM<|L$WS7K)H(-dAtVH45lweXxLb%>@hG=Lf@`r*c z_<sEIQTT;!ScgG)06ceo zcDRRpsC|m?W`ghweRvFSwhQ-HXZ~&m3)S}vfUt9t1po|y3p>aQOaO6&17Ex_h?=;G zoY;w;_=%txilR7*q*#ikc#5c)imJGZo2U$~cnrz_i?8U4v{;L_c#F6wi?j#{hZ6y^ z2#eK6i@K#C1 z%6N?UNR7mJj{^ye3u%lA8IS*HkO&!(4tbCSsgD-vkHc7w=4gxn>5LyakQ4cfBI%J1 zDUib0ksFzk_IQ!QNRiWM{*v=pkp7sD5&4iMIgK|NlO6eyGU<~hnUfK@3`AL!MX3x% znUqM0lu1dHOt}n8d6Y!S1c$=_QrVPFd6iG;ibnaASJ{Jef54q+=?UH$o=FKPA`k*0AOa%r2cCeH1lU|^cb!eC zf6lcDh{=}nNtC=W0fNa<0`LHT5DcCf41eH=h!X+3K%WfSpbq+=5E`KpI-wL=p%!|f z7@DCPx}hA}p&t67Ny!W%I-(?6q9%HxD0-rRKu8n72`Or#wKV}K3JGR404^$`fZzZ^ z1ZX6>3vV_GFB+sH8lP(b3n*Ha(Z~$S00{~3hyx%2oNx?6$_&Tw1`y~`yD+6%x}{v& zrC$1_U>c@kI;Lb=re=DkXqu*Kx~6Q}rf&MCa9X0yAfnDtr*>MWbb6 zclrxN+6Twr48!0A;J8r*kOR7~40dX$cPguOdJL8LK3Gbtotmef>ZyKusk*AGz8b8v z8mqmUr-n+bom#BIYOKq;r?i@^(YmZ83ayVStiO7##>%Uk%B;P5tg_my+={Kw`mM?u zuAKU<#paOtmuIieu>#DE(ny=5wtIhhao0_e@YOcGguE{E} zq8hLSYpnpQt@w(r^xCb`s;#;T4bb2W7^|@uo3S0su^L;a9Xqmi`mrXvvCyy!fcicN zF#Z95FtR4Q3wQ|uFw3YB2MHeg2Zb{LFWa%6kOL3!04NI$3b+X{d$b&Tv?D8*ah9|g zs|=fL9!s}?3%7Q=w}FeeD0{dd+qaN=wjdj_ zX-l_=`?impv6;)bf$O#;OSp3@xQz?Bhg-OK`?;gbxO^+RYHPNwi@I$qvYVT@A8V)2 zaJ#shySWPuy4$!_< zJG{K`X1p-Gx_iCKtGoKS26>iPWJjd(*$cSq3wXIv0SXDt5WdR$2rE0758w;Ko4w(y zzsd`~!27?yE5E;sy#n07-ut})EWrHhyTrS{2VB4j%)r(wzW{8&61=++?7tJ7zXN>0 z3v9g~jKKQaz}~ySBy7PL9Kyki!UP<`{Ano5U4d#74Zq->bS%9K{%W13EfL53mbL>xd43u{H|;fB>_2iN%P^ z3U4OGU7M-tzJjjGx z$cB8#h@8lZyvU5)$S^AnkQ~X9Jjs+?$(DS{ldK9NP{lz+0hPR>g`)YRuJk8Wx&DMO)*qqJUyv@lx4c`3C;2h54JkI1?&g85LA<({tqYC59 z$&XezH!#i-a5xAc0gzD6so-XVV9xyf&CZaoJ<=py(k6Y{+N7P?w;kDuozvHF+{o?C*Dwvpz1+&p+{X>w(Ei=r(M{dUZQazZ+}H35L5;4?1a98ToV?c+?2;u~({6^`LdZs8-I73r_p8n~e9_pe#>ZD%krhe+Ep6aT;>a2e1 z+VJYI9_z9`>$G0$wtnlc4$6gt0JhHEg@fy~{tEM4I3ghHf$(Oj0PMGZ?9W9E${y>} z(8UR@2FfrE&pr*z-~$zp6=?t?(E*~?*8uZ9`Eu# z@AO{p_I~g9p6}<*4gB8k{{HU(AMgV2@0<_*3^HH%R$rt%5d^BKl3zS^EQ9; zIG^)6zwo%ppW`>|M^b8`lavsw14}!zx%mw`b`h}xu5yG zAN-dO`m}HRs_*%%-}%h%`)dBr`d$zGR*(F$-}|Cp`_^Ck!ms_v|N7AH{J>xJdq4iS z-}!*g{n(HDoA3PDpZVMX4&49_@<0FdAOG@i|MY+V^B@2CpZ^W;J^;C;ox$#`eibrEcUH39)$&u;)72We2xY@KB*T##RXjR?{D>VDN z8>?(iBPHA@cmu)00mE^F(?&_>bn1O3)|S39)%A$axli;|U}^$2x@6%P+4D0TfX|0z-6AHVYLz@G%!(%*{jyKYVa80SoK!ME!sa z(!Swr0w)mnM| z)z?pP?bX#`bq&_oQGq>{*=2=&R#{bPZ5G;Tb9MIGVyTUmTWyo|7FS3i%>xfX1}Qh) zX3?coQgjP5F`(RI7hb2sqIu(QaOuV7EcXIP#ojv zg)B6o2~pHA6s5=nCMqF{Oq9YDr3eKkdYHo<_V9;69HI_+=tCe15r;}NViS{CL?$Bf ziBvqI6N$LQEKZS&QoQ09t+>S~juDDg)Z!Vt7{(~(aEPU-VH?wk#V2~PjB^wt9?OVB zKE@G^c4VR(+4#pn9+8hd^rIo)m`ETVQjK*iBqYfgNIen~k$D8<8YlTfL2go#kL=_l zZ-@y|V1kLJ2t_J0fyzplA`>@6ZT?BiT@Evq z$2{gMRXNL9c4C;IK;UeH2}c?si2T533!D*6F5vWcbqAuTN$M2z|n6B{KZFFgvZhJUFl0(8qh=xRIMpfF#pjOeSMTO}_b$ZmL0=20`ed-O7I#j7f6^hF!qBAVT zHfN|>zQWNIbfv2)-nl?`l0%&eWT$O)TaMk@mbc}w#wAwbh;R5-p2q#HK9P&u2PniB zysdyjIDy;b=60dTZRc{Ui(GI_102@nEpB%UTqZ2XpoIEvb#FV{^|rU3+FhqOh_Q-H z^bn4s_yi_CQA7QfQWTT;FMj#EUs3`X!22yFfdhQt0sGg$0#0x#D*@mdBDlYBe6WQT zoZ$u+IKUcq@P|9RUD^22Y|C`@Jtk5&UBQlu{JMD21_&OPpg0Lzu=f zMzM=?Y~vXZS;jT|v5t#eV-tUaB+S;o!xy>?uaiPzw zV@A)JuWi1wL?tazaXvcHkUmGIHBF98bDGnd?lh=D{pn4YS{!ep#41vO5^J1;)T4HF zr(X?gQHMI#vnI89|3D63BxC@!R$#4#ZEIK0df3AbHnEK@>Q|Qo8BP$-d8ZNp2B?C! zqh9u_mksP=7rWEISVboUVG2PQwtxaG;3Nw8iF5w5``qf5guCN?Zb`sf-tw;Zy4y`} zd(WHR`PR2Y`K@n)r@P?z?svffe(!@`sPS=I5rlzFQu0n1lS~ANM%VfxdEyx0~Vt zulUY?u5^zxJ>xr9xxp(T2}FoI-s+yZ$SaX`0Zzi)lbFQ+{`ZNk>sN>IHhU#t9Oy}W zqU~+Z@1)@_(YJ4$-GQET-sR5jx6{4t3vPS51s?cJt3w^2K0M+LFYLs3`yA>3#u@_g z_`-v_4=S1bIo^~KV4UL?Yam6Yr{RdhU;aKNncw^xI!}2`A6^~4SjY{|Q4s(jpz_WA z1LYU+>vI6W37MwGa;BkaC$J0whi~ped~uG1@B;R>XZ}deF%1Ab;2e(t055JpmCA#< z9KNVPw544X1SGWa=XZSJUGMnDv)=XNpoJjfpu9ua?+}TIgdz0bHbS_K>UG<{`t!fx z3BdlVIs$wj0X#qeOh5zFKSQt|{p-K}dq6~pzy=&Z2IRjClphRSzz*EN4@3kB6u<|B zz!8K%1^hn{JcLQ$K*XUyLLdYPJi!@^K^v^W6of$ZnZXX6z(X)W`%6I?1VRaf!TOuQ z2fV-=q(S?!K_E;*BP2m0RKg>q{y_b+Kr6h$6P!XBY(fjvK`*pHFl53pd_pg*LWcRl z3S7bx#6l+wLmY&|GR#3boI@z=!McG%Aml^%VVnfSn+@E+{tLwT8AL-QL@HdI^Rd7~ zkb@#5ghcRzM4-X+iNr)mgiFLfL!d-Vj08+Hgh`adA0)yFBtrH#a(oSUi`&iB!yw5MM$Wc zG695XoB&spMgYhG!=pX`fCN?WM#IYig-`{fRLPX^$(LlwnsmvTj7gn@Nu#{UqVxlsY|1sD1D@o`prpyCbV>cw$(p2t zl%#{Hv`VGa$(_teu?$L|97#8rNurd>pA<@~T+5mCNwh>swERl9EK8z1%c|7Nm5fW0 z9Llz&%DN0ixfIE+^h=WLOR{WAxXjC$6w03*OPN$jv}{YU6wI8&Nyaows(j4N49mrw z%AKss%9Kn$AcX#u*n>6L$UT6-krYWo*vOG=P1$VC+r&*d*aO|XP2OBhu=L8xl**oT z1C%Vz;w()+a053u$*=rMGw4d_{7OGC14%Rk<-|?ayv?WF$m2{-H&}=86wmP_&+;_S z^Bm8jxy5l1&(8yf@r*oR_`FqE2W4D`RS<;mbWiwHz4=7Xb=W=%s67NA00{tq8xT+P zl7R4h1%;r1?Yo9`h)0EBf_1nC0w91_7|#Z!fbskT3UyEb1%N*o&+Qx02v7j=+&&U5 zPjwK7M^FGkQAmXt01D8C|HRQ8)zNiehl&&gFi3+kID_Tf12>=pHb{dsI0HDCgE?T* zCWX={b^cN*rP3#*QYf|3E7j61ZPF~AQZDtom|ER+&R5krq$WDjapTeT(kXKoSoeM(Is2a z^<2Wu*|T-oQVrZph21#~+_IJ0F4%%I0E3oY)h;N5EdYZ#D1$Dr+mbBO$RU-V61 z^Emj050CuPd1ZW2Z zCRS?@zXEXB1=zj&wOH~w*jbuPws?gK}NJW^O^ zH5mteri71O=YIa@bynwiE(Us>hd36thXp8r7_Pl} zsKx~-hKg2&d2oONQ0RFmfba`xmYxRyfPjxhXKgsp4+el&FlTU}X>+#ec0dM%sMv)N zfCt!xc6eu?hUcYT>Ud^qrk00w@PZ4R?PO!_-QMNeEtp%p)mmJ3TE3=Rrqx?H*4i@2U1cU?y*=c* zh3hVU*+ynwPmWtM=4R#PTDpa1G2Y^^Rb0N->}Gy!{=04DDdt_V<=rvJ-J9iJWd`P! z?b%Q^W8Y=#n1$@#RaKy!)2_|a+ofK$739pm+3i*4Zw_N-?&|O*UdfJGIM8iKzU?Jt zZp^i9Fs^MZrsk{dfRqkS)?dm4L+v)D&XWrwMeP(9{?kk37ZjS88o^8MNZogIT zWghOkHty~1=H!)!{pRof_V51&@BrWM>=-Wo9tWe52X$BjSCEIxQ-=WuJp)H@1!r&v z7w`|2fd0mCc>u=<*zf5218&epdB74?7{?sgZ!F;kZZI!_-EWFL25|g?9C!l<@NjS( z33>QXRS@w4;BRR}asHkLPKbbntk?pefLU1n2LWgDCU zYcE!BE+<|vhF-i)RlP1-v7J-K9RnO}FUT-1oUC##rv?UBfOl6=2X_7*hhAjHc~A#Z7-(Q1g?XO`ejjLau6KK{=X~Gy zes^kQKniwNc%FU*2>=Ikegp}41#pl6WSEDE2M0CqXmh>+h&Shhp!krF;TQ&op~m=m zfSGw1>XP^9R}cY@?|7CUd2=QQH3*cVRtN+5gJ)3cb_e>Pcjx_zEZ@r9Xpg4*R+GbXkYpO^oz-D{8PW4o;TvET-^)~Nno(=3!&h)w;TEboZtyO0D z{$|&%{n-ZXqxEL|o@Q>J{k^Bz$#+`Yhwqp@_uA)d@=ji%Xa44Q{^y7O=$HQKZwE+d z@rw1CSNQqqpMG|b@;wNH>ecHr0B`c1d-L|@^B-(}z5=A(03q*otwu~u*a-_gA80E@ks`iZAya(N?HOMw@ z!n#|^5Qb|wC*Q(%)$(0@X5Kt`ks(utEIIP!%9<@t-t74@=**ZsYnBI^G-uSPO{=zi zy0m1`u}gPuU0HHFKm`Es?(O?GaNYq5{PES!Hs#m1InQ3M+_bq%S;7$Pa(3^Q?05&a z&55va&hBr`7Q~A1FWc;1t>ZM}7;37Qcb$6bUQHk|1*$+wj?qLH*-g|%s{gtA zA47f}lvY+7l_gWUR5)~|4Z(8UoQ|V@fu9j`Rx&;_(wKSDQ*|j<x&3q3T^MH_uI(n%}5G}HFXBaH|K7>X!x z0vJ$%D$lgjG}lAdBhNUi(4n5Y^u?9kTKRp8-n{Agm)^lk!8-R;&jxHau&P>$-;+y? z(dw~mf144z?G7GudVBl&_q}6C!K~g7kK4qUYr#RpOj{aT1{nHYx+;Ot&h#w0XbD_6 zTB&wXhPNKKWV*P|TGzx(i@y%-rL5`;Fu+qKn{9TqlTL3LQbNH zUAQj$xU5F3`m>{7)Do+#){Zg9e@QWwrn-nmF4l7-^-~dG~GVY14Q=N5+l^tLq z1y!X|T^XH-pe_Uv49sdm5S#Eg_krPK%L3p`#CQhUanED^>z;a?xWB(?{z`h5vQh20 z_@tHyuXYi82=~}yJ!_>dWvAMo_Y|qS>TO|pjw>Y?I>)&(i19DSdYvIpwX1G*M2c=> zRul{P$?JJ#0}1H(<&dg=2bf0os*sC1moKFAy0hlgP!udCqD0~!+h$qpY*gRKkLa) zfZ~&&^Q`AT4I0peB2=IXWvD+JT2O~VbfEjpr#&xvP<+^<9_-*oF?OK_2rPgB4sZYi z7$5;PsA3q!|dCn860*@6q-YM0c z!P8qh0SGPjm@;ptq^9o3<*g=eYBTNfS|R--l{aM%kT0C&eY*|{%!YsB8hrlq>F zmeqKV`>OHeDpnyz5psKbYN|#jyTG9va;!$p>+;H4Nd~$qF6HAo3}O&3&v+7k9EVd}*W(3|#G<`x zS&OG)57W5Ab-l3=SL{3#ceutV79z~nvb=h6&WC5!#yr7X>UB@Ba61sMh!xPORUE}zZk^8y>RdX zCqSeU0jWc6u!M~&)FzOb)fcv~g2^iDW35`%qW-Nln30;TK5n6=zWz0^gDvb~6T8^P zJ~pzEt%x-w;c-V;a1w%0X;-Iu#l~y)wP~E~ZA;tLtS#QBgDcb~ht|$`T%(60t;gi; zSaahZS(lY zEB^S>@od)u>$#6JW!ITwx81H@p|J5C@BA9Fz0v6z7B_1eDoJT`_~`;@rsvz^k*M^Lw1krV_$ngu};$ee|7*byW_g~gkKb)X(?*b%6p z-sxQhj^GY9K??%m%K_oc>Cv;r+slF5%Z(ri%AgE7o3ycD5IkEDU?7E6q0-451hU$| znb?3C4-HbF-pODWj$yMc9R|Lf47yr@#Tx}qp{o@fpgmg-7F`L3AO(WK8ur`{(iouW zQL`1;2;v=u>D>`l;DJ?Pq?H$ z9U`I9l|dSITP1RxC+ZOddZE3sBC9Ro5o#cnecXwa6$VaW8xEouM%xww;Uq@eBKy`tU^6zG9v%S|#Nayy zBZ1B1pC!Q(1Q9zQP+%Pr;}lL|2^L+^ttBxM zfe(nK7^WOsQvTR4mK6v>V1XT21SS{;qUByj;L^F_2eKek3ZqEwBm?R|g!w=dfaG5e z*f>%fE)u2{reFk8+tOKJ6(%ACiX~;T8d`23mE9!`wqj^fc4&sbnxFWsQ2|0?MdO-XwM+C4jCZiBf5c zdT3KRWmOWT3%Ed2&H$jTXm^ri(P5{94kd4rr=8xZcp{jc{!|olAZXIn8%AMRw&e`! zX%6D&eS#%{{-k^Eq+I@`Uy>)Q?IwF3Sa?DpSmt0Zl4V#@Ab};K3xs7A-sDdiDuU(U zZQ|l1ekNOzC0p{TpL$>-mZ}O$p$r~aoys6@Mk)^IDtY1nrphHbYUh*^=S?P1pVFaUR-p?xCVLKQWD@9h zB4kdM)me%w2##Zg`6UHH=3E}wq3SE9IwoIU>VPq$8J=k%8e$hDWFH=^7TDDiG$D4H zB#DCL4pM<#DS;t2;|^MAO9GmJ@~Djxth=@#kBY3`&EqigV-aBI5~S=u%HtA10X!B# z4P?PZCPB(#XA!Jy5ddKkqs{7J$^y|m zvTQuUBS`kF)7tDj@__5*Y!>Vz74&Qo1kuxuZOYOk%m$)EYAqDxEZoB5%I^MSAW{L$ zB47-HLC;cw&Gu~H76A|B>^sh*>**sD1a8i@pu6hfyp8O@IxMk{tj(frL~5LGTPY_pjoh;HXn{^)j=V1AaM6AEaGM%W~Vrhu}bFVdl_A>@97W(?{p zftdjnn1K{f0oo>{g`Oi3gzHXXryW|T>W=4LdZNDGT`=;ZC7NaOYA8sO=1HLNl)FB4uYN*3cFTBCN-E`qh8Uoz%hw(fokqVrZHz#q&Rx&fbA~$Hn0X3V2%}7ffocA5kSEc!~q(U0U9i=7l1JqT!9-b!4p`)6C7R*)WH#m z0V9in8Hhm_*liYI!5)-a7F@vrqJirHvKg=e57dC+m96v1!4*_N6~sXeWaS!A0Uc0* z7&IFkn86ano)}2-6JS9S7z-FI!Q^3qAz#7iWkC(B!5>?}{uKmK6kNd^V?h>(0US^P z8Dv4^sqqtt!4mv&$n!%# zbnsgA!d9^sbU_sdbeh#sDrs0eTl7H(5%7Y+Nt;0u_-+)3v`I^W@4j>pIkE9TG8m|Y zME|oqJG2=9FGT+?#ZqJ5xpWH_frgYq;nTIF-^;JnmKat z_OvS_bWbOB6f?3b|1t|ePs8*@r&8ILb4*+Q^)pj6Bsa1v*R@#JvhWTxS+}$B zezotqvhU)xLT@!q|L(<6<3s!OJk~PJx^gpXG$W@H9i?3=sdOp@bwwNXG`e(}JtWW> zHN_tEI2(`e&Z9z~HfjTOEdMS|YjryxafW>~K`wSxJ9BLtaV-aS5zw<99yP0Em?Ot? zL$kDo(Q~t@v{9GsSNASp!?a32brIk-N+-eZs`WVgG)g=7ZeO=%6L(J&bWfvnoiXkn zSS%Q10UGZ?GiOm83K zfjhuMA*?|em_a`L13Kiv707|_%7HQD13LcXLn!d_KitE8=R-bV!y1SI8kD#*3$!8R zLp%%u9f$!Q;J5Y30VrU@Kg5G3m_hW#Lp&G)^5M54a6vxk!+pntFbKkkqk$jH!6VCF z6o`T32{}5f!4b>>0nsZi)Er>JAh?1%s5mxYfgU_TAqay$=tDeUgU4I}D5S$bxC1C; zLGG`gZ2xSL+cqOBIX=I0EPKo&cL5!Uk{QG@LrcLN zIC3lx`>4A!BMUUCC%U!=_o$nAK{NZa2m2%cx{{~*x0|@CZ+fVI^*ev{_yqKKn*pM? z^E=DkJTYMw)v8p$-qRXD}j(A^p!5rK>&BODsg8`_Q zxa=i5=c#+Icfo;+0nM9zc)PP1%>KbqL-kG9SrkjbfrmF89Qd@?S=PgS9ksMd)S28@ zws;$K;L9@`06sn+bxYUTL<>GrgMt68!G33fAJn}Y#K9@kf%$O(KllSb3_>Ts1Lxa8 z9t^@iZ2lsUG8XVdKfnVbc!59o10GyK9JGQy@WVX}LLMZZAoMvpU;{d!gR0wpIwXTI zV1p>Efv?lS%lkSS#DOgMLp3;FHQa+S)PWU%0zBvgHV`-{=s^|m!#_;k6Wq5Q*g=|C zLo)D#J_th`tUa@vy&KGd8@NFpD8fIy13whP9z;PF*g-b%13<*XhAv+oEP~MKLubsL zzASW1xpS8d9zRTato-|j{wIzefBytQ;djrS9Xt8-4XT1o7&?Ccu*HnCXAhY*YxdwI zQ*#X+H*|ph{OL328lgC8l0h@ns8Td^&^&eH22IU9bc{}|36!f)pGK>?p(zIIo~K~Z z^i-P`D^sFk!;T$$6KK!6cGYsliWM*4n{@Ni-OKeaovSpLLXC<>DH+E*+4>YZb#Py( zf}{3TYxe0`y?P51*6TIrPr8&1AC~N9=T5PDue!nMXN@1dwrkU&P5UPAu0DZ(Ms0dE zal%)Paz*Zjw%9$gZ`-b0mT>RSf9*mCYS!%D!gjCI#>#t*q1t|M_dd^ew_5RoeJ)+| zG-q9{pTFkxQ+1F2nAWm;l1@7O2n5X!=I#;@DD)WIO)oR(fN;SG83f7<+n(a;LfyDR zV?zri^svAVfyyw$2rZP(#Hb=P!;C~cl#Zq~2FgQ@J+go>i+s=_WDO$X3M-8HXBd2L!D0_Q_<^S%MYzD{obc6ezK|K4lWj{BMW!@ zS%eEbu9)d2sdnn`kaYYRWRQR0Au|tS{Gp|aQ~0UI3Ow$)CyzMraEBk0+@YrtE*iN< zA34N;V-7T;n6C@jupp+NZv1gYk2M4_2F*dDkV6nFusE}tL9n>Pk~QLJ(iJXf`3D^< zrr-yiLFE3Z;vRYg5o9EPMzMpRd=$wek17lM66qiVDsaVk?yq#yO4lZPqhJwTborx7-Vr~0E~kFYLN{MA@?8uKF<2xk zs)#$3xVsYx%MiS}5(_G-C?KX|-PY<$Yrb|fQ~9Qd9i}*4nJ13Q-kW5j$_;+IGYq(# zb9+y>p7gz`XS5>Z&r@aQm4=19pCa$RVsGBjq{BU}Tw*hTK zk2vcF{Hemcm`l5-#Hd;fs5#ugdyb@4(+#~n4n$8hztO8LzySd_oU6hC`-;A)Xsc@L zss833N~#3|9FJ&^tLiE@!8pWC?E=AjPeS~pGsEr{Rp$`(v=>afLKGo9J;l=@^uxu} zZ`)l%-CYbd4wUk!$&Dq}$OENA%ur$tEADxR7<8~9<{f|TxFel^81cuOC-$&{AAh!~ z#twY^;c|*}?iq!iWNe6|4v7?j0*WEH$Rdk>@cH70JMvJ2C^!aUSgCC8^10LYC!;6keD^7uFyLET97(qwqo$Y5;{RT;Uz?P(&5%01tg|VG0^i{zMc! zLJutHVMyj6h7tau4?NsR4tCIp738qQH6Tz6S{NW1253MsXu)A*@DCLRD26PE0fB3P z;~ec+GdMs@3v+}R#H4V*IkvHoju~Jasi4QSXu*JQT%=9hI5Ef63}R8y!o;+oM>e`q z3{h|+84yUaP}-4|p*-XP#n49o%#x1~TiL`Y_7kQ-1&*|I^^e|7s&9|Ak2@bU_SKxT6@TX-!0?t0zJMrdZmD%b?JKV$rmte^$v#|M(G=k11pq z23gHRwhNnRpeBn7NwJHO(`Nq3f>J29%6tK)ocZkMId`(oPDud{+9U)190qwYnduV_ z4~^(78*?$^vBqJVJf|4UP)#&Q!DbL*0~x>&pQ=!7W%`^C0m;D8j|OrNkz`CQYX&Mi zHj*(iCE!!YqE6^c_qWOHO^Bs)n?I>4cBoun8)LAA3@M&UU&=?_%& z$w^!e)2de$>%|shRf&%Es-NK)R0z}=7Gae|7gJqZ(XfOpctIceIN}n_P=qDaARqb2 zf)tWagdz0f9*xKc_xu5mAq?Rj@j${l_<@BQVBsZ<_y-c`agQuqp%MN_hY;vd4=-fl z36HgdB^qdqSXoJ1|Hy|Svap0DC_xDaRKgO(uvv6;&>i{PtUmtk0fZ}H;UE6MgAC{a zk32-73i|km9iH%ydyIn^BpC$_ys(5LP(go7NTd?-z>jVqA%j&&Bl`wXgCKMPiG1w` z7ouwJgtm!5{9ZLKb*Hg*+^)21TF(4~{Ti1X6*+ zQlNr|bvxeQE}_FzP(l}YYhn&_SP26g(HYpyffbIZ&j?@4}aLazxD8VyRc&& zo0zv+kiv_P(Bcz|mkLQf@{x7?lW!TX_jQ z;K8DGd*u{sn8+-SbfAym=r|kt(KgPoou6!FF1MM_zy0zOx^Uw-w^#=#PBN8QOy)5+ znaUY{^lxWu;~#^1(~(Z}5oEmL8|yZ=S$K7z%bejOfMMAg=J9wlyo4y|IKNspv6*vh z>@SPC#bNGqsqNhB5JP&{eYW$Z!!2GNBwEsec5|bDd+SMin#0kqcaS+OZN1i-#Yx6v zmsjlOcTbzjm%g&V10HZ#`&kJV9`%)r(C{S)HsTT2t;Ixxss3@lE#kq^k>793#) zN#MZ>lyCwa=zs_;SRx5@5Cj%HVMumBM?9(+{wPa8YX{!=McE~~v0HxU=v|t4_ z$im+5zylW)0R}vv!8_=2ho}eG3O{%W4m~iW$2WI_OXwB<&Fls4rZW(->coxK0v;sVNe7g03YnhH$K>h-+S$YT?yOoJ@A81 zeIH0)2hR7w43eMx@w0#j=cj)7$F2na;(y=K%r}0@uU~&n2Veg3Z*>0kkNb3B2?#Iy zh%fuTulT%g{N|_{;qHPjBf+QZU(xK_y}<99uVwK z;0QL5`o1st=&$#t&;0C9{s7SM94!LT4+QP+@WPJlW~}&Bu=g@8-e$o4HW2nn zPZ7Vb2qF>eD3KDKj}ns)6D|HR_!P0>XfOhuuLloN5|vK_ieLj^pax)$1ybMzbRYvV zpa@c61XzFr8f*w?paz8G9%Nt}{6QbAOCN+G24p}OcK{en1sd;kYhAPf8} z2}VHXQUC{7fCXBB1^!TgD9;foj}je;(kPvh1!iC) zD2vh@(UB^haw*YK9nY~Go6;z?@+#fZ72&ciQvd~`(hY~w9Eb8Ki*hW@F)WKRFPAbM z?=mmdaVmX49mA3++b|9JvMkp!F#qx>jgl!R^C^e&F2`~z=`t-h^DprdEzMFgL-QOV zlQc>5G6$0`qY^4t6E*)5H3>5@0~0LAvNlCC4H=U*r_wbqQyrgDH7_&wR&zD?axalm zD$CIg)iNs65GoVXIR%q1Pt!D)@-nLv1>W*1F_SS#(>M3hHk}eNnUf8fk}1dYEWgt- zjq){nGbxSJ{yI@pG}m)5?Gh@HQZUmoEkQFK5i>viaw(%yI^|O`)e|-ilt969H7OH7 z8M7`o6FIjtFDEni(lJ1*^D?6{2C^X?VgLqE00%&z2x=f3(18|HU;}JGTWEj-I6wv{ zvIorJAB@2mvcXtvKp^#jAg#_Hpr8isK}LOGQbq{!4_no2d)kaGGHWzfJiT3 z1AY?)OyDSCU;~I?1^l5OXn+J*zywx682+IVWMC0wv<5g}8~8yHWS|j*#Rh0V7=ge8 zOo1PaAqG<518{&Lc>n}npdBsJ6Is)h*A}1-dl_TEJJqbt}PDE5Fnz zw~|)Ll}gVsVAYdA-7_w6l|b84R&$kEf0YIH6)G2!ToK&LpR+t+^EuHnJ*`t(w>4e0Ggqm!U9Z( z6=2)4TaU6~(-kY-5^4GMRDK=c!6G11l zW8>2?=MyWF6=a*$VVgBB^D{O9(=oeKW8L#Lee*WYwr2P8L^|DMM;2g!0~#d;ydZ=0A#hV*1|W|gHsAwXpeR*UCtu(d zUvUK5HYl_5dM(&0BNzv8fP%9Uf+hG^Irvs1xLI{Fgh{xBt@4B^xP>J+f?fDnRXBr3 z-~~K5E7kQ@gVuJF6)s^DUi;Nse^x7n^@R2Gf<;(^Yw?6}poE)PgG*LkpH_#qScbFm176^XZTMN+mSD{mZ5wu5eYjzh)rnQug)z8-msV}fb~LXOK}GX4 z<+Y2klS@|gCo=^)00&N)1%xsv7kQP}wujjkmStHxeb|SY6=5sbK=+tiL)03x zKvqY<0$`x9h@gf+fCEsX2u5H8*f$?+As$X)13;h#S|J}a!3NwRA8OzV1VK}ZKos-= z6gHp(ia;3h0TVhH2E^1Iu)z{KpaU+~8VgGlb`OcIvI9Wi1AKsasUV+im<2F_M348K zI{*qaAs!Ig6=Gna3#$fJU;~699)zI@z?cPK00daT0#HCqOMwJHU<0zj9X_E5p5O^I z0Ug|ddgS*4yZ{suLLgN20uTWk^uZkjfdep_3Qk%fp4X!O!>CU+A)Dg>1SpsX{=pr5 zAeeLYgoBcUEntN|V2N2cs#o}fk9C=yI;%N&nYns}v%0BuGOC#xs&AO7N0@?jvV}X? zf;l*=3Ae4ES|{bYS>qUqUm&VgID+qbukjiO@VbO=xE8;7iIJG9nYgM&7zdu(f~i`G zLwJTqd2cJzW+xc3lQ>VaasIN_ z^g>OuGHcdYZ#9OG^rAHL&H_xK-G+8=JT>TZ!`; zFv-@6*H(x3Sh|CfaJ{;zx%-3Vx~)feyy4Q7U2*=d!@I57n!Ld~gL65Jo3^SkdIp-h z1T3HkaJqyY5(ZA$7CoRJ_0a-+fKoSrMH`g_HsA?d*DEi815VijrkMmvpae$Xe-~Q9 zJ7A$>K$>+x3NU&oJAeg70I&7b0#0BBR)7UwfCv-nvD{8n)wjT`m@;QP1lS+PfWaJPHAzdI`lcdznpsCPw99gZ`#7!Ld#qJCDC70fS39z=7;VpyjIYvzuY0g5ScOOZSjBZ{Y1@uP z8$LsMFfp5|-F2*q^(q;bE71{Sqq|urU9ctHErD5*+tybNJ=SIYR)v)ldMnQd7JIjYvIJZ}12CWlFaQQd94j>d$#E6oP2j^d z`vdgZ1SVW3Hy{RFal&DsBv-%({_g#$pH}u}&$Jg(<6Xdp6?Y_A-~&7u2U-pWG+-!K zfC@A~15!W(d?3g_{1u7dsWEy5ycDxRKp`P~9XFr`F2L%`6~!%fv@5R$*POJi9SjU4fO9+5CZjz15oIZ5wATncwAl;@NzK z7n_4s)nS1(#AQz>eS2qZb+j8eSi^l=rIjtK@@p4zwA<2KA68iXST1kZ;juesCwW}4 z(*-URlqZ`l9p7ZLwrIN;U?nqa``C{K_F}0tFF|`cX*-m0ze*bzXM?q2HK31I9%!qy zlo>W>v;T@Y7B*$ux@-3SIIH$8BYFCF7TuZEVvp7po8D$?wJN24XS1>@2cOb=J6yRk zTzUIvy*0D}A_aiir{t4s3`qqQ#61Q$SScQQ<)rI4n#& ziIRoK6d+bkROyjLhm{~%)U>%$rOkyYT7>l3qGr#bDi5yI;IZREh9;2Wz=3cD2$dyF zoH&8Pg31>!8h&uWVnzxVAT*dD!m`DTBUy>GG~pt}3>GkgycjWJ;s>rWaZK#GVFin+ zEL!-$$RcjRy?K>jH4)@PUJVjc;P_BvML`fC{3`6|Q3DGdBv=R@OSZ)d5(!b7Yyo<( z%^3=3NR?<)1%LliBrcaM0neRs;7E4G|E^?S>T7AT{Kn3zr16*f>z62YgFKr0=n zU_ur>l$3xCH7F2A7im=8g&J{}T|^2YBoKTGx~Cy`?k%|9fg8g2o{8(xCs>T8UFcp$ z17eudgb;!c|3Tfbj~HL3$B!Mix2{p+2rBEn(panIDkg z{dZ$TgvvZALz*H4p30)B*N}SQ*^IKAGs@>4oEFI_Bb_6|#x#4^38q@fG)p})i&Psq z{&Sp#d5SWTK?A5{&_*+j-O=o2Ei==E61QE`Ob;4!*DXptsMCV2$2Q4vs#d4ls}8z% zryKnjG=flu-F4YNgC`n?H7ovdz(jH#5o=O`TJqM3vq!evoT|4-UoycrQ9Z`F# z8(t!H0gJ}+(1b>vtmWGEiRp?Ymi=UPFwA(jr=^t!Ckm_)Z~Vx=A9*}orVR_c*>SRm zRje@Zwi>C?&VWG%8*IP<2Mle%ECw}z+W}`acp&NuSE&~61yX20Y7I5e-~ns)FG~Xr zQn`N>Qjvf(B;Y}^R->xbuqH6;qk*c-7lRG(z+>TAfd?>fl?}|`1Ey)#3YJIyoN^tI zI2zDF3zBsK64W3A7br{(E|4k^)~pODsm3rPx-|W$}y6c)MO=_^+`A~ zGL@q2hp_h!(tb+7|KeHFkZ3} zRYBLt#%R(JozY|^KO0I(L<-ZInY82zIN(GMWFQ0KW1$l>-~kq50HYVs=tnc^L>R)b zi5FC9`Cga-41_eLEM($FRZ3EoIuQdfWFbgD+Px))w5C0EDGd9^tebw+qbH?lN}XEL zrqUFn7!_$uLCVyRl60gol_^Mhdex;iv7{hvDNkwY(T%FLt4oC83sX8)m1cFRIW1{j zp9)u=GV21}3#v~&s!@_sHKl>It4TS^(T=t?rcRvcTA?b`vHt26tYeKUTvaOBvg&oC zGi9kvWg61Y`t-9GENy5x%PgBNmZcxHsa_-7SFiGQwoGhm6M3pyCSFjpj;$?LyT?S( zmT$PI1@2j|de#djceXnP>q^ZU(%srtxw`FYbYn|e(f&5Lx8-XSZ~9&3b`PtK?Ws+} zi`tkv7OtUPqE9dDQN5OSr*dU%Yq2`i=;}7QSXHZ6`McY%syDmi{px;q%G#nXm9M0A zDQ9(?-O`Fw!g8%DVVRoK-nf?dCF7L8!G)~t5*r(w-wS*Q8MKvwdXgMDjY z+d0|0M)Ht_o#$t#dC$7$@vLnv|hezQpFLjQSyyK7Ge8&x6cb5YmB9f{@@X!6 zcQhU4(igt!W1jZMLq6njw>i{5Z+qbb{_(muebj9}^pJbr@t&9c=qn#~%a=X+&42v+ zEl+d#of4t`mec814y+?RXW*K&Zza@Lo7fv0%Z*Lp>Fej?X$6c}>V$9zpk ze?6yn6)1D92Xz#hG{s4dYFS= z_yu^FgmSosM~DPHaD;<6hH)r_YS@Tr7>HOXgi!d1Stta9D203Ig;H3Bc!-5b_=r)M zgGcCtdRT{!h=e*AhpE_yt9Xh&2#T9Xgs?b=dF6PinUmbu^5KJIECHli+9L|VR(yl zh>O<9i{}`P*?5h7=#G0hjJX(v>Bx=ln1`vTi;XCYo4ASR*o5b(j*@7MxOk7X=#9Df zhsp?!t@x0Bh>z+R{)`Bji^F(|>v)4bz>z&L1RXg9KM;~1DFki^k|rqxL-3I+DUwsb zkt6An9{B?=8IwIQlQ(ITHW`vRDUvdolP+14C)trR>5(2e1th7G9hs6Zd6Gjg1w?t2 zQy`UG5R_6Wl^;2iPx%8|X_P$xls)hTPU)3iDV1LN15tUFQ}6{-umfC~mNWU0T+opn z8I)cL1Y0SRGr0pjU<6w^l12HKC0UXmS(G(-lz`cjJ4uu;nV3YWl8ULAI*F4&Fp?q( z1U+z>H%XXh`2%;!lQ9XDa4D5p>6Ky`l~);+PHCEFS(;7B-TnrNwZ3?%q(|DMN&2KyN~E%230QiiNXn(Ru%tYCrA~UIu0RSo zI;Q?Rx}&aO3u@{Lr_iQfdJ3}Org1u_IQphJI;T!LrF%-Ida9Zxz)ri?nMOPZ&j`lVj_ zrFN>Su0X1(`lf;^rlo2NayqDX8mFy_s%Lr%tFWq|3a7T}rLqdFUK*;kDx^)?rjmNA zcq*s1I;gEWsHkeH&zh&j3a5TLs@dwP%o?YlYNM_yuF49mzsjm?x~jI|tD-8dj9RN^ zdaiWZtV_DCbZV>AnytVptJ`X;*}`1-APTB;*^t@&E2pK7NgTdv|ttQy;^r$7p;Knk`% z3V?bGF$=RYD+{E+vpfq5qyP#Ni?gn<3a9Y0WNNg1N(wN`vrOx>Z8{1@+pA0avq4+5 zO*^%#;H$n0v@#2{OWL)aFr_~V3iK*tJi7`%`?WDkwJ^J+wqOZvOSNemr*wO#Wt*}o zE3#s{q*@+W`>bD!xI0U)T`LQq5V@9MxIs$_J6p6lOSDp( zv~BvcMoVO9JG4AI3Pe`4zFM}RFbbgXsi$xYtFXGIo3w^oucdplY3sGA{@bUPu%~$2 zyS>_^x+|%=OT3@@x47%OOX|BC>$r*Qyk#4=d7HL)`nOGrx~IUp%p1JV+q>jSyw01Z zU%Iru`mDc7xSMOO8e6@(d%h`)xAyA2&g-OfOTOT{rxy#na*Dd#`@YOOy*i4$MEk$; zOA5Rjv&`GItgEf-JF(xYyIM=TJNv9c8?(zhy?FbzIQqS*8^91uy>uGA*ekC&scCSvvD*v5TKlpboUhueyaBAXM!U2n+oq@5tc^>!I7+_Nd%oT4rvr?+ zz$?6jtGjV)z<8RuQfmvGyTfy;x~HJ7J}k8|46}gRrh+QPGkXgDqaemoyR>IavpU?v zI&8Eh46{=_#l0HGYmCJOOJoWxz+UUTW!k4&d&WIGvt>F863n%VyTX<*$UK|HUQ4q` zTeEUnvj@D#*sHZS`^IJ5rd%7xfXuVjdd5r}v#=YqI9wCeiDJ6p9t%eH`gxM^$5KYO^qd%8Up%Zi)q|V*ll+D?QjoQ}D;PdU=4L;!8{n*;Q-^y*_=KbBqYTO;3-=kgK`c2^et>J|I z)qnccv(42M4&fxO;+1XS?mglN9^U&s+1f4I#=QeZ5ae4KFB{!qX#{L( z9_d!D=ZYTZe6H$ye(D@~lZ4Lds!ry7S?7vw zlY4HHsJ@tWe(QXmlZuY(czNo8F6%cL>xypc#!l%q>4TdwN2UXprl?bp7B z%08ERF6|si=sX$ha)^?v&X=@)>m~{4Zm#Tou9Ul8l7yb;cHZl(Uhc8J=YEdvIjQfi zp6%tH=-V!ZHtCkWUhUgX@7`Wi?|j*V(hl!$p6ms0>-=8sLwWCZ&g}2L>~>!8^gitN zuJJ?}@iQryL)q@&Zt;hH=7DbMyiW11?&`)q?Ko-dsE+HX&h7i|>TZtibsp^7?&<*n F06Uuee4PLQ literal 0 HcmV?d00001 diff --git a/images/header_r.gif b/images/header_r.gif new file mode 100644 index 0000000000000000000000000000000000000000..4a8e0213981faca037a58cb210f3343c03aaa609 GIT binary patch literal 1192 zcmeIx>rYd60LJlOODUB|1*d2-U5Y`1iGhHaK*+RKw7Q@H8Nnecg<>#(V2m$VWE4<} z3IQ*JK&z%es^xw&8bB97O`+%XoZb#Sy`9q=9I-=IOp4LjwSR?g_RZ%nc#?;I@_1^R zAQa?-GzB^dgrc-UJp z=&kN|T^(|ljINiBQ5B=BwL|90v9;@??`y}6;!$Ju^S@hP5H+t>#nT^eys?Xi3PrWeJuc8Lw56@xGFyfh4!ISXv zJOnR5>Isw@(ozesS_LBzjHuKI6okTR6hcrqNCTr9HL6u>v`CN+(dy73J*v}d^m?t{ zpwnYI1E#|;J+^4TjE2Pk++f79032V$O-9^oG?{Ue1vgtvmH?~SYO`1gi;b`b5QL2& zZ6ryMcGB*!JDhfh%kFeJTrQ`}?R2}5H9xlM$JYP#|KImpAm%fJ77qMiKL`~31Ymsw zcUimkjF4@ytRLc1W_x8v_p&AXFY`3FkHu$omo|Hacli6x^!+MJ*4{b!;OrSWG<)CO z-jP31)tNSa_mt$~H1(Cv+>9g&>Y2L_9M8;7F1g>HR=m`llaeKqXCKIoko1>f6ZoW| zC2zQLwz1`C^l52YsT)${h}q}TtL(PU^c}6|r+)WR_|(%%;!w>7ch8*Kpji?4A41Sxd6~vks^?4X)D@NyI~LGh%x|;kz6D?60$QDFt+jl?Pdhm12Q5H TdkS4_erz=(Dk23JazXlkB7H*j literal 0 HcmV?d00001 diff --git a/images/info.png b/images/info.png new file mode 100644 index 0000000000000000000000000000000000000000..cdb74d677162e4a0811f80f8380a1608e43c4daf GIT binary patch literal 2942 zcmV-^3xV{BP)pO((I5mqC6}NOSc|-ck$*kH3nAZxBvIn zGk{eK`FFj3{_*GkpMU=U|M3TG?Ef#n{{R2{^Z$RKFxVP!a1=#3i2P$>V|ewAf#Ky> z1_tGfQw%SF^s_Gv3}601-2rzLBTN3(5C8w4dj9|arT72;Z@KmnB#{VLgDo(iK!^d! zFn|DJ#G?=n7#W-z;2b3>;g=Z^u3}FgKV_J>^3Vog7zaXRK#FW?Og3GG1nEB@mhf8r z|L;GDuOWuGwld5+aR2|WzmVVn#SIYs{|pS0Pr%@CC|dA`iQ(LGTSEl_V8k(iF_+$S z2FJp~3}1gSFnk7LcN-&SMg~>^y$7#eUu0onVfY6OA5KmNhBFslFsP_VFaTqkK||ei z0@zu#OHcg2@%I1!Yrx2zx8weQ2BnGr&jBNN+3DA)Ue`#N`TzW@|Nl<{1NG>W|Nn(N z>i*yg5-uRlJPtI4fkP0O%vczR1^@v>REQG`!1lt^A_)BbC+%jb^Q5&nlz|OskFF>v z`Y^$}Pv042Lwm1%`}B^&Dl3PX1qf;>G`ez}N%D;2$9V4Z?q+v8g!W z|I0UD;OYANZ>YFMWeOq%a!WAPEkFBz=I&ene*!gr{RK_@(AWl<#cVkDKZE&Fa4LBB z{r~?rK>YgK|NpPP{{P>;<~-O;NboXq`*X7~F!-7)fr<$Ruq6x-8sx{9AHFgeyXZ6c z8gMf_|BNaRqPHHs!cY-x0Lg6(pYE>TcIrOEt*0Ltz5tWd7hp02(Vu}d$nX!qTzG2# zO@>%M4ThuVo`RDd3|GzB$8e-SmJKyWf{O{2l}&3d{l5xKZ5M$F>B7tZ|IY){$dnCt zfZ;Xy|KWRI|DSyJ|Nl9lTZOVcN|9#S2dTKMpkH z;G_TlgF1JEGzg+=AXEgP16c-Py`wVWeZR3ug3JL3AgU%>CI%`3%p3s81)NOGOzV8? z4L!{CR2jHf85zEO{={(d@?D0rH=kX7@#IY_12@NV6mJ4^0A@D+^?Tj&2?c?2QX&kh z{Qnt5xsWnbgc*p`2I6HMOAalooUz-Qft}?TR&NS%b3Wgbpg?J~9m9_6@h1j} zAFsjuKS2I(AeNUDX2=M!y3D}LhLk=W8pJ1Tz4m|J!3W@?8k9fbnHgF#gX*h4|55WS zsM7iY)W9I1sROUPIR3ob!NSDI;AWErlEmeV4cx#3lI{zWxBJK{5;�(4{ADn_m zz_S-G|NQ#>2kb4F^M69=KR_iL4m@Odbm|hr_rDOAz~p}dgJi;*b3jG!kHZbSw|i0l zUtrAz3WA?#8vX&pWaZ`?48nguF?38g1l9qwh@Ar%o<%A1P?N^1bCnZU9c6g={s&mm zZ=?YJ4^;8u#dn6A*B>*yc>j~(%MXY=$RJ(c${!4G&ZnXl9T1?)z!F(#Tg$DHwl zm+6Xxd)!tnD>(FV$FOEY=X}kAufkg6|Ve^chC6%BR@YQ2x`=7!5t^ zpl99mY?O`!>%9BFn&ls^U`vmtZZz$d1WP{5PE)MU%iMsNs0jFqd=Nly2o$mj9*_vV zPd7}P(Alp;WqlhiG<6L1t99iNi;k19DYu_1UMOhShD9P1qJNA7P^>#?c0Of@&uxrOOCXK@FEzDB~cHyz%U z^%#an4UmV4@r*KzoX4|Q1dGj8$KB2;fwPrEM8SXgmo8-Qt-)&_G@yH6!d~Z`)pwy7 zaIPn)0IZK)jeUD^HbT?&qDNF>{BF#ew7kQaDRIz_P2ka}5Nuu>ifOYe5V=}&trSR` z^kWq&96YK*U_=li<70`U#=w?3);IQ&4-UF>5S~36sfSA`t?`ACo`S(=W0XuLwpys% zGBzZ~h1-j(#p=E`7OyLRDs=~rG~)c#JNUiod3;_wgz4~D$ZZ-Z6J?l~aaDciTn6sS zvKH+9XN)8?jCeAhX<~e4c9t|XgVs0re1ZKRhTZJeMQ-4bgPwNx2j6-E?F}XP?dC9g z^t2Bd)*?YlU!`=yDrZ_m8uo6Pw3*&%_#lo35^rF$5QTXncQ*+G~C3MH& zg^F#4*=wirPgd0E)Y?h35S_45$koo9=7eA1k=B2<4dbVVUQFB`Kzt|<6;-W>j68zs zi)|44x!&P?A4@y6*L$%gr?^j7cPJe;<8|)|)>ST|5vn*Qd#YsDJB69Z&r-n1Ql!mu z;XBU*DC?gmZhP+#MRovvadZlsw??46EDt^cA!ykytgAp8+j3in(oes!>V7`)1&qU= zv7xt^#JmaSOwfMc`A&3S~6b!L65)Y>*C1>miEq-AeQj_JFopYp;AL?3h@<7q+7`yfD^1y|0ovaX( zv0I#U_(@MA@zs&sPp&X^UDM2|rV$2;S1REfNNNSSx?@M=RWLVDT&BgA+t}Y^Ddgmx o;0dg>pZc1vHUGt8|679n7tkn<&oO_>Jpcdz07*qoM6N<$f@GMct^fc4 literal 0 HcmV?d00001 diff --git a/images/login.gif b/images/login.gif new file mode 100644 index 0000000000000000000000000000000000000000..ef57685066127c14b6363901979f27d3ed635fe1 GIT binary patch literal 2037 zcmV ziZC{5HZ^=XH*7dKXFEMQLpn+}J8wBWWi>j7G(3SpLO?n|bT~hSLO*puKZiX+c0fRZ zJ3@#?LwZ0(dOk#pNknf)Nk&9Pfks7$NJNfFMtw*}cSA^hL`jiMPE1WnfJaM!NlJ!L zOLtREVoythR!v<`O>$6DPgPHFP)~qTPK8fUdrnV`P)?CkR8m?}S5Z@bW>_FrSXEnA zU{qCrU{_38R(()bm|R(ZSXh=VP;@qfni{udS?-1V}pEX2xMe=VP$@0XJlw(fMsQcglY|EXnbd9hihkpX=`X{ zZE$XChHP$YX>EsxaR`iX3WIPfY;cN(b0=|gaB*^bbaHl(bP;TEqj7b3adeJ!c5{w+ z6O4E)mw5_yc8hja8RFjpFjg+;K zmY9~9m6VsWnVXoFnzfvso0^@uy`eauqMx0iyr8C>qotz7r!J+XyTz(Vz^*a7t6`|B zr=_f+!>}r>tD?oQOsuY}#j`fZvPY}0zpk*Y&ap_bv#_zX#I&}vw7Rgjxwg8wvDLsb z&%ry`#tyu`yTHD}*~CD=!oSP<4@7p8k)@btF6X@Af)YHn+)X~q@ z%kthd*VoR~*VNP5&h+3a?%Z|m-(c9<*Y@K?`s6Y2;C|cP+VJ9Q;NRBq;)mMd*81j1 z_~|tA=5^rW-v8@4`|LyG<>CM9RrczD|LtG+>Xqi`<^S<`>g?$4@9gmM?*I3#|M#@> z_3{4t!vFvOA^tCDbaZe!FE4aqZf9>UW^!d^WMy+}bZ>AjZ*pfZRAFvsZ(m7cZ*E^l zVQg$=a(MtD`2+z90RI3i00000E&wh7KnVT-{|OvOu%N+%2ooBN)KA@wJrE({nK<#0 zrcRn1^@+0v4VjN(zKCS90a`C~=HetIhEEg*CQOvXRHB5DuXN?WRjama*f3tVP?dp@ zplDG5qKqlCr}Cg6d+KnU@X(=yhpQd}O{+Jr-MMhrt|1$XOO6f|DpsIXfg_r-Zm(n{ zj1xzVnlWI&WZC;9NfI!4^X}c-BZpzbG7je`tgvyx2aq2)o-A-ur^}c#W7fo36DCZS zLR*>?DUzepjutH{bVs47eC9-m3F+la?JbG&E$ULGca(Sic@a6KBrMO+wfQA2(N<^6TH9 zKa>Ce00!uvD9R|~3^6%SHc$?l=%ULkt3)Vags;q^%PWz{rQn7fcIe@U1Wlq3I-U?> zqKS<_(#VP|rl=w$nOq{{jF)U8i#Oi515Hy0X`+uhEWjZo9B34Y1|BSR62}{F#1Tm} zh4AKE6-*q#z;fKgqeeoy;PZwK1>h|mJzW@iE&?NEbWAMQUC#+9C3^(lX!wlD=5JT#GKodL(+8#9 z#N$Q_L0Ff3psf%(>Y=8l7s2$?H{gae(YUh+bmpK#gbmq^OtKH4ifU-7iK=IT2JCA< zgfr2YqX|NV=#0arG?>u73!HQZ4?E$Z#xssljPsBJ2_-1O2@+TW9Kfd=ra*`w@F5Nq zSS5iAOyCUCpa(k8p$%pz0~f47LMi|OSGm#^3JQdcSq!Tn_3?%RC~$!qW}t>R%pndl zkO2<(kOQM12x1U3pnw9Y?1cm=M69@hBWyHL8`!``G@=-d3$4OH(SVOz3dF@ODkB+4 z9LOC^k&QBz5gKSrV=~s544xT-7;ubZFXlK$2idU}&+$+SauA0?`0RqAs~MwC08UPZYL>LD=b{Ub38nXJU){|MM6D7c1=Y}Lqml}LwZIXV zM{!O`RzygCNl180M}JFAN>ocxPD+ALP)<`#Vo*+VT~IkuO@vKNmsU@3Qci|hP+w6` zfl^daR8ebCQG8EOjbBnuR8WXhRDV`jRclu#UshaOSbkewT31_scwh@!UV~me0-{bgMfj7mVAYP zsD}cBgpGrQmxF_`g@=TIiG+WKu!o6;iinJ^i~y#L8;gvIw2=XgkBp6umy3_LkdlwT zl>m{Fw3C&Rx|a{Um;jQOnw^+(mY9{bo*|c=lbfBHnx46zp`E0rqp7Q?#jZoCs=lqS ztg^AGt+c7Jv#_+bv$(gfv%0U)zd5+Nx7or6x4FgI$N;&&!M(q{#=xxH!&KqU2IJ2F z!^OhG#mL9Tz2D9;+|5Vb&OgJ-zvt5c$H~U))&S_$8OYAW%gxHp&BfBuwCC1H<|I)Z5VR-(c9< z*6ZGh-rdyL-_-l%GW6qH+}_&p<80gF*WcmZ|LHgT=}PqHc;VyV|La5LG|=K`th3X@a_KdqyP4-{r0u;^zr@q!u9v_{rSoN z_|N+N`Tzg_A^tCDbaZe!FE4aqZf9>UW^!d^WMy+}bZ>AjZ*pfZRAFvsZ(m7cZ*E^l zVQg$=a(MtD`2+z90RI3i00000YXEBiKnVT-{|OvOu%N+%2oow?$grWqhY%x5oJbL3 zq)7Gly%Q%c0ssLZLy8sw?3pr8U$I!RqIRuYw@%_Z zQDH!XGiStR0ZXQ>UcD<7qm|3$-9;-EC zLO^&xy7U7Gs8gp7Q0iGKN~2~GdslDNlP44(iQ2cXTen;QS~M9>y!h}W$df>+REb|d zeDT_qn~n~hwd>TVHQT;jn0H&?WB%>p#fys+7Z=iB$iTk62M-w>*uASv8DDwYlqi`P zC=j%L@^r&Z83+_%;DHDp7(@_71OY`RnDoO>bnKu*4msXrm>o6DbjVCFzl8Y9E#bXF zUL8`*Ai|0)wkU!LFtV1+j58|p&O3qpFp(dD_{9x2*Z{x*3@gBxLJBY%d1MMJG`RvD zjgX=bKKIx&&phtHqa{4?#G{Tn--P*1HDs1~%rU$;A_WsMwCU!XZNBgV4Hb}3V=;JY zbIvR^)DRIKc(_u}JJ?JE2mlo%s_3GNTHxrTk20z#29#DxsiT%=swt$JR(cbjpcXUE zI7+Y}(HeMwBhRX=w(9DQ{;>#VS@W9zNw#vfxfs0<%{6(wE5-kyYJ!$%qWyB zf^Lq?hO6(s{PyebzW@g;@W2E!bP+DRC9Lqm3^(lX!w=^p@x&BYY%#_4_z{${k$l2i zIvfR%L?0xRtjEbHr+l&)iKXrK>1EJ#27Fu=fK50^{W{Dm3v#)hN^A`y|u7O^l9FHkgtB{}JV4`e_d>@z-a zydxAp@YA0@;g@S*qZ9#vlL$u$rx)B{2PjOT3RQT67P`=dIf$VQXGp^w@Zg3#KtTXP zHH>0FV;ug_kioYc5{Eb}qaNn~(oUGxv?Vr88h3HVGo~0tDN-?tRQ!Y~J|PNDh+=%? zqacmMIL1(!@r!xXdwM?T(x&~8Qo7+2#6@WPN!eX5~rT^m{< zI6(}5yaO2X9D~qQx|XAD0Vtw)+auOM2Dr?PZV5Pm6qPXxTr8t6^@zjZCUOyQ0Ei=O z5I`8hrkJ)e=B>$L z0}kH=Km?pEPF#%B1?JQOA5)@ImFz(edR!?>@Gyrt!V!*aWMfR#I7Tlz!38ehpmo^A zt^%U4wD35vVs1N|5#~}|DFhmDT;Ppw zzYDwJ5a2lX)90CChD#Gz3oS+0fC_?a+@ACv0J^NBGzY0Xr30y?t z6?p&vxd0t{RLi3m+7zRnBa06lC#>n$)vNlLPk zO^^cBj&Vlkc*iAvpreS)vM1y4-~l#pzb?aI$w}%#<|G6UAkUY>_3hC9eXEDS5T~d~ zOFELA;KYC^fbqNQNJXC{;s=b><43?@5(MEaXhO@m3!U>^=*9wQlRbmuen(2Uhj`Z0nOAl&T%mS=Hnm-%x(TgejELm+~h_`xyo0r zaw=1q*vKmP9^ohhCHNr}TWqDycg}O3U&0ieh{F%OrAbjvq*-1pq$n=I^rk!g=}y<; zAWtERKnT(35Mh=dC_xEMxZ-97H1gAO=bn-R_7_yy6$n_{KZ_@sN+a}ER zzVckLlqKLPUU5L}QeOuH$FEk;`cVmM9K33MuZl(c+S@)@VGsKT2qU1S_rbCvLi zFML`V|MQ7D7V0za>ENY@PIE7Sk7u;Xo#i3A~`300@BRqz4f-QA-g~b^sMVH5Dn< zfG7n5swEB6;0k*23fn>EC`v6P;ummHRG6iUWdcX-X0}X?sda!pR@^B;T zpbeh@6lS0XGB`92hy^Mj08#KncQFp_sM3aQ{# zi4_X5MOKmEOTIw@4v>(P#W-;x8Ts)38Jp!e5V;xKNLr_rlcse5pl}zsz;+f`52;X+ zjr9l_kq*8Q0h4uCsR)s4;0DoP44WVaasUQanFUyxl~u5nRgea9Knv-x329ITsj)g{ zsX7P%2zLQUHS>J4K$H>j2$8UVh7kZ9&^Wr488jIed%zs-1tFJ%Ih!+>gun-e`8kc& zXrxnJN042P={jZb49Ng3vSB;GAYK!ZE(_HS+5i9@uv?wgS;#>Ml~4;35?sSoT*rl6 z%EesI1zl&t3)IB~kC|NxpaWG@AF2Wkm?;sDa8bR{4X_X#$B_iZv0h2gUhh?A8YW~N zre+^zWFqz+?NOZ>&|eM^0rdVsK?Md5y$KQaVupX#4Im^u$Vof~qMXa~KN~h=&{a@Tp%%mObC2 zJuSik0I&=-Vjs?MBVyoU5YZo2(_m}>VHH-Q2XbNlV`lC7oDPa#(uqAKR$?5PZ8LHs zc;KNA(I49=W8Dx1HD;nYc4JV`V=3C4^hH3?8J|by0xtq)O2(7pV;@oW2vzoCfdDn@ zkdpD!AU9S&IEFtf!atBuq(OG1MCPJO%0NkSBuN%$D?k8>z-==!4)5>@RK{n1P*6yD z4GbUwUG}H>vt(j6rv5)>q-chu59($!FlZ}qBoCAV48R6plnmgo4x^AkcnW>s03>$l zWkmvJY@s@&ln-yt5n&HTpeL@dXI54= ze})YW6=#LUs1Jk$o6`x~KwMbj4$9S<&E;IkFs;lc_feqI%oR1o3b9Sph@CA2Zn2Y9Uiy3L=VQG|h1VF%Pv^GNNY*6%y)pkYECNrUcbDZD{ceZWYHm=}?Mri~NaR9Xk zQAC|_4#~i@qZn>;8*Xpo3%ZcEy6`r@(6@cdw|)x@Z}XEsdAEf7le%!YxRAJt+qjFX zw~&i75689z0TimRD$7uBtB^>ppt+p;xt!~6_a?gV_HOq!Z>QUDsc;IadkU`mx~!|Z zsh|qW;Ix!$5I}(kvw$mUw0Fwy@+? P(f`bltCc4s85pbqx0M&z literal 0 HcmV?d00001 diff --git a/images/order_desc.gif b/images/order_desc.gif new file mode 100644 index 0000000000000000000000000000000000000000..a2d17da8eb15e9c8ef919662e6e25226ca4e79cf GIT binary patch literal 60 zcmZ?wbh9u|-3PlI;8^IfZ5a6qV-|SL8jeC@6hiP+D2^w5p`M_Q|ul z!it76Ttj(P~?yK82Puv+G?hLZcvj_Sh+dLgl+`-T949)N0iFEuteQ2IO%syP8 z4=vD#7w9AGF49L9+4JrQ+v4u%0)2FmKDNm2?%3k)H+Glkqf6}Wep}idXZQQ=`1jqJ zInpeVJioBIu(ZCkyfN{8ck=u0#PaUs^6u2~E@5T&`wDgZJ7eNIW0Kuv#^f?%YMDV` zcZEUtgE_szm|0;=uP|3go6{u53>%p-O=8ZFn6o6tESWJ!X3Ub9bL^GOoMWRfiDc$H znMtHD=h;@73l!$UDsyp_y|U(4Sql`_!YXTVm9@m~8gp@twY0`uT4Q}@TW8x_USln< zvsTvG-CJR=KUgb&>`_*?SJ!ve*6E~m7U>6zyut1snQdc_!hXB4x4N;nzQLkw?5}R@ zQ>c5Z)V($8-a5ORd+VEfKd7u#>i!yaf1Pb}|HtP3#vcbiw)QvJXzU(rZtYRG_BXfo zskHq~+CFvbfJ!^qq#bP0_P1yUH1@o`zxBrfZTsLH2mAT+Ex>^%9KZQ<25WlLxPcOy z-t8@DP7F{m znfQ|vGcF3Z0!kTI)lZ7sI;dYutkTGSq3&W^p{bWO1HJr4^G46(JB6=rS7gSpYPKcR zg9$Lt#ro#z54jZcROFFM!>3x@X8Nh-zjVWwh95ta{_AFE;%^YcW3;{1Z@?t>+#xe< zFjoPY$-!Cm)3!+6rOK_rw|`jjoY&|0dDy^6>6|~l$gWrQk(^%GY||4<0BF}Fh5;Ne z+{jh1Nad21iw5TJAtxlxKYbTc0CgmqgaG<0Of;OU+)lEBcm-!0Jz4|D8sFb3Za!*H z8v3o$WUhtk%al4Bc?kgCFG*j)t3V^^V3{{?u<7 z^2?UvrU%ojSItkTZ*$@5b;lwc=UQ42Lg(?2Y9ak4IJd9?3C9gGS%W+gDROR;4YHBk zlnr*vEVc@953cl-LBWlz?*^8p49K>TX9vLEQFeo;d&u23Xa3%9#X`_PU%X8X8M}FMT_iQ&q+%LvaAfd(kwI z*`E^-$RlPWBZdj8w9>Ycat+SsJ>?Ni=9RwPu3vlCzs9F5?9OL$#$Rz07JxG-mUg*9 z0*5aUlCBkJtC$I`!YfT#6%0Ykoe=zL6-lftwdWB*+3MBhlmm^_HkbNy*kPBE`@77j zD@k7`t}E0IFy?NfM-BbPbO0_op(kkzNqdhB7BR|XqvpWlM&s6D*R#zB)U@17|1pMN z`by7fr3o9->(fAHj)#^amO>U7s)bA>Qq;v(yFUmTNA4Ito7QS2bFn&~uQ;eBzYH86 z|3oLkm(ptUS-wF+uTwnjrvRrXwCDd0+C>-3vv=Yw>9 z1z!le`gA234<$T*Fs7ya`$ctNFRFobH*Jd~Rp8g&bl8H$GAz2hf36}6EX5vrPIF1O zL-_RSIUfb1xWOJ;0Q2lo5IS0RH1n0M#c|FSTnBa@)h*y<>o5|0^oEE(Cmc3$dN;`u zyTXCBk7x8oPUr%w6|0O+GEs8nu>35VQ?mr&<*m45%$L{vjZW13^u*bF`d*|e>CP_7 zMWx5jefoA>Mu2{>E&WGaH@M{!2^s%^F^z7um%&ujhgB)AK3J;Kz z+-@lRASzGW?1b7af>7&FDu0!)cV z5@l{ZjmLuxx*I}DAyrWQ%F~-6gA$eaT8)lbGmn-YsUAs%`;Ea?w*1P{U7`cO4to`T zL;Yl@w~JEtiyipP)XOCboQx^;ps07N4XsfC(^uY zHnzxW)QG%_BYMWWr3jP^P^1FR2L6nVeCTZ|;1W&{(XN^||9v;~DWd;}-W%=4u=ZIu z3iJeQ^uLX-LRL~|j-0@pk+mWZx^$kM3*{8_LM=RVsRClywV7A=Ae6N&x1h6w$*hTjZI_ zCL3|Gr2U@pObcJ7E20+>WLfq!((ZLqzh%Vn1mF@!l}MBQt+FM_kxkR{;*SEFPG&S) z``mbBoaznxaVTefKRLpw&s|nYVBQ84Qs&aHZZ~u>Qz*!^*ENXen)9chkiYUgz#H{D zWPP6827#9TU+vdkz3YI>5Dl%13ps_O?{=SN*un}XgQ)oIHDw5=uHvT)ry4mv&6_1$ z_A3=u3#cK*xCC;u*U$b^$7{1io2c_8dvp|^z$OlQ(%;Z zS2Ckj@-D=Z=YN`(x=1XK;~KIILgO3jiPQ|E4zloHmovd+IKW8d3n;d$_e@8a_Nzmp zSM!Ob9Jro?pE@)%=$!$y)5`o>LcSjLMJFSqiAB7Hfo^&4 zX*x;AJf~sg0g;*n__r=kDOQ{ieol?P?{RaBb@i1K?^zF~08){7>JvQCfnd{6aYh+F z9B=)BeU7uKL45oG(&5-gh-YO>S{O5pf>2GS$tZYMb&AHn|jUG$I6(uy1h zEBap(6>fIUl$*&(i51|z_ts zg7b_4_mJV9m5N52sc%}bMWc^2^e z{q=cPfWBx+Mpm7e^MXyyt=aa%FxO1AeVz*)mG$-N-o&czPF!M#mJqs5!Ti0@Sf0k{ zL^!?8Q)o)~IL%F2)#mjSXdCTV>@K3&=2cdAjUR3sIp+;t;~qDFo@ zlaF{&jGL}3rvOoB%+a0Blv}lZQSpphefg>bI>3|&pye?*OO!u~qU-E;g>X+#r=Rg3s3l4=P=c#SC`2V+0NFpRRLg3UFKY*GzR)L~Xc9)jI~p zh44;$!HVHUgd~)TECMB4`Bu9w&Hr-7P4@|2`4YJkpS(<8CzCgoCR(}xgFX4%sh4{S z0WXWdzJZu@6*VOCbfFW!&Gfx0hFW-?K;@AcU!Xe0(mb>}$eSvdJR2=BYaabpLq1Sg zpvu8o$}y!kW>d>cCdyG=RmAn0$e|Oqqv~3MOlrO&4+3{}l9wl2^6$73<3?B5d^(IM z&38dZ#XU-;ZIUm1g751oKn;&-5l}aw%Mz`H!H`t5MUfHWF4+Mt3z1>VDQ3<<^@~=~ zRBfyGaKVSZf*;}GA0ZkAso~q)m*4@yhycipmZl&D@*V2Cfd*mx3~3Cv$AKY7U5>eh zBLCq;hBLK`(~P92m1X^9e`0Lq-pVStoLG=%poitN)d@-(ueg?60NYY+JY5S}|tuCSR6-j+T0EcGbpb$N0-U#DtTk*%r)w+9l4#Nu?XYFx<-K)Mv_B~VUR zF%r-e7jHXzk4*iF8Nsil8{MLwkEdKONyWt93l4(jFTE39nQ#yn2T}4st6DZ{v!G&q zY-ycH(xz8eKfG6^6c$mSf0D{=fC`mc^KRseMBCn+DUF-6y5rFzw_N-8G8N&0_$O5K zvT5fn}E)|Qk5-n`ehh1xdX4uv= zr`)+{DSrc&9EDCZst)MURxKvR=N|p@O)Qr_$nQPO|5!`!`YQi3xIj79Y*8ZmKacdj zHC#3qI&4qhkd62V~wTJqIHQ7yxeV?Up_NaSCq2pzuCXR&_bMHPeZ z{R}7kRyK3Sfj2EDs;#-?f@|GX*PxD3PClaYLIEZpxGgC%$&t9IZZTEwz${}V=HE?c z1f~|rV-{0|#EA-2LFyVK%)YD%bnctILFunnN4IsQ7bppN@w~Y7SSY<%=o`v9EGuS# jB&(86wY9aoySu`|!pX_W(9qD=*Vo?O s-sR=x?Ck9G^Yi-p`v3p`EC2ui01p5G000CF5CkzuF$X2JSaT5oI|v0V3IG5A literal 0 HcmV?d00001 diff --git a/images/subsection.gif b/images/subsection.gif new file mode 100644 index 0000000000000000000000000000000000000000..d2b5bf8e2104c9941c798f11314d38d7ede83dbe GIT binary patch literal 3636 zcmd7S2V2q$!+`NWQ&dn~fD3Wu$V^GIyc58mGWqsTH_V>v+s{GRvc8 zrA=Ig8x;3KQF2vkW#{yseBS5%7VqyX+}CxxxH;R|hw=e+;JpWsc;!ZKf6s@3p@F_3 zL0?bbU~kW$V6a~x?CjzD4iAY2hDQa%LnDIG z!I3fHh(IJ98xoBRMkhu`#>Yex!tu%R(aGV7sfn>E(d6{x`1I)1%=E;}*!1ko}HNQA5mWbyT7v?21i%aw3wMFsLtYlfdur66xo?ntKE`C~G zlu9I@rIMA8ORG!EUsjgamZh7k(sk*_t&c0)YbzTot6$ewKdr8P+gSU&w!ZUe{maJ2 zkN^DtW(NG%|Fr;Qc3A)n3d?}QfmLt)ne;N1!tI90N-@AZi9u&H0vf zH;cA6hv2}O04gs=4dKmM43qjKv(tp5oCzmNa%0eo>q`0$^kBqrUe;SqJS8Jf%`LQr zAq6|<;jF?09IvXE-ya9XGe@WNT@(qyZJ9qFdGT-Q9Y}`~hZ}+&FU3p7M(_H63AwiO zb=?EH-M5BNzj}wu|90HvTK^*lt?u;WxDnaxDEryRG^S~7MCKivp*C2L@?a|y{ z%ZBTu3)t{Bk#&cx!3wnMnA0Z_CEjt%M^(O)yO}0$<_fuir1o0e;Cg89+IRXMU1UN~ z4vuxRHb-K86;6iDqUZg$9v9&+Zwjc#f_AjXrw_Z~*j;6@&wF$jpnt;yLbLW&@(dIl zGXbM~cEY4FE>_SE*YKeUE3}!7!e~r;Lc2^`q9Dgir}1oBY+H#11@VRhbja?RF`z!= z<++28y-`=0kvHk*^(R=g3epmebu+4;cw`oIqU@L>F{lHvh9N2B#Jf~#l zLx1Uk_+R~A5>=~oZu`s~<+$YBu8?cGBsxe@wuIj%AG8RZK{>1d<)wBEkny7)8rVrQ zXj3;EKet{Af6PU!?jzQetmaxoGglF24TNdgeVfu#w`se-x;o^{2+y=m3|q@|%8Sgx z>z~jkb39S6<~Z9Z2d1xK@gel_4Lb^s3@v6nI52c&BtNkBa7@DblY75lwmcxqpe0-X zj#ddDdb9r&2vQNy!gf+%GRT=K*=Z*q;LG_Sh`xYgJE=dWoGYu#(CCoCrS>Mv-OVS> z$QrUPcgWdcZuApz@0egK%j(8Lj;E)}Hqv^D9*nZ4J5l}Zu8vR(=j!qv_l~C~Q5|TG zdy50&+r}>*8ZB?D4Wa%ur~|sL#$b`*_wVu8d9M!&VVIT}HbjBp$A+st>|n`Yf;sGQ zWFm(wqxl;lD!a9iM~ZpodW<5Y(}}Pp31u)pYg8ZsCR#!**4cF zun4mBdW|>GFoAeA+7uS$0(@A6BvpKbySN^^av6@jS9d+bjnIjPWyWrd|ssEH;2`u^?xKP}5YtQ*3S8M0s8$ zEfq#AjA#je@55@!{Vs*MMS&8|8KOA*Zfg)*Gm)ROnqvZL!v7<2FT5sb+bq1HwaUU= ziOu9`HhzS=aXcWa1?d-_HJlP_~{Kzk?ez_ZwI}yo%o|lL^tbH|~uXbJCODEG$Fka~6g})7QGJPtj&01y| z@Kdi(`@XhpV?-GS970g+MO=u^63a~5UV2aqp}528iP(8~M*EX1`9V`unJa=%fDdPP zpd*8MuV^q#qpaAI0a4)bzzRt{B|+k7{7G)59ka|OBlC*Y7AY$l1V$B#G2we_I^21c zDzA;bU1^mUa^kDzj3q|&LXc`{L16?b;+iE#Vd+tr_Jwbc!g=`=Kx z3yWn$8(j*0n|dIpD4kF~{*_aSFUs{}60p$_5WMx#Xi#-_JyK$-?7`~t)NR5!bObD9 z4ui3{+r~~|?l$=?s;3gRuHE)7?WMg`)7~fw446_wzi*#ysBk&A4^_~TO~<~fj!ILW zxg+2?vE|KlRGUQ9_97oP%vMfA?QwCXPzorLH+3oIp;bMBq)08+M68WU*<;d zbpo(~METzCV`0q4tt4o^GX`yM}$t4Gfy-M;yf-b*ihW%b9 z`$Ob+Rf9k$cu|$}6d&

GwVG zbXd+5)IyJoq&w?j$uRi08e_FU1GV1Hq^JO>UeV*yE6sLFxwxH9uU$};tpnGS!X5^n zsRq=Kl(s)TJ({OyW27;3(@R2dQNyJO-KKQw`W*c6!$pHKJxC9ww2c$5x_oMX)J1tV zsiQ$?9`NIHMHmV3I?)phDn%^N_E5w~#;p*o){_WF`joWJIltabmUp&wNRc%RWyC4% zxfCD!X0;k>*?4ciUr$#aaSO)hMxNqs`>muS-A>U;b9H3Sn_kL#*-_YF*ZOMwGP2z) zE@}uZ1!G^TUaC#DwuDi&jn4lR64+;It^b6oVVNY( zI8Hmjs)i{9Wp3$ZSD2E2U$3pZM=&aS?WUH8%*x~J-_2;Hx;JnOt*c8fD9LcvgHRm< z%}*lD&8~Fk_YWKM%1oI2&mkMoBEmqbx7EEJb5;SQg>%uKr*sn?JWq0|ESzKsIO?-chg9H#my zXA}ill{p0^Ovk?|i%+c-6(uYc?cMx)#yx9tSkqYdoY20|XhS(4w5|y1)DRh*YP?5bZ7={{1Bd~~A5aIhM`D!{woup{|9S*-(*XKKQB;eBp zHDr{S>|F~ibP*U*!j~3DEFFX;W@>Vo>Ku?sC?ou?uWqBUHZK`pkrkK$vfQ%$Afuo3 zCpZbNZ&(4=Zv>A%1pi6N-knLMxix`}Fp*P#+Ie!F@~b>1nf^SV;B=d)PXe{j6BsEo zs(2iK_&J8g3aM*NFL$}%m1*tZ6b|h`JcP@_PIzHipm%&(RkkbaE=LnkRwaW^OLdEs zeV>fV8F#pq4<{!@Uad;dBhj)l&%_!s?EYM&4;3RjxkUb!U(+JkCEp-G6!-G1Hm^A~ zaKS*=*V!msfx-*6|6#TY;6Gy(nbt0(r|D#g;zNY_&N;x<8+W}6kuq!!$#zvDviyo| za;$ClSjR+9P|+pE^(;N)7^B_aq7ZCC)J>T^1GXfjXeGN72#}}@VrMGaVT}lN`x`GP T#C|*A`E#Lg=LMDx00;jU>7Kd~ literal 0 HcmV?d00001 diff --git a/images/title.gif b/images/title.gif new file mode 100644 index 0000000000000000000000000000000000000000..c686057a55204f63c4e5fd47d381234ee4d03352 GIT binary patch literal 69 zcmZ?wbhEHbhHhA+zsuZ>}3um%92vJ|cW literal 0 HcmV?d00001 diff --git a/images/traffic_blue.gif b/images/traffic_blue.gif new file mode 100644 index 0000000000000000000000000000000000000000..8f817faa78fa74d2df7ac87895836843e82462f8 GIT binary patch literal 66 zcmZ?wbhEHbWMSZBSj50Ev-f{f*?%+r9yP@zKbPat0nd`dzcDZ{=m0STNDTusf5a{+ TIRz$X-kmNPhP&Q#GFSrug8C9N literal 0 HcmV?d00001 diff --git a/images/traffic_green.gif b/images/traffic_green.gif new file mode 100644 index 0000000000000000000000000000000000000000..93e9ebfa0268be09b68dd818e3bf29919a032f5b GIT binary patch literal 82 zcmZ?wbhEHbWMSZBSj51<;Ksm^z|B}C#yC}pX}vDfDNE)jE-e28bbwL}ATYlw literal 0 HcmV?d00001 diff --git a/index.php b/index.php new file mode 100644 index 0000000000..ff1900e5ce --- /dev/null +++ b/index.php @@ -0,0 +1,271 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Panel + * @version $Id: index.php 2693 2009-03-27 19:31:48Z flo $ + */ + +define('AREA', 'login'); + +/** + * Include our init.php, which manages Sessions, Language etc. + */ + +require ("./lib/init.php"); + +if($action == '') +{ + $action = 'login'; +} + +if($action == 'login') +{ + if(isset($_POST['send']) + && $_POST['send'] == 'send') + { + $loginname = validate($_POST['loginname'], 'loginname'); + $password = validate($_POST['password'], 'password'); + $row = $db->query_first("SELECT `loginname` AS `customer` FROM `" . TABLE_PANEL_CUSTOMERS . "` WHERE `loginname`='" . $db->escape($loginname) . "'"); + + if($row['customer'] == $loginname) + { + $table = "`" . TABLE_PANEL_CUSTOMERS . "`"; + $uid = 'customerid'; + $adminsession = '0'; + } + else + { + $row = $db->query_first("SELECT `loginname` AS `admin` FROM `" . TABLE_PANEL_ADMINS . "` WHERE `loginname`='" . $db->escape($loginname) . "'"); + + if($row['admin'] == $loginname) + { + $table = "`" . TABLE_PANEL_ADMINS . "`"; + $uid = 'adminid'; + $adminsession = '1'; + } + else + { + redirectTo('index.php', Array('showmessage' => '2'), true); + exit; + } + } + + $userinfo = $db->query_first("SELECT * FROM $table WHERE `loginname`='" . $db->escape($loginname) . "'"); + + if($userinfo['loginfail_count'] >= $settings['login']['maxloginattempts'] + && $userinfo['lastlogin_fail'] > (time() - $settings['login']['deactivatetime'])) + { + redirectTo('index.php', Array('showmessage' => '3'), true); + exit; + } + elseif($userinfo['password'] == md5($password)) + { + // login correct + // reset loginfail_counter, set lastlogin_succ + + $db->query("UPDATE $table SET `lastlogin_succ`='" . time() . "', `loginfail_count`='0' WHERE `$uid`='" . (int)$userinfo[$uid] . "'"); + $userinfo['userid'] = $userinfo[$uid]; + $userinfo['adminsession'] = $adminsession; + } + else + { + // login incorrect + + $db->query("UPDATE $table SET `lastlogin_fail`='" . time() . "', `loginfail_count`=`loginfail_count`+1 WHERE `$uid`='" . (int)$userinfo[$uid] . "'"); + unset($userinfo); + redirectTo('index.php', Array('showmessage' => '2'), true); + exit; + } + + if(isset($userinfo['userid']) + && $userinfo['userid'] != '') + { + $s = md5(uniqid(microtime(), 1)); + + if(isset($_POST['language'])) + { + $language = validate($_POST['language'], 'language'); + + if($language == 'profile') + { + $language = $userinfo['def_language']; + } + elseif(!isset($languages[$language])) + { + $language = $settings['panel']['standardlanguage']; + } + } + else + { + $language = $settings['panel']['standardlanguage']; + } + + if($settings['session']['allow_multiple_login'] != '1') + { + $db->query("DELETE FROM `" . TABLE_PANEL_SESSIONS . "` WHERE `userid` = '" . (int)$userinfo['userid'] . "' AND `adminsession` = '" . $db->escape($userinfo['adminsession']) . "'"); + } + + $db->query("INSERT INTO `" . TABLE_PANEL_SESSIONS . "` (`hash`, `userid`, `ipaddress`, `useragent`, `lastactivity`, `language`, `adminsession`) VALUES ('" . $db->escape($s) . "', '" . (int)$userinfo['userid'] . "', '" . $db->escape($remote_addr) . "', '" . $db->escape($http_user_agent) . "', '" . time() . "', '" . $db->escape($language) . "', '" . $db->escape($userinfo['adminsession']) . "')"); + + if($userinfo['adminsession'] == '1') + { + redirectTo('admin_index.php', Array('s' => $s), true); + exit; + } + else + { + redirectTo('customer_index.php', Array('s' => $s), true); + exit; + } + } + else + { + redirectTo('index.php', Array('showmessage' => '2'), true); + exit; + } + } + else + { + $language_options = ''; + $language_options.= makeoption($lng['login']['profile_lng'], 'profile', 'profile', true, true); + + while(list($language_file, $language_name) = each($languages)) + { + $language_options.= makeoption($language_name, $language_file, 'profile', true); + } + + $smessage = isset($_GET['showmessage']) ? (int)$_GET['showmessage'] : 0; + $message = ''; + + switch($smessage) + { + case 1: + $message = $lng['pwdreminder']['success']; + break; + case 2: + $message = $lng['error']['login']; + break; + case 3: + $message = $lng['error']['login_blocked']; + break; + case 4: + $message = $lng['error']['errorsendingmail']; + break; + } + + eval("echo \"" . getTemplate("login") . "\";"); + } +} + +if($action == 'forgotpwd') +{ + if(isset($_POST['send']) + && $_POST['send'] == 'send') + { + $adminchecked = false; + $loginname = validate($_POST['loginname'], 'loginname'); + $email = validateEmail($_POST['loginemail'], 'email'); + $sql = "SELECT `customerid`, `firstname`, `name`, `email`, `loginname` FROM `" . TABLE_PANEL_CUSTOMERS . "` + WHERE `loginname`='" . $db->escape($loginname) . "' + AND `email`='" . $db->escape($email) . "'"; + $result = $db->query($sql); + + if($db->num_rows() == 0) + { + $sql = "SELECT `adminid`, `firstname`, `name`, `email`, `loginname` FROM `" . TABLE_PANEL_ADMINS . "` + WHERE `loginname`='" . $db->escape($loginname) . "' + AND `email`='" . $db->escape($email) . "'"; + $result = $db->query($sql); + $adminchecked = true; + } + + $user = $db->fetch_array($result); + + if(($adminchecked && $settings['panel']['allow_preset_admin'] == '1') + || $adminchecked == false) + { + if($user !== false) + { + $password = substr(md5(uniqid(microtime(), 1)), 12, 6); + + if($adminchecked) + { + $db->query("UPDATE `" . TABLE_PANEL_ADMINS . "` SET `password`='" . md5($password) . "' + WHERE `loginname`='" . $user['loginname'] . "' + AND `email`='" . $user['email'] . "'"); + } + else + { + $db->query("UPDATE `" . TABLE_PANEL_CUSTOMERS . "` SET `password`='" . md5($password) . "' + WHERE `loginname`='" . $user['loginname'] . "' + AND `email`='" . $user['email'] . "'"); + } + + $rstlog = SysCPLogger::getInstanceOf(array('loginname' => 'password_reset'), $db, $settings); + $rstlog->logAction(USR_ACTION, LOG_WARNING, "Password for user '" . $user['loginname'] . "' has been reset!"); + $body = strtr($lng['pwdreminder']['body'], array('%s' => $user['firstname'] . ' ' . $user['name'], '%p' => $password)); + $mail->From = $settings['panel']['adminmail']; + $mail->FromName = 'SysCP'; + $mail->Subject = $lng['pwdreminder']['subject']; + $mail->Body = $body; + $mail->AddAddress($user['email'], $user['firstname'] . ' ' . $user['name']); + + if(!$mail->Send()) + { + if($mail->ErrorInfo != '') + { + $mailerr_msg = $mail->ErrorInfo; + } + else + { + $mailerr_msg = $email; + } + + $rstlog = SysCPLogger::getInstanceOf(array('loginname' => 'password_reset'), $db, $settings); + $rstlog->logAction(ADM_ACTION, LOG_ERR, "Error sending mail: " . $mailerr_msg); + redirectTo('index.php', Array('showmessage' => '4'), true); + exit; + } + + $mail->ClearAddresses(); + redirectTo('index.php', Array('showmessage' => '1'), true); + exit; + } + else + { + $rstlog = SysCPLogger::getInstanceOf(array('loginname' => 'password_reset'), $db, $settings); + $rstlog->logAction(USR_ACTION, LOG_WARNING, "User '" . $loginname . "' tried to reset pwd but wasn't found in database!"); + $message = $lng['login']['usernotfound']; + } + + unset($user, $adminchecked); + } + else + { + $message = ''; + } + } + else + { + $message = ''; + } + + if($settings['panel']['allow_preset'] != '1') + { + $message = $lng['pwdreminder']['notallowed']; + } + + eval("echo \"" . getTemplate("fpwd") . "\";"); +} + +?> \ No newline at end of file diff --git a/install/install.php b/install/install.php new file mode 100644 index 0000000000..1d8a49c9ba --- /dev/null +++ b/install/install.php @@ -0,0 +1,802 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package System + * @version $Id: install.php 2724 2009-06-07 14:18:02Z flo $ + */ + +/** + * Most elements are taken from the phpBB (www.phpbb.com) + * installer, (c) 1999 - 2004 phpBB Group. + */ + +if(file_exists('../lib/userdata.inc.php')) +{ + /** + * Includes the Usersettings eg. MySQL-Username/Passwort etc. to test if SysCP is already installed + */ + + require ('../lib/userdata.inc.php'); + + if(isset($sql) + && is_array($sql)) + { + die('Sorry, SysCP is already configured...'); + } +} + +/** + * Include the functions + */ + +require ('../lib/functions.php'); + +/** + * Include the MySQL-Table-Definitions + */ + +require ('../lib/tables.inc.php'); + +/** + * Language Managament + */ + +$languages = Array( + 'german' => 'Deutsch', + 'english' => 'English', + 'french' => 'Francais' +); +$standardlanguage = 'english'; + +if(isset($_GET['language']) + && isset($languages[$_GET['language']])) +{ + $language = $_GET['language']; +} +elseif(isset($_POST['language']) + && isset($languages[$_POST['language']])) +{ + $language = $_POST['language']; +} +else +{ + $language = $standardlanguage; +} + +if(file_exists('./lng/' . $language . '.lng.php')) +{ + /** + * Includes file /lng/$language.lng.php if it exists + */ + + require ('./lng/' . $language . '.lng.php'); +} + +/** + * BEGIN FUNCTIONS ----------------------------------------------- + */ + +function page_header() +{ + +?> + + + + + + SysCP + + + + + + + + + +
 
+ + + + +
+
+
+ +
+ + + + +
+ + +\n\t\t\t$text"; + } + else + { + echo " $text\n\t\t\n"; + } +} + +/** + * END FUNCTIONS --------------------------------------------------- + */ + +/** + * BEGIN VARIABLES --------------------------------------------------- + */ + +//guess Servername + +if(!empty($_POST['servername'])) +{ + $servername = $_POST['servername']; +} +else +{ + if(!empty($_SERVER['SERVER_NAME'])) + { + if(validate_ip($_SERVER['SERVER_NAME'], true) == false) + { + $servername = $_SERVER['SERVER_NAME']; + } + else + { + $servername = ''; + } + } + else + { + $servername = ''; + } +} + +//guess serverip + +if(!empty($_POST['serverip'])) +{ + $serverip = $_POST['serverip']; +} +else +{ + if(!empty($_SERVER['SERVER_ADDR'])) + { + $serverip = $_SERVER['SERVER_ADDR']; + } + else + { + $serverip = ''; + } +} + +if(!empty($_POST['mysql_host'])) +{ + $mysql_host = $_POST['mysql_host']; +} +else +{ + $mysql_host = '127.0.0.1'; +} + +if(!empty($_POST['mysql_database'])) +{ + $mysql_database = $_POST['mysql_database']; +} +else +{ + $mysql_database = 'syscp'; +} + +if(!empty($_POST['mysql_unpriv_user'])) +{ + $mysql_unpriv_user = $_POST['mysql_unpriv_user']; +} +else +{ + $mysql_unpriv_user = 'syscp'; +} + +if(!empty($_POST['mysql_unpriv_pass'])) +{ + $mysql_unpriv_pass = $_POST['mysql_unpriv_pass']; +} +else +{ + $mysql_unpriv_pass = ''; +} + +if(!empty($_POST['mysql_root_user'])) +{ + $mysql_root_user = $_POST['mysql_root_user']; +} +else +{ + $mysql_root_user = 'root'; +} + +if(!empty($_POST['mysql_root_pass'])) +{ + $mysql_root_pass = $_POST['mysql_root_pass']; +} +else +{ + $mysql_root_pass = ''; +} + +if(!empty($_POST['admin_user'])) +{ + $admin_user = $_POST['admin_user']; +} +else +{ + $admin_user = 'admin'; +} + +if(!empty($_POST['admin_pass1'])) +{ + $admin_pass1 = $_POST['admin_pass1']; +} +else +{ + $admin_pass1 = ''; +} + +if(!empty($_POST['admin_pass2'])) +{ + $admin_pass2 = $_POST['admin_pass2']; +} +else +{ + $admin_pass2 = ''; +} + +if($mysql_host == 'localhost' + || $mysql_host == '127.0.0.1') +{ + $mysql_access_host = $mysql_host; +} +else +{ + $mysql_access_host = $serverip; +} + +// gues http software + +if(!empty($_POST['webserver'])) +{ + $webserver = $_POST['webserver']; +} +else +{ + if(strtoupper(@php_sapi_name()) == "APACHE2HANDLER" + || stristr($_SERVER[SERVER_SOFTWARE], "apache/2")) + { + $webserver = 'apache2'; + } + elseif(substr(strtoupper(@php_sapi_name()), 0, 8) == "LIGHTTPD" + || stristr($_SERVER[SERVER_SOFTWARE], "lighttpd")) + { + $webserver = 'lighttpd'; + } + else + { + // we don't need to bail out, since unknown does not affect any critical installation routines + + $webserver = 'unknown'; + } +} + +if(!empty($_POST['httpuser'])) +{ + $httpuser = $_POST['httpuser']; +} +else +{ + $httpuser = ''; +} + +if(!empty($_POST['httpgroup'])) +{ + $httpgroup = $_POST['httpgroup']; +} +else +{ + $httpgroup = ''; +} + +/** + * END VARIABLES --------------------------------------------------- + */ + +/** + * BEGIN INSTALL --------------------------------------------------- + */ + +if(isset($_POST['installstep']) + && $_POST['installstep'] == '1' + && $admin_pass1 == $admin_pass2 + && $admin_pass1 != '' + && $admin_pass2 != '' + && $mysql_unpriv_pass != '' + && $mysql_root_pass != '' + && $servername != '' + && $serverip != '' + && $httpuser != '' + && $httpgroup != '' + && $mysql_unpriv_user != $mysql_root_user) +{ + page_header(); + +?> + + + + +' . $lng['install']['bcmathdescription']); + $_die = false; + } + else + { + status_message('green', 'OK'); + } + + status_message('begin', $lng['install']['openbasedir']); + $php_ob = @ini_get("open_basedir"); + + if(!empty($php_ob) + && $php_ob != '') + { + status_message('orange', $lng['install']['openbasedirenabled']); + $_die = false; + } + else + { + status_message('green', 'OK'); + } + + if($_die) + { + status_message('begin', $lng['install']['diedbecauseofextensions']); + die(); + } + + //first test if we can access the database server with the given root user and password + + status_message('begin', $lng['install']['testing_mysql']); + $db_root = new db($mysql_host, $mysql_root_user, $mysql_root_pass, ''); + + //ok, if we are here, the database class is build up (otherwise it would have already die'd this script) + + status_message('green', 'OK'); + + //first we make a backup of the old DB if it exists + + status_message('begin', $lng['install']['backup_old_db']); + $result = mysql_list_tables($mysql_database); + + if($result) + { + $filename = "/tmp/syscp_backup_" . date(YmdHi) . ".sql"; + + if(is_file("/usr/bin/mysqldump")) + { + $command = "/usr/bin/mysqldump " . $mysql_database . " -u " . $mysql_root_user . " --password='" . $mysql_root_pass . "' --result-file=" . $filename; + $output = exec($command); + + if(stristr($output, "error")) + { + status_message('red', $lng['install']['backing_up_failed']); + } + else + { + status_message('green', 'OK'); + } + } + else + { + status_message('red', $lng['install']['backing_up_binary_missing']); + } + } + + //so first we have to delete the database and the user given for the unpriv-user if they exit + + status_message('begin', $lng['install']['erasing_old_db']); + $db_root->query("DELETE FROM `mysql`.`user` WHERE `User` = '" . $db_root->escape($mysql_unpriv_user) . "' AND `Host` = '" . $db_root->escape($mysql_access_host) . "'"); + $db_root->query("DELETE FROM `mysql`.`db` WHERE `User` = '" . $db_root->escape($mysql_unpriv_user) . "' AND `Host` = '" . $db_root->escape($mysql_access_host) . "'"); + $db_root->query("DELETE FROM `mysql`.`tables_priv` WHERE `User` = '" . $db_root->escape($mysql_unpriv_user) . "' AND `Host` = '" . $db_root->escape($mysql_access_host) . "'"); + $db_root->query("DELETE FROM `mysql`.`columns_priv` WHERE `User` = '" . $db_root->escape($mysql_unpriv_user) . "' AND `Host` = '" . $db_root->escape($mysql_access_host) . "'"); + $db_root->query("DROP DATABASE IF EXISTS `" . $db_root->escape(str_replace('`', '', $mysql_database)) . "` ;"); + $db_root->query("FLUSH PRIVILEGES;"); + status_message('green', 'OK'); + + //then we have to create a new user and database for the syscp unprivileged mysql access + + status_message('begin', $lng['install']['create_mysqluser_and_db']); + $db_root->query("CREATE DATABASE `" . $db_root->escape(str_replace('`', '', $mysql_database)) . "`"); + $mysql_access_host_array = array_map('trim', explode(',', $mysql_access_host)); + + if(in_array('127.0.0.1', $mysql_access_host_array) + && !in_array('localhost', $mysql_access_host_array)) + { + $mysql_access_host_array[] = 'localhost'; + } + + if(!in_array('127.0.0.1', $mysql_access_host_array) + && in_array('localhost', $mysql_access_host_array)) + { + $mysql_access_host_array[] = '127.0.0.1'; + } + + $mysql_access_host_array[] = $serverip; + foreach($mysql_access_host_array as $mysql_access_host) + { + $db_root->query("GRANT ALL PRIVILEGES ON `" . $db_root->escape(str_replace('`', '', $mysql_database)) . "`.* TO '" . $db_root->escape($mysql_unpriv_user) . "'@'" . $db_root->escape($mysql_access_host) . "' IDENTIFIED BY 'password'"); + $db_root->query("SET PASSWORD FOR '" . $db_root->escape($mysql_unpriv_user) . "'@'" . $db_root->escape($mysql_access_host) . "' = PASSWORD('" . $db_root->escape($mysql_unpriv_pass) . "')"); + } + + $db_root->query("FLUSH PRIVILEGES;"); + $mysql_access_host = implode(',', $mysql_access_host_array); + status_message('green', 'OK'); + + //now a new database and the new syscp-unprivileged-mysql-account have been created and we can fill it now with the data. + + status_message('begin', $lng['install']['testing_new_db']); + $db = new db($mysql_host, $mysql_unpriv_user, $mysql_unpriv_pass, $mysql_database); + status_message('green', 'OK'); + status_message('begin', $lng['install']['importing_data']); + $db_schema = './syscp.sql'; + $sql_query = @file_get_contents($db_schema, 'r'); + $sql_query = remove_remarks($sql_query); + $sql_query = split_sql_file($sql_query, ';'); + for ($i = 0;$i < sizeof($sql_query);$i++) + { + if(trim($sql_query[$i]) != '') + { + $result = $db->query($sql_query[$i]); + } + } + + status_message('green', 'OK'); + status_message('begin', 'System Servername...'); + + if(validate_ip($_SERVER['SERVER_NAME'], true) !== false) + { + status_message('red', $lng['install']['servername_should_be_fqdn']); + } + else + { + status_message('green', 'OK'); + } + + //now let's change the settings in our settings-table + + status_message('begin', $lng['install']['changing_data']); + $db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `value` = 'admin@" . $db->escape($servername) . "' WHERE `settinggroup` = 'panel' AND `varname` = 'adminmail'"); + $db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `value` = '" . $db->escape($serverip) . "' WHERE `settinggroup` = 'system' AND `varname` = 'ipaddress'"); + $db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `value` = '" . $db->escape($servername) . "' WHERE `settinggroup` = 'system' AND `varname` = 'hostname'"); + $db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `value` = '" . $db->escape($dbversion) . "' WHERE `settinggroup` = 'system' AND `varname` = 'dbversion'"); + $db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `value` = '" . $db->escape($languages[$language]) . "' WHERE `settinggroup` = 'panel' AND `varname` = 'standardlanguage'"); + $db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `value` = '" . $db->escape($mysql_access_host) . "' WHERE `settinggroup` = 'system' AND `varname` = 'mysql_access_host'"); + $db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `value` = '" . $db->escape($webserver) . "' WHERE `settinggroup` = 'system' AND `varname` = 'webserver'"); + $db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `value` = '" . $db->escape($webserver) . "' WHERE `settinggroup` = 'system' AND `varname` = 'webserver'"); + + //FIXME + + $db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `value` = '" . $db->escape($httpuser) . "' WHERE `settinggroup` = 'system' AND `varname` = 'httpuser'"); + $db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `value` = '" . $db->escape($httpgroup) . "' WHERE `settinggroup` = 'system' AND `varname` = 'httpgroup'"); + + if($webserver == "apache2") + { + $db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `value` = '/etc/apache2/sites-enabled/' WHERE `settinggroup` = 'system' AND `varname` = 'apacheconf_vhost'"); + $db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `value` = '/etc/apache2/sites-enabled/' WHERE `settinggroup` = 'system' AND `varname` = 'apacheconf_diroptions'"); + $db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `value` = '/etc/apache2/syscp-htpasswd/' WHERE `settinggroup` = 'system' AND `varname` = 'apacheconf_htpasswddir'"); + $db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `value` = '/etc/init.d/apache2 reload' WHERE `settinggroup` = 'system' AND `varname` = 'apachereload_command'"); + } + elseif($webserver == "lighttpd") + { + $db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `value` = '/etc/lighttpd/conf-enabled/' WHERE `settinggroup` = 'system' AND `varname` = 'apacheconf_vhost'"); + $db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `value` = '/etc/lighttpd/syscp-diroptions/' WHERE `settinggroup` = 'system' AND `varname` = 'apacheconf_diroptions'"); + $db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `value` = '/etc/lighttpd/syscp-htpasswd/' WHERE `settinggroup` = 'system' AND `varname` = 'apacheconf_htpasswddir'"); + $db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `value` = '/etc/init.d/lighttpd reload' WHERE `settinggroup` = 'system' AND `varname` = 'apachereload_command'"); + $db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `value` = '/etc/lighttpd/lighttpd.pem' WHERE `settinggroup` = 'system' AND `varname` = 'ssl_cert_file'"); + } + + // insert the lastcronrun to be the installation date + + $query = 'UPDATE `%s` SET `value` = UNIX_TIMESTAMP() WHERE `settinggroup` = \'system\' AND `varname` = \'lastcronrun\''; + $query = sprintf($query, TABLE_PANEL_SETTINGS); + $db->query($query); + + // and lets insert the default ip and port + + $query = 'INSERT INTO `%s` SET `ip` = \'%s\', `port` = \'80\' '; + $query = sprintf($query, TABLE_PANEL_IPSANDPORTS, $db->escape($serverip)); + $db->query($query); + $defaultip = $db->insert_id(); + + // insert the defaultip + + $query = 'UPDATE `%s` SET `value` = \'%s\' WHERE `settinggroup` = \'system\' AND `varname` = \'defaultip\''; + $query = sprintf($query, TABLE_PANEL_SETTINGS, $db->escape($defaultip)); + $db->query($query); + status_message('green', 'OK'); + + //last but not least create the main admin + + status_message('begin', $lng['install']['adding_admin_user']); + $db->query("INSERT INTO `" . TABLE_PANEL_ADMINS . "` SET + `loginname` = '" . $db->escape($admin_user) . "', + `password` = '" . md5($admin_pass1) . "', + `name` = 'Siteadmin', + `email` = 'admin@" . $db->escape($servername) . "', + `customers` = -1, + `customers_used` = 0, + `customers_see_all` = 1, + `caneditphpsettings` = 1, + `domains` = -1, + `domains_used` = 0, + `domains_see_all` = 1, + `change_serversettings` = 1, + `edit_billingdata` = 1, + `diskspace` = -1024, + `diskspace_used` = 0, + `mysqls` = -1, + `mysqls_used` = 0, + `emails` = -1, + `emails_used` = 0, + `email_accounts` = -1, + `email_accounts_used` = 0, + `email_forwarders` = -1, + `email_forwarders_used` = 0, + `email_quota` = -1, + `email_quota_used` = 0, + `ftps` = -1, + `ftps_used` = 0, + `tickets` = -1, + `tickets_used` = 0, + `subdomains` = -1, + `subdomains_used` = 0, + `traffic` = -1048576, + `traffic_used` = 0, + `deactivated` = 0, + `aps_packages` = -1"); + status_message('green', 'OK'); + + //now we create the userdata.inc.php with the mysql-accounts + + status_message('begin', $lng['install']['creating_configfile']); + $userdata = ""; + + //we test now if we can store the userdata.inc.php in ../lib + + if($fp = @fopen('../lib/userdata.inc.php', 'w')) + { + $result = @fputs($fp, $userdata, strlen($userdata)); + @fclose($fp); + status_message('green', $lng['install']['creating_configfile_succ']); + chmod('../lib/userdata.inc.php', 0440); + } + elseif($fp = @fopen('/tmp/userdata.inc.php', 'w')) + { + $result = @fputs($fp, $userdata, strlen($userdata)); + @fclose($fp); + status_message('orange', $lng['install']['creating_configfile_temp']); + chmod('/tmp/userdata.inc.php', 0440); + } + else + { + status_message('red', $lng['install']['creating_configfile_failed']); + echo "\t\t\n\t\t\t\n\t\t\n"; + } + +?> + + + +
 SysCP Installation

" . nl2br(htmlspecialchars($userdata)) . "

+
+ +
+
+
+ +

+ + + + + + + + + + + + + + +
 
: + +
+ +
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 
:
:
>:
>:
>:
>:
 
:
>:
>:
 
>:
>:
>:/>Apache2 
/>Lighttpd
>:
>:
+
+
+
+ diff --git a/install/lng/english.lng.php b/install/lng/english.lng.php new file mode 100644 index 0000000000..e8c3c517cd --- /dev/null +++ b/install/lng/english.lng.php @@ -0,0 +1,79 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Language + * @version $Id: english.lng.php 2452 2008-11-30 13:12:36Z flo $ + */ + +/** + * Begin + */ + +$lng['install']['language'] = 'Installation - Language'; +$lng['install']['welcome'] = 'Welcome to SysCP Installation'; +$lng['install']['welcometext'] = 'Thank you for choosing SysCP. Please fill out the following fields with the required information to start the installation.
Attention: If the database you chose for SysCP already exists on your System, it will be erased with all containing data!'; +$lng['install']['database'] = 'Database'; +$lng['install']['mysql_hostname'] = 'MySQL-Hostname'; +$lng['install']['mysql_database'] = 'MySQL-Database'; +$lng['install']['mysql_unpriv_user'] = 'Username for the unprivileged MySQL-account'; +$lng['install']['mysql_unpriv_pass'] = 'Password for the unprivileged MySQL-account'; +$lng['install']['mysql_root_user'] = 'Username for the MySQL-root-account'; +$lng['install']['mysql_root_pass'] = 'Password for the MySQL-root-account'; +$lng['install']['admin_account'] = 'Administrator Account'; +$lng['install']['admin_user'] = 'Administrator Username'; +$lng['install']['admin_pass'] = 'Administrator Password'; +$lng['install']['admin_pass_confirm'] = 'Administrator-Password (confirm)'; +$lng['install']['serversettings'] = 'Server settings'; +$lng['install']['servername'] = 'Server name (FQDN)'; +$lng['install']['serverip'] = 'Server IP'; +$lng['install']['httpuser'] = 'HTTP username'; +$lng['install']['httpgroup'] = 'HTTP groupname'; +$lng['install']['apacheversion'] = 'Apacheversion'; +$lng['install']['next'] = 'Next'; + +/** + * Progress + */ + +$lng['install']['testing_mysql'] = 'Testing if MySQL-root-username and password are correct...'; +$lng['install']['erasing_old_db'] = 'Erasing old Database...'; +$lng['install']['backup_old_db'] = 'Create backup of the old Database...'; +$lng['install']['backing_up'] = 'Backing up'; +$lng['install']['backing_up_binary_missing'] = '/usr/bin/mysqldump is missing'; +$lng['install']['create_mysqluser_and_db'] = 'Creating MySQL-database and username...'; +$lng['install']['testing_new_db'] = 'Testing if MySQL-database and username have been created correctly...'; +$lng['install']['importing_data'] = 'Importing data into MySQL-database...'; +$lng['install']['changing_data'] = 'Changing imported data...'; +$lng['install']['adding_admin_user'] = 'Adding Administrator Account...'; +$lng['install']['creating_configfile'] = 'Creating configfile...'; +$lng['install']['creating_configfile_succ'] = 'OK, userdata.inc.php was saved in lib/.'; +$lng['install']['creating_configfile_temp'] = 'File was saved in /tmp/userdata.inc.php, please move to lib/.'; +$lng['install']['creating_configfile_failed'] = 'Cannot create lib/userdata.inc.php, please create it manually with the following data:'; +$lng['install']['syscp_succ_installed'] = 'SysCP was installed successfully.'; +$lng['install']['click_here_to_login'] = 'Click here to login.'; +$lng['install']['phpmysql'] = 'Testing if PHP MySQL-extension is installed...'; +$lng['install']['phpfilter'] = 'Testing if PHP filter-extension is installed...'; +$lng['install']['diedbecauseofextensions'] = 'Cannot install SysCP without these extensions! Aborting...'; +$lng['install']['notinstalled'] = 'not installed!'; +$lng['install']['phpbcmath'] = 'Testing if PHP bcmath-extension is installed...'; +$lng['install']['bcmathdescription'] = 'Traffic-calculation related functions will not work correctly!'; +$lng['install']['openbasedir'] = 'Testing if open_basedir is enabled...'; +$lng['install']['openbasedirenabled'] = 'enabled. SysCP will not work properly with open_basedir enabled. Please disable open_basedir for syscp'; + +/** + * Renamed in 1.2.19-svn40 + */ + +$lng['install']['webserver'] = 'Webserver'; + +?> diff --git a/install/lng/french.lng.php b/install/lng/french.lng.php new file mode 100644 index 0000000000..0c1227318d --- /dev/null +++ b/install/lng/french.lng.php @@ -0,0 +1,69 @@ + + * @author Romain MARIADASSOU + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Language + * @version $Id: french.lng.php 2692 2009-03-27 18:04:47Z flo $ + */ + +/** + * Begin + */ + +$lng['install']['language'] = 'Langue d\'installation'; +$lng['install']['welcome'] = 'Bienvenue à l\'installation de SysCP'; +$lng['install']['welcometext'] = 'Merci beaucoup d\'avoir choisi SysCP. Pour installer SysCP remplissez les cases ci-dessous avec les informations demandées.
Attention : Si vous entrez le nom d\'une base de données existante, celle-ci sera effacée !'; +$lng['install']['database'] = 'Base de données'; +$lng['install']['mysql_hostname'] = 'Nom d\'hôte du serveur MySQL'; +$lng['install']['mysql_database'] = 'Base de données MySQL'; +$lng['install']['mysql_unpriv_user'] = 'Utilisateur pour l\'accès non privilégié à MySQL'; +$lng['install']['mysql_unpriv_pass'] = 'Mot de passe pour l\'accès non privilégié à MySQL'; +$lng['install']['mysql_root_user'] = 'Utilisateur pour l\'accès root à MySQL'; +$lng['install']['mysql_root_pass'] = 'Mot de passe pour l\'accès root à MySQL'; +$lng['install']['admin_account'] = 'Accès administratif'; +$lng['install']['admin_user'] = 'Login de l\'administrateur'; +$lng['install']['admin_pass'] = 'Mot de passe de l\'administrateur'; +$lng['install']['admin_pass_confirm'] = 'Mot de passe de l\'administrateur (confirmation)'; +$lng['install']['serversettings'] = 'Configuration du serveur'; +$lng['install']['servername'] = 'Nom du serveur (FQDN)'; +$lng['install']['serverip'] = 'Adresse IP du serveur'; +$lng['install']['apacheversion'] = 'Version du serveur Apache'; +$lng['install']['next'] = 'Continuer'; + +/** + * Progress + */ + +$lng['install']['testing_mysql'] = 'Vérification du login root de MySQL ...'; +$lng['install']['erasing_old_db'] = 'Effacement de l\'ancienne base de données ...'; +$lng['install']['create_mysqluser_and_db'] = 'Création de la base de données puis des utilisateurs ...'; +$lng['install']['testing_new_db'] = 'Vérification de la base de données et des utilisateurs ...'; +$lng['install']['importing_data'] = 'Importation des informations dans la base de données ...'; +$lng['install']['changing_data'] = 'Modification des données importés ...'; +$lng['install']['adding_admin_user'] = 'Ajout de l\'utilisateur administrateur ...'; +$lng['install']['creating_configfile'] = 'Création du fichier de configuration ...'; +$lng['install']['creating_configfile_succ'] = 'OK, userdata.inc.php a été sauvegardé dans le dossier lib/ de SysCP.'; +$lng['install']['creating_configfile_temp'] = 'Le fichier a été sauvegardé dans /tmp/userdata.inc.php, veuillez le déplacer / copier dans le dossier lib/ de SysCP.'; +$lng['install']['creating_configfile_failed'] = 'Erreur en créant le fichier lib/userdata.inc.php, veuillez le créer avec le contenu ci-dessous :'; +$lng['install']['syscp_succ_installed'] = 'SysCP a été installé correctement.'; +$lng['install']['click_here_to_login'] = 'Cliquez ici pour vous rendre à l\'invite de connexion.'; +$lng['install']['httpuser'] = 'Nom du utilisateur du HTTP'; +$lng['install']['httpgroup'] = 'Nom du la group du HTTP'; + +/** + * Renamed in 1.2.19-svn40 + */ + +$lng['install']['webserver'] = 'Version du serveur'; + +?> diff --git a/install/lng/german.lng.php b/install/lng/german.lng.php new file mode 100644 index 0000000000..3b3aa22d50 --- /dev/null +++ b/install/lng/german.lng.php @@ -0,0 +1,76 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Language + * @version $Id: german.lng.php 2452 2008-11-30 13:12:36Z flo $ + */ + +/** + * Begin + */ + +$lng['install']['language'] = 'Installations - Sprache'; +$lng['install']['welcome'] = 'Willkommen zur SysCP Installation'; +$lng['install']['welcometext'] = 'Vielen Dank dass Sie sich für SysCP entschieden haben. Um Ihre Installation von SysCP zu starten, füllen Sie bitte alle Felder unten mit den geforderten Angaben.
Achtung: Eine eventuell bereits existierende Datenbank, die den selben Namen hat wie den, den Sie unten eingeben werden, wird mit allen enthaltenen Daten gelöscht!'; +$lng['install']['database'] = 'Datenbank'; +$lng['install']['mysql_hostname'] = 'MySQL-Hostname'; +$lng['install']['mysql_database'] = 'MySQL-Datenbank'; +$lng['install']['mysql_unpriv_user'] = 'Benutzername für den unprivilegierten MySQL-Account'; +$lng['install']['mysql_unpriv_pass'] = 'Passwort für den unprivilegierten MySQL-Account'; +$lng['install']['mysql_root_user'] = 'Benutzername für den MySQL-Root-Account'; +$lng['install']['mysql_root_pass'] = 'Passwort für den MySQL-Root-Account'; +$lng['install']['admin_account'] = 'Admin-Zugang'; +$lng['install']['admin_user'] = 'Administrator-Benutzername'; +$lng['install']['admin_pass'] = 'Administrator-Passwort'; +$lng['install']['admin_pass_confirm'] = 'Administrator-Passwort (Bestätigung)'; +$lng['install']['serversettings'] = 'Servereinstellungen'; +$lng['install']['servername'] = 'Servername (FQDN)'; +$lng['install']['serverip'] = 'Server-IP'; +$lng['install']['apacheversion'] = 'Apacheversion'; +$lng['install']['next'] = 'Fortfahren'; + +/** + * Progress + */ + +$lng['install']['testing_mysql'] = 'Teste, ob die MySQL-Root-Benutzerdaten richtig sind...'; +$lng['install']['erasing_old_db'] = 'Entferne alte Datenbank...'; +$lng['install']['create_mysqluser_and_db'] = 'Erstelle Datenbank und Benutzer...'; +$lng['install']['testing_new_db'] = 'Teste, ob die Datenbank und Passwort korrekt angelegt wurden...'; +$lng['install']['importing_data'] = 'Importiere Daten in die MySQL-Datenbank...'; +$lng['install']['changing_data'] = 'Passe die importierten Daten an...'; +$lng['install']['adding_admin_user'] = 'Füge den Admin-Benutzer hinzu...'; +$lng['install']['creating_configfile'] = 'Erstelle Konfigurationsdatei...'; +$lng['install']['creating_configfile_succ'] = 'OK, userdata.inc.php wurde in lib/ gespeichert.'; +$lng['install']['creating_configfile_temp'] = 'Datei wurde in /tmp/userdata.inc.php gespeichert, bitte nach lib/ verschieben.'; +$lng['install']['creating_configfile_failed'] = 'Konnte lib/userdata.inc.php nicht erstellen, bitte manuell mit folgendem Inhalt anlegen:'; +$lng['install']['syscp_succ_installed'] = 'SysCP wurde erfolgreich installiert.'; +$lng['install']['click_here_to_login'] = 'Hier geht es weiter zum Login-Fenster.'; +$lng['install']['phpmysql'] = 'Teste, ob die PHP MySQL-Erweiterung installiert ist...'; +$lng['install']['phpfilter'] = 'Teste, ob die PHP Filter-Erweiterung installiert ist...'; +$lng['install']['diedbecauseofextensions'] = 'Kann SysCP ohne diese Erweiterungen nicht installieren! Breche ab...'; +$lng['install']['notinstalled'] = 'nicht installiert!'; +$lng['install']['phpbcmath'] = 'Teste, ob die PHP bcmath-Erweiterung installiert ist...'; +$lng['install']['bcmathdescription'] = 'Traffic-Berechnungs bezogene Funktionen stehen nicht vollständig zur Verfügung!'; +$lng['install']['openbasedir'] = 'Teste, ob open_basedir genutzt wird...'; +$lng['install']['openbasedirenabled'] = 'aktiviert. SysCP wird mit aktiviertem open_basedir nicht vollständig funktionieren. Bitte deaktivieren Sie open_basedir für SysCP'; +$lng['install']['httpuser'] = 'HTTP Username'; +$lng['install']['httpgroup'] = 'HTTP Gruppenname'; + +/** + * Renamed in 1.2.19-svn40 + */ + +$lng['install']['webserver'] = 'Webserver'; + +?> diff --git a/install/scripts/htpasswd-htaccess-remover.php b/install/scripts/htpasswd-htaccess-remover.php new file mode 100644 index 0000000000..9c49e32a64 --- /dev/null +++ b/install/scripts/htpasswd-htaccess-remover.php @@ -0,0 +1,106 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package System + * @version $Id: htpasswd-htaccess-remover.php 2244 2008-10-06 11:01:18Z EleRas $ + */ + +if(@php_sapi_name() != 'cli' + && @php_sapi_name() != 'cgi' + && @php_sapi_name() != 'cgi-fcgi') +{ + die('This script will only work in the shell.'); +} + +$pathtophpfiles = '/var/www/syscp'; +$filename = 'htpasswd-htaccess-remover.php'; + +/** + * Includes the Usersettings eg. MySQL-Username/Passwort etc. + */ + +require ("$pathtophpfiles/lib/userdata.inc.php"); + +/** + * Includes the MySQL-Tabledefinitions etc. + */ + +require ("$pathtophpfiles/lib/tables.inc.php"); + +/** + * Includes the MySQL-Connection-Class + */ + +require ("$pathtophpfiles/lib/class_mysqldb.php"); +$debugMsg[] = 'Database Class has been loaded'; +$db = new db($sql['host'], $sql['user'], $sql['password'], $sql['db']); +$db_root = new db($sql['host'], $sql['root_user'], $sql['root_password'], ''); + +if($db->link_id == 0 + || $db_root->link_id == 0) +{ + /** + * Do not proceed further if no database connection could be established (either normal or root) + */ + + die('Cant connect to mysqlserver. Please check userdata.inc.php! Exiting...'); +} + +unset($sql['password']); +unset($db->password); +$result = $db->query("SELECT `settingid`, `settinggroup`, `varname`, `value` FROM `" . TABLE_PANEL_SETTINGS . "`"); + +while($row = $db->fetch_array($result)) +{ + $settings["$row[settinggroup]"]["$row[varname]"] = $row['value']; +} + +unset($row); +unset($result); + +if(!isset($settings['panel']['version']) + || $settings['panel']['version'] != $version) +{ + /** + * Do not proceed further if the Database version is not the same as the script version + */ + + die('Version of File doesnt match Version of Database. Exiting...'); +} + +/** + * Includes the Functions + */ + +require ("$pathtophpfiles/lib/functions.php"); +$result = $db->query('SELECT * FROM `' . TABLE_PANEL_HTACCESS . '` '); + +while($row = $db->fetch_array($result)) +{ + if(file_exists($row['path'] . '.htaccess')) + { + unlink($row['path'] . '.htaccess'); + } +} + +$result = $db->query('SELECT * FROM `' . TABLE_PANEL_HTPASSWDS . '` '); + +while($row = $db->fetch_array($result)) +{ + if(file_exists($row['path'] . '.htpasswd')) + { + unlink($row['path'] . '.htpasswd'); + } +} + +?> diff --git a/install/scripts/language-check.php b/install/scripts/language-check.php new file mode 100644 index 0000000000..78a3838300 --- /dev/null +++ b/install/scripts/language-check.php @@ -0,0 +1,186 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package System + * @version $Id: language-check.php 2244 2008-10-06 11:01:18Z EleRas $ + */ + +// some configs + +$baseLanguage = 'english.lng.php'; + +// Check if we're in the CLI + +if(@php_sapi_name() != 'cli' + && @php_sapi_name() != 'cgi' + && @php_sapi_name() != 'cgi-fcgi') +{ + die('This script will only work in the shell.'); +} + +// Check argument count + +if(sizeof($argv) != 2) +{ + print_help($argv); + exit; +} + +// Load the contents of the given path + +$path = $argv[1]; +$files = array(); + +if($dh = opendir($path)) +{ + while(false !== ($file = readdir($dh))) + { + if($file != "." + && $file != ".." + && !is_dir($file) + && preg_match('/(.+)\.lng\.php/i', $file)) + { + $files[$file] = str_replace('//', '/', $path . '/' . $file); + } + } + + closedir($dh); +} +else +{ + print "ERROR: The path you requested cannot be read! \n "; + print "\n"; + print_help(); + exit; +} + +// check if there is the default language defined + +if(!isset($files[$baseLanguage])) +{ + print "ERROR: The baselanguage cannot be found! \n"; + print "\n"; + print_help(); + exit; +} + +// import the baselanguage + +$base = import($files[$baseLanguage]); + +// and unset it in the files, because we don't need to compare base to base + +unset($files[$baseLanguage]); + +// compare each language with the baselanguage + +foreach($files as $key => $file) +{ + $comp = import($file); + print "\n\nComparing " . $baseLanguage . " to " . $key . "\n"; + $result = compare($base, $comp); + + if(is_array($result) + && sizeof($result) > 0) + { + print " found missing strings: \n"; + foreach($result as $value) + { + print " " . $value . "\n"; + } + } + else + { + print " no missing strings found! \n "; + } + + print "\nReverse Checking " . $key . " to " . $baseLanguage . "\n"; + $result = compare($comp, $base); + + if(is_array($result) + && sizeof($result) > 0) + { + print " found strings not in basefile: \n"; + foreach($result as $key => $value) + { + print " " . $value . "\n"; + } + } + else + { + print " There are no strings which are not in the basefile! \n "; + } +} + +//----------------------------------------------------------------------------------------- +// FUNCTIONS +//----------------------------------------------------------------------------------------- + +/** + * prints the help screen + * + * @param array $argv + */ + +function print_help($argv) +{ + print "Usage: php " . $argv[0] . " /PATH/TO/LNG \n"; + print " \n "; +} + +function import($file) +{ + $input = file($file); + $return = array(); + foreach($input as $key => $value) + { + if(!preg_match('/^\$/', $value)) + { + unset($input[$key]); + } + else + { + // generate the key + + $key = preg_replace('/^\$lng\[\'(.*)=(.*)$/U', '\\1', $value); + $key = str_replace('[\'', '/', $key); + $key = trim(str_replace('\']', '', $key)); + + //generate the value + + $value = trim($value); + + // set the result + + $return[$key] = $value; + } + } + + return $return; +} + +function compare($array1, $array2) +{ + $result = array(); + foreach($array1 as $key => $value) + { + if(!isset($array2[$key])) + { + $result[$key] = $value; + } + } + + return $result; +} + +?> \ No newline at end of file diff --git a/install/syscp.sql b/install/syscp.sql new file mode 100644 index 0000000000..7bd60c1eb1 --- /dev/null +++ b/install/syscp.sql @@ -0,0 +1,916 @@ +# $Id: syscp.sql 2722 2009-05-04 18:59:28Z flo $ +# -------------------------------------------------------- + +# +# Table structure for table `ftp_groups` +# + +DROP TABLE IF EXISTS `ftp_groups`; +CREATE TABLE `ftp_groups` ( + `id` int(20) NOT NULL auto_increment, + `groupname` varchar(60) NOT NULL default '', + `gid` int(5) NOT NULL default '0', + `members` longtext NOT NULL, + `customerid` int(11) NOT NULL default '0', + PRIMARY KEY (`id`), + UNIQUE KEY `groupname` (`groupname`), + KEY `customerid` (`customerid`) +) TYPE=MyISAM ; + +# +# Dumping data for table `ftp_groups` +# + + +# -------------------------------------------------------- + +# +# Table structure for table `ftp_users` +# + +DROP TABLE IF EXISTS `ftp_users`; +CREATE TABLE `ftp_users` ( + `id` int(20) NOT NULL auto_increment, + `username` varchar(255) NOT NULL default '', + `uid` int(5) NOT NULL default '0', + `gid` int(5) NOT NULL default '0', + `password` varchar(20) NOT NULL default '', + `homedir` varchar(255) NOT NULL default '', + `shell` varchar(255) NOT NULL default '/bin/false', + `login_enabled` enum('N','Y') NOT NULL default 'N', + `login_count` int(15) NOT NULL default '0', + `last_login` datetime NOT NULL default '0000-00-00 00:00:00', + `up_count` int(15) NOT NULL default '0', + `up_bytes` bigint(30) NOT NULL default '0', + `down_count` int(15) NOT NULL default '0', + `down_bytes` bigint(30) NOT NULL default '0', + `customerid` int(11) NOT NULL default '0', + PRIMARY KEY (`id`), + UNIQUE KEY `username` (`username`), + KEY `customerid` (`customerid`) +) TYPE=MyISAM ; + +# +# Dumping data for table `ftp_users` +# + +# -------------------------------------------------------- + + +# +# Table structure for table `mail_users` +# + +DROP TABLE IF EXISTS `mail_users`; +CREATE TABLE `mail_users` ( + `id` int(11) NOT NULL auto_increment, + `email` varchar(255) NOT NULL default '', + `username` varchar(255) NOT NULL default '', + `password` varchar(128) NOT NULL default '', + `password_enc` varchar(128) NOT NULL default '', + `uid` int(11) NOT NULL default '0', + `gid` int(11) NOT NULL default '0', + `homedir` varchar(255) NOT NULL default '', + `maildir` varchar(255) NOT NULL default '', + `postfix` enum('Y','N') NOT NULL default 'Y', + `domainid` int(11) NOT NULL default '0', + `customerid` int(11) NOT NULL default '0', + `quota` bigint(13) NOT NULL default '0', + `pop3` tinyint(1) NOT NULL default '1', + `imap` tinyint(1) NOT NULL default '1', + PRIMARY KEY (`id`), + UNIQUE KEY `email` (`email`) +) TYPE=MyISAM ; + +# +# Dumping data for table `mail_users` +# + + +# -------------------------------------------------------- + +# +# Table structure for table `mail_virtual` +# + +DROP TABLE IF EXISTS `mail_virtual`; +CREATE TABLE `mail_virtual` ( + `id` int(11) NOT NULL auto_increment, + `email` varchar(255) NOT NULL default '', + `email_full` varchar(255) NOT NULL default '', + `destination` text NOT NULL, + `domainid` int(11) NOT NULL default '0', + `customerid` int(11) NOT NULL default '0', + `popaccountid` int(11) NOT NULL default '0', + `iscatchall` tinyint(1) unsigned NOT NULL default '0', + PRIMARY KEY (`id`), + KEY `email` (`email`) +) TYPE=MyISAM ; + +# +# Dumping data for table `mail_virtual` +# + +# -------------------------------------------------------- + + +# +# Table structure for table `panel_admins` +# + +DROP TABLE IF EXISTS `panel_admins`; +CREATE TABLE `panel_admins` ( + `adminid` int(11) unsigned NOT NULL auto_increment, + `loginname` varchar(50) NOT NULL default '', + `password` varchar(50) NOT NULL default '', + `name` varchar(255) NOT NULL default '', + `email` varchar(255) NOT NULL default '', + `def_language` varchar(255) NOT NULL default '', + `ip` tinyint(4) NOT NULL default '-1', + `customers` int(15) NOT NULL default '0', + `customers_used` int(15) NOT NULL default '0', + `customers_see_all` tinyint(1) NOT NULL default '0', + `domains` int(15) NOT NULL default '0', + `domains_used` int(15) NOT NULL default '0', + `domains_see_all` tinyint(1) NOT NULL default '0', + `caneditphpsettings` tinyint(1) NOT NULL default '0', + `change_serversettings` tinyint(1) NOT NULL default '0', + `edit_billingdata` tinyint(1) NOT NULL DEFAULT '0', + `diskspace` int(15) NOT NULL default '0', + `diskspace_used` int(15) NOT NULL default '0', + `mysqls` int(15) NOT NULL default '0', + `mysqls_used` int(15) NOT NULL default '0', + `emails` int(15) NOT NULL default '0', + `emails_used` int(15) NOT NULL default '0', + `email_accounts` int(15) NOT NULL default '0', + `email_accounts_used` int(15) NOT NULL default '0', + `email_forwarders` int(15) NOT NULL default '0', + `email_forwarders_used` int(15) NOT NULL default '0', + `email_quota` bigint(13) NOT NULL default '0', + `email_quota_used` bigint(13) NOT NULL default '0', + `ftps` int(15) NOT NULL default '0', + `ftps_used` int(15) NOT NULL default '0', + `tickets` int(15) NOT NULL default '-1', + `tickets_used` int(15) NOT NULL default '0', + `subdomains` int(15) NOT NULL default '0', + `subdomains_used` int(15) NOT NULL default '0', + `traffic` int(15) NOT NULL default '0', + `traffic_used` int(15) NOT NULL default '0', + `deactivated` tinyint(1) NOT NULL default '0', + `lastlogin_succ` int(11) unsigned NOT NULL default '0', + `lastlogin_fail` int(11) unsigned NOT NULL default '0', + `loginfail_count` int(11) unsigned NOT NULL default '0', + `reportsent` tinyint(4) unsigned NOT NULL default '0', + `can_manage_aps_packages` tinyint(1) NOT NULL default '1', + `aps_packages` int(5) NOT NULL default '0', + `aps_packages_used` int(5) NOT NULL default '0', + PRIMARY KEY (`adminid`), + UNIQUE KEY `loginname` (`loginname`) +) TYPE=MyISAM ; + + +# -------------------------------------------------------- + +# +# Table structure for table `panel_customers` +# + +DROP TABLE IF EXISTS `panel_customers`; +CREATE TABLE `panel_customers` ( + `customerid` int(11) unsigned NOT NULL auto_increment, + `loginname` varchar(50) NOT NULL default '', + `password` varchar(50) NOT NULL default '', + `adminid` int(11) unsigned NOT NULL default '0', + `name` varchar(255) NOT NULL default '', + `firstname` varchar(255) NOT NULL default '', + `company` varchar(255) NOT NULL default '', + `street` varchar(255) NOT NULL default '', + `zipcode` varchar(255) NOT NULL default '', + `city` varchar(255) NOT NULL default '', + `phone` varchar(255) NOT NULL default '', + `fax` varchar(255) NOT NULL default '', + `email` varchar(255) NOT NULL default '', + `customernumber` varchar(255) NOT NULL default '', + `def_language` varchar(255) NOT NULL default '', + `diskspace` bigint(30) NOT NULL default '0', + `diskspace_used` bigint(30) NOT NULL default '0', + `mysqls` int(15) NOT NULL default '0', + `mysqls_used` int(15) NOT NULL default '0', + `emails` int(15) NOT NULL default '0', + `emails_used` int(15) NOT NULL default '0', + `email_accounts` int(15) NOT NULL default '0', + `email_accounts_used` int(15) NOT NULL default '0', + `email_forwarders` int(15) NOT NULL default '0', + `email_forwarders_used` int(15) NOT NULL default '0', + `email_quota` bigint(13) NOT NULL default '0', + `email_quota_used` bigint(13) NOT NULL default '0', + `ftps` int(15) NOT NULL default '0', + `ftps_used` int(15) NOT NULL default '0', + `tickets` int(15) NOT NULL default '0', + `tickets_used` int(15) NOT NULL default '0', + `subdomains` int(15) NOT NULL default '0', + `subdomains_used` int(15) NOT NULL default '0', + `traffic` bigint(30) NOT NULL default '0', + `traffic_used` bigint(30) NOT NULL default '0', + `documentroot` varchar(255) NOT NULL default '', + `standardsubdomain` int(11) NOT NULL default '0', + `guid` int(5) NOT NULL default '0', + `ftp_lastaccountnumber` int(11) NOT NULL default '0', + `mysql_lastaccountnumber` int(11) NOT NULL default '0', + `deactivated` tinyint(1) NOT NULL default '0', + `phpenabled` tinyint(1) NOT NULL default '1', + `lastlogin_succ` int(11) unsigned NOT NULL default '0', + `lastlogin_fail` int(11) unsigned NOT NULL default '0', + `loginfail_count` int(11) unsigned NOT NULL default '0', + `reportsent` tinyint(4) unsigned NOT NULL default '0', + `pop3` tinyint(1) NOT NULL default '1', + `imap` tinyint(1) NOT NULL default '1', + `aps_packages` int(5) NOT NULL default '0', + `aps_packages_used` int(5) NOT NULL default '0', + PRIMARY KEY (`customerid`), + UNIQUE KEY `loginname` (`loginname`) +) TYPE=MyISAM ; +# +# Dumping data for table `panel_customers` +# + + +# -------------------------------------------------------- + +# +# Table structure for table `panel_databases` +# + +DROP TABLE IF EXISTS `panel_databases`; +CREATE TABLE `panel_databases` ( + `id` int(11) unsigned NOT NULL auto_increment, + `customerid` int(11) NOT NULL default '0', + `databasename` varchar(255) NOT NULL default '', + `description` varchar(255) NOT NULL default '', + `dbserver` int(11) unsigned NOT NULL default '0', + PRIMARY KEY (`id`), + KEY `customerid` (`customerid`) +) TYPE=MyISAM ; + +# +# Dumping data for table `panel_databases` +# + + +# -------------------------------------------------------- + +# +# Table structure for table `panel_domains` +# +DROP TABLE IF EXISTS `panel_domains`; +CREATE TABLE `panel_domains` ( + `id` int(11) unsigned NOT NULL auto_increment, + `domain` varchar(255) NOT NULL default '', + `adminid` int(11) unsigned NOT NULL default '0', + `customerid` int(11) unsigned NOT NULL default '0', + `aliasdomain` int(11) unsigned NULL, + `documentroot` varchar(255) NOT NULL default '', + `ipandport` int(11) unsigned NOT NULL default '1', + `isbinddomain` tinyint(1) NOT NULL default '0', + `isemaildomain` tinyint(1) NOT NULL default '0', + `email_only` tinyint(1) NOT NULL default '0', + `iswildcarddomain` tinyint(1) NOT NULL default '0', + `subcanemaildomain` tinyint(1) NOT NULL default '0', + `caneditdomain` tinyint(1) NOT NULL default '1', + `zonefile` varchar(255) NOT NULL default '', + `dkim` tinyint(1) NOT NULL default '0', + `dkim_id` int(11) unsigned NOT NULL, + `dkim_privkey` text NOT NULL, + `dkim_pubkey` text NOT NULL, + `wwwserveralias` tinyint(1) NOT NULL default '1', + `parentdomainid` int(11) unsigned NOT NULL default '0', + `openbasedir` tinyint(1) NOT NULL default '0', + `openbasedir_path` tinyint(1) NOT NULL default '0', + `safemode` tinyint(1) NOT NULL default '0', + `speciallogfile` tinyint(1) NOT NULL default '0', + `ssl` tinyint(4) NOT NULL default '0', + `ssl_redirect` tinyint(4) NOT NULL default '0', + `ssl_ipandport` tinyint(4) NOT NULL default '0', + `specialsettings` text NOT NULL, + `deactivated` tinyint(1) NOT NULL default '0', + `bindserial` varchar(10) NOT NULL default '2000010100', + `add_date` int( 11 ) NOT NULL default '0', + `registration_date` date NOT NULL, + `phpsettingid` INT( 11 ) UNSIGNED NOT NULL DEFAULT '1', + `mod_fcgid_starter` int(4) default '-1', + `mod_fcgid_maxrequests` int(4) default '-1', + PRIMARY KEY (`id`), + KEY `customerid` (`customerid`), + KEY `parentdomain` (`parentdomainid`), + KEY `domain` (`domain`) +) TYPE=MyISAM ; + +# +# Dumping data for table `panel_domains` +# + + +# -------------------------------------------------------- + +# +# Table structure for table `panel_ipsandports` +# +DROP TABLE IF EXISTS `panel_ipsandports`; +CREATE TABLE `panel_ipsandports` ( + `id` int(11) unsigned NOT NULL auto_increment, + `ip` varchar(39) NOT NULL default '', + `port` int(5) NOT NULL default '80', + `listen_statement` tinyint(1) NOT NULL default '0', + `namevirtualhost_statement` tinyint(1) NOT NULL default '0', + `vhostcontainer` tinyint(1) NOT NULL default '0', + `vhostcontainer_servername_statement` tinyint(1) NOT NULL default '0', + `specialsettings` text NOT NULL, + `ssl` tinyint(4) NOT NULL default '0', + `ssl_cert_file` varchar(255) NOT NULL, + `ssl_key_file` varchar(255) NOT NULL, + `ssl_ca_file` varchar(255) NOT NULL, + `default_vhostconf_domain` text NOT NULL, + PRIMARY KEY (`id`) +) TYPE=MyISAM ; + +# +# Dumping data for table `panel_ipsandports` +# + + + +# -------------------------------------------------------- + +# +# Table structure for table `panel_htaccess` +# + +DROP TABLE IF EXISTS `panel_htaccess`; +CREATE TABLE `panel_htaccess` ( + `id` int(11) unsigned NOT NULL auto_increment, + `customerid` int(11) unsigned NOT NULL default '0', + `path` varchar(255) NOT NULL default '', + `options_indexes` tinyint(1) NOT NULL default '0', + `error404path` varchar(255) NOT NULL default '', + `error403path` varchar(255) NOT NULL default '', + `error500path` varchar(255) NOT NULL default '', + `error401path` varchar(255) NOT NULL default '', + PRIMARY KEY (`id`) +) TYPE=MyISAM ; + +# +# Dumping data for table `panel_htaccess` +# + + +# -------------------------------------------------------- + +# +# Table structure for table `panel_htpasswds` +# + +DROP TABLE IF EXISTS `panel_htpasswds`; +CREATE TABLE `panel_htpasswds` ( + `id` int(11) unsigned NOT NULL auto_increment, + `customerid` int(11) unsigned NOT NULL default '0', + `path` varchar(255) NOT NULL default '', + `username` varchar(255) NOT NULL default '', + `password` varchar(255) NOT NULL default '', + PRIMARY KEY (`id`), + KEY `customerid` (`customerid`) +) TYPE=MyISAM ; + +# +# Dumping data for table `panel_htpasswds` +# + + +# -------------------------------------------------------- + +# +# Table structure for table `panel_sessions` +# + +DROP TABLE IF EXISTS `panel_sessions`; +CREATE TABLE `panel_sessions` ( + `hash` varchar(32) NOT NULL default '', + `userid` int(11) unsigned NOT NULL default '0', + `ipaddress` varchar(255) NOT NULL default '', + `useragent` varchar(255) NOT NULL default '', + `lastactivity` int(11) unsigned NOT NULL default '0', + `lastpaging` varchar(255) NOT NULL default '', + `formtoken` char(32) NOT NULL default '', + `language` varchar(64) NOT NULL default '', + `adminsession` tinyint(1) unsigned NOT NULL default '0', + PRIMARY KEY (`hash`), + KEY `userid` (`userid`) +) TYPE=HEAP; + +# +# Dumping data for table `panel_sessions` +# + + +# -------------------------------------------------------- + +# +# Table structure for table `panel_settings` +# + +DROP TABLE IF EXISTS `panel_settings`; +CREATE TABLE `panel_settings` ( + `settingid` int(11) unsigned NOT NULL auto_increment, + `settinggroup` varchar(255) NOT NULL default '', + `varname` varchar(255) NOT NULL default '', + `value` text NOT NULL, + PRIMARY KEY (`settingid`) +) TYPE=MyISAM ; + + +# -------------------------------------------------------- + +# +# Dumping data for table `panel_settings` +# + +INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (1, 'session', 'sessiontimeout', '600'); +INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (2, 'panel', 'adminmail', 'admin@SERVERNAME'); +INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (3, 'panel', 'phpmyadmin_url', ''); +INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (5, 'customer', 'accountprefix', 'web'); +INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (6, 'customer', 'ftpprefix', 'ftp'); +INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (7, 'customer', 'mysqlprefix', 'sql'); +INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (8, 'system', 'lastaccountnumber', '0'); +INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (9, 'system', 'lastguid', '9999'); +INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (10, 'system', 'documentroot_prefix', '/var/customers/webs/'); +INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (11, 'system', 'logfiles_directory', '/var/customers/logs/'); +INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (12, 'system', 'ipaddress', 'SERVERIP'); +INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (14, 'system', 'apachereload_command', '/etc/init.d/apache reload'); +INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (15, 'system', 'last_traffic_run', '000000'); +INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (16, 'system', 'vmail_uid', '2000'); +INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (17, 'system', 'vmail_gid', '2000'); +INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (18, 'system', 'vmail_homedir', '/var/customers/mail/'); +INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (19, 'system', 'bindconf_directory', '/etc/bind/'); +INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (20, 'system', 'bindreload_command', '/etc/init.d/bind9 reload'); +INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (22, 'system', 'dbversion', '1'); +INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (23, 'system', 'hostname', 'SERVERNAME'); +INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (24, 'login', 'maxloginattempts', '3'); +INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (25, 'login', 'deactivatetime', '900'); +INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (26, 'panel', 'webmail_url', ''); +INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (27, 'panel', 'webftp_url', ''); +INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (28, 'panel', 'standardlanguage', 'English'); +INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (29, 'system', 'mysql_access_host', 'localhost'); +INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (30, 'panel', 'pathedit', 'Manual'); +INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (32, 'system', 'lastcronrun', ''); +INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (33, 'panel', 'paging', '20'); +INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (34, 'system', 'defaultip', '1'); +INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (35, 'system', 'phpappendopenbasedir', '/tmp/'); +INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (36, 'panel', 'natsorting', '1'); +INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (37, 'system', 'deactivateddocroot', ''); +INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (38, 'system', 'mailpwcleartext', '1'); +INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (39, 'system', 'last_tasks_run', '000000'); +INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (40, 'customer', 'ftpatdomain', '0'); +INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (41, 'system', 'nameservers', ''); +INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (42, 'system', 'mxservers', ''); +INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (43, 'system', 'mod_log_sql', '0'); +INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (44, 'system', 'mod_fcgid', '0'); +INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (45, 'panel', 'sendalternativemail', '0'); +INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (46, 'system', 'apacheconf_vhost', '/etc/apache/vhosts.conf'); +INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (47, 'system', 'apacheconf_diroptions', '/etc/apache/diroptions.conf'); +INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (48, 'system', 'apacheconf_htpasswddir', '/etc/apache/htpasswd/'); +INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (49, 'system', 'webalizer_quiet', '2'); +INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (50, 'ticket', 'noreply_email', 'NO-REPLY@SERVERNAME'); +INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (51, 'ticket', 'worktime_all', '1'); +INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (52, 'ticket', 'worktime_begin', '00:00'); +INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (53, 'ticket', 'worktime_end', '23:59'); +INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (54, 'ticket', 'worktime_sat', '0'); +INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (55, 'ticket', 'worktime_sun', '0'); +INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (56, 'ticket', 'archiving_days', '5'); +INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (57, 'system', 'last_archive_run', '000000'); +INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (58, 'ticket', 'enabled', '1'); +INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (59, 'ticket', 'concurrently_open', '5'); +INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (60, 'ticket', 'noreply_name', 'SysCP Support'); +INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (61, 'system', 'mod_fcgid_configdir', '/var/www/php-fcgi-scripts'); +INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (62, 'system', 'mod_fcgid_tmpdir', '/var/customers/tmp'); +INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (63, 'ticket', 'reset_cycle', '2'); +INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (64, 'panel', 'no_robots', '1'); +INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (65, 'logger', 'enabled', '1'); +INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (66, 'logger', 'log_cron', '0'); +INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (67, 'logger', 'logfile', ''); +INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (68, 'logger', 'logtypes', 'syslog,mysql'); +INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (69, 'logger', 'severity', '1'); +INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (70, 'system','ssl_cert_file','/etc/apache2/apache2.pem'); +INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (71, 'system','use_ssl','1'); +INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (72, 'system','openssl_cnf','[ req ]\r\ndefault_bits = 1024\r\ndistinguished_name = req_distinguished_name\r\nattributes = req_attributes\r\nprompt = no\r\noutput_password =\r\ninput_password =\r\n[ req_distinguished_name ]\r\nC = DE\r\nST = syscp\r\nL = syscp \r\nO = Testcertificate\r\nOU = syscp \r\nCN = @@domain_name@@\r\nemailAddress = @@email@@ \r\n[ req_attributes ]\r\nchallengePassword =\r\n'); +INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (73, 'system', 'default_vhostconf', ''); +INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (74, 'system', 'mail_quota_enabled', '0'); +INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (75, 'system', 'mail_quota', '100'); +INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (76, 'panel', 'decimal_places', '4'); +INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (77, 'dkim', 'use_dkim', '0'); +INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (78, 'system', 'webalizer_enabled', '1'); +INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (79, 'system', 'awstats_enabled', '0'); +INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (80, 'system', 'awstats_domain_file', '/etc/awstats/'); +INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (81, 'system', 'awstats_model_file', '/etc/awstats/awstats.model.conf.syscp'); +INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (82, 'dkim', 'dkim_prefix', '/etc/postfix/dkim/'); +INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (83, 'dkim', 'dkim_domains', 'domains'); +INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (84, 'dkim', 'dkim_dkimkeys', 'dkim-keys.conf'); +INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (85, 'dkim', 'dkimrestart_command', '/etc/init.d/dkim-filter restart'); +INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (86, 'panel', 'unix_names', '1'); +INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (87, 'panel', 'allow_preset', '1'); +INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (88, 'system', 'awstats_path', '/usr/share/awstats/VERSION/webroot/cgi-bin/'); +INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (89, 'system', 'awstats_updateall_command', '/usr/bin/awstats_updateall.pl'); +INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (90, 'panel', 'allow_preset_admin', '0'); +INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (91, 'system', 'httpuser', 'www-data'); +INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (92, 'system', 'httpgroup', 'www-data'); +INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (93, 'system', 'webserver', 'apache2'); +INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (94, 'autoresponder', 'autoresponder_active', '0'); +INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (95, 'autoresponder', 'last_autoresponder_run', '0'); +INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (96, 'admin', 'show_version_login', '0'); +INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (97, 'admin', 'show_version_footer', '0'); +INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (98, 'admin', 'syscp_graphic', 'images/header.gif'); +INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (99, 'system', 'mod_fcgid_wrapper', '0'); +INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (100, 'system', 'mod_fcgid_starter', '0'); +INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (101, 'system', 'mod_fcgid_peardir', '/usr/share/php/:/usr/share/php5/'); +INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (102, 'system', 'index_file_extension', 'html'); +INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (103, 'aps', 'items_per_page', '20'); +INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (104, 'aps', 'upload_fields', '5'); +INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (105, 'aps', 'aps_active', '0'); +INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (1069, 'aps', 'php-extension', ''); +INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (107, 'aps', 'php-configuration', ''); +INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (108, 'aps', 'webserver-htaccess', ''); +INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (109, 'aps', 'php-function', ''); +INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (110, 'aps', 'webserver-module', ''); +INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (111, 'system', 'realtime_port', '0'); +INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (112, 'session', 'allow_multiple_login', '0'); +INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (113, 'panel', 'allow_domain_change_admin', '0'); +INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (114, 'panel', 'allow_domain_change_customer', '0'); +INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (115, 'system', 'mod_fcgid_maxrequests', '250'); +INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (116, 'system','ssl_key_file','/etc/apache2/apache2.key'); +INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (117, 'system','ssl_ca_file',''); +INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (118, 'panel', 'frontend', 'froxlor'); + +# -------------------------------------------------------- + +# +# Table structure for table `panel_tasks` +# + +DROP TABLE IF EXISTS `panel_tasks`; +CREATE TABLE `panel_tasks` ( + `id` int(11) unsigned NOT NULL auto_increment, + `type` int(11) NOT NULL default '0', + `data` text NOT NULL, + PRIMARY KEY (`id`) +) TYPE=MyISAM ; + +# +# Dumping data for table `panel_tasks` +# + + +# -------------------------------------------------------- + +# +# Table structure for table `panel_templates` +# + +DROP TABLE IF EXISTS `panel_templates`; +CREATE TABLE `panel_templates` ( + `id` int(11) NOT NULL auto_increment, + `adminid` int(11) NOT NULL default '0', + `language` varchar(255) NOT NULL default '', + `templategroup` varchar(255) NOT NULL default '', + `varname` varchar(255) NOT NULL default '', + `value` longtext NOT NULL, + PRIMARY KEY (id), + KEY adminid (adminid) +) TYPE=MyISAM; + +# +# Dumping data for table `panel_templates` +# + + +# -------------------------------------------------------- + +# +# Table structure for table `panel_traffic` +# + +DROP TABLE IF EXISTS `panel_traffic`; +CREATE TABLE `panel_traffic` ( + `id` int(11) unsigned NOT NULL auto_increment, + `customerid` int(11) unsigned NOT NULL default '0', + `year` int(4) unsigned zerofill NOT NULL default '0000', + `month` int(2) unsigned zerofill NOT NULL default '00', + `day` int(2) unsigned zerofill NOT NULL default '00', + `stamp` int(11) unsigned NOT NULL default '0', + `http` bigint(30) unsigned NOT NULL default '0', + `ftp_up` bigint(30) unsigned NOT NULL default '0', + `ftp_down` bigint(30) unsigned NOT NULL default '0', + `mail` bigint(30) unsigned NOT NULL default '0', + PRIMARY KEY (`id`), + KEY `customerid` (`customerid`) +) TYPE=MyISAM ; + +# +# Dumping data for table `panel_traffic` +# + + +# -------------------------------------------------------- + +# +# Table structure for table `panel_traffic_admins` +# + +DROP TABLE IF EXISTS `panel_traffic_admins`; +CREATE TABLE `panel_traffic_admins` ( + `id` int(11) unsigned NOT NULL auto_increment, + `adminid` int(11) unsigned NOT NULL default '0', + `year` int(4) unsigned zerofill NOT NULL default '0000', + `month` int(2) unsigned zerofill NOT NULL default '00', + `day` int(2) unsigned zerofill NOT NULL default '00', + `stamp` int(11) unsigned NOT NULL default '0', + `http` bigint(30) unsigned NOT NULL default '0', + `ftp_up` bigint(30) unsigned NOT NULL default '0', + `ftp_down` bigint(30) unsigned NOT NULL default '0', + `mail` bigint(30) unsigned NOT NULL default '0', + PRIMARY KEY (`id`), + KEY `adminid` (`adminid`) +) TYPE=MyISAM ; + +# +# Dumping data for table `panel_traffic_admins` +# + + + +# -------------------------------------------------------- + +# +# Table structure for table `panel_diskspace` +# + +CREATE TABLE `panel_diskspace` ( + `id` int(11) unsigned NOT NULL auto_increment, + `customerid` int(11) unsigned NOT NULL default '0', + `year` int(4) unsigned zerofill NOT NULL default '0000', + `month` int(2) unsigned zerofill NOT NULL default '00', + `day` int(2) unsigned zerofill NOT NULL default '00', + `stamp` int(11) unsigned NOT NULL default '0', + `webspace` bigint(30) unsigned NOT NULL default '0', + `mail` bigint(30) unsigned NOT NULL default '0', + `mysql` bigint(30) unsigned NOT NULL default '0', + PRIMARY KEY (`id`), + KEY `customerid` (`customerid`) +) TYPE=MyISAM ; + +# +# Dumping data for table `panel_diskspace` +# + + +# -------------------------------------------------------- + +# +# Table structure for table `panel_diskspace_admins` +# + +CREATE TABLE `panel_diskspace_admins` ( + `id` int(11) unsigned NOT NULL auto_increment, + `adminid` int(11) unsigned NOT NULL default '0', + `year` int(4) unsigned zerofill NOT NULL default '0000', + `month` int(2) unsigned zerofill NOT NULL default '00', + `day` int(2) unsigned zerofill NOT NULL default '00', + `stamp` int(11) unsigned NOT NULL default '0', + `webspace` bigint(30) unsigned NOT NULL default '0', + `mail` bigint(30) unsigned NOT NULL default '0', + `mysql` bigint(30) unsigned NOT NULL default '0', + PRIMARY KEY (`id`), + KEY `adminid` (`adminid`) +) TYPE=MyISAM ; + +# +# Dumping data for table `panel_diskspace_admins` +# + +# -------------------------------------------------------- + +# +# Table structure for table `panel_languages` +# + +DROP TABLE IF EXISTS `panel_languages`; +CREATE TABLE `panel_languages` ( + `id` int(11) unsigned NOT NULL auto_increment, + `language` varchar(30) NOT NULL default '', + `file` varchar(255) NOT NULL default '', + PRIMARY KEY (`id`) +) TYPE=MyISAM ; + +# +# Dumping data for table `panel_languages` +# + +INSERT INTO `panel_languages` VALUES (1, 'Deutsch', 'lng/german.lng.php'); +INSERT INTO `panel_languages` VALUES (2, 'English', 'lng/english.lng.php'); +INSERT INTO `panel_languages` VALUES (3, 'Français', 'lng/french.lng.php'); +INSERT INTO `panel_languages` VALUES (4, 'Chinese', 'lng/zh-cn.lng.php'); +INSERT INTO `panel_languages` VALUES (5, 'Catalan', 'lng/catalan.lng.php'); +INSERT INTO `panel_languages` VALUES (6, 'Español', 'lng/spanish.lng.php'); +INSERT INTO `panel_languages` VALUES (7, 'Português', 'lng/portugues.lng.php'); +INSERT INTO `panel_languages` VALUES (8, 'Russian', 'lng/russian.lng.php'); +INSERT INTO `panel_languages` VALUES (9, 'Danish', 'lng/danish.lng.php'); +INSERT INTO `panel_languages` VALUES (10, 'Italian', 'lng/italian.lng.php'); +INSERT INTO `panel_languages` VALUES (11, 'Bulgarian', 'lng/bulgarian.lng.php'); +INSERT INTO `panel_languages` VALUES (12, 'Slovak', 'lng/slovak.lng.php'); +INSERT INTO `panel_languages` VALUES (13, 'Dutch', 'lng/dutch.lng.php'); +INSERT INTO `panel_languages` VALUES (14, 'Hungarian', 'lng/hungarian.lng.php'); +INSERT INTO `panel_languages` VALUES (15, 'Swedish', 'lng/swedish.lng.php'); +INSERT INTO `panel_languages` VALUES (16, 'Czech', 'lng/czech.lng.php'); + +# -------------------------------------------------------- + +# +# Table structure for table `panel_tickets` +# + +DROP TABLE IF EXISTS `panel_tickets`; +CREATE TABLE `panel_tickets` ( + `id` int(11) unsigned NOT NULL auto_increment, + `customerid` int(11) NOT NULL, + `adminid` int(11) NOT NULL, + `category` smallint(5) unsigned NOT NULL default '1', + `priority` enum('1','2','3') NOT NULL default '3', + `subject` varchar(70) NOT NULL, + `message` text NOT NULL, + `dt` int(15) NOT NULL, + `lastchange` int(15) NOT NULL, + `ip` varchar(20) NOT NULL, + `status` enum('0','1','2','3') NOT NULL default '1', + `lastreplier` enum('0','1') NOT NULL default '0', + `answerto` int(11) unsigned NOT NULL, + `by` enum('0','1') NOT NULL default '0', + `archived` enum('0','1') NOT NULL default '0', + PRIMARY KEY (`id`), + KEY `customerid` (`customerid`) +) ENGINE=MyISAM; + + +# -------------------------------------------------------- + +# +# Table structure for table `panel_ticket_categories` +# + +DROP TABLE IF EXISTS `panel_ticket_categories`; +CREATE TABLE `panel_ticket_categories` ( + `id` smallint(5) unsigned NOT NULL auto_increment, + `name` varchar(60) NOT NULL, + `adminid` int(11) NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM; + +# +# Dumping data for table `panel_ticket_categories` +# + + +# -------------------------------------------------------- + +# +# Table structure for table `panel_syslog` +# + +DROP TABLE IF EXISTS `panel_syslog`; +CREATE TABLE IF NOT EXISTS `panel_syslog` ( + `logid` bigint(20) NOT NULL auto_increment, + `action` int(5) NOT NULL default '10', + `type` int(5) NOT NULL default '0', + `date` int(15) NOT NULL, + `user` varchar(50) NOT NULL, + `text` text NOT NULL, + PRIMARY KEY (`logid`) +) ENGINE=MyISAM; + +# +# Dumping data for table `panel_syslog` +# + + +# -------------------------------------------------------- + +# +# Table structure for table `mail_autoresponder` +# + +CREATE TABLE `mail_autoresponder` ( + `email` varchar(255) NOT NULL default '', + `message` text NOT NULL, + `enabled` tinyint(1) NOT NULL default '0', + `subject` varchar(255) NOT NULL default '', + `customerid` int(11) NOT NULL default '0', + PRIMARY KEY (`email`), + KEY `customerid` (`customerid`), + FULLTEXT KEY `message` (`message`) +) ENGINE=MyISAM; + +# +# Dumping data for table `mail_autoresponder` +# + + +# -------------------------------------------------------- + +# +# Table structure for table `panel_phpconfigs` +# + +CREATE TABLE `panel_phpconfigs` ( + `id` int(11) unsigned NOT NULL auto_increment, + `description` varchar(50) NOT NULL, + `binary` varchar(255) NOT NULL, + `file_extensions` varchar(255) NOT NULL, + `mod_fcgid_starter` int(4) NOT NULL DEFAULT '-1', + `mod_fcgid_maxrequests` int(4) NOT NULL DEFAULT '-1', + `phpsettings` text NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM; + +# +# Dumping data for table `panel_phpconfigs` +# + +INSERT INTO `panel_phpconfigs` (`id`, `description`, `binary`, `file_extensions`, `mod_fcgid_starter`, `mod_fcgid_maxrequests`, `phpsettings`) VALUES(1, 'Default Config', '/usr/bin/php-cgi', 'php', '-1', '-1', 'short_open_tag = On\r\nasp_tags = Off\r\nprecision = 14\r\noutput_buffering = 4096\r\nallow_call_time_pass_reference = Off\r\nsafe_mode = {SAFE_MODE}\r\nsafe_mode_gid = Off\r\nsafe_mode_include_dir = "{PEAR_DIR}"\r\nsafe_mode_allowed_env_vars = PHP_\r\nsafe_mode_protected_env_vars = LD_LIBRARY_PATH\r\nopen_basedir = "{OPEN_BASEDIR}"\r\ndisable_functions = exec,passthru,shell_exec,system,proc_close,proc_get_status,proc_nice,proc_open,proc_terminate\r\ndisable_classes =\r\nexpose_php = Off\r\nmax_execution_time = 30\r\nmax_input_time = 60\r\nmemory_limit = 16M\r\npost_max_size = 16M\r\nerror_reporting = E_ALL & ~E_NOTICE\r\ndisplay_errors = On\r\ndisplay_startup_errors = Off\r\nlog_errors = On\r\nlog_errors_max_len = 1024\r\nignore_repeated_errors = Off\r\nignore_repeated_source = Off\r\nreport_memleaks = On\r\ntrack_errors = Off\r\nhtml_errors = Off\r\nvariables_order = "GPCS"\r\nregister_globals = Off\r\nregister_argc_argv = Off\r\ngpc_order = "GPC"\r\nmagic_quotes_gpc = Off\r\nmagic_quotes_runtime = Off\r\nmagic_quotes_sybase = Off\r\ninclude_path = ".:{PEAR_DIR}"\r\nenable_dl = Off\r\nfile_uploads = On\r\nupload_tmp_dir = "{TMP_DIR}"\r\nupload_max_filesize = 32M\r\nallow_url_fopen = Off\r\nsendmail_path = "/usr/sbin/sendmail -t -f {CUSTOMER_EMAIL}"\r\nsession.save_handler = files\r\nsession.save_path = "{TMP_DIR}"\r\nsession.use_cookies = 1\r\nsession.name = PHPSESSID\r\nsession.auto_start = 0\r\nsession.cookie_lifetime = 0\r\nsession.cookie_path = /\r\nsession.cookie_domain =\r\nsession.serialize_handler = php\r\nsession.gc_probability = 1\r\nsession.gc_divisor = 1000\r\nsession.gc_maxlifetime = 1440\r\nsession.bug_compat_42 = 0\r\nsession.bug_compat_warn = 1\r\nsession.referer_check =\r\nsession.entropy_length = 16\r\nsession.entropy_file = /dev/urandom\r\nsession.cache_limiter = nocache\r\nsession.cache_expire = 180\r\nsession.use_trans_sid = 0\r\nsuhosin.simulation = Off\r\nsuhosin.mail.protect = 1\r\n'); + +# -------------------------------------------------------- + +# +# Tabellenstruktur fuer Tabelle `aps_instances` +# + +CREATE TABLE IF NOT EXISTS `aps_instances` ( + `ID` int(4) NOT NULL auto_increment, + `CustomerID` int(4) NOT NULL, + `PackageID` int(4) NOT NULL, + `Status` int(4) NOT NULL, + PRIMARY KEY (`ID`) +) ENGINE=MyISAM; + +# -------------------------------------------------------- + +# +# Tabellenstruktur fuer Tabelle `aps_packages` +# + +CREATE TABLE IF NOT EXISTS `aps_packages` ( + `ID` int(4) NOT NULL auto_increment, + `Path` varchar(500) NOT NULL, + `Name` varchar(500) NOT NULL, + `Version` varchar(20) NOT NULL, + `Release` int(4) NOT NULL, + `Status` int(1) NOT NULL default '1', + PRIMARY KEY (`ID`) +) ENGINE=MyISAM; + +# -------------------------------------------------------- + +# +# Tabellenstruktur fuer Tabelle `aps_settings` +# + +CREATE TABLE IF NOT EXISTS `aps_settings` ( + `ID` int(4) NOT NULL auto_increment, + `InstanceID` int(4) NOT NULL, + `Name` varchar(250) NOT NULL, + `Value` varchar(250) NOT NULL, + PRIMARY KEY (`ID`) +) ENGINE=MyISAM; + +# -------------------------------------------------------- + +# +# Tabellenstruktur fuer Tabelle `aps_tasks` +# + +CREATE TABLE IF NOT EXISTS `aps_tasks` ( + `ID` int(4) NOT NULL auto_increment, + `InstanceID` int(4) NOT NULL, + `Task` int(4) NOT NULL, + PRIMARY KEY (`ID`) +) ENGINE=MyISAM; + +# -------------------------------------------------------- + +# +# Tabellenstruktur fuer Tabelle `aps_temp_settings` +# + +CREATE TABLE IF NOT EXISTS `aps_temp_settings` ( + `ID` int(4) NOT NULL auto_increment, + `PackageID` int(4) NOT NULL, + `CustomerID` int(4) NOT NULL, + `Name` varchar(250) NOT NULL, + `Value` varchar(250) NOT NULL, + PRIMARY KEY (`ID`) +) ENGINE=MyISAM; diff --git a/install/updates/1.0/update_1.0.10_1.2-beta1.inc.php b/install/updates/1.0/update_1.0.10_1.2-beta1.inc.php new file mode 100644 index 0000000000..e03efdf2a3 --- /dev/null +++ b/install/updates/1.0/update_1.0.10_1.2-beta1.inc.php @@ -0,0 +1,80 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package System + * @version $Id: update_1.0.10_1.2-beta1.inc.php 2692 2009-03-27 18:04:47Z flo $ + */ + +/** + * We need those defines, because the tables.inc.php doesn't have them. + */ + +define('TABLE_POSTFIX_TRANSPORT', 'postfix_transport'); +define('TABLE_POSTFIX_USERS', 'postfix_users'); +define('TABLE_POSTFIX_VIRTUAL', 'postfix_virtual'); +define('TABLE_PROFTPD_GROUPS', 'proftpd_groups'); +define('TABLE_PROFTPD_USERS', 'proftpd_users'); + +if($settings['panel']['version'] == '1.0.10') +{ + // Drop/Rename postfix_ tables + + $db->query("DROP TABLE `" . TABLE_POSTFIX_TRANSPORT . "`"); + $db->query("ALTER TABLE `" . TABLE_POSTFIX_USERS . "` RENAME `" . TABLE_MAIL_USERS . "` "); + $db->query("ALTER TABLE `" . TABLE_POSTFIX_VIRTUAL . "` RENAME `" . TABLE_MAIL_VIRTUAL . "` "); + + // Rename proftpd_ tables + + $db->query("ALTER TABLE `" . TABLE_PROFTPD_USERS . "` RENAME `" . TABLE_FTP_USERS . "` "); + $db->query("ALTER TABLE `" . TABLE_PROFTPD_GROUPS . "` RENAME `" . TABLE_FTP_GROUPS . "` "); + + // Adding tables + + $db->query("DROP TABLE IF EXISTS `" . TABLE_PANEL_HTACCESS . "`;"); + $db->query("CREATE TABLE `" . TABLE_PANEL_HTACCESS . "` (" . " `id` int(11) unsigned NOT NULL auto_increment," . " `customerid` int(11) unsigned NOT NULL default '0'," . " `path` varchar(255) NOT NULL default ''," . " `options_indexes` tinyint(1) NOT NULL default '0'," . " PRIMARY KEY (`id`)" . ") TYPE=MyISAM ;"); + $db->query("DROP TABLE IF EXISTS `" . TABLE_PANEL_ADMINS . "`;"); + $db->query("CREATE TABLE `" . TABLE_PANEL_ADMINS . "` (" . " `adminid` int(11) unsigned NOT NULL auto_increment," . " `loginname` varchar(50) NOT NULL default ''," . " `password` varchar(50) NOT NULL default ''," . " `name` varchar(255) NOT NULL default ''," . " `email` varchar(255) NOT NULL default ''," . " `customers` int(15) NOT NULL default '0'," . " `customers_used` int(15) NOT NULL default '0'," . " `customers_see_all` tinyint(1) NOT NULL default '0'," . " `domains` int(15) NOT NULL default '0'," . " `domains_used` int(15) NOT NULL default '0'," . " `domains_see_all` tinyint(1) NOT NULL default '0'," . " `change_serversettings` tinyint(1) NOT NULL default '0'," . " `diskspace` int(15) NOT NULL default '0'," . " `diskspace_used` int(15) NOT NULL default '0'," . " `mysqls` int(15) NOT NULL default '0'," . " `mysqls_used` int(15) NOT NULL default '0'," . " `emails` int(15) NOT NULL default '0'," . " `emails_used` int(15) NOT NULL default '0'," . " `email_forwarders` int(15) NOT NULL default '0'," . " `email_forwarders_used` int(15) NOT NULL default '0'," . " `ftps` int(15) NOT NULL default '0'," . " `ftps_used` int(15) NOT NULL default '0'," . " `subdomains` int(15) NOT NULL default '0'," . " `subdomains_used` int(15) NOT NULL default '0'," . " `traffic` int(15) NOT NULL default '0'," . " `traffic_used` int(15) NOT NULL default '0'," . " `deactivated` tinyint(1) NOT NULL default '0'," . " `lastlogin_succ` int(11) unsigned NOT NULL default '0'," . " `lastlogin_fail` int(11) unsigned NOT NULL default '0'," . " `loginfail_count` int(11) unsigned NOT NULL default '0'," . " PRIMARY KEY (`adminid`)" . ") TYPE=MyISAM ;"); + + // Insert Admin user + + if(!isset($adminusername) + || $adminusername == '') + { + $adminusername = 'admin'; + $adminpassword = 'admin'; + } + + $db->query("INSERT INTO `" . TABLE_PANEL_ADMINS . "` (`loginname`, `password`, `name`, `email`, `customers`, `customers_used`, `customers_see_all`, `domains`, `domains_used`, `domains_see_all`, `change_serversettings`, `diskspace`, `diskspace_used`, `mysqls`, `mysqls_used`, `emails`, `emails_used`, `email_forwarders`, `email_forwarders_used`, `ftps`, `ftps_used`, `subdomains`, `subdomains_used`, `traffic`, `traffic_used`, `deactivated`) VALUES ('" . $db->escape($adminusername) . "', '" . md5($adminpassword) . "', 'Siteadmin', 'admin@servername', -1, 0, 1, -1, 0, 1, 1, -1024, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1048576, 0, 0);"); + + // Alter Tables + + $db->query("ALTER TABLE `" . TABLE_PANEL_CUSTOMERS . "` ADD `adminid` INT( 11 ) UNSIGNED NOT NULL ," . "ADD `lastlogin_succ` INT( 11 ) UNSIGNED NOT NULL ," . "ADD `lastlogin_fail` INT( 11 ) UNSIGNED NOT NULL ," . "ADD `loginfail_count` INT( 11 ) UNSIGNED NOT NULL ;"); + $db->query("ALTER TABLE `" . TABLE_PANEL_CUSTOMERS . "` ADD INDEX ( `adminid` ) ;"); + $db->query("UPDATE `" . TABLE_PANEL_CUSTOMERS . "` SET `adminid` = '1'"); + $db->query("ALTER TABLE `" . TABLE_PANEL_DOMAINS . "` ADD `adminid` INT( 11 ) UNSIGNED NOT NULL ," . "ADD `iswildcarddomain` TINYINT( 1 ) NOT NULL ," . "ADD `speciallogfile` TINYINT( 1 ) NOT NULL ;"); + $db->query("ALTER TABLE `" . TABLE_PANEL_DOMAINS . "` ADD INDEX ( `adminid` ) ;"); + $db->query("UPDATE `" . TABLE_PANEL_DOMAINS . "` SET `adminid` = '1'"); + $db->query("ALTER TABLE `" . TABLE_PANEL_SESSIONS . "` CHANGE `customerid` `userid` INT( 11 ) UNSIGNED DEFAULT '0' NOT NULL "); + $db->query("ALTER TABLE `" . TABLE_MAIL_USERS . "` CHANGE `password` `password_enc` VARCHAR( 128 ) NOT NULL "); + $db->query("ALTER TABLE `" . TABLE_MAIL_USERS . "` ADD `password` VARCHAR( 128 ) NOT NULL AFTER `email` ;"); + $db->query("INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (24, 'login', 'maxloginattempts', '3');"); + $db->query("INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (25, 'login', 'deactivatetime', '900');"); + $db->query("INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (26, 'panel', 'webmail_url', '');"); + $db->query("INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (27, 'panel', 'webftp_url', '');"); + $db->query("INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (28, 'panel', 'standardlanguage', 'german');"); + $db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `varname`='ipaddress' WHERE `settinggroup`='system' AND `varname`='ipadress'"); + $db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `value`='1.2.0' WHERE `settinggroup`='panel' AND `varname`='version'"); + $settings['panel']['version'] = '1.2.0'; +} + +?> \ No newline at end of file diff --git a/install/updates/1.0/update_1.0_1.0.10.inc.php b/install/updates/1.0/update_1.0_1.0.10.inc.php new file mode 100644 index 0000000000..df9d58ace9 --- /dev/null +++ b/install/updates/1.0/update_1.0_1.0.10.inc.php @@ -0,0 +1,130 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package System + * @version $Id: update_1.0_1.0.10.inc.php 2692 2009-03-27 18:04:47Z flo $ + */ + +define('TABLE_POSTFIX_TRANSPORT', 'postfix_transport'); +define('TABLE_POSTFIX_USERS', 'postfix_users'); +define('TABLE_POSTFIX_VIRTUAL', 'postfix_virtual'); +define('TABLE_PROFTPD_GROUPS', 'proftpd_groups'); +define('TABLE_PROFTPD_USERS', 'proftpd_users'); + +if(!isset($settings['panel']['version'])) +{ + $settings['panel']['version'] = '1.0.0'; +} + +if($settings['panel']['version'] == '1.0.0') +{ + $db->query("INSERT INTO `" . TABLE_PANEL_SETTINGS . "` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (22, 'panel', 'version', '1.0.1')"); + $db->query("ALTER TABLE `" . TABLE_PANEL_DOMAINS . "` ADD `openbasedir` TINYINT( 1 ) NOT NULL , ADD `safemode` TINYINT( 1 ) NOT NULL"); + $db->query("UPDATE `" . TABLE_PANEL_DOMAINS . "` SET `openbasedir`='1', `safemode`='1'"); + $settings['panel']['version'] = '1.0.1'; +} + +if($settings['panel']['version'] == '1.0.1') +{ + $db->query("ALTER TABLE `" . TABLE_POSTFIX_USERS . "` ADD `domainid` INT( 11 ) NOT NULL AFTER `postfix`"); + $db->query("ALTER TABLE `" . TABLE_POSTFIX_VIRTUAL . "` ADD `domainid` INT( 11 ) NOT NULL AFTER `destination`"); + $result = $db->query("SELECT `id`, `domain` FROM `" . TABLE_PANEL_DOMAINS . "`"); + + while($row = $db->fetch_array($result)) + { + $db->query("UPDATE `" . TABLE_POSTFIX_USERS . "` SET `domainid`='" . (int)$row['id'] . "' WHERE `email` LIKE '%@" . $db->escape($row['domain']) . "'"); + $db->query("UPDATE `" . TABLE_POSTFIX_VIRTUAL . "` SET `domainid`='" . (int)$row['id'] . "' WHERE `email` LIKE '%@" . $db->escape($row['domain']) . "'"); + } + + $db->query("ALTER TABLE `" . TABLE_PANEL_CUSTOMERS . "` ADD `createstdsubdomain` TINYINT( 1 ) NOT NULL AFTER `documentroot`"); + inserttask('1'); + inserttask('4'); + $hostname = explode('@', $settings['panel']['adminmail']); + $hostname = $hostname[1]; + $db->query("INSERT INTO `" . TABLE_PANEL_SETTINGS . "` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (23, 'system', 'hostname', '" . $db->escape($hostname) . "')"); + $db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `value`='1.0.2' WHERE `settinggroup`='panel' AND `varname`='version'"); + $settings['panel']['version'] = '1.0.2'; +} + +if($settings['panel']['version'] == '1.0.2') +{ + $db->query("ALTER TABLE `" . TABLE_PANEL_SESSIONS . "` ADD `language` VARCHAR( 64 ) NOT NULL AFTER `lastactivity` ;"); + $db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `value`='1.0.3' WHERE `settinggroup`='panel' AND `varname`='version'"); + $settings['panel']['version'] = '1.0.3'; +} + +if($settings['panel']['version'] == '1.0.3') +{ + $db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `value`='1.0.4' WHERE `settinggroup`='panel' AND `varname`='version'"); + $settings['panel']['version'] = '1.0.4'; +} + +if($settings['panel']['version'] == '1.0.4') +{ + $db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `value`='1.0.5' WHERE `settinggroup`='panel' AND `varname`='version'"); + $settings['panel']['version'] = '1.0.5'; +} + +if($settings['panel']['version'] == '1.0.5') +{ + $db->query("ALTER TABLE `" . TABLE_PANEL_CUSTOMERS . "` ADD `deactivated` TINYINT( 1 ) NOT NULL ;"); + $db->query("ALTER TABLE `" . TABLE_PANEL_DOMAINS . "` ADD `deactivated` TINYINT( 1 ) NOT NULL ;"); + $db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `value`='1.0.6' WHERE `settinggroup`='panel' AND `varname`='version'"); + $settings['panel']['version'] = '1.0.6'; +} + +if($settings['panel']['version'] == '1.0.6') +{ + $db->query("ALTER TABLE `" . TABLE_POSTFIX_VIRTUAL . "` ADD `popaccountid` INT( 11 ) NOT NULL ;"); + $result = $db->query("SELECT `id`, `email` FROM `" . TABLE_POSTFIX_USERS . "`"); + + while($row = $db->fetch_array($result)) + { + $db->query("UPDATE `" . TABLE_POSTFIX_VIRTUAL . "` SET `popaccountid`='" . (int)$row['id'] . "' WHERE `email` = '" . $db->escape(str_replace($settings['email']['catchallkeyword'], '', $row['email'])) . "' AND `destination` = '" . $db->escape($row['email']) . "'"); + } + + $result = $db->query("SELECT `id`, `email`, `destination` FROM `" . TABLE_POSTFIX_VIRTUAL . "` WHERE `popaccountid` = '0'"); + + while($row = $db->fetch_array($result)) + { + if(str_replace($settings['email']['catchallkeyword'], '', $row['email']) != $row['email']) + { + $db->query("UPDATE `" . TABLE_POSTFIX_VIRTUAL . "` SET `email` = '" . $db->escape(str_replace($settings['email']['catchallkeyword'], '', $row['email'])) . "' WHERE `id` = '" . (int)$row['id'] . "'"); + } + } + + $db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `value`='1.0.7' WHERE `settinggroup`='panel' AND `varname`='version'"); + $settings['panel']['version'] = '1.0.7'; +} + +if($settings['panel']['version'] == '1.0.7') +{ + $db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `value`='1.0.8' WHERE `settinggroup`='panel' AND `varname`='version'"); + $settings['panel']['version'] = '1.0.8'; +} + +if($settings['panel']['version'] == '1.0.8') +{ + $db->query("ALTER TABLE `" . TABLE_PANEL_DATABASES . "` DROP `password` ;"); + $db->query("ALTER TABLE `" . TABLE_PANEL_DOMAINS . "` ADD `specialsettings` TEXT NOT NULL AFTER `safemode` ;"); + $db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `value`='1.0.9' WHERE `settinggroup`='panel' AND `varname`='version'"); + $settings['panel']['version'] = '1.0.9'; +} + +if($settings['panel']['version'] == '1.0.9') +{ + $db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `value`='1.0.10' WHERE `settinggroup`='panel' AND `varname`='version'"); + $settings['panel']['version'] = '1.0.10'; +} + +?> \ No newline at end of file diff --git a/install/updates/1.2/update_1.2-beta1_1.2.19.inc.php b/install/updates/1.2/update_1.2-beta1_1.2.19.inc.php new file mode 100644 index 0000000000..b39568ae73 --- /dev/null +++ b/install/updates/1.2/update_1.2-beta1_1.2.19.inc.php @@ -0,0 +1,1187 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package System + * @version $Id: update_1.2-beta1_1.2.19.inc.php 2722 2009-05-04 18:59:28Z flo $ + */ + +if($settings['panel']['version'] == '1.2-beta1' + || $settings['panel']['version'] == '1.2-rc1') +{ + $db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `value`='1.2.0' WHERE `settinggroup`='panel' AND `varname`='version'"); + $settings['panel']['version'] = '1.2.0'; +} + +if($settings['panel']['version'] == '1.2.0') +{ + $db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `value`='1.2.1' WHERE `settinggroup`='panel' AND `varname`='version'"); + $settings['panel']['version'] = '1.2.1'; +} + +if($settings['panel']['version'] == '1.2.1') +{ + $db->query("ALTER TABLE `" . TABLE_PANEL_SESSIONS . "` CHANGE `useragent` `useragent` VARCHAR( 255 ) NOT NULL"); + $db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `value`='1.2.2' WHERE `settinggroup`='panel' AND `varname`='version'"); + $settings['panel']['version'] = '1.2.2'; +} + +if($settings['panel']['version'] == '1.2.2') +{ + $db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `value`='1.2.2-cvs1' WHERE `settinggroup`='panel' AND `varname`='version'"); + $settings['panel']['version'] = '1.2.2-cvs1'; +} + +if($settings['panel']['version'] == '1.2.2-cvs1') +{ + $db->query(" + CREATE TABLE `" . TABLE_PANEL_LANGUAGE . "` ( + `id` int(11) unsigned NOT NULL auto_increment, + `language` varchar(30) NOT NULL default '', + `file` varchar(255) NOT NULL default '', + PRIMARY KEY (`id`) + ) TYPE=MyISAM + "); + $db->query("INSERT INTO `" . TABLE_PANEL_LANGUAGE . "` (`id`, `language`, `file`) VALUES (1, 'Deutsch', 'lng/german.lng.php');"); + $db->query("INSERT INTO `" . TABLE_PANEL_LANGUAGE . "` (`id`, `language`, `file`) VALUES (2, 'English', 'lng/english.lng.php');"); + $db->query("INSERT INTO `" . TABLE_PANEL_LANGUAGE . "` (`id`, `language`, `file`) VALUES (3, 'Francais', 'lng/french.lng.php');"); + $db->query("INSERT INTO `" . TABLE_PANEL_LANGUAGE . "` (`id`, `language`, `file`) VALUES (4, 'Chinese', 'lng/zh-cn.lng.php');"); + $db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `value`='1.2.2-cvs2' WHERE `settinggroup`='panel' AND `varname`='version'"); + $settings['panel']['version'] = '1.2.2-cvs2'; +} + +if($settings['panel']['version'] == '1.2.2-cvs2') +{ + if($settings['panel']['standardlanguage'] == 'german') + { + $standardlanguage_new = 'Deutsch'; + } + elseif($settings['panel']['standardlanguage'] == 'french') + { + $standardlanguage_new = 'Francais'; + } + else + { + $standardlanguage_new = 'English'; + } + + $db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `value`='" . $db->escape($standardlanguage_new) . "' WHERE `settinggroup`='panel' AND `varname`='standardlanguage'"); + $db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `value`='1.2.2-cvs3' WHERE `settinggroup`='panel' AND `varname`='version'"); + $settings['panel']['version'] = '1.2.2-cvs3'; +} + +if($settings['panel']['version'] == '1.2.2-cvs3') +{ + $db->query(" + CREATE TABLE `" . TABLE_PANEL_CRONSCRIPT . "` ( + `id` int(11) unsigned NOT NULL auto_increment, + `file` varchar(255) NOT NULL default '', + PRIMARY KEY (`id`) + ) TYPE=MyISAM + "); + $db->query("INSERT INTO `" . TABLE_PANEL_CRONSCRIPT . "` (`id`, `file`) VALUES (1, 'cron_traffic.php');"); + $db->query("INSERT INTO `" . TABLE_PANEL_CRONSCRIPT . "` (`id`, `file`) VALUES (2, 'cron_tasks.php');"); + $settings['panel']['version'] = '1.2.2-cvs4'; + $db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `value`='1.2.2-cvs4' WHERE `settinggroup`='panel' AND `varname`='version'"); +} + +if($settings['panel']['version'] == '1.2.2-cvs4') +{ + $db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `value`='1.2.3' WHERE `settinggroup`='panel' AND `varname`='version'"); + $settings['panel']['version'] = '1.2.3'; +} + +if($settings['panel']['version'] == '1.2.3') +{ + $db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `value`='1.2.3-cvs1' WHERE `settinggroup`='panel' AND `varname`='version'"); + $settings['panel']['version'] = '1.2.3-cvs1'; +} + +if($settings['panel']['version'] == '1.2.3-cvs1') +{ + $db->query('ALTER TABLE `' . TABLE_PANEL_DATABASES . '` ADD `description` VARCHAR( 255 ) NOT NULL'); + $db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `value`='1.2.3-cvs2' WHERE `settinggroup`='panel' AND `varname`='version'"); + $settings['panel']['version'] = '1.2.3-cvs2'; +} + +if($settings['panel']['version'] == '1.2.3-cvs2') +{ + $db->query("ALTER TABLE `" . TABLE_MAIL_USERS . "` ADD `username` VARCHAR( 128 ) NOT NULL"); + $db->query("UPDATE `" . TABLE_MAIL_USERS . "` SET `username`=`email`"); + $db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `value`='1.2.3-cvs3' WHERE `settinggroup`='panel' AND `varname`='version'"); + $settings['panel']['version'] = '1.2.3-cvs3'; +} + +if($settings['panel']['version'] == '1.2.3-cvs3') +{ + $db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `value`='1.2.3-cvs4' WHERE `settinggroup`='panel' AND `varname`='version'"); + $settings['panel']['version'] = '1.2.3-cvs4'; +} + +if($settings['panel']['version'] == '1.2.3-cvs4') +{ + $db->query("ALTER TABLE `" . TABLE_PANEL_TRAFFIC . "` ADD UNIQUE `date` ( `customerid` , `year` , `month` , `day` )"); + $db->query(" + CREATE TABLE `" . TABLE_PANEL_TRAFFIC_ADMINS . "` ( + `id` int(11) unsigned NOT NULL auto_increment, + `adminid` int(11) unsigned NOT NULL default '0', + `year` int(4) unsigned zerofill NOT NULL default '0000', + `month` int(2) unsigned zerofill NOT NULL default '00', + `day` int(2) unsigned zerofill NOT NULL default '00', + `http` bigint(30) unsigned NOT NULL default '0', + `ftp_up` bigint(30) unsigned NOT NULL default '0', + `ftp_down` bigint(30) unsigned NOT NULL default '0', + `mail` bigint(30) unsigned NOT NULL default '0', + PRIMARY KEY (`id`), + KEY `adminid` (`adminid`), + UNIQUE `date` (`adminid` , `year` , `month` , `day`) + ) TYPE=MyISAM + "); + $db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `value`='1.2.3-cvs5' WHERE `settinggroup`='panel' AND `varname`='version'"); + $settings['panel']['version'] = '1.2.3-cvs5'; +} + +if($settings['panel']['version'] == '1.2.3-cvs5') +{ + $db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `value`='1.2.4' WHERE `settinggroup`='panel' AND `varname`='version'"); + $settings['panel']['version'] = '1.2.4'; +} + +if($settings['panel']['version'] == '1.2.4') +{ + $db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `value`='1.2.4-2' WHERE `settinggroup`='panel' AND `varname`='version'"); + $settings['panel']['version'] = '1.2.4-2'; +} + +if($settings['panel']['version'] == '1.2.4-2') +{ + $db->query('ALTER TABLE `' . TABLE_PANEL_HTACCESS . '` ADD `error404path` VARCHAR( 255 ) NOT NULL , + ADD `error403path` VARCHAR( 255 ) NOT NULL , + ADD `error500path` VARCHAR( 255 ) NOT NULL , + ADD `error401path` VARCHAR( 255 ) NOT NULL + '); + $db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `value`='1.2.4-2cvs1' WHERE `settinggroup`='panel' AND `varname`='version'"); + $settings['panel']['version'] = '1.2.4-2cvs1'; +} + +if($settings['panel']['version'] == '1.2.4-2cvs1') +{ + $db->query('ALTER TABLE `' . TABLE_PANEL_CUSTOMERS . '` + ADD `email_accounts` INT( 15 ) NOT NULL AFTER `emails_used` , + ADD `email_accounts_used` INT( 15 ) NOT NULL AFTER `email_accounts` + '); + $db->query('ALTER TABLE `' . TABLE_PANEL_ADMINS . '` + ADD `email_accounts` INT( 15 ) NOT NULL AFTER `emails_used` , + ADD `email_accounts_used` INT( 15 ) NOT NULL AFTER `email_accounts` + '); + $db->query('UPDATE `' . TABLE_PANEL_CUSTOMERS . '` SET `email_accounts` = `emails` '); + $db->query('UPDATE `' . TABLE_PANEL_ADMINS . '` SET `email_accounts` = `emails` '); + $db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `value`='1.2.4-2cvs2' WHERE `settinggroup`='panel' AND `varname`='version'"); + $settings['panel']['version'] = '1.2.4-2cvs2'; +} + +if($settings['panel']['version'] == '1.2.4-2cvs2') +{ + $db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `value`='1.2.5' WHERE `settinggroup`='panel' AND `varname`='version'"); + $settings['panel']['version'] = '1.2.5'; +} + +if($settings['panel']['version'] == '1.2.5') +{ + $db->query("UPDATE `" . TABLE_FTP_USERS . "` SET `password`=ENCRYPT(`password`)"); + $db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `value`='1.2.5-cvs1' WHERE `settinggroup`='panel' AND `varname`='version'"); + $settings['panel']['version'] = '1.2.5-cvs1'; +} + +if($settings['panel']['version'] == '1.2.5-cvs1') +{ + $db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `value`='1.2.5-cvs2' WHERE `settinggroup`='panel' AND `varname`='version'"); + $settings['panel']['version'] = '1.2.5-cvs2'; +} + +if($settings['panel']['version'] == '1.2.5-cvs2') +{ + $db->query('ALTER TABLE `' . TABLE_MAIL_VIRTUAL . '` + ADD `email_full` VARCHAR( 50 ) NOT NULL AFTER `email` , + ADD `iscatchall` TINYINT( 1 ) UNSIGNED NOT NULL AFTER `popaccountid` + '); + $db->query('UPDATE `' . TABLE_MAIL_VIRTUAL . '` SET `email_full` = `email`'); + $email_virtual_result = $db->query('SELECT `id`, `email` FROM `' . TABLE_MAIL_VIRTUAL . '`'); + + while($email_virtual_row = $db->fetch_array($email_virtual_result)) + { + if($email_virtual_row['email'] + { + 0 + } == '@') + { + $email_full = $settings['email']['catchallkeyword'] . $email_virtual_row['email']; + $db->query('UPDATE `' . TABLE_MAIL_VIRTUAL . '` SET `email_full` = "' . $db->escape($email_full) . '", `iscatchall` = "1" WHERE `id` = "' . (int)$email_virtual_row['id'] . '"'); + } + } + + $db->query(' DELETE FROM `' . TABLE_PANEL_SETTINGS . '` WHERE `settinggroup` = "email" AND `varname` = "catchallkeyword" '); + $db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `value`='1.2.5-cvs3' WHERE `settinggroup`='panel' AND `varname`='version'"); + $settings['panel']['version'] = '1.2.5-cvs3'; +} + +if($settings['panel']['version'] == '1.2.5-cvs3') +{ + $db->query('UPDATE `' . TABLE_PANEL_HTACCESS . '` SET `error404path` = "", `error403path` = "", `error401path` = "", `error500path` = "" '); + inserttask('1'); + $db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `value`='1.2.5-cvs4' WHERE `settinggroup`='panel' AND `varname`='version'"); + $settings['panel']['version'] = '1.2.5-cvs4'; +} + +if($settings['panel']['version'] == '1.2.5-cvs4') +{ + $db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `value`='1.2.6' WHERE `settinggroup`='panel' AND `varname`='version'"); + $settings['panel']['version'] = '1.2.6'; +} + +if($settings['panel']['version'] == '1.2.6') +{ + $result = $db->query_first('SELECT `value` FROM `' . TABLE_PANEL_SETTINGS . '` WHERE `settinggroup` = \'panel\' AND `varname` = \'standardlanguage\''); + $def_language = $result['value']; + $db->query('ALTER TABLE `' . TABLE_PANEL_ADMINS . '` ADD `def_language` VARCHAR( 255 ) NOT NULL AFTER `email`'); + $db->query('UPDATE `' . TABLE_PANEL_ADMINS . '` SET `def_language` = \'' . $db->escape($def_language) . '\''); + $db->query('ALTER TABLE `' . TABLE_PANEL_CUSTOMERS . '` ADD `def_language` VARCHAR( 255 ) NOT NULL AFTER `customernumber`'); + $db->query('UPDATE `' . TABLE_PANEL_CUSTOMERS . '` SET `def_language` = \'' . $db->escape($def_language) . '\''); + $db->query('CREATE TABLE `' . TABLE_PANEL_TEMPLATES . '` ( + `id` int(11) NOT NULL auto_increment, + `adminid` int(11) NOT NULL default \'0\', + `language` varchar(255) NOT NULL default \'\', + `templategroup` varchar(255) NOT NULL default \'\', + `varname` varchar(255) NOT NULL default \'\', + `value` longtext NOT NULL, + PRIMARY KEY (`id`), + KEY `adminid` (`adminid`) + ) TYPE=MyISAM + '); + $db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `value`='1.2.6-cvs1' WHERE `settinggroup`='panel' AND `varname`='version'"); + $settings['panel']['version'] = '1.2.6-cvs1'; +} + +if($settings['panel']['version'] == '1.2.6-cvs1') +{ + $db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `value`='1.2.6-cvs2' WHERE `settinggroup`='panel' AND `varname`='version'"); + $settings['panel']['version'] = '1.2.6-cvs2'; +} + +if($settings['panel']['version'] == '1.2.6-cvs2') +{ + if($sql['host'] == 'localhost') + { + $mysql_access_host = 'localhost'; + } + else + { + $mysql_access_host = $serverip; + } + + $db->query("INSERT INTO `" . TABLE_PANEL_SETTINGS . "` (`settinggroup`,`varname`,`value`) VALUES ('system','mysql_access_host','" . $db->escape($mysql_access_host) . "')"); + $db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `value`='1.2.6-cvs3' WHERE `settinggroup`='panel' AND `varname`='version'"); + $settings['panel']['version'] = '1.2.6-cvs3'; +} + +if($settings['panel']['version'] == '1.2.6-cvs3') +{ + $db->query("ALTER TABLE `" . TABLE_PANEL_CUSTOMERS . "` CHANGE `surname` `firstname` VARCHAR( 255 ) NOT NULL "); + $db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `value`='1.2.6-cvs4' WHERE `settinggroup`='panel' AND `varname`='version'"); + $settings['panel']['version'] = '1.2.6-cvs4'; +} + +if($settings['panel']['version'] == '1.2.6-cvs4') +{ + $db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `value`='1.2.7' WHERE `settinggroup`='panel' AND `varname`='version'"); + $settings['panel']['version'] = '1.2.7'; +} + +if($settings['panel']['version'] == '1.2.7') +{ + inserttask('1'); + $db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `value`='1.2.7-cvs1' WHERE `settinggroup`='panel' AND `varname`='version'"); + $settings['panel']['version'] = '1.2.7-cvs1'; +} + +if($settings['panel']['version'] == '1.2.7-cvs1') +{ + $db->query("ALTER TABLE `" . TABLE_PANEL_CUSTOMERS . "` CHANGE `createstdsubdomain` `standardsubdomain` INT( 11 ) NOT NULL "); + $result = $db->query('SELECT * FROM `' . TABLE_PANEL_CUSTOMERS . '` WHERE `standardsubdomain`=\'1\''); + + while($row = $db->fetch_array($result)) + { + $db->query("INSERT INTO `" . TABLE_PANEL_DOMAINS . "` " . "(`domain`, `customerid`, `adminid`, `documentroot`, `zonefile`, `isemaildomain`, `openbasedir`, `safemode`, `speciallogfile`, `specialsettings`) " . "VALUES ('" . $db->escape($row['loginname']) . '.' . $db->escape($settings['system']['hostname']) . "', '" . (int)$row['customerid'] . "', '" . (int)$row['adminid'] . "', '" . $db->escape($row['documentroot']) . "', '', '0', '1', '1', '0', '')"); + $domainid = $db->insert_id(); + $db->query('UPDATE `' . TABLE_PANEL_CUSTOMERS . '` SET `standardsubdomain`=\'' . (int)$domainid . '\' WHERE `customerid`=\'' . (int)$row['customerid'] . '\''); + } + + inserttask('1'); + $db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `value`='1.2.7-cvs2' WHERE `settinggroup`='panel' AND `varname`='version'"); + $settings['panel']['version'] = '1.2.7-cvs2'; +} + +if($settings['panel']['version'] == '1.2.7-cvs2') +{ + $db->query("ALTER TABLE `" . TABLE_PANEL_DOMAINS . "` ADD `isbinddomain` TINYINT( 1 ) NOT NULL DEFAULT '0' AFTER `documentroot`"); + $db->query("ALTER TABLE `" . TABLE_PANEL_DOMAINS . "` ADD `subcanemaildomain` TINYINT( 1 ) NOT NULL DEFAULT '0' AFTER `iswildcarddomain`"); + $db->query("ALTER TABLE `" . TABLE_PANEL_DOMAINS . "` ADD `caneditdomain` TINYINT( 1 ) NOT NULL DEFAULT '1' AFTER `subcanemaildomain`"); + $db->query('UPDATE `' . TABLE_PANEL_DOMAINS . '` SET `isbinddomain`=\'1\' WHERE `isemaildomain`=\'1\''); + $standardsubdomainids = Array(); + $result = $db->query('SELECT * FROM `' . TABLE_PANEL_CUSTOMERS . '` WHERE `standardsubdomain`<>\'0\''); + + while($row = $db->fetch_array($result)) + { + $standardsubdomainids[] = "'" . (int)$row['standardsubdomain'] . "'"; + } + + $standardsubdomainids = implode(',', $standardsubdomainids); + + if($standardsubdomainids != '') + { + $db->query('UPDATE `' . TABLE_PANEL_DOMAINS . '` SET `caneditdomain`=\'0\' WHERE `id` IN(' . $standardsubdomainids . ')'); + } + + inserttask('1'); + $db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `value`='1.2.7-cvs3' WHERE `settinggroup`='panel' AND `varname`='version'"); + $settings['panel']['version'] = '1.2.7-cvs3'; +} + +if($settings['panel']['version'] == '1.2.7-cvs3') +{ + $db->query("INSERT INTO `" . TABLE_PANEL_LANGUAGE . "` (`language`, `file`) VALUES ('Catalan', 'lng/catalan.lng.php');"); + $db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `value`='1.2.7-cvs4' WHERE `settinggroup`='panel' AND `varname`='version'"); + $settings['panel']['version'] = '1.2.7-cvs4'; +} + +if($settings['panel']['version'] == '1.2.7-cvs4') +{ + $db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `value`='1.2.8' WHERE `settinggroup`='panel' AND `varname`='version'"); + $settings['panel']['version'] = '1.2.8'; +} + +if($settings['panel']['version'] == '1.2.8' + || $settings['panel']['version'] == '1.2.8-cvs1') +{ + $db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `value`='1.2.9' WHERE `settinggroup`='panel' AND `varname`='version'"); + $settings['panel']['version'] = '1.2.9'; +} + +if($settings['panel']['version'] == '1.2.9') +{ + $db->query("UPDATE `" . TABLE_PANEL_LANGUAGE . "` SET `language`='Français' WHERE `language`='Francais'"); + $db->query("UPDATE `" . TABLE_PANEL_TEMPLATES . "` SET `language`='Français' WHERE `language`='Francais'"); + $db->query("INSERT INTO `" . TABLE_PANEL_LANGUAGE . "` (`language`, `file`) VALUES ('Español', 'lng/spanish.lng.php');"); + $db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `value`='1.2.9-cvs1' WHERE `settinggroup`='panel' AND `varname`='version'"); + $settings['panel']['version'] = '1.2.9-cvs1'; +} + +if($settings['panel']['version'] == '1.2.9-cvs1') +{ + $db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `value`='1.2.10' WHERE `settinggroup`='panel' AND `varname`='version'"); + $settings['panel']['version'] = '1.2.10'; +} + +if($settings['panel']['version'] == '1.2.10') +{ + $db->query("INSERT INTO `" . TABLE_PANEL_LANGUAGE . "` (`language`, `file`) VALUES ('Português', 'lng/portugues.lng.php');"); + $db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `value`='1.2.10-cvs1' WHERE `settinggroup`='panel' AND `varname`='version'"); + $settings['panel']['version'] = '1.2.10-cvs1'; +} + +if($settings['panel']['version'] == '1.2.10-cvs1') +{ + $db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `value`='1.2.11' WHERE `settinggroup`='panel' AND `varname`='version'"); + $settings['panel']['version'] = '1.2.11'; +} + +if($settings['panel']['version'] == '1.2.11') +{ + $db->query("ALTER TABLE `" . TABLE_PANEL_DOMAINS . "` ADD `aliasdomain` INT( 11 ) UNSIGNED NULL AFTER `customerid`"); + $db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `value`='1.2.11-cvs1' WHERE `settinggroup`='panel' AND `varname`='version'"); + $settings['panel']['version'] = '1.2.11-cvs1'; +} + +if($settings['panel']['version'] == '1.2.11-cvs1') +{ + $db->query('INSERT INTO `' . TABLE_PANEL_SETTINGS . '` SET `settingid` = \'\' , `settinggroup` = \'panel\', `varname` = \'pathedit\', `value` = \'Manual\''); + $db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `value`='1.2.11-cvs2' WHERE `settinggroup`='panel' AND `varname`='version'"); + $settings['panel']['version'] = '1.2.11-cvs2'; +} + +if($settings['panel']['version'] == '1.2.11-cvs2') +{ + $db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `value`='1.2.11-cvs3' WHERE `settinggroup`='panel' AND `varname`='version'"); + $settings['panel']['version'] = '1.2.11-cvs3'; +} + +if($settings['panel']['version'] == '1.2.11-cvs3') +{ + $db->query('ALTER TABLE `' . TABLE_MAIL_USERS . '` CHANGE `email` `email` VARCHAR( 255 ) NOT NULL , CHANGE `username` `username` VARCHAR( 255 ) NOT NULL , CHANGE `homedir` `homedir` VARCHAR( 255 ) NOT NULL , CHANGE `maildir` `maildir` VARCHAR( 255 ) NOT NULL '); + $db->query('ALTER TABLE `' . TABLE_MAIL_VIRTUAL . '` CHANGE `email` `email` VARCHAR( 255 ) NOT NULL , CHANGE `email_full` `email_full` VARCHAR( 255 ) NOT NULL '); + $db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `value`='1.2.11-cvs4' WHERE `settinggroup`='panel' AND `varname`='version'"); + $settings['panel']['version'] = '1.2.11-cvs4'; +} + +if($settings['panel']['version'] == '1.2.11-cvs4') +{ + $db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `value`='1.2.12' WHERE `settinggroup`='panel' AND `varname`='version'"); + $settings['panel']['version'] = '1.2.12'; +} + +if($settings['panel']['version'] == '1.2.12') +{ + $db->query('INSERT INTO `' . TABLE_PANEL_SETTINGS . '` SET `settinggroup` = \'system\', `varname` = \'apacheconf_filename\', `value` = \'vhosts.conf\' '); + $db->query('INSERT INTO `' . TABLE_PANEL_SETTINGS . '` SET `settinggroup` = \'system\', `varname` = \'lastcronrun\', `value` = \'\' '); + $db->query('INSERT INTO `' . TABLE_PANEL_SETTINGS . '` SET `settinggroup` = \'panel\', `varname` = \'paging\', `value` = \'20\' '); + $db->query('UPDATE `' . TABLE_PANEL_SETTINGS . '` SET `value` = \'1.2.12-svn1\' WHERE `settinggroup` = \'panel\' AND `varname` = \'version\''); + $settings['panel']['version'] = '1.2.12-svn1'; +} + +if($settings['panel']['version'] == '1.2.12-svn1') +{ + $db->query('ALTER TABLE `' . TABLE_PANEL_DOMAINS . '` ADD `ipandport` int(11) unsigned NOT NULL default \'1\' AFTER `documentroot`'); + $db->query('CREATE TABLE `' . TABLE_PANEL_IPSANDPORTS . '` ( + `id` int(11) unsigned NOT NULL auto_increment, + `ip` varchar(15) NOT NULL default \'\', + `port` int(5) NOT NULL default \'80\', + `default` int(1) NOT NULL default \'0\', + PRIMARY KEY (`id`) + ) TYPE=MyISAM'); + $db->query('INSERT INTO `' . TABLE_PANEL_IPSANDPORTS . '` (`ip`, `port`, `default`) VALUES (\'' . $settings['system']['ipaddress'] . '\', \'80\', \'1\')'); + $db->query('UPDATE `' . TABLE_PANEL_SETTINGS . '` SET `value` = \'1.2.12-svn2\' WHERE `settinggroup` = \'panel\' AND `varname` = \'version\''); + $settings['panel']['version'] = '1.2.12-svn2'; +} + +if($settings['panel']['version'] == '1.2.12-svn2') +{ + $db->query('UPDATE `' . TABLE_PANEL_SETTINGS . '` SET `value` = \'1.2.13-rc1\' WHERE `settinggroup` = \'panel\' AND `varname` = \'version\''); + $settings['panel']['version'] = '1.2.13-rc1'; +} + +if($settings['panel']['version'] == '1.2.13-rc1') +{ + $db->query('UPDATE `' . TABLE_PANEL_SETTINGS . '` SET `value` = \'1.2.13-rc2\' WHERE `settinggroup` = \'panel\' AND `varname` = \'version\''); + $settings['panel']['version'] = '1.2.13-rc2'; +} + +if($settings['panel']['version'] == '1.2.13-rc2') +{ + $db->query('UPDATE `' . TABLE_PANEL_SETTINGS . '` SET `value` = \'1.2.13-rc3\' WHERE `settinggroup` = \'panel\' AND `varname` = \'version\''); + $settings['panel']['version'] = '1.2.13-rc3'; +} + +if($settings['panel']['version'] == '1.2.13-rc3') +{ + // update lastcronrun to current date + + $query = 'UPDATE `%s` SET `value` = UNIX_TIMESTAMP() WHERE `settinggroup` = \'system\' AND `varname` = \'lastcronrun\' '; + $query = sprintf($query, TABLE_PANEL_SETTINGS); + $db->query($query); + + // set new version + + $query = 'UPDATE `%s` SET `value` = \'1.2.13-rc4\' WHERE `settinggroup` = \'panel\' AND `varname` = \'version\''; + $query = sprintf($query, TABLE_PANEL_SETTINGS); + $db->query($query); + $settings['panel']['version'] = '1.2.13-rc4'; +} + +if($settings['panel']['version'] == '1.2.13-rc4') +{ + // set new version + + $query = 'UPDATE `%s` SET `value` = \'1.2.13\' WHERE `settinggroup` = \'panel\' AND `varname` = \'version\''; + $query = sprintf($query, TABLE_PANEL_SETTINGS); + $db->query($query); + $settings['panel']['version'] = '1.2.13'; +} + +if($settings['panel']['version'] == '1.2.13') +{ + //get highest accountnumber + + $query = 'SELECT `loginname` FROM `' . TABLE_PANEL_CUSTOMERS . '` WHERE `loginname` LIKE \'' . $db->escape($settings['customer']['accountprefix']) . '%\';'; + $result = $db->query($query); + $lastaccountnumber = 0; + + while($row = $db->fetch_array($result)) + { + $tmpnumber = intval(substr($row['loginname'], strlen($settings['customer']['accountprefix']))); + + if($tmpnumber > $lastaccountnumber) + { + $lastaccountnumber = $tmpnumber; + } + } + + //update the lastaccountnumber to refer to the highest account availible + 1 + + $query = 'UPDATE `%s` SET `value` = \'' . (int)$lastaccountnumber . '\' WHERE `settinggroup` = \'system\' AND `varname` = \'lastaccountnumber\''; + $query = sprintf($query, TABLE_PANEL_SETTINGS); + $db->query($query); + $settings['system']['lastaccountnumber'] = $lastaccountnumber; + + // set new version + + $query = 'UPDATE `%s` SET `value` = \'1.2.13-svn1\' WHERE `settinggroup` = \'panel\' AND `varname` = \'version\''; + $query = sprintf($query, TABLE_PANEL_SETTINGS); + $db->query($query); + $settings['panel']['version'] = '1.2.13-svn1'; +} + +if($settings['panel']['version'] == '1.2.13-svn1') +{ + $query = 'ALTER TABLE `%s` ADD `openbasedir_path` TINYINT( 1 ) UNSIGNED NOT NULL AFTER `openbasedir` '; + $query = sprintf($query, TABLE_PANEL_DOMAINS); + $db->query($query); + + // set new version + + $query = 'UPDATE `%s` SET `value` = \'1.2.13-svn2\' WHERE `settinggroup` = \'panel\' AND `varname` = \'version\''; + $query = sprintf($query, TABLE_PANEL_SETTINGS); + $db->query($query); + $settings['panel']['version'] = '1.2.13-svn2'; +} + +if($settings['panel']['version'] == '1.2.13-svn2') +{ + // set new version + + $query = 'UPDATE `%s` SET `value` = \'1.2.13-svn3\' WHERE `settinggroup` = \'panel\' AND `varname` = \'version\''; + $query = sprintf($query, TABLE_PANEL_SETTINGS); + $db->query($query); + $settings['panel']['version'] = '1.2.13-svn3'; +} + +if($settings['panel']['version'] == '1.2.13-svn3') +{ + $result = $db->query_first('SELECT `id` FROM `' . TABLE_PANEL_IPSANDPORTS . '` WHERE `default` = \'1\' '); + $defaultip = $result['id']; + $db->query('INSERT INTO `' . TABLE_PANEL_SETTINGS . '` SET `settinggroup` = \'system\', `varname` = \'defaultip\', `value` = \'' . (int)$defaultip . '\' '); + $db->query('ALTER TABLE `' . TABLE_PANEL_IPSANDPORTS . '` DROP `default` '); + + // set new version + + $query = 'UPDATE `%s` SET `value` = \'1.2.13-svn4\' WHERE `settinggroup` = \'panel\' AND `varname` = \'version\''; + $query = sprintf($query, TABLE_PANEL_SETTINGS); + $db->query($query); + $settings['panel']['version'] = '1.2.13-svn4'; +} + +if($settings['panel']['version'] == '1.2.13-svn4') +{ + $db->query('ALTER TABLE `' . TABLE_PANEL_SESSIONS . '` ADD `lastpaging` VARCHAR( 255 ) NOT NULL AFTER `lastactivity` '); + + // set new version + + $query = 'UPDATE `%s` SET `value` = \'1.2.13-svn5\' WHERE `settinggroup` = \'panel\' AND `varname` = \'version\''; + $query = sprintf($query, TABLE_PANEL_SETTINGS); + $db->query($query); + $settings['panel']['version'] = '1.2.13-svn5'; +} + +if($settings['panel']['version'] == '1.2.13-svn5') +{ + // set new version + + $query = 'UPDATE `%s` SET `value` = \'1.2.14-rc1\' WHERE `settinggroup` = \'panel\' AND `varname` = \'version\''; + $query = sprintf($query, TABLE_PANEL_SETTINGS); + $db->query($query); + $settings['panel']['version'] = '1.2.14-rc1'; +} + +if($settings['panel']['version'] == '1.2.14-rc1') +{ + $db->query("INSERT INTO `" . TABLE_PANEL_LANGUAGE . "` (`language`, `file`) VALUES ('Russian', 'lng/russian.lng.php');"); + + // set new version + + $query = 'UPDATE `%s` SET `value` = \'1.2.14-rc1-svn1\' WHERE `settinggroup` = \'panel\' AND `varname` = \'version\''; + $query = sprintf($query, TABLE_PANEL_SETTINGS); + $db->query($query); + $settings['panel']['version'] = '1.2.14-rc1-svn1'; +} + +if($settings['panel']['version'] == '1.2.14-rc1-svn1') +{ + // set new version + + $query = 'UPDATE `%s` SET `value` = \'1.2.14-rc2\' WHERE `settinggroup` = \'panel\' AND `varname` = \'version\''; + $query = sprintf($query, TABLE_PANEL_SETTINGS); + $db->query($query); + $settings['panel']['version'] = '1.2.14-rc2'; +} + +if($settings['panel']['version'] == '1.2.14-rc2') +{ + // set new version + + $query = 'UPDATE `%s` SET `value` = \'1.2.14-rc3\' WHERE `settinggroup` = \'panel\' AND `varname` = \'version\''; + $query = sprintf($query, TABLE_PANEL_SETTINGS); + $db->query($query); + $settings['panel']['version'] = '1.2.14-rc3'; +} + +if($settings['panel']['version'] == '1.2.14-rc3') +{ + $db->query("INSERT INTO `" . TABLE_PANEL_LANGUAGE . "` (`language`, `file`) VALUES ('Danish', 'lng/danish.lng.php');"); + + // set new version + + $query = 'UPDATE `%s` SET `value` = \'1.2.14-rc3-svn1\' WHERE `settinggroup` = \'panel\' AND `varname` = \'version\''; + $query = sprintf($query, TABLE_PANEL_SETTINGS); + $db->query($query); + $settings['panel']['version'] = '1.2.14-rc3-svn1'; +} + +if($settings['panel']['version'] == '1.2.14-rc3-svn1') +{ + $db->query("ALTER TABLE `" . TABLE_PANEL_ADMINS . "` CHANGE `diskspace` `diskspace` BIGINT( 30 ) NOT NULL DEFAULT '0';"); + $db->query("ALTER TABLE `" . TABLE_PANEL_ADMINS . "` CHANGE `diskspace_used` `diskspace_used` BIGINT( 30 ) NOT NULL DEFAULT '0';"); + $db->query("ALTER TABLE `" . TABLE_PANEL_ADMINS . "` CHANGE `traffic` `traffic` BIGINT( 30 ) NOT NULL DEFAULT '0';"); + $db->query("ALTER TABLE `" . TABLE_PANEL_ADMINS . "` CHANGE `traffic_used` `traffic_used` BIGINT( 30 ) NOT NULL DEFAULT '0';"); + $db->query("ALTER TABLE `" . TABLE_PANEL_CUSTOMERS . "` CHANGE `diskspace` `diskspace` BIGINT( 30 ) NOT NULL DEFAULT '0';"); + $db->query("ALTER TABLE `" . TABLE_PANEL_CUSTOMERS . "` CHANGE `diskspace_used` `diskspace_used` BIGINT( 30 ) NOT NULL DEFAULT '0';"); + $db->query("ALTER TABLE `" . TABLE_PANEL_CUSTOMERS . "` CHANGE `traffic` `traffic` BIGINT( 30 ) NOT NULL DEFAULT '0';"); + $db->query("ALTER TABLE `" . TABLE_PANEL_CUSTOMERS . "` CHANGE `traffic_used` `traffic_used` BIGINT( 30 ) NOT NULL DEFAULT '0';"); + $query = 'SELECT * FROM `' . TABLE_PANEL_LANGUAGE . '` WHERE `language` = \'Russian\';'; + $result = $db->query($query); + + if($db->num_rows($result) == 0) + { + $db->query("INSERT INTO `" . TABLE_PANEL_LANGUAGE . "` (`language`, `file`) VALUES ('Russian', 'lng/russian.lng.php');"); + } + + // set new version + + $query = 'UPDATE `%s` SET `value` = \'1.2.14-rc3-svn2\' WHERE `settinggroup` = \'panel\' AND `varname` = \'version\''; + $query = sprintf($query, TABLE_PANEL_SETTINGS); + $db->query($query); + $settings['panel']['version'] = '1.2.14-rc3-svn2'; +} + +if($settings['panel']['version'] == '1.2.14-rc3-svn2') +{ + $db->query("INSERT INTO `" . TABLE_PANEL_LANGUAGE . "` (`language`, `file`) VALUES ('Italian', 'lng/italian.lng.php');"); + + // set new version + + $query = 'UPDATE `%s` SET `value` = \'1.2.14-rc3-svn3\' WHERE `settinggroup` = \'panel\' AND `varname` = \'version\''; + $query = sprintf($query, TABLE_PANEL_SETTINGS); + $db->query($query); + $settings['panel']['version'] = '1.2.14-rc3-svn3'; +} + +if($settings['panel']['version'] == '1.2.14-rc3-svn3') +{ + // set new version + + $query = 'UPDATE `%s` SET `value` = \'1.2.14-rc4\' WHERE `settinggroup` = \'panel\' AND `varname` = \'version\''; + $query = sprintf($query, TABLE_PANEL_SETTINGS); + $db->query($query); + $settings['panel']['version'] = '1.2.14-rc4'; +} + +if($settings['panel']['version'] == '1.2.14-rc4') +{ + // set new version + + $query = 'UPDATE `%s` SET `value` = \'1.2.14\' WHERE `settinggroup` = \'panel\' AND `varname` = \'version\''; + $query = sprintf($query, TABLE_PANEL_SETTINGS); + $db->query($query); + $settings['panel']['version'] = '1.2.14'; +} + +if($settings['panel']['version'] == '1.2.14') +{ + // insert apacheversion (guess) + + if(strtoupper(@php_sapi_name()) == "APACHE2HANDLER") + { + $apacheversion = 'apache2'; + } + else + { + $apacheversion = 'apache1'; + } + + $db->query('INSERT INTO `' . TABLE_PANEL_SETTINGS . '` SET `settinggroup` = \'system\', `varname` = \'apacheversion\', `value` = \'' . $apacheversion . '\' '); + $settings['system']['apacheversion'] = $apacheversion; + + // set new version + + $query = 'UPDATE `%s` SET `value` = \'1.2.14-svn1\' WHERE `settinggroup` = \'panel\' AND `varname` = \'version\''; + $query = sprintf($query, TABLE_PANEL_SETTINGS); + $db->query($query); + $settings['panel']['version'] = '1.2.14-svn1'; +} + +if($settings['panel']['version'] == '1.2.14-svn1') +{ + $tables = getTables($db); + + if(isset($tables[TABLE_PANEL_CUSTOMERS]) + && is_array($tables[TABLE_PANEL_CUSTOMERS]) + && isset($tables[TABLE_PANEL_CUSTOMERS]['loginname'])) + { + $db->query('ALTER TABLE `' . TABLE_PANEL_CUSTOMERS . '` DROP INDEX `loginname` '); + } + + $db->query('ALTER TABLE `' . TABLE_PANEL_ADMINS . '` ADD UNIQUE ( `loginname` )'); + $db->query('ALTER TABLE `' . TABLE_PANEL_CUSTOMERS . '` ADD UNIQUE ( `loginname` )'); + + // set new version + + $query = 'UPDATE `%s` SET `value` = \'1.2.14-svn2\' WHERE `settinggroup` = \'panel\' AND `varname` = \'version\''; + $query = sprintf($query, TABLE_PANEL_SETTINGS); + $db->query($query); + $settings['panel']['version'] = '1.2.14-svn2'; +} + +if($settings['panel']['version'] == '1.2.14-svn2') +{ + $db->query('ALTER TABLE `' . TABLE_MAIL_VIRTUAL . '` ADD INDEX ( `email` ) '); + $db->query('ALTER TABLE `' . TABLE_PANEL_DOMAINS . '` ADD INDEX ( `domain` ) '); + + // set new version + + $query = 'UPDATE `%s` SET `value` = \'1.2.14-svn3\' WHERE `settinggroup` = \'panel\' AND `varname` = \'version\''; + $query = sprintf($query, TABLE_PANEL_SETTINGS); + $db->query($query); + $settings['panel']['version'] = '1.2.14-svn3'; +} + +if($settings['panel']['version'] == '1.2.14-svn3') +{ + $db->query("INSERT INTO `" . TABLE_PANEL_LANGUAGE . "` (`language`, `file`) VALUES ('Bulgarian', 'lng/bulgarian.lng.php');"); + + // set new version + + $query = 'UPDATE `%s` SET `value` = \'1.2.14-svn4\' WHERE `settinggroup` = \'panel\' AND `varname` = \'version\''; + $query = sprintf($query, TABLE_PANEL_SETTINGS); + $db->query($query); + $settings['panel']['version'] = '1.2.14-svn4'; +} + +if($settings['panel']['version'] == '1.2.14-svn4') +{ + $db->query('INSERT INTO `' . TABLE_PANEL_SETTINGS . '` SET `settinggroup` = \'system\', `varname` = \'phpappendopenbasedir\', `value` = \'/tmp/\' '); + + // set new version + + $query = 'UPDATE `%s` SET `value` = \'1.2.14-svn5\' WHERE `settinggroup` = \'panel\' AND `varname` = \'version\''; + $query = sprintf($query, TABLE_PANEL_SETTINGS); + $db->query($query); + $settings['panel']['version'] = '1.2.14-svn5'; +} + +if($settings['panel']['version'] == '1.2.14-svn5') +{ + // set new version + + $query = 'UPDATE `%s` SET `value` = \'1.2.15\' WHERE `settinggroup` = \'panel\' AND `varname` = \'version\''; + $query = sprintf($query, TABLE_PANEL_SETTINGS); + $db->query($query); + $settings['panel']['version'] = '1.2.15'; +} + +if($settings['panel']['version'] == '1.2.15') +{ + $db->query("INSERT INTO `" . TABLE_PANEL_LANGUAGE . "` (`language`, `file`) VALUES ('Slovak', 'lng/slovak.lng.php');"); + $db->query("INSERT INTO `" . TABLE_PANEL_LANGUAGE . "` (`language`, `file`) VALUES ('Dutch', 'lng/dutch.lng.php');"); + $db->query("INSERT INTO `" . TABLE_PANEL_LANGUAGE . "` (`language`, `file`) VALUES ('Hungarian', 'lng/hungarian.lng.php');"); + + // set new version + + $query = 'UPDATE `%s` SET `value` = \'1.2.15-svn1\' WHERE `settinggroup` = \'panel\' AND `varname` = \'version\''; + $query = sprintf($query, TABLE_PANEL_SETTINGS); + $db->query($query); + $settings['panel']['version'] = '1.2.15-svn1'; +} + +if($settings['panel']['version'] == '1.2.15-svn1') +{ + // set new version + + $query = 'UPDATE `%s` SET `value` = \'1.2.16\' WHERE `settinggroup` = \'panel\' AND `varname` = \'version\''; + $query = sprintf($query, TABLE_PANEL_SETTINGS); + $db->query($query); + $settings['panel']['version'] = '1.2.16'; +} + +if($settings['panel']['version'] == '1.2.16') +{ + $db->query('INSERT INTO `' . TABLE_PANEL_SETTINGS . '` SET `settinggroup` = \'panel\', `varname` = \'natsorting\', `value` = \'1\' '); + + // set new version + + $query = 'UPDATE `%s` SET `value` = \'1.2.16-svn1\' WHERE `settinggroup` = \'panel\' AND `varname` = \'version\''; + $query = sprintf($query, TABLE_PANEL_SETTINGS); + $db->query($query); + $settings['panel']['version'] = '1.2.16-svn1'; +} + +if($settings['panel']['version'] == '1.2.16-svn1') +{ + $db->query('INSERT INTO `' . TABLE_PANEL_SETTINGS . '` SET `settinggroup` = \'system\', `varname` = \'deactivateddocroot\', `value` = \'\' '); + + // set new version + + $query = 'UPDATE `%s` SET `value` = \'1.2.16-svn2\' WHERE `settinggroup` = \'panel\' AND `varname` = \'version\''; + $query = sprintf($query, TABLE_PANEL_SETTINGS); + $db->query($query); + $settings['panel']['version'] = '1.2.16-svn2'; +} + +if($settings['panel']['version'] == '1.2.16-svn2') +{ + $tables = getTables($db); + + if(isset($tables[TABLE_PANEL_CRONSCRIPT]) + && is_array($tables[TABLE_PANEL_CRONSCRIPT])) + { + $deletecronscriptstable = true; + $cronscripts_result = $db->query('SELECT * FROM `' . TABLE_PANEL_CRONSCRIPT . '`'); + + while($cronscripts_row = $db->fetch_array($cronscripts_result)) + { + if($cronscripts_row['file'] != 'cron_tasks.php' + && $cronscripts_row['file'] != 'cron_traffic.php') + { + $deletecronscriptstable = false; + } + } + + if($deletecronscriptstable === true) + { + $db->query('DROP TABLE IF EXISTS `' . TABLE_PANEL_CRONSCRIPT . '` '); + } + else + { + $db->query('DELETE FROM `' . TABLE_PANEL_CRONSCRIPT . '` WHERE `file` IN( "cron_tasks.php", "cron_traffic.php" ) '); + } + } + + // set new version + + $query = 'UPDATE `%s` SET `value` = \'1.2.16-svn3\' WHERE `settinggroup` = \'panel\' AND `varname` = \'version\''; + $query = sprintf($query, TABLE_PANEL_SETTINGS); + $db->query($query); + $settings['panel']['version'] = '1.2.16-svn3'; +} + +if($settings['panel']['version'] == '1.2.16-svn3') +{ + // set new version + + $query = 'UPDATE `%s` SET `value` = \'1.2.16-svn4\' WHERE `settinggroup` = \'panel\' AND `varname` = \'version\''; + $query = sprintf($query, TABLE_PANEL_SETTINGS); + $db->query($query); + $settings['panel']['version'] = '1.2.16-svn4'; +} + +if($settings['panel']['version'] == '1.2.16-svn4') +{ + $tables = getTables($db); + $db->query('ALTER TABLE `' . TABLE_PANEL_TRAFFIC . '` ADD `stamp` INT( 11 ) unsigned NOT NULL DEFAULT \'0\' AFTER `day` '); + + if(isset($tables[TABLE_PANEL_TRAFFIC]) + && is_array($tables[TABLE_PANEL_TRAFFIC]) + && isset($tables[TABLE_PANEL_TRAFFIC]['date'])) + { + $db->query('ALTER TABLE `' . TABLE_PANEL_TRAFFIC . '` DROP INDEX `date` '); + } + + $tables = getTables($db); + $db->query('ALTER TABLE `' . TABLE_PANEL_TRAFFIC_ADMINS . '` ADD `stamp` INT( 11 ) unsigned NOT NULL DEFAULT \'0\' AFTER `day` '); + + if(isset($tables[TABLE_PANEL_TRAFFIC_ADMINS]) + && is_array($tables[TABLE_PANEL_TRAFFIC_ADMINS]) + && isset($tables[TABLE_PANEL_TRAFFIC_ADMINS]['date'])) + { + $db->query('ALTER TABLE `' . TABLE_PANEL_TRAFFIC_ADMINS . '` DROP INDEX `date` '); + } + + // set new version + + $query = 'UPDATE `%s` SET `value` = \'1.2.16-svn5\' WHERE `settinggroup` = \'panel\' AND `varname` = \'version\''; + $query = sprintf($query, TABLE_PANEL_SETTINGS); + $db->query($query); + $settings['panel']['version'] = '1.2.16-svn5'; +} + +if($settings['panel']['version'] == '1.2.16-svn5') +{ + $db->query('ALTER TABLE `' . TABLE_PANEL_CUSTOMERS . '` ADD `reportsent` TINYINT( 4 ) unsigned NOT NULL DEFAULT \'0\' AFTER `loginfail_count` '); + $db->query('ALTER TABLE `' . TABLE_PANEL_ADMINS . '` ADD `reportsent` TINYINT( 4 ) unsigned NOT NULL DEFAULT \'0\' AFTER `loginfail_count` '); + $db->query('INSERT INTO `' . TABLE_PANEL_SETTINGS . '` SET `settinggroup` = \'system\', `varname` = \'last_traffic_report_run\', `value` = \'\' '); + + // set new version + + $query = 'UPDATE `%s` SET `value` = \'1.2.16-svn6\' WHERE `settinggroup` = \'panel\' AND `varname` = \'version\''; + $query = sprintf($query, TABLE_PANEL_SETTINGS); + $db->query($query); + $settings['panel']['version'] = '1.2.16-svn6'; +} + +if($settings['panel']['version'] == '1.2.16-svn6') +{ + $db->query('ALTER TABLE `' . TABLE_PANEL_IPSANDPORTS . '` ADD `vhostcontainer` TINYINT( 1 ) NOT NULL DEFAULT \'0\', ADD `specialsettings` TEXT NOT NULL '); + $db->query('UPDATE `' . TABLE_PANEL_IPSANDPORTS . '` SET `vhostcontainer` = \'1\' '); + + // set new version + + $query = 'UPDATE `%s` SET `value` = \'1.2.16-svn7\' WHERE `settinggroup` = \'panel\' AND `varname` = \'version\''; + $query = sprintf($query, TABLE_PANEL_SETTINGS); + $db->query($query); + $settings['panel']['version'] = '1.2.16-svn7'; +} + +if($settings['panel']['version'] == '1.2.16-svn7') +{ + $db->query("ALTER TABLE `" . TABLE_PANEL_SESSIONS . "` CHANGE `ipaddress` `ipaddress` VARCHAR( 255 ) NOT NULL"); + $db->query('INSERT INTO `' . TABLE_PANEL_SETTINGS . '` SET `settinggroup` = \'system\', `varname` = \'mailpwcleartext\', `value` = \'1\' '); + + // set new version + + $query = 'UPDATE `%s` SET `value` = \'1.2.16-svn8\' WHERE `settinggroup` = \'panel\' AND `varname` = \'version\''; + $query = sprintf($query, TABLE_PANEL_SETTINGS); + $db->query($query); + $settings['panel']['version'] = '1.2.16-svn8'; +} + +if($settings['panel']['version'] == '1.2.16-svn8') +{ + $db->query('INSERT INTO `' . TABLE_PANEL_SETTINGS . '` SET `settinggroup` = \'system\', `varname` = \'last_tasks_run\', `value` = \'0\' '); + + // set new version + + $query = 'UPDATE `%s` SET `value` = \'1.2.16-svn9\' WHERE `settinggroup` = \'panel\' AND `varname` = \'version\''; + $query = sprintf($query, TABLE_PANEL_SETTINGS); + $db->query($query); + $settings['panel']['version'] = '1.2.16-svn9'; +} + +if($settings['panel']['version'] == '1.2.16-svn9') +{ + $db->query("ALTER TABLE `" . TABLE_FTP_USERS . "` CHANGE `username` `username` VARCHAR( 255 ) NOT NULL"); + $db->query('INSERT INTO `' . TABLE_PANEL_SETTINGS . '` SET `settinggroup` = \'customer\', `varname` = \'ftpatdomain\', `value` = \'0\' '); + + // set new version + + $query = 'UPDATE `%s` SET `value` = \'1.2.16-svn10\' WHERE `settinggroup` = \'panel\' AND `varname` = \'version\''; + $query = sprintf($query, TABLE_PANEL_SETTINGS); + $db->query($query); + $settings['panel']['version'] = '1.2.16-svn10'; +} + +if($settings['panel']['version'] == '1.2.16-svn10') +{ + $db->query('ALTER TABLE `' . TABLE_PANEL_DOMAINS . '` ADD `bindserial` VARCHAR( 10 ) NOT NULL DEFAULT \'2000010100\''); + $db->query('INSERT INTO `' . TABLE_PANEL_SETTINGS . '` (`settinggroup`, `varname`, `value`) VALUES (\'system\', \'nameservers\', \'\')'); + $db->query('INSERT INTO `' . TABLE_PANEL_SETTINGS . '` (`settinggroup`, `varname`, `value`) VALUES (\'system\', \'mxservers\', \'\')'); + $db->query('DELETE FROM `' . TABLE_PANEL_SETTINGS . '` WHERE `settinggroup`=\'system\' AND `varname`=\'binddefaultzone\''); + + // set new version + + $query = 'UPDATE `%s` SET `value` = \'1.2.16-svn11\' WHERE `settinggroup` = \'panel\' AND `varname` = \'version\''; + $query = sprintf($query, TABLE_PANEL_SETTINGS); + $db->query($query); + $settings['panel']['version'] = '1.2.16-svn11'; +} + +if($settings['panel']['version'] == '1.2.16-svn11') +{ + $db->query("ALTER TABLE `" . TABLE_PANEL_CUSTOMERS . "` ADD `phpenabled` TINYINT( 1 ) unsigned NOT NULL DEFAULT '1' AFTER `deactivated`"); + $db->query('INSERT INTO `' . TABLE_PANEL_SETTINGS . '` SET `settinggroup` = \'system\', `varname` = \'mod_log_sql\', `value` = \'0\' '); + $db->query('INSERT INTO `' . TABLE_PANEL_SETTINGS . '` SET `settinggroup` = \'system\', `varname` = \'mod_fcgid\', `value` = \'0\' '); + + // set new version + + $query = 'UPDATE `%s` SET `value` = \'1.2.16-svn12\' WHERE `settinggroup` = \'panel\' AND `varname` = \'version\''; + $query = sprintf($query, TABLE_PANEL_SETTINGS); + $db->query($query); + $settings['panel']['version'] = '1.2.16-svn12'; +} + +if($settings['panel']['version'] == '1.2.16-svn12') +{ + $db->query('INSERT INTO `' . TABLE_PANEL_SETTINGS . '` SET `settinggroup` = \'panel\', `varname` = \'sendalternativemail\', `value` = \'0\' '); + + // set new version + + $query = 'UPDATE `%s` SET `value` = \'1.2.16-svn13\' WHERE `settinggroup` = \'panel\' AND `varname` = \'version\''; + $query = sprintf($query, TABLE_PANEL_SETTINGS); + $db->query($query); + $settings['panel']['version'] = '1.2.16-svn13'; +} + +if($settings['panel']['version'] == '1.2.16-svn13') +{ + $db->query('INSERT INTO `' . TABLE_PANEL_SETTINGS . '` SET `settinggroup` = \'system\', `varname` = \'apacheconf_vhost\', `value` = \'' . makeCorrectFile($settings['system']['apacheconf_directory'] . '/' . $settings['system']['apacheconf_filename']) . '\' '); + $db->query('INSERT INTO `' . TABLE_PANEL_SETTINGS . '` SET `settinggroup` = \'system\', `varname` = \'apacheconf_diroptions\', `value` = \'' . makeCorrectFile($settings['system']['apacheconf_directory'] . '/diroptions.conf') . '\' '); + $db->query('INSERT INTO `' . TABLE_PANEL_SETTINGS . '` SET `settinggroup` = \'system\', `varname` = \'apacheconf_htpasswddir\', `value` = \'' . makeCorrectDir($settings['system']['apacheconf_directory'] . '/htpasswd/') . '\' '); + $db->query('DELETE FROM `' . TABLE_PANEL_SETTINGS . '` WHERE `settinggroup` = \'system\' AND `varname` = \'apacheconf_directory\' '); + $db->query('DELETE FROM `' . TABLE_PANEL_SETTINGS . '` WHERE `settinggroup` = \'system\' AND `varname` = \'apacheconf_filename\' '); + + // set new version + + $query = 'UPDATE `%s` SET `value` = \'1.2.16-svn14\' WHERE `settinggroup` = \'panel\' AND `varname` = \'version\''; + $query = sprintf($query, TABLE_PANEL_SETTINGS); + $db->query($query); + $settings['panel']['version'] = '1.2.16-svn14'; +} + +if($settings['panel']['version'] == '1.2.16-svn14') +{ + $db->query('ALTER TABLE `' . TABLE_PANEL_SESSIONS . '` ADD `formtoken` CHAR( 32 ) NOT NULL AFTER `lastpaging` '); + + // set new version + + $query = 'UPDATE `%s` SET `value` = \'1.2.16-svn15\' WHERE `settinggroup` = \'panel\' AND `varname` = \'version\''; + $query = sprintf($query, TABLE_PANEL_SETTINGS); + $db->query($query); + $settings['panel']['version'] = '1.2.16-svn15'; +} + +if($settings['panel']['version'] == '1.2.16-svn15') +{ + // set new version + + $query = 'UPDATE `%s` SET `value` = \'1.2.17\' WHERE `settinggroup` = \'panel\' AND `varname` = \'version\''; + $query = sprintf($query, TABLE_PANEL_SETTINGS); + $db->query($query); + $settings['panel']['version'] = '1.2.17'; +} + +if($settings['panel']['version'] == '1.2.17') +{ + // set new version + + $query = 'UPDATE `%s` SET `value` = \'1.2.18\' WHERE `settinggroup` = \'panel\' AND `varname` = \'version\''; + $query = sprintf($query, TABLE_PANEL_SETTINGS); + $db->query($query); + $settings['panel']['version'] = '1.2.18'; +} + +if($settings['panel']['version'] == '1.2.18') +{ + $db->query('ALTER TABLE `' . TABLE_PANEL_IPSANDPORTS . '` ADD `listen_statement` TINYINT( 1 ) NOT NULL DEFAULT \'0\', ADD `namevirtualhost_statement` TINYINT( 1 ) NOT NULL DEFAULT \'0\', ADD `vhostcontainer_servername_statement` TINYINT( 1 ) NOT NULL DEFAULT \'0\' '); + $db->query('UPDATE `' . TABLE_PANEL_IPSANDPORTS . '` SET `listen_statement` = 0, `namevirtualhost_statement` = 1, `vhostcontainer_servername_statement` = 1 '); + + // set new version + + $query = 'UPDATE `%s` SET `value` = \'1.2.18-svn1\' WHERE `settinggroup` = \'panel\' AND `varname` = \'version\''; + $query = sprintf($query, TABLE_PANEL_SETTINGS); + $db->query($query); + $settings['panel']['version'] = '1.2.18-svn1'; +} + +if($settings['panel']['version'] == '1.2.18-svn1') +{ + $db->query('INSERT INTO `' . TABLE_PANEL_SETTINGS . '` SET `settinggroup` = \'system\', `varname` = \'webalizer_quiet\', `value` = \'2\' '); + + // set new version + + $query = 'UPDATE `%s` SET `value` = \'1.2.18-svn2\' WHERE `settinggroup` = \'panel\' AND `varname` = \'version\''; + $query = sprintf($query, TABLE_PANEL_SETTINGS); + $db->query($query); + $settings['panel']['version'] = '1.2.18-svn2'; +} + +if($settings['panel']['version'] == '1.2.18-svn2') +{ + $db->query('INSERT INTO `' . TABLE_PANEL_SETTINGS . '` SET `settinggroup` = \'ticket\', `varname` = \'noreply_email\', `value` = \'NO-REPLY@SERVERNAME\' '); + $db->query('INSERT INTO `' . TABLE_PANEL_SETTINGS . '` SET `settinggroup` = \'ticket\', `varname` = \'admin_email\', `value` = \'admin@SERVERNAME\' '); + $db->query('INSERT INTO `' . TABLE_PANEL_SETTINGS . '` SET `settinggroup` = \'ticket\', `varname` = \'worktime_all\', `value` = \'1\' '); + $db->query('INSERT INTO `' . TABLE_PANEL_SETTINGS . '` SET `settinggroup` = \'ticket\', `varname` = \'worktime_begin\', `value` = \'00:00\' '); + $db->query('INSERT INTO `' . TABLE_PANEL_SETTINGS . '` SET `settinggroup` = \'ticket\', `varname` = \'worktime_end\', `value` = \'23:59\' '); + $db->query('INSERT INTO `' . TABLE_PANEL_SETTINGS . '` SET `settinggroup` = \'ticket\', `varname` = \'worktime_sat\', `value` = \'0\' '); + $db->query('INSERT INTO `' . TABLE_PANEL_SETTINGS . '` SET `settinggroup` = \'ticket\', `varname` = \'worktime_sun\', `value` = \'0\' '); + $db->query('INSERT INTO `' . TABLE_PANEL_SETTINGS . '` SET `settinggroup` = \'ticket\', `varname` = \'archiving_days\', `value` = \'5\' '); + $db->query('INSERT INTO `' . TABLE_PANEL_SETTINGS . '` SET `settinggroup` = \'ticket\', `varname` = \'last_archive_run\', `value` = \'0\' '); + $db->query("ALTER TABLE `" . TABLE_PANEL_CUSTOMERS . "` ADD `tickets` INT( 15 ) NOT NULL DEFAULT '0' AFTER `ftps_used`"); + $db->query("ALTER TABLE `" . TABLE_PANEL_CUSTOMERS . "` ADD `tickets_used` INT( 15 ) NOT NULL DEFAULT '0' AFTER `tickets`"); + $db->query("ALTER TABLE `" . TABLE_PANEL_ADMINS . "` ADD `tickets` INT( 15 ) NOT NULL DEFAULT '-1' AFTER `ftps_used`"); + $db->query("ALTER TABLE `" . TABLE_PANEL_ADMINS . "` ADD `tickets_used` INT( 15 ) NOT NULL DEFAULT '0' AFTER `tickets`"); + $db->query("CREATE TABLE `" . TABLE_PANEL_TICKETS . "` ( + `id` int(11) unsigned NOT NULL auto_increment, + `customerid` int(11) NOT NULL, + `category` smallint(5) unsigned NOT NULL default '1', + `priority` enum('1','2','3') NOT NULL default '3', + `subject` varchar(70) NOT NULL, + `message` text NOT NULL, + `dt` int(15) NOT NULL, + `lastchange` int(15) NOT NULL, + `ip` varchar(20) NOT NULL, + `status` enum('0','1','2','3') NOT NULL default '1', + `lastreplier` enum('0','1') NOT NULL default '0', + `answerto` int(11) unsigned NOT NULL, + `by` enum('0','1') NOT NULL default '0', + `archived` enum('0','1') NOT NULL default '0', + PRIMARY KEY (`id`), + KEY `customerid` (`customerid`)) ENGINE=MyISAM;"); + $db->query("CREATE TABLE `" . TABLE_PANEL_TICKET_CATS . "` ( + `id` smallint(5) unsigned NOT NULL auto_increment, + `name` varchar(60) NOT NULL, + PRIMARY KEY (`id`)) ENGINE=MyISAM;"); + + // set new version + + $query = 'UPDATE `%s` SET `value` = \'1.2.18-svn3\' WHERE `settinggroup` = \'panel\' AND `varname` = \'version\''; + $query = sprintf($query, TABLE_PANEL_SETTINGS); + $db->query($query); + $settings['panel']['version'] = '1.2.18-svn3'; +} + +if($settings['panel']['version'] == '1.2.18-svn3') +{ + $db->query('INSERT INTO `' . TABLE_PANEL_SETTINGS . '` (`settinggroup`, `varname`, `value`) VALUES (\'ticket\', \'enabled\', \'1\');'); + $db->query('INSERT INTO `' . TABLE_PANEL_SETTINGS . '` (`settinggroup`, `varname`, `value`) VALUES (\'ticket\', \'concurrently_open\', \'5\');'); + + // set new version + + $query = 'UPDATE `%s` SET `value` = \'1.2.18-svn4\' WHERE `settinggroup` = \'panel\' AND `varname` = \'version\''; + $query = sprintf($query, TABLE_PANEL_SETTINGS); + $db->query($query); + $settings['panel']['version'] = '1.2.18-svn4'; +} + +if($settings['panel']['version'] == '1.2.18-svn4') +{ + $db->query('INSERT INTO `' . TABLE_PANEL_SETTINGS . '` (`settinggroup`, `varname`, `value`) VALUES (\'ticket\', \'noreply_name\', \'SysCP Support\')'); + $db->query('DELETE FROM `' . TABLE_PANEL_SETTINGS . '` WHERE `settinggroup` = \'ticket\' AND `varname`=\'admin_email\''); + $db->query('ALTER TABLE `' . TABLE_PANEL_TICKETS . '` ADD `adminid` INT( 11 ) NOT NULL DEFAULT \'1\' AFTER `customerid` '); + $db->query('ALTER TABLE `' . TABLE_PANEL_TICKET_CATS . '` ADD `adminid` INT( 11 ) NOT NULL DEFAULT \'1\' AFTER `name` '); + + // set new version + + $query = 'UPDATE `%s` SET `value` = \'1.2.18-svn5\' WHERE `settinggroup` = \'panel\' AND `varname` = \'version\''; + $query = sprintf($query, TABLE_PANEL_SETTINGS); + $db->query($query); + $settings['panel']['version'] = '1.2.18-svn5'; +} + +if($settings['panel']['version'] == '1.2.18-svn5') +{ + $db->query('UPDATE `' . TABLE_PANEL_SETTINGS . '` SET `settinggroup` = \'system\' WHERE `settinggroup` = \'ticket\' AND `varname` = \'last_archive_run\''); + + // set new version + + $query = 'UPDATE `%s` SET `value` = \'1.2.19\' WHERE `settinggroup` = \'panel\' AND `varname` = \'version\''; + $query = sprintf($query, TABLE_PANEL_SETTINGS); + $db->query($query); + $settings['panel']['version'] = '1.2.19'; +} + +?> diff --git a/install/updates/1.2/update_1.2.19_1.4.inc.php b/install/updates/1.2/update_1.2.19_1.4.inc.php new file mode 100644 index 0000000000..7f8d8f195c --- /dev/null +++ b/install/updates/1.2/update_1.2.19_1.4.inc.php @@ -0,0 +1,1082 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package System + * @version $Id: update_1.2.19_1.4.inc.php 2722 2009-05-04 18:59:28Z flo $ + */ + +if($settings['panel']['version'] == '1.2.19') +{ + $db->query('INSERT INTO `' . TABLE_PANEL_SETTINGS . '` (`settinggroup`, `varname`, `value`) VALUES (\'system\', \'mod_fcgid_configdir\', \'/var/www/php-fcgi-scripts\')'); + $db->query('INSERT INTO `' . TABLE_PANEL_SETTINGS . '` (`settinggroup`, `varname`, `value`) VALUES (\'system\', \'mod_fcgid_tmpdir\', \'/var/kunden/tmp\')'); + + // set new version + + $query = 'UPDATE `%s` SET `value` = \'1.2.19-svn1\' WHERE `settinggroup` = \'panel\' AND `varname` = \'version\''; + $query = sprintf($query, TABLE_PANEL_SETTINGS); + $db->query($query); + $settings['panel']['version'] = '1.2.19-svn1'; +} + +if($settings['panel']['version'] == '1.2.19-svn1') +{ + $db->query('INSERT INTO `' . TABLE_PANEL_LANGUAGE . '` (`language`, `file`) VALUES (\'Swedish\', \'lng/swedish.lng.php\');'); + + // set new version + + $query = 'UPDATE `%s` SET `value` = \'1.2.19-svn2\' WHERE `settinggroup` = \'panel\' AND `varname` = \'version\''; + $query = sprintf($query, TABLE_PANEL_SETTINGS); + $db->query($query); + $settings['panel']['version'] = '1.2.19-svn2'; +} + +if($settings['panel']['version'] == '1.2.19-svn2') +{ + $db->query('INSERT INTO `' . TABLE_PANEL_SETTINGS . '` (`settinggroup`, `varname`, `value`) VALUES (\'ticket\', \'reset_cycle\', \'2\')'); + + // set new version + + $query = 'UPDATE `%s` SET `value` = \'1.2.19-svn3\' WHERE `settinggroup` = \'panel\' AND `varname` = \'version\''; + $query = sprintf($query, TABLE_PANEL_SETTINGS); + $db->query($query); + $settings['panel']['version'] = '1.2.19-svn3'; +} + +if($settings['panel']['version'] == '1.2.19-svn3') +{ + // set new version + + $query = 'UPDATE `%s` SET `value` = \'1.2.19-svn4\' WHERE `settinggroup` = \'panel\' AND `varname` = \'version\''; + $query = sprintf($query, TABLE_PANEL_SETTINGS); + $db->query($query); + $settings['panel']['version'] = '1.2.19-svn4'; +} + +if($settings['panel']['version'] == '1.2.19-svn4') +{ + $db->query('INSERT INTO `' . TABLE_PANEL_SETTINGS . '` (`settinggroup`, `varname`, `value`) VALUES (\'panel\', \'no_robots\', \'1\')'); + + // set new version + + $query = 'UPDATE `%s` SET `value` = \'1.2.19-svn4.5\' WHERE `settinggroup` = \'panel\' AND `varname` = \'version\''; + $query = sprintf($query, TABLE_PANEL_SETTINGS); + $db->query($query); + $settings['panel']['version'] = '1.2.19-svn4.5'; +} + +if($settings['panel']['version'] == '1.2.19-svn4.5') +{ + $db->query('INSERT INTO `' . TABLE_PANEL_SETTINGS . '` (`settinggroup`, `varname`, `value`) VALUES (\'logger\', \'enabled\', \'1\');'); + $db->query('INSERT INTO `' . TABLE_PANEL_SETTINGS . '` (`settinggroup`, `varname`, `value`) VALUES (\'logger\', \'log_cron\', \'0\');'); + $db->query('INSERT INTO `' . TABLE_PANEL_SETTINGS . '` (`settinggroup`, `varname`, `value`) VALUES (\'logger\', \'logfile\', \'\');'); + $db->query('INSERT INTO `' . TABLE_PANEL_SETTINGS . '` (`settinggroup`, `varname`, `value`) VALUES (\'logger\', \'logtypes\', \'syslog\');'); + $db->query('INSERT INTO `' . TABLE_PANEL_SETTINGS . '` (`settinggroup`, `varname`, `value`) VALUES (\'logger\', \'severity\', \'2\');'); + $db->query('CREATE TABLE IF NOT EXISTS `panel_syslog` ( + `logid` bigint(20) NOT NULL auto_increment, + `action` int(5) NOT NULL default \'10\', + `type` int(5) NOT NULL default \'0\', + `date` int(15) NOT NULL, + `user` varchar(50) NOT NULL, + `text` text NOT NULL, + PRIMARY KEY (`logid`) + ) ENGINE=MyISAM;'); + + // set new version + + $query = 'UPDATE `%s` SET `value` = \'1.2.19-svn6\' WHERE `settinggroup` = \'panel\' AND `varname` = \'version\''; + $query = sprintf($query, TABLE_PANEL_SETTINGS); + $db->query($query); + $settings['panel']['version'] = '1.2.19-svn6'; +} + +// ok, from this version on, we need the php filter-extension! + +if(!extension_loaded('filter')) +{ + $updatelog->logAction(ADM_ACTION, LOG_ERR, "You need to install the php filter-extension! Update to 1.2.19-svn6 aborted"); + + // skipping the update will not work, this ends up in an endless redirection from index.php to updatesql.php and back to index.php + + die("You need to install the php filter-extension! Update to 1.2.19-svn6 aborted"); +} +else +{ + if(!extension_loaded('bcmath')) + { + $updatelog->logAction(ADM_ACTION, LOG_WARNING, "The php extension 'bcmath' is not installed - SysCP will work without it but might not return exact traffic/space-usage values!"); + } + + $php_ob = @ini_get("open_basedir"); + + if(!empty($php_ob) + && $php_ob != '') + { + $updatelog->logAction(ADM_ACTION, LOG_WARNING, "Detected enabled 'open_basedir', please disable open_basedir to make SysCP work properly!"); + } + + if($settings['panel']['version'] == '1.2.19-svn6') + { + $updatelog->logAction(ADM_ACTION, LOG_WARNING, "Updating from 1.2.19-svn6 to 1.2.19-svn7"); + $db->query("ALTER TABLE `" . TABLE_PANEL_DOMAINS . "` ADD `ssl` tinyint(4) NOT NULL default '0'"); + $db->query("ALTER TABLE `" . TABLE_PANEL_DOMAINS . "` ADD `ssl_redirect` tinyint(4) NOT NULL default '0'"); + $db->query("ALTER TABLE `" . TABLE_PANEL_DOMAINS . "` ADD `ssl_ipandport` tinyint(4) NOT NULL default '0'"); + $db->query("ALTER TABLE `" . TABLE_PANEL_IPSANDPORTS . "` ADD `ssl` tinyint(4) NOT NULL default '0'"); + $db->query("ALTER TABLE `" . TABLE_PANEL_IPSANDPORTS . "` ADD `ssl_cert` tinytext AFTER `ssl`"); + $db->query("INSERT INTO `" . TABLE_PANEL_SETTINGS . "` (`settinggroup`, `varname`, `value`) VALUES ('system','ssl_cert_file','/etc/apache2/apache2.pem')"); + $db->query("INSERT INTO `" . TABLE_PANEL_SETTINGS . "` (`settinggroup`, `varname`, `value`) VALUES ('system','use_ssl','1')"); + $db->query("INSERT INTO `" . TABLE_PANEL_SETTINGS . "` (`settinggroup`, `varname`, `value`) VALUES ('system','openssl_cnf','[ req ]\r\ndefault_bits = 1024\r\ndistinguished_name = req_distinguished_name\r\nattributes = req_attributes\r\nprompt = no\r\noutput_password =\r\ninput_password =\r\n[ req_distinguished_name ]\r\nC = DE\r\nST = syscp\r\nL = syscp \r\nO = Testcertificate\r\nOU = syscp \r\nCN = @@domain_name@@\r\nemailAddress = @@email@@ \r\n[ req_attributes ]\r\nchallengePassword =\r\n')"); + $db->query("INSERT INTO `" . TABLE_PANEL_SETTINGS . "` (`settinggroup`, `varname`, `value`) VALUES ('system','default_vhostconf', '')"); + $db->query("ALTER TABLE `" . TABLE_MAIL_USERS . "` ADD `quota` BIGINT( 13 ) NOT NULL DEFAULT '0' AFTER `customerid`, ADD `pop3` TINYINT( 1 ) NOT NULL DEFAULT '1' AFTER `quota` , ADD `imap` TINYINT( 1 ) NOT NULL DEFAULT '1' AFTER `pop3`"); + $db->query("INSERT INTO `" . TABLE_PANEL_SETTINGS . "` (`settinggroup`, `varname`, `value`) VALUES ('system', 'mail_quota_enabled', '0')"); + $db->query("INSERT INTO `" . TABLE_PANEL_SETTINGS . "` (`settinggroup`, `varname`, `value`) VALUES ('system', 'mail_quota', '104857600')"); + $db->query("ALTER TABLE `" . TABLE_PANEL_CUSTOMERS . "` ADD `email_quota` BIGINT( 13 ) NOT NULL DEFAULT '0' AFTER `email_forwarders_used` , ADD `email_quota_used` BIGINT( 13 ) NOT NULL DEFAULT '0' AFTER `email_quota`, ADD `imap` TINYINT( 1 ) NOT NULL DEFAULT '1', ADD `pop3` TINYINT( 1 ) NOT NULL DEFAULT '1'"); + $db->query("ALTER TABLE `" . TABLE_PANEL_ADMINS . "` ADD `email_quota` BIGINT( 13 ) NOT NULL DEFAULT '0' AFTER `email_forwarders_used` , ADD `email_quota_used` BIGINT( 13 ) NOT NULL DEFAULT '0' AFTER `email_quota`"); + $db->query("INSERT INTO `" . TABLE_PANEL_SETTINGS . "` (`settinggroup`, `varname`, `value`) VALUES ('panel', 'decimal_places', '4')"); + + // set new version + + $query = 'UPDATE `%s` SET `value` = \'1.2.19-svn7\' WHERE `settinggroup` = \'panel\' AND `varname` = \'version\''; + $query = sprintf($query, TABLE_PANEL_SETTINGS); + $db->query($query); + $settings['panel']['version'] = '1.2.19-svn7'; + } + + if($settings['panel']['version'] == '1.2.19-svn7') + { + $updatelog->logAction(ADM_ACTION, LOG_WARNING, "Updating from 1.2.19-svn7 to 1.2.19-svn8"); + $db->query(" + CREATE TABLE `mail_dkim` ( + `id` int(11) NOT NULL auto_increment, + `domain_id` int(11) NOT NULL default '0', + `publickey` text NOT NULL, + PRIMARY KEY (`id`) + ) ENGINE=MyISAM + "); + $db->query("ALTER TABLE `" . TABLE_PANEL_DOMAINS . "` ADD `dkim` tinyint(1) NOT NULL default '0' AFTER `zonefile`"); + $db->query("INSERT INTO `" . TABLE_PANEL_SETTINGS . "` (`settinggroup`, `varname`, `value`) VALUES ('dkim', 'dkim_prefix', '/etc/postfix/dkim/')"); + $db->query("INSERT INTO `" . TABLE_PANEL_SETTINGS . "` (`settinggroup`, `varname`, `value`) VALUES ('dkim', 'dkim_domains', 'domains')"); + $db->query("INSERT INTO `" . TABLE_PANEL_SETTINGS . "` (`settinggroup`, `varname`, `value`) VALUES ('dkim', 'dkim_dkimkeys', 'dkim-keys.conf')"); + $db->query("INSERT INTO `" . TABLE_PANEL_SETTINGS . "` (`settinggroup`, `varname`, `value`) VALUES ('dkim', 'dkimrestart_command', '/etc/init.d/dkim-filter restart')"); + + // set new version + + $query = 'UPDATE `%s` SET `value` = \'1.2.19-svn8\' WHERE `settinggroup` = \'panel\' AND `varname` = \'version\''; + $query = sprintf($query, TABLE_PANEL_SETTINGS); + $db->query($query); + $settings['panel']['version'] = '1.2.19-svn8'; + } + + if($settings['panel']['version'] == '1.2.19-svn8') + { + $updatelog->logAction(ADM_ACTION, LOG_WARNING, "Updating from 1.2.19-svn8 to 1.2.19-svn9"); + $db->query("ALTER TABLE `" . TABLE_PANEL_ADMINS . "` ADD `caneditphpsettings` tinyint(1) NOT NULL default '0' AFTER `domains_see_all`"); + + // set new version + + $query = 'UPDATE `%s` SET `value` = \'1.2.19-svn9\' WHERE `settinggroup` = \'panel\' AND `varname` = \'version\''; + $query = sprintf($query, TABLE_PANEL_SETTINGS); + $db->query($query); + $settings['panel']['version'] = '1.2.19-svn9'; + } + + if($settings['panel']['version'] == '1.2.19-svn9') + { + $updatelog->logAction(ADM_ACTION, LOG_WARNING, "Updating from 1.2.19-svn9 to 1.2.19-svn10"); + + // set new version + + $query = 'UPDATE `%s` SET `value` = \'1.2.19-svn10\' WHERE `settinggroup` = \'panel\' AND `varname` = \'version\''; + $query = sprintf($query, TABLE_PANEL_SETTINGS); + $db->query($query); + $settings['panel']['version'] = '1.2.19-svn10'; + } + + if($settings['panel']['version'] == '1.2.19-svn10') + { + $updatelog->logAction(ADM_ACTION, LOG_WARNING, "Updating from 1.2.19-svn10 to 1.2.19-svn11"); + $db->query("ALTER TABLE `" . TABLE_PANEL_IPSANDPORTS . "` CHANGE `ip` `ip` VARCHAR(39) NOT NULL default ''"); + + // set new version + + $query = 'UPDATE `%s` SET `value` = \'1.2.19-svn11\' WHERE `settinggroup` = \'panel\' AND `varname` = \'version\''; + $query = sprintf($query, TABLE_PANEL_SETTINGS); + $db->query($query); + $settings['panel']['version'] = '1.2.19-svn11'; + } + + if($settings['panel']['version'] == '1.2.19-svn11') + { + $updatelog->logAction(ADM_ACTION, LOG_WARNING, "Updating from 1.2.19-svn11 to 1.2.19-svn12"); + $db->query("ALTER TABLE `" . TABLE_PANEL_ADMINS . "` ADD `ip` tinyint(4) NOT NULL default '-1' AFTER `def_language`"); + + // set new version + + $query = 'UPDATE `%s` SET `value` = \'1.2.19-svn12\' WHERE `settinggroup` = \'panel\' AND `varname` = \'version\''; + $query = sprintf($query, TABLE_PANEL_SETTINGS); + $db->query($query); + $settings['panel']['version'] = '1.2.19-svn12'; + } + + if($settings['panel']['version'] == '1.2.19-svn12') + { + $updatelog->logAction(ADM_ACTION, LOG_WARNING, "Updating from 1.2.19-svn12 to 1.2.19-svn13"); + $db->query("INSERT INTO `" . TABLE_PANEL_SETTINGS . "` (`settinggroup`, `varname`, `value`) VALUES ('dkim', 'use_dkim', '0')"); + + // set new version + + $query = 'UPDATE `%s` SET `value` = \'1.2.19-svn13\' WHERE `settinggroup` = \'panel\' AND `varname` = \'version\''; + $query = sprintf($query, TABLE_PANEL_SETTINGS); + $db->query($query); + $settings['panel']['version'] = '1.2.19-svn13'; + } + + if($settings['panel']['version'] == '1.2.19-svn13') + { + $updatelog->logAction(ADM_ACTION, LOG_WARNING, "Updating from 1.2.19-svn13 to 1.2.19-svn14"); + $db->query("ALTER TABLE `" . TABLE_PANEL_DOMAINS . "` ADD `email_only` tinyint(1) NOT NULL default '0' AFTER `isemaildomain`"); + $db->query("ALTER TABLE `" . TABLE_PANEL_DOMAINS . "` ADD `wwwserveralias` tinyint(1) NOT NULL default '1' AFTER `dkim`"); + + // set new version + + $query = 'UPDATE `%s` SET `value` = \'1.2.19-svn14\' WHERE `settinggroup` = \'panel\' AND `varname` = \'version\''; + $query = sprintf($query, TABLE_PANEL_SETTINGS); + $db->query($query); + $settings['panel']['version'] = '1.2.19-svn14'; + } + + if($settings['panel']['version'] == '1.2.19-svn14') + { + $updatelog->logAction(ADM_ACTION, LOG_WARNING, "Updating from 1.2.19-svn14 to 1.2.19-svn15"); + $db->query("INSERT INTO `" . TABLE_PANEL_SETTINGS . "` (`settinggroup`, `varname`, `value`) VALUES ('system', 'webalizer_enabled', '1')"); + $db->query("INSERT INTO `" . TABLE_PANEL_SETTINGS . "` (`settinggroup`, `varname`, `value`) VALUES ('system', 'awstats_enabled', '0')"); + $db->query("INSERT INTO `" . TABLE_PANEL_SETTINGS . "` (`settinggroup`, `varname`, `value`) VALUES ('system', 'awstats_domain_file', '/etc/awstats/')"); + $db->query("INSERT INTO `" . TABLE_PANEL_SETTINGS . "` (`settinggroup`, `varname`, `value`) VALUES ('system', 'awstats_model_file', '/etc/awstats/awstats.model.conf.syscp')"); + + // set new version + + $query = 'UPDATE `%s` SET `value` = \'1.2.19-svn15\' WHERE `settinggroup` = \'panel\' AND `varname` = \'version\''; + $query = sprintf($query, TABLE_PANEL_SETTINGS); + $db->query($query); + $settings['panel']['version'] = '1.2.19-svn15'; + } + + if($settings['panel']['version'] == '1.2.19-svn15') + { + $updatelog->logAction(ADM_ACTION, LOG_WARNING, "Updating from 1.2.19-svn15 to 1.2.19-svn16"); + $db->query(" + CREATE TABLE `panel_dns` ( + `dnsid` bigint(15) NOT NULL auto_increment, + `domainid` int(11) NOT NULL, + `customerid` int(11) NOT NULL, + `adminid` int(11) NOT NULL, + `ipv4` varchar(15) NOT NULL, + `ipv6` varchar(39) NOT NULL, + `cname` varchar(255) NOT NULL, + `mx10` varchar(255) NOT NULL, + `mx20` varchar(255) NOT NULL, + `txt` text NOT NULL, + PRIMARY KEY (`dnsid`), + UNIQUE KEY `domainid` (`domainid`) + ) ENGINE=MyISAM; + "); + $db->query("INSERT INTO `" . TABLE_PANEL_SETTINGS . "` (`settinggroup`, `varname`, `value`) VALUES ('system', 'userdns', '0')"); + $db->query("INSERT INTO `" . TABLE_PANEL_SETTINGS . "` (`settinggroup`, `varname`, `value`) VALUES ('system', 'customerdns', '0')"); + + // set new version + + $query = 'UPDATE `%s` SET `value` = \'1.2.19-svn16\' WHERE `settinggroup` = \'panel\' AND `varname` = \'version\''; + $query = sprintf($query, TABLE_PANEL_SETTINGS); + $db->query($query); + $settings['panel']['version'] = '1.2.19-svn16'; + } + + if($settings['panel']['version'] == '1.2.19-svn16') + { + $updatelog->logAction(ADM_ACTION, LOG_WARNING, "Updating from 1.2.19-svn16 to 1.2.19-svn17"); + $db->query("INSERT INTO `" . TABLE_PANEL_SETTINGS . "` (`settinggroup`, `varname`, `value`) VALUES ('panel', 'unix_names', '1')"); + + // set new version + + $query = 'UPDATE `%s` SET `value` = \'1.2.19-svn17\' WHERE `settinggroup` = \'panel\' AND `varname` = \'version\''; + $query = sprintf($query, TABLE_PANEL_SETTINGS); + $db->query($query); + $settings['panel']['version'] = '1.2.19-svn17'; + } + + if($settings['panel']['version'] == '1.2.19-svn17') + { + $updatelog->logAction(ADM_ACTION, LOG_WARNING, "Updating from 1.2.19-svn17 to 1.2.19-svn18"); + $db->query("INSERT INTO `" . TABLE_PANEL_SETTINGS . "` (`settinggroup`, `varname`, `value`) VALUES ('panel', 'allow_preset', '1')"); + + // set new version + + $query = 'UPDATE `%s` SET `value` = \'1.2.19-svn18\' WHERE `settinggroup` = \'panel\' AND `varname` = \'version\''; + $query = sprintf($query, TABLE_PANEL_SETTINGS); + $db->query($query); + $settings['panel']['version'] = '1.2.19-svn18'; + } + + if($settings['panel']['version'] == '1.2.19-svn18') + { + $updatelog->logAction(ADM_ACTION, LOG_WARNING, "Updating from 1.2.19-svn18 to 1.2.19-svn19"); + + // Update all email-admins and give'em unlimited email_quota resources + + $sql = "SELECT `adminid` FROM `" . TABLE_PANEL_ADMINS . "` + WHERE `emails` = '-1' + AND `email_accounts` = '-1' + AND `email_forwarders` = '-1'"; + $admins = $db->query($sql); + + while($admin = $db->fetch_array($admins)) + { + $db->query("UPDATE `" . TABLE_PANEL_ADMINS . "` SET `email_quota` = '-1' WHERE `adminid` = '" . $admin['adminid'] . "'"); + } + + if($settings['system']['apacheversion'] == 'lighttpd' + && $settings['system']['apachereload_command'] == '/etc/init.d/lighttpd force-reload') + { + $db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `value` = '/etc/init.d/lighttpd reload' WHERE `settinggroup` = 'system' AND `varname` = 'apachereload_command'"); + } + + // set new version + + $query = 'UPDATE `%s` SET `value` = \'1.2.19-svn19\' WHERE `settinggroup` = \'panel\' AND `varname` = \'version\''; + $query = sprintf($query, TABLE_PANEL_SETTINGS); + $db->query($query); + $settings['panel']['version'] = '1.2.19-svn19'; + } + + if($settings['panel']['version'] == '1.2.19-svn19') + { + $updatelog->logAction(ADM_ACTION, LOG_WARNING, "Updating from 1.2.19-svn19 to 1.2.19-svn20"); + $db->query("INSERT INTO `" . TABLE_PANEL_SETTINGS . "` (`settinggroup`, `varname`, `value`) VALUES ('system', 'awstats_path', '/usr/share/awstats/VERSION/webroot/cgi-bin/')"); + $db->query("INSERT INTO `" . TABLE_PANEL_SETTINGS . "` (`settinggroup`, `varname`, `value`) VALUES ('system', 'awstats_updateall_command', '/usr/bin/awstats_updateall.pl')"); + + // set new version + + $query = 'UPDATE `%s` SET `value` = \'1.2.19-svn20\' WHERE `settinggroup` = \'panel\' AND `varname` = \'version\''; + $query = sprintf($query, TABLE_PANEL_SETTINGS); + $db->query($query); + $settings['panel']['version'] = '1.2.19-svn20'; + } + + if($settings['panel']['version'] == '1.2.19-svn20') + { + $updatelog->logAction(ADM_ACTION, LOG_WARNING, "Updating from 1.2.19-svn20 to 1.2.19-svn21"); + + // ADDING BILLING + + $db->query("ALTER TABLE `" . TABLE_PANEL_ADMINS . "` + ADD `firstname` VARCHAR( 255 ) NOT NULL DEFAULT '', + ADD `title` VARCHAR( 255 ) NOT NULL DEFAULT '', + ADD `company` VARCHAR( 255 ) NOT NULL DEFAULT '', + ADD `street` VARCHAR( 255 ) NOT NULL DEFAULT '', + ADD `zipcode` VARCHAR( 255 ) NOT NULL DEFAULT '', + ADD `city` VARCHAR( 255 ) NOT NULL DEFAULT '', + ADD `country` VARCHAR( 255 ) NOT NULL DEFAULT '', + ADD `phone` VARCHAR( 255 ) NOT NULL DEFAULT '', + ADD `fax` VARCHAR( 255 ) NOT NULL DEFAULT '', + ADD `taxid` VARCHAR( 255 ) NOT NULL DEFAULT '', + ADD `contract_date` DATE NOT NULL, + ADD `contract_number` VARCHAR( 255 ) NOT NULL DEFAULT '', + ADD `contract_details` TEXT NOT NULL DEFAULT '', + ADD `included_domains_qty` INT( 11 ) NOT NULL DEFAULT '0', + ADD `included_domains_tld` VARCHAR( 255 ) NOT NULL DEFAULT '', + ADD `additional_traffic_fee` DECIMAL( 10,2 ) NOT NULL DEFAULT '0', + ADD `additional_traffic_unit` BIGINT( 30 ) NOT NULL DEFAULT '0', + ADD `additional_diskspace_fee` DECIMAL( 10,2 ) NOT NULL DEFAULT '0', + ADD `additional_diskspace_unit` BIGINT( 30 ) NOT NULL DEFAULT '0', + ADD `taxclass` INT( 11 ) NOT NULL DEFAULT '0', + ADD `setup_fee` DECIMAL( 10,2 ) NOT NULL DEFAULT '0', + ADD `interval_fee` DECIMAL( 10,2 ) NOT NULL DEFAULT '0', + ADD `interval_length` INT( 11 ) NOT NULL DEFAULT '0', + ADD `interval_type` VARCHAR( 1 ) NOT NULL DEFAULT 'm', + ADD `interval_payment` TINYINT( 1 ) NOT NULL DEFAULT '0', + ADD `calc_tax` TINYINT( 1 ) NOT NULL DEFAULT '1', + ADD `term_of_payment` INT( 11 ) NOT NULL DEFAULT '0', + ADD `payment_every` INT( 11 ) NOT NULL DEFAULT '0', + ADD `payment_method` INT( 11 ) NOT NULL DEFAULT '0', + ADD `bankaccount_holder` TEXT NOT NULL DEFAULT '', + ADD `bankaccount_number` VARCHAR( 255 ) NOT NULL DEFAULT '', + ADD `bankaccount_blz` VARCHAR( 255 ) NOT NULL DEFAULT '', + ADD `bankaccount_bank` VARCHAR( 255 ) NOT NULL DEFAULT '', + ADD `service_active` TINYINT( 1 ) NOT NULL DEFAULT '0', + ADD `servicestart_date` DATE NOT NULL, + ADD `serviceend_date` DATE NOT NULL, + ADD `lastinvoiced_date` DATE NOT NULL, + ADD `lastinvoiced_date_traffic` DATE NOT NULL, + ADD `lastinvoiced_date_diskspace` DATE NOT NULL, + ADD `customer_categories_once` TEXT NOT NULL DEFAULT '', + ADD `customer_categories_period` TEXT NOT NULL DEFAULT '', + ADD `invoice_fee` DECIMAL( 10,2 ) NOT NULL DEFAULT '0', + ADD `invoice_fee_hosting` DECIMAL( 10,2 ) NOT NULL DEFAULT '0', + ADD `invoice_fee_hosting_customers` DECIMAL( 10,2 ) NOT NULL DEFAULT '0', + ADD `invoice_fee_domains` DECIMAL( 10,2 ) NOT NULL DEFAULT '0', + ADD `invoice_fee_traffic` DECIMAL( 10,2 ) NOT NULL DEFAULT '0', + ADD `invoice_fee_diskspace` DECIMAL( 10,2 ) NOT NULL DEFAULT '0', + ADD `invoice_fee_other` DECIMAL( 10,2 ) NOT NULL DEFAULT '0';"); + $db->query("ALTER TABLE `" . TABLE_PANEL_CUSTOMERS . "` + ADD `taxid` VARCHAR( 255 ) NOT NULL DEFAULT '', + ADD `title` VARCHAR( 255 ) NOT NULL DEFAULT '', + ADD `country` VARCHAR( 255 ) NOT NULL DEFAULT '', + ADD `additional_service_description` TEXT NOT NULL DEFAULT '', + ADD `contract_date` DATE NOT NULL, + ADD `contract_number` VARCHAR( 255 ) NOT NULL DEFAULT '', + ADD `contract_details` TEXT NOT NULL DEFAULT '', + ADD `included_domains_qty` INT( 11 ) NOT NULL DEFAULT '0', + ADD `included_domains_tld` VARCHAR( 255 ) NOT NULL DEFAULT '', + ADD `additional_traffic_fee` DECIMAL( 10,2 ) NOT NULL DEFAULT '0', + ADD `additional_traffic_unit` BIGINT( 30 ) NOT NULL DEFAULT '0', + ADD `additional_diskspace_fee` DECIMAL( 10,2 ) NOT NULL DEFAULT '0', + ADD `additional_diskspace_unit` BIGINT( 30 ) NOT NULL DEFAULT '0', + ADD `taxclass` INT( 11 ) NOT NULL DEFAULT '0', + ADD `setup_fee` DECIMAL( 10,2 ) NOT NULL DEFAULT '0', + ADD `interval_fee` DECIMAL( 10,2 ) NOT NULL DEFAULT '0', + ADD `interval_length` INT( 11 ) NOT NULL DEFAULT '0', + ADD `interval_type` VARCHAR( 1 ) NOT NULL DEFAULT 'm', + ADD `interval_payment` TINYINT( 1 ) NOT NULL DEFAULT '0', + ADD `calc_tax` TINYINT( 1 ) NOT NULL DEFAULT '1', + ADD `term_of_payment` INT( 11 ) NOT NULL DEFAULT '0', + ADD `payment_every` INT( 11 ) NOT NULL DEFAULT '0', + ADD `payment_method` INT( 11 ) NOT NULL DEFAULT '0', + ADD `bankaccount_holder` TEXT NOT NULL DEFAULT '', + ADD `bankaccount_number` VARCHAR( 255 ) NOT NULL DEFAULT '', + ADD `bankaccount_blz` VARCHAR( 255 ) NOT NULL DEFAULT '', + ADD `bankaccount_bank` VARCHAR( 255 ) NOT NULL DEFAULT '', + ADD `service_active` TINYINT( 1 ) NOT NULL DEFAULT '0', + ADD `servicestart_date` DATE NOT NULL, + ADD `serviceend_date` DATE NOT NULL, + ADD `lastinvoiced_date` DATE NOT NULL, + ADD `lastinvoiced_date_traffic` DATE NOT NULL, + ADD `lastinvoiced_date_diskspace` DATE NOT NULL, + ADD `invoice_fee` DECIMAL( 10,2 ) NOT NULL DEFAULT '0', + ADD `invoice_fee_hosting` DECIMAL( 10,2 ) NOT NULL DEFAULT '0', + ADD `invoice_fee_domains` DECIMAL( 10,2 ) NOT NULL DEFAULT '0', + ADD `invoice_fee_traffic` DECIMAL( 10,2 ) NOT NULL DEFAULT '0', + ADD `invoice_fee_diskspace` DECIMAL( 10,2 ) NOT NULL DEFAULT '0', + ADD `invoice_fee_other` DECIMAL( 10,2 ) NOT NULL DEFAULT '0';"); + $db->query("ALTER TABLE `panel_domains` + ADD `add_date` INT( 11 ) NOT NULL DEFAULT '0', + ADD `registration_date` DATE NOT NULL, + ADD `taxclass` INT( 11 ) NOT NULL DEFAULT '0', + ADD `setup_fee` DECIMAL( 10,2 ) NOT NULL DEFAULT '0', + ADD `interval_fee` DECIMAL( 10,2 ) NOT NULL DEFAULT '0', + ADD `interval_length` INT( 11 ) NOT NULL DEFAULT '0', + ADD `interval_type` VARCHAR( 1 ) NOT NULL DEFAULT 'y', + ADD `interval_payment` TINYINT( 1 ) NOT NULL DEFAULT '0', + ADD `service_active` TINYINT( 1 ) NOT NULL DEFAULT '0', + ADD `servicestart_date` DATE NOT NULL, + ADD `serviceend_date` DATE NOT NULL, + ADD `lastinvoiced_date` DATE NOT NULL;"); + $db->query("CREATE TABLE `" . TABLE_BILLING_SERVICE_CATEGORIES . "` ( + `id` INT( 11 ) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY , + `category_name` VARCHAR( 255 ) NOT NULL DEFAULT '', + `category_order` INT( 11 ) UNSIGNED NOT NULL DEFAULT '0', + `category_classname` VARCHAR( 255 ) NOT NULL DEFAULT '', + `category_classfile` VARCHAR( 255 ) NOT NULL DEFAULT '', + `category_cachefield` VARCHAR( 255 ) NOT NULL DEFAULT '', + `category_caption` VARCHAR( 255 ) NOT NULL DEFAULT '', + `category_rowcaption_setup` VARCHAR( 255 ) NOT NULL DEFAULT '', + `category_rowcaption_interval` VARCHAR( 255 ) NOT NULL DEFAULT '' + ) TYPE = MYISAM ;"); + $db->query("CREATE TABLE `" . TABLE_BILLING_SERVICE_CATEGORIES_ADMINS . "` ( + `id` INT( 11 ) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY , + `category_name` VARCHAR( 255 ) NOT NULL DEFAULT '', + `category_order` INT( 11 ) UNSIGNED NOT NULL DEFAULT '0', + `category_mode` TINYINT( 1 ) NOT NULL DEFAULT '0', + `category_classname` VARCHAR( 255 ) NOT NULL DEFAULT '', + `category_classfile` VARCHAR( 255 ) NOT NULL DEFAULT '', + `category_cachefield` VARCHAR( 255 ) NOT NULL DEFAULT '', + `category_caption` VARCHAR( 255 ) NOT NULL DEFAULT '', + `category_rowcaption_setup` VARCHAR( 255 ) NOT NULL DEFAULT '', + `category_rowcaption_interval` VARCHAR( 255 ) NOT NULL DEFAULT '' + ) TYPE = MYISAM ;"); + $db->query("CREATE TABLE `" . TABLE_BILLING_SERVICE_DOMAINS_TEMPLATES . "` ( + `id` INT( 11 ) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY , + `tld` VARCHAR( 255 ) NOT NULL DEFAULT '', + `valid_from` DATE NOT NULL, + `valid_to` DATE NOT NULL, + `taxclass` INT( 11 ) UNSIGNED NOT NULL DEFAULT '0', + `setup_fee` DECIMAL( 10, 2 ) NOT NULL DEFAULT '0.00', + `interval_fee` DECIMAL( 10, 2 ) NOT NULL DEFAULT '0.00', + `interval_length` INT( 11 ) NOT NULL DEFAULT '0', + `interval_type` VARCHAR( 1 ) NOT NULL DEFAULT 'y', + `interval_payment` TINYINT( 1 ) NOT NULL DEFAULT '0' + ) TYPE = MYISAM ;"); + $db->query("CREATE TABLE `" . TABLE_BILLING_SERVICE_OTHER . "` ( + `id` INT( 11 ) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY , + `customerid` INT( 11 ) NOT NULL DEFAULT '0', + `templateid` INT( 11 ) NOT NULL DEFAULT '0', + `service_type` VARCHAR( 255 ) NOT NULL DEFAULT '', + `caption_setup` VARCHAR( 255 ) NOT NULL DEFAULT '', + `caption_interval` VARCHAR( 255 ) NOT NULL DEFAULT '', + `taxclass` INT( 11 ) UNSIGNED NOT NULL DEFAULT '0', + `quantity` INT( 11 ) UNSIGNED NOT NULL DEFAULT '0', + `setup_fee` DECIMAL( 10, 2 ) NOT NULL DEFAULT '0.00', + `interval_fee` DECIMAL( 10, 2 ) NOT NULL DEFAULT '0.00', + `interval_length` INT( 11 ) NOT NULL DEFAULT '0', + `interval_type` VARCHAR( 1 ) NOT NULL DEFAULT 'm', + `interval_payment` TINYINT( 1 ) NOT NULL DEFAULT '0', + `service_active` TINYINT( 1 ) NOT NULL DEFAULT '0', + `servicestart_date` DATE NOT NULL, + `serviceend_date` DATE NOT NULL, + `lastinvoiced_date` DATE NOT NULL + ) TYPE = MYISAM ;"); + $db->query("CREATE TABLE `" . TABLE_BILLING_SERVICE_OTHER_TEMPLATES . "` ( + `templateid` INT( 11 ) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY , + `valid_from` DATE NOT NULL, + `valid_to` DATE NOT NULL, + `service_type` VARCHAR( 255 ) NOT NULL DEFAULT '', + `caption_setup` VARCHAR( 255 ) NOT NULL DEFAULT '', + `caption_interval` VARCHAR( 255 ) NOT NULL DEFAULT '', + `taxclass` INT( 11 ) UNSIGNED NOT NULL DEFAULT '0', + `setup_fee` DECIMAL( 10, 2 ) NOT NULL DEFAULT '0.00', + `interval_fee` DECIMAL( 10, 2 ) NOT NULL DEFAULT '0.00', + `interval_length` INT( 11 ) NOT NULL DEFAULT '0', + `interval_type` VARCHAR( 1 ) NOT NULL DEFAULT 'm', + `interval_payment` TINYINT( 1 ) NOT NULL DEFAULT '0' + ) TYPE = MYISAM ;"); + $db->query("CREATE TABLE `" . TABLE_BILLING_TAXCLASSES . "` ( + `classid` INT( 11 ) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY , + `classname` VARCHAR( 255 ) NOT NULL DEFAULT '', + `default` TINYINT( 1 ) NOT NULL DEFAULT '0' + ) TYPE = MYISAM ;"); + $db->query("CREATE TABLE `" . TABLE_BILLING_TAXRATES . "` ( + `taxid` INT( 11 ) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY , + `taxclass` INT( 11 ) UNSIGNED NOT NULL DEFAULT '0', + `taxrate` DECIMAL( 4, 4 ) NOT NULL , + `valid_from` DATE NOT NULL + ) TYPE = MYISAM ;"); + $db->query("CREATE TABLE `" . TABLE_BILLING_INVOICES . "` ( + `id` INT( 11 ) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY , + `customerid` INT( 11 ) NOT NULL DEFAULT '0', + `xml` LONGTEXT NOT NULL DEFAULT '', + `invoice_date` DATE NOT NULL, + `state` TINYINT( 1 ) NOT NULL DEFAULT '0', + `state_change` INT( 11 ) NOT NULL DEFAULT '0', + `invoice_number` VARCHAR( 255 ) NOT NULL DEFAULT '', + `total_fee` DECIMAL( 10, 2 ) NOT NULL DEFAULT '0.00', + `total_fee_taxed` DECIMAL( 10, 2 ) NOT NULL DEFAULT '0.00' + ) TYPE = MYISAM ;"); + $db->query("CREATE TABLE `" . TABLE_BILLING_INVOICES_ADMINS . "` ( + `id` INT( 11 ) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY , + `adminid` INT( 11 ) NOT NULL DEFAULT '0', + `xml` LONGTEXT NOT NULL DEFAULT '', + `invoice_date` DATE NOT NULL, + `state` TINYINT( 1 ) NOT NULL DEFAULT '0', + `state_change` INT( 11 ) NOT NULL DEFAULT '0', + `invoice_number` VARCHAR( 255 ) NOT NULL DEFAULT '', + `total_fee` DECIMAL( 10, 2 ) NOT NULL DEFAULT '0.00', + `total_fee_taxed` DECIMAL( 10, 2 ) NOT NULL DEFAULT '0.00' + ) TYPE = MYISAM ;"); + $db->query("CREATE TABLE `" . TABLE_BILLING_INVOICE_CHANGES . "` ( + `id` INT( 11 ) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY , + `customerid` INT( 11 ) UNSIGNED NOT NULL DEFAULT '0', + `userid` INT( 11 ) UNSIGNED NOT NULL DEFAULT '0', + `timestamp` INT( 11 ) UNSIGNED NOT NULL DEFAULT '0', + `key` VARCHAR( 255 ) NOT NULL DEFAULT '', + `action` TINYINT( 1 ) NOT NULL DEFAULT '0', + `caption` VARCHAR( 255 ) NOT NULL DEFAULT '', + `interval` VARCHAR( 255 ) NOT NULL DEFAULT '', + `quantity` INT( 11 ) UNSIGNED NOT NULL DEFAULT '0', + `total_fee` DECIMAL( 10, 2 ) NOT NULL DEFAULT '0.00', + `taxrate` DECIMAL( 4, 4 ) NOT NULL + ) TYPE = MYISAM ;"); + $db->query("CREATE TABLE `" . TABLE_BILLING_INVOICE_CHANGES_ADMINS . "` ( + `id` INT( 11 ) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY , + `adminid` INT( 11 ) UNSIGNED NOT NULL DEFAULT '0', + `userid` INT( 11 ) UNSIGNED NOT NULL DEFAULT '0', + `timestamp` INT( 11 ) UNSIGNED NOT NULL DEFAULT '0', + `key` VARCHAR( 255 ) NOT NULL DEFAULT '', + `action` TINYINT( 1 ) NOT NULL DEFAULT '0', + `caption` VARCHAR( 255 ) NOT NULL DEFAULT '', + `interval` VARCHAR( 255 ) NOT NULL DEFAULT '', + `quantity` INT( 11 ) UNSIGNED NOT NULL DEFAULT '0', + `total_fee` DECIMAL( 10, 2 ) NOT NULL DEFAULT '0.00', + `taxrate` DECIMAL( 4, 4 ) NOT NULL + ) TYPE = MYISAM ;"); + $db->query("CREATE TABLE `" . TABLE_PANEL_DISKSPACE . "` ( + `id` int(11) unsigned NOT NULL auto_increment, + `customerid` int(11) unsigned NOT NULL default '0', + `year` int(4) unsigned zerofill NOT NULL default '0000', + `month` int(2) unsigned zerofill NOT NULL default '00', + `day` int(2) unsigned zerofill NOT NULL default '00', + `stamp` int(11) unsigned NOT NULL default '0', + `webspace` bigint(30) unsigned NOT NULL default '0', + `mail` bigint(30) unsigned NOT NULL default '0', + `mysql` bigint(30) unsigned NOT NULL default '0', + PRIMARY KEY (`id`), + KEY `customerid` (`customerid`) + ) TYPE=MyISAM ;"); + $db->query("CREATE TABLE `" . TABLE_PANEL_DISKSPACE_ADMINS . "` ( + `id` int(11) unsigned NOT NULL auto_increment, + `adminid` int(11) unsigned NOT NULL default '0', + `year` int(4) unsigned zerofill NOT NULL default '0000', + `month` int(2) unsigned zerofill NOT NULL default '00', + `day` int(2) unsigned zerofill NOT NULL default '00', + `stamp` int(11) unsigned NOT NULL default '0', + `webspace` bigint(30) unsigned NOT NULL default '0', + `mail` bigint(30) unsigned NOT NULL default '0', + `mysql` bigint(30) unsigned NOT NULL default '0', + PRIMARY KEY (`id`), + KEY `adminid` (`adminid`) + ) TYPE=MyISAM ;"); + $db->query("INSERT INTO `" . TABLE_BILLING_SERVICE_CATEGORIES . "` (`id`, `category_name`, `category_order`, `category_classname`, `category_classfile`, `category_cachefield`, `category_caption`, `category_rowcaption_setup`, `category_rowcaption_interval`) VALUES (1, 'hosting', 10, 'hosting', 'lib/billing_class_hosting.php', 'invoice_fee_hosting', 'hosting_caption', 'hosting_rowcaption_setup', 'hosting_rowcaption_interval');"); + $db->query("INSERT INTO `" . TABLE_BILLING_SERVICE_CATEGORIES . "` (`id`, `category_name`, `category_order`, `category_classname`, `category_classfile`, `category_cachefield`, `category_caption`, `category_rowcaption_setup`, `category_rowcaption_interval`) VALUES (2, 'domains', 20, 'domains', 'lib/billing_class_domains.php', 'invoice_fee_domains', 'domains_caption', 'domains_rowcaption_setup', 'domains_rowcaption_interval');"); + $db->query("INSERT INTO `" . TABLE_BILLING_SERVICE_CATEGORIES . "` (`id`, `category_name`, `category_order`, `category_classname`, `category_classfile`, `category_cachefield`, `category_caption`, `category_rowcaption_setup`, `category_rowcaption_interval`) VALUES (3, 'traffic', 30, 'traffic', 'lib/billing_class_traffic.php', 'invoice_fee_traffic', 'traffic_caption', 'traffic_rowcaption_setup', 'traffic_rowcaption_interval');"); + $db->query("INSERT INTO `" . TABLE_BILLING_SERVICE_CATEGORIES . "` (`id`, `category_name`, `category_order`, `category_classname`, `category_classfile`, `category_cachefield`, `category_caption`, `category_rowcaption_setup`, `category_rowcaption_interval`) VALUES (4, 'diskspace', 40, 'diskspace', 'lib/billing_class_diskspace.php', 'invoice_fee_diskspace', 'diskspace_caption', 'diskspace_rowcaption_setup', 'diskspace_rowcaption_interval');"); + $db->query("INSERT INTO `" . TABLE_BILLING_SERVICE_CATEGORIES . "` (`id`, `category_name`, `category_order`, `category_classname`, `category_classfile`, `category_cachefield`, `category_caption`, `category_rowcaption_setup`, `category_rowcaption_interval`) VALUES (5, 'other', 50, 'other', 'lib/billing_class_other.php', 'invoice_fee_other', 'other_caption', 'other_rowcaption_setup', 'other_rowcaption_interval');"); + $db->query("INSERT INTO `" . TABLE_BILLING_SERVICE_CATEGORIES_ADMINS . "` (`id`, `category_name`, `category_order`, `category_mode`, `category_classname`, `category_classfile`, `category_cachefield`, `category_caption`, `category_rowcaption_setup`, `category_rowcaption_interval`) VALUES (1, 'hosting', 10, 0, 'hosting', 'lib/billing_class_hosting.php', 'invoice_fee_hosting', 'hosting_caption', 'hosting_rowcaption_setup', 'hosting_rowcaption_interval');"); + $db->query("INSERT INTO `" . TABLE_BILLING_SERVICE_CATEGORIES_ADMINS . "` (`id`, `category_name`, `category_order`, `category_mode`, `category_classname`, `category_classfile`, `category_cachefield`, `category_caption`, `category_rowcaption_setup`, `category_rowcaption_interval`) VALUES (2, 'hosting_customers', 20, 1, 'hosting', 'lib/billing_class_hosting.php', 'invoice_fee_hosting_customers', 'hosting_caption', 'hosting_rowcaption_setup_withloginname', 'hosting_rowcaption_interval_withloginname');"); + $db->query("INSERT INTO `" . TABLE_BILLING_SERVICE_CATEGORIES_ADMINS . "` (`id`, `category_name`, `category_order`, `category_mode`, `category_classname`, `category_classfile`, `category_cachefield`, `category_caption`, `category_rowcaption_setup`, `category_rowcaption_interval`) VALUES (3, 'domains', 30, 1, 'domains', 'lib/billing_class_domains.php', 'invoice_fee_domains', 'domains_caption', 'domains_rowcaption_setup', 'domains_rowcaption_interval');"); + $db->query("INSERT INTO `" . TABLE_BILLING_SERVICE_CATEGORIES_ADMINS . "` (`id`, `category_name`, `category_order`, `category_mode`, `category_classname`, `category_classfile`, `category_cachefield`, `category_caption`, `category_rowcaption_setup`, `category_rowcaption_interval`) VALUES (4, 'traffic', 40, 0, 'traffic', 'lib/billing_class_traffic.php', 'invoice_fee_traffic', 'traffic_caption', 'traffic_rowcaption_setup', 'traffic_rowcaption_interval');"); + $db->query("INSERT INTO `" . TABLE_BILLING_SERVICE_CATEGORIES_ADMINS . "` (`id`, `category_name`, `category_order`, `category_mode`, `category_classname`, `category_classfile`, `category_cachefield`, `category_caption`, `category_rowcaption_setup`, `category_rowcaption_interval`) VALUES (5, 'diskspace', 50, 0, 'diskspace', 'lib/billing_class_diskspace.php', 'invoice_fee_diskspace', 'diskspace_caption', 'diskspace_rowcaption_setup', 'diskspace_rowcaption_interval');"); + $db->query("INSERT INTO `" . TABLE_BILLING_SERVICE_CATEGORIES_ADMINS . "` (`id`, `category_name`, `category_order`, `category_mode`, `category_classname`, `category_classfile`, `category_cachefield`, `category_caption`, `category_rowcaption_setup`, `category_rowcaption_interval`) VALUES (6, 'other', 60, 1, 'other', 'lib/billing_class_other.php', 'invoice_fee_other', 'other_caption', 'other_rowcaption_setup', 'other_rowcaption_interval');"); + $db->query("INSERT INTO `" . TABLE_BILLING_TAXCLASSES . "` (`classid`, `classname`, `default`) VALUES ( NULL, 'MwSt Deutschland', '1' );"); + $db->query("INSERT INTO `" . TABLE_BILLING_TAXCLASSES . "` (`classid`, `classname`, `default`) VALUES ( NULL, 'MwSt Deutschland (reduziert)', '0' );"); + $db->query("INSERT INTO `" . TABLE_BILLING_TAXRATES . "` (`taxid`, `taxclass`, `taxrate`, `valid_from`) VALUES ( NULL, 1, 0.1600, '0' );"); + $db->query("INSERT INTO `" . TABLE_BILLING_TAXRATES . "` (`taxid`, `taxclass`, `taxrate`, `valid_from`) VALUES ( NULL, 1, 0.1900, '2007-01-01' );"); + $db->query("INSERT INTO `" . TABLE_BILLING_TAXRATES . "` (`taxid`, `taxclass`, `taxrate`, `valid_from`) VALUES ( NULL, 2, 0.0700, '0' );"); + $db->query("INSERT INTO `" . TABLE_PANEL_SETTINGS . "` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (NULL, 'billing', 'invoicenumber_count', '0');"); + + // set new version + + $query = 'UPDATE `%s` SET `value` = \'1.2.19-svn21\' WHERE `settinggroup` = \'panel\' AND `varname` = \'version\''; + $query = sprintf($query, TABLE_PANEL_SETTINGS); + $db->query($query); + $settings['panel']['version'] = '1.2.19-svn21'; + } + + if($settings['panel']['version'] == '1.2.19-svn21') + { + $updatelog->logAction(ADM_ACTION, LOG_WARNING, "Updating from 1.2.19-svn21 to 1.2.19-svn22"); + $db->query("INSERT INTO `" . TABLE_PANEL_SETTINGS . "` (`settinggroup`, `varname`, `value`) VALUES ('panel', 'allow_preset_admin', '0')"); + + // set new version + + $query = 'UPDATE `%s` SET `value` = \'1.2.19-svn22\' WHERE `settinggroup` = \'panel\' AND `varname` = \'version\''; + $query = sprintf($query, TABLE_PANEL_SETTINGS); + $db->query($query); + $settings['panel']['version'] = '1.2.19-svn22'; + } + + if($settings['panel']['version'] == '1.2.19-svn22') + { + $updatelog->logAction(ADM_ACTION, LOG_WARNING, "Updating from 1.2.19-svn22 to 1.2.19-svn23"); + $db->query("ALTER TABLE `" . TABLE_PANEL_ADMINS . "` ADD `edit_billingdata` TINYINT( 1 ) NOT NULL DEFAULT '0' AFTER `change_serversettings`"); + $db->query("UPDATE `" . TABLE_PANEL_ADMINS . "` SET `edit_billingdata` = '1' WHERE `customers_see_all` = '1'"); + + // set new version + + $query = 'UPDATE `%s` SET `value` = \'1.2.19-svn23\' WHERE `settinggroup` = \'panel\' AND `varname` = \'version\''; + $query = sprintf($query, TABLE_PANEL_SETTINGS); + $db->query($query); + $settings['panel']['version'] = '1.2.19-svn23'; + } + + if($settings['panel']['version'] == '1.2.19-svn23') + { + $updatelog->logAction(ADM_ACTION, LOG_WARNING, "Updating from 1.2.19-svn23 to 1.2.19-svn24"); + $db->query("INSERT INTO `" . TABLE_PANEL_SETTINGS . "` (`settinggroup`, `varname`, `value`) VALUES ('billing', 'activate_billing', '0')"); + $db->query("INSERT INTO `" . TABLE_PANEL_SETTINGS . "` (`settinggroup`, `varname`, `value`) VALUES ('billing', 'highlight_inactive', '0')"); + + // set new version + + $query = 'UPDATE `%s` SET `value` = \'1.2.19-svn24\' WHERE `settinggroup` = \'panel\' AND `varname` = \'version\''; + $query = sprintf($query, TABLE_PANEL_SETTINGS); + $db->query($query); + $settings['panel']['version'] = '1.2.19-svn24'; + } + + if($settings['panel']['version'] == '1.2.19-svn24') + { + $updatelog->logAction(ADM_ACTION, LOG_WARNING, "Updating from 1.2.19-svn24 to 1.2.19-svn25"); + + // set new version + + $query = 'UPDATE `%s` SET `value` = \'1.2.19-svn25\' WHERE `settinggroup` = \'panel\' AND `varname` = \'version\''; + $query = sprintf($query, TABLE_PANEL_SETTINGS); + $db->query($query); + $settings['panel']['version'] = '1.2.19-svn25'; + } + + if($settings['panel']['version'] == '1.2.19-svn25') + { + $updatelog->logAction(ADM_ACTION, LOG_WARNING, "Updating from 1.2.19-svn25 to 1.2.19-svn26"); + $db->query("INSERT INTO " . TABLE_PANEL_LANGUAGE . " SET `language` = 'Swedish', `file` = 'lng/swedish.lng.php';"); + $db->query("INSERT INTO " . TABLE_PANEL_LANGUAGE . " SET `language` = 'Czech', `file` = 'lng/czech.lng.php';"); + + // set new version + + $query = 'UPDATE `%s` SET `value` = \'1.2.19-svn26\' WHERE `settinggroup` = \'panel\' AND `varname` = \'version\''; + $query = sprintf($query, TABLE_PANEL_SETTINGS); + $db->query($query); + $settings['panel']['version'] = '1.2.19-svn26'; + } + + if($settings['panel']['version'] == '1.2.19-svn26') + { + $updatelog->logAction(ADM_ACTION, LOG_WARNING, "Updating from 1.2.19-svn26 to 1.2.19-svn27"); + $db->query("INSERT INTO `" . TABLE_PANEL_SETTINGS . "` (`settinggroup`, `varname`, `value`) VALUES ('system', 'webserver', 'apache2')"); + $db->query("CREATE TABLE `" . TABLE_MAIL_AUTORESPONDER . "` ( + `email` varchar(255) NOT NULL default '', + `message` text NOT NULL, + `enabled` tinyint(1) NOT NULL default '0', + `subject` varchar(255) NOT NULL default '', + `customerid` int(11) NOT NULL default '0', + PRIMARY KEY (`email`), + KEY `customerid` (`customerid`), + FULLTEXT KEY `message` (`message`) + ) ENGINE=MyISAM"); + $db->query("INSERT INTO `" . TABLE_PANEL_SETTINGS . "` (`settinggroup`, `varname`, `value`) VALUES ('autoresponder', 'autoresponder_active', '0')"); + $db->query("INSERT INTO `" . TABLE_PANEL_SETTINGS . "` (`settinggroup`, `varname`, `value`) VALUES ('autoresponder', 'last_autoresponder_run', '0')"); + + // set new version + + $query = 'UPDATE `%s` SET `value` = \'1.2.19-svn27\' WHERE `settinggroup` = \'panel\' AND `varname` = \'version\''; + $query = sprintf($query, TABLE_PANEL_SETTINGS); + $db->query($query); + $settings['panel']['version'] = '1.2.19-svn27'; + } + + if($settings['panel']['version'] == '1.2.19-svn27') + { + $updatelog->logAction(ADM_ACTION, LOG_WARNING, "Updating from 1.2.19-svn27 to 1.2.19-svn28"); + $db->query("INSERT INTO `" . TABLE_PANEL_SETTINGS . "` (`settinggroup`, `varname`, `value`) VALUES ('admin', 'show_version_login', '0')"); + + // set new version + + $query = 'UPDATE `%s` SET `value` = \'1.2.19-svn28\' WHERE `settinggroup` = \'panel\' AND `varname` = \'version\''; + $query = sprintf($query, TABLE_PANEL_SETTINGS); + $db->query($query); + $settings['panel']['version'] = '1.2.19-svn28'; + } + + if($settings['panel']['version'] == '1.2.19-svn28') + { + $updatelog->logAction(ADM_ACTION, LOG_WARNING, "Updating from 1.2.19-svn28 to 1.2.19-svn29"); + $db->query("INSERT INTO `" . TABLE_PANEL_SETTINGS . "` (`settinggroup`, `varname`, `value`) VALUES ('admin', 'show_version_footer', '0')"); + + // set new version + + $query = 'UPDATE `%s` SET `value` = \'1.2.19-svn29\' WHERE `settinggroup` = \'panel\' AND `varname` = \'version\''; + $query = sprintf($query, TABLE_PANEL_SETTINGS); + $db->query($query); + $settings['panel']['version'] = '1.2.19-svn29'; + } + + if($settings['panel']['version'] == '1.2.19-svn29') + { + $updatelog->logAction(ADM_ACTION, LOG_WARNING, "Updating from 1.2.19-svn29 to 1.2.19-svn30"); + $db->query("INSERT INTO `" . TABLE_PANEL_SETTINGS . "` (`settinggroup`, `varname`, `value`) VALUES ('admin', 'syscp_graphic', 'images/header.gif')"); + + // set new version + + $query = 'UPDATE `%s` SET `value` = \'1.2.19-svn30\' WHERE `settinggroup` = \'panel\' AND `varname` = \'version\''; + $query = sprintf($query, TABLE_PANEL_SETTINGS); + $db->query($query); + $settings['panel']['version'] = '1.2.19-svn30'; + } + + if($settings['panel']['version'] == '1.2.19-svn30') + { + $updatelog->logAction(ADM_ACTION, LOG_WARNING, "Updating from 1.2.19-svn30 to 1.2.19-svn31"); + + //fcgid improvements + + $db->query("CREATE TABLE `" . TABLE_PANEL_PHPCONFIGS . "` ( + `id` int(11) unsigned NOT NULL auto_increment, + `phpsettings` text NOT NULL, + `description` varchar(50) NOT NULL, + PRIMARY KEY (`id`) + ) ENGINE=MyISAM"); + $db->query("INSERT INTO `" . TABLE_PANEL_PHPCONFIGS . "` (`id`, `phpsettings`, `description`) VALUES(1, 'short_open_tag = On\r\nasp_tags = Off\r\nprecision = 14\r\noutput_buffering = 4096\r\nallow_call_time_pass_reference = Off\r\nsafe_mode = {SAFE_MODE}\r\nsafe_mode_gid = Off\r\nsafe_mode_include_dir = \"{PEAR_DIR}\"\r\nsafe_mode_allowed_env_vars = PHP_\r\nsafe_mode_protected_env_vars = LD_LIBRARY_PATH\r\nopen_basedir = \"{OPEN_BASEDIR}\"\r\ndisable_functions = exec,passthru,shell_exec,system,proc_close,proc_get_status,proc_nice,proc_open,proc_terminate\r\ndisable_classes =\r\nexpose_php = Off\r\nmax_execution_time = 30\r\nmax_input_time = 60\r\nmemory_limit = 16M\r\npost_max_size = 16M\r\nerror_reporting = E_ALL & ~E_NOTICE\r\ndisplay_errors = On\r\ndisplay_startup_errors = Off\r\nlog_errors = On\r\nlog_errors_max_len = 1024\r\nignore_repeated_errors = Off\r\nignore_repeated_source = Off\r\nreport_memleaks = On\r\ntrack_errors = Off\r\nhtml_errors = Off\r\nvariables_order = \"GPCS\"\r\nregister_globals = Off\r\nregister_argc_argv = Off\r\ngpc_order = \"GPC\"\r\nmagic_quotes_gpc = Off\r\nmagic_quotes_runtime = Off\r\nmagic_quotes_sybase = Off\r\ninclude_path = \".:{PEAR_DIR}\"\r\nenable_dl = Off\r\nfile_uploads = On\r\nupload_tmp_dir = \"{TMP_DIR}\"\r\nupload_max_filesize = 32M\r\nallow_url_fopen = Off\r\nsendmail_path = \"/usr/sbin/sendmail -t -f {CUSTOMER_EMAIL}\"\r\nsession.save_handler = files\r\nsession.save_path = \"{TMP_DIR}\"\r\nsession.use_cookies = 1\r\nsession.name = PHPSESSID\r\nsession.auto_start = 0\r\nsession.cookie_lifetime = 0\r\nsession.cookie_path = /\r\nsession.cookie_domain =\r\nsession.serialize_handler = php\r\nsession.gc_probability = 1\r\nsession.gc_divisor = 1000\r\nsession.gc_maxlifetime = 1440\r\nsession.bug_compat_42 = 0\r\nsession.bug_compat_warn = 1\r\nsession.referer_check =\r\nsession.entropy_length = 16\r\nsession.entropy_file = /dev/urandom\r\nsession.cache_limiter = nocache\r\nsession.cache_expire = 180\r\nsession.use_trans_sid = 0\r\nsuhosin.simulation = Off\r\nsuhosin.mail.protect = 1\r\n', 'Default Config')"); + $db->query("ALTER TABLE `" . TABLE_PANEL_DOMAINS . "` ADD `phpsettingid` INT( 11 ) UNSIGNED NOT NULL DEFAULT '1'"); + $db->query("INSERT INTO `" . TABLE_PANEL_SETTINGS . "` (`settinggroup`, `varname`, `value`) VALUES('system', 'mod_fcgid_wrapper', '0')"); + $db->query("INSERT INTO `" . TABLE_PANEL_SETTINGS . "` (`settinggroup`, `varname`, `value`) VALUES('system', 'mod_fcgid_starter', '0')"); + $db->query("INSERT INTO `" . TABLE_PANEL_SETTINGS . "` (`settinggroup`, `varname`, `value`) VALUES('system', 'mod_fcgid_peardir', '/usr/share/php/:/usr/share/php5/')"); + + // set new version + + $query = 'UPDATE `%s` SET `value` = \'1.2.19-svn31\' WHERE `settinggroup` = \'panel\' AND `varname` = \'version\''; + $query = sprintf($query, TABLE_PANEL_SETTINGS); + $db->query($query); + $settings['panel']['version'] = '1.2.19-svn31'; + } + + if($settings['panel']['version'] == '1.2.19-svn31') + { + $updatelog->logAction(ADM_ACTION, LOG_WARNING, "Updating from 1.2.19-svn31 to 1.2.19-svn32"); + $db->query("INSERT INTO `" . TABLE_PANEL_SETTINGS . "` (`settinggroup`, `varname`, `value`) VALUES('system', 'index_file_extension', 'html');"); + + // set new version + + $query = 'UPDATE `%s` SET `value` = \'1.2.19-svn32\' WHERE `settinggroup` = \'panel\' AND `varname` = \'version\''; + $query = sprintf($query, TABLE_PANEL_SETTINGS); + $db->query($query); + $settings['panel']['version'] = '1.2.19-svn32'; + } + + if($settings['panel']['version'] == '1.2.19-svn32') + { + $updatelog->logAction(ADM_ACTION, LOG_WARNING, "Updating from 1.2.19-svn32 to 1.2.19-svn33"); + $db->query("ALTER TABLE `" . TABLE_PANEL_DOMAINS . "` ADD `dkim_id` INT( 11 ) UNSIGNED NOT NULL AFTER `dkim`, ADD `dkim_privkey` TEXT NOT NULL AFTER `dkim_id`, ADD `dkim_pubkey` TEXT NOT NULL AFTER `dkim_privkey`"); + $db->query("DROP TABLE IF EXISTS `mail_dkim`"); + + // set new version + + $query = 'UPDATE `%s` SET `value` = \'1.2.19-svn33\' WHERE `settinggroup` = \'panel\' AND `varname` = \'version\''; + $query = sprintf($query, TABLE_PANEL_SETTINGS); + $db->query($query); + $settings['panel']['version'] = '1.2.19-svn33'; + } + + if($settings['panel']['version'] == '1.2.19-svn33') + { + $updatelog->logAction(ADM_ACTION, LOG_WARNING, "Updating from 1.2.19-svn33 to 1.2.19-svn34"); + $db->query("DELETE FROM `" . TABLE_PANEL_SETTINGS . "` WHERE `settinggroup` = 'system' AND `varname` = 'userdns'"); + $db->query("DELETE FROM `" . TABLE_PANEL_SETTINGS . "` WHERE `settinggroup` = 'system' AND `varname` = 'customerdns'"); + $db->query("DROP TABLE IF EXISTS `panel_dns`"); + + // set new version + + $query = 'UPDATE `%s` SET `value` = \'1.2.19-svn34\' WHERE `settinggroup` = \'panel\' AND `varname` = \'version\''; + $query = sprintf($query, TABLE_PANEL_SETTINGS); + $db->query($query); + $settings['panel']['version'] = '1.2.19-svn34'; + } + + if($settings['panel']['version'] == '1.2.19-svn34') + { + $updatelog->logAction(ADM_ACTION, LOG_WARNING, "Updating from 1.2.19-svn34 to 1.2.19-svn35"); + $db->query("INSERT INTO `" . TABLE_PANEL_SETTINGS . "` (`settinggroup`, `varname`, `value`) VALUES ('aps', 'items_per_page', '20')"); + $db->query("INSERT INTO `" . TABLE_PANEL_SETTINGS . "` (`settinggroup`, `varname`, `value`) VALUES ('aps', 'upload_fields', '5')"); + $db->query("INSERT INTO `" . TABLE_PANEL_SETTINGS . "` (`settinggroup`, `varname`, `value`) VALUES ('aps', 'aps_active', '0')"); + $db->query("INSERT INTO `" . TABLE_PANEL_SETTINGS . "` (`settinggroup`, `varname`, `value`) VALUES ('aps', 'php-extension', '')"); + $db->query("INSERT INTO `" . TABLE_PANEL_SETTINGS . "` (`settinggroup`, `varname`, `value`) VALUES ('aps', 'php-configuration', '')"); + $db->query("INSERT INTO `" . TABLE_PANEL_SETTINGS . "` (`settinggroup`, `varname`, `value`) VALUES ('aps', 'webserver-htaccess', '')"); + $db->query("INSERT INTO `" . TABLE_PANEL_SETTINGS . "` (`settinggroup`, `varname`, `value`) VALUES ('aps', 'php-function', '')"); + $db->query("INSERT INTO `" . TABLE_PANEL_SETTINGS . "` (`settinggroup`, `varname`, `value`) VALUES ('aps', 'webserver-module', '')"); + $db->query("CREATE TABLE IF NOT EXISTS `" . TABLE_APS_INSTANCES . "` ( + `ID` int(4) NOT NULL auto_increment, + `CustomerID` int(4) NOT NULL, + `PackageID` int(4) NOT NULL, + `Status` int(4) NOT NULL, + PRIMARY KEY (`ID`) + ) ENGINE=MyISAM"); + $db->query("CREATE TABLE IF NOT EXISTS `" . TABLE_APS_PACKAGES . "` ( + `ID` int(4) NOT NULL auto_increment, + `Path` varchar(500) NOT NULL, + `Name` varchar(500) NOT NULL, + `Version` varchar(20) NOT NULL, + `Release` int(4) NOT NULL, + `Status` int(1) NOT NULL default '1', + PRIMARY KEY (`ID`) + ) ENGINE=MyISAM"); + $db->query("CREATE TABLE IF NOT EXISTS `" . TABLE_APS_SETTINGS . "` ( + `ID` int(4) NOT NULL auto_increment, + `InstanceID` int(4) NOT NULL, + `Name` varchar(250) NOT NULL, + `Value` varchar(250) NOT NULL, + PRIMARY KEY (`ID`) + ) ENGINE=MyISAM"); + $db->query("CREATE TABLE IF NOT EXISTS `" . TABLE_APS_TASKS . "` ( + `ID` int(4) NOT NULL auto_increment, + `InstanceID` int(4) NOT NULL, + `Task` int(4) NOT NULL, + PRIMARY KEY (`ID`) + ) ENGINE=MyISAM"); + $db->query("CREATE TABLE IF NOT EXISTS `" . TABLE_APS_TEMP_SETTINGS . "` ( + `ID` int(4) NOT NULL auto_increment, + `PackageID` int(4) NOT NULL, + `CustomerID` int(4) NOT NULL, + `Name` varchar(250) NOT NULL, + `Value` varchar(250) NOT NULL, + PRIMARY KEY (`ID`) + ) ENGINE=MyISAM"); + + // set new version + + $query = 'UPDATE `%s` SET `value` = \'1.2.19-svn35\' WHERE `settinggroup` = \'panel\' AND `varname` = \'version\''; + $query = sprintf($query, TABLE_PANEL_SETTINGS); + $db->query($query); + $settings['panel']['version'] = '1.2.19-svn35'; + } + + if($settings['panel']['version'] == '1.2.19-svn35') + { + $updatelog->logAction(ADM_ACTION, LOG_WARNING, "Updating from 1.2.19-svn35 to 1.2.19-svn36"); + $db->query("ALTER TABLE `" . TABLE_PANEL_DOMAINS . "` ADD `mod_fcgid_starter` INT( 4 ) NULL DEFAULT '-1'"); + $db->query("ALTER TABLE `" . TABLE_PANEL_ADMINS . "` ADD `can_manage_aps_packages` TINYINT( 1 ) NOT NULL DEFAULT '1'"); + + // set new version + + $query = 'UPDATE `%s` SET `value` = \'1.2.19-svn36\' WHERE `settinggroup` = \'panel\' AND `varname` = \'version\''; + $query = sprintf($query, TABLE_PANEL_SETTINGS); + $db->query($query); + $settings['panel']['version'] = '1.2.19-svn36'; + } + + if($settings['panel']['version'] == '1.2.19-svn36') + { + $updatelog->logAction(ADM_ACTION, LOG_WARNING, "Updating from 1.2.19-svn36 to 1.2.19-svn37"); + $db->query("INSERT INTO `" . TABLE_PANEL_SETTINGS . "` (`settinggroup`, `varname`, `value`) VALUES ('system', 'realtime_port', '0')"); + $db->query("INSERT INTO `" . TABLE_PANEL_SETTINGS . "` (`settinggroup`, `varname`, `value`) VALUES ('session', 'allow_multiple_login', '0')"); + $db->query("INSERT INTO `" . TABLE_PANEL_SETTINGS . "` (`settinggroup`, `varname`, `value`) VALUES ('panel', 'allow_domain_change_admin', '0')"); + $db->query("INSERT INTO `" . TABLE_PANEL_SETTINGS . "` (`settinggroup`, `varname`, `value`) VALUES ('panel', 'allow_domain_change_customer', '0')"); + + // set new version + + $query = 'UPDATE `%s` SET `value` = \'1.2.19-svn37\' WHERE `settinggroup` = \'panel\' AND `varname` = \'version\''; + $query = sprintf($query, TABLE_PANEL_SETTINGS); + $db->query($query); + $settings['panel']['version'] = '1.2.19-svn37'; + } + + if($settings['panel']['version'] == '1.2.19-svn37') + { + $updatelog->logAction(ADM_ACTION, LOG_WARNING, "Updating from 1.2.19-svn37 to 1.2.19-svn38"); + $db->query("ALTER TABLE `" . TABLE_PANEL_PHPCONFIGS . "` ADD `binary` VARCHAR( 255 ) NOT NULL, ADD `file_extensions` VARCHAR( 255 ) NOT NULL, ADD `mod_fcgid_starter` int(4) NOT NULL DEFAULT '-1', ADD `mod_fcgid_maxrequests` int(4) NOT NULL DEFAULT '-1'"); + $db->query("ALTER TABLE `" . TABLE_PANEL_DOMAINS . "` ADD `mod_fcgid_maxrequests` INT( 4 ) NULL DEFAULT '-1'"); + $db->query("UPDATE `" . TABLE_PANEL_PHPCONFIGS . "` SET `binary` = '/usr/bin/php-cgi', `file_extensions` = 'php'"); + $db->query("INSERT INTO `" . TABLE_PANEL_SETTINGS . "` (`settinggroup`, `varname`, `value`) VALUES('system', 'mod_fcgid_maxrequests', '250')"); + + // set new version + + $query = 'UPDATE `%s` SET `value` = \'1.2.19-svn38\' WHERE `settinggroup` = \'panel\' AND `varname` = \'version\''; + $query = sprintf($query, TABLE_PANEL_SETTINGS); + $db->query($query); + $settings['panel']['version'] = '1.2.19-svn38'; + } + + if($settings['panel']['version'] == '1.2.19-svn38') + { + $updatelog->logAction(ADM_ACTION, LOG_WARNING, "Updating from 1.2.19-svn38 to 1.2.19-svn39"); + $db->query("ALTER TABLE `" . TABLE_PANEL_ADMINS . "` ADD `aps_packages` INT( 5 ) NOT NULL DEFAULT '0', ADD `aps_packages_used` INT( 5 ) NOT NULL DEFAULT '0'"); + $db->query("ALTER TABLE `" . TABLE_PANEL_CUSTOMERS . "` ADD `aps_packages` INT( 5 ) NOT NULL DEFAULT '0', ADD `aps_packages_used` INT( 5 ) NOT NULL DEFAULT '0'"); + + //give admins which can see all customers and domains plus change serversettings the ability to have unlimited aps instances + + $admins = $db->query("SELECT `adminid` FROM `" . TABLE_PANEL_ADMINS . "` WHERE `customers_see_all` = 1 AND `domains_see_all` = 1 AND `change_serversettings` = 1"); + + while($admin = $db->fetch_array($admins)) + { + $db->query("UPDATE `" . TABLE_PANEL_ADMINS . "` SET `aps_packages` = -1 WHERE `adminid` = '" . $admin['adminid'] . "'"); + } + + // set new version + + $query = 'UPDATE `%s` SET `value` = \'1.2.19-svn39\' WHERE `settinggroup` = \'panel\' AND `varname` = \'version\''; + $query = sprintf($query, TABLE_PANEL_SETTINGS); + $db->query($query); + $settings['panel']['version'] = '1.2.19-svn39'; + } + + if($settings['panel']['version'] == '1.2.19-svn39') + { + $updatelog->logAction(ADM_ACTION, LOG_WARNING, "Updating from 1.2.19-svn39 to 1.2.19-svn40"); + $db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `varname` = 'webserver' WHERE `settinggroup` = 'system' AND `varname` = 'apacheversion'"); + + // set new version + + $query = 'UPDATE `%s` SET `value` = \'1.2.19-svn40\' WHERE `settinggroup` = \'panel\' AND `varname` = \'version\''; + $query = sprintf($query, TABLE_PANEL_SETTINGS); + $db->query($query); + $settings['panel']['version'] = '1.2.19-svn40'; + } + + if($settings['panel']['version'] == '1.2.19-svn40') + { + $updatelog->logAction(ADM_ACTION, LOG_WARNING, "Updating from 1.2.19-svn40 to 1.2.19-svn41"); + + // set new version + + $query = 'UPDATE `%s` SET `value` = \'1.2.19-svn41\' WHERE `settinggroup` = \'panel\' AND `varname` = \'version\''; + $query = sprintf($query, TABLE_PANEL_SETTINGS); + $db->query($query); + $settings['panel']['version'] = '1.2.19-svn41'; + } + + if($settings['panel']['version'] == '1.2.19-svn41') + { + $updatelog->logAction(ADM_ACTION, LOG_WARNING, "Updating from 1.2.19-svn41 to 1.2.19-svn42"); + $db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `value` = '100' WHERE `settinggroup` = 'system' AND `varname` = 'mail_quota' AND `value` = '104857600'"); + + // set new version + + $query = 'UPDATE `%s` SET `value` = \'1.2.19-svn42\' WHERE `settinggroup` = \'panel\' AND `varname` = \'version\''; + $query = sprintf($query, TABLE_PANEL_SETTINGS); + $db->query($query); + $settings['panel']['version'] = '1.2.19-svn42'; + } + + if($settings['panel']['version'] == '1.2.19-svn42') + { + $updatelog->logAction(ADM_ACTION, LOG_WARNING, "Updating from 1.2.19-svn42 to 1.2.19-svn43"); + + // Going to fix double slashes in the database + + $result = $db->query("SELECT * FROM `" . TABLE_PANEL_HTACCESS . "` WHERE `path` LIKE '%//%';"); + + while($row = $db->fetch_array($result)) + { + $row['path'] = makeCorrectDir($row['path']); + $db->query("UPDATE `" . TABLE_PANEL_HTACCESS . "` SET `path` = '" . $db->escape($row['path']) . "' WHERE `id` = '" . $row['id'] . "';"); + } + + $result = $db->query("SELECT * FROM `" . TABLE_PANEL_HTPASSWDS . "` WHERE `path` LIKE '%//%';"); + + while($row = $db->fetch_array($result)) + { + $row['path'] = makeCorrectDir($row['path']); + $db->query("UPDATE `" . TABLE_PANEL_HTPASSWDS . "` SET `path` = '" . $db->escape($row['path']) . "' WHERE `id` = '" . $row['id'] . "';"); + } + + $result = $db->query("SELECT * FROM `" . TABLE_PANEL_DOMAINS . "` WHERE `documentroot` LIKE '%//%';"); + + while($row = $db->fetch_array($result)) + { + if(!preg_match("#^https?://#i", $row['documentroot'])) + { + $row['documentroot'] = makeCorrectDir($row['documentroot']); + $db->query("UPDATE `" . TABLE_PANEL_DOMAINS . "` SET `documentroot` = '" . $db->escape($row['documentroot']) . "' WHERE `id` = '" . $row['id'] . "';"); + } + } + + // set new version + + $query = 'UPDATE `%s` SET `value` = \'1.2.19-svn43\' WHERE `settinggroup` = \'panel\' AND `varname` = \'version\''; + $query = sprintf($query, TABLE_PANEL_SETTINGS); + $db->query($query); + $settings['panel']['version'] = '1.2.19-svn43'; + } + + if($settings['panel']['version'] == '1.2.19-svn43') + { + $updatelog->logAction(ADM_ACTION, LOG_WARNING, "Updating from 1.2.19-svn43 to 1.4"); + + // set new version + + $query = 'UPDATE `%s` SET `value` = \'1.4\' WHERE `settinggroup` = \'panel\' AND `varname` = \'version\''; + $query = sprintf($query, TABLE_PANEL_SETTINGS); + $db->query($query); + $settings['panel']['version'] = '1.4'; + } +} + +// php filter-extension check + + + +?> \ No newline at end of file diff --git a/install/updates/1.4/update_1.4.inc.php b/install/updates/1.4/update_1.4.inc.php new file mode 100644 index 0000000000..3adef8b428 --- /dev/null +++ b/install/updates/1.4/update_1.4.inc.php @@ -0,0 +1,118 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package System + * @version $Id: update_1.4.inc.php 2722 2009-05-04 18:59:28Z flo $ + */ + +if($settings['panel']['version'] == '1.4') +{ + $updatelog->logAction(ADM_ACTION, LOG_WARNING, "Updating from 1.4 to 1.4-svn1"); + + // Going to fix the stuff the update 1.2.19-svn42 to 1.2.19-svn43 broke + + $result = $db->query("SELECT * FROM `" . TABLE_PANEL_DOMAINS . "` WHERE `documentroot` LIKE 'http%';"); + + while($row = $db->fetch_array($result)) + { + if(preg_match("#(https?)://?(.*)#i", $row['documentroot'], $matches)) + { + $row['documentroot'] = $matches[1] . "://" . $matches[2]; + $db->query("UPDATE `" . TABLE_PANEL_DOMAINS . "` SET `documentroot` = '" . $db->escape($row['documentroot']) . "' WHERE `id` = '" . $row['id'] . "';"); + } + } + + // set new version + + $query = 'UPDATE `%s` SET `value` = \'1.4-svn1\' WHERE `settinggroup` = \'panel\' AND `varname` = \'version\''; + $query = sprintf($query, TABLE_PANEL_SETTINGS); + $db->query($query); + $settings['panel']['version'] = '1.4-svn1'; +} + +if($settings['panel']['version'] == '1.4-svn1') +{ + $updatelog->logAction(ADM_ACTION, LOG_WARNING, "Updating from 1.4-svn1 to 1.4.1"); + + // set new version + + $query = 'UPDATE `%s` SET `value` = \'1.4.1\' WHERE `settinggroup` = \'panel\' AND `varname` = \'version\''; + $query = sprintf($query, TABLE_PANEL_SETTINGS); + $db->query($query); + $settings['panel']['version'] = '1.4.1'; +} + +if($settings['panel']['version'] == '1.4.1') +{ + $updatelog->logAction(ADM_ACTION, LOG_WARNING, "Updating from 1.4.1 to 1.4.1-svn1"); + + // give at least ONE admin the permission to edit phpsettings, bug #1031 + + $cntCanEditPHP = $db->query_first("SELECT COUNT(`caneditphpsettings`) as `cnt` FROM `" . TABLE_PANEL_ADMINS . "` WHERE `caneditphpsettings` = '1'"); + + if($cntCanEditPHP['cnt'] <= 0) + { + // none of the admins can edit php-settings, + //so we give those who can edit serversettings the right to edit php-settings + + $db->query("UPDATE `" . TABLE_PANEL_ADMINS . "` SET `caneditphpsettings` = '1' WHERE `change_serversettings` = '1'"); + } + + // set new version + + $query = 'UPDATE `%s` SET `value` = \'1.4.1-svn1\' WHERE `settinggroup` = \'panel\' AND `varname` = \'version\''; + $query = sprintf($query, TABLE_PANEL_SETTINGS); + $db->query($query); + $settings['panel']['version'] = '1.4.1-svn1'; +} + +if($settings['panel']['version'] == '1.4.1-svn1') +{ + $updateto = '1.4.1-svn2'; + $updatelog->logAction(ADM_ACTION, LOG_WARNING, "Updating from " . $settings['panel']['version'] . " to " . $updateto); + + // set new version + + $query = 'UPDATE `%s` SET `value` = \'' . $updateto . '\' WHERE `settinggroup` = \'panel\' AND `varname` = \'version\''; + $query = sprintf($query, TABLE_PANEL_SETTINGS); + $db->query($query); + $settings['panel']['version'] = $updateto; +} + +if($settings['panel']['version'] == '1.4.1-svn2') +{ + $updateto = '1.4.1-svn3'; + $updatelog->logAction(ADM_ACTION, LOG_WARNING, "Updating from " . $settings['panel']['version'] . " to " . $updateto); + + // set new version + + $query = 'UPDATE `%s` SET `value` = \'' . $updateto . '\' WHERE `settinggroup` = \'panel\' AND `varname` = \'version\''; + $query = sprintf($query, TABLE_PANEL_SETTINGS); + $db->query($query); + $settings['panel']['version'] = $updateto; +} + +if($settings['panel']['version'] == '1.4.1-svn3') +{ + $updateto = '1.4.2'; + $updatelog->logAction(ADM_ACTION, LOG_WARNING, "Updating from " . $settings['panel']['version'] . " to " . $updateto); + + // set new version + + $query = 'UPDATE `%s` SET `value` = \'' . $updateto . '\' WHERE `settinggroup` = \'panel\' AND `varname` = \'version\''; + $query = sprintf($query, TABLE_PANEL_SETTINGS); + $db->query($query); + $settings['panel']['version'] = $updateto; +} + +?> \ No newline at end of file diff --git a/install/updates/froxlor/upgrade_syscp.inc.php b/install/updates/froxlor/upgrade_syscp.inc.php new file mode 100644 index 0000000000..553e8e6a3d --- /dev/null +++ b/install/updates/froxlor/upgrade_syscp.inc.php @@ -0,0 +1,198 @@ + + * @license GPLv2 http://files.froxlor.org/misc/COPYING.txt + * @package System + * @version $Id: $ + */ + + +$updateto = '1.0'; +$frontend = 'froxlor'; + +$updatelog->logAction(ADM_ACTION, LOG_WARNING, "Upgrading SysCP ".$settings['panel']['version']." to Froxlor ". $updateto); + +// set new version +$query = 'UPDATE `%s` SET `value` = \'' . $updateto . '\' WHERE `settinggroup` = \'panel\' AND `varname` = \'version\''; +$query = sprintf($query, TABLE_PANEL_SETTINGS); +$db->query($query); +$settings['panel']['version'] = $updateto; +// add field frontend +$db->query("INSERT INTO `" . TABLE_PANEL_SETTINGS . "` (`settinggroup`, `varname`, `value`) VALUES ('system','frontend','froxlor')"); + +/* + * this is the main upgrade + */ +if($settings['panel']['frontend'] == 'froxlor' +&& $settings['panel']['version'] == '1.0') +{ + + /* + * add missing database-updates if necessary (old: update/update_database.php + */ + if(!isset($settings['system']['dbversion']) || $settings['system']['dbversion'] < '1') + { + $db->query("ALTER TABLE `panel_databases` ADD `dbserver` INT( 11 ) UNSIGNED NOT NULL default '0';"); + } + if(!isset($settings['system']['dbversion']) || $settings['system']['dbversion'] < '2') + { + $db->query("ALTER TABLE `panel_ipsandports` CHANGE `ssl_cert` `ssl_cert_file` VARCHAR( 255 ) NOT NULL, + ADD `ssl_key_file` VARCHAR( 255 ) NOT NULL, + ADD `ssl_ca_file` VARCHAR( 255 ) NOT NULL, + ADD `default_vhostconf_domain` TEXT NOT NULL;"); + + $db->query("INSERT INTO `panel_settings` SET `settinggroup` = 'system', `varname` = 'ssl_key_file', `value` = '';"); + $db->query("INSERT INTO `panel_settings` SET `settinggroup` = 'system', `varname` = 'ssl_ca_file', `value` = '';"); + } + // eof(lostuff) + + /* + * remove billing tables in database + */ + define('TABLE_BILLING_INVOICES', 'billing_invoices'); + define('TABLE_BILLING_INVOICES_ADMINS', 'billing_invoices_admins'); + define('TABLE_BILLING_INVOICE_CHANGES', 'billing_invoice_changes'); + define('TABLE_BILLING_INVOICE_CHANGES_ADMINS', 'billing_invoice_changes_admins'); + define('TABLE_BILLING_SERVICE_CATEGORIES', 'billing_service_categories'); + define('TABLE_BILLING_SERVICE_CATEGORIES_ADMINS', 'billing_service_categories_admins'); + define('TABLE_BILLING_SERVICE_DOMAINS_TEMPLATES', 'billing_service_domains_templates'); + define('TABLE_BILLING_SERVICE_OTHER', 'billing_service_other'); + define('TABLE_BILLING_SERVICE_OTHER_TEMPLATES', 'billing_service_other_templates'); + define('TABLE_BILLING_TAXCLASSES', 'billing_taxclasses'); + define('TABLE_BILLING_TAXRATES', 'billing_taxrates'); + + $db->query("DROP TABLE `" . TABLE_BILLING_SERVICE_CATEGORIES . "`;"); + $db->query("DROP TABLE `" . TABLE_BILLING_SERVICE_CATEGORIES_ADMINS . "`;"); + $db->query("DROP TABLE `" . TABLE_BILLING_SERVICE_DOMAINS_TEMPLATES . "`;"); + $db->query("DROP TABLE `" . TABLE_BILLING_SERVICE_OTHER . "`;"); + $db->query("DROP TABLE `" . TABLE_BILLING_SERVICE_OTHER_TEMPLATES . "`;"); + $db->query("DROP TABLE `" . TABLE_BILLING_TAXCLASSES . "`;"); + $db->query("DROP TABLE `" . TABLE_BILLING_TAXRATES . "`;"); + $db->query("DROP TABLE `" . TABLE_BILLING_INVOICES . "`;"); + $db->query("DROP TABLE `" . TABLE_BILLING_INVOICES_ADMINS . "`;"); + $db->query("DROP TABLE `" . TABLE_BILLING_INVOICE_CHANGES . "`;"); + $db->query("DROP TABLE `" . TABLE_BILLING_INVOICE_CHANGES_ADMINS . "`;"); + $db->query("DROP TABLE `" . TABLE_PANEL_DISKSPACE . "`;"); + $db->query("DROP TABLE `" . TABLE_PANEL_DISKSPACE_ADMINS . "`;"); + + /* + * update panel_domains, panel_customers, panel_admins + */ + $db->query("ALTER TABLE `" . TABLE_PANEL_ADMINS . "` + DROP `firstname`, + DROP `title`, + DROP `company`, + DROP `street`, + DROP `zipcode`, + DROP `city`, + DROP `country`, + DROP `phone`, + DROP `fax`, + DROP `taxid`, + DROP `contract_date`, + DROP `contract_number`, + DROP `contract_details`, + DROP `included_domains_qty`, + DROP `included_domains_tld`, + DROP `additional_traffic_fee`, + DROP `additional_traffic_unit`, + DROP `additional_diskspace_fee`, + DROP `additional_diskspace_unit`, + DROP `taxclass`, + DROP `setup_fee`, + DROP `interval_fee`, + DROP `interval_length`, + DROP `interval_type`, + DROP `interval_payment`, + DROP `calc_tax`, + DROP `term_of_payment`, + DROP `payment_every`, + DROP `payment_method`, + DROP `bankaccount_holder`, + DROP `bankaccount_number`, + DROP `bankaccount_blz`, + DROP `bankaccount_bank`, + DROP `service_active`, + DROP `servicestart_date`, + DROP `serviceend_date`, + DROP `lastinvoiced_date`, + DROP `lastinvoiced_date_traffic`, + DROP `lastinvoiced_date_diskspace`, + DROP `customer_categories_once`, + DROP `customer_categories_period`, + DROP `invoice_fee`, + DROP `invoice_fee_hosting`, + DROP `invoice_fee_hosting_customers`, + DROP `invoice_fee_domains`, + DROP `invoice_fee_traffic`, + DROP `invoice_fee_diskspace`, + DROP `invoice_fee_other`, + DROP `edit_billingdata`;"); + + $db->query("ALTER TABLE `" . TABLE_PANEL_CUSTOMERS . "` + DROP `taxid`, + DROP `title`, + DROP `country`, + DROP `additional_service_description`, + DROP `contract_date`, + DROP `contract_number`, + DROP `contract_details`, + DROP `included_domains_qty`, + DROP `included_domains_tld`, + DROP `additional_traffic_fee`, + DROP `additional_traffic_unit`, + DROP `additional_diskspace_fee`, + DROP `additional_diskspace_unit`, + DROP `taxclass`, + DROP `setup_fee`, + DROP `interval_fee`, + DROP `interval_length`, + DROP `interval_type`, + DROP `interval_payment`, + DROP `calc_tax`, + DROP `term_of_payment`, + DROP `payment_every`, + DROP `payment_method`, + DROP `bankaccount_holder`, + DROP `bankaccount_number`, + DROP `bankaccount_blz`, + DROP `bankaccount_bank`, + DROP `service_active`, + DROP `servicestart_date`, + DROP `serviceend_date`, + DROP `lastinvoiced_date`, + DROP `lastinvoiced_date_traffic`, + DROP `lastinvoiced_date_diskspace`, + DROP `invoice_fee`, + DROP `invoice_fee_hosting`, + DROP `invoice_fee_domains`, + DROP `invoice_fee_traffic`, + DROP `invoice_fee_diskspace`, + DROP `invoice_fee_other`;"); + $db->query("ALTER TABLE `panel_domains` + DROP `taxclass`, + DROP `setup_fee`, + DROP `interval_fee`, + DROP `interval_length`, + DROP `interval_type`, + DROP `interval_payment`, + DROP `service_active`, + DROP `servicestart_date`, + DROP `serviceend_date`, + DROP `lastinvoiced_date`;"); + + $db->query("DELETE FROM `" . TABLE_PANEL_SETTINGS . "` + WHERE `settinggroup` = 'billing';"); + +} + +?> diff --git a/install/updatesql.php b/install/updatesql.php new file mode 100644 index 0000000000..ebc91b93f5 --- /dev/null +++ b/install/updatesql.php @@ -0,0 +1,130 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package System + * @version $Id: updatesql.php 2724 2009-06-07 14:18:02Z flo $ + */ + +/** + * Includes the Usersettings eg. MySQL-Username/Passwort etc. + */ + +require ('../lib/userdata.inc.php'); + +/** + * Includes the MySQL-Tabledefinitions etc. + */ + +require ('../lib/tables.inc.php'); + +/** + * Inlcudes the MySQL-Connection-Class + */ + +require ('../lib/class_mysqldb.php'); +$db = new db($sql['host'], $sql['user'], $sql['password'], $sql['db']); +unset($sql['password']); +unset($db->password); +$result = $db->query("SELECT `settinggroup`, `varname`, `value` FROM `" . TABLE_PANEL_SETTINGS . "`"); + +while($row = $db->fetch_array($result)) +{ + $settings[$row['settinggroup']][$row['varname']] = $row['value']; +} + +unset($row); +unset($result); + +/** + * Inlcudes the Functions + */ + +require ('../lib/functions.php'); + +$updatelog = SysCPLogger::getInstanceOf(array('loginname' => 'updater'), $db, $settings); + +/* + * since froxlor, we have to check if there's still someone + * out there using syscp and needs to upgrade + */ +if(!isset($settings['panel']['frontend']) + || $settings['panel']['frontend'] != 'froxlor') +{ + /** + * First case: We are updating from a version < 1.0.10 + */ + + if(!isset($settings['panel']['version']) + || (substr($settings['panel']['version'], 0, 3) == '1.0' && $settings['panel']['version'] != '1.0.10')) + { + $updatelog->logAction(ADM_ACTION, LOG_WARNING, "Updating from 1.0 to 1.0.10"); + include_once ('./updates/1.0/update_1.0_1.0.10.inc.php'); + } + + /** + * Second case: We are updating from version = 1.0.10 + */ + + if($settings['panel']['version'] == '1.0.10') + { + $updatelog->logAction(ADM_ACTION, LOG_WARNING, "Updating from 1.0.10 to 1.2-beta1"); + include_once ('./updates/1.0/update_1.0.10_1.2-beta1.inc.php'); + } + + /** + * Third case: We are updating from a version > 1.2-beta1 + */ + + if(substr($settings['panel']['version'], 0, 3) == '1.2') + { + $updatelog->logAction(ADM_ACTION, LOG_WARNING, "Updating from 1.2-beta1 to 1.2.19"); + include_once ('./updates/1.2/update_1.2-beta1_1.2.19.inc.php'); + } + + /** + * 4th case: We are updating from 1.2.19 to 1.2.20 (prolly the last from the 1.2.x series) + */ + + if(substr($settings['panel']['version'], 0, 6) == '1.2.19') + { + $updatelog->logAction(ADM_ACTION, LOG_WARNING, "Updating from 1.2.19 to 1.4"); + include_once ('./updates/1.2/update_1.2.19_1.4.inc.php'); + } + + /** + * 5th case: We are updating from a version >= 1.4 + */ + + if(substr($settings['panel']['version'], 0, 3) == '1.4') + { + $updatelog->logAction(ADM_ACTION, LOG_WARNING, "Updating from 1.4"); + include_once ('./updates/1.4/update_1.4.inc.php'); + } + + /** + * Upgrading SysCP to Froxlor-1.0 + * + * when we reach this part, all necessary updates + * should have been installes automatically by the + * update scripts. + */ + include_once ('./updates/froxlor/upgrade_syscp.inc.php'); + +} + +updateCounters(); +inserttask('1'); +@chmod('../lib/userdata.inc.php', 0440); +header('Location: ../index.php'); + +?> \ No newline at end of file diff --git a/lib/classes/aps/class.ApsInstaller.php b/lib/classes/aps/class.ApsInstaller.php new file mode 100644 index 0000000000..54090107ff --- /dev/null +++ b/lib/classes/aps/class.ApsInstaller.php @@ -0,0 +1,561 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Cron + * @version $Id: class.ApsInstaller.php 2724 2009-06-07 14:18:02Z flo $ + * @todo logging + * run with user uid/gid + * folder truncation/tar all files + */ + +class ApsInstaller extends ApsParser +{ + private $db = false; + private $db_root = false; + private $DomainPath = ''; + private $Domain = ''; + private $RealPath = ''; + private $RootDir = ''; + private $Hosts = ''; + + /** + * constructor of class. setup some basic variables + * + * @param settings array with the global settings from syscp + * @param db instance of the database class from syscp + * @param db_root instance of the database class from syscp with root permissions + */ + + public function __construct($settings, $db, $db_root) + { + $this->db = $db; + $this->db_root = $db_root; + $this->RootDir = dirname(dirname(__FILE__)) . '/'; + $this->Hosts = $settings['system']['mysql_access_host']; + } + + /** + * main function of class which handles all + */ + + public function InstallHandler() + { + chdir($this->RootDir); + $result = $this->db->query('SELECT * FROM `' . TABLE_APS_TASKS . '` AS `t` INNER JOIN `' . TABLE_APS_INSTANCES . '` AS `i` ON `t`.`InstanceID` = `i`.`ID` INNER JOIN `' . TABLE_APS_PACKAGES . '` AS `p` ON `i`.`PackageID` = `p`.`ID` INNER JOIN `' . TABLE_PANEL_CUSTOMERS . '` AS `c` ON `i`.`CustomerID` = `c`.`customerid` WHERE `TASK` NOT IN (' . TASK_SYSTEM_UPDATE . ', ' . TASK_SYSTEM_DOWNLOAD . ')'); + + while($Row = $this->db->fetch_array($result)) + { + //check for existing aps xml file + + if(!file_exists($this->RootDir . 'packages/' . $Row['Path'] . '/APP-META.xml')) + { + $this->db->query('UPDATE `' . TABLE_APS_INSTANCES . '` SET `Status` = ' . INSTANCE_ERROR . ' WHERE `ID` = ' . $this->db->escape($Row['InstanceID'])); + continue; + } + + //get contents and parse them + + $XmlContent = file_get_contents($this->RootDir . 'packages/' . $Row['Path'] . '/APP-META.xml'); + $Xml = new SimpleXMLElement($XmlContent); + + //check for unparseable xml data + + if($Xml == false) + { + $this->db->query('UPDATE `' . TABLE_APS_INSTANCES . '` SET `Status` = ' . INSTANCE_ERROR . ' WHERE `ID` = ' . $this->db->escape($Row['InstanceID'])); + continue; + } + + $Task = $Row['Task']; + $this->DomainPath = ''; + $this->Domain = ''; + $this->RealPath = ''; + + //lock instance so installation cannot be canceled from the panel + + $this->db->query('UPDATE `' . TABLE_APS_INSTANCES . '` SET `Status` = ' . INSTANCE_TASK_ACTIVE . ' WHERE `ID` = ' . $this->db->escape($Row['InstanceID'])); + + //setup environment with data for domain/installation location + + self::PrepareBasics($Row); + + //create database if necessary and setup environment variables + + self::PrepareDatabase($Xml, $Row, $Task); + + //unpack installation scripts and package files if necessary + + if(self::PrepareFiles($Xml, $Row, $Task)) + { + //setup environment variables fetched from installation wizard + + self::PrepareWizardData($Xml, $Row, $Task); + + //run installation scripts from packages + + self::RunInstaller($Xml, $Row, $Task); + } + + //remove installation scripts + + self::CleanupData($Xml, $Row, $Task); + unset($Xml); + } + } + + /** + * run the installation script and log errors if there are some + * + * @param xml instance of a valid xml object with a parsed APP-META.xml file + * @param row current entry from the database for app to handle + * @param task numeric code to specify what to do + * @return success true/error false + */ + + private function RunInstaller($Xml, $Row, $Task) + { + //installation + + if($Task == TASK_INSTALL) + { + //setup right path and run installation script + + chdir($this->RealPath . $this->DomainPath . '/install_scripts/'); + $Return = array(); + $ReturnStatus = 0; + $Return = safe_exec('php ' . escapeshellcmd($this->RealPath . $this->DomainPath . '/install_scripts/configure install'), $ReturnStatus); + + if($ReturnStatus != 0) + { + //write output of script on error into database for admin + + $Buffer = ''; + $Count = 0; + foreach($Return as $Line) + { + $Count+= 1; + $Buffer.= $Line; + + if($Count != count($Return))$Buffer.= "\n"; + } + + //FIXME error logging + + echo ("error : installer\n" . $Buffer . "\n"); + $this->db->query('UPDATE `' . TABLE_APS_INSTANCES . '` SET `Status` = ' . INSTANCE_ERROR . ' WHERE `ID` = ' . $this->db->escape($Row['InstanceID'])); + return false; + } + else + { + //installation succeeded + //chown all files if installtion script has created some new files. otherwise customers cannot edit the files via ftp + + safe_exec('chown ' . (int)$Row['guid'] . ':' . (int)$Row['guid'] . ' -R ' . escapeshellarg($this->RealPath . $this->DomainPath . '/')); + + //update database + + $this->db->query('UPDATE `' . TABLE_APS_INSTANCES . '` SET `Status` = ' . INSTANCE_SUCCESS . ' WHERE `ID` = ' . $this->db->escape($Row['InstanceID'])); + return true; + } + } + } + + /** + * remove installation scripts from filesystem and remove tasks and update the database + * + * @param xml instance of a valid xml object with a parsed APP-META.xml file + * @param row current entry from the database for app to handle + * @param task numeric code to specify what to do + */ + + private function CleanupData($Xml, $Row, $Task) + { + chdir($this->RootDir); + + if($Task == TASK_INSTALL) + { + //cleanup installation + + self::UnlinkRecursive($this->RealPath . $this->DomainPath . '/install_scripts/'); + + //remove task + + $this->db->query('DELETE FROM `' . TABLE_APS_TASKS . '` WHERE `Task` = ' . TASK_INSTALL . ' AND `InstanceID` = ' . $this->db->escape($Row['InstanceID'])); + } + elseif($Task == TASK_REMOVE) + { + //FIXME cleanup installation + //remove files from: $this->RealPath . $this->DomainPath . '/' + //remove permissions + //drop database + + $XmlDb = $Xml->requirements->children('http://apstandard.com/ns/1/db'); + + if($XmlDb->db->id) + { + //database management + + $Database = 'web' . $Row['CustomerID'] . 'aps' . $Row['InstanceID']; + foreach(array_map('trim', explode(',', $this->Hosts)) as $DatabaseHost) + { + $this->db_root->query('REVOKE ALL PRIVILEGES ON * . * FROM `' . $this->db->escape($Database) . '`@`' . $this->db->escape($DatabaseHost) . '`'); + $this->db_root->query('REVOKE ALL PRIVILEGES ON `' . $this->db->escape($Database) . '` . * FROM `' . $this->db->escape($Database) . '`@`' . $this->db->escape($DatabaseHost) . '`'); + $this->db_root->query('DELETE FROM `mysql`.`user` WHERE `User` = "' . $this->db->escape($Database) . '" AND `Host` = "' . $this->db->escape($DatabaseHost) . '"'); + } + + $this->db_root->query('DROP DATABASE IF EXISTS `' . $this->db->escape($Database) . '`'); + $this->db_root->query('FLUSH PRIVILEGES'); + } + + //remove task & delete package instance + settings + + $this->db->query('DELETE FROM `' . TABLE_APS_TASKS . '` WHERE `Task` = ' . TASK_REMOVE . ' AND `InstanceID` = ' . $this->db->escape($Row['InstanceID'])); + $this->db->query('DELETE FROM `' . TABLE_APS_INSTANCES . '` WHERE `ID` = ' . $this->db->escape($Row['InstanceID'])); + $this->db->query('DELETE FROM `' . TABLE_APS_SETTINGS . '` WHERE `InstanceID` = ' . $this->db->escape($Row['InstanceID'])); + } + } + + /** + * setup all environment variables from the wizard, they're all needed by the installation script + * + * @param xml instance of a valid xml object with a parsed APP-META.xml file + * @param row current entry from the database for app to handle + * @param task numeric code to specify what to do + */ + + private function PrepareWizardData($Xml, $Row, $Task) + { + //data collected by wizard + //FIXME install_only parameter/reconfigure + + $result = $this->db->query('SELECT * FROM `' . TABLE_APS_SETTINGS . '` WHERE `InstanceID` = ' . $this->db->escape($Row['InstanceID'])); + + while($Row2 = $this->db->fetch_array($result)) + { + //skip APS internal data + + if($Row2['Name'] == 'main_location' + || $Row2['Name'] == 'main_domain' + || $Row2['Name'] == 'main_database_password' + || $Row2['Name'] == 'license')continue; + putenv('SETTINGS_' . $Row2['Name'] . '=' . $Row2['Value']); + } + } + + /** + * extract all needed files from the aps packages + * + * @param xml instance of a valid xml object with a parsed APP-META.xml file + * @param row current entry from the database for app to handle + * @param task numeric code to specify what to do + * @return success true/error false + */ + + private function PrepareFiles($Xml, $Row, $Task) + { + if($Task == TASK_INSTALL) + { + //FIXME truncate customer directory + //remove files from: $this->RealPath . $this->DomainPath . '/*' + + if(!file_exists($this->RealPath . $this->DomainPath . '/'))mkdir($this->RealPath . $this->DomainPath . '/', 0777, true); + + //extract all files and chown them to the customer guid + + if(self::ExtractZip($this->RootDir . 'packages/' . $Row['Path'] . '/' . $Row['Path'], $Xml->mapping['path'], $this->RealPath . $this->DomainPath . '/') == false + || self::ExtractZip($this->RootDir . 'packages/' . $Row['Path'] . '/' . $Row['Path'], 'scripts', $this->RealPath . $this->DomainPath . '/install_scripts/') == false) + { + $this->db->query('UPDATE `' . TABLE_APS_INSTANCES . '` SET `Status` = ' . INSTANCE_ERROR . ' WHERE `ID` = ' . $this->db->escape($Row['InstanceID'])); + + //FIXME clean up already installed data + //remove files from: $this->RealPath . $this->DomainPath . '/*' + + return false; + } + + safe_exec('chown ' . (int)$Row['guid'] . ':' . (int)$Row['guid'] . ' -R ' . escapeshellarg($this->RealPath . $this->DomainPath . '/')); + } + else + { + if(self::ExtractZip($this->RootDir . 'packages/' . $Row['Path'] . '/' . $Row['Path'], 'scripts', $this->RealPath . $this->DomainPath . '/install_scripts/') == false) + { + $this->db->query('UPDATE `' . TABLE_APS_INSTANCES . '` SET `Status` = ' . INSTANCE_ERROR . ' WHERE `ID` = ' . $this->db->escape($Row['InstanceID'])); + + //clean up already installed data + + self::UnlinkRecursive($this->RealPath . $this->DomainPath . '/install_scripts/'); + return false; + } + + //set right file owner + + safe_exec('chown ' . (int)$Row['guid'] . ':' . (int)$Row['guid'] . ' -R ' . escapeshellarg($this->RealPath . $this->DomainPath . '/')); + } + + //recursive mappings + + self::PrepareMappings($Xml->mapping, $Xml->mapping['url'], $this->RealPath . $this->DomainPath . '/'); + return true; + } + + /** + * setup path environment variables for the installation script + * + * @param parentmapping instance of parsed xml file, current mapping position + * @param url relative path for application specifying the current path within the mapping tree + * @param path absolute path for application specifying the current path within the mapping tree + */ + + private function PrepareMappings($ParentMapping, $Url, $Path) + { + //check for special PHP permissions + //must be done with xpath otherwise check not possible (XML parser problem with attributes) + + $ParentMapping->registerXPathNamespace('p', 'http://apstandard.com/ns/1/php'); + $Result = $ParentMapping->xpath('p:permissions'); + + if($Result[0]['writable'] == 'true') + { + //fixing file permissions to writeable + + if(is_dir($Path)) + { + chmod($Path, 0775); + } + else + { + chmod($Path, 0664); + } + } + + if($Result[0]['readable'] == 'false') + { + //fixing file permissions to non readable + + if(is_dir($Path)) + { + chmod($Path, 0333); + } + else + { + chmod($Path, 0222); + } + } + + //set environment variables + + $EnvVariable = str_replace("/", "_", $Url); + putenv('WEB_' . $EnvVariable . '_DIR=' . $Path); + + //resolve deeper mappings + + foreach($ParentMapping->mapping as $Mapping) + { + //recursive check of other mappings + + if($Url == '/') + { + self::PrepareMappings($Mapping, $Url . $Mapping['url'], $Path . $Mapping['url']); + } + else + { + self::PrepareMappings($Mapping, $Url . '/' . $Mapping['url'], $Path . '/' . $Mapping['url']); + } + } + } + + /** + * setup domain environment variables for the installation script + * + * @param xml instance of a valid xml object with a parsed APP-META.xml file + */ + + private function PrepareBasics($Row) + { + //domain + + $result = $this->db->query('SELECT * FROM `' . TABLE_APS_SETTINGS . '` WHERE `InstanceID` = ' . $this->db->escape($Row['InstanceID']) . ' AND `Name` = "main_domain"'); + $Row3 = $this->db->fetch_array($result); + $result2 = $this->db->query('SELECT * FROM `' . TABLE_PANEL_DOMAINS . '` WHERE `id` = ' . $this->db->escape($Row3['Value'])); + $Row3 = $this->db->fetch_array($result2); + $this->Domain = $Row3['domain']; + $this->RealPath = $Row3['documentroot']; + + //location + + $result3 = $this->db->query('SELECT * FROM `' . TABLE_APS_SETTINGS . '` WHERE `InstanceID` = ' . $this->db->escape($Row['InstanceID']) . ' AND `Name` = "main_location"'); + $Row3 = $this->db->fetch_array($result3); + $this->DomainPath = $Row3['Value']; + + //if application is directly installed on domain remove / at the end + + if($this->DomainPath == '')$this->RealPath = substr($this->RealPath, 0, strlen($this->RealPath) - 1); + + //url environment variables + + putenv('BASE_URL_HOST=' . $this->Domain); + putenv('BASE_URL_PATH=' . $this->DomainPath . '/'); + putenv('BASE_URL_SCHEME=http'); + } + + /** + * create a database if necessary and setup environment variables + * + * @param xml instance of a valid xml object with a parsed APP-META.xml file + * @param row current entry from the database for app to handle + * @param task numeric code to specify what to do + */ + + private function PrepareDatabase($Xml, $Row, $Task) + { + global $db_root; + $XmlDb = $Xml->requirements->children('http://apstandard.com/ns/1/db'); + + if($XmlDb->db->id) + { + //database management + + $NewDatabase = 'web' . $Row['CustomerID'] . 'aps' . $Row['InstanceID']; + $result = $this->db->query('SELECT * FROM `' . TABLE_APS_SETTINGS . '` WHERE `InstanceID` = ' . $this->db->escape($Row['InstanceID']) . ' AND `Name` = "main_database_password"'); + $Row3 = $this->db->fetch_array($result); + $DbPassword = $Row3['Value']; + + if($Task == TASK_INSTALL) + { + $this->db_root->query('DROP DATABASE IF EXISTS `' . $this->db->escape($NewDatabase) . '`'); + $this->db_root->query('CREATE DATABASE IF NOT EXISTS `' . $this->db->escape($NewDatabase) . '`'); + foreach(array_map('trim', explode(',', $this->Hosts)) as $DatabaseHost) + { + $this->db_root->query('GRANT ALL PRIVILEGES ON `' . $this->db->escape($NewDatabase) . '`.* TO `' . $this->db->escape($NewDatabase) . '`@`' . $this->db->escape($DatabaseHost) . '` IDENTIFIED BY \'password\''); + $this->db_root->query('SET PASSWORD FOR `' . $this->db->escape($NewDatabase) . '`@`' . $this->db->escape($DatabaseHost) . '` = PASSWORD(\'' . $DbPassword . '\')'); + } + + $this->db_root->query('FLUSH PRIVILEGES'); + } + + //get first mysql access host + + $AccessHosts = array_map('trim', explode(',', $this->Hosts)); + + //environment variables + + putenv('DB_' . $XmlDb->db->id . '_TYPE=mysql'); + putenv('DB_' . $XmlDb->db->id . '_NAME=' . $NewDatabase); + putenv('DB_' . $XmlDb->db->id . '_LOGIN=' . $NewDatabase); + putenv('DB_' . $XmlDb->db->id . '_PASSWORD=' . $DbPassword); + putenv('DB_' . $XmlDb->db->id . '_HOST=' . $AccessHosts[0]); + putenv('DB_' . $XmlDb->db->id . '_PORT=3306'); + putenv('DB_' . $XmlDb->db->id . '_VERSION=' . mysql_get_server_info()); + } + } + + /** + * extract complete directories from a zipfile + * + * @param filename path to zipfile to extract + * @param directory which directory in zipfile to extract + * @param destination destination directory for files to extract + * @return success true/error false + */ + + private function ExtractZip($Filename, $Directory, $Destination) + { + if(!file_exists($Filename))return false; + + //fix slash notation for correct paths + + if(substr($Directory, -1, 1) == '/')$Directory = substr($Directory, 0, strlen($Directory) - 1); + + if(substr($Destination, -1, 1) != '/')$Destination.= '/'; + + //open zipfile to read its contents + + $ZipHandle = zip_open(realpath($Filename)); + + if(is_resource($ZipHandle)) + { + while($ZipEntry = zip_read($ZipHandle)) + { + if(substr(zip_entry_name($ZipEntry), 0, strlen($Directory)) == $Directory) + { + //fix relative path from zipfile + + $NewPath = zip_entry_name($ZipEntry); + $NewPath = substr($NewPath, strlen($Directory)); + + //directory + + if(substr($NewPath, -1, 1) == '/') + { + if(!file_exists($Destination . $NewPath))mkdir($Destination . $NewPath, 0777, true); + } + else + { + //files + + if(zip_entry_open($ZipHandle, $ZipEntry)) + { + $File = fopen($Destination . $NewPath, "wb"); + + if($File) + { + while($Line = zip_entry_read($ZipEntry)) + { + fwrite($File, $Line); + } + + fclose($File); + } + else + { + return false; + } + } + } + } + } + + zip_close($ZipHandle); + return true; + } + else + { + $ReturnLines = array(); + $ReturnVal = - 1; + + //on 64 bit systems the zip functions can fail -> use exec to extract the files + + $ReturnLines = safe_exec('unzip -o -qq ' . escapeshellarg(realpath($Filename)) . ' ' . escapeshellarg($Directory . '/*') . ' -d ' . escapeshellarg(sys_get_temp_dir()), $ReturnVal); + + if($ReturnVal == 0) + { + //fix absolute structure of extracted data + + if(!file_exists($Destination))mkdir($Destination, 0777, true); + safe_exec('cp -Rf ' . sys_get_temp_dir() . '/' . $Directory . '/*' . ' ' . escapeshellarg($Destination)); + self::UnlinkRecursive(sys_get_temp_dir() . '/' . $Directory . '/'); + return true; + } + else + { + return false; + } + } + + return false; + } +} + +?> \ No newline at end of file diff --git a/lib/classes/aps/class.ApsParser.php b/lib/classes/aps/class.ApsParser.php new file mode 100644 index 0000000000..17c636ae41 --- /dev/null +++ b/lib/classes/aps/class.ApsParser.php @@ -0,0 +1,3249 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Panel + * @version $Id: class.ApsParser.php 2724 2009-06-07 14:18:02Z flo $ + * @todo implement charset validation + * reconfigure + * patch- and versionmanagement + * use settings/userinfo array instead a copy of this vars + * remove locked packages + * replace all html code + * add https support + * multi language support (package localization) + * zip stuff in own class + * logging + * button for remove of all failed installations + * increse database counter for customer + */ + +class ApsParser +{ + private $userinfo = array(); + private $settings = array(); + private $db = false; + + /** + * Constructor of class, setup basic variables needed by the class + * + * @param userinfo global array with the current userinfos + * @param settings global array with the current system settings + * @param db valid instance of the database class + */ + + public function __construct($userinfo, $settings, $db) + { + $this->settings = $settings; + $this->userinfo = $userinfo; + $this->db = $db; + } + + /** + * function provides instance management for admins + */ + + private function ManageInstances() + { + global $lng, $filename, $s, $page, $action; + $Question = false; + + //dont do anything if there is no instance + + if((int)$this->userinfo['customers_see_all'] == 1) + { + $Instances = $this->db->query('SELECT * FROM `' . TABLE_APS_INSTANCES . '` AS `i` INNER JOIN `' . TABLE_APS_PACKAGES . '` AS `p` ON `i`.`PackageID` = `p`.`ID`'); + } + else + { + $Instances = $this->db->query('SELECT * FROM `' . TABLE_APS_INSTANCES . '` AS `i` INNER JOIN `' . TABLE_APS_PACKAGES . '` AS `p` ON `i`.`PackageID` = `p`.`ID` INNER JOIN `' . TABLE_PANEL_CUSTOMERS . '` AS `c` ON `i`.`CustomerID` = `c`.`customerid` WHERE `c`.`adminid` = ' . (int)$this->userinfo['adminid']); + } + + if($this->db->num_rows($Instances) == 0) + { + self::InfoBox($lng['aps']['noinstancesexisting']); + return; + } + + if(isset($_POST['save'])) + { + $Ids = ''; + $Result = $this->db->query('SELECT * FROM `' . TABLE_APS_INSTANCES . '`'); + + while($Row = $this->db->fetch_array($Result)) + { + //has admin clicked "yes" for question + + if(isset($_POST['answer']) + && $_POST['answer'] == $lng['panel']['yes']) + { + //instance installation stop + + if(isset($_POST['stop' . $Row['ID']]) + && $_POST['stop' . $Row['ID']] == '1') + { + //remove task + + $this->db->query('DELETE FROM `' . TABLE_APS_TASKS . '` WHERE `InstanceID` = ' . (int)$Row['ID']); + + //remove settings + + $this->db->query('DELETE FROM `' . TABLE_APS_SETTINGS . '` WHERE `InstanceID` = ' . (int)$Row['ID']); + + //remove instance + + $this->db->query('DELETE FROM `' . TABLE_APS_INSTANCES . '` WHERE `ID` = ' . (int)$Row['ID']); + + //decrease used flag + + $this->db->query('UPDATE `' . TABLE_PANEL_CUSTOMERS . '` SET `aps_packages_used` = `aps_packages_used` - 1 WHERE `customerid` = ' . (int)$Row[' CustomerID']); + } + + //instance uninstallation + + if(isset($_POST['remove' . $Row['ID']]) + && $_POST['remove' . $Row['ID']] == '1') + { + //remove installation task if it still exists + + $this->db->query('DELETE FROM `' . TABLE_APS_TASKS . '` WHERE `InstanceID` = ' . (int)$Row['ID'] . ' AND `Task` = ' . TASK_INSTALL); + + //insert task for uninstallation if it doesnt exists already + + $Result2 = $this->db->query('SELECT * FROM `' . TABLE_APS_TASKS . '` WHERE `InstanceID` = ' . (int)$Row['ID'] . ' AND `Task` = ' . TASK_REMOVE); + + if($this->db->num_rows($Result2) == 0) + { + $this->db->query('INSERT INTO `' . TABLE_APS_TASKS . '` (`InstanceID`, `Task`) VALUES (' . (int)$Row['ID'] . ', ' . TASK_REMOVE . ')'); + $this->db->query('UPDATE `' . TABLE_APS_INSTANCES . '` SET `Status` = ' . INSTANCE_UNINSTALL . ' WHERE `ID` = ' . (int)$Row['ID']); + $this->db->query('UPDATE `' . TABLE_PANEL_CUSTOMERS . '` SET `aps_packages_used` = `aps_packages_used` - 1 WHERE `customerid` = ' . (int)$Row[' CustomerID']); + } + } + } + else + { + //backup all selected ids for yes/no question + + if(isset($_POST['stop' . $Row['ID']]) + && $_POST['stop' . $Row['ID']] == '1') + { + $Ids.= ''; + } + + if(isset($_POST['remove' . $Row['ID']]) + && $_POST['remove' . $Row['ID']] == '1') + { + $Ids.= ''; + } + } + } + + //if there are some ids, show yes/no question + + if($Ids != '' + && !isset($_POST['answer'])) + { + //show yes/no question + + $Message = $lng['question']['reallydoaction']; + eval("echo \"" . getTemplate("aps/askyesno") . "\";"); + $Question = true; + } + } + + //create table with contents based on instance status + + if($Question != true) + { + //INSTALL + + $InstancesInstall = ''; + + if((int)$this->userinfo['customers_see_all'] == 1) + { + $Result = $this->db->query('SELECT `p`.`Name`, `p`.`Version`, `p`.`Release`, `i`.`PackageID` FROM `' . TABLE_APS_INSTANCES . '` AS `i` INNER JOIN `' . TABLE_APS_PACKAGES . '` AS `p` ON `i`.`PackageID` = `p`.`ID` WHERE `i`.`Status` = ' . INSTANCE_INSTALL . ' GROUP BY `Version`, `Release`'); + } + else + { + $Result = $this->db->query('SELECT `p`.`Name`, `p`.`Version`, `p`.`Release`, `i`.`PackageID` FROM `' . TABLE_APS_INSTANCES . '` AS `i` INNER JOIN `' . TABLE_APS_PACKAGES . '` AS `p` ON `i`.`PackageID` = `p`.`ID` INNER JOIN `' . TABLE_PANEL_CUSTOMERS . '` AS `c` ON `i`.`CustomerID` = `c`.`customerid` WHERE `i`.`Status` = ' . INSTANCE_INSTALL . ' AND `c`.`adminid` = ' . (int)$this->userinfo['adminid'] . ' GROUP BY `Version`, `Release`'); + } + + while($Row = $this->db->fetch_array($Result)) + { + eval("\$InstancesInstall.=\"" . getTemplate("aps/manage_instances_package") . "\";"); + + //get instances + + if((int)$this->userinfo['customers_see_all'] == 1) + { + $Result2 = $this->db->query('SELECT * FROM `' . TABLE_APS_INSTANCES . '` WHERE `Status` = ' . INSTANCE_INSTALL . ' AND `PackageID` = ' . $Row['PackageID']); + } + else + { + $Result2 = $this->db->query('SELECT * FROM `' . TABLE_APS_INSTANCES . '` AS `i` INNER JOIN `' . TABLE_PANEL_CUSTOMERS . '` AS `c` ON `i`.`CustomerID` = `c`.`customerid` WHERE `i`.`Status` = ' . INSTANCE_INSTALL . ' AND `i`.`PackageID` = ' . $Row['PackageID'] . ' AND `c`.`adminid` = ' . (int)$this->userinfo['adminid']); + } + + while($Row2 = $this->db->fetch_array($Result2)) + { + //get customer name + + $Result3 = $this->db->query('SELECT * FROM `' . TABLE_PANEL_CUSTOMERS . '` WHERE `customerid` = ' . $Row2['CustomerID']); + $Row3 = $this->db->fetch_array($Result3); + $Stop = makecheckbox('stop' . $Row2['ID'], '', '1'); + eval("\$InstancesInstall.=\"" . getTemplate("aps/manage_instances_install") . "\";"); + } + } + + //TASK ACTIVE + + $InstancesTaskActive = ''; + + if((int)$this->userinfo['customers_see_all'] == 1) + { + $Result = $this->db->query('SELECT `p`.`Name`, `p`.`Version`, `p`.`Release`, `i`.`PackageID` FROM `' . TABLE_APS_INSTANCES . '` AS `i` INNER JOIN `' . TABLE_APS_PACKAGES . '` AS `p` ON `i`.`PackageID` = `p`.`ID` WHERE `i`.`Status` = ' . INSTANCE_TASK_ACTIVE . ' GROUP BY `Version`, `Release`'); + } + else + { + $Result = $this->db->query('SELECT `p`.`Name`, `p`.`Version`, `p`.`Release`, `i`.`PackageID` FROM `' . TABLE_APS_INSTANCES . '` AS `i` INNER JOIN `' . TABLE_APS_PACKAGES . '` AS `p` ON `i`.`PackageID` = `p`.`ID` INNER JOIN `' . TABLE_PANEL_CUSTOMERS . '` AS `c` ON `i`.`CustomerID` = `c`.`customerid` WHERE `i`.`Status` = ' . INSTANCE_TASK_ACTIVE . ' AND `c`.`adminid` = ' . (int)$this->userinfo['adminid'] . ' GROUP BY `Version`, `Release`'); + } + + while($Row = $this->db->fetch_array($Result)) + { + eval("\$InstancesTaskActive.=\"" . getTemplate("aps/manage_instances_package") . "\";"); + + //get instances + + if((int)$this->userinfo['customers_see_all'] == 1) + { + $Result2 = $this->db->query('SELECT * FROM `' . TABLE_APS_INSTANCES . '` WHERE `Status` = ' . INSTANCE_TASK_ACTIVE . ' AND `PackageID` = ' . $Row['PackageID']); + } + else + { + $Result2 = $this->db->query('SELECT * FROM `' . TABLE_APS_INSTANCES . '` AS `i` INNER JOIN `' . TABLE_PANEL_CUSTOMERS . '` AS `c` ON `i`.`CustomerID` = `c`.`customerid` WHERE `i`.`Status` = ' . INSTANCE_TASK_ACTIVE . ' AND `i`.`PackageID` = ' . $Row['PackageID'] . ' AND `c`.`adminid` = ' . (int)$this->userinfo['adminid']); + } + + while($Row2 = $this->db->fetch_array($Result2)) + { + //get customer name + + $Result3 = $this->db->query('SELECT * FROM `' . TABLE_PANEL_CUSTOMERS . '` WHERE `customerid` = ' . $Row2['CustomerID']); + $Row3 = $this->db->fetch_array($Result3); + eval("\$InstancesTaskActive.=\"" . getTemplate("aps/manage_instances_taskactive") . "\";"); + } + } + + //SUCCESS + + $InstancesSuccess = ''; + + if((int)$this->userinfo['customers_see_all'] == 1) + { + $Result = $this->db->query('SELECT `p`.`Name`, `p`.`Version`, `p`.`Release`, `i`.`PackageID` FROM `' . TABLE_APS_INSTANCES . '` AS `i` INNER JOIN `' . TABLE_APS_PACKAGES . '` AS `p` ON `i`.`PackageID` = `p`.`ID` WHERE `i`.`Status` = ' . INSTANCE_SUCCESS . ' GROUP BY `Version`, `Release`'); + } + else + { + $Result = $this->db->query('SELECT `p`.`Name`, `p`.`Version`, `p`.`Release`, `i`.`PackageID` FROM `' . TABLE_APS_INSTANCES . '` AS `i` INNER JOIN `' . TABLE_APS_PACKAGES . '` AS `p` ON `i`.`PackageID` = `p`.`ID` INNER JOIN `' . TABLE_PANEL_CUSTOMERS . '` AS `c` ON `i`.`CustomerID` = `c`.`customerid` WHERE `i`.`Status` = ' . INSTANCE_SUCCESS . ' AND `c`.`adminid` = ' . (int)$this->userinfo['adminid'] . ' GROUP BY `Version`, `Release`'); + } + + while($Row = $this->db->fetch_array($Result)) + { + eval("\$InstancesSuccess.=\"" . getTemplate("aps/manage_instances_package") . "\";"); + + //get instances + + if((int)$this->userinfo['customers_see_all'] == 1) + { + $Result2 = $this->db->query('SELECT * FROM `' . TABLE_APS_INSTANCES . '` WHERE `Status` = ' . INSTANCE_SUCCESS . ' AND `PackageID` = ' . $Row['PackageID']); + } + else + { + $Result2 = $this->db->query('SELECT * FROM `' . TABLE_APS_INSTANCES . '` AS `i` INNER JOIN `' . TABLE_PANEL_CUSTOMERS . '` AS `c` ON `i`.`CustomerID` = `c`.`customerid` WHERE `i`.`Status` = ' . INSTANCE_SUCCESS . ' AND `i`.`PackageID` = ' . $Row['PackageID'] . ' AND `c`.`adminid` = ' . (int)$this->userinfo['adminid']); + } + + while($Row2 = $this->db->fetch_array($Result2)) + { + //get customer name + + $Result3 = $this->db->query('SELECT * FROM `' . TABLE_PANEL_CUSTOMERS . '` WHERE `customerid` = ' . $Row2['CustomerID']); + $Row3 = $this->db->fetch_array($Result3); + $Remove = makecheckbox('remove' . $Row2['ID'], '', '1'); + eval("\$InstancesSuccess.=\"" . getTemplate("aps/manage_instances_success") . "\";"); + } + } + + //ERROR + + $InstancesError = ''; + + if((int)$this->userinfo['customers_see_all'] == 1) + { + $Result = $this->db->query('SELECT `p`.`Name`, `p`.`Version`, `p`.`Release`, `i`.`PackageID` FROM `' . TABLE_APS_INSTANCES . '` AS `i` INNER JOIN `' . TABLE_APS_PACKAGES . '` AS `p` ON `i`.`PackageID` = `p`.`ID` WHERE `i`.`Status` = ' . INSTANCE_ERROR . ' GROUP BY `Version`, `Release`'); + } + else + { + $Result = $this->db->query('SELECT `p`.`Name`, `p`.`Version`, `p`.`Release`, `i`.`PackageID` FROM `' . TABLE_APS_INSTANCES . '` AS `i` INNER JOIN `' . TABLE_APS_PACKAGES . '` AS `p` ON `i`.`PackageID` = `p`.`ID` INNER JOIN `' . TABLE_PANEL_CUSTOMERS . '` AS `c` ON `i`.`CustomerID` = `c`.`customerid` WHERE `i`.`Status` = ' . INSTANCE_ERROR . ' AND `c`.`adminid` = ' . (int)$this->userinfo['adminid'] . ' GROUP BY `Version`, `Release`'); + } + + while($Row = $this->db->fetch_array($Result)) + { + eval("\$InstancesError.=\"" . getTemplate("aps/manage_instances_package") . "\";"); + + //get instances + + if((int)$this->userinfo['customers_see_all'] == 1) + { + $Result2 = $this->db->query('SELECT * FROM `' . TABLE_APS_INSTANCES . '` WHERE `Status` = ' . INSTANCE_ERROR . ' AND `PackageID` = ' . $Row['PackageID']); + } + else + { + $Result2 = $this->db->query('SELECT * FROM `' . TABLE_APS_INSTANCES . '` AS `i` INNER JOIN `' . TABLE_PANEL_CUSTOMERS . '` AS `c` ON `i`.`CustomerID` = `c`.`customerid` WHERE `i`.`Status` = ' . INSTANCE_ERROR . ' AND `i`.`PackageID` = ' . $Row['PackageID'] . ' AND `c`.`adminid` = ' . (int)$this->userinfo['adminid']); + } + + while($Row2 = $this->db->fetch_array($Result2)) + { + //get customer name + + $Result3 = $this->db->query('SELECT * FROM `' . TABLE_PANEL_CUSTOMERS . '` WHERE `customerid` = ' . $Row2['CustomerID']); + $Row3 = $this->db->fetch_array($Result3); + $Remove = makecheckbox('remove' . $Row2['ID'], '', '1'); + eval("\$InstancesError.=\"" . getTemplate("aps/manage_instances_error") . "\";"); + } + } + + //UNINSTALL + + $InstancesUninstall = ''; + + if((int)$this->userinfo['customers_see_all'] == 1) + { + $Result = $this->db->query('SELECT `p`.`Name`, `p`.`Version`, `p`.`Release`, `i`.`PackageID` FROM `' . TABLE_APS_INSTANCES . '` AS `i` INNER JOIN `' . TABLE_APS_PACKAGES . '` AS `p` ON `i`.`PackageID` = `p`.`ID` WHERE `i`.`Status` = ' . INSTANCE_UNINSTALL . ' GROUP BY `Version`, `Release`'); + } + else + { + $Result = $this->db->query('SELECT `p`.`Name`, `p`.`Version`, `p`.`Release`, `i`.`PackageID` FROM `' . TABLE_APS_INSTANCES . '` AS `i` INNER JOIN `' . TABLE_APS_PACKAGES . '` AS `p` ON `i`.`PackageID` = `p`.`ID` INNER JOIN `' . TABLE_PANEL_CUSTOMERS . '` AS `c` ON `i`.`CustomerID` = `c`.`customerid` WHERE `i`.`Status` = ' . INSTANCE_UNINSTALL . ' AND `c`.`adminid` = ' . (int)$this->userinfo['adminid'] . ' GROUP BY `Version`, `Release`'); + } + + while($Row = $this->db->fetch_array($Result)) + { + eval("\$InstancesUninstall.=\"" . getTemplate("aps/manage_instances_package") . "\";"); + + //get instances + + if((int)$this->userinfo['customers_see_all'] == 1) + { + $Result2 = $this->db->query('SELECT * FROM `' . TABLE_APS_INSTANCES . '` WHERE `Status` = ' . INSTANCE_UNINSTALL . ' AND `PackageID` = ' . $Row['PackageID']); + } + else + { + $Result2 = $this->db->query('SELECT * FROM `' . TABLE_APS_INSTANCES . '` AS `i` INNER JOIN `' . TABLE_PANEL_CUSTOMERS . '` AS `c` ON `i`.`CustomerID` = `c`.`customerid` WHERE `i`.`Status` = ' . INSTANCE_UNINSTALL . ' AND `i`.`PackageID` = ' . $Row['PackageID'] . ' AND `c`.`adminid` = ' . (int)$this->userinfo['adminid']); + } + + while($Row2 = $this->db->fetch_array($Result2)) + { + //get customer name + + $Result3 = $this->db->query('SELECT * FROM `' . TABLE_PANEL_CUSTOMERS . '` WHERE `customerid` = ' . $Row2['CustomerID']); + $Row3 = $this->db->fetch_array($Result3); + eval("\$InstancesUninstall.=\"" . getTemplate("aps/manage_instances_uninstall") . "\";"); + } + } + + //create some statistics + + $Statistics = ''; + + if((int)$this->userinfo['customers_see_all'] == 1) + { + $Result = $this->db->query('SELECT * FROM `' . TABLE_APS_INSTANCES . '`'); + $Statistics.= sprintf($lng['aps']['numerofinstances'], $this->db->num_rows($Result)); + $Result = $this->db->query('SELECT * FROM `' . TABLE_APS_INSTANCES . '` WHERE `Status` = ' . INSTANCE_SUCCESS); + $Statistics.= sprintf($lng['aps']['numerofinstancessuccess'], $this->db->num_rows($Result)); + $Result = $this->db->query('SELECT * FROM `' . TABLE_APS_INSTANCES . '` WHERE `Status` = ' . INSTANCE_ERROR); + $Statistics.= sprintf($lng['aps']['numerofinstanceserror'], $this->db->num_rows($Result)); + $Result = $this->db->query('SELECT * FROM `' . TABLE_APS_INSTANCES . '` WHERE `Status` IN (' . INSTANCE_INSTALL . ', ' . INSTANCE_TASK_ACTIVE . ', ' . INSTANCE_UNINSTALL . ')'); + $Statistics.= sprintf($lng['aps']['numerofinstancesaction'], $this->db->num_rows($Result)); + } + else + { + $Result = $this->db->query('SELECT * FROM `' . TABLE_APS_INSTANCES . '` AS `i` INNER JOIN `' . TABLE_PANEL_CUSTOMERS . '` AS `c` ON `i`.`CustomerID` = `c`.`customerid` WHERE `c`.`adminid` = ' . (int)$this->userinfo['adminid']); + $Statistics.= sprintf($lng['aps']['numerofinstances'], $this->db->num_rows($Result)); + $Result = $this->db->query('SELECT * FROM `' . TABLE_APS_INSTANCES . '` AS `i` INNER JOIN `' . TABLE_PANEL_CUSTOMERS . '` AS `c` ON `i`.`CustomerID` = `c`.`customerid` WHERE `c`.`adminid` = ' . (int)$this->userinfo['adminid'] . ' AND `Status` = ' . INSTANCE_SUCCESS); + $Statistics.= sprintf($lng['aps']['numerofinstancessuccess'], $this->db->num_rows($Result)); + $Result = $this->db->query('SELECT * FROM `' . TABLE_APS_INSTANCES . '` AS `i` INNER JOIN `' . TABLE_PANEL_CUSTOMERS . '` AS `c` ON `i`.`CustomerID` = `c`.`customerid` WHERE `c`.`adminid` = ' . (int)$this->userinfo['adminid'] . ' AND `Status` = ' . INSTANCE_ERROR); + $Statistics.= sprintf($lng['aps']['numerofinstanceserror'], $this->db->num_rows($Result)); + $Result = $this->db->query('SELECT * FROM `' . TABLE_APS_INSTANCES . '` AS `i` INNER JOIN `' . TABLE_PANEL_CUSTOMERS . '` AS `c` ON `i`.`CustomerID` = `c`.`customerid` WHERE `c`.`adminid` = ' . (int)$this->userinfo['adminid'] . ' AND `Status` IN (' . INSTANCE_INSTALL . ', ' . INSTANCE_TASK_ACTIVE . ', ' . INSTANCE_UNINSTALL . ')'); + $Statistics.= sprintf($lng['aps']['numerofinstancesaction'], $this->db->num_rows($Result)); + } + + eval("echo \"" . getTemplate("aps/manage_instances") . "\";"); + } + } + + /** + * unlink files recursively + * + * @param dir directory to delete recursive + */ + + protected function UnlinkRecursive($Dir) + { + if(!$DirHandle = @opendir($Dir))return; + + while(false !== ($Object = readdir($DirHandle))) + { + if($Object == '.' + || $Object == '..')continue; + + if(!@unlink($Dir . '/' . $Object)) + { + self::UnlinkRecursive($Dir . '/' . $Object); + } + } + + closedir($DirHandle); + @rmdir($Dir); + } + + /** + * function provides package management for admins + */ + + private function ManagePackages() + { + global $lng, $filename, $s, $page, $action; + $Question = false; + + if(isset($_POST['save'])) + { + if(isset($_POST['all']) + && $_POST['all'] == 'lock') + { + //lock alle packages + + $this->db->query('UPDATE `' . TABLE_APS_PACKAGES . '` SET `Status` = ' . PACKAGE_LOCKED . ' WHERE 1'); + } + elseif(isset($_POST['all']) + && $_POST['all'] == 'unlock') + { + //enable all packages + + $this->db->query('UPDATE `' . TABLE_APS_PACKAGES . '` SET `Status` = ' . PACKAGE_ENABLED . ' WHERE 1'); + } + elseif(isset($_POST['downloadallpackages'])) + { + $Result = $this->db->query('SELECT * FROM `' . TABLE_APS_TASKS . '` WHERE `Task` = ' . TASK_SYSTEM_DOWNLOAD); + + if($this->db->num_rows($Result) > 0) + { + self::InfoBox($lng['aps']['downloadtaskexists']); + } + else + { + $this->db->query('INSERT INTO `' . TABLE_APS_TASKS . '` (`Task`, `InstanceID`) VALUES (' . TASK_SYSTEM_DOWNLOAD . ', 0)'); + self::InfoBox($lng['aps']['downloadtaskinserted']); + } + } + elseif(isset($_POST['updateallpackages'])) + { + $Result = $this->db->query('SELECT * FROM `' . TABLE_APS_TASKS . '` WHERE `Task` = ' . TASK_SYSTEM_UPDATE); + + if($this->db->num_rows($Result) > 0) + { + self::InfoBox($lng['aps']['updatetaskexists']); + } + else + { + $this->db->query('INSERT INTO `' . TABLE_APS_TASKS . '` (`Task`, `InstanceID`) VALUES (' . TASK_SYSTEM_UPDATE . ', 0)'); + self::InfoBox($lng['aps']['updatetaskinserted']); + } + } + elseif(isset($_POST['enablenewest'])) + { + //lock alle packages, then find newerst package and enable it + + $this->db->query('UPDATE `' . TABLE_APS_PACKAGES . '` SET `Status` = ' . PACKAGE_LOCKED); + + //get all packages + + $Result = $this->db->query('SELECT * FROM `' . TABLE_APS_PACKAGES . '` GROUP BY `Name`'); + + while($Row = $this->db->fetch_array($Result)) + { + //get newest version of package + + $NewestVersion = ''; + $NewestId = ''; + $Result2 = $this->db->query('SELECT * FROM `' . TABLE_APS_PACKAGES . '` WHERE `Name` = "' . $this->db->escape($Row['Name']) . '"'); + + while($Row2 = $this->db->fetch_array($Result2)) + { + if(version_compare($Row2['Version'] . '-' . $Row2['Release'], $NewestVersion) == 1) + { + $NewestVersion = $Row2['Version'] . '-' . $Row2['Release']; + $NewestId = $Row2['ID']; + } + } + + //enable newest version + + $this->db->query('UPDATE `' . TABLE_APS_PACKAGES . '` SET `Status` = ' . PACKAGE_ENABLED . ' WHERE `ID` = ' . $NewestId); + } + } + elseif(isset($_POST['removeunused'])) + { + //remove all packages which have no dependencies (count of package instances = 0) + + if(isset($_POST['answer']) + && $_POST['answer'] == $lng['panel']['yes']) + { + //get all packages + + $Result = $this->db->query('SELECT * FROM `' . TABLE_APS_PACKAGES . '`'); + + while($Row = $this->db->fetch_array($Result)) + { + //query how often package has been installed + + $Result2 = $this->db->query('SELECT * FROM `' . TABLE_APS_INSTANCES . '` WHERE `PackageID` = ' . $Row['ID']); + + if($this->db->num_rows($Result2) == 0) + { + //remove package if number of package instances is 0 + + self::UnlinkRecursive('./packages/' . $Row['Path']); + $this->db->query('DELETE FROM `' . TABLE_APS_PACKAGES . '` WHERE `ID` = ' . $Row['ID']); + } + } + } + else + { + //show yes/no question + + $Message = $lng['question']['reallyremovepackages']; + $Ids = ''; + eval("echo \"" . getTemplate("aps/askyesno") . "\";"); + $Question = true; + } + } + elseif(isset($_POST['all']) + && $_POST['all'] == 'remove') + { + //remove all packages from system + + if(isset($_POST['answer']) + && $_POST['answer'] == $lng['panel']['yes']) + { + $Result = $this->db->query('SELECT * FROM `' . TABLE_APS_PACKAGES . '`'); + + //check for dependencies + + while($Row = $this->db->fetch_array($Result)) + { + //query how often package has been installed + + $Result2 = $this->db->query('SELECT * FROM `' . TABLE_APS_INSTANCES . '` WHERE `PackageID` = ' . $Row['ID']); + + if($this->db->num_rows($Result2) == 0) + { + //remove package if number of package instances is 0 + + self::UnlinkRecursive('./packages/' . $Row['Path']); + $this->db->query('DELETE FROM `' . TABLE_APS_PACKAGES . '` WHERE `ID` = ' . $Row['ID']); + } + } + } + else + { + //show yes/no question + + $Message = $lng['question']['reallyremovepackages']; + $Ids = ''; + eval("echo \"" . getTemplate("aps/askyesno") . "\";"); + $Question = true; + } + } + else + { + //no special button or "all" function has been clicked + //continue to parse "single" options + + $Result = $this->db->query('SELECT * FROM `' . TABLE_APS_PACKAGES . '`'); + $Ids = ''; + + while($Row = $this->db->fetch_array($Result)) + { + //set new status of package (locked) + + if($Row['Status'] == PACKAGE_ENABLED + && isset($_POST['lock' . $Row['ID']])) + { + $this->db->query('UPDATE `' . TABLE_APS_PACKAGES . '` SET `Status` = ' . PACKAGE_LOCKED . ' WHERE `ID` = ' . $this->db->escape($Row['ID'])); + } + + //set new status of package (enabled) + + if($Row['Status'] == PACKAGE_LOCKED + && isset($_POST['unlock' . $Row['ID']])) + { + $this->db->query('UPDATE `' . TABLE_APS_PACKAGES . '` SET `Status` = ' . PACKAGE_ENABLED . ' WHERE `ID` = ' . $this->db->escape($Row['ID'])); + } + + //save id of package to remove for yes/no question + + if(isset($_POST['remove' . $Row['ID']])) + { + $Ids.= ''; + + //remove package if answer is yes + + if(isset($_POST['answer']) + && $_POST['answer'] == $lng['panel']['yes']) + { + self::UnlinkRecursive('./packages/' . $Row['Path']); + $this->db->query('DELETE FROM `' . TABLE_APS_PACKAGES . '` WHERE `ID` = ' . $Row['ID']); + } + } + } + + //if there are some ids to remove, show yes/no box + + if($Ids != '' + && !isset($_POST['answer'])) + { + //show yes/no question + + $Message = $lng['question']['reallyremovepackages']; + eval("echo \"" . getTemplate("aps/askyesno") . "\";"); + $Question = true; + } + } + } + + //show package overview with options + + if(!isset($_POST['save']) + || $Question == false) + { + //query all packages grouped by package name + + $Result = $this->db->query('SELECT * FROM `' . TABLE_APS_PACKAGES . '` GROUP BY `Name` ORDER BY `Name` ASC'); + $Packages = ''; + + while($Row = $this->db->fetch_array($Result)) + { + eval("\$Packages.=\"" . getTemplate("aps/manage_packages_row") . "\";"); + + //get all package versions of current package + + $Result2 = $this->db->query('SELECT * FROM `' . TABLE_APS_PACKAGES . '` WHERE `Name` = "' . $this->db->escape($Row['Name']) . '" ORDER BY `Version` DESC, `Release` DESC'); + + while($Row2 = $this->db->fetch_array($Result2)) + { + //show package with options + + $Lock = ''; + $Unlock = ''; + + if($Row2['Status'] == PACKAGE_ENABLED) + { + $Lock = makecheckbox('lock' . $Row2['ID'], '', '1'); + } + + if($Row2['Status'] == PACKAGE_LOCKED) + { + $Unlock = makecheckbox('unlock' . $Row2['ID'], '', '1'); + } + + //query how often package has been installed + + $Result3 = $this->db->query('SELECT * FROM `' . TABLE_APS_INSTANCES . '` WHERE `PackageID` = ' . $Row2['ID']); + $Installations = $this->db->num_rows($Result3); + + if($Installations == 0)$Remove = makecheckbox('remove' . $Row2['ID'], '', '1'); + eval("\$Packages.=\"" . getTemplate("aps/manage_packages_detail") . "\";"); + } + } + + if($this->db->num_rows($Result) == 0) + { + //no packages have been installed in system + + self::InfoBox($lng['aps']['nopackagesinsystem']); + eval("echo \"" . getTemplate("aps/manage_packages_download") . "\";"); + } + else + { + //generate some statistics + + $Result = $this->db->query('SELECT * FROM `' . TABLE_APS_PACKAGES . '`'); + $Temp = $this->db->num_rows($Result); + $Statistics = sprintf($lng['aps']['numerofpackagesinstalled'], $this->db->num_rows($Result)); + $Result = $this->db->query('SELECT * FROM `' . TABLE_APS_PACKAGES . '` WHERE `Status` = ' . PACKAGE_ENABLED); + $Statistics.= sprintf($lng['aps']['numerofpackagesenabled'], $this->db->num_rows($Result)); + $Statistics.= sprintf($lng['aps']['numerofpackageslocked'], $Temp - $this->db->num_rows($Result)); + + if((int)$this->userinfo['customers_see_all'] == 1) + { + $Result = $this->db->query('SELECT * FROM `' . TABLE_APS_INSTANCES . '`'); + $Statistics.= sprintf($lng['aps']['numerofinstances'], $this->db->num_rows($Result)); + } + else + { + $Result = $this->db->query('SELECT * FROM `' . TABLE_APS_INSTANCES . '` AS `i` INNER JOIN `' . TABLE_PANEL_CUSTOMERS . '` AS `c` ON `i`.`CustomerID` = `c`.`customerid` WHERE `c`.`adminid` = ' . (int)$this->userinfo['adminid']); + $Statistics.= sprintf($lng['aps']['numerofinstances'], $this->db->num_rows($Result)); + } + + eval("echo \"" . getTemplate("aps/manage_packages") . "\";"); + } + } + } + + /** + * function provides a upload site for new packages + */ + + private function UploadNewPackages() + { + global $lng, $filename, $s, $page, $action; + + //define how many files can be uploaded at once + + $Files = array(); + + //define how many upload fields will be shown + + for ($i = 1;$i <= (int)$this->settings['aps']['upload_fields'];$i++) + { + $Files[] = 'file' . $i; + } + + //check whether one file has been uploaded + + $FilesSet = false; + foreach($Files as $File) + { + if(isset($_FILES[$File]))$FilesSet = true; + } + + if($FilesSet == true) + { + //any file has been uploaded, now check for errors and parse the input + + foreach($Files as $File) + { + if(isset($_FILES[$File])) + { + $Errors = array(); + + //check uploaded files against some things + //check for filetype + + if(substr($_FILES[$File]['name'], -3) != 'zip' + && $_FILES[$File]['error'] == 0) + { + $Errors[] = $lng['aps']['notazipfile']; + } + + //check for filesize + + if(($_FILES[$File]['size'] > self::PhpMemorySizeToBytes(ini_get('upload_max_filesize')) && $_FILES[$File]['error'] == 0) + || $_FILES[$File]['error'] == 1) + { + $Errors[] = $lng['aps']['filetoobig']; + } + + //check is file isnt complete + + if($_FILES[$File]['error'] == 3) + { + $Errors[] = $lng['aps']['filenotcomplete']; + } + + //check for other php internal errors + + if($_FILES[$File]['error'] >= 6) + { + $Errors[] = $lng['aps']['phperror'] . (int)$_FILES[$File]['error']; + } + + //all checks are ok, try to install the package + + if(count($Errors) == 0 + && $_FILES[$File]['error'] == 0) + { + //install package in system + + if(move_uploaded_file($_FILES[$File]['tmp_name'], './temp/' . basename($_FILES[$File]['name'])) == true) + { + self::InstallNewPackage('./temp/' . basename($_FILES[$File]['name'])); + } + else + { + $Errors[] = $lng['aps']['moveproblem']; + } + } + + if(count($Errors) > 0) + { + //throw errors + + $ErrorMessage = ''; + foreach($Errors as $Error) + { + $ErrorMessage.= '
  • ' . $Error . '
  • '; + } + + self::InfoBox(sprintf($lng['aps']['uploaderrors'], htmlspecialchars($_FILES[$File]['name']), $ErrorMessage)); + } + } + } + } + + //generate upload fields + + $Output = ''; + foreach($Files as $File) + { + $Output.= '

    '; + } + + eval("echo \"" . getTemplate("aps/upload") . "\";"); + } + + /** + * function provides a frontend for customers to search packages + */ + + private function SearchPackages() + { + global $lng, $filename, $s, $page, $action; + $Error = 0; + $Ids = array(); + $ShowAll = 0; + + if(isset($_GET['keyword']) + && preg_match('/^[- _0-9a-z\.,:;]+$/i', $_GET['keyword']) != false) + { + //split all keywords + + $Elements = split('[ ,;]', trim($_GET['keyword'])); + + if(count($Elements) == 1 + && strlen($Elements[0]) == 0) + { + //no keyword given -> show all packages + + $ShowAll = 1; + } + else + { + foreach($Elements as $Key) + { + //skip empty values -> prevents that whitespaces lead to the result that all packages will be found + + if($Key == '')continue; + $result = $this->db->query('SELECT * FROM `' . TABLE_APS_PACKAGES . '` WHERE `Status` = ' . PACKAGE_ENABLED . ' AND (`Name` LIKE "%' . $this->db->escape($Key) . '%" OR `Path` LIKE "%' . $this->db->escape($Key) . '%" OR `Version` LIKE "%' . $this->db->escape($Key) . '%") '); + + //check if keyword got a result + + if($this->db->num_rows($result) > 0) + { + //add all package ids which match to result array + + while($Temp = $this->db->fetch_array($result)) + { + if(!in_array($Temp['ID'], $Ids))$Ids[] = $Temp['ID']; + } + } + } + + //no matches found to given keywords + + if(count($Ids) == 0) + { + $Error = 2; + } + } + } + elseif(isset($_GET['keyword']) + && strlen($_GET['keyword']) != 0) + { + //input contains illegal characters + + $Error = 1; + } + elseif(isset($_GET['keyword']) + && strlen($_GET['keyword']) == 0) + { + //nothing has been entered - show all packages + + $ShowAll = 1; + } + + //show errors + + if($Error == 1) + { + self::InfoBox($lng['aps']['nospecialchars']); + } + elseif($Error == 2) + { + self::InfoBox($lng['aps']['noitemsfound']); + } + + //show keyword only if format is ok + + $Keyword = ''; + + if(isset($_GET['keyword']) + && $Error == 0)$Keyword = htmlspecialchars($_GET['keyword']); + eval("echo \"" . getTemplate("aps/search") . "\";"); + + //show results + + if(($Error == 0 && count($Ids) > 0) + || $ShowAll == 1) + { + //run query based on search results + + if($ShowAll != 1) + { + $result = $this->db->query('SELECT * FROM `' . TABLE_APS_PACKAGES . '` WHERE `ID` IN (' . $this->db->escape(implode(',', $Ids)) . ')'); + } + else + { + $result = $this->db->query('SELECT * FROM `' . TABLE_APS_PACKAGES . '` WHERE `Status` = ' . PACKAGE_ENABLED); + } + + //show package infos + + if($this->db->num_rows($result) > 0) + { + if($this->db->num_rows($result) == 1) + { + self::InfoBox(sprintf($lng['aps']['searchoneresult'], $this->db->num_rows($result))); + } + else + { + self::InfoBox(sprintf($lng['aps']['searchmultiresult'], $this->db->num_rows($result))); + } + + while($Row = $this->db->fetch_array($result)) + { + self::ShowPackageInfo($Row['ID']); + } + } + } + } + + /** + * function provides a frontend for customers to show the status of installed packages + * + * @param customerid id of customer from database + */ + + private function CustomerStatus($CustomerId) + { + global $lng, $filename, $s, $page, $action; + $Data = ''; + $Fieldname = ''; + $Fieldvalue = ''; + $Groupname = ''; + $result = $this->db->query('SELECT * FROM `' . TABLE_APS_INSTANCES . '` WHERE `CustomerID` = ' . $this->db->escape($CustomerId)); + + //customer hasnt installed any package yet + + if($this->db->num_rows($result) == 0) + { + self::InfoBox($lng['aps']['nopackagesinstalled']); + return; + } + + while($Row = $this->db->fetch_array($result)) + { + $Data = ''; + $result2 = $this->db->query('SELECT * FROM `' . TABLE_APS_PACKAGES . '` WHERE `ID` = ' . $this->db->escape($Row['PackageID'])); + $Row2 = $this->db->fetch_array($result2); + $Xml = self::GetXmlFromFile('./packages/' . $Row2['Path'] . '/APP-META.xml'); + + //skip if parse of xml has failed + + if($Xml == false)continue; + $Icon = './images/default.png'; + + //show data and status of package + + if($Xml->icon['path']) + { + $Icon = './packages/' . $Row2['Path'] . '/' . basename($Xml->icon['path']); + } + + $Summary = $Xml->summary; + $Fieldname = $lng['aps']['version']; + $Fieldvalue = $Xml->version . ' (Release ' . $Xml->release . ')'; + eval("\$Data.=\"" . getTemplate("aps/data") . "\";"); + $Temp = ''; + + switch($Row['Status']) + { + case INSTANCE_INSTALL: + $Temp.= $lng['aps']['instance_install']; + break; + case INSTANCE_TASK_ACTIVE: + $Temp.= $lng['aps']['instance_task_active']; + break; + case INSTANCE_SUCCESS: + $Temp.= $lng['aps']['instance_success']; + break; + case INSTANCE_ERROR: + $Temp.= $lng['aps']['instance_error']; + break; + case INSTANCE_UNINSTALL: + $Temp.= $lng['aps']['instance_uninstall']; + break; + default: + $Temp.= $lng['aps']['unknown_status']; + break; + } + + $Fieldname = $lng['aps']['currentstatus']; + $Fieldvalue = $Temp; + eval("\$Data.=\"" . getTemplate("aps/data") . "\";"); + $result2 = $this->db->query('SELECT * FROM `' . TABLE_APS_TASKS . '` WHERE `InstanceID` = ' . $this->db->escape($Row['ID'])); + $Temp = ''; + + if($this->db->num_rows($result2) > 0) + { + while($Row2 = $this->db->fetch_array($result2)) + { + switch($Row2['Task']) + { + case TASK_INSTALL: + $Temp.= $lng['aps']['task_install'] . '
    '; + break; + case TASK_REMOVE: + $Temp.= $lng['aps']['task_remove'] . '
    '; + break; + case TASK_RECONFIGURE: + $Temp.= $lng['aps']['task_reconfigure'] . '
    '; + break; + case TASK_UPGRADE: + $Temp.= $lng['aps']['task_upgrade'] . '
    '; + break; + default: + $Temp.= $lng['aps']['unknown_status'] . '
    '; + break; + } + } + } + else + { + $Temp.= $lng['aps']['no_task']; + } + + $Fieldname = $lng['aps']['activetasks']; + $Fieldvalue = $Temp; + eval("\$Data.=\"" . getTemplate("aps/data") . "\";"); + + //show entrypoints for application (important URLs within the application) + + if($Row['Status'] == INSTANCE_SUCCESS) + { + $Temp = ''; + + //get domain to domain id + + $result3 = $this->db->query('SELECT * FROM `' . TABLE_APS_SETTINGS . '` WHERE `Name` = "main_domain" AND `InstanceID` = ' . $this->db->escape($Row['ID'])); + $Row3 = $this->db->fetch_array($result3); + $result4 = $this->db->query('SELECT * FROM `' . TABLE_PANEL_DOMAINS . '` WHERE `customerid` = ' . $this->db->escape($CustomerId) . ' AND `id` = ' . $this->db->escape($Row3['Value'])); + $Row3 = $this->db->fetch_array($result4); + $Domain = $Row3['domain']; + + //get sub location for domain + + $result5 = $this->db->query('SELECT * FROM `' . TABLE_APS_SETTINGS . '` WHERE `Name` = "main_location" AND `InstanceID` = ' . $this->db->escape($Row['ID'])); + $Row3 = $this->db->fetch_array($result5); + $Location = $Row3['Value']; + + //show main site link + + if($Location == '') + { + $Temp.= '' . $lng['aps']['mainsite'] . '
    '; + } + else + { + $Temp.= '' . $lng['aps']['mainsite'] . '
    '; + } + + //show other links from meta data + + if($Xml->{'entry-points'}) + { + foreach($Xml->{'entry-points'}->entry as $Entry) + { + if($Location == '') + { + $Temp.= '' . $Entry->label . '
    '; + } + else + { + $Temp.= '' . $Entry->label . '
    '; + } + } + } + + $Fieldname = $lng['aps']['applicationlinks']; + $Fieldvalue = $Temp; + eval("\$Data.=\"" . getTemplate("aps/data") . "\";"); + } + + eval("echo \"" . getTemplate("aps/package_status") . "\";"); + unset($Xml); + } + } + + /** + * function creates a new instance of a package based on the installer data + * + * @param packageid id of package from database + * @param customerid id of customer from database + * @return success true/error false + */ + + private function CreatePackageInstance($PackageId, $CustomerId) + { + global $lng; + + if(!self::IsValidPackageId($PackageId, true))return false; + + //has user pressed F5/reload? + + $result = $this->db->query('SELECT * FROM `' . TABLE_APS_TEMP_SETTINGS . '` WHERE `CustomerID` = ' . $this->db->escape($CustomerId)); + + if($this->db->num_rows($result) == 0) + { + self::InfoBox($lng['aps']['erroronnewinstance']); + return false; + } + + //get path to package xml file + + $result = $this->db->query('SELECT * FROM `' . TABLE_APS_PACKAGES . '` WHERE `ID` = ' . $this->db->escape($PackageId)); + $Row = $this->db->fetch_array($result); + $Xml = self::GetXmlFromFile('./packages/' . $Row['Path'] . '/APP-META.xml'); + + //return if parse of xml file has failed + + if($Xml == false)return false; + + //add new instance + + $this->db->query('INSERT INTO `' . TABLE_APS_INSTANCES . '` (`CustomerID`, `PackageID`, `Status`) VALUES (' . $this->db->escape($CustomerId) . ', ' . $this->db->escape($PackageId) . ', ' . INSTANCE_INSTALL . ')'); + $result = $this->db->query('SELECT * FROM `' . TABLE_APS_INSTANCES . '` WHERE `CustomerID` = ' . $this->db->escape($CustomerId) . ' AND `PackageID` = ' . $this->db->escape($PackageId) . ' AND `Status` = ' . INSTANCE_INSTALL . ' ORDER BY ID DESC'); + $Row = $this->db->fetch_array($result); + + //copy & delete temporary data + + $this->db->query('INSERT INTO `' . TABLE_APS_SETTINGS . '` (`InstanceID`, `Name`, `Value`) SELECT ' . $this->db->escape($Row['ID']) . ' AS `InstanceID`, `Name`, `Value` FROM `' . TABLE_APS_TEMP_SETTINGS . '` WHERE `CustomerID` = ' . $this->db->escape($CustomerId) . ' AND `PackageID` = ' . $this->db->escape($PackageId)); + $this->db->query('DELETE FROM `' . TABLE_APS_TEMP_SETTINGS . '` WHERE `CustomerID` = ' . $this->db->escape($CustomerId) . ' AND `PackageID` = ' . $this->db->escape($PackageId)); + + //add task for installation + + $this->db->query('INSERT INTO `' . TABLE_APS_TASKS . '` (`InstanceID`, `Task`) VALUES(' . $this->db->escape($Row['ID']) . ', ' . TASK_INSTALL . ')'); + + //update used counter for packages + + $this->db->query('UPDATE `' . TABLE_PANEL_CUSTOMERS . '` SET `aps_packages_used` = `aps_packages_used` + 1 WHERE `customerid` = ' . (int)$CustomerId); + self::InfoBox(sprintf($lng['aps']['successonnewinstance'], $Xml->name)); + unset($Xml); + } + + /** + * convert human readable memory sizes into bytes + * + * @param value ini_get() formated memory size + * @return memory size in bytes + */ + + private function PhpMemorySizeToBytes($Value) + { + //convert memory formats from php.ini to a integer value in bytes + + $Value = trim($Value); + $Last = strtolower($Value{strlen($Value) - 1}); + + switch($Last) + { + case 'g': + $Value*= 1024; + case 'm': + $Value*= 1024; + case 'k': + $Value*= 1024; + } + + return $Value; + } + + /** + * convert php.ini formated strings into true and false as a string + * + * @param value value to read from php.ini (format: safe_mode or safe-mode) + * @return (true|false) as string + */ + + private function TrueFalseIniGet($Value) + { + //convert php.ini values to true and false as string + + $Value = ini_get(str_replace(array('-'), array('_'), $Value)); + + if($Value == 0 + || $Value == false + || $Value == 'off') + { + return 'false'; + } + else + { + return 'true'; + } + } + + /** + * packages can fail during the validation process. this function allows to check for exceptions + * + * @param category category as string to check + * @param item item within category to check + * @return success true (value has exception) / error false (value has no exception) + */ + + private function CheckException($Category, $Item, $Value) + { + global $settings; + + //search for element within system settings + + $Elements = explode(',', $settings['aps'][$Category . '-' . $Item]); + foreach($Elements as $Element) + { + if(strtolower($Element) == strtolower($Value))return true; + } + + return false; + } + + /** + * packages must be validated within the submappings of a filesystem structure + * + * @param parentmapping instance of parsed xml file, current mapping position + * @param url relative path for application specifying the current path within the mapping tree + * @return array with errors found, optional empty when no errors were found + */ + + private function CheckSubmappings($ParentMapping, $Url) + { + global $lng; + $Error = array(); + + //check for special PHP handler extensions + + $XmlPhpMapping = $ParentMapping->children('http://apstandard.com/ns/1/php'); + foreach($XmlPhpMapping->handler as $Handler) + { + if(isset($Handler->extension[0]) + && strval($Handler->extension[0]) != 'php') + { + $Error[] = $lng['aps']['php_misc_handler']; + } + + if(isset($Handler->disabled)) + { + $Error[] = $lng['aps']['php_misc_directoryhandler']; + } + } + + //check for special ASP.NET url handler within mappings + + $XmlAspMapping = $ParentMapping->children('http://apstandard.com/ns/1/aspnet'); + + if($XmlAspMapping->handler) + { + $Error[] = $lng['aps']['asp_net']; + } + + //check for special CGI url handlers within mappings + + $XmlCgiMapping = $ParentMapping->children('http://apstandard.com/ns/1/cgi'); + + if($XmlCgiMapping->handler) + { + $Error[] = $lng['aps']['cgi']; + } + + //resolve deeper mappings + + foreach($ParentMapping->mapping as $Mapping) + { + $Return = array(); + + //recursive check of other mappings + + if($Url == '/') + { + $Return = self::CheckSubmappings($Mapping, $Url . $Mapping['url']); + } + else + { + $Return = self::CheckSubmappings($Mapping, $Url . '/' . $Mapping['url']); + } + + //if recursive checks found errors, attach them + + if(count($Return) != 0) + { + foreach($Return as $Value) + { + if(!in_array($Value, $Error))$Error[] = $Value; + } + } + } + + return $Error; + } + + /** + * function validates a package against a lot of options and installs it if all conditions have succeeded + * + * @param filename path to zipfile to install + */ + + private function InstallNewPackage($Filename) + { + global $lng; + + if(file_exists($Filename) + && $Xml = self::GetXmlFromZip($Filename)) + { + $Error = array(); + + //check alot of stuff if package is supported + //php modules + + $XmlPhp = $Xml->requirements->children('http://apstandard.com/ns/1/php'); + + if($XmlPhp->extension) + { + $ExtensionsLoaded = get_loaded_extensions(); + foreach($XmlPhp->extension as $Extension) + { + if(!in_array($Extension, $ExtensionsLoaded) + && !self::CheckException('php', 'extension', $Extension)) + { + $Error[] = sprintf($lng['aps']['php_extension'], $Extension); + } + } + } + + //php functions + + if($XmlPhp->function) + { + foreach($XmlPhp->function as $Function) + { + if(!function_exists($Function) + && !self::CheckException('php', 'function', $Function)) + { + $Error[] = sprintf($lng['aps']['php_function'], $Function); + } + } + } + + //php values + + $PhpValues = array( + 'short-open-tag', + 'file-uploads', + 'magic-quotes-gpc', + 'register-globals', + 'allow-url-fopen', + 'safe-mode' + ); + foreach($PhpValues as $Value) + { + if($XmlPhp->{$Value}) + { + if(self::TrueFalseIniGet($Value) != $XmlPhp->{$Value} + && !self::CheckException('php', 'configuration', str_replace(array('-'), array('_'), $Value))) + { + $Error[] = sprintf($lng['aps']['php_configuration'], str_replace(array('-'), array('_'), $Value)); + } + } + } + + if($XmlPhp->{'post-max-size'}) + { + if(self::PhpMemorySizeToBytes(ini_get('post_max_size')) < intval($XmlPhp->{'post-max-size'}) + && !self::CheckException('php', 'configuration', 'post_max_size')) + { + $Error[] = $lng['aps']['php_configuration_post_max_size']; + } + } + + if($XmlPhp->{'memory-limit'}) + { + if(self::PhpMemorySizeToBytes(ini_get('memory_limit')) < intval($XmlPhp->{'memory-limit'}) + && !self::CheckException('php', 'configuration', 'memory_limit')) + { + $Error[] = $lng['aps']['php_configuration_memory_limit']; + } + } + + if($XmlPhp->{'max-execution-time'}) + { + if(ini_get('max_execution_time') < intval($XmlPhp->{'max-execution-time'}) + && !self::CheckException('php', 'configuration', 'max_execution_time')) + { + $Error[] = $lng['aps']['php_configuration_max_execution_time']; + } + } + + //php version + //must be done with xpath otherwise check not possible (XML parser problem with attributes) + + $Xml->registerXPathNamespace('phpversion', 'http://apstandard.com/ns/1/php'); + $Result = $Xml->xpath('//phpversion:version'); + + if(isset($Result[0]['min'])) + { + if(version_compare($Result[0]['min'], PHP_VERSION) == 1) + { + $Error[] = $lng['aps']['php_general_old']; + } + } + + if(isset($Result[0]['max-not-including'])) + { + if(version_compare($Result[0]['max-not-including'], PHP_VERSION) == - 1) + { + $Error[] = $lng['aps']['php_general_new']; + } + } + + //database + + $XmlDb = $Xml->requirements->children('http://apstandard.com/ns/1/db'); + + if($XmlDb->db->id) + { + if($XmlDb->db->{'server-type'} != 'mysql') + { + $Error[] = $lng['aps']['db_mysql_support']; + } + + if(version_compare($XmlDb->db->{'server-min-version'}, mysql_get_server_info()) == 1) + { + $Error[] = $lng['aps']['db_mysql_version']; + } + } + + //ASP.NET + + $XmlAsp = $Xml->requirements->children('http://apstandard.com/ns/1/aspnet'); + + if($XmlAsp->handler + || $XmlAsp->permissions + || $XmlAsp->version) + { + $Error[] = $lng['aps']['asp_net']; + } + + //CGI + + $XmlCgi = $Xml->requirements->children('http://apstandard.com/ns/1/cgi'); + + if($XmlCgi->handler) + { + $Error[] = $lng['aps']['cgi']; + } + + //webserver modules + + $XmlWebserver = $Xml->requirements->children('http://apstandard.com/ns/1/apache'); + + if($XmlWebserver->{'required-module'}) + { + if(function_exists('apache_get_modules')) + { + $ModulesLoaded = apache_get_modules(); + foreach($XmlWebserver->{'required-module'} as $Module) + { + if(!in_array($Module, $ModulesLoaded) + && !self::CheckException('webserver', 'module', $Module)) + { + $Error[] = sprintf($lng['aps']['webserver_module'], $Module); + } + } + } + else + { + if(!self::CheckException('webserver', 'module', 'fcgid-any'))$Error[] = $lng['aps']['webserver_fcgid']; + } + } + + //webserver .htaccess + + if($XmlWebserver->htaccess + && !self::CheckException('webserver', 'htaccess', 'htaccess')) + { + $Error[] = $lng['aps']['webserver_htaccess']; + } + + //configuration script check + + if($Xml->{'configuration-script-language'} + && $Xml->{'configuration-script-language'} != 'php') + { + $Error[] = $lng['aps']['misc_configscript']; + } + + //validation against a charset not possible in current version + + foreach($Xml->settings->group as $Group) + { + foreach($Group->setting as $Setting) + { + if($Setting['type'] == 'string' + || $Setting['type'] == 'password') + { + if(isset($Setting['charset'])) + { + if(!in_array($lng['aps']['misc_charset'], $Error))$Error[] = $lng['aps']['misc_charset']; + } + } + } + } + + //check different errors/features in submappings + + $Return = self::CheckSubmappings($Xml->mapping, $Xml->mapping['url']); + + if(count($Return) != 0) + { + foreach($Return as $Value) + { + if(!in_array($Value, $Error))$Error[] = $Value; + } + } + + //check already installed versions + + $result = $this->db->query('SELECT * FROM `' . TABLE_APS_PACKAGES . '` WHERE `Name` = "' . $this->db->escape($Xml->name) . '"'); + $Newer = 0; + + if($this->db->num_rows($result) > 0) + { + while($Row = $this->db->fetch_array($result)) + { + //package is newer, install package as a update + + if(version_compare($Row['Version'] . '-' . $Row['Release'], $Xml->version . '-' . $Xml->release) == - 1) + { + $Newer = 1; + } + + //package is installed already with same version, cancel installation + + if(version_compare($Row['Version'] . '-' . $Row['Release'], $Xml->version . '-' . $Xml->release) == 0) + { + $Error[] = $lng['aps']['misc_version_already_installed']; + break; + } + + //package is older than the one which is installed already, cancel installation + + if(version_compare($Row['Version'] . '-' . $Row['Release'], $Xml->version . '-' . $Xml->release) == 1) + { + $Error[] = $lng['aps']['misc_only_newer_versions']; + break; + } + } + } + + if(count($Error) > 0) + { + //show errors + + $Output = ''; + foreach($Error as $Entry) + { + $Output.= '
  • ' . $Entry . '
  • '; + } + + self::InfoBox(sprintf($lng['aps']['erroronscan'], $Xml->name, $Output)); + return false; + } + else + { + //install package in system, all checks succeeded + + $Destination = './packages/' . basename($Filename) . '/'; + + //create package directory + + if(!file_exists($Destination))mkdir($Destination, 0777, true); + + //copy xml meta data + + self::GetContentFromZip($Filename, 'APP-META.xml', $Destination . 'APP-META.xml'); + + //copy screenshots + + if($Xml->screenshot) + { + foreach($Xml->screenshot as $Screenshot) + { + self::GetContentFromZip($Filename, $Screenshot['path'], $Destination . basename($Screenshot['path'])); + } + } + + //copy icon + + if($Xml->icon['path']) + { + self::GetContentFromZip($Filename, $Xml->icon['path'], $Destination . basename($Xml->icon['path'])); + } + + //copy license + + if($Xml->license + && $Xml->license->text->file) + { + self::GetContentFromZip($Filename, $Xml->license->text->file, $Destination . 'license.txt'); + } + + //insert package to database + + $this->db->query('INSERT INTO `' . TABLE_APS_PACKAGES . '` (`Path`, `Name`, `Version`, `Release`, `Status`) VALUES ("' . $this->db->escape(basename($Filename)) . '", "' . $this->db->escape($Xml->name) . '", "' . $this->db->escape($Xml->version) . '", ' . $this->db->escape($Xml->release) . ', ' . PACKAGE_LOCKED . ')'); + + //copy zipfile do destination + + copy($Filename, $Destination . basename($Filename)); + unlink($Filename); + + //show some feedback messages to admin + + if($Newer == 1) + { + self::InfoBox(sprintf($lng['aps']['successpackageupdate'], $Xml->name)); + } + else + { + self::InfoBox(sprintf($lng['aps']['successpackageinstall'], $Xml->name)); + } + + unset($Xml); + return true; + } + } + else + { + //file cannot be unzipped or parse of xml data has failed + + self::InfoBox(sprintf($lng['aps']['invalidzipfile'], basename($Filename))); + return false; + } + } + + /** + * main function of the class, provides all of the aps installer frontend + */ + + public function MainHandler($Action) + { + global $lng, $filename, $s, $page, $action, $Id; + + //check for basic functions, classes and permissions + + $Error = ''; + + if(!class_exists('SimpleXMLElement') + || !function_exists('zip_open')) + { + $Error.= '
  • ' . $lng['aps']['class_zip_missing'] . '
  • '; + } + + if(!is_writable('./temp/') + || !is_writable('./packages/')) + { + $Error.= '
  • ' . $lng['aps']['dir_permissions'] . '
  • '; + } + + if($Error != '') + { + //show different error to customer and admin + + if(!isset($this->userinfo['customerid'])) + { + self::InfoBox(sprintf($lng['aps']['initerror'], $Error)); + } + else + { + self::InfoBox($lng['aps']['initerror_customer']); + } + + return; + } + + $CustomerId = $this->userinfo['customerid']; + $AdminId = $this->userinfo['adminid']; + $PackagesPerSite = $this->settings['aps']['items_per_page']; + + //run different functions based on action + + if($Action == 'install') + { + //check for valid package id + + if(self::IsValidPackageId($Id, true)) + { + //installation data is given + + if(isset($_POST['withinput'])) + { + $Errors = self::ValidatePackageData($Id, $CustomerId); + + //if there are no input errors, create a new instance + + if(count($Errors) == 0) + { + self::CreatePackageInstance($Id, $CustomerId); + } + else + { + self::ShowPackageInstaller($Id, $Errors, $CustomerId); + } + } + else + { + //empty array -> no errors will be shown to customer + + $Errors = array(); + self::ShowPackageInstaller($Id, $Errors, $CustomerId); + } + } + else + { + self::InfoBox($lng['aps']['iderror']); + } + } + elseif($Action == 'remove') + { + //check for valid instance id + + if(self::IsValidInstanceId($Id, $CustomerId)) + { + //customer has clicked yes to uninstall a package + + if(isset($_POST['answer']) + && $_POST['answer'] == $lng['panel']['yes']) + { + //check if there is already an task + + $result = $this->db->query('SELECT * FROM `' . TABLE_APS_TASKS . '` WHERE `InstanceID` = ' . $this->db->escape($Id) . ' AND `Task` = ' . TASK_REMOVE); + + if($this->db->num_rows($result) > 0) + { + self::InfoBox($lng['aps']['removetaskexisting']); + } + else + { + //remove package, no task existing + + $this->db->query('INSERT INTO `' . TABLE_APS_TASKS . '` (`InstanceID`, `Task`) VALUES (' . (int)$Id . ', ' . TASK_REMOVE . ')'); + $this->db->query('UPDATE `' . TABLE_APS_INSTANCES . '` SET `Status` = ' . INSTANCE_UNINSTALL . ' WHERE `ID` = ' . (int)$Id); + $this->db->query('UPDATE `' . TABLE_PANEL_CUSTOMERS . '` SET `aps_packages_used` = `aps_packages_used` - 1 WHERE `customerid` = ' . (int)$CustomerId); + self::InfoBox($lng['aps']['packagewillberemoved']); + } + } + else + { + //show yes/no question + + $Message = $lng['question']['reallywanttoremove']; + $action_alt = 'customerstatus'; + $Ids = ''; + eval("echo \"" . getTemplate("aps/askyesno") . "\";"); + } + } + else + { + self::InfoBox($lng['aps']['iderror']); + } + } + elseif($Action == 'stopinstall') + { + //check for valid instance id + + if(self::IsValidInstanceId($Id, $CustomerId)) + { + //check if application installation runs already + + $Result = $this->db->query('SELECT * FROM `' . TABLE_APS_INSTANCES . '` WHERE `ID` = ' . $this->db->escape($Id)); + $Row = $this->db->fetch_array($Result); + + if($Row['Status'] == INSTANCE_TASK_ACTIVE) + { + self::InfoBox($lng['aps']['installstoperror']); + } + else + { + if(isset($_POST['answer']) + && $_POST['answer'] == $lng['panel']['yes']) + { + //remove task + + $this->db->query('DELETE FROM `' . TABLE_APS_TASKS . '` WHERE `InstanceID` = ' . $this->db->escape($Id)); + + //remove settings + + $this->db->query('DELETE FROM `' . TABLE_APS_SETTINGS . '` WHERE `InstanceID` = ' . $this->db->escape($Id)); + + //remove instance + + $this->db->query('DELETE FROM `' . TABLE_APS_INSTANCES . '` WHERE `ID` = ' . $this->db->escape($Id)); + + //update used counter + + $this->db->query('UPDATE `' . TABLE_PANEL_CUSTOMERS . '` SET `aps_packages_used` = `aps_packages_used` - 1 WHERE `customerid` = ' . (int)$CustomerId); + self::InfoBox($lng['aps']['installstopped']); + } + else + { + //show yes/no question + + $Message = $lng['question']['reallywanttostop']; + $action_alt = 'customerstatus'; + $Ids = ''; + eval("echo \"" . getTemplate("aps/askyesno") . "\";"); + } + } + } + else + { + self::InfoBox($lng['aps']['iderror']); + } + } + elseif($Action == 'reconfigure') + { + //check for valid instance id + + if(self::IsValidInstanceId($Id, $CustomerId)) + { + self::InfoBox('Reconfigure function not implemented in current version!'); + } + else + { + self::InfoBox($lng['aps']['iderror']); + } + } + elseif($Action == 'details') + { + //show advanced package infos if package id is valid + + if(self::IsValidPackageId($Id, true)) + { + self::ShowPackageInfo($Id, true); + } + else + { + self::InfoBox($lng['aps']['iderror']); + } + } + elseif($Action == 'scan' + && !isset($this->userinfo['customerid'])) + { + //find all files in temp directory + + $Files = scandir('./temp/'); + $Counter = 0; + foreach($Files as $File) + { + //skip invalid "files" + + if(substr($File, -4) != '.zip')continue; + + //install new package in system + + self::InstallNewPackage('./temp/' . $File); + $Counter+= 1; + } + + if($Counter == 0) + { + //throw error if no file was found + + self::InfoBox($lng['aps']['nopacketsforinstallation']); + } + } + elseif($Action == 'manageinstances' + && !isset($this->userinfo['customerid'])) + { + self::ManageInstances(); + } + elseif($Action == 'managepackages' + && !isset($this->userinfo['customerid'])) + { + self::ManagePackages(); + } + elseif($Action == 'upload' + && !isset($this->userinfo['customerid'])) + { + self::UploadNewPackages(); + } + elseif($Action == 'customerstatus') + { + self::CustomerStatus($CustomerId); + } + elseif($Action == 'search') + { + self::SearchPackages(); + } + elseif($Action == 'overview') + { + // show packages with paging + + if(isset($_GET['page']) + && preg_match('/^[0-9]+$/', $_GET['page']) != - 1) + { + //check if page parameter is valid + //get all packages to find out how many pages are needed + + $result = $this->db->query('SELECT * FROM `' . TABLE_APS_PACKAGES . '` WHERE `Status` = ' . PACKAGE_ENABLED . ' ORDER BY `Name` ASC'); + $Pages = intval($this->db->num_rows($result) / $PackagesPerSite); + + if(($this->db->num_rows($result) / $PackagesPerSite) > $Pages)$Pages+= 1; + + if($_GET['page'] >= 1 + && $_GET['page'] <= $Pages) + { + //page parameter is within available pages, now show packages for that given page + + $result2 = $this->db->query('SELECT * FROM `' . TABLE_APS_PACKAGES . '` WHERE `Status` = ' . PACKAGE_ENABLED . ' ORDER BY `Name` ASC LIMIT ' . $this->db->escape((intval($_GET['page']) - 1) * $PackagesPerSite) . ', ' . $this->db->escape($PackagesPerSite)); + + //show packages + + while($Row3 = $this->db->fetch_array($result2)) + { + self::ShowPackageInfo($Row3['ID']); + } + + //show URLs for other pages + + if($Pages > 1) + { + echo ('

    '); + for ($i = 1;$i < $Pages + 1;$i++) + { + if($i == $_GET['page']) + { + echo ('' . $i . ''); + } + else + { + echo ('' . $i . ''); + } + } + + echo ('


    '); + } + } + else + { + //page parameter isnt within available pages, show packages from first page + + $result2 = $this->db->query('SELECT * FROM `' . TABLE_APS_PACKAGES . '` WHERE `Status` = ' . PACKAGE_ENABLED . ' ORDER BY `Name` ASC LIMIT 0, ' . $this->db->escape($PackagesPerSite)); + + //show packages + + while($Row3 = $this->db->fetch_array($result2)) + { + self::ShowPackageInfo($Row3['ID']); + } + + //fetch number of packages to calculate the number of pages + + $result3 = $this->db->query('SELECT * FROM `' . TABLE_APS_PACKAGES . '` WHERE `Status` = ' . PACKAGE_ENABLED . ' ORDER BY `Name` ASC'); + $Pages = intval($this->db->num_rows($result3) / $PackagesPerSite); + + if(($this->db->num_rows($result3) / $PackagesPerSite) > $Pages)$Pages+= 1; + + //show URLs for other pages + + if($Pages > 1) + { + echo ('

    '); + for ($i = 1;$i < $Pages + 1;$i++) + { + echo ('' . $i . ''); + } + + echo ('
    '); + } + } + } + else + { + //page parameter isnt valid, show packages from first page + + $result2 = $this->db->query('SELECT * FROM `' . TABLE_APS_PACKAGES . '` WHERE `Status` = ' . PACKAGE_ENABLED . ' ORDER BY `Name` ASC LIMIT 0, ' . $this->db->escape($PackagesPerSite)); + + if($this->db->num_rows($result2) == 0) + { + self::InfoBox($lng['aps']['nopackagestoinstall']); + return; + } + + //show packages + + while($Row3 = $this->db->fetch_array($result2)) + { + self::ShowPackageInfo($Row3['ID']); + } + + //fetch number of packages to calculate number of pages + + $result3 = $this->db->query('SELECT * FROM `' . TABLE_APS_PACKAGES . '` WHERE `Status` = ' . PACKAGE_ENABLED . ' ORDER BY `Name` ASC'); + $Pages = intval($this->db->num_rows($result3) / $PackagesPerSite); + + if(($this->db->num_rows($result3) / $PackagesPerSite) > $Pages)$Pages+= 1; + + //show URLs for other pages + + if($Pages > 1) + { + echo ('

    '); + for ($i = 1;$i < $Pages + 1;$i++) + { + if($i == 1) + { + echo ('' . $i . ''); + } + else + { + echo ('' . $i . ''); + } + } + + echo ('


    '); + } + } + } + } + + /** + * function extracts resources from a zipfile to return or save them on disk + * + * @param filename zipfile to read data from + * @param file file within zip archive to read + * @param destination optional parameter where to save file from within the zip file + * @return success content of file from zip archive / error false + */ + + private function GetContentFromZip($Filename, $File, $Destination = '') + { + if(!file_exists($Filename))return false; + $Content = ''; + + //now using the new ZipArchive class from php 5.2 + + $Zip = new ZipArchive; + $Resource = $Zip->open(realpath($Filename)); + + if($Resource === true) + { + $FileHandle = $Zip->getStream($File); + + if(!$FileHandle)return false; + + while(!feof($FileHandle)) + { + $Content.= fread($FileHandle, 8192); + } + + fclose($FileHandle); + $Zip->close(); + } + else + { + //on 64 bit systems the zip functions can fail -> use safe_exec to extract the files + + $ReturnLines = array(); + $ReturnVal = - 1; + $ReturnLines = safe_exec('unzip -o -j -qq ' . escapeshellarg(realpath($Filename)) . ' ' . escapeshellarg($File) . ' -d ' . escapeshellarg(sys_get_temp_dir() . '/'), $ReturnVal); + + if($ReturnVal == 0) + { + $Content = file_get_contents(sys_get_temp_dir() . '/' . basename($File)); + unlink(sys_get_temp_dir() . '/' . basename($File)); + + if($Content == false)return false; + } + else + { + return false; + } + } + + //return content of file from within the zipfile or save to disk + + if($Content == '') + { + return false; + } + else + { + if($Destination == '') + { + return $Content; + } + else + { + //open file and save content + + $File = fopen($Destination, "wb"); + + if($File) + { + fwrite($File, $Content); + fclose($File); + } + else + { + return false; + } + } + } + } + + /** + * fetches the xml metafile from a zipfile and returns the parsed data + * + * @param filename zipfile containing the xml meta data + * @return success parsed xml content of zipfile / error false + */ + + private function GetXmlFromZip($Filename) + { + if(!file_exists($Filename))return false; + + //get content for xml meta data file from within the zipfile + + if($XmlContent = self::GetContentFromZip($Filename, 'APP-META.xml')) + { + //parse xml content + + $Xml = new SimpleXMLElement($XmlContent); + return $Xml; + } + else + { + return false; + } + } + + /** + * reads the content of a xml metafile from disk and returns the parsed data + * + * @param filename xmlfile to parse + * @return success parsed xml content of file / error false + */ + + private function GetXmlFromFile($Filename) + { + //read xml file from disk and return parsed data + + if(!file_exists($Filename))return false; + $XmlContent = file_get_contents($Filename); + $Xml = new SimpleXMLElement($XmlContent); + return $Xml; + } + + /** + * check whether a given package id is valid + * + * @param packageid id of package from database to check vor validity + * @param customer check if package can be used by customer and/or admin [true|false] + * @return success valid package id (id > 0 based on database layout) / error false + */ + + private function IsValidPackageId($PackageId, $Customer) + { + if(preg_match('/^[0-9]+$/', $PackageId) != 1)return false; + + if($Customer == true) + { + //customers can only see packages which are enabled + + $result = $this->db->query('SELECT * FROM `' . TABLE_APS_PACKAGES . '` WHERE `Status` = ' . PACKAGE_ENABLED . ' AND `ID` = ' . $this->db->escape($PackageId)); + + if($this->db->num_rows($result) > 0) + { + return $PackageId; + } + else + { + return false; + } + } + else + { + //admins can see all packages + + $result = $this->db->query('SELECT * FROM `' . TABLE_APS_PACKAGES . '` WHERE `ID` = ' . $this->db->escape($PackageId)); + + if($this->db->num_rows($result) > 0) + { + return $PackageId; + } + else + { + return false; + } + } + } + + /** + * check whether a given instance id is valid + * + * @param packageid id of instance from database to check vor validity + * @return success valid instance id (id > 0 based on database layout) / error false + */ + + private function IsValidInstanceId($InstanceId, $CustomerId) + { + if(preg_match('/^[0-9]+$/', $InstanceId) != 1)return false; + $result = $this->db->query('SELECT * FROM `' . TABLE_APS_INSTANCES . '` WHERE `CustomerID` = ' . $this->db->escape($CustomerId) . ' AND `ID` = ' . $this->db->escape($InstanceId)); + + if($this->db->num_rows($result) > 0) + { + return $InstanceId; + } + else + { + return false; + } + } + + /** + * save installation values fetched from the installation wizard + * + * @param packageid id of package from database + * @param customerid id of customer for who the values should be saved + * @param name name of field to save + * @param value value to save for previously given name + */ + + private function SetInstallationValue($PackageId, $CustomerId, $Name, $Value) + { + $result = $this->db->query('SELECT * FROM `' . TABLE_APS_TEMP_SETTINGS . '` WHERE `PackageID` = ' . $this->db->escape($PackageId) . ' AND `CustomerID` = ' . $this->db->escape($CustomerId) . ' AND `Name` = "' . $this->db->escape($Name) . '"'); + + if($this->db->num_rows($result) == 0) + { + $this->db->query('INSERT INTO `' . TABLE_APS_TEMP_SETTINGS . '` (`PackageID`, `CustomerID`, `Name`, `Value`) VALUES (' . $this->db->escape($PackageId) . ', ' . $this->db->escape($CustomerId) . ', "' . $this->db->escape($Name) . '", "' . $this->db->escape($Value) . '")'); + } + else + { + $Row = $this->db->fetch_array($result); + $this->db->query('UPDATE `' . TABLE_APS_TEMP_SETTINGS . '` SET `PackageID` = ' . $this->db->escape($PackageId) . ', `CustomerID` = ' . $this->db->escape($CustomerId) . ', `Name` = "' . $this->db->escape($Name) . '", `Value` ="' . $this->db->escape($Value) . '" WHERE `ID` = ' . $this->db->escape($Row['ID'])); + } + } + + /** + * return previously saved installation values + * + * @param packageid id of package from database + * @param customerid id of customer for who the values should be read + * @param name name of field to read + * @return success value of field from database / error false + */ + + private function GetInstallationValue($PackageId, $CustomerId, $Name) + { + $result = $this->db->query('SELECT * FROM `' . TABLE_APS_TEMP_SETTINGS . '` WHERE `PackageID` = ' . $this->db->escape($PackageId) . ' AND `CustomerID` = ' . $this->db->escape($CustomerId) . ' AND `Name` = "' . $this->db->escape($Name) . '"'); + + if($this->db->num_rows($result) == 0) + { + return false; + } + else + { + $Row = $this->db->fetch_array($result); + return $Row['Value']; + } + } + + /** + * fix a path given by the customer + * + * @param path path which could be compromised + * @return corrected path + */ + + private function MakeSecurePath($path) + { + //code based on syscp core code + + $search = Array( + '#/+#', + '#\.+#', + '#\0+#', + '#\\\\+#' + ); + $replace = Array( + '/', + '', + '', + '/' + ); + $path = preg_replace($search, $replace, $path); + + //no / at the end + + if(substr($path, strlen($path) - 1, 1) == '/')$path = substr($path, 0, strlen($path) - 1); + + //no / at beginning + + if(substr($path, 0, 1) == '/')$path = substr($path, 1); + return $path; + } + + /** + * validate the input of a customer against the xml meta descriptions + * + * @param packageid id of package from database + * @param customerid id of customer from database + * @return success/error array of errors found containing fields that were wrong + */ + + private function ValidatePackageData($PackageId, $CustomerId) + { + if(!self::IsValidPackageId($PackageId, true))return false; + $result = $this->db->query('SELECT * FROM `' . TABLE_APS_PACKAGES . '` WHERE `ID` = ' . $this->db->escape($PackageId)); + $Row = $this->db->fetch_array($result); + $Xml = self::GetXmlFromFile('./packages/' . $Row['Path'] . '/APP-META.xml'); + + //return if parse of xml file has failed + + if($Xml == false)return false; + + //check all data fields of xml file against inut of customer + + $Error = array(); + foreach($Xml->settings->group as $Group) + { + foreach($Group->setting as $Setting) + { + $FieldId = strval($Setting['id']); + + if($Setting['type'] == 'string' + || $Setting['type'] == 'password') + { + if(isset($_POST[$FieldId])) + { + if(isset($Setting['min-length']) + && strlen($_POST[$FieldId]) < $Setting['min-length']) + { + if(!in_array($FieldId, $Error))$Error[] = $FieldId; + } + + if(isset($Setting['max-length']) + && strlen($_POST[$FieldId]) > $Setting['max-length']) + { + if(!in_array($FieldId, $Error))$Error[] = $FieldId; + } + + if(isset($Setting['regex']) + && !preg_match("/" . $Setting['regex'] . "/", $_POST[$FieldId])) + { + if(!in_array($FieldId, $Error))$Error[] = $FieldId; + } + + /* + elseif(isset($Setting['charset'])) + { + //CHARSET VALIDATION FOR LATER VERSIONS + } + */ + + if(!in_array($FieldId, $Error))self::SetInstallationValue($PackageId, $CustomerId, $FieldId, $_POST[$FieldId]); + } + else + { + if(!in_array($FieldId, $Error))$Error[] = $FieldId; + } + } + else + + if($Setting['type'] == 'email') + { + if(isset($_POST[$FieldId])) + { + if(!preg_match("/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/", $_POST[$FieldId])) + { + if(!in_array($FieldId, $Error))$Error[] = $FieldId; + } + + if(!in_array($FieldId, $Error))self::SetInstallationValue($PackageId, $CustomerId, $FieldId, $_POST[$FieldId]); + } + else + { + if(!in_array($FieldId, $Error))$Error[] = $FieldId; + } + } + elseif($Setting['type'] == 'domain-name') + { + if(isset($_POST[$FieldId])) + { + if(!preg_match("^(http|https)\://([a-zA-Z0-9\.\-]+(\:[a-zA-Z0-9\.&%\$\-]+)*@)*((25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])|localhost|([a-zA-Z0-9\-]+\.)*[a-zA-Z0-9\-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(\:[0-9]+)*(/($|[a-zA-Z0-9\.\,\?\'\\\+&%\$#\=~_\-]+))*$", $_POST[$FieldId])) + { + if(!in_array($FieldId, $Error))$Error[] = $FieldId; + } + + if(!in_array($FieldId, $Error))self::SetInstallationValue($PackageId, $CustomerId, $FieldId, $_POST[$FieldId]); + } + else + { + if(!in_array($FieldId, $Error))$Error[] = $FieldId; + } + } + elseif($Setting['type'] == 'integer') + { + if(isset($_POST[$FieldId])) + { + //check if number is in the format of float + + if(round($_POST[$FieldId]) != $_POST[$FieldId]) + { + if(!in_array($FieldId, $Error))$Error[] = $FieldId; + } + + if(!is_numeric($_POST[$FieldId])) + { + if(!in_array($FieldId, $Error))$Error[] = $FieldId; + } + + if(isset($Setting['min']) + && intval($_POST[$FieldId]) < intval($Setting['min'])) + { + if(!in_array($FieldId, $Error))$Error[] = $FieldId; + } + + if(isset($Setting['max']) + && intval($_POST[$FieldId]) > intval($Setting['max'])) + { + if(!in_array($FieldId, $Error))$Error[] = $FieldId; + } + + if(!in_array($FieldId, $Error))self::SetInstallationValue($PackageId, $CustomerId, $FieldId, intval($_POST[$FieldId])); + } + else + { + if(!in_array($FieldId, $Error))$Error[] = $FieldId; + } + } + elseif($Setting['type'] == 'float') + { + if(isset($_POST[$FieldId])) + { + if(!is_numeric($_POST[$FieldId])) + { + if(!in_array($FieldId, $Error))$Error[] = $FieldId; + } + + if(isset($Setting['min']) + && floatval($_POST[$FieldId]) < floatval($Setting['min'])) + { + if(!in_array($FieldId, $Error))$Error[] = $FieldId; + } + + if(isset($Setting['max']) + && floatval($_POST[$FieldId]) > floatval($Setting['max'])) + { + if(!in_array($FieldId, $Error))$Error[] = $FieldId; + } + + if(!in_array($FieldId, $Error))self::SetInstallationValue($PackageId, $CustomerId, $FieldId, floatval($_POST[$FieldId])); + } + else + { + if(!in_array($FieldId, $Error))$Error[] = $FieldId; + } + } + elseif($Setting['type'] == 'boolean') + { + if(isset($_POST[$FieldId]) + && $_POST[$FieldId] == 'true') + { + self::SetInstallationValue($PackageId, $CustomerId, $FieldId, 'true'); + } + else + { + self::SetInstallationValue($PackageId, $CustomerId, $FieldId, 'false'); + } + } + elseif($Setting['type'] == 'enum') + { + if(isset($_POST[$FieldId])) + { + foreach($Setting->choice as $Choice) + { + if($Choice['id'] == $_POST[$FieldId]) + { + self::SetInstallationValue($PackageId, $CustomerId, $FieldId, $_POST[$FieldId]); + break; + } + } + } + else + { + if(!in_array($FieldId, $Error))$Error[] = $FieldId; + } + } + } + } + + //database required? + + $XmlDb = $Xml->requirements->children('http://apstandard.com/ns/1/db'); + + if($XmlDb->db->id) + { + if(isset($_POST['main_database_password'])) + { + if(strlen($_POST['main_database_password']) < 8) + { + if(!in_array('main_database_password', $Error))$Error[] = 'main_database_password'; + } + + if(!in_array('main_database_password', $Error))self::SetInstallationValue($PackageId, $CustomerId, 'main_database_password', $_POST['main_database_password']); + } + else + { + if(!in_array('main_database_password', $Error))$Error[] = 'main_database_password'; + } + } + + //application location + + if(isset($_POST['main_domain'])) + { + $result2 = $this->db->query('SELECT * FROM `' . TABLE_PANEL_DOMAINS . '` WHERE `customerid` = ' . $this->db->escape($CustomerId) . ' AND `id` = ' . $this->db->escape($_POST['main_domain'])); + + if($this->db->num_rows($result2) > 0) + { + self::SetInstallationValue($PackageId, $CustomerId, 'main_domain', $_POST['main_domain']); + } + else + { + self::SetInstallationValue($PackageId, $CustomerId, 'main_domain', '-1'); + + if(!in_array('main_domain', $Error))$Error[] = 'main_domain'; + } + } + else + { + self::SetInstallationValue($PackageId, $CustomerId, 'main_domain', '-1'); + + if(!in_array('main_domain', $Error))$Error[] = 'main_domain'; + } + + if(isset($_POST['main_location'])) + { + $Temp = $_POST['main_location']; + + //call function twice for security reasons! + + $Temp = self::MakeSecurePath($Temp); + $Temp = self::MakeSecurePath($Temp); + + //previous instance check + + $InstallPath = ''; + + //find real path for selected domain + + $result3 = $this->db->query('SELECT * FROM `' . TABLE_PANEL_DOMAINS . '` WHERE `customerid` = ' . $this->db->escape($CustomerId) . ' AND `id` = ' . $this->db->escape(self::GetInstallationValue($PackageId, $CustomerId, 'main_domain'))); + + if($this->db->num_rows($result3) > 0) + { + //build real path + + $Row = $this->db->fetch_array($result3); + $InstallPath = $Row['documentroot']; + $InstallPath.= $Temp; + $result4 = $this->db->query('SELECT * FROM `' . TABLE_APS_INSTANCES . '` WHERE `CustomerID` = ' . $this->db->escape($CustomerId)); + + //get all instances from current customer + //thats needed because there cannot be installed two apps within the same directory + + while($Row3 = $this->db->fetch_array($result4)) + { + //get all domains linked to instances + + $result5 = $this->db->query('SELECT * FROM `' . TABLE_APS_SETTINGS . '` WHERE `InstanceID` = ' . $this->db->escape($Row3['ID']) . ' AND `Name` = "main_domain"'); + + if($this->db->num_rows($result5) > 0) + { + $Row2 = $this->db->fetch_array($result5); + $Reserved = ''; + + //get real domain path + + $result6 = $this->db->query('SELECT * FROM `' . TABLE_PANEL_DOMAINS . '` WHERE `customerid` = ' . $this->db->escape($CustomerId) . ' AND `id` = ' . $this->db->escape($Row2['Value'])); + + if($this->db->num_rows($result6) > 0) + { + $Row = $this->db->fetch_array($result6); + $Reserved = $Row['documentroot']; + } + + //get location under domain + + $result7 = $this->db->query('SELECT * FROM `' . TABLE_APS_SETTINGS . '` WHERE `InstanceID` = ' . $this->db->escape($Row3['ID']) . ' AND `Name` = "main_location"'); + + if($this->db->num_rows($result7) > 0) + { + $Row = $this->db->fetch_array($result7); + $Reserved.= $Row['Value']; + } + + //check whether there is another app installed already + + if($Reserved == $InstallPath) + { + if(!in_array('main_location', $Error))$Error[] = 'main_location'; + break; + } + } + } + } + + if(!in_array('main_location', $Error))self::SetInstallationValue($PackageId, $CustomerId, 'main_location', $Temp); + } + else + { + if(!in_array('main_location', $Error))$Error[] = 'main_location'; + self::SetInstallationValue($PackageId, $CustomerId, 'main_location', ''); + } + + if($Xml->license) + { + if($Xml->license['must-accept'] + && $Xml->license['must-accept'] == 'true') + { + if(isset($_POST['license']) + && $_POST['license'] == 'true') + { + self::SetInstallationValue($PackageId, $CustomerId, 'license', 'true'); + } + else + { + self::SetInstallationValue($PackageId, $CustomerId, 'license', 'false'); + + if(!in_array('license', $Error))$Error[] = 'license'; + } + } + } + + unset($Xml); + return $Error; + } + + /** + * functions provides the frontend of the installation wizard for the customer + * + * @param packageid id of package from database + * @param wrongdata array of fields that were wrong in previous validation check + * @return error false / success none + */ + + private function ShowPackageInstaller($PackageId, $WrongData, $CustomerId) + { + global $lng, $filename, $s, $page, $action; + $Data = ''; + $Fieldname = ''; + $Fieldvalue = ''; + $Groupname = ''; + + if(!self::IsValidPackageId($PackageId, true))return false; + $result = $this->db->query('SELECT * FROM `' . TABLE_APS_PACKAGES . '` WHERE `ID` = ' . $this->db->escape($PackageId)); + $Row = $this->db->fetch_array($result); + $Xml = self::GetXmlFromFile('./packages/' . $Row['Path'] . '/APP-META.xml'); + + //return if parse of xml file has failed + + if($Xml == false)return false; + + //show notifcation if customer has reached his installation limit + + if($this->userinfo['aps_packages'] != '-1' + && (int)$this->userinfo['aps_packages_used'] >= (int)$this->userinfo['aps_packages']) + { + self::InfoBox($lng['aps']['allpackagesused']); + return false; + } + + //icon for package + + $Icon = './images/default.png'; + + if($Xml->icon['path']) + { + $Icon = './packages/' . $Row['Path'] . '/' . basename($Xml->icon['path']); + } + + //show error message if some input was wrong + + $ErrorMessage = 0; + + if(count($WrongData) != 0) + { + $ErrorMessage = 1; + } + + //remove previously entered values if new installation has been triggered + + if(!isset($_POST['withinput'])) + { + $this->db->query('DELETE FROM `' . TABLE_APS_TEMP_SETTINGS . '` WHERE `CustomerID` = ' . $this->db->escape($CustomerId) . ' AND `PackageID` = ' . $this->db->escape($PackageId)); + } + + //where to install app? + + $Temp = 'http://'; + $Value = self::GetInstallationValue($PackageId, $CustomerId, 'main_location'); + + if($Value) + { + $Temp.= '/'; + } + else + { + $Temp.= '/'; + } + + if(in_array('main_domain', $WrongData)) + { + $Temp.= self::FieldError($lng['aps']['nodomains']); + } + + if(in_array('main_location', $WrongData)) + { + $Temp.= self::FieldError($lng['aps']['wrongpath']); + } + + if(!in_array('main_location', $WrongData) + && !in_array('main_domain', $WrongData))$Temp.= '
    '; + $Temp.= '' . $lng['aps']['application_location_description'] . ''; + $Groupname = $lng['aps']['basic_settings']; + $Fieldname = $lng['aps']['application_location']; + $Fieldvalue = $Temp; + eval("\$Data.=\"" . getTemplate("aps/data") . "\";"); + + //database required? + + $XmlDb = $Xml->requirements->children('http://apstandard.com/ns/1/db'); + + if($XmlDb->db->id) + { + $Temp = ''; + + if(in_array('main_database_password', $WrongData)) + { + $Temp.= self::FieldError($lng['aps']['dbpassword']); + } + + if(!in_array('main_database_password', $WrongData))$Temp.= '
    '; + $Temp.= '' . $lng['aps']['database_password_description'] . ''; + $Groupname = ''; + $Fieldname = $lng['aps']['database_password']; + $Fieldvalue = $Temp; + eval("\$Data.=\"" . getTemplate("aps/data") . "\";"); + } + + foreach($Xml->settings->group as $Group) + { + $GroupPrinted = false; + foreach($Group->setting as $Setting) + { + $Temp = ''; + + if($Setting['type'] == 'string' + || $Setting['type'] == 'email' + || $Setting['type'] == 'integer' + || $Setting['type'] == 'float' + || $Setting['type'] == 'domain-name') + { + if(!$GroupPrinted) + { + $Groupname = $Group->name; + $GroupPrinted = true; + } + else + { + $Groupname = ''; + } + + $Value = self::GetInstallationValue($PackageId, $CustomerId, strval($Setting['id'])); + + if($Value) + { + $Temp.= ''; + } + elseif($Setting['default-value']) + { + $Temp.= ''; + } + else + { + $Temp.= ''; + } + + if(in_array($Setting['id'], $WrongData)) + { + if($Setting->{'error-message'}) + { + $Temp.= self::FieldError($Setting->{'error-message'}); + } + else + { + if($Setting['type'] == 'string') + { + $Temp.= self::FieldError($lng['aps']['error_text']); + } + elseif($Setting['type'] == 'email') + { + $Temp.= self::FieldError($lng['aps']['error_email']); + } + elseif($Setting['type'] == 'domain-name') + { + $Temp.= self::FieldError($lng['aps']['domain']); + } + elseif($Setting['type'] == 'integer') + { + $Temp.= self::FieldError($lng['aps']['error_integer']); + } + elseif($Setting['type'] == 'float') + { + $Temp.= self::FieldError($lng['aps']['error_float']); + } + } + } + } + elseif($Setting['type'] == 'password') + { + if(!$GroupPrinted) + { + $Groupname = $Group->name; + $GroupPrinted = true; + } + else + { + $Groupname = ''; + } + + $Temp.= ''; + + if(in_array($Setting['id'], $WrongData)) + { + if($Setting->{'error-message'}) + { + $Temp.= self::FieldError($Setting->{'error-message'}); + } + else + { + $Temp.= self::FieldError($lng['aps']['error_password']); + } + } + } + elseif($Setting['type'] == 'boolean') + { + if(!$GroupPrinted) + { + $Groupname = $Group->name; + $GroupPrinted = true; + } + else + { + $Groupname = ''; + } + + $Value = GetInstallationValue($PackageId, $CustomerId, strval($Setting['id'])); + + if($Value) + { + if($Value == 'true') + { + $Temp.= ''; + } + else + { + $Temp.= ''; + } + } + elseif($Setting['default-value'] == 'true') + { + $Temp.= ''; + } + else + { + $Temp.= ''; + } + } + elseif($Setting['type'] == 'enum') + { + if(!$GroupPrinted) + { + $Groupname = $Group->name; + $GroupPrinted = true; + } + else + { + $Groupname = ''; + } + + $Temp.= ''; + } + + //default field description + + if(isset($Setting->description)) + { + if(!in_array(strval($Setting['id']), $WrongData))$Temp.= '
    '; + $Temp.= '' . $Setting->description . ''; + } + + $Fieldname = $Setting->name; + $Fieldvalue = $Temp; + eval("\$Data.=\"" . getTemplate("aps/data") . "\";"); + } + } + + if($Xml->license) + { + $Temp = ''; + + if($Xml->license['must-accept'] + && $Xml->license['must-accept'] == 'true') + { + if($Xml->license->text->name)$Temp.= $Xml->license->text->name . '
    '; + + if($Xml->license->text->file) + { + $Temp.= ''; + $Groupname = $lng['aps']['license']; + $Fieldname = $lng['aps']['license']; + $Fieldvalue = $Temp; + eval("\$Data.=\"" . getTemplate("aps/data") . "\";"); + } + else + { + $Temp.= '' . $lng['aps']['error_license'] . ''; + $Groupname = $lng['aps']['license']; + $Fieldname = $lng['aps']['license']; + $Fieldvalue = $Temp; + eval("\$Data.=\"" . getTemplate("aps/data") . "\";"); + } + + $Temp = ' ' . $lng['aps']['error_license']; + + if(in_array('license', $WrongData)) + { + $Temp.= self::FieldError($lng['aps']['error_licensenoaccept']); + } + + $Groupname = ''; + $Fieldname = $lng['aps']['license_agreement']; + $Fieldvalue = $Temp; + eval("\$Data.=\"" . getTemplate("aps/data") . "\";"); + } + } + + eval("echo \"" . getTemplate("aps/installer") . "\";"); + unset($Xml); + } + + /** + * show informations for a package in basic or detailed view + * + * @param packageid id of package from database + * @param mode verbosity of data to view (basic|advanced) + * @return error false / success none + */ + + private function ShowPackageInfo($PackageId, $All = false) + { + global $lng, $filename, $s, $page, $action, $userinfo; + $Data = ''; + $Fieldname = ''; + $Fieldvalue = ''; + $Groupname = ''; + + if(!self::IsValidPackageId($PackageId, true))return false; + $result = $this->db->query('SELECT * FROM `' . TABLE_APS_PACKAGES . '` WHERE `ID` = ' . $this->db->escape($PackageId)); + $Row = $this->db->fetch_array($result); + $Xml = self::GetXmlFromFile('./packages/' . $Row['Path'] . '/APP-META.xml'); + + //return if parse of xml file has failed + + if($Xml == false)return false; + $Icon = './images/default.png'; + + //show icon and basic data + + if($Xml->icon['path']) + { + $Icon = './packages/' . $Row['Path'] . '/' . basename($Xml->icon['path']); + } + + $Summary = htmlspecialchars($Xml->summary); + $Fieldname = $lng['aps']['version']; + $Fieldvalue = $Xml->version . ' (Release ' . $Xml->release . ')'; + eval("\$Data.=\"" . getTemplate("aps/data") . "\";"); + + //show website + + if($Xml->homepage) + { + $Fieldname = $lng['aps']['homepage']; + $Fieldvalue = '' . htmlspecialchars($Xml->homepage) . ''; + eval("\$Data.=\"" . getTemplate("aps/data") . "\";"); + } + + //show size after installation + + if($Xml->{'installed-size'}) + { + $Fieldname = $lng['aps']['installed_size']; + $Fieldvalue = 'ca. ' . number_format(intval($Xml->{'installed-size'}) / (1024 * 1024), 2) . ' MB'; + eval("\$Data.=\"" . getTemplate("aps/data") . "\";"); + } + + //show categories + + if($Xml->categories) + { + $Temp = ''; + foreach($Xml->categories->category as $Categories) + { + $Temp.= htmlspecialchars($Categories[0]) . '
    '; + } + + $Fieldname = $lng['aps']['categories']; + $Fieldvalue = $Temp; + eval("\$Data.=\"" . getTemplate("aps/data") . "\";"); + } + + //show available languages + + if($Xml->languages) + { + $Temp = ''; + foreach($Xml->languages->language as $Languages) + { + $Temp.= $Languages[0] . ' '; + } + + $Fieldname = $lng['aps']['languages']; + $Fieldvalue = $Temp; + eval("\$Data.=\"" . getTemplate("aps/data") . "\";"); + } + + //show more information + + if($All == true) + { + $Fieldname = $lng['aps']['long_description']; + $Fieldvalue = htmlspecialchars($Xml->description); + eval("\$Data.=\"" . getTemplate("aps/data") . "\";"); + + //show config script language + + if($Xml->{'configuration-script-language'}) + { + $Fieldname = $lng['aps']['configscript']; + $Fieldvalue = $Xml->{'configuration-script-language'}; + eval("\$Data.=\"" . getTemplate("aps/data") . "\";"); + } + + //show changelog + + $Temp = '
      '; + foreach($Xml->changelog->version as $Versions) + { + $Temp.= '
    • ' . $Versions['version'] . ' (Release ' . $Versions['release'] . ')'; + $Temp.= '
        '; + foreach($Versions->entry as $Entries) + { + $Temp.= '
      • ' . $Entries[0] . '
      • '; + } + + $Temp.= '
    • '; + } + + $Temp.= '
    '; + $Fieldname = $lng['aps']['changelog']; + $Fieldvalue = $Temp; + eval("\$Data.=\"" . getTemplate("aps/data") . "\";"); + + //show license + + if($Xml->license) + { + if($Xml->license->text->file) + { + $Temp = ''; + + if($Xml->license->text->name)$Temp = $Xml->license->text->name . '
    '; + $Temp.= '
    '; + $Fieldname = $lng['aps']['license']; + $Fieldvalue = $Temp; + eval("\$Data.=\"" . getTemplate("aps/data") . "\";"); + } + else + { + $Fieldname = $lng['aps']['license']; + $Fieldvalue = '' . $lng['aps']['linktolicense'] . ''; + eval("\$Data.=\"" . getTemplate("aps/data") . "\";"); + } + } + + //show screenshots + + if($Xml->screenshot) + { + $Count = 0; + $Temp = ''; + foreach($Xml->screenshot as $Screenshot) + { + $Count+= 1; + $Temp.= '' . $Screenshot->description . '
    ' . $Screenshot->description . '
    '; + + if(count($Xml->screenshot) != $Count)$Temp.= '
    '; + } + + $Fieldname = $lng['aps']['screenshots']; + $Fieldvalue = $Temp; + eval("\$Data.=\"" . getTemplate("aps/data") . "\";"); + } + } + + eval("echo \"" . getTemplate("aps/package") . "\";"); + unset($Xml); + } + + /** + * show a nice looking infobox + * + * @param message message to display in beautifull layout + */ + + private function InfoBox($Message) + { + global $lng, $filename, $s, $page, $action; + + //shows a box with informations + + eval("echo \"" . getTemplate("aps/infobox") . "\";"); + } + + /** + * returns html code for nice looking boxes to show customers wrong input + * + * @param error error to display in beautifull layout + */ + + private function FieldError($Error) + { + return '
    ' . $Error . '
    '; + } +} + +?> \ No newline at end of file diff --git a/lib/classes/aps/class.ApsUpdater.php b/lib/classes/aps/class.ApsUpdater.php new file mode 100644 index 0000000000..8fa3910cf1 --- /dev/null +++ b/lib/classes/aps/class.ApsUpdater.php @@ -0,0 +1,269 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Cron + * @version $Id: class.ApsUpdater.php 2724 2009-06-07 14:18:02Z flo $ + * @todo logging + * install specific packages by name + * other solution than using url_fopen + * move url for distributionserver into panel + */ + +class ApsUpdater extends ApsParser +{ + private $settings = array(); + private $db = false; + private $RequestDomain = ''; + private $RootUrl = ''; + private $RootDir = ''; + + /** + * constructor of class. setup some basic variables needed by class + * + * @param db instance of the database class from syscp + */ + + public function __construct($db) + { + $this->db = $db; + $this->RequestDomain = 'apscatalog.com'; + $this->RootUrl = '/1/'; + $this->RootDir = dirname(dirname(__FILE__)) . '/'; + } + + /** + * Main function of class which handles all around the update mechanism + */ + + public function UpdateHandler() + { + chdir($this->RootDir); + + //return if allow_url_fopen is disabled + + if(ini_get('allow_url_fopen') == '0') + { + echo ("The APS updater cronjob requires that allow_url_fopen is enabled for the PHP CLI binary!\n"); + return; + } + + //return if no task exists + + $Result = $this->db->query('SELECT * FROM `' . TABLE_APS_TASKS . '` WHERE `Task` IN (' . TASK_SYSTEM_UPDATE . ', ' . TASK_SYSTEM_DOWNLOAD . ')'); + + if($this->db->num_rows($Result) == 0) + { + return; + } + + //query first task -> updater can only do one job within a run + + $Task = $this->db->fetch_array($Result); + $this->db->query('DELETE FROM `' . TABLE_APS_TASKS . '` WHERE `Task` = ' . $Task['Task']); + + //fetch all vendors + + $Vendors = self::FetchSubUrls($this->RootUrl); + foreach($Vendors as $Vendor) + { + //fetch all applications from vendors + + $Applications = self::FetchSubUrls($this->RootUrl . $Vendor); + foreach($Applications as $Application) + { + //get newest version of package which is already installed + + $CurrentVersion = ''; + $Result = $this->db->query('SELECT * FROM `' . TABLE_APS_PACKAGES . '` WHERE `Name` = "' . $this->db->escape(substr($Application, 0, -1)) . '"'); + + while($Row = $this->db->fetch_array($Result)) + { + if(version_compare($Row['Version'] . '-' . $Row['Release'], $CurrentVersion) == 1) + { + $CurrentVersion = $Row['Version'] . '-' . $Row['Release']; + } + } + + if($this->db->num_rows($Result) != 0) + { + //package already installed in system, search for newer version + + if($Task['Task'] != TASK_SYSTEM_UPDATE)continue; + + //fetch different versions of application from distribution server + + $NewerVersion = ''; + $Versions = self::FetchSubUrls($this->RootUrl . $Vendor . $Application); + foreach($Versions as $Version) + { + $OnlineVersion = substr($Version, 0, -1); + + //is package newer than current version? + + if(version_compare($OnlineVersion, $CurrentVersion) == 1) + { + //is new package newer than another one found before? + + if(version_compare($OnlineVersion, $NewerVersion) == 1) + { + $NewerVersion = $OnlineVersion; + } + } + } + + if($NewerVersion != '') + { + //download package as an update + + self::DownloadPackage($this->RootUrl . $Vendor . $Application . $NewerVersion, substr($Application, 0, -1), $NewerVersion); + continue; + } + } + else + { + if($Task['Task'] != TASK_SYSTEM_DOWNLOAD)continue; + + //new packages + + $NewVersion = ''; + $Versions = self::FetchSubUrls($this->RootUrl . $Vendor . $Application); + foreach($Versions as $Version) + { + $OnlineVersion = substr($Version, 0, -1); + + //is package newer than another one found before? + + if(version_compare($OnlineVersion, $NewVersion) == 1) + { + $NewVersion = $OnlineVersion; + } + } + + if($NewVersion != '') + { + //download package as a new one + + self::DownloadPackage($this->RootUrl . $Vendor . $Application . $NewVersion, substr($Application, 0, -1), $NewVersion); + continue; + } + } + } + } + } + + /** + * download a package from the distribution server and move the downloaded file in the temporary directory + * + * @param url url to download + * @param application string identifying the application name + * @param version string identifying the application version + * @return success true/error false + */ + + private function DownloadPackage($Url, $Application, $Version) + { + $Downloads = self::FetchSubUrls($Url . '/'); + + //make url valid + + $Url = str_replace(' ', '%20', $Url); + + //get content from website url + + $Content = @file_get_contents('http://' . $this->RequestDomain . $Url . '.aps' . $Downloads[0]); + + if($Content != false) + { + //open file to write contents on disk + + $FileHandle = fopen($this->RootDir . 'temp/' . $Application . '-' . $Version . '.app.zip', 'wb'); + + if($FileHandle == true) + { + //write results to disk + + fwrite($FileHandle, $Content); + fclose($FileHandle); + + //set right permissions + + chmod($this->RootDir . 'temp/' . $Application . '-' . $Version . '.app.zip', 0664); + return true; + } + else + { + return false; + } + } + else + { + return false; + } + } + + /** + * fetch html content of distribution server and parse all information + * + * @param requestdomain domain to aps-/mirrorserver with package api + * @param url url to fetch sub links from + * @return error false/success array with relative sub links + */ + + private function FetchSubUrls($Url) + { + $Return = array(); + + //make url valid + + $Url = str_replace(' ', '%20', $Url); + + //get content from website url + + $Content = @file('http://' . $this->RequestDomain . $Url); + + if($Content != false) + { + foreach($Content as $Temp) + { + //skip empty lines + + if($Temp != "\r\n" + && $Temp != "\r" + && $Temp != "\n" + && $Temp != "") + { + //remove unwanted characters + + $Temp = trim($Temp); + + //grep URLs which match defined format + + if(preg_match("/^ \ No newline at end of file diff --git a/lib/classes/database/class.db.php b/lib/classes/database/class.db.php new file mode 100644 index 0000000000..8f1b28ff36 --- /dev/null +++ b/lib/classes/database/class.db.php @@ -0,0 +1,341 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Functions + * @version $Id: class.db.php 2724 2009-06-07 14:18:02Z flo $ + */ + +/** + * Class to manage the connection to the Database + * @package Functions + */ + +class db +{ + /** + * Link ID for every connection + * @var int + */ + + var $link_id = 0; + + /** + * Query ID for every query + * @var int + */ + + var $query_id = 0; + + /** + * Errordescription, if an error occures + * @var string + */ + + var $errdesc = ''; + + /** + * Errornumber, if an error occures + * @var int + */ + + var $errno = 0; + + /** + * Servername + * @var string + */ + + var $server = ''; + + /** + * Username + * @var string + */ + + var $user = ''; + + /** + * Password + * @var string + */ + + var $password = ''; + + /** + * Database + * @var string + */ + + var $database = ''; + + /** + * Class constructor. Connects to Databaseserver and selects Database + * + * @param string Servername + * @param string Username + * @param string Password + * @param string Database + */ + + function db($server, $user, $password, $database = '') + { + // check for mysql extension + + if(!extension_loaded('mysql')) + { + $this->showerror('You should install the PHP MySQL extension!', false); + } + + $this->server = $server; + $this->user = $user; + $this->password = $password; + $this->database = $database; + $this->link_id = @mysql_connect($this->server, $this->user, $this->password); + + if(!$this->link_id) + { + //try to connect with no password an change it afterwards. only for root user + + if($this->user == 'root') + { + $this->link_id = @mysql_connect($this->server, $this->user, ''); + + if($this->link_id) + { + $this->query("SET PASSWORD = PASSWORD('" . $this->escape($this->password) . "')"); + } + else + { + $this->showerror('Establishing connection failed, exiting'); + } + } + else + { + $this->showerror('Establishing connection failed, exiting'); + } + } + + if($this->database != '') + { + if(!@mysql_select_db($this->database, $this->link_id)) + { + $this->showerror('Trying to use database ' . $this->database . ' failed, exiting'); + } + } + } + + /** + * Closes connection to Databaseserver + */ + + function close() + { + return @mysql_close($this->link_id); + } + + /** + * Escapes user input to be used in mysql queries + * + * @param string $input + * @return string escaped string + */ + + function escape($input) + { + if(is_int($input)) + { + return (int)$input; + } + elseif(is_float($input)) + { + return (float)$input; + } + else + { + return mysql_real_escape_string($input, $this->link_id); + } + } + + /** + * Query the Database + * + * @param string Querystring + * @param bool Unbuffered query? + * @return string RessourceId + */ + + function query($query_str, $unbuffered = false) + { + global $numbqueries; + + if(!$unbuffered) + { + $this->query_id = mysql_query($query_str, $this->link_id); + } + else + { + $this->query_id = mysql_unbuffered_query($query_str, $this->link_id); + } + + if(!$this->query_id) + { + $this->showerror('Invalid SQL: ' . $query_str); + } + + $numbqueries++; + + //echo $query_str.' '.$numbqueries.'
    '; + + return $this->query_id; + } + + /** + * Fetches Row from Query and returns it as array + * + * @param string RessourceId + * @param string Datatype, num or assoc + * @return array The row + */ + + function fetch_array($query_id = - 1, $datatype = 'assoc') + { + if($query_id != - 1) + { + $this->query_id = $query_id; + } + + if($datatype == 'num') + { + $datatype = MYSQL_NUM; + } + else + { + $datatype = MYSQL_ASSOC; + } + + $this->record = mysql_fetch_array($this->query_id, $datatype); + return $this->record; + } + + /** + * Query Database and fetche the first row from Query and returns it as array + * + * @param string Querystring + * @param string Datatype, num or assoc + * @return array The first row + */ + + function query_first($query_string, $datatype = 'assoc') + { + $this->query($query_string); + return $this->fetch_array($this->query_id, $datatype); + } + + /** + * Returns how many rows have been selected + * + * @param string RessourceId + * @return int Number of rows + */ + + function num_rows($query_id = - 1) + { + if($query_id != - 1) + { + $this->query_id = $query_id; + } + + return mysql_num_rows($this->query_id); + } + + /** + * Returns the auto_incremental-Value of the inserted row + * + * @return int auto_incremental-Value + */ + + function insert_id() + { + return mysql_insert_id($this->link_id); + } + + /** + * Returns the number of rows affected by last query + * + * @return int affected rows + */ + + function affected_rows() + { + return mysql_affected_rows($this->link_id); + } + + /** + * Returns errordescription and errornumber if an error occured. + * + * @return int Errornumber + */ + + function geterrdescno() + { + if($this->link_id != 0) + { + $this->errdesc = mysql_error($this->link_id); + $this->errno = mysql_errno($this->link_id); + } + else + { + // Maybe we don't have any linkid so let's try to catch at least anything + + $this->errdesc = mysql_error(); + $this->errno = mysql_errno(); + } + + return $this->errno; + } + + /** + * Dies with an errormessage + * + * @param string Errormessage + */ + + function showerror($errormsg, $mysqlActive = true) + { + global $filename; + + if($mysqlActive) + { + $this->geterrdescno(); + $errormsg.= "\n"; + $errormsg.= 'mysql error number: ' . $this->errno . "\n"; + $errormsg.= 'mysql error desc: ' . $this->errdesc . "\n"; + } + + $errormsg.= 'Time/date: ' . date('d/m/Y h:i A') . "\n"; + + if($filename != 'cronscript.php') + { + $errormsg.= 'Script: ' . htmlspecialchars(getenv('REQUEST_URI')) . "\n"; + $errormsg.= 'Referer: ' . htmlspecialchars(getenv('HTTP_REFERER')) . "\n"; + die(nl2br($errormsg)); + } + else + { + $errormsg.= 'Script: -- Cronscript --' . "\n"; + die($errormsg); + } + } +} + +?> diff --git a/lib/classes/idna/class.idna_convert.php b/lib/classes/idna/class.idna_convert.php new file mode 100644 index 0000000000..b9b75ab840 --- /dev/null +++ b/lib/classes/idna/class.idna_convert.php @@ -0,0 +1,1381 @@ + + * @version 0.4.3 + * + */ + +class idna_convert +{ + // {{{ npdata + + /** + * Holds all relevant mapping tables, loaded from a seperate file on construct + * See RFC3454 for details + * + * @var array + * @access private + */ + + var $_np_ = array(); + + // }}} + // Internal settings, do not mess with them + + var $_punycode_prefix = 'xn--'; + var $_invalid_ucs = 0x80000000; + var $_max_ucs = 0x10FFFF; + var $_base = 36; + var $_tmin = 1; + var $_tmax = 26; + var $_skew = 38; + var $_damp = 700; + var $_initial_bias = 72; + var $_initial_n = 0x80; + var $_sbase = 0xAC00; + var $_lbase = 0x1100; + var $_vbase = 0x1161; + var $_tbase = 0x11a7; + var $_lcount = 19; + var $_vcount = 21; + var $_tcount = 28; + var $_ncount = 588; + + // _vcount * _tcount + + var $_scount = 11172; + + // _lcount * _tcount * _vcount + + var $_error = false; + + // See set_parameter() for details of how to change the following settings + // from within your script / application + + var $_api_encoding = 'utf8'; + + // Default input charset is UTF-8 + + var $_allow_overlong = false; + + // Overlong UTF-8 encodings are forbidden + + var $_strict_mode = false; + + // Behave strict or not + // The constructor + + function idna_convert($options = false) + { + $this->slast = $this->_sbase + $this->_lcount * $this->_vcount * $this->_tcount; + + if(function_exists('file_get_contents')) + { + $this->_np_ = unserialize(file_get_contents(dirname(__FILE__) . '/npdata.ser')); + } + else + { + $this->_np_ = unserialize(join('', file(dirname(__FILE__) . '/npdata.ser'))); + } + + // If parameters are given, pass these to the respective method + + if(is_array($options)) + { + return $this->set_parameter($options); + } + + return true; + } + + /** + * Sets a new option value. Available options and values: + * [encoding - Use either UTF-8, UCS4 as array or UCS4 as string as input ('utf8' for UTF-8, + * 'ucs4_string' and 'ucs4_array' respectively for UCS4); The output is always UTF-8] + * [overlong - Unicode does not allow unnecessarily long encodings of chars, + * to allow this, set this parameter to true, else to false; + * default is false.] + * [strict - true: strict mode, good for registration purposes - Causes errors + * on failures; false: loose mode, ideal for "wildlife" applications + * by silently ignoring errors and returning the original input instead + * + * @param mixed Parameter to set (string: single parameter; array of Parameter => Value pairs) + * @param string Value to use (if parameter 1 is a string) + * @return boolean true on success, false otherwise + * @access public + */ + + function set_parameter($option, $value = false) + { + if(!is_array($option)) + { + $option = array( + $option => $value + ); + } + + foreach($option as $k => $v) + { + switch($k) + { + case 'encoding': + + switch($v) + { + case 'utf8': + case 'ucs4_string': + case 'ucs4_array': + $this->_api_encoding = $v; + break; + default: + $this->_error('Set Parameter: Unknown parameter ' . $v . ' for option ' . $k); + return false; + } + + break; + case 'overlong': + $this->_allow_overlong = ($v) ? true : false; + break; + case 'strict': + $this->_strict_mode = ($v) ? true : false; + break; + default: + $this->_error('Set Parameter: Unknown option ' . $k); + return false; + } + } + + return true; + } + + /** + * Decode a given ACE domain name + * @param string Domain name (ACE string) + * [@param string Desired output encoding, see {@link set_parameter}] + * @return string Decoded Domain name (UTF-8 or UCS-4) + * @access public + */ + + function decode($input, $one_time_encoding = false) + { + // Optionally set + + if($one_time_encoding) + { + switch($one_time_encoding) + { + case 'utf8': + case 'ucs4_string': + case 'ucs4_array': + break; + default: + $this->_error('Unknown encoding ' . $one_time_encoding); + return false; + } + } + + // Make sure to drop any newline characters around + + $input = trim($input); + + // Negotiate input and try to determine, wether it is a plain string, + // an email address or something like a complete URL + + if(strpos($input, '@')) + { + // Maybe it is an email address + // No no in strict mode + + if($this->_strict_mode) + { + $this->_error('Only simple domain name parts can be handled in strict mode'); + return false; + } + + list($email_pref, $input) = explode('@', $input, 2); + $arr = explode('.', $input); + foreach($arr as $k => $v) + { + $conv = $this->_decode($v); + + if($conv)$arr[$k] = $conv; + } + + $return = $email_pref . '@' . join('.', $arr); + } + elseif(preg_match('![:\./]!', $input)) + { + // Or a complete domain name (with or without paths / parameters) + // No no in strict mode + + if($this->_strict_mode) + { + $this->_error('Only simple domain name parts can be handled in strict mode'); + return false; + } + + $parsed = parse_url($input); + + if(isset($parsed['host'])) + { + $arr = explode('.', $parsed['host']); + foreach($arr as $k => $v) + { + $conv = $this->_decode($v); + + if($conv)$arr[$k] = $conv; + } + + $parsed['host'] = join('.', $arr); + $return = (empty($parsed['scheme']) ? '' : $parsed['scheme'] . (strtolower($parsed['scheme']) == 'mailto' ? ':' : '://')) . (empty($parsed['user']) ? '' : $parsed['user'] . (empty($parsed['pass']) ? '' : ':' . $parsed['pass']) . '@') . $parsed['host'] . (empty($parsed['port']) ? '' : ':' . $parsed['port']) . $parsed['path'] . (empty($parsed['query']) ? '' : '?' . $parsed['query']) . (empty($parsed['fragment']) ? '' : '#' . $parsed['fragment']); + } + else + { + // parse_url seems to have failed, try without it + + $arr = explode('.', $input); + foreach($arr as $k => $v) + { + $conv = $this->_decode($v); + + if($conv)$arr[$k] = $conv; + } + + $return = join('.', $arr); + } + } + else + { + // Otherwise we consider it being a pure domain name string + + $return = $this->_decode($input); + } + + // The output is UTF-8 by default, other output formats need conversion here + // If one time encoding is given, use this, else the objects property + + switch(($one_time_encoding) ? $one_time_encoding : $this->_api_encoding) + { + case 'utf8': + return $return; + break; + case 'ucs4_string': + return $this->_ucs4_to_ucs4_string($this->_utf8_to_ucs4($return)); + break; + case 'ucs4_array': + return $this->_utf8_to_ucs4($return); + break; + default: + $this->_error('Unsupported output format'); + return false; + } + } + + /** + * Encode a given UTF-8 domain name + * @param string Domain name (UTF-8 or UCS-4) + * [@param string Desired input encoding, see {@link set_parameter}] + * @return string Encoded Domain name (ACE string) + * @access public + */ + + function encode($decoded, $one_time_encoding = false) + { + // Forcing conversion of input to UCS4 array + // If one time encoding is given, use this, else the objects property + + switch(($one_time_encoding) ? $one_time_encoding : $this->_api_encoding) + { + case 'utf8': + $decoded = $this->_utf8_to_ucs4($decoded); + break; + case 'ucs4_string': + $decoded = $this->_ucs4_string_to_ucs4($decoded); + case 'ucs4_array': + break; + default: + + // $this->_error('Unsupported input format: '.$this->_api_encoding); + + $this->_error('Unsupported input format'); + return false; + } + + // No input, no output, what else did you expect? + + if(empty($decoded))return ''; + + // Anchors for iteration + + $last_begin = 0; + + // Output string + + $output = ''; + foreach($decoded as $k => $v) + { + // Make sure to use just the plain dot + + switch($v) + { + case 0x3002: + case 0xFF0E: + case 0xFF61: + $decoded[$k] = 0x2E; + + // It's right, no break here + // The codepoints above have to be converted to dots anyway + // Stumbling across an anchoring character + + + case 0x2E: + case 0x2F: + case 0x3A: + case 0x3F: + case 0x40: + + // Neither email addresses nor URLs allowed in strict mode + + if($this->_strict_mode) + { + $this->_error('Neither email addresses nor URLs are allowed in strict mode.'); + return false; + } + else + { + // Skip first char + + if($k) + { + $encoded = ''; + $encoded = $this->_encode(array_slice($decoded, $last_begin, (($k) - $last_begin))); + + if($encoded) + { + $output.= $encoded; + } + else + { + $output.= $this->_ucs4_to_utf8(array_slice($decoded, $last_begin, (($k) - $last_begin))); + } + + $output.= chr($decoded[$k]); + } + + $last_begin = $k + 1; + } + } + } + + // Catch the rest of the string + + if($last_begin) + { + $inp_len = sizeof($decoded); + $encoded = ''; + $encoded = $this->_encode(array_slice($decoded, $last_begin, (($inp_len) - $last_begin))); + + if($encoded) + { + $output.= $encoded; + } + else + { + $output.= $this->_ucs4_to_utf8(array_slice($decoded, $last_begin, (($inp_len) - $last_begin))); + } + + return $output; + } + else + { + if($output = $this->_encode($decoded)) + { + return $output; + } + else + { + return $this->_ucs4_to_utf8($decoded); + } + } + } + + /** + * Use this method to get the last error ocurred + * @param void + * @return string The last error, that occured + * @access public + */ + + function get_last_error() + { + return $this->_error; + } + + /** + * The actual decoding algorithm + * @access private + */ + + function _decode($encoded) + { + // We do need to find the Punycode prefix + + if(!preg_match('!^' . preg_quote($this->_punycode_prefix, '!') . '!', $encoded)) + { + $this->_error('This is not a punycode string'); + return false; + } + + $encode_test = preg_replace('!^' . preg_quote($this->_punycode_prefix, '!') . '!', '', $encoded); + + // If nothing left after removing the prefix, it is hopeless + + if(!$encode_test) + { + $this->_error('The given encoded string was empty'); + return false; + } + + // Find last occurence of the delimiter + + $delim_pos = strrpos($encoded, '-'); + + if($delim_pos > strlen($this->_punycode_prefix)) + { + for ($k = strlen($this->_punycode_prefix);$k < $delim_pos;++$k) + { + $decoded[] = ord($encoded{$k}); + } + } + else + { + $decoded = array(); + } + + $deco_len = count($decoded); + $enco_len = strlen($encoded); + + // Wandering through the strings; init + + $is_first = true; + $bias = $this->_initial_bias; + $idx = 0; + $char = $this->_initial_n; + for ($enco_idx = ($delim_pos) ? ($delim_pos + 1) : 0;$enco_idx < $enco_len;++$deco_len) + { + for ($old_idx = $idx, $w = 1, $k = $this->_base;1;$k+= $this->_base) + { + $digit = $this->_decode_digit($encoded{$enco_idx++}); + $idx+= $digit * $w; + $t = ($k <= $bias) ? $this->_tmin : (($k >= $bias + $this->_tmax) ? $this->_tmax : ($k - $bias)); + + if($digit < $t)break; + $w = (int)($w * ($this->_base - $t)); + } + + $bias = $this->_adapt($idx - $old_idx, $deco_len + 1, $is_first); + $is_first = false; + $char+= (int)($idx / ($deco_len + 1)); + $idx%= ($deco_len + 1); + + if($deco_len > 0) + { + // Make room for the decoded char + + for ($i = $deco_len;$i > $idx;$i--) + { + $decoded[$i] = $decoded[($i - 1)]; + } + } + + $decoded[$idx++] = $char; + } + + return $this->_ucs4_to_utf8($decoded); + } + + /** + * The actual encoding algorithm + * @access private + */ + + function _encode($decoded) + { + // We cannot encode a domain name containing the Punycode prefix + + $extract = strlen($this->_punycode_prefix); + $check_pref = $this->_utf8_to_ucs4($this->_punycode_prefix); + $check_deco = array_slice($decoded, 0, $extract); + + if($check_pref == $check_deco) + { + $this->_error('This is already a punycode string'); + return false; + } + + // We will not try to encode strings consisting of basic code points only + + $encodable = false; + foreach($decoded as $k => $v) + { + if($v > 0x7a) + { + $encodable = true; + break; + } + } + + if(!$encodable) + { + $this->_error('The given string does not contain encodable chars'); + return false; + } + + // Do NAMEPREP + + $decoded = $this->_nameprep($decoded); + + if(!$decoded + || !is_array($decoded))return false; + + // NAMEPREP failed + + $deco_len = count($decoded); + + if(!$deco_len)return false; + + // Empty array + + $codecount = 0; + + // How many chars have been consumed + + $encoded = ''; + + // Copy all basic code points to output + + for ($i = 0;$i < $deco_len;++$i) + { + $test = $decoded[$i]; + + // Will match [-0-9a-zA-Z] + + if((0x2F < $test && $test < 0x40) + || (0x40 < $test && $test < 0x5B) + || (0x60 < $test && $test <= 0x7B) + || (0x2D == $test)) + { + $encoded.= chr($decoded[$i]); + $codecount++; + } + } + + if($codecount == $deco_len)return $encoded; + + // All codepoints were basic ones + // Start with the prefix; copy it to output + + $encoded = $this->_punycode_prefix . $encoded; + + // If we have basic code points in output, add an hyphen to the end + + if($codecount)$encoded.= '-'; + + // Now find and encode all non-basic code points + + $is_first = true; + $cur_code = $this->_initial_n; + $bias = $this->_initial_bias; + $delta = 0; + + while($codecount < $deco_len) + { + // Find the smallest code point >= the current code point and + // remember the last ouccrence of it in the input + + for ($i = 0, $next_code = $this->_max_ucs;$i < $deco_len;$i++) + { + if($decoded[$i] >= $cur_code + && $decoded[$i] <= $next_code) + { + $next_code = $decoded[$i]; + } + } + + $delta+= ($next_code - $cur_code) * ($codecount + 1); + $cur_code = $next_code; + + // Scan input again and encode all characters whose code point is $cur_code + + for ($i = 0;$i < $deco_len;$i++) + { + if($decoded[$i] < $cur_code) + { + $delta++; + } + elseif($decoded[$i] == $cur_code) + { + for ($q = $delta, $k = $this->_base;1;$k+= $this->_base) + { + $t = ($k <= $bias) ? $this->_tmin : (($k >= $bias + $this->_tmax) ? $this->_tmax : $k - $bias); + + if($q < $t)break; + $encoded.= $this->_encode_digit(ceil($t + (($q - $t) % ($this->_base - $t)))); + $q = (int)(($q - $t) / ($this->_base - $t)); + } + + $encoded.= $this->_encode_digit($q); + $bias = $this->_adapt($delta, $codecount + 1, $is_first); + $codecount++; + $delta = 0; + $is_first = false; + } + } + + $delta++; + $cur_code++; + } + + return $encoded; + } + + /** + * Adapt the bias according to the current code point and position + * @access private + */ + + function _adapt($delta, $npoints, $is_first) + { + $delta = (int)($is_first ? ($delta / $this->_damp) : ($delta / 2)); + $delta+= (int)($delta / $npoints); + for ($k = 0;$delta > (($this->_base - $this->_tmin) * $this->_tmax) / 2;$k+= $this->_base) + { + $delta = (int)($delta / ($this->_base - $this->_tmin)); + } + + return (int)($k + ($this->_base - $this->_tmin + 1) * $delta / ($delta + $this->_skew)); + } + + /** + * Encoding a certain digit + * @access private + */ + + function _encode_digit($d) + { + return chr($d + 22 + 75 * ($d < 26)); + } + + /** + * Decode a certain digit + * @access private + */ + + function _decode_digit($cp) + { + $cp = ord($cp); + return ($cp - 48 < 10) ? $cp - 22 : (($cp - 65 < 26) ? $cp - 65 : (($cp - 97 < 26) ? $cp - 97 : $this->_base)); + } + + /** + * Internal error handling method + * @access private + */ + + function _error($error = '') + { + $this->_error = $error; + } + + /** + * Do Nameprep according to RFC3491 and RFC3454 + * @param array Unicode Characters + * @return string Unicode Characters, Nameprep'd + * @access private + */ + + function _nameprep($input) + { + $output = array(); + $error = false; + + // + // Mapping + // Walking through the input array, performing the required steps on each of + // the input chars and putting the result into the output array + // While mapping required chars we apply the cannonical ordering + // $this->_show_hex($input); + + foreach($input as $v) + { + // Map to nothing == skip that code point + + if(in_array($v, $this->_np_['map_nothing']))continue; + + // Try to find prohibited input + + if(in_array($v, $this->_np_['prohibit']) + || in_array($v, $this->_np_['general_prohibited'])) + { + $this->_error('NAMEPREP: Prohibited input U+' . sprintf('%08X', $v)); + return false; + } + + foreach($this->_np_['prohibit_ranges'] as $range) + { + if($range[0] <= $v + && $v <= $range[1]) + { + $this->_error('NAMEPREP: Prohibited input U+' . sprintf('%08X', $v)); + return false; + } + } + + // + // Hangul syllable decomposition + + if(0xAC00 <= $v + && $v <= 0xD7AF) + { + foreach($this->_hangul_decompose($v) as $out) + { + $output[] = $out; + } + + // There's a decomposition mapping for that code point + } + elseif(isset($this->_np_['replacemaps'][$v])) + { + foreach($this->_apply_cannonical_ordering($this->_np_['replacemaps'][$v]) as $out) + { + $output[] = $out; + } + } + else + { + $output[] = $v; + } + } + + // Before applying any Combining, try to rearrange any Hangul syllables + + $output = $this->_hangul_compose($output); + + // + // Combine code points + // + + $last_class = 0; + $last_starter = 0; + $out_len = count($output); + for ($i = 0;$i < $out_len;++$i) + { + $class = $this->_get_combining_class($output[$i]); + + if((!$last_class || $last_class > $class) + && $class) + { + // Try to match + + $seq_len = $i - $last_starter; + $out = $this->_combine(array_slice($output, $last_starter, $seq_len)); + + // On match: Replace the last starter with the composed character and remove + // the now redundant non-starter(s) + + if($out) + { + $output[$last_starter] = $out; + + if(count($out) != $seq_len) + { + for ($j = $i + 1;$j < $out_len;++$j) + { + $output[$j - 1] = $output[$j]; + } + + unset($output[$out_len]); + } + + // Rewind the for loop by one, since there can be more possible compositions + + $i--; + $out_len--; + $last_class = ($i == $last_starter) ? 0 : $this->_get_combining_class($output[$i - 1]); + continue; + } + } + + if(!$class) + { + // The current class is 0 + + $last_starter = $i; + } + + $last_class = $class; + } + + return $output; + } + + /** + * Decomposes a Hangul syllable + * (see http://www.unicode.org/unicode/reports/tr15/#Hangul + * @param integer 32bit UCS4 code point + * @return array Either Hangul Syllable decomposed or original 32bit value as one value array + * @access private + */ + + function _hangul_decompose($char) + { + $sindex = $char - $this->_sbase; + + if($sindex < 0 + || $sindex >= $this->_scount) + { + return array( + $char + ); + } + + $result = array(); + $T = $this->_tbase + ($sindex % $this->_tcount); + $result[] = (int)($this->_lbase + $sindex / $this->_ncount); + $result[] = (int)$this->_vbase + (($sindex % $this->_ncount) / $this->_tcount); + + if($T != $this->_tbase)$result[] = $T; + return $result; + } + + /** + * Ccomposes a Hangul syllable + * (see http://www.unicode.org/unicode/reports/tr15/#Hangul + * @param array Decomposed UCS4 sequence + * @return array UCS4 sequence with syllables composed + * @access private + */ + + function _hangul_compose($input) + { + $inp_len = count($input); + + if(!$inp_len)return array(); + $result = array(); + $last = $input[0]; + $result[] = $last; + + // copy first char from input to output + + for ($i = 1;$i < $inp_len;++$i) + { + $char = $input[$i]; + + // Find out, wether two current characters from L and V + + $lindex = $last - $this->_lbase; + + if(0 <= $lindex + && $lindex < $this->_lcount) + { + $vindex = $char - $this->_vbase; + + if(0 <= $vindex + && $vindex < $this->_vcount) + { + // create syllable of form LV + + $last = ($this->_sbase + ($lindex * $this->_vcount + $vindex) * $this->_tcount); + $out_off = count($result) - 1; + $result[$out_off] = $last; + + // reset last + + continue; + + // discard char + } + } + + // Find out, wether two current characters are LV and T + + $sindex = $last - $this->_sbase; + + if(0 <= $sindex + && $sindex < $this->_scount + && ($sindex % $this->_tcount) == 0) + { + $tindex = $char - $this->_tbase; + + if(0 <= $tindex + && $tindex <= $this->_tcount) + { + // create syllable of form LVT + + $last+= $tindex; + $out_off = count($result) - 1; + $result[$out_off] = $last; + + // reset last + + continue; + + // discard char + } + } + + // if neither case was true, just add the character + + $last = $char; + $result[] = $char; + } + + return $result; + } + + /** + * Returns the combining class of a certain wide char + * @param integer Wide char to check (32bit integer) + * @return integer Combining class if found, else 0 + * @access private + */ + + function _get_combining_class($char) + { + return isset($this->_np_['norm_combcls'][$char]) ? $this->_np_['norm_combcls'][$char] : 0; + } + + /** + * Apllies the cannonical ordering of a decomposed UCS4 sequence + * @param array Decomposed UCS4 sequence + * @return array Ordered USC4 sequence + * @access private + */ + + function _apply_cannonical_ordering($input) + { + $swap = true; + $size = count($input); + + while($swap) + { + $swap = false; + $last = $this->_get_combining_class($input[0]); + for ($i = 0;$i < $size - 1;++$i) + { + $next = $this->_get_combining_class($input[$i + 1]); + + if($next != 0 + && $last > $next) + { + // Move item leftward until it fits + + for ($j = $i + 1;$j > 0;--$j) + { + if($this->_get_combining_class($input[$j - 1]) <= $next)break; + $t = $input[$j]; + $input[$j] = $input[$j - 1]; + $input[$j - 1] = $t; + $swap = 1; + } + + // Reentering the loop looking at the old character again + + $next = $last; + } + + $last = $next; + } + } + + return $input; + } + + /** + * Do composition of a sequence of starter and non-starter + * @param array UCS4 Decomposed sequence + * @return array Ordered USC4 sequence + * @access private + */ + + function _combine($input) + { + $inp_len = count($input); + foreach($this->_np_['replacemaps'] as $np_src => $np_target) + { + if($np_target[0] != $input[0])continue; + + if(count($np_target) != $inp_len)continue; + $hit = false; + foreach($input as $k2 => $v2) + { + if($v2 == $np_target[$k2]) + { + $hit = true; + } + else + { + $hit = false; + break; + } + } + + if($hit)return $np_src; + } + + return false; + } + + /** + * This converts an UTF-8 encoded string to its UCS-4 representation + * By talking about UCS-4 "strings" we mean arrays of 32bit integers representing + * each of the "chars". This is due to PHP not being able to handle strings with + * bit depth different from 8. This apllies to the reverse method _ucs4_to_utf8(), too. + * The following UTF-8 encodings are supported: + * bytes bits representation + * 1 7 0xxxxxxx + * 2 11 110xxxxx 10xxxxxx + * 3 16 1110xxxx 10xxxxxx 10xxxxxx + * 4 21 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx + * 5 26 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx + * 6 31 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx + * Each x represents a bit that can be used to store character data. + * The five and six byte sequences are part of Annex D of ISO/IEC 10646-1:2000 + * @access private + */ + + function _utf8_to_ucs4($input) + { + $output = array(); + $out_len = 0; + $inp_len = strlen($input); + $mode = 'next'; + $test = 'none'; + for ($k = 0;$k < $inp_len;++$k) + { + $v = ord($input{$k}); + + // Extract byte from input string + + if($v < 128) + { + // We found an ASCII char - put into stirng as is + + $output[$out_len] = $v; + ++$out_len; + + if('add' == $mode) + { + $this->_error('Conversion from UTF-8 to UCS-4 failed: malformed input at byte ' . $k); + return false; + } + + continue; + } + + if('next' == $mode) + { + // Try to find the next start byte; determine the width of the Unicode char + + $start_byte = $v; + $mode = 'add'; + $test = 'range'; + + if($v >> 5 == 6) + { + // &110xxxxx 10xxxxx + + $next_byte = 0; + + // Tells, how many times subsequent bitmasks must rotate 6bits to the left + + $v = ($v - 192) << 6; + } + elseif($v >> 4 == 14) + { + // &1110xxxx 10xxxxxx 10xxxxxx + + $next_byte = 1; + $v = ($v - 224) << 12; + } + elseif($v >> 3 == 30) + { + // &11110xxx 10xxxxxx 10xxxxxx 10xxxxxx + + $next_byte = 2; + $v = ($v - 240) << 18; + } + elseif($v >> 2 == 62) + { + // &111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx + + $next_byte = 3; + $v = ($v - 248) << 24; + } + elseif($v >> 1 == 126) + { + // &1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx + + $next_byte = 4; + $v = ($v - 252) << 30; + } + else + { + $this->_error('This might be UTF-8, but I don\'t understand it at byte ' . $k); + return false; + } + + if('add' == $mode) + { + $output[$out_len] = (int)$v; + ++$out_len; + continue; + } + } + + if('add' == $mode) + { + if(!$this->_allow_overlong + && $test == 'range') + { + $test = 'none'; + + if(($v < 0xA0 && $start_byte == 0xE0) + || ($v < 0x90 && $start_byte == 0xF0) + || ($v > 0x8F && $start_byte == 0xF4)) + { + $this->_error('Bogus UTF-8 character detected (out of legal range) at byte ' . $k); + return false; + } + } + + if($v >> 6 == 2) + { + // Bit mask must be 10xxxxxx + + $v = ($v - 128) << ($next_byte * 6); + $output[($out_len - 1)]+= $v; + --$next_byte; + } + else + { + $this->_error('Conversion from UTF-8 to UCS-4 failed: malformed input at byte ' . $k); + return false; + } + + if($next_byte < 0) + { + $mode = 'next'; + } + } + } + + // for + + return $output; + } + + /** + * Convert UCS-4 string into UTF-8 string + * See _utf8_to_ucs4() for details + * @access private + */ + + function _ucs4_to_utf8($input) + { + $output = ''; + $k = 0; + foreach($input as $v) + { + ++$k; + + // $v = ord($v); + + if($v < 128) + { + // 7bit are transferred literally + + $output.= chr($v); + } + elseif($v < (1 << 11)) + { + // 2 bytes + + $output.= chr(192 + ($v >> 6)) . chr(128 + ($v & 63)); + } + elseif($v < (1 << 16)) + { + // 3 bytes + + $output.= chr(224 + ($v >> 12)) . chr(128 + (($v >> 6) & 63)) . chr(128 + ($v & 63)); + } + elseif($v < (1 << 21)) + { + // 4 bytes + + $output.= chr(240 + ($v >> 18)) . chr(128 + (($v >> 12) & 63)) . chr(128 + (($v >> 6) & 63)) . chr(128 + ($v & 63)); + } + elseif($v < (1 << 26)) + { + // 5 bytes + + $output.= chr(248 + ($v >> 24)) . chr(128 + (($v >> 18) & 63)) . chr(128 + (($v >> 12) & 63)) . chr(128 + (($v >> 6) & 63)) . chr(128 + ($v & 63)); + } + elseif($v < (1 << 31)) + { + // 6 bytes + + $output.= chr(252 + ($v >> 30)) . chr(128 + (($v >> 24) & 63)) . chr(128 + (($v >> 18) & 63)) . chr(128 + (($v >> 12) & 63)) . chr(128 + (($v >> 6) & 63)) . chr(128 + ($v & 63)); + } + else + { + $this->_error('Conversion from UCS-4 to UTF-8 failed: malformed input at byte ' . $k); + return false; + } + } + + return $output; + } + + /** + * Convert UCS-4 array into UCS-4 string + * + * @access private + */ + + function _ucs4_to_ucs4_string($input) + { + $output = ''; + + // Take array values and split output to 4 bytes per value + // The bit mask is 255, which reads &11111111 + + foreach($input as $v) + { + $output.= chr(($v >> 24) & 255) . chr(($v >> 16) & 255) . chr(($v >> 8) & 255) . chr($v & 255); + } + + return $output; + } + + /** + * Convert UCS-4 strin into UCS-4 garray + * + * @access private + */ + + function _ucs4_string_to_ucs4($input) + { + $output = array(); + $inp_len = strlen($input); + + // Input length must be dividable by 4 + + if($inp_len % 4) + { + $this->_error('Input UCS4 string is broken'); + return false; + } + + // Empty input - return empty output + + if(!$inp_len)return $output; + for ($i = 0, $out_len = - 1;$i < $inp_len;++$i) + { + // Increment output position every 4 input bytes + + if(!($i % 4)) + { + $out_len++; + $output[$out_len] = 0; + } + + $output[$out_len]+= ord($input{$i}) << (8 * (3 - ($i % 4))); + } + + return $output; + } +} + +/** + * Adapter class for aligning the API of idna_convert with that of Net_IDNA + * @author Matthias Sommerfeld + */ + +class Net_IDNA_php4 extends idna_convert +{ + /** + * Sets a new option value. Available options and values: + * [encoding - Use either UTF-8, UCS4 as array or UCS4 as string as input ('utf8' for UTF-8, + * 'ucs4_string' and 'ucs4_array' respectively for UCS4); The output is always UTF-8] + * [overlong - Unicode does not allow unnecessarily long encodings of chars, + * to allow this, set this parameter to true, else to false; + * default is false.] + * [strict - true: strict mode, good for registration purposes - Causes errors + * on failures; false: loose mode, ideal for "wildlife" applications + * by silently ignoring errors and returning the original input instead + * + * @param mixed Parameter to set (string: single parameter; array of Parameter => Value pairs) + * @param string Value to use (if parameter 1 is a string) + * @return boolean true on success, false otherwise + * @access public + */ + + function setParams($option, $param = false) + { + return $this->IC->set_parameters($option, $param); + } +} + +?> \ No newline at end of file diff --git a/lib/classes/idna/class.idna_convert_wrapper.php b/lib/classes/idna/class.idna_convert_wrapper.php new file mode 100644 index 0000000000..c9e2fa5f09 --- /dev/null +++ b/lib/classes/idna/class.idna_convert_wrapper.php @@ -0,0 +1,143 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Functions + * @version $Id: class.idna_convert_wrapper.php 2724 2009-06-07 14:18:02Z flo $ + */ + +/** + * Class for wrapping a specific idna conversion class and offering a standard interface + * @package Functions + */ + +class idna_convert_wrapper +{ + /** + * idna converter we use + * @var object + */ + + var $idna_converter; + + /** + * Class constructor. Creates a new idna converter + */ + + function idna_convert_wrapper() + { + $this->idna_converter = new idna_convert(); + } + + /** + * Encode a domain name, a email address or a list of one of both. + * + * @param string May be either a single domain name, e single email address or a list of one + * seperated either by ',', ';' or ' '. + * + * @return string Returns either a single domain name, a single email address or a list of one of + * both seperated by the same string as the input. + */ + + function encode($to_encode) + { + return $this->_do_action('encode', $to_encode); + } + + /** + * Decode a domain name, a email address or a list of one of both. + * + * @param string May be either a single domain name, e single email address or a list of one + * seperated either by ',', ';' or ' '. + * + * @return string Returns either a single domain name, a single email address or a list of one of + * both seperated by the same string as the input. + */ + + function decode($to_decode) + { + return $this->_do_action('decode', $to_decode); + } + + /** + * Do the real de- or encoding. First checks if a list is submitted and seperates it. Afterwards sends + * each entry to the idna converter to do the converting. + * + * @param string May be either 'decode' or 'encode'. + * @param string The string to de- or endcode. + * + * @return string The input string after being processed. + */ + + function _do_action($action, $string) + { + $string = trim($string); + + if(strpos($string, ',') !== false) + { + $strings = explode(',', $string); + $sepchar = ','; + } + elseif(strpos($string, ';') !== false) + { + $strings = explode(';', $string); + $sepchar = ';'; + } + elseif(strpos($string, ' ') !== false) + { + $strings = explode(' ', $string); + $sepchar = ' '; + } + else + { + $strings = array( + $string + ); + $sepchar = ''; + } + + for ($i = 0;$i < count($strings);$i++) + { + if(strpos($strings[$i], '@') !== false) + { + $split = explode('@', $strings[$i]); + $localpart = $split[0]; + $domain = $split[1]; + $email = true; + } + else + { + $domain = $strings[$i]; + $email = false; + } + + if(strlen($domain) !== 0) + { + $domain = utf8_decode($this->idna_converter->$action(utf8_encode($domain . '.none'))); + $domain = substr($domain, 0, strlen($domain) - 5); + } + + if($email) + { + $strings[$i] = $localpart . '@' . $domain; + } + else + { + $strings[$i] = $domain; + } + } + + return implode($sepchar, $strings); + } +} + +?> diff --git a/lib/classes/idna/npdata.ser b/lib/classes/idna/npdata.ser new file mode 100644 index 0000000000..d7ce6d03f2 --- /dev/null +++ b/lib/classes/idna/npdata.ser @@ -0,0 +1 @@ +a:6:{s:11:"map_nothing";a:27:{i:0;i:173;i:1;i:847;i:2;i:6150;i:3;i:6155;i:4;i:6156;i:5;i:6157;i:6;i:8203;i:7;i:8204;i:8;i:8205;i:9;i:8288;i:10;i:65024;i:11;i:65025;i:12;i:65026;i:13;i:65027;i:14;i:65028;i:15;i:65029;i:16;i:65030;i:17;i:65031;i:18;i:65032;i:19;i:65033;i:20;i:65034;i:21;i:65035;i:22;i:65036;i:23;i:65037;i:24;i:65038;i:25;i:65039;i:26;i:65279;}s:18:"general_prohibited";a:64:{i:0;i:0;i:1;i:1;i:2;i:2;i:3;i:3;i:4;i:4;i:5;i:5;i:6;i:6;i:7;i:7;i:8;i:8;i:9;i:9;i:10;i:10;i:11;i:11;i:12;i:12;i:13;i:13;i:14;i:14;i:15;i:15;i:16;i:16;i:17;i:17;i:18;i:18;i:19;i:19;i:20;i:20;i:21;i:21;i:22;i:22;i:23;i:23;i:24;i:24;i:25;i:25;i:26;i:26;i:27;i:27;i:28;i:28;i:29;i:29;i:30;i:30;i:31;i:31;i:32;i:32;i:33;i:33;i:34;i:34;i:35;i:35;i:36;i:36;i:37;i:37;i:38;i:38;i:39;i:39;i:40;i:40;i:41;i:41;i:42;i:42;i:43;i:43;i:44;i:44;i:45;i:47;i:46;i:59;i:47;i:60;i:48;i:61;i:49;i:62;i:50;i:63;i:51;i:64;i:52;i:91;i:53;i:92;i:54;i:93;i:55;i:94;i:56;i:95;i:57;i:96;i:58;i:123;i:59;i:124;i:60;i:125;i:61;i:126;i:62;i:127;i:63;i:12290;}s:8:"prohibit";a:84:{i:0;i:160;i:1;i:5760;i:2;i:8192;i:3;i:8193;i:4;i:8194;i:5;i:8195;i:6;i:8196;i:7;i:8197;i:8;i:8198;i:9;i:8199;i:10;i:8200;i:11;i:8201;i:12;i:8202;i:13;i:8203;i:14;i:8239;i:15;i:8287;i:16;i:12288;i:17;i:1757;i:18;i:1807;i:19;i:6158;i:20;i:8204;i:21;i:8205;i:22;i:8232;i:23;i:8233;i:24;i:65279;i:25;i:65529;i:26;i:65530;i:27;i:65531;i:28;i:65532;i:29;i:65534;i:30;i:65535;i:31;i:131070;i:32;i:131071;i:33;i:196606;i:34;i:196607;i:35;i:262142;i:36;i:262143;i:37;i:327678;i:38;i:327679;i:39;i:393214;i:40;i:393215;i:41;i:458750;i:42;i:458751;i:43;i:524286;i:44;i:524287;i:45;i:589822;i:46;i:589823;i:47;i:655358;i:48;i:655359;i:49;i:720894;i:50;i:720895;i:51;i:786430;i:52;i:786431;i:53;i:851966;i:54;i:851967;i:55;i:917502;i:56;i:917503;i:57;i:983038;i:58;i:983039;i:59;i:1048574;i:60;i:1048575;i:61;i:1114110;i:62;i:1114111;i:63;i:65529;i:64;i:65530;i:65;i:65531;i:66;i:65532;i:67;i:65533;i:68;i:832;i:69;i:833;i:70;i:8206;i:71;i:8207;i:72;i:8234;i:73;i:8235;i:74;i:8236;i:75;i:8237;i:76;i:8238;i:77;i:8298;i:78;i:8299;i:79;i:8300;i:80;i:8301;i:81;i:8302;i:82;i:8303;i:83;i:917505;}s:15:"prohibit_ranges";a:10:{i:0;a:2:{i:0;i:128;i:1;i:159;}i:1;a:2:{i:0;i:8288;i:1;i:8303;}i:2;a:2:{i:0;i:119155;i:1;i:119162;}i:3;a:2:{i:0;i:57344;i:1;i:63743;}i:4;a:2:{i:0;i:983040;i:1;i:1048573;}i:5;a:2:{i:0;i:1048576;i:1;i:1114109;}i:6;a:2:{i:0;i:64976;i:1;i:65007;}i:7;a:2:{i:0;i:55296;i:1;i:57343;}i:8;a:2:{i:0;i:12272;i:1;i:12283;}i:9;a:2:{i:0;i:917536;i:1;i:917631;}}s:11:"replacemaps";a:1401:{i:65;a:1:{i:0;i:97;}i:66;a:1:{i:0;i:98;}i:67;a:1:{i:0;i:99;}i:68;a:1:{i:0;i:100;}i:69;a:1:{i:0;i:101;}i:70;a:1:{i:0;i:102;}i:71;a:1:{i:0;i:103;}i:72;a:1:{i:0;i:104;}i:73;a:1:{i:0;i:105;}i:74;a:1:{i:0;i:106;}i:75;a:1:{i:0;i:107;}i:76;a:1:{i:0;i:108;}i:77;a:1:{i:0;i:109;}i:78;a:1:{i:0;i:110;}i:79;a:1:{i:0;i:111;}i:80;a:1:{i:0;i:112;}i:81;a:1:{i:0;i:113;}i:82;a:1:{i:0;i:114;}i:83;a:1:{i:0;i:115;}i:84;a:1:{i:0;i:116;}i:85;a:1:{i:0;i:117;}i:86;a:1:{i:0;i:118;}i:87;a:1:{i:0;i:119;}i:88;a:1:{i:0;i:120;}i:89;a:1:{i:0;i:121;}i:90;a:1:{i:0;i:122;}i:181;a:1:{i:0;i:956;}i:192;a:1:{i:0;i:224;}i:193;a:1:{i:0;i:225;}i:194;a:1:{i:0;i:226;}i:195;a:1:{i:0;i:227;}i:196;a:1:{i:0;i:228;}i:197;a:1:{i:0;i:229;}i:198;a:1:{i:0;i:230;}i:199;a:1:{i:0;i:231;}i:200;a:1:{i:0;i:232;}i:201;a:1:{i:0;i:233;}i:202;a:1:{i:0;i:234;}i:203;a:1:{i:0;i:235;}i:204;a:1:{i:0;i:236;}i:205;a:1:{i:0;i:237;}i:206;a:1:{i:0;i:238;}i:207;a:1:{i:0;i:239;}i:208;a:1:{i:0;i:240;}i:209;a:1:{i:0;i:241;}i:210;a:1:{i:0;i:242;}i:211;a:1:{i:0;i:243;}i:212;a:1:{i:0;i:244;}i:213;a:1:{i:0;i:245;}i:214;a:1:{i:0;i:246;}i:216;a:1:{i:0;i:248;}i:217;a:1:{i:0;i:249;}i:218;a:1:{i:0;i:250;}i:219;a:1:{i:0;i:251;}i:220;a:1:{i:0;i:252;}i:221;a:1:{i:0;i:253;}i:222;a:1:{i:0;i:254;}i:223;a:2:{i:0;i:115;i:1;i:115;}i:256;a:1:{i:0;i:257;}i:258;a:1:{i:0;i:259;}i:260;a:1:{i:0;i:261;}i:262;a:1:{i:0;i:263;}i:264;a:1:{i:0;i:265;}i:266;a:1:{i:0;i:267;}i:268;a:1:{i:0;i:269;}i:270;a:1:{i:0;i:271;}i:272;a:1:{i:0;i:273;}i:274;a:1:{i:0;i:275;}i:276;a:1:{i:0;i:277;}i:278;a:1:{i:0;i:279;}i:280;a:1:{i:0;i:281;}i:282;a:1:{i:0;i:283;}i:284;a:1:{i:0;i:285;}i:286;a:1:{i:0;i:287;}i:288;a:1:{i:0;i:289;}i:290;a:1:{i:0;i:291;}i:292;a:1:{i:0;i:293;}i:294;a:1:{i:0;i:295;}i:296;a:1:{i:0;i:297;}i:298;a:1:{i:0;i:299;}i:300;a:1:{i:0;i:301;}i:302;a:1:{i:0;i:303;}i:304;a:2:{i:0;i:105;i:1;i:775;}i:306;a:1:{i:0;i:307;}i:308;a:1:{i:0;i:309;}i:310;a:1:{i:0;i:311;}i:313;a:1:{i:0;i:314;}i:315;a:1:{i:0;i:316;}i:317;a:1:{i:0;i:318;}i:319;a:1:{i:0;i:320;}i:321;a:1:{i:0;i:322;}i:323;a:1:{i:0;i:324;}i:325;a:1:{i:0;i:326;}i:327;a:1:{i:0;i:328;}i:329;a:2:{i:0;i:700;i:1;i:110;}i:330;a:1:{i:0;i:331;}i:332;a:1:{i:0;i:333;}i:334;a:1:{i:0;i:335;}i:336;a:1:{i:0;i:337;}i:338;a:1:{i:0;i:339;}i:340;a:1:{i:0;i:341;}i:342;a:1:{i:0;i:343;}i:344;a:1:{i:0;i:345;}i:346;a:1:{i:0;i:347;}i:348;a:1:{i:0;i:349;}i:350;a:1:{i:0;i:351;}i:352;a:1:{i:0;i:353;}i:354;a:1:{i:0;i:355;}i:356;a:1:{i:0;i:357;}i:358;a:1:{i:0;i:359;}i:360;a:1:{i:0;i:361;}i:362;a:1:{i:0;i:363;}i:364;a:1:{i:0;i:365;}i:366;a:1:{i:0;i:367;}i:368;a:1:{i:0;i:369;}i:370;a:1:{i:0;i:371;}i:372;a:1:{i:0;i:373;}i:374;a:1:{i:0;i:375;}i:376;a:1:{i:0;i:255;}i:377;a:1:{i:0;i:378;}i:379;a:1:{i:0;i:380;}i:381;a:1:{i:0;i:382;}i:383;a:1:{i:0;i:115;}i:385;a:1:{i:0;i:595;}i:386;a:1:{i:0;i:387;}i:388;a:1:{i:0;i:389;}i:390;a:1:{i:0;i:596;}i:391;a:1:{i:0;i:392;}i:393;a:1:{i:0;i:598;}i:394;a:1:{i:0;i:599;}i:395;a:1:{i:0;i:396;}i:398;a:1:{i:0;i:477;}i:399;a:1:{i:0;i:601;}i:400;a:1:{i:0;i:603;}i:401;a:1:{i:0;i:402;}i:403;a:1:{i:0;i:608;}i:404;a:1:{i:0;i:611;}i:406;a:1:{i:0;i:617;}i:407;a:1:{i:0;i:616;}i:408;a:1:{i:0;i:409;}i:412;a:1:{i:0;i:623;}i:413;a:1:{i:0;i:626;}i:415;a:1:{i:0;i:629;}i:416;a:1:{i:0;i:417;}i:418;a:1:{i:0;i:419;}i:420;a:1:{i:0;i:421;}i:422;a:1:{i:0;i:640;}i:423;a:1:{i:0;i:424;}i:425;a:1:{i:0;i:643;}i:428;a:1:{i:0;i:429;}i:430;a:1:{i:0;i:648;}i:431;a:1:{i:0;i:432;}i:433;a:1:{i:0;i:650;}i:434;a:1:{i:0;i:651;}i:435;a:1:{i:0;i:436;}i:437;a:1:{i:0;i:438;}i:439;a:1:{i:0;i:658;}i:440;a:1:{i:0;i:441;}i:444;a:1:{i:0;i:445;}i:452;a:1:{i:0;i:454;}i:453;a:1:{i:0;i:454;}i:455;a:1:{i:0;i:457;}i:456;a:1:{i:0;i:457;}i:458;a:1:{i:0;i:460;}i:459;a:1:{i:0;i:460;}i:461;a:1:{i:0;i:462;}i:463;a:1:{i:0;i:464;}i:465;a:1:{i:0;i:466;}i:467;a:1:{i:0;i:468;}i:469;a:1:{i:0;i:470;}i:471;a:1:{i:0;i:472;}i:473;a:1:{i:0;i:474;}i:475;a:1:{i:0;i:476;}i:478;a:1:{i:0;i:479;}i:480;a:1:{i:0;i:481;}i:482;a:1:{i:0;i:483;}i:484;a:1:{i:0;i:485;}i:486;a:1:{i:0;i:487;}i:488;a:1:{i:0;i:489;}i:490;a:1:{i:0;i:491;}i:492;a:1:{i:0;i:493;}i:494;a:1:{i:0;i:495;}i:496;a:2:{i:0;i:106;i:1;i:780;}i:497;a:1:{i:0;i:499;}i:498;a:1:{i:0;i:499;}i:500;a:1:{i:0;i:501;}i:502;a:1:{i:0;i:405;}i:503;a:1:{i:0;i:447;}i:504;a:1:{i:0;i:505;}i:506;a:1:{i:0;i:507;}i:508;a:1:{i:0;i:509;}i:510;a:1:{i:0;i:511;}i:512;a:1:{i:0;i:513;}i:514;a:1:{i:0;i:515;}i:516;a:1:{i:0;i:517;}i:518;a:1:{i:0;i:519;}i:520;a:1:{i:0;i:521;}i:522;a:1:{i:0;i:523;}i:524;a:1:{i:0;i:525;}i:526;a:1:{i:0;i:527;}i:528;a:1:{i:0;i:529;}i:530;a:1:{i:0;i:531;}i:532;a:1:{i:0;i:533;}i:534;a:1:{i:0;i:535;}i:536;a:1:{i:0;i:537;}i:538;a:1:{i:0;i:539;}i:540;a:1:{i:0;i:541;}i:542;a:1:{i:0;i:543;}i:544;a:1:{i:0;i:414;}i:546;a:1:{i:0;i:547;}i:548;a:1:{i:0;i:549;}i:550;a:1:{i:0;i:551;}i:552;a:1:{i:0;i:553;}i:554;a:1:{i:0;i:555;}i:556;a:1:{i:0;i:557;}i:558;a:1:{i:0;i:559;}i:560;a:1:{i:0;i:561;}i:562;a:1:{i:0;i:563;}i:837;a:1:{i:0;i:953;}i:890;a:2:{i:0;i:32;i:1;i:953;}i:902;a:1:{i:0;i:940;}i:904;a:1:{i:0;i:941;}i:905;a:1:{i:0;i:942;}i:906;a:1:{i:0;i:943;}i:908;a:1:{i:0;i:972;}i:910;a:1:{i:0;i:973;}i:911;a:1:{i:0;i:974;}i:912;a:3:{i:0;i:953;i:1;i:776;i:2;i:769;}i:913;a:1:{i:0;i:945;}i:914;a:1:{i:0;i:946;}i:915;a:1:{i:0;i:947;}i:916;a:1:{i:0;i:948;}i:917;a:1:{i:0;i:949;}i:918;a:1:{i:0;i:950;}i:919;a:1:{i:0;i:951;}i:920;a:1:{i:0;i:952;}i:921;a:1:{i:0;i:953;}i:922;a:1:{i:0;i:954;}i:923;a:1:{i:0;i:955;}i:924;a:1:{i:0;i:956;}i:925;a:1:{i:0;i:957;}i:926;a:1:{i:0;i:958;}i:927;a:1:{i:0;i:959;}i:928;a:1:{i:0;i:960;}i:929;a:1:{i:0;i:961;}i:931;a:1:{i:0;i:963;}i:932;a:1:{i:0;i:964;}i:933;a:1:{i:0;i:965;}i:934;a:1:{i:0;i:966;}i:935;a:1:{i:0;i:967;}i:936;a:1:{i:0;i:968;}i:937;a:1:{i:0;i:969;}i:938;a:1:{i:0;i:970;}i:939;a:1:{i:0;i:971;}i:944;a:3:{i:0;i:965;i:1;i:776;i:2;i:769;}i:962;a:1:{i:0;i:963;}i:976;a:1:{i:0;i:946;}i:977;a:1:{i:0;i:952;}i:978;a:1:{i:0;i:965;}i:979;a:1:{i:0;i:973;}i:980;a:1:{i:0;i:971;}i:981;a:1:{i:0;i:966;}i:982;a:1:{i:0;i:960;}i:984;a:1:{i:0;i:985;}i:986;a:1:{i:0;i:987;}i:988;a:1:{i:0;i:989;}i:990;a:1:{i:0;i:991;}i:992;a:1:{i:0;i:993;}i:994;a:1:{i:0;i:995;}i:996;a:1:{i:0;i:997;}i:998;a:1:{i:0;i:999;}i:1000;a:1:{i:0;i:1001;}i:1002;a:1:{i:0;i:1003;}i:1004;a:1:{i:0;i:1005;}i:1006;a:1:{i:0;i:1007;}i:1008;a:1:{i:0;i:954;}i:1009;a:1:{i:0;i:961;}i:1010;a:1:{i:0;i:963;}i:1012;a:1:{i:0;i:952;}i:1013;a:1:{i:0;i:949;}i:1024;a:1:{i:0;i:1104;}i:1025;a:1:{i:0;i:1105;}i:1026;a:1:{i:0;i:1106;}i:1027;a:1:{i:0;i:1107;}i:1028;a:1:{i:0;i:1108;}i:1029;a:1:{i:0;i:1109;}i:1030;a:1:{i:0;i:1110;}i:1031;a:1:{i:0;i:1111;}i:1032;a:1:{i:0;i:1112;}i:1033;a:1:{i:0;i:1113;}i:1034;a:1:{i:0;i:1114;}i:1035;a:1:{i:0;i:1115;}i:1036;a:1:{i:0;i:1116;}i:1037;a:1:{i:0;i:1117;}i:1038;a:1:{i:0;i:1118;}i:1039;a:1:{i:0;i:1119;}i:1040;a:1:{i:0;i:1072;}i:1041;a:1:{i:0;i:1073;}i:1042;a:1:{i:0;i:1074;}i:1043;a:1:{i:0;i:1075;}i:1044;a:1:{i:0;i:1076;}i:1045;a:1:{i:0;i:1077;}i:1046;a:1:{i:0;i:1078;}i:1047;a:1:{i:0;i:1079;}i:1048;a:1:{i:0;i:1080;}i:1049;a:1:{i:0;i:1081;}i:1050;a:1:{i:0;i:1082;}i:1051;a:1:{i:0;i:1083;}i:1052;a:1:{i:0;i:1084;}i:1053;a:1:{i:0;i:1085;}i:1054;a:1:{i:0;i:1086;}i:1055;a:1:{i:0;i:1087;}i:1056;a:1:{i:0;i:1088;}i:1057;a:1:{i:0;i:1089;}i:1058;a:1:{i:0;i:1090;}i:1059;a:1:{i:0;i:1091;}i:1060;a:1:{i:0;i:1092;}i:1061;a:1:{i:0;i:1093;}i:1062;a:1:{i:0;i:1094;}i:1063;a:1:{i:0;i:1095;}i:1064;a:1:{i:0;i:1096;}i:1065;a:1:{i:0;i:1097;}i:1066;a:1:{i:0;i:1098;}i:1067;a:1:{i:0;i:1099;}i:1068;a:1:{i:0;i:1100;}i:1069;a:1:{i:0;i:1101;}i:1070;a:1:{i:0;i:1102;}i:1071;a:1:{i:0;i:1103;}i:1120;a:1:{i:0;i:1121;}i:1122;a:1:{i:0;i:1123;}i:1124;a:1:{i:0;i:1125;}i:1126;a:1:{i:0;i:1127;}i:1128;a:1:{i:0;i:1129;}i:1130;a:1:{i:0;i:1131;}i:1132;a:1:{i:0;i:1133;}i:1134;a:1:{i:0;i:1135;}i:1136;a:1:{i:0;i:1137;}i:1138;a:1:{i:0;i:1139;}i:1140;a:1:{i:0;i:1141;}i:1142;a:1:{i:0;i:1143;}i:1144;a:1:{i:0;i:1145;}i:1146;a:1:{i:0;i:1147;}i:1148;a:1:{i:0;i:1149;}i:1150;a:1:{i:0;i:1151;}i:1152;a:1:{i:0;i:1153;}i:1162;a:1:{i:0;i:1163;}i:1164;a:1:{i:0;i:1165;}i:1166;a:1:{i:0;i:1167;}i:1168;a:1:{i:0;i:1169;}i:1170;a:1:{i:0;i:1171;}i:1172;a:1:{i:0;i:1173;}i:1174;a:1:{i:0;i:1175;}i:1176;a:1:{i:0;i:1177;}i:1178;a:1:{i:0;i:1179;}i:1180;a:1:{i:0;i:1181;}i:1182;a:1:{i:0;i:1183;}i:1184;a:1:{i:0;i:1185;}i:1186;a:1:{i:0;i:1187;}i:1188;a:1:{i:0;i:1189;}i:1190;a:1:{i:0;i:1191;}i:1192;a:1:{i:0;i:1193;}i:1194;a:1:{i:0;i:1195;}i:1196;a:1:{i:0;i:1197;}i:1198;a:1:{i:0;i:1199;}i:1200;a:1:{i:0;i:1201;}i:1202;a:1:{i:0;i:1203;}i:1204;a:1:{i:0;i:1205;}i:1206;a:1:{i:0;i:1207;}i:1208;a:1:{i:0;i:1209;}i:1210;a:1:{i:0;i:1211;}i:1212;a:1:{i:0;i:1213;}i:1214;a:1:{i:0;i:1215;}i:1217;a:1:{i:0;i:1218;}i:1219;a:1:{i:0;i:1220;}i:1221;a:1:{i:0;i:1222;}i:1223;a:1:{i:0;i:1224;}i:1225;a:1:{i:0;i:1226;}i:1227;a:1:{i:0;i:1228;}i:1229;a:1:{i:0;i:1230;}i:1232;a:1:{i:0;i:1233;}i:1234;a:1:{i:0;i:1235;}i:1236;a:1:{i:0;i:1237;}i:1238;a:1:{i:0;i:1239;}i:1240;a:1:{i:0;i:1241;}i:1242;a:1:{i:0;i:1243;}i:1244;a:1:{i:0;i:1245;}i:1246;a:1:{i:0;i:1247;}i:1248;a:1:{i:0;i:1249;}i:1250;a:1:{i:0;i:1251;}i:1252;a:1:{i:0;i:1253;}i:1254;a:1:{i:0;i:1255;}i:1256;a:1:{i:0;i:1257;}i:1258;a:1:{i:0;i:1259;}i:1260;a:1:{i:0;i:1261;}i:1262;a:1:{i:0;i:1263;}i:1264;a:1:{i:0;i:1265;}i:1266;a:1:{i:0;i:1267;}i:1268;a:1:{i:0;i:1269;}i:1272;a:1:{i:0;i:1273;}i:1280;a:1:{i:0;i:1281;}i:1282;a:1:{i:0;i:1283;}i:1284;a:1:{i:0;i:1285;}i:1286;a:1:{i:0;i:1287;}i:1288;a:1:{i:0;i:1289;}i:1290;a:1:{i:0;i:1291;}i:1292;a:1:{i:0;i:1293;}i:1294;a:1:{i:0;i:1295;}i:1329;a:1:{i:0;i:1377;}i:1330;a:1:{i:0;i:1378;}i:1331;a:1:{i:0;i:1379;}i:1332;a:1:{i:0;i:1380;}i:1333;a:1:{i:0;i:1381;}i:1334;a:1:{i:0;i:1382;}i:1335;a:1:{i:0;i:1383;}i:1336;a:1:{i:0;i:1384;}i:1337;a:1:{i:0;i:1385;}i:1338;a:1:{i:0;i:1386;}i:1339;a:1:{i:0;i:1387;}i:1340;a:1:{i:0;i:1388;}i:1341;a:1:{i:0;i:1389;}i:1342;a:1:{i:0;i:1390;}i:1343;a:1:{i:0;i:1391;}i:1344;a:1:{i:0;i:1392;}i:1345;a:1:{i:0;i:1393;}i:1346;a:1:{i:0;i:1394;}i:1347;a:1:{i:0;i:1395;}i:1348;a:1:{i:0;i:1396;}i:1349;a:1:{i:0;i:1397;}i:1350;a:1:{i:0;i:1398;}i:1351;a:1:{i:0;i:1399;}i:1352;a:1:{i:0;i:1400;}i:1353;a:1:{i:0;i:1401;}i:1354;a:1:{i:0;i:1402;}i:1355;a:1:{i:0;i:1403;}i:1356;a:1:{i:0;i:1404;}i:1357;a:1:{i:0;i:1405;}i:1358;a:1:{i:0;i:1406;}i:1359;a:1:{i:0;i:1407;}i:1360;a:1:{i:0;i:1408;}i:1361;a:1:{i:0;i:1409;}i:1362;a:1:{i:0;i:1410;}i:1363;a:1:{i:0;i:1411;}i:1364;a:1:{i:0;i:1412;}i:1365;a:1:{i:0;i:1413;}i:1366;a:1:{i:0;i:1414;}i:1415;a:2:{i:0;i:1381;i:1;i:1410;}i:7680;a:1:{i:0;i:7681;}i:7682;a:1:{i:0;i:7683;}i:7684;a:1:{i:0;i:7685;}i:7686;a:1:{i:0;i:7687;}i:7688;a:1:{i:0;i:7689;}i:7690;a:1:{i:0;i:7691;}i:7692;a:1:{i:0;i:7693;}i:7694;a:1:{i:0;i:7695;}i:7696;a:1:{i:0;i:7697;}i:7698;a:1:{i:0;i:7699;}i:7700;a:1:{i:0;i:7701;}i:7702;a:1:{i:0;i:7703;}i:7704;a:1:{i:0;i:7705;}i:7706;a:1:{i:0;i:7707;}i:7708;a:1:{i:0;i:7709;}i:7710;a:1:{i:0;i:7711;}i:7712;a:1:{i:0;i:7713;}i:7714;a:1:{i:0;i:7715;}i:7716;a:1:{i:0;i:7717;}i:7718;a:1:{i:0;i:7719;}i:7720;a:1:{i:0;i:7721;}i:7722;a:1:{i:0;i:7723;}i:7724;a:1:{i:0;i:7725;}i:7726;a:1:{i:0;i:7727;}i:7728;a:1:{i:0;i:7729;}i:7730;a:1:{i:0;i:7731;}i:7732;a:1:{i:0;i:7733;}i:7734;a:1:{i:0;i:7735;}i:7736;a:1:{i:0;i:7737;}i:7738;a:1:{i:0;i:7739;}i:7740;a:1:{i:0;i:7741;}i:7742;a:1:{i:0;i:7743;}i:7744;a:1:{i:0;i:7745;}i:7746;a:1:{i:0;i:7747;}i:7748;a:1:{i:0;i:7749;}i:7750;a:1:{i:0;i:7751;}i:7752;a:1:{i:0;i:7753;}i:7754;a:1:{i:0;i:7755;}i:7756;a:1:{i:0;i:7757;}i:7758;a:1:{i:0;i:7759;}i:7760;a:1:{i:0;i:7761;}i:7762;a:1:{i:0;i:7763;}i:7764;a:1:{i:0;i:7765;}i:7766;a:1:{i:0;i:7767;}i:7768;a:1:{i:0;i:7769;}i:7770;a:1:{i:0;i:7771;}i:7772;a:1:{i:0;i:7773;}i:7774;a:1:{i:0;i:7775;}i:7776;a:1:{i:0;i:7777;}i:7778;a:1:{i:0;i:7779;}i:7780;a:1:{i:0;i:7781;}i:7782;a:1:{i:0;i:7783;}i:7784;a:1:{i:0;i:7785;}i:7786;a:1:{i:0;i:7787;}i:7788;a:1:{i:0;i:7789;}i:7790;a:1:{i:0;i:7791;}i:7792;a:1:{i:0;i:7793;}i:7794;a:1:{i:0;i:7795;}i:7796;a:1:{i:0;i:7797;}i:7798;a:1:{i:0;i:7799;}i:7800;a:1:{i:0;i:7801;}i:7802;a:1:{i:0;i:7803;}i:7804;a:1:{i:0;i:7805;}i:7806;a:1:{i:0;i:7807;}i:7808;a:1:{i:0;i:7809;}i:7810;a:1:{i:0;i:7811;}i:7812;a:1:{i:0;i:7813;}i:7814;a:1:{i:0;i:7815;}i:7816;a:1:{i:0;i:7817;}i:7818;a:1:{i:0;i:7819;}i:7820;a:1:{i:0;i:7821;}i:7822;a:1:{i:0;i:7823;}i:7824;a:1:{i:0;i:7825;}i:7826;a:1:{i:0;i:7827;}i:7828;a:1:{i:0;i:7829;}i:7830;a:2:{i:0;i:104;i:1;i:817;}i:7831;a:2:{i:0;i:116;i:1;i:776;}i:7832;a:2:{i:0;i:119;i:1;i:778;}i:7833;a:2:{i:0;i:121;i:1;i:778;}i:7834;a:2:{i:0;i:97;i:1;i:702;}i:7835;a:1:{i:0;i:7777;}i:7840;a:1:{i:0;i:7841;}i:7842;a:1:{i:0;i:7843;}i:7844;a:1:{i:0;i:7845;}i:7846;a:1:{i:0;i:7847;}i:7848;a:1:{i:0;i:7849;}i:7850;a:1:{i:0;i:7851;}i:7852;a:1:{i:0;i:7853;}i:7854;a:1:{i:0;i:7855;}i:7856;a:1:{i:0;i:7857;}i:7858;a:1:{i:0;i:7859;}i:7860;a:1:{i:0;i:7861;}i:7862;a:1:{i:0;i:7863;}i:7864;a:1:{i:0;i:7865;}i:7866;a:1:{i:0;i:7867;}i:7868;a:1:{i:0;i:7869;}i:7870;a:1:{i:0;i:7871;}i:7872;a:1:{i:0;i:7873;}i:7874;a:1:{i:0;i:7875;}i:7876;a:1:{i:0;i:7877;}i:7878;a:1:{i:0;i:7879;}i:7880;a:1:{i:0;i:7881;}i:7882;a:1:{i:0;i:7883;}i:7884;a:1:{i:0;i:7885;}i:7886;a:1:{i:0;i:7887;}i:7888;a:1:{i:0;i:7889;}i:7890;a:1:{i:0;i:7891;}i:7892;a:1:{i:0;i:7893;}i:7894;a:1:{i:0;i:7895;}i:7896;a:1:{i:0;i:7897;}i:7898;a:1:{i:0;i:7899;}i:7900;a:1:{i:0;i:7901;}i:7902;a:1:{i:0;i:7903;}i:7904;a:1:{i:0;i:7905;}i:7906;a:1:{i:0;i:7907;}i:7908;a:1:{i:0;i:7909;}i:7910;a:1:{i:0;i:7911;}i:7912;a:1:{i:0;i:7913;}i:7914;a:1:{i:0;i:7915;}i:7916;a:1:{i:0;i:7917;}i:7918;a:1:{i:0;i:7919;}i:7920;a:1:{i:0;i:7921;}i:7922;a:1:{i:0;i:7923;}i:7924;a:1:{i:0;i:7925;}i:7926;a:1:{i:0;i:7927;}i:7928;a:1:{i:0;i:7929;}i:7944;a:1:{i:0;i:7936;}i:7945;a:1:{i:0;i:7937;}i:7946;a:1:{i:0;i:7938;}i:7947;a:1:{i:0;i:7939;}i:7948;a:1:{i:0;i:7940;}i:7949;a:1:{i:0;i:7941;}i:7950;a:1:{i:0;i:7942;}i:7951;a:1:{i:0;i:7943;}i:7960;a:1:{i:0;i:7952;}i:7961;a:1:{i:0;i:7953;}i:7962;a:1:{i:0;i:7954;}i:7963;a:1:{i:0;i:7955;}i:7964;a:1:{i:0;i:7956;}i:7965;a:1:{i:0;i:7957;}i:7976;a:1:{i:0;i:7968;}i:7977;a:1:{i:0;i:7969;}i:7978;a:1:{i:0;i:7970;}i:7979;a:1:{i:0;i:7971;}i:7980;a:1:{i:0;i:7972;}i:7981;a:1:{i:0;i:7973;}i:7982;a:1:{i:0;i:7974;}i:7983;a:1:{i:0;i:7975;}i:7992;a:1:{i:0;i:7984;}i:7993;a:1:{i:0;i:7985;}i:7994;a:1:{i:0;i:7986;}i:7995;a:1:{i:0;i:7987;}i:7996;a:1:{i:0;i:7988;}i:7997;a:1:{i:0;i:7989;}i:7998;a:1:{i:0;i:7990;}i:7999;a:1:{i:0;i:7991;}i:8008;a:1:{i:0;i:8000;}i:8009;a:1:{i:0;i:8001;}i:8010;a:1:{i:0;i:8002;}i:8011;a:1:{i:0;i:8003;}i:8012;a:1:{i:0;i:8004;}i:8013;a:1:{i:0;i:8005;}i:8016;a:2:{i:0;i:965;i:1;i:787;}i:8018;a:3:{i:0;i:965;i:1;i:787;i:2;i:768;}i:8020;a:3:{i:0;i:965;i:1;i:787;i:2;i:769;}i:8022;a:3:{i:0;i:965;i:1;i:787;i:2;i:834;}i:8025;a:1:{i:0;i:8017;}i:8027;a:1:{i:0;i:8019;}i:8029;a:1:{i:0;i:8021;}i:8031;a:1:{i:0;i:8023;}i:8040;a:1:{i:0;i:8032;}i:8041;a:1:{i:0;i:8033;}i:8042;a:1:{i:0;i:8034;}i:8043;a:1:{i:0;i:8035;}i:8044;a:1:{i:0;i:8036;}i:8045;a:1:{i:0;i:8037;}i:8046;a:1:{i:0;i:8038;}i:8047;a:1:{i:0;i:8039;}i:8064;a:2:{i:0;i:7936;i:1;i:953;}i:8065;a:2:{i:0;i:7937;i:1;i:953;}i:8066;a:2:{i:0;i:7938;i:1;i:953;}i:8067;a:2:{i:0;i:7939;i:1;i:953;}i:8068;a:2:{i:0;i:7940;i:1;i:953;}i:8069;a:2:{i:0;i:7941;i:1;i:953;}i:8070;a:2:{i:0;i:7942;i:1;i:953;}i:8071;a:2:{i:0;i:7943;i:1;i:953;}i:8072;a:2:{i:0;i:7936;i:1;i:953;}i:8073;a:2:{i:0;i:7937;i:1;i:953;}i:8074;a:2:{i:0;i:7938;i:1;i:953;}i:8075;a:2:{i:0;i:7939;i:1;i:953;}i:8076;a:2:{i:0;i:7940;i:1;i:953;}i:8077;a:2:{i:0;i:7941;i:1;i:953;}i:8078;a:2:{i:0;i:7942;i:1;i:953;}i:8079;a:2:{i:0;i:7943;i:1;i:953;}i:8080;a:2:{i:0;i:7968;i:1;i:953;}i:8081;a:2:{i:0;i:7969;i:1;i:953;}i:8082;a:2:{i:0;i:7970;i:1;i:953;}i:8083;a:2:{i:0;i:7971;i:1;i:953;}i:8084;a:2:{i:0;i:7972;i:1;i:953;}i:8085;a:2:{i:0;i:7973;i:1;i:953;}i:8086;a:2:{i:0;i:7974;i:1;i:953;}i:8087;a:2:{i:0;i:7975;i:1;i:953;}i:8088;a:2:{i:0;i:7968;i:1;i:953;}i:8089;a:2:{i:0;i:7969;i:1;i:953;}i:8090;a:2:{i:0;i:7970;i:1;i:953;}i:8091;a:2:{i:0;i:7971;i:1;i:953;}i:8092;a:2:{i:0;i:7972;i:1;i:953;}i:8093;a:2:{i:0;i:7973;i:1;i:953;}i:8094;a:2:{i:0;i:7974;i:1;i:953;}i:8095;a:2:{i:0;i:7975;i:1;i:953;}i:8096;a:2:{i:0;i:8032;i:1;i:953;}i:8097;a:2:{i:0;i:8033;i:1;i:953;}i:8098;a:2:{i:0;i:8034;i:1;i:953;}i:8099;a:2:{i:0;i:8035;i:1;i:953;}i:8100;a:2:{i:0;i:8036;i:1;i:953;}i:8101;a:2:{i:0;i:8037;i:1;i:953;}i:8102;a:2:{i:0;i:8038;i:1;i:953;}i:8103;a:2:{i:0;i:8039;i:1;i:953;}i:8104;a:2:{i:0;i:8032;i:1;i:953;}i:8105;a:2:{i:0;i:8033;i:1;i:953;}i:8106;a:2:{i:0;i:8034;i:1;i:953;}i:8107;a:2:{i:0;i:8035;i:1;i:953;}i:8108;a:2:{i:0;i:8036;i:1;i:953;}i:8109;a:2:{i:0;i:8037;i:1;i:953;}i:8110;a:2:{i:0;i:8038;i:1;i:953;}i:8111;a:2:{i:0;i:8039;i:1;i:953;}i:8114;a:2:{i:0;i:8048;i:1;i:953;}i:8115;a:2:{i:0;i:945;i:1;i:953;}i:8116;a:2:{i:0;i:940;i:1;i:953;}i:8118;a:2:{i:0;i:945;i:1;i:834;}i:8119;a:3:{i:0;i:945;i:1;i:834;i:2;i:953;}i:8120;a:1:{i:0;i:8112;}i:8121;a:1:{i:0;i:8113;}i:8122;a:1:{i:0;i:8048;}i:8123;a:1:{i:0;i:8049;}i:8124;a:2:{i:0;i:945;i:1;i:953;}i:8126;a:1:{i:0;i:953;}i:8130;a:2:{i:0;i:8052;i:1;i:953;}i:8131;a:2:{i:0;i:951;i:1;i:953;}i:8132;a:2:{i:0;i:942;i:1;i:953;}i:8134;a:2:{i:0;i:951;i:1;i:834;}i:8135;a:3:{i:0;i:951;i:1;i:834;i:2;i:953;}i:8136;a:1:{i:0;i:8050;}i:8137;a:1:{i:0;i:8051;}i:8138;a:1:{i:0;i:8052;}i:8139;a:1:{i:0;i:8053;}i:8140;a:2:{i:0;i:951;i:1;i:953;}i:8146;a:3:{i:0;i:953;i:1;i:776;i:2;i:768;}i:8147;a:3:{i:0;i:953;i:1;i:776;i:2;i:769;}i:8150;a:2:{i:0;i:953;i:1;i:834;}i:8151;a:3:{i:0;i:953;i:1;i:776;i:2;i:834;}i:8152;a:1:{i:0;i:8144;}i:8153;a:1:{i:0;i:8145;}i:8154;a:1:{i:0;i:8054;}i:8155;a:1:{i:0;i:8055;}i:8162;a:3:{i:0;i:965;i:1;i:776;i:2;i:768;}i:8163;a:3:{i:0;i:965;i:1;i:776;i:2;i:769;}i:8164;a:2:{i:0;i:961;i:1;i:787;}i:8166;a:2:{i:0;i:965;i:1;i:834;}i:8167;a:3:{i:0;i:965;i:1;i:776;i:2;i:834;}i:8168;a:1:{i:0;i:8160;}i:8169;a:1:{i:0;i:8161;}i:8170;a:1:{i:0;i:8058;}i:8171;a:1:{i:0;i:8059;}i:8172;a:1:{i:0;i:8165;}i:8178;a:2:{i:0;i:8060;i:1;i:953;}i:8179;a:2:{i:0;i:969;i:1;i:953;}i:8180;a:2:{i:0;i:974;i:1;i:953;}i:8182;a:2:{i:0;i:969;i:1;i:834;}i:8183;a:3:{i:0;i:969;i:1;i:834;i:2;i:953;}i:8184;a:1:{i:0;i:8056;}i:8185;a:1:{i:0;i:8057;}i:8186;a:1:{i:0;i:8060;}i:8187;a:1:{i:0;i:8061;}i:8188;a:2:{i:0;i:969;i:1;i:953;}i:8360;a:2:{i:0;i:114;i:1;i:115;}i:8450;a:1:{i:0;i:99;}i:8451;a:2:{i:0;i:176;i:1;i:99;}i:8455;a:1:{i:0;i:603;}i:8457;a:2:{i:0;i:176;i:1;i:102;}i:8459;a:1:{i:0;i:104;}i:8460;a:1:{i:0;i:104;}i:8461;a:1:{i:0;i:104;}i:8464;a:1:{i:0;i:105;}i:8465;a:1:{i:0;i:105;}i:8466;a:1:{i:0;i:108;}i:8469;a:1:{i:0;i:110;}i:8470;a:2:{i:0;i:110;i:1;i:111;}i:8473;a:1:{i:0;i:112;}i:8474;a:1:{i:0;i:113;}i:8475;a:1:{i:0;i:114;}i:8476;a:1:{i:0;i:114;}i:8477;a:1:{i:0;i:114;}i:8480;a:2:{i:0;i:115;i:1;i:109;}i:8481;a:3:{i:0;i:116;i:1;i:101;i:2;i:108;}i:8482;a:2:{i:0;i:116;i:1;i:109;}i:8484;a:1:{i:0;i:122;}i:8486;a:1:{i:0;i:969;}i:8488;a:1:{i:0;i:122;}i:8490;a:1:{i:0;i:107;}i:8491;a:1:{i:0;i:229;}i:8492;a:1:{i:0;i:98;}i:8493;a:1:{i:0;i:99;}i:8496;a:1:{i:0;i:101;}i:8497;a:1:{i:0;i:102;}i:8499;a:1:{i:0;i:109;}i:8510;a:1:{i:0;i:947;}i:8511;a:1:{i:0;i:960;}i:8517;a:1:{i:0;i:100;}i:8544;a:1:{i:0;i:8560;}i:8545;a:1:{i:0;i:8561;}i:8546;a:1:{i:0;i:8562;}i:8547;a:1:{i:0;i:8563;}i:8548;a:1:{i:0;i:8564;}i:8549;a:1:{i:0;i:8565;}i:8550;a:1:{i:0;i:8566;}i:8551;a:1:{i:0;i:8567;}i:8552;a:1:{i:0;i:8568;}i:8553;a:1:{i:0;i:8569;}i:8554;a:1:{i:0;i:8570;}i:8555;a:1:{i:0;i:8571;}i:8556;a:1:{i:0;i:8572;}i:8557;a:1:{i:0;i:8573;}i:8558;a:1:{i:0;i:8574;}i:8559;a:1:{i:0;i:8575;}i:9398;a:1:{i:0;i:9424;}i:9399;a:1:{i:0;i:9425;}i:9400;a:1:{i:0;i:9426;}i:9401;a:1:{i:0;i:9427;}i:9402;a:1:{i:0;i:9428;}i:9403;a:1:{i:0;i:9429;}i:9404;a:1:{i:0;i:9430;}i:9405;a:1:{i:0;i:9431;}i:9406;a:1:{i:0;i:9432;}i:9407;a:1:{i:0;i:9433;}i:9408;a:1:{i:0;i:9434;}i:9409;a:1:{i:0;i:9435;}i:9410;a:1:{i:0;i:9436;}i:9411;a:1:{i:0;i:9437;}i:9412;a:1:{i:0;i:9438;}i:9413;a:1:{i:0;i:9439;}i:9414;a:1:{i:0;i:9440;}i:9415;a:1:{i:0;i:9441;}i:9416;a:1:{i:0;i:9442;}i:9417;a:1:{i:0;i:9443;}i:9418;a:1:{i:0;i:9444;}i:9419;a:1:{i:0;i:9445;}i:9420;a:1:{i:0;i:9446;}i:9421;a:1:{i:0;i:9447;}i:9422;a:1:{i:0;i:9448;}i:9423;a:1:{i:0;i:9449;}i:13169;a:3:{i:0;i:104;i:1;i:112;i:2;i:97;}i:13171;a:2:{i:0;i:97;i:1;i:117;}i:13173;a:2:{i:0;i:111;i:1;i:118;}i:13184;a:2:{i:0;i:112;i:1;i:97;}i:13185;a:2:{i:0;i:110;i:1;i:97;}i:13186;a:2:{i:0;i:956;i:1;i:97;}i:13187;a:2:{i:0;i:109;i:1;i:97;}i:13188;a:2:{i:0;i:107;i:1;i:97;}i:13189;a:2:{i:0;i:107;i:1;i:98;}i:13190;a:2:{i:0;i:109;i:1;i:98;}i:13191;a:2:{i:0;i:103;i:1;i:98;}i:13194;a:2:{i:0;i:112;i:1;i:102;}i:13195;a:2:{i:0;i:110;i:1;i:102;}i:13196;a:2:{i:0;i:956;i:1;i:102;}i:13200;a:2:{i:0;i:104;i:1;i:122;}i:13201;a:3:{i:0;i:107;i:1;i:104;i:2;i:122;}i:13202;a:3:{i:0;i:109;i:1;i:104;i:2;i:122;}i:13203;a:3:{i:0;i:103;i:1;i:104;i:2;i:122;}i:13204;a:3:{i:0;i:116;i:1;i:104;i:2;i:122;}i:13225;a:2:{i:0;i:112;i:1;i:97;}i:13226;a:3:{i:0;i:107;i:1;i:112;i:2;i:97;}i:13227;a:3:{i:0;i:109;i:1;i:112;i:2;i:97;}i:13228;a:3:{i:0;i:103;i:1;i:112;i:2;i:97;}i:13236;a:2:{i:0;i:112;i:1;i:118;}i:13237;a:2:{i:0;i:110;i:1;i:118;}i:13238;a:2:{i:0;i:956;i:1;i:118;}i:13239;a:2:{i:0;i:109;i:1;i:118;}i:13240;a:2:{i:0;i:107;i:1;i:118;}i:13241;a:2:{i:0;i:109;i:1;i:118;}i:13242;a:2:{i:0;i:112;i:1;i:119;}i:13243;a:2:{i:0;i:110;i:1;i:119;}i:13244;a:2:{i:0;i:956;i:1;i:119;}i:13245;a:2:{i:0;i:109;i:1;i:119;}i:13246;a:2:{i:0;i:107;i:1;i:119;}i:13247;a:2:{i:0;i:109;i:1;i:119;}i:13248;a:2:{i:0;i:107;i:1;i:969;}i:13249;a:2:{i:0;i:109;i:1;i:969;}i:13251;a:2:{i:0;i:98;i:1;i:113;}i:13254;a:4:{i:0;i:99;i:1;i:8725;i:2;i:107;i:3;i:103;}i:13255;a:3:{i:0;i:99;i:1;i:111;i:2;i:46;}i:13256;a:2:{i:0;i:100;i:1;i:98;}i:13257;a:2:{i:0;i:103;i:1;i:121;}i:13259;a:2:{i:0;i:104;i:1;i:112;}i:13261;a:2:{i:0;i:107;i:1;i:107;}i:13262;a:2:{i:0;i:107;i:1;i:109;}i:13271;a:2:{i:0;i:112;i:1;i:104;}i:13273;a:3:{i:0;i:112;i:1;i:112;i:2;i:109;}i:13274;a:2:{i:0;i:112;i:1;i:114;}i:13276;a:2:{i:0;i:115;i:1;i:118;}i:13277;a:2:{i:0;i:119;i:1;i:98;}i:64256;a:2:{i:0;i:102;i:1;i:102;}i:64257;a:2:{i:0;i:102;i:1;i:105;}i:64258;a:2:{i:0;i:102;i:1;i:108;}i:64259;a:3:{i:0;i:102;i:1;i:102;i:2;i:105;}i:64260;a:3:{i:0;i:102;i:1;i:102;i:2;i:108;}i:64261;a:2:{i:0;i:115;i:1;i:116;}i:64262;a:2:{i:0;i:115;i:1;i:116;}i:64275;a:2:{i:0;i:1396;i:1;i:1398;}i:64276;a:2:{i:0;i:1396;i:1;i:1381;}i:64277;a:2:{i:0;i:1396;i:1;i:1387;}i:64278;a:2:{i:0;i:1406;i:1;i:1398;}i:64279;a:2:{i:0;i:1396;i:1;i:1389;}i:65313;a:1:{i:0;i:65345;}i:65314;a:1:{i:0;i:65346;}i:65315;a:1:{i:0;i:65347;}i:65316;a:1:{i:0;i:65348;}i:65317;a:1:{i:0;i:65349;}i:65318;a:1:{i:0;i:65350;}i:65319;a:1:{i:0;i:65351;}i:65320;a:1:{i:0;i:65352;}i:65321;a:1:{i:0;i:65353;}i:65322;a:1:{i:0;i:65354;}i:65323;a:1:{i:0;i:65355;}i:65324;a:1:{i:0;i:65356;}i:65325;a:1:{i:0;i:65357;}i:65326;a:1:{i:0;i:65358;}i:65327;a:1:{i:0;i:65359;}i:65328;a:1:{i:0;i:65360;}i:65329;a:1:{i:0;i:65361;}i:65330;a:1:{i:0;i:65362;}i:65331;a:1:{i:0;i:65363;}i:65332;a:1:{i:0;i:65364;}i:65333;a:1:{i:0;i:65365;}i:65334;a:1:{i:0;i:65366;}i:65335;a:1:{i:0;i:65367;}i:65336;a:1:{i:0;i:65368;}i:65337;a:1:{i:0;i:65369;}i:65338;a:1:{i:0;i:65370;}i:66560;a:1:{i:0;i:66600;}i:66561;a:1:{i:0;i:66601;}i:66562;a:1:{i:0;i:66602;}i:66563;a:1:{i:0;i:66603;}i:66564;a:1:{i:0;i:66604;}i:66565;a:1:{i:0;i:66605;}i:66566;a:1:{i:0;i:66606;}i:66567;a:1:{i:0;i:66607;}i:66568;a:1:{i:0;i:66608;}i:66569;a:1:{i:0;i:66609;}i:66570;a:1:{i:0;i:66610;}i:66571;a:1:{i:0;i:66611;}i:66572;a:1:{i:0;i:66612;}i:66573;a:1:{i:0;i:66613;}i:66574;a:1:{i:0;i:66614;}i:66575;a:1:{i:0;i:66615;}i:66576;a:1:{i:0;i:66616;}i:66577;a:1:{i:0;i:66617;}i:66578;a:1:{i:0;i:66618;}i:66579;a:1:{i:0;i:66619;}i:66580;a:1:{i:0;i:66620;}i:66581;a:1:{i:0;i:66621;}i:66582;a:1:{i:0;i:66622;}i:66583;a:1:{i:0;i:66623;}i:66584;a:1:{i:0;i:66624;}i:66585;a:1:{i:0;i:66625;}i:66586;a:1:{i:0;i:66626;}i:66587;a:1:{i:0;i:66627;}i:66588;a:1:{i:0;i:66628;}i:66589;a:1:{i:0;i:66629;}i:66590;a:1:{i:0;i:66630;}i:66591;a:1:{i:0;i:66631;}i:66592;a:1:{i:0;i:66632;}i:66593;a:1:{i:0;i:66633;}i:66594;a:1:{i:0;i:66634;}i:66595;a:1:{i:0;i:66635;}i:66596;a:1:{i:0;i:66636;}i:66597;a:1:{i:0;i:66637;}i:119808;a:1:{i:0;i:97;}i:119809;a:1:{i:0;i:98;}i:119810;a:1:{i:0;i:99;}i:119811;a:1:{i:0;i:100;}i:119812;a:1:{i:0;i:101;}i:119813;a:1:{i:0;i:102;}i:119814;a:1:{i:0;i:103;}i:119815;a:1:{i:0;i:104;}i:119816;a:1:{i:0;i:105;}i:119817;a:1:{i:0;i:106;}i:119818;a:1:{i:0;i:107;}i:119819;a:1:{i:0;i:108;}i:119820;a:1:{i:0;i:109;}i:119821;a:1:{i:0;i:110;}i:119822;a:1:{i:0;i:111;}i:119823;a:1:{i:0;i:112;}i:119824;a:1:{i:0;i:113;}i:119825;a:1:{i:0;i:114;}i:119826;a:1:{i:0;i:115;}i:119827;a:1:{i:0;i:116;}i:119828;a:1:{i:0;i:117;}i:119829;a:1:{i:0;i:118;}i:119830;a:1:{i:0;i:119;}i:119831;a:1:{i:0;i:120;}i:119832;a:1:{i:0;i:121;}i:119833;a:1:{i:0;i:122;}i:119860;a:1:{i:0;i:97;}i:119861;a:1:{i:0;i:98;}i:119862;a:1:{i:0;i:99;}i:119863;a:1:{i:0;i:100;}i:119864;a:1:{i:0;i:101;}i:119865;a:1:{i:0;i:102;}i:119866;a:1:{i:0;i:103;}i:119867;a:1:{i:0;i:104;}i:119868;a:1:{i:0;i:105;}i:119869;a:1:{i:0;i:106;}i:119870;a:1:{i:0;i:107;}i:119871;a:1:{i:0;i:108;}i:119872;a:1:{i:0;i:109;}i:119873;a:1:{i:0;i:110;}i:119874;a:1:{i:0;i:111;}i:119875;a:1:{i:0;i:112;}i:119876;a:1:{i:0;i:113;}i:119877;a:1:{i:0;i:114;}i:119878;a:1:{i:0;i:115;}i:119879;a:1:{i:0;i:116;}i:119880;a:1:{i:0;i:117;}i:119881;a:1:{i:0;i:118;}i:119882;a:1:{i:0;i:119;}i:119883;a:1:{i:0;i:120;}i:119884;a:1:{i:0;i:121;}i:119885;a:1:{i:0;i:122;}i:119912;a:1:{i:0;i:97;}i:119913;a:1:{i:0;i:98;}i:119914;a:1:{i:0;i:99;}i:119915;a:1:{i:0;i:100;}i:119916;a:1:{i:0;i:101;}i:119917;a:1:{i:0;i:102;}i:119918;a:1:{i:0;i:103;}i:119919;a:1:{i:0;i:104;}i:119920;a:1:{i:0;i:105;}i:119921;a:1:{i:0;i:106;}i:119922;a:1:{i:0;i:107;}i:119923;a:1:{i:0;i:108;}i:119924;a:1:{i:0;i:109;}i:119925;a:1:{i:0;i:110;}i:119926;a:1:{i:0;i:111;}i:119927;a:1:{i:0;i:112;}i:119928;a:1:{i:0;i:113;}i:119929;a:1:{i:0;i:114;}i:119930;a:1:{i:0;i:115;}i:119931;a:1:{i:0;i:116;}i:119932;a:1:{i:0;i:117;}i:119933;a:1:{i:0;i:118;}i:119934;a:1:{i:0;i:119;}i:119935;a:1:{i:0;i:120;}i:119936;a:1:{i:0;i:121;}i:119937;a:1:{i:0;i:122;}i:119964;a:1:{i:0;i:97;}i:119966;a:1:{i:0;i:99;}i:119967;a:1:{i:0;i:100;}i:119970;a:1:{i:0;i:103;}i:119973;a:1:{i:0;i:106;}i:119974;a:1:{i:0;i:107;}i:119977;a:1:{i:0;i:110;}i:119978;a:1:{i:0;i:111;}i:119979;a:1:{i:0;i:112;}i:119980;a:1:{i:0;i:113;}i:119982;a:1:{i:0;i:115;}i:119983;a:1:{i:0;i:116;}i:119984;a:1:{i:0;i:117;}i:119985;a:1:{i:0;i:118;}i:119986;a:1:{i:0;i:119;}i:119987;a:1:{i:0;i:120;}i:119988;a:1:{i:0;i:121;}i:119989;a:1:{i:0;i:122;}i:120016;a:1:{i:0;i:97;}i:120017;a:1:{i:0;i:98;}i:120018;a:1:{i:0;i:99;}i:120019;a:1:{i:0;i:100;}i:120020;a:1:{i:0;i:101;}i:120021;a:1:{i:0;i:102;}i:120022;a:1:{i:0;i:103;}i:120023;a:1:{i:0;i:104;}i:120024;a:1:{i:0;i:105;}i:120025;a:1:{i:0;i:106;}i:120026;a:1:{i:0;i:107;}i:120027;a:1:{i:0;i:108;}i:120028;a:1:{i:0;i:109;}i:120029;a:1:{i:0;i:110;}i:120030;a:1:{i:0;i:111;}i:120031;a:1:{i:0;i:112;}i:120032;a:1:{i:0;i:113;}i:120033;a:1:{i:0;i:114;}i:120034;a:1:{i:0;i:115;}i:120035;a:1:{i:0;i:116;}i:120036;a:1:{i:0;i:117;}i:120037;a:1:{i:0;i:118;}i:120038;a:1:{i:0;i:119;}i:120039;a:1:{i:0;i:120;}i:120040;a:1:{i:0;i:121;}i:120041;a:1:{i:0;i:122;}i:120068;a:1:{i:0;i:97;}i:120069;a:1:{i:0;i:98;}i:120071;a:1:{i:0;i:100;}i:120072;a:1:{i:0;i:101;}i:120073;a:1:{i:0;i:102;}i:120074;a:1:{i:0;i:103;}i:120077;a:1:{i:0;i:106;}i:120078;a:1:{i:0;i:107;}i:120079;a:1:{i:0;i:108;}i:120080;a:1:{i:0;i:109;}i:120081;a:1:{i:0;i:110;}i:120082;a:1:{i:0;i:111;}i:120083;a:1:{i:0;i:112;}i:120084;a:1:{i:0;i:113;}i:120086;a:1:{i:0;i:115;}i:120087;a:1:{i:0;i:116;}i:120088;a:1:{i:0;i:117;}i:120089;a:1:{i:0;i:118;}i:120090;a:1:{i:0;i:119;}i:120091;a:1:{i:0;i:120;}i:120092;a:1:{i:0;i:121;}i:120120;a:1:{i:0;i:97;}i:120121;a:1:{i:0;i:98;}i:120123;a:1:{i:0;i:100;}i:120124;a:1:{i:0;i:101;}i:120125;a:1:{i:0;i:102;}i:120126;a:1:{i:0;i:103;}i:120128;a:1:{i:0;i:105;}i:120129;a:1:{i:0;i:106;}i:120130;a:1:{i:0;i:107;}i:120131;a:1:{i:0;i:108;}i:120132;a:1:{i:0;i:109;}i:120134;a:1:{i:0;i:111;}i:120138;a:1:{i:0;i:115;}i:120139;a:1:{i:0;i:116;}i:120140;a:1:{i:0;i:117;}i:120141;a:1:{i:0;i:118;}i:120142;a:1:{i:0;i:119;}i:120143;a:1:{i:0;i:120;}i:120144;a:1:{i:0;i:121;}i:120172;a:1:{i:0;i:97;}i:120173;a:1:{i:0;i:98;}i:120174;a:1:{i:0;i:99;}i:120175;a:1:{i:0;i:100;}i:120176;a:1:{i:0;i:101;}i:120177;a:1:{i:0;i:102;}i:120178;a:1:{i:0;i:103;}i:120179;a:1:{i:0;i:104;}i:120180;a:1:{i:0;i:105;}i:120181;a:1:{i:0;i:106;}i:120182;a:1:{i:0;i:107;}i:120183;a:1:{i:0;i:108;}i:120184;a:1:{i:0;i:109;}i:120185;a:1:{i:0;i:110;}i:120186;a:1:{i:0;i:111;}i:120187;a:1:{i:0;i:112;}i:120188;a:1:{i:0;i:113;}i:120189;a:1:{i:0;i:114;}i:120190;a:1:{i:0;i:115;}i:120191;a:1:{i:0;i:116;}i:120192;a:1:{i:0;i:117;}i:120193;a:1:{i:0;i:118;}i:120194;a:1:{i:0;i:119;}i:120195;a:1:{i:0;i:120;}i:120196;a:1:{i:0;i:121;}i:120197;a:1:{i:0;i:122;}i:120224;a:1:{i:0;i:97;}i:120225;a:1:{i:0;i:98;}i:120226;a:1:{i:0;i:99;}i:120227;a:1:{i:0;i:100;}i:120228;a:1:{i:0;i:101;}i:120229;a:1:{i:0;i:102;}i:120230;a:1:{i:0;i:103;}i:120231;a:1:{i:0;i:104;}i:120232;a:1:{i:0;i:105;}i:120233;a:1:{i:0;i:106;}i:120234;a:1:{i:0;i:107;}i:120235;a:1:{i:0;i:108;}i:120236;a:1:{i:0;i:109;}i:120237;a:1:{i:0;i:110;}i:120238;a:1:{i:0;i:111;}i:120239;a:1:{i:0;i:112;}i:120240;a:1:{i:0;i:113;}i:120241;a:1:{i:0;i:114;}i:120242;a:1:{i:0;i:115;}i:120243;a:1:{i:0;i:116;}i:120244;a:1:{i:0;i:117;}i:120245;a:1:{i:0;i:118;}i:120246;a:1:{i:0;i:119;}i:120247;a:1:{i:0;i:120;}i:120248;a:1:{i:0;i:121;}i:120249;a:1:{i:0;i:122;}i:120276;a:1:{i:0;i:97;}i:120277;a:1:{i:0;i:98;}i:120278;a:1:{i:0;i:99;}i:120279;a:1:{i:0;i:100;}i:120280;a:1:{i:0;i:101;}i:120281;a:1:{i:0;i:102;}i:120282;a:1:{i:0;i:103;}i:120283;a:1:{i:0;i:104;}i:120284;a:1:{i:0;i:105;}i:120285;a:1:{i:0;i:106;}i:120286;a:1:{i:0;i:107;}i:120287;a:1:{i:0;i:108;}i:120288;a:1:{i:0;i:109;}i:120289;a:1:{i:0;i:110;}i:120290;a:1:{i:0;i:111;}i:120291;a:1:{i:0;i:112;}i:120292;a:1:{i:0;i:113;}i:120293;a:1:{i:0;i:114;}i:120294;a:1:{i:0;i:115;}i:120295;a:1:{i:0;i:116;}i:120296;a:1:{i:0;i:117;}i:120297;a:1:{i:0;i:118;}i:120298;a:1:{i:0;i:119;}i:120299;a:1:{i:0;i:120;}i:120300;a:1:{i:0;i:121;}i:120301;a:1:{i:0;i:122;}i:120328;a:1:{i:0;i:97;}i:120329;a:1:{i:0;i:98;}i:120330;a:1:{i:0;i:99;}i:120331;a:1:{i:0;i:100;}i:120332;a:1:{i:0;i:101;}i:120333;a:1:{i:0;i:102;}i:120334;a:1:{i:0;i:103;}i:120335;a:1:{i:0;i:104;}i:120336;a:1:{i:0;i:105;}i:120337;a:1:{i:0;i:106;}i:120338;a:1:{i:0;i:107;}i:120339;a:1:{i:0;i:108;}i:120340;a:1:{i:0;i:109;}i:120341;a:1:{i:0;i:110;}i:120342;a:1:{i:0;i:111;}i:120343;a:1:{i:0;i:112;}i:120344;a:1:{i:0;i:113;}i:120345;a:1:{i:0;i:114;}i:120346;a:1:{i:0;i:115;}i:120347;a:1:{i:0;i:116;}i:120348;a:1:{i:0;i:117;}i:120349;a:1:{i:0;i:118;}i:120350;a:1:{i:0;i:119;}i:120351;a:1:{i:0;i:120;}i:120352;a:1:{i:0;i:121;}i:120353;a:1:{i:0;i:122;}i:120380;a:1:{i:0;i:97;}i:120381;a:1:{i:0;i:98;}i:120382;a:1:{i:0;i:99;}i:120383;a:1:{i:0;i:100;}i:120384;a:1:{i:0;i:101;}i:120385;a:1:{i:0;i:102;}i:120386;a:1:{i:0;i:103;}i:120387;a:1:{i:0;i:104;}i:120388;a:1:{i:0;i:105;}i:120389;a:1:{i:0;i:106;}i:120390;a:1:{i:0;i:107;}i:120391;a:1:{i:0;i:108;}i:120392;a:1:{i:0;i:109;}i:120393;a:1:{i:0;i:110;}i:120394;a:1:{i:0;i:111;}i:120395;a:1:{i:0;i:112;}i:120396;a:1:{i:0;i:113;}i:120397;a:1:{i:0;i:114;}i:120398;a:1:{i:0;i:115;}i:120399;a:1:{i:0;i:116;}i:120400;a:1:{i:0;i:117;}i:120401;a:1:{i:0;i:118;}i:120402;a:1:{i:0;i:119;}i:120403;a:1:{i:0;i:120;}i:120404;a:1:{i:0;i:121;}i:120405;a:1:{i:0;i:122;}i:120432;a:1:{i:0;i:97;}i:120433;a:1:{i:0;i:98;}i:120434;a:1:{i:0;i:99;}i:120435;a:1:{i:0;i:100;}i:120436;a:1:{i:0;i:101;}i:120437;a:1:{i:0;i:102;}i:120438;a:1:{i:0;i:103;}i:120439;a:1:{i:0;i:104;}i:120440;a:1:{i:0;i:105;}i:120441;a:1:{i:0;i:106;}i:120442;a:1:{i:0;i:107;}i:120443;a:1:{i:0;i:108;}i:120444;a:1:{i:0;i:109;}i:120445;a:1:{i:0;i:110;}i:120446;a:1:{i:0;i:111;}i:120447;a:1:{i:0;i:112;}i:120448;a:1:{i:0;i:113;}i:120449;a:1:{i:0;i:114;}i:120450;a:1:{i:0;i:115;}i:120451;a:1:{i:0;i:116;}i:120452;a:1:{i:0;i:117;}i:120453;a:1:{i:0;i:118;}i:120454;a:1:{i:0;i:119;}i:120455;a:1:{i:0;i:120;}i:120456;a:1:{i:0;i:121;}i:120457;a:1:{i:0;i:122;}i:120488;a:1:{i:0;i:945;}i:120489;a:1:{i:0;i:946;}i:120490;a:1:{i:0;i:947;}i:120491;a:1:{i:0;i:948;}i:120492;a:1:{i:0;i:949;}i:120493;a:1:{i:0;i:950;}i:120494;a:1:{i:0;i:951;}i:120495;a:1:{i:0;i:952;}i:120496;a:1:{i:0;i:953;}i:120497;a:1:{i:0;i:954;}i:120498;a:1:{i:0;i:955;}i:120499;a:1:{i:0;i:956;}i:120500;a:1:{i:0;i:957;}i:120501;a:1:{i:0;i:958;}i:120502;a:1:{i:0;i:959;}i:120503;a:1:{i:0;i:960;}i:120504;a:1:{i:0;i:961;}i:120505;a:1:{i:0;i:952;}i:120506;a:1:{i:0;i:963;}i:120507;a:1:{i:0;i:964;}i:120508;a:1:{i:0;i:965;}i:120509;a:1:{i:0;i:966;}i:120510;a:1:{i:0;i:967;}i:120511;a:1:{i:0;i:968;}i:120512;a:1:{i:0;i:969;}i:120531;a:1:{i:0;i:963;}i:120546;a:1:{i:0;i:945;}i:120547;a:1:{i:0;i:946;}i:120548;a:1:{i:0;i:947;}i:120549;a:1:{i:0;i:948;}i:120550;a:1:{i:0;i:949;}i:120551;a:1:{i:0;i:950;}i:120552;a:1:{i:0;i:951;}i:120553;a:1:{i:0;i:952;}i:120554;a:1:{i:0;i:953;}i:120555;a:1:{i:0;i:954;}i:120556;a:1:{i:0;i:955;}i:120557;a:1:{i:0;i:956;}i:120558;a:1:{i:0;i:957;}i:120559;a:1:{i:0;i:958;}i:120560;a:1:{i:0;i:959;}i:120561;a:1:{i:0;i:960;}i:120562;a:1:{i:0;i:961;}i:120563;a:1:{i:0;i:952;}i:120564;a:1:{i:0;i:963;}i:120565;a:1:{i:0;i:964;}i:120566;a:1:{i:0;i:965;}i:120567;a:1:{i:0;i:966;}i:120568;a:1:{i:0;i:967;}i:120569;a:1:{i:0;i:968;}i:120570;a:1:{i:0;i:969;}i:120589;a:1:{i:0;i:963;}i:120604;a:1:{i:0;i:945;}i:120605;a:1:{i:0;i:946;}i:120606;a:1:{i:0;i:947;}i:120607;a:1:{i:0;i:948;}i:120608;a:1:{i:0;i:949;}i:120609;a:1:{i:0;i:950;}i:120610;a:1:{i:0;i:951;}i:120611;a:1:{i:0;i:952;}i:120612;a:1:{i:0;i:953;}i:120613;a:1:{i:0;i:954;}i:120614;a:1:{i:0;i:955;}i:120615;a:1:{i:0;i:956;}i:120616;a:1:{i:0;i:957;}i:120617;a:1:{i:0;i:958;}i:120618;a:1:{i:0;i:959;}i:120619;a:1:{i:0;i:960;}i:120620;a:1:{i:0;i:961;}i:120621;a:1:{i:0;i:952;}i:120622;a:1:{i:0;i:963;}i:120623;a:1:{i:0;i:964;}i:120624;a:1:{i:0;i:965;}i:120625;a:1:{i:0;i:966;}i:120626;a:1:{i:0;i:967;}i:120627;a:1:{i:0;i:968;}i:120628;a:1:{i:0;i:969;}i:120647;a:1:{i:0;i:963;}i:120662;a:1:{i:0;i:945;}i:120663;a:1:{i:0;i:946;}i:120664;a:1:{i:0;i:947;}i:120665;a:1:{i:0;i:948;}i:120666;a:1:{i:0;i:949;}i:120667;a:1:{i:0;i:950;}i:120668;a:1:{i:0;i:951;}i:120669;a:1:{i:0;i:952;}i:120670;a:1:{i:0;i:953;}i:120671;a:1:{i:0;i:954;}i:120672;a:1:{i:0;i:955;}i:120673;a:1:{i:0;i:956;}i:120674;a:1:{i:0;i:957;}i:120675;a:1:{i:0;i:958;}i:120676;a:1:{i:0;i:959;}i:120677;a:1:{i:0;i:960;}i:120678;a:1:{i:0;i:961;}i:120679;a:1:{i:0;i:952;}i:120680;a:1:{i:0;i:963;}i:120681;a:1:{i:0;i:964;}i:120682;a:1:{i:0;i:965;}i:120683;a:1:{i:0;i:966;}i:120684;a:1:{i:0;i:967;}i:120685;a:1:{i:0;i:968;}i:120686;a:1:{i:0;i:969;}i:120705;a:1:{i:0;i:963;}i:120720;a:1:{i:0;i:945;}i:120721;a:1:{i:0;i:946;}i:120722;a:1:{i:0;i:947;}i:120723;a:1:{i:0;i:948;}i:120724;a:1:{i:0;i:949;}i:120725;a:1:{i:0;i:950;}i:120726;a:1:{i:0;i:951;}i:120727;a:1:{i:0;i:952;}i:120728;a:1:{i:0;i:953;}i:120729;a:1:{i:0;i:954;}i:120730;a:1:{i:0;i:955;}i:120731;a:1:{i:0;i:956;}i:120732;a:1:{i:0;i:957;}i:120733;a:1:{i:0;i:958;}i:120734;a:1:{i:0;i:959;}i:120735;a:1:{i:0;i:960;}i:120736;a:1:{i:0;i:961;}i:120737;a:1:{i:0;i:952;}i:120738;a:1:{i:0;i:963;}i:120739;a:1:{i:0;i:964;}i:120740;a:1:{i:0;i:965;}i:120741;a:1:{i:0;i:966;}i:120742;a:1:{i:0;i:967;}i:120743;a:1:{i:0;i:968;}i:120744;a:1:{i:0;i:969;}i:120763;a:1:{i:0;i:963;}i:1017;a:1:{i:0;i:963;}i:7468;a:1:{i:0;i:97;}i:7469;a:1:{i:0;i:230;}i:7470;a:1:{i:0;i:98;}i:7472;a:1:{i:0;i:100;}i:7473;a:1:{i:0;i:101;}i:7474;a:1:{i:0;i:477;}i:7475;a:1:{i:0;i:103;}i:7476;a:1:{i:0;i:104;}i:7477;a:1:{i:0;i:105;}i:7478;a:1:{i:0;i:106;}i:7479;a:1:{i:0;i:107;}i:7480;a:1:{i:0;i:108;}i:7481;a:1:{i:0;i:109;}i:7482;a:1:{i:0;i:110;}i:7484;a:1:{i:0;i:111;}i:7485;a:1:{i:0;i:547;}i:7486;a:1:{i:0;i:112;}i:7487;a:1:{i:0;i:114;}i:7488;a:1:{i:0;i:116;}i:7489;a:1:{i:0;i:117;}i:7490;a:1:{i:0;i:119;}i:8507;a:3:{i:0;i:102;i:1;i:97;i:2;i:120;}i:12880;a:3:{i:0;i:112;i:1;i:116;i:2;i:101;}i:13004;a:2:{i:0;i:104;i:1;i:103;}i:13006;a:2:{i:0;i:101;i:1;i:118;}i:13007;a:3:{i:0;i:108;i:1;i:116;i:2;i:100;}i:13178;a:2:{i:0;i:105;i:1;i:117;}i:13278;a:3:{i:0;i:118;i:1;i:8725;i:2;i:109;}i:13279;a:3:{i:0;i:97;i:1;i:8725;i:2;i:109;}}s:12:"norm_combcls";a:341:{i:820;i:1;i:821;i:1;i:822;i:1;i:823;i:1;i:824;i:1;i:2364;i:7;i:2492;i:7;i:2620;i:7;i:2748;i:7;i:2876;i:7;i:3260;i:7;i:4151;i:7;i:12441;i:8;i:12442;i:8;i:2381;i:9;i:2509;i:9;i:2637;i:9;i:2765;i:9;i:2893;i:9;i:3021;i:9;i:3149;i:9;i:3277;i:9;i:3405;i:9;i:3530;i:9;i:3642;i:9;i:3972;i:9;i:4153;i:9;i:5908;i:9;i:5940;i:9;i:6098;i:9;i:1456;i:10;i:1457;i:11;i:1458;i:12;i:1459;i:13;i:1460;i:14;i:1461;i:15;i:1462;i:16;i:1463;i:17;i:1464;i:18;i:1465;i:19;i:1467;i:20;i:1468;i:21;i:1469;i:22;i:1471;i:23;i:1473;i:24;i:1474;i:25;i:64286;i:26;i:1611;i:27;i:1612;i:28;i:1613;i:29;i:1614;i:30;i:1615;i:31;i:1616;i:32;i:1617;i:33;i:1618;i:34;i:1648;i:35;i:1809;i:36;i:3157;i:84;i:3158;i:91;i:3640;i:103;i:3641;i:103;i:3656;i:107;i:3657;i:107;i:3658;i:107;i:3659;i:107;i:3768;i:118;i:3769;i:118;i:3784;i:122;i:3785;i:122;i:3786;i:122;i:3787;i:122;i:3953;i:129;i:3954;i:130;i:3962;i:130;i:3963;i:130;i:3964;i:130;i:3965;i:130;i:3968;i:130;i:3956;i:132;i:801;i:202;i:802;i:202;i:807;i:202;i:808;i:202;i:795;i:216;i:3897;i:216;i:119141;i:216;i:119142;i:216;i:119150;i:216;i:119151;i:216;i:119152;i:216;i:119153;i:216;i:119154;i:216;i:12330;i:218;i:790;i:220;i:791;i:220;i:792;i:220;i:793;i:220;i:796;i:220;i:797;i:220;i:798;i:220;i:799;i:220;i:800;i:220;i:803;i:220;i:804;i:220;i:805;i:220;i:806;i:220;i:809;i:220;i:810;i:220;i:811;i:220;i:812;i:220;i:813;i:220;i:814;i:220;i:815;i:220;i:816;i:220;i:817;i:220;i:818;i:220;i:819;i:220;i:825;i:220;i:826;i:220;i:827;i:220;i:828;i:220;i:839;i:220;i:840;i:220;i:841;i:220;i:845;i:220;i:846;i:220;i:851;i:220;i:852;i:220;i:853;i:220;i:854;i:220;i:1425;i:220;i:1430;i:220;i:1435;i:220;i:1443;i:220;i:1444;i:220;i:1445;i:220;i:1446;i:220;i:1447;i:220;i:1450;i:220;i:1621;i:220;i:1622;i:220;i:1763;i:220;i:1770;i:220;i:1773;i:220;i:1841;i:220;i:1844;i:220;i:1847;i:220;i:1848;i:220;i:1849;i:220;i:1851;i:220;i:1852;i:220;i:1854;i:220;i:1858;i:220;i:1860;i:220;i:1862;i:220;i:1864;i:220;i:2386;i:220;i:3864;i:220;i:3865;i:220;i:3893;i:220;i:3895;i:220;i:4038;i:220;i:6459;i:220;i:8424;i:220;i:119163;i:220;i:119164;i:220;i:119165;i:220;i:119166;i:220;i:119167;i:220;i:119168;i:220;i:119169;i:220;i:119170;i:220;i:119178;i:220;i:119179;i:220;i:1434;i:222;i:1453;i:222;i:6441;i:222;i:12333;i:222;i:12334;i:224;i:12335;i:224;i:119149;i:226;i:1454;i:228;i:6313;i:228;i:12331;i:228;i:768;i:230;i:769;i:230;i:770;i:230;i:771;i:230;i:772;i:230;i:773;i:230;i:774;i:230;i:775;i:230;i:776;i:230;i:777;i:230;i:778;i:230;i:779;i:230;i:780;i:230;i:781;i:230;i:782;i:230;i:783;i:230;i:784;i:230;i:785;i:230;i:786;i:230;i:787;i:230;i:788;i:230;i:829;i:230;i:830;i:230;i:831;i:230;i:832;i:230;i:833;i:230;i:834;i:230;i:835;i:230;i:836;i:230;i:838;i:230;i:842;i:230;i:843;i:230;i:844;i:230;i:848;i:230;i:849;i:230;i:850;i:230;i:855;i:230;i:867;i:230;i:868;i:230;i:869;i:230;i:870;i:230;i:871;i:230;i:872;i:230;i:873;i:230;i:874;i:230;i:875;i:230;i:876;i:230;i:877;i:230;i:878;i:230;i:879;i:230;i:1155;i:230;i:1156;i:230;i:1157;i:230;i:1158;i:230;i:1426;i:230;i:1427;i:230;i:1428;i:230;i:1429;i:230;i:1431;i:230;i:1432;i:230;i:1433;i:230;i:1436;i:230;i:1437;i:230;i:1438;i:230;i:1439;i:230;i:1440;i:230;i:1441;i:230;i:1448;i:230;i:1449;i:230;i:1451;i:230;i:1452;i:230;i:1455;i:230;i:1476;i:230;i:1552;i:230;i:1553;i:230;i:1554;i:230;i:1555;i:230;i:1556;i:230;i:1557;i:230;i:1619;i:230;i:1620;i:230;i:1623;i:230;i:1624;i:230;i:1750;i:230;i:1751;i:230;i:1752;i:230;i:1753;i:230;i:1754;i:230;i:1755;i:230;i:1756;i:230;i:1759;i:230;i:1760;i:230;i:1761;i:230;i:1762;i:230;i:1764;i:230;i:1767;i:230;i:1768;i:230;i:1771;i:230;i:1772;i:230;i:1840;i:230;i:1842;i:230;i:1843;i:230;i:1845;i:230;i:1846;i:230;i:1850;i:230;i:1853;i:230;i:1855;i:230;i:1856;i:230;i:1857;i:230;i:1859;i:230;i:1861;i:230;i:1863;i:230;i:1865;i:230;i:1866;i:230;i:2385;i:230;i:2387;i:230;i:2388;i:230;i:3970;i:230;i:3971;i:230;i:3974;i:230;i:3975;i:230;i:5901;i:230;i:6458;i:230;i:8400;i:230;i:8401;i:230;i:8404;i:230;i:8405;i:230;i:8406;i:230;i:8407;i:230;i:8411;i:230;i:8412;i:230;i:8417;i:230;i:8423;i:230;i:8425;i:230;i:65056;i:230;i:65057;i:230;i:65058;i:230;i:65059;i:230;i:119173;i:230;i:119174;i:230;i:119175;i:230;i:119177;i:230;i:119176;i:230;i:119210;i:230;i:119211;i:230;i:119212;i:230;i:119213;i:230;i:789;i:232;i:794;i:232;i:12332;i:232;i:863;i:233;i:866;i:233;i:861;i:234;i:862;i:234;i:864;i:234;i:865;i:234;i:837;i:240;}} \ No newline at end of file diff --git a/lib/classes/logger/abstract.AbstractLogger.php b/lib/classes/logger/abstract.AbstractLogger.php new file mode 100644 index 0000000000..29fa41fdbe --- /dev/null +++ b/lib/classes/logger/abstract.AbstractLogger.php @@ -0,0 +1,100 @@ + + * @license http://www.gnu.org/licenses/gpl.txt + * @package Functions + * @version CVS: $Id: abstract.AbstractLogger.php 2724 2009-06-07 14:18:02Z flo $ + * @link http://www.nutime.de/ + */ + +/* We're using the syslog constants for all the loggers (partly implemented) + +LOG_EMERG system is unusable +LOG_ALERT action must be taken immediately +LOG_CRIT critical conditions +LOG_ERR error conditions +LOG_WARNING warning conditions +LOG_NOTICE normal, but significant, condition +LOG_INFO informational message +LOG_DEBUG debug-level message + +*/ + +abstract class AbstractLogger +{ + /** + * Settings array + * @var settings + */ + + private $settings = array(); + + /** + * Enable/Disable Logging + * @var logenabled + */ + + private $logenabled = false; + + /** + * Enable/Disable Cronjob-Logging + * @var logcronjob + */ + + private $logcronjob = false; + + /** + * Loggin-Severity + * @var severity + */ + + private $severity = 1; + + // normal + + /** + * setup the main logger + * + * @param array settings + */ + + protected function setupLogger($settings) + { + $this->settings = $settings; + $this->logenabled = $this->settings['logger']['enabled']; + $this->logcronjob = $this->settings['logger']['log_cron']; + $this->severity = $this->settings['logger']['severity']; + } + + protected function isEnabled() + { + return $this->logenabled; + } + + protected function getSeverity() + { + return $this->severity; + } + + protected function logCron() + { + return $this->logcronjob; + } + + abstract public function logAction(); +} + +?> \ No newline at end of file diff --git a/lib/classes/logger/class.FileLogger.php b/lib/classes/logger/class.FileLogger.php new file mode 100644 index 0000000000..9e04c21fe4 --- /dev/null +++ b/lib/classes/logger/class.FileLogger.php @@ -0,0 +1,188 @@ + + * @license http://www.gnu.org/licenses/gpl.txt + * @package Functions + * @version CVS: $Id: class.FileLogger.php 2724 2009-06-07 14:18:02Z flo $ + * @link http://www.nutime.de/ + */ + +class FileLogger extends AbstractLogger +{ + /** + * Userinfo + * @var array + */ + + private $userinfo = array(); + + /** + * Logfile + * @var logfile + */ + + private $logfile = null; + + /** + * Syslogger Objects Array + * @var loggers + */ + + static private $loggers = array(); + + /** + * Class constructor. + * + * @param array userinfo + * @param array settings + */ + + protected function __construct($userinfo, $settings) + { + parent::setupLogger($settings); + $this->userinfo = $userinfo; + $this->setLogFile($settings['logger']['logfile']); + } + + /** + * Singleton ftw ;-) + * + */ + + static public function getInstanceOf($_usernfo, $_settings) + { + if(!isset(self::$loggers[$_usernfo['loginname']])) + { + self::$loggers[$_usernfo['loginname']] = new FileLogger($_usernfo, $_settings); + } + + return self::$loggers[$_usernfo['loginname']]; + } + + public function logAction($action = USR_ACTION, $type = LOG_NOTICE, $text = null) + { + if(parent::isEnabled()) + { + if(parent::getSeverity() <= 1 + && $type == LOG_NOTICE) + { + return; + } + + $_action = 'unknown'; + + switch($action) + { + case USR_ACTION: + $_action = 'customer'; + break; + case RES_ACTION: + $_action = 'reseller'; + break; + case ADM_ACTION: + $_action = 'administrator'; + break; + case CRON_ACTION: + $_action = 'cronjob'; + break; + case LOG_ERROR: + $_action = 'internal'; + break; + default: + $_action = 'unknown'; + break; + } + + $_type = 'unknown'; + + switch($type) + { + case LOG_INFO: + $_type = 'information'; + break; + case LOG_NOTICE: + $_type = 'notice'; + break; + case LOG_WARNING: + $_type = 'warning'; + break; + case LOG_ERR: + $_type = 'error'; + break; + case LOG_CRIT: + $_type = 'critical'; + break; + default: + $_type = 'unknown'; + break; + } + + if(!isset($this->userinfo['loginname']) + || $this->userinfo['loginname'] == '') + { + $name = 'unknown'; + } + else + { + $name = " (" . $this->userinfo['loginname'] . ")"; + } + + $fp = @fopen($this->logfile, 'a'); + + if($fp !== false) + { + $now = time(); + + if($text != null + && $text != '') + { + fwrite($fp, date("d.m.Y H:i:s", $now) . " [" . $_type . "] [" . $_action . "-action" . $name . "] " . $text . "\n"); + } + else + { + fwrite($fp, date("d.m.Y H:i:s", $now) . " [" . $_type . "] [" . $_action . "-action" . $name . "] No text given!!! Check scripts!\n"); + } + + fclose($fp); + } + else + { + if($this->logfile != null + || $this->logfile != '') + { + throw new Exception("Cannot open logfile '" . $this->logfile . "' for writing!"); + } + } + } + } + + private function setLogFile($filename = null) + { + if($filename != null + && $filename != '' + && $filename != "." + && $filename != ".." + && !is_dir($filename)) + { + $this->logfile = $filename; + return true; + } + + return false; + } +} + +?> diff --git a/lib/classes/logger/class.MysqlLogger.php b/lib/classes/logger/class.MysqlLogger.php new file mode 100644 index 0000000000..57cb520593 --- /dev/null +++ b/lib/classes/logger/class.MysqlLogger.php @@ -0,0 +1,113 @@ + + * @license http://www.gnu.org/licenses/gpl.txt + * @package Functions + * @version CVS: $Id: class.MysqlLogger.php 2724 2009-06-07 14:18:02Z flo $ + * @link http://www.nutime.de/ + */ + +class MysqlLogger extends AbstractLogger +{ + /** + * Userinfo + * @var array + */ + + private $userinfo = array(); + + /** + * Database handler + * @var db + */ + + private $db = false; + + /** + * Syslogger Objects Array + * @var loggers + */ + + static private $loggers = array(); + + /** + * Class constructor. + * + * @param array userinfo + * @param array settings + * @param resource database + */ + + protected function __construct($userinfo, $settings, $db) + { + parent::setupLogger($settings); + $this->userinfo = $userinfo; + $this->db = $db; + } + + /** + * Singleton ftw ;-) + * + */ + + static public function getInstanceOf($_usernfo, $_settings, $_db) + { + if(!isset(self::$loggers[$_usernfo['loginname']])) + { + self::$loggers[$_usernfo['loginname']] = new MysqlLogger($_usernfo, $_settings, $_db); + } + + return self::$loggers[$_usernfo['loginname']]; + } + + public function logAction($action = USR_ACTION, $type = LOG_NOTICE, $text = null) + { + if(parent::isEnabled()) + { + if(parent::getSeverity() <= 1 + && $type == LOG_NOTICE) + { + return; + } + + if(!isset($this->userinfo['loginname']) + || $this->userinfo['loginname'] == '') + { + $name = 'unknown'; + } + else + { + $name = " (" . $this->userinfo['loginname'] . ")"; + } + + $now = time(); + + if($text != null + && $text != '') + { + $this->db->query("INSERT INTO `panel_syslog` (`type`, `date`, `action`, `user`, `text`) + VALUES ('" . (int)$type . "', '" . $now . "', '" . (int)$action . "', '" . $this->db->escape($name) . "', '" . $this->db->escape($text) . "')"); + } + else + { + $this->db->query("INSERT INTO `panel_syslog` (`type`, `date`, `action`, `userid`, `text`) + VALUES ('" . (int)$type . "', '" . $now . "', '" . (int)$action . "', '" . $this->db->escape($name) . "', 'No text given!!! Check scripts!')"); + } + } + } +} + +?> diff --git a/lib/classes/logger/class.SysCPLogger.php b/lib/classes/logger/class.SysCPLogger.php new file mode 100644 index 0000000000..349c95db05 --- /dev/null +++ b/lib/classes/logger/class.SysCPLogger.php @@ -0,0 +1,205 @@ + + * @license http://www.gnu.org/licenses/gpl.txt + * @package Functions + * @version CVS: $Id: class.SysCPLogger.php 2724 2009-06-07 14:18:02Z flo $ + * @link http://www.nutime.de/ + */ + +class SysCPLogger +{ + /** + * Userinfo + * @var array + */ + + private $userinfo = array(); + + /** + * Database handler + * @var db + */ + + private $db = false; + + /** + * Settings array + * @var settings + */ + + private $settings = array(); + + /** + * LogTypes Array + * @var logtypes + */ + + static private $logtypes = null; + + /** + * Logger-Object-Array + * @var loggers + */ + + static private $loggers = null; + + /** + * Class constructor. + * + * @param array userinfo + * @param array settings + */ + + protected function __construct($userinfo, $db, $settings) + { + $this->userinfo = $userinfo; + $this->db = $db; + $this->settings = $settings; + self::$logtypes = array(); + + if(!isset($this->settings['logger']['logtypes']) + && (!isset($this->settings['logger']['logtypes']) || $this->settings['logger']['logtypes'] == '') + && isset($this->settings['logger']['enabled']) + && $this->settings['logger']['enabled']) + { + self::$logtypes[0] = 'syslog'; + self::$logtypes[1] = 'mysql'; + } + else + { + if(isset($this->settings['logger']['logtypes']) + && $this->settings['logger']['logtypes'] != '') + { + self::$logtypes = explode(',', $this->settings['logger']['logtypes']); + } + else + { + self::$logtypes = null; + } + } + } + + /** + * Singleton ftw ;-) + * + */ + + static public function getInstanceOf($_usernfo, $_db, $_settings) + { + if(!isset($_usernfo) + || $_usernfo == null) + { + $_usernfo = array(); + $_usernfo['loginname'] = 'unknown'; + } + + if(!isset(self::$loggers[$_usernfo['loginname']])) + { + self::$loggers[$_usernfo['loginname']] = new SysCPLogger($_usernfo, $_db, $_settings); + } + + return self::$loggers[$_usernfo['loginname']]; + } + + public function logAction($action = USR_ACTION, $type = LOG_NOTICE, $text = null) + { + if(self::$logtypes == null) + { + return; + } + + if($this->settings['logger']['log_cron'] == '0' + && $action == CRON_ACTION) + { + return; + } + + foreach(self::$logtypes as $logger) + { + switch($logger) + { + case 'syslog': + $_log = SysLogger::getInstanceOf($this->userinfo, $this->settings); + break; + case 'file': + try + { + $_log = FileLogger::getInstanceOf($this->userinfo, $this->settings); + } + + catch(Exception $e) + { + if($action != CRON_ACTION) + { + standard_error('logerror', $e->getMessage()); + } + else + { + echo "Log-Error: " . $e->getMessage(); + } + } + + break; + case 'mysql': + $_log = MysqlLogger::getInstanceOf($this->userinfo, $this->settings, $this->db); + break; + default: + $_log = null; + break; + } + + if($_log != null) + { + try + { + $_log->logAction($action, $type, $text); + } + + catch(Exception $e) + { + if($action != CRON_ACTION) + { + standard_error('logerror', $e->getMessage()); + } + else + { + echo "Log-Error: " . $e->getMessage(); + } + } + } + } + } + + public function setCronLog($_cronlog = 0) + { + $_cronlog = (int)$_cronlog; + + if($_cronlog != 0 + && $_cronlog != 1) + { + $_cronlog = 0; + } + + $this->db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` + SET `value`='" . $this->db->escape($_cronlog) . "' + WHERE `settinggroup`='logger' + AND `varname`='log_cron'"); + return true; + } +} + +?> diff --git a/lib/classes/logger/class.SysLogger.php b/lib/classes/logger/class.SysLogger.php new file mode 100644 index 0000000000..cfdb80fea0 --- /dev/null +++ b/lib/classes/logger/class.SysLogger.php @@ -0,0 +1,128 @@ + + * @license http://www.gnu.org/licenses/gpl.txt + * @package Functions + * @version CVS: $Id: class.SysLogger.php 2724 2009-06-07 14:18:02Z flo $ + * @link http://www.nutime.de/ + */ + +class SysLogger extends AbstractLogger +{ + /** + * Userinfo + * @var array + */ + + private $userinfo = array(); + + /** + * Syslogger Objects Array + * @var loggers + */ + + static private $loggers = array(); + + /** + * Class constructor. + * + * @param array userinfo + * @param array settings + */ + + protected function __construct($userinfo, $settings) + { + parent::setupLogger($settings); + $this->userinfo = $userinfo; + } + + /** + * Singleton ftw ;-) + * + */ + + static public function getInstanceOf($_usernfo, $_settings) + { + if(!isset(self::$loggers[$_usernfo['loginname']])) + { + self::$loggers[$_usernfo['loginname']] = new SysLogger($_usernfo, $_settings); + } + + return self::$loggers[$_usernfo['loginname']]; + } + + public function logAction($action = USR_ACTION, $type = LOG_NOTICE, $text = null) + { + if(parent::isEnabled()) + { + if(parent::getSeverity() <= 1 + && $type == LOG_NOTICE) + { + return; + } + + $_action = 'unknown'; + + switch($action) + { + case USR_ACTION: + $_action = 'customer'; + break; + case RES_ACTION: + $_action = 'reseller'; + break; + case ADM_ACTION: + $_action = 'administrator'; + break; + case CRON_ACTION: + $_action = 'cronjob'; + break; + case LOG_ERROR: + $_action = 'internal'; + break; + default: + $_action = 'unknown'; + break; + } + + if(!isset($this->userinfo['loginname']) + || $this->userinfo['loginname'] == '') + { + $name = 'unknown'; + } + else + { + $name = " (" . $this->userinfo['loginname'] . ")"; + } + + openlog("SysCP", LOG_NDELAY, LOG_USER); + + if($text != null + && $text != '') + { + syslog((int)$type, "[" . ucfirst($_action) . " Action" . $name . "] " . $text); + } + else + { + syslog((int)$type, "[" . ucfirst($_action) . " Action" . $name . "] No text given!!! Check scripts!"); + } + + closelog(); + } + } +} + +?> diff --git a/lib/classes/output/class.paging.php b/lib/classes/output/class.paging.php new file mode 100644 index 0000000000..65ec23635d --- /dev/null +++ b/lib/classes/output/class.paging.php @@ -0,0 +1,518 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Functions + * @version $Id: class.paging.php 2724 2009-06-07 14:18:02Z flo $ + */ + +/** + * Class to manage paging system + * @package Functions + */ + +class paging +{ + /** + * Userinfo + * @var array + */ + + var $userinfo = array(); + + /** + * Database handler + * @var db + */ + + var $db = false; + + /** + * MySQL-Table + * @var string + */ + + var $table = ''; + + /** + * Fields with description which should be selectable + * @var array + */ + + var $fields = array(); + + /** + * Entries per page + * @var int + */ + + var $entriesperpage = 0; + + /** + * Number of entries of table + * @var int + */ + + var $entries = 0; + + /** + * Sortorder, asc or desc + * @var string + */ + + var $sortorder = 'asc'; + + /** + * Sortfield + * @var string + */ + + var $sortfield = ''; + + /** + * Searchfield + * @var string + */ + + var $searchfield = ''; + + /** + * Searchtext + * @var string + */ + + var $searchtext = ''; + + /** + * Pagenumber + * @var int + */ + + var $pageno = 0; + + /** + * Switch natsorting on/off + * @var bool + */ + + var $natSorting = false; + + /** + * Class constructor. Loads settings from request or from userdata and saves them to session. + * + * @param array userinfo + * @param string Name of Table + * @param array Fields, in format array( 'fieldname_in_mysql' => 'field_caption' ) + * @param int entries per page + * @param bool Switch natsorting on/off (global, affects all calls of sort) + */ + + function paging($userinfo, $db, $table, $fields, $entriesperpage, $natSorting = false) + { + $this->userinfo = $userinfo; + + if(!is_array($this->userinfo['lastpaging'])) + { + $this->userinfo['lastpaging'] = unserialize($this->userinfo['lastpaging']); + } + + $this->db = $db; + $this->table = $table; + $this->fields = $fields; + $this->entriesperpage = $entriesperpage; + $this->natSorting = $natSorting; + $checklastpaging = (isset($this->userinfo['lastpaging']['table']) && $this->userinfo['lastpaging']['table'] == $this->table); + $this->userinfo['lastpaging']['table'] = $this->table; + + if(isset($_REQUEST['sortorder']) + && (strtolower($_REQUEST['sortorder']) == 'desc' || strtolower($_REQUEST['sortorder']) == 'asc')) + { + $this->sortorder = strtolower($_REQUEST['sortorder']); + } + else + { + if($checklastpaging + && isset($this->userinfo['lastpaging']['sortorder']) + && (strtolower($this->userinfo['lastpaging']['sortorder']) == 'desc' || strtolower($this->userinfo['lastpaging']['sortorder']) == 'asc')) + { + $this->sortorder = strtolower($this->userinfo['lastpaging']['sortorder']); + } + else + { + $this->sortorder = 'asc'; + } + } + + $this->userinfo['lastpaging']['sortorder'] = $this->sortorder; + + if(isset($_REQUEST['sortfield']) + && isset($fields[$_REQUEST['sortfield']])) + { + $this->sortfield = $_REQUEST['sortfield']; + } + else + { + if($checklastpaging + && isset($this->userinfo['lastpaging']['sortfield']) + && isset($fields[$this->userinfo['lastpaging']['sortfield']])) + { + $this->sortfield = $this->userinfo['lastpaging']['sortfield']; + } + else + { + $fieldnames = array_keys($fields); + $this->sortfield = $fieldnames[0]; + } + } + + $this->userinfo['lastpaging']['sortfield'] = $this->sortfield; + + if(isset($_REQUEST['searchfield']) + && isset($fields[$_REQUEST['searchfield']])) + { + $this->searchfield = $_REQUEST['searchfield']; + } + else + { + if($checklastpaging + && isset($this->userinfo['lastpaging']['searchfield']) + && isset($fields[$this->userinfo['lastpaging']['searchfield']])) + { + $this->searchfield = $this->userinfo['lastpaging']['searchfield']; + } + else + { + $fieldnames = array_keys($fields); + $this->searchfield = $fieldnames[0]; + } + } + + $this->userinfo['lastpaging']['searchfield'] = $this->searchfield; + + if(isset($_REQUEST['searchtext']) + && (preg_match("/^[@0-9a-zA-ZöüäÖÜÄß\-\*\.]+$/", $_REQUEST['searchtext']) || $_REQUEST['searchtext'] === '')) + { + $this->searchtext = $_REQUEST['searchtext']; + } + else + { + if($checklastpaging + && isset($this->userinfo['lastpaging']['searchtext']) + && preg_match("/^[@0-9a-zA-ZöüäÖÜÄß\-\*\.]+$/", $this->userinfo['lastpaging']['searchtext'])) + { + $this->searchtext = $this->userinfo['lastpaging']['searchtext']; + } + else + { + $this->searchtext = ''; + } + } + + $this->userinfo['lastpaging']['searchtext'] = $this->searchtext; + + if(isset($_REQUEST['pageno']) + && intval($_REQUEST['pageno']) != 0) + { + $this->pageno = intval($_REQUEST['pageno']); + } + else + { + if($checklastpaging + && isset($this->userinfo['lastpaging']['pageno']) + && intval($this->userinfo['lastpaging']['pageno']) != 0) + { + $this->pageno = intval($this->userinfo['lastpaging']['pageno']); + } + else + { + $this->pageno = 1; + } + } + + $this->userinfo['lastpaging']['pageno'] = $this->pageno; + $query = 'UPDATE `' . TABLE_PANEL_SESSIONS . '` SET `lastpaging`="' . $this->db->escape(serialize($this->userinfo['lastpaging'])) . '" WHERE `hash`="' . $this->db->escape($userinfo['hash']) . '" AND `userid` = "' . $this->db->escape($userinfo['userid']) . '" AND `ipaddress` = "' . $this->db->escape($userinfo['ipaddress']) . '" AND `useragent` = "' . $this->db->escape($userinfo['useragent']) . '" AND `adminsession` = "' . $this->db->escape($userinfo['adminsession']) . '" '; + $this->db->query($query); + } + + /** + * Sets number of entries and adjusts pageno if the number of entries doesn't correspond to the pageno. + * + * @param int entries + */ + + function setEntries($entries) + { + $this->entries = $entries; + + if(($this->pageno - 1) * $this->entriesperpage > $this->entries) + { + $this->pageno = 1; + } + + return true; + } + + /** + * Checks if a row should be displayed or not, used in loops + * + * @param int number of row + * @return bool to display or not to display, that's the question + */ + + function checkDisplay($count) + { + $begin = (intval($this->pageno) - 1) * intval($this->entriesperpage); + $end = (intval($this->pageno) * intval($this->entriesperpage)); + return (($count >= $begin && $count < $end) || $this->entriesperpage == 0); + } + + /** + * Returns condition code for sql query + * + * @param bool should returned condition code start with WHERE (false) or AND (true)? + * @return string the condition code + */ + + function getSqlWhere($append = false) + { + if($this->searchtext != '') + { + if($append == true) + { + $condition = ' AND '; + } + else + { + $condition = ' WHERE '; + } + + $searchfield = explode('.', $this->searchfield); + foreach($searchfield as $id => $field) + { + if(substr($field, -1, 1) != '`') + { + $field.= '`'; + } + + if($field{0} != '`') + { + $field = '`' . $field; + } + + $searchfield[$id] = $field; + } + + $searchfield = implode('.', $searchfield); + $searchtext = str_replace('*', '%', $this->searchtext); + $condition.= $searchfield . ' LIKE "' . $this->db->escape($searchtext) . '" '; + } + else + { + $condition = ''; + } + + return $condition; + } + + /** + * Returns "order by"-code for sql query + * + * @param bool Switch natsorting on/off (local, affects just this call) + * @return string the "order by"-code + */ + + function getSqlOrderBy($natSorting = null) + { + $sortfield = explode('.', $this->sortfield); + foreach($sortfield as $id => $field) + { + if(substr($field, -1, 1) != '`') + { + $field.= '`'; + } + + if($field{0} != '`') + { + $field = '`' . $field; + } + + $sortfield[$id] = $field; + } + + $sortfield = implode('.', $sortfield); + $sortorder = strtoupper($this->sortorder); + + if($natSorting == true + || ($natSorting === null && $this->natSorting == true)) + { + // Acts similar to php's natsort(), found in one comment at http://my.opera.com/cpr/blog/show.dml/160556 + + $sortcode = 'ORDER BY CONCAT( IF( ASCII( LEFT( ' . $sortfield . ', 1 ) ) > 57, LEFT( ' . $sortfield . ', 1 ), \'0\' ), IF( ASCII( RIGHT( ' . $sortfield . ', 1 ) ) > 57, LPAD( ' . $sortfield . ', 255, \'0\' ), LPAD( CONCAT( ' . $sortfield . ', \'-\' ), 255, \'0\' ) ) ) ' . $sortorder; + } + else + { + $sortcode = 'ORDER BY ' . $sortfield . ' ' . $sortorder; + } + + return $sortcode; + } + + /** + * Currently not used + * + * @return string always empty + */ + + function getSqlLimit() + { + /** + * currently not in use + */ + + return ''; + } + + /** + * Returns html code for sorting field + * + * @param array Language array + * @return string the html sortcode + */ + + function getHtmlSortCode($lng, $break = false) + { + $sortcode = '' . ($break ? '
    ' : ' ') . ' '; + return $sortcode; + } + + /** + * Returns html code for sorting arrows + * + * @param string URL to use as base for links + * @param string If set, only this field will be returned + * @return mixed An array or a string (if field is set) of html code of arrows + */ + + function getHtmlArrowCode($baseurl, $field = '') + { + if($field != '' + && isset($this->fields[$field])) + { + $arrowcode = '
    '; + } + else + { + $arrowcode = array(); + foreach($this->fields as $fieldname => $fieldcaption) + { + $arrowcode[$fieldname] = ''; + } + } + + return $arrowcode; + } + + /** + * Returns html code for searching field + * + * @param array Language array + * @return string the html searchcode + */ + + function getHtmlSearchCode($lng) + { + $sortcode = $lng['panel']['search'] . ':   '; + return $sortcode; + } + + /** + * Returns html code for paging + * + * @param string URL to use as base for links + * @return string the html pagingcode + */ + + function getHtmlPagingCode($baseurl) + { + if($this->entriesperpage == 0) + { + return ''; + } + else + { + $pages = intval($this->entries / $this->entriesperpage); + } + + if($this->entries % $this->entriesperpage != 0) + { + $pages++; + } + + if($pages > 1) + { + $start = $this->pageno - 4; + + if($start < 1) + { + $start = 1; + } + + $stop = $this->pageno + 4; + + if($stop > $pages) + { + $stop = $pages; + } + + $pagingcode = '« < '; + for ($i = $start;$i <= $stop;$i++) + { + if($i != $this->pageno) + { + $pagingcode.= ' ' . $i . ' '; + } + else + { + $pagingcode.= ' ' . $i . ' '; + } + } + + $pagingcode.= ' > »'; + } + else + { + $pagingcode = ''; + } + + return $pagingcode; + } +} + +?> diff --git a/lib/classes/phpmailer/class.PHPMailer.php b/lib/classes/phpmailer/class.PHPMailer.php new file mode 100644 index 0000000000..be88ce5eef --- /dev/null +++ b/lib/classes/phpmailer/class.PHPMailer.php @@ -0,0 +1,2084 @@ +ContentType = 'text/html'; + } + else + { + $this->ContentType = 'text/plain'; + } + } + + /** + * Sets Mailer to send message using SMTP. + * @return void + */ + + function IsSMTP() + { + $this->Mailer = 'smtp'; + } + + /** + * Sets Mailer to send message using PHP mail() function. + * @return void + */ + + function IsMail() + { + $this->Mailer = 'mail'; + } + + /** + * Sets Mailer to send message using the $Sendmail program. + * @return void + */ + + function IsSendmail() + { + $this->Mailer = 'sendmail'; + } + + /** + * Sets Mailer to send message using the qmail MTA. + * @return void + */ + + function IsQmail() + { + $this->Sendmail = '/var/qmail/bin/sendmail'; + $this->Mailer = 'sendmail'; + } + + ///////////////////////////////////////////////// + // METHODS, RECIPIENTS + ///////////////////////////////////////////////// + + /** + * Adds a "To" address. + * @param string $address + * @param string $name + * @return void + */ + + function AddAddress($address, $name = '') + { + $cur = count($this->to); + $this->to[$cur][0] = trim($address); + $this->to[$cur][1] = $name; + } + + /** + * Adds a "Cc" address. Note: this function works + * with the SMTP mailer on win32, not with the "mail" + * mailer. + * @param string $address + * @param string $name + * @return void + */ + + function AddCC($address, $name = '') + { + $cur = count($this->cc); + $this->cc[$cur][0] = trim($address); + $this->cc[$cur][1] = $name; + } + + /** + * Adds a "Bcc" address. Note: this function works + * with the SMTP mailer on win32, not with the "mail" + * mailer. + * @param string $address + * @param string $name + * @return void + */ + + function AddBCC($address, $name = '') + { + $cur = count($this->bcc); + $this->bcc[$cur][0] = trim($address); + $this->bcc[$cur][1] = $name; + } + + /** + * Adds a "Reply-to" address. + * @param string $address + * @param string $name + * @return void + */ + + function AddReplyTo($address, $name = '') + { + $cur = count($this->ReplyTo); + $this->ReplyTo[$cur][0] = trim($address); + $this->ReplyTo[$cur][1] = $name; + } + + ///////////////////////////////////////////////// + // METHODS, MAIL SENDING + ///////////////////////////////////////////////// + + /** + * Creates message and assigns Mailer. If the message is + * not sent successfully then it returns false. Use the ErrorInfo + * variable to view description of the error. + * @return bool + */ + + function Send() + { + $header = ''; + $body = ''; + $result = true; + + if((count($this->to) + count($this->cc) + count($this->bcc)) < 1) + { + $this->SetError($this->Lang('provide_address')); + return false; + } + + /* Set whether the message is multipart/alternative */ + + if(!empty($this->AltBody)) + { + $this->ContentType = 'multipart/alternative'; + } + + $this->error_count = 0; + + // reset errors + + $this->SetMessageType(); + $header.= $this->CreateHeader(); + $body = $this->CreateBody(); + + if($body == '') + { + return false; + } + + /* Choose the mailer */ + + switch($this->Mailer) + { + case 'sendmail': + $result = $this->SendmailSend($header, $body); + break; + case 'smtp': + $result = $this->SmtpSend($header, $body); + break; + case 'mail': + $result = $this->MailSend($header, $body); + break; + default: + $result = $this->MailSend($header, $body); + break; + + //$this->SetError($this->Mailer . $this->Lang('mailer_not_supported')); + //$result = false; + //break; + } + + return $result; +} + +/** + * Sends mail using the $Sendmail program. + * @access private + * @return bool + */ + +function SendmailSend($header, $body) +{ + if($this->Sender != '') + { + $sendmail = sprintf("%s -oi -f %s -t", escapeshellcmd($this->Sendmail), escapeshellarg($this->Sender)); + } + else + { + $sendmail = sprintf("%s -oi -t", escapeshellcmd($this->Sendmail)); + } + + if(!@$mail = popen($sendmail, 'w')) + { + $this->SetError($this->Lang('execute') . $this->Sendmail); + return false; + } + + fputs($mail, $header); + fputs($mail, $body); + $result = pclose($mail) >> 8 & 0xFF; + + if($result != 0) + { + $this->SetError($this->Lang('execute') . $this->Sendmail); + return false; + } + + return true; +} + +/** + * Sends mail using the PHP mail() function. + * @access private + * @return bool + */ + +function MailSend($header, $body) +{ + $to = ''; + for ($i = 0;$i < count($this->to);$i++) + { + if($i != 0) + { + $to.= ', '; + } + + $to.= $this->AddrFormat($this->to[$i]); + } + + $toArr = split(',', $to); + + if($this->Sender != '' + && strlen(ini_get('safe_mode')) < 1) + { + $old_from = ini_get('sendmail_from'); + ini_set('sendmail_from', $this->Sender); + $params = sprintf("-oi -f %s", $this->Sender); + + if($this->SingleTo === true + && count($toArr) > 1) + { + foreach($toArr as $key => $val) + { + $rt = @mail($val, $this->EncodeHeader($this->SecureHeader($this->Subject)), $body, $header, $params); + } + } + else + { + $rt = @mail($to, $this->EncodeHeader($this->SecureHeader($this->Subject)), $body, $header, $params); + } + } + else + { + if($this->SingleTo === true + && count($toArr) > 1) + { + foreach($toArr as $key => $val) + { + $rt = @mail($val, $this->EncodeHeader($this->SecureHeader($this->Subject)), $body, $header, $params); + } + } + else + { + $rt = @mail($to, $this->EncodeHeader($this->SecureHeader($this->Subject)), $body, $header); + } + } + + if(isset($old_from)) + { + ini_set('sendmail_from', $old_from); + } + + if(!$rt) + { + $this->SetError($this->Lang('instantiate')); + return false; + } + + return true; +} + +/** + * Sends mail via SMTP using PhpSMTP (Author: + * Chris Ryan). Returns bool. Returns false if there is a + * bad MAIL FROM, RCPT, or DATA input. + * @access private + * @return bool + */ + +function SmtpSend($header, $body) +{ + include_once ($this->PluginDir . 'class.smtp.php'); + $error = ''; + $bad_rcpt = array(); + + if(!$this->SmtpConnect()) + { + return false; + } + + $smtp_from = ($this->Sender == '') ? $this->From : $this->Sender; + + if(!$this->smtp->Mail($smtp_from)) + { + $error = $this->Lang('from_failed') . $smtp_from; + $this->SetError($error); + $this->smtp->Reset(); + return false; + } + + /* Attempt to send attach all recipients */ + + for ($i = 0;$i < count($this->to);$i++) + { + if(!$this->smtp->Recipient($this->to[$i][0])) + { + $bad_rcpt[] = $this->to[$i][0]; + } + } + + for ($i = 0;$i < count($this->cc);$i++) + { + if(!$this->smtp->Recipient($this->cc[$i][0])) + { + $bad_rcpt[] = $this->cc[$i][0]; + } + } + + for ($i = 0;$i < count($this->bcc);$i++) + { + if(!$this->smtp->Recipient($this->bcc[$i][0])) + { + $bad_rcpt[] = $this->bcc[$i][0]; + } + } + + if(count($bad_rcpt) > 0) + { + // Create error message + + for ($i = 0;$i < count($bad_rcpt);$i++) + { + if($i != 0) + { + $error.= ', '; + } + + $error.= $bad_rcpt[$i]; + } + + $error = $this->Lang('recipients_failed') . $error; + $this->SetError($error); + $this->smtp->Reset(); + return false; + } + + if(!$this->smtp->Data($header . $body)) + { + $this->SetError($this->Lang('data_not_accepted')); + $this->smtp->Reset(); + return false; + } + + if($this->SMTPKeepAlive == true) + { + $this->smtp->Reset(); + } + else + { + $this->SmtpClose(); + } + + return true; +} + +/** + * Initiates a connection to an SMTP server. Returns false if the + * operation failed. + * @access private + * @return bool + */ + +function SmtpConnect() +{ + if($this->smtp == NULL) + { + $this->smtp = new SMTP(); + } + + $this->smtp->do_debug = $this->SMTPDebug; + $hosts = explode(';', $this->Host); + $index = 0; + $connection = ($this->smtp->Connected()); + + /* Retry while there is no connection */ + + while($index < count($hosts) + && $connection == false) + { + $hostinfo = array(); + + if(eregi('^(.+):([0-9]+)$', $hosts[$index], $hostinfo)) + { + $host = $hostinfo[1]; + $port = $hostinfo[2]; + } + else + { + $host = $hosts[$index]; + $port = $this->Port; + } + + if($this->smtp->Connect(((!empty($this->SMTPSecure)) ? $this->SMTPSecure . '://' : '') . $host, $port, $this->Timeout)) + { + if($this->Helo != '') + { + $this->smtp->Hello($this->Helo); + } + else + { + $this->smtp->Hello($this->ServerHostname()); + } + + $connection = true; + + if($this->SMTPAuth) + { + if(!$this->smtp->Authenticate($this->Username, $this->Password)) + { + $this->SetError($this->Lang('authenticate')); + $this->smtp->Reset(); + $connection = false; + } + } + } + + $index++; + } + + if(!$connection) + { + $this->SetError($this->Lang('connect_host')); + } + + return $connection; +} + +/** + * Closes the active SMTP session if one exists. + * @return void + */ + +function SmtpClose() +{ + if($this->smtp != NULL) + { + if($this->smtp->Connected()) + { + $this->smtp->Quit(); + $this->smtp->Close(); + } + } +} + +/** + * Sets the language for all class error messages. Returns false + * if it cannot load the language file. The default language type + * is English. + * @param string $lang_type Type of language (e.g. Portuguese: "br") + * @param string $lang_path Path to the language file directory + * @access public + * @return bool + */ + +function SetLanguage($lang_type, $lang_path = 'lng/') +{ + if(file_exists($lang_path . 'phpmailer.lang-' . $lang_type . '.php')) + { + include ($lang_path . 'phpmailer.lang-' . $lang_type . '.php'); + } + elseif(file_exists($lang_path . 'phpmailer.lang-en.php')) + { + include ($lang_path . 'phpmailer.lang-en.php'); + } + else + { + $this->SetError('Could not load language file'); + return false; + } + + $this->language = $PHPMAILER_LANG; + return true; +} + +///////////////////////////////////////////////// +// METHODS, MESSAGE CREATION +///////////////////////////////////////////////// + +/** + * Creates recipient headers. + * @access private + * @return string + */ + +function AddrAppend($type, $addr) +{ + $addr_str = $type . ': '; + $addr_str.= $this->AddrFormat($addr[0]); + + if(count($addr) > 1) + { + for ($i = 1;$i < count($addr);$i++) + { + $addr_str.= ', ' . $this->AddrFormat($addr[$i]); + } + } + + $addr_str.= $this->LE; + return $addr_str; +} + +/** + * Formats an address correctly. + * @access private + * @return string + */ + +function AddrFormat($addr) +{ + if(empty($addr[1])) + { + $formatted = $this->SecureHeader($addr[0]); + } + else + { + $formatted = $this->EncodeHeader($this->SecureHeader($addr[1]), 'phrase') . " <" . $this->SecureHeader($addr[0]) . ">"; + } + + return $formatted; +} + +/** + * Wraps message for use with mailers that do not + * automatically perform wrapping and for quoted-printable. + * Original written by philippe. + * @access private + * @return string + */ + +function WrapText($message, $length, $qp_mode = false) +{ + $soft_break = ($qp_mode) ? sprintf(" =%s", $this->LE) : $this->LE; + $message = $this->FixEOL($message); + + if(substr($message, -1) == $this->LE) + { + $message = substr($message, 0, -1); + } + + $line = explode($this->LE, $message); + $message = ''; + for ($i = 0;$i < count($line);$i++) + { + $line_part = explode(' ', $line[$i]); + $buf = ''; + for ($e = 0;$e < count($line_part);$e++) + { + $word = $line_part[$e]; + + if($qp_mode + and (strlen($word) > $length)) + { + $space_left = $length - strlen($buf) - 1; + + if($e != 0) + { + if($space_left > 20) + { + $len = $space_left; + + if(substr($word, $len - 1, 1) == '=') + { + $len--; + } + elseif(substr($word, $len - 2, 1) == '=') + { + $len-= 2; + } + + $part = substr($word, 0, $len); + $word = substr($word, $len); + $buf.= ' ' . $part; + $message.= $buf . sprintf("=%s", $this->LE); + } + else + { + $message.= $buf . $soft_break; + } + + $buf = ''; + } + + while(strlen($word) > 0) + { + $len = $length; + + if(substr($word, $len - 1, 1) == '=') + { + $len--; + } + elseif(substr($word, $len - 2, 1) == '=') + { + $len-= 2; + } + + $part = substr($word, 0, $len); + $word = substr($word, $len); + + if(strlen($word) > 0) + { + $message.= $part . sprintf("=%s", $this->LE); + } + else + { + $buf = $part; + } + } + } + else + { + $buf_o = $buf; + $buf.= ($e == 0) ? $word : (' ' . $word); + + if(strlen($buf) > $length + and $buf_o != '') + { + $message.= $buf_o . $soft_break; + $buf = $word; + } + } + } + + $message.= $buf . $this->LE; + } + + return $message; +} + +/** + * Set the body wrapping. + * @access private + * @return void + */ + +function SetWordWrap() +{ + if($this->WordWrap < 1) + { + return; + } + + switch($this->message_type) + { + case 'alt': + + /* fall through */ + case 'alt_attachments': + $this->AltBody = $this->WrapText($this->AltBody, $this->WordWrap); + break; + default: + $this->Body = $this->WrapText($this->Body, $this->WordWrap); + break; + } +} + +/** + * Assembles message header. + * @access private + * @return string + */ + +function CreateHeader() +{ + $result = ''; + + /* Set the boundaries */ + + $uniq_id = md5(uniqid(time())); + $this->boundary[1] = 'b1_' . $uniq_id; + $this->boundary[2] = 'b2_' . $uniq_id; + $result.= $this->HeaderLine('Date', $this->RFCDate()); + + if($this->Sender == '') + { + $result.= $this->HeaderLine('Return-Path', trim($this->From)); + } + else + { + $result.= $this->HeaderLine('Return-Path', trim($this->Sender)); + } + + /* To be created automatically by mail() */ + + if($this->Mailer != 'mail') + { + if(count($this->to) > 0) + { + $result.= $this->AddrAppend('To', $this->to); + } + elseif(count($this->cc) == 0) + { + $result.= $this->HeaderLine('To', 'undisclosed-recipients:;'); + } + + if(count($this->cc) > 0) + { + $result.= $this->AddrAppend('Cc', $this->cc); + } + } + + $from = array(); + $from[0][0] = trim($this->From); + $from[0][1] = $this->FromName; + $result.= $this->AddrAppend('From', $from); + + /* sendmail and mail() extract Cc from the header before sending */ + + if((($this->Mailer == 'sendmail') || ($this->Mailer == 'mail')) + && (count($this->cc) > 0)) + { + $result.= $this->AddrAppend('Cc', $this->cc); + } + + /* sendmail and mail() extract Bcc from the header before sending */ + + if((($this->Mailer == 'sendmail') || ($this->Mailer == 'mail')) + && (count($this->bcc) > 0)) + { + $result.= $this->AddrAppend('Bcc', $this->bcc); + } + + if(count($this->ReplyTo) > 0) + { + $result.= $this->AddrAppend('Reply-to', $this->ReplyTo); + } + + /* mail() sets the subject itself */ + + if($this->Mailer != 'mail') + { + $result.= $this->HeaderLine('Subject', $this->EncodeHeader($this->SecureHeader($this->Subject))); + } + + $result.= sprintf("Message-ID: <%s@%s>%s", $uniq_id, $this->ServerHostname(), $this->LE); + $result.= $this->HeaderLine('X-Priority', $this->Priority); + $result.= $this->HeaderLine('X-Mailer', 'PHPMailer (phpmailer.sourceforge.net) [version ' . $this->Version . ']'); + + if($this->ConfirmReadingTo != '') + { + $result.= $this->HeaderLine('Disposition-Notification-To', '<' . trim($this->ConfirmReadingTo) . '>'); + } + + // Add custom headers + + for ($index = 0;$index < count($this->CustomHeader);$index++) + { + $result.= $this->HeaderLine(trim($this->CustomHeader[$index][0]), $this->EncodeHeader(trim($this->CustomHeader[$index][1]))); + } + + $result.= $this->HeaderLine('MIME-Version', '1.0'); + + switch($this->message_type) + { + case 'plain': + $result.= $this->HeaderLine('Content-Transfer-Encoding', $this->Encoding); + $result.= sprintf("Content-Type: %s; charset=\"%s\"", $this->ContentType, $this->CharSet); + break; + case 'attachments': + + /* fall through */ + case 'alt_attachments': + + if($this->InlineImageExists()) + { + $result.= sprintf("Content-Type: %s;%s\ttype=\"text/html\";%s\tboundary=\"%s\"%s", 'multipart/related', $this->LE, $this->LE, $this->boundary[1], $this->LE); + } + else + { + $result.= $this->HeaderLine('Content-Type', 'multipart/mixed;'); + $result.= $this->TextLine("\tboundary=\"" . $this->boundary[1] . '"'); + } + + break; + case 'alt': + $result.= $this->HeaderLine('Content-Type', 'multipart/alternative;'); + $result.= $this->TextLine("\tboundary=\"" . $this->boundary[1] . '"'); + break; + } + + if($this->Mailer != 'mail') + { + $result.= $this->LE . $this->LE; + } + + return $result; +} + +/** + * Assembles the message body. Returns an empty string on failure. + * @access private + * @return string + */ + +function CreateBody() +{ + $result = ''; + $this->SetWordWrap(); + + switch($this->message_type) + { + case 'alt': + $result.= $this->GetBoundary($this->boundary[1], '', 'text/plain', ''); + $result.= $this->EncodeString($this->AltBody, $this->Encoding); + $result.= $this->LE . $this->LE; + $result.= $this->GetBoundary($this->boundary[1], '', 'text/html', ''); + $result.= $this->EncodeString($this->Body, $this->Encoding); + $result.= $this->LE . $this->LE; + $result.= $this->EndBoundary($this->boundary[1]); + break; + case 'plain': + $result.= $this->EncodeString($this->Body, $this->Encoding); + break; + case 'attachments': + $result.= $this->GetBoundary($this->boundary[1], '', '', ''); + $result.= $this->EncodeString($this->Body, $this->Encoding); + $result.= $this->LE; + $result.= $this->AttachAll(); + break; + case 'alt_attachments': + $result.= sprintf("--%s%s", $this->boundary[1], $this->LE); + $result.= sprintf("Content-Type: %s;%s" . "\tboundary=\"%s\"%s", 'multipart/alternative', $this->LE, $this->boundary[2], $this->LE . $this->LE); + $result.= $this->GetBoundary($this->boundary[2], '', 'text/plain', '') . $this->LE; + + // Create text body + + $result.= $this->EncodeString($this->AltBody, $this->Encoding); + $result.= $this->LE . $this->LE; + $result.= $this->GetBoundary($this->boundary[2], '', 'text/html', '') . $this->LE; + + // Create the HTML body + + $result.= $this->EncodeString($this->Body, $this->Encoding); + $result.= $this->LE . $this->LE; + $result.= $this->EndBoundary($this->boundary[2]); + $result.= $this->AttachAll(); + break; + } + + if($this->IsError()) + { + $result = ''; + } + + return $result; +} + +/** + * Returns the start of a message boundary. + * @access private + */ + +function GetBoundary($boundary, $charSet, $contentType, $encoding) +{ + $result = ''; + + if($charSet == '') + { + $charSet = $this->CharSet; + } + + if($contentType == '') + { + $contentType = $this->ContentType; + } + + if($encoding == '') + { + $encoding = $this->Encoding; + } + + $result.= $this->TextLine('--' . $boundary); + $result.= sprintf("Content-Type: %s; charset = \"%s\"", $contentType, $charSet); + $result.= $this->LE; + $result.= $this->HeaderLine('Content-Transfer-Encoding', $encoding); + $result.= $this->LE; + return $result; +} + +/** + * Returns the end of a message boundary. + * @access private + */ + +function EndBoundary($boundary) +{ + return $this->LE . '--' . $boundary . '--' . $this->LE; +} + +/** + * Sets the message type. + * @access private + * @return void + */ + +function SetMessageType() +{ + if(count($this->attachment) < 1 + && strlen($this->AltBody) < 1) + { + $this->message_type = 'plain'; + } + else + { + if(count($this->attachment) > 0) + { + $this->message_type = 'attachments'; + } + + if(strlen($this->AltBody) > 0 + && count($this->attachment) < 1) + { + $this->message_type = 'alt'; + } + + if(strlen($this->AltBody) > 0 + && count($this->attachment) > 0) + { + $this->message_type = 'alt_attachments'; + } + } +} + +/* Returns a formatted header line. + * @access private + * @return string + */function HeaderLine($name, $value) +{ + return $name . ': ' . $value . $this->LE; +} + +/** + * Returns a formatted mail line. + * @access private + * @return string + */ + +function TextLine($value) +{ + return $value . $this->LE; +} + +///////////////////////////////////////////////// +// CLASS METHODS, ATTACHMENTS +///////////////////////////////////////////////// + +/** + * Adds an attachment from a path on the filesystem. + * Returns false if the file could not be found + * or accessed. + * @param string $path Path to the attachment. + * @param string $name Overrides the attachment name. + * @param string $encoding File encoding (see $Encoding). + * @param string $type File extension (MIME) type. + * @return bool + */ + +function AddAttachment($path, $name = '', $encoding = 'base64', $type = 'application/octet-stream') +{ + if(!@is_file($path)) + { + $this->SetError($this->Lang('file_access') . $path); + return false; + } + + $filename = basename($path); + + if($name == '') + { + $name = $filename; + } + + $cur = count($this->attachment); + $this->attachment[$cur][0] = $path; + $this->attachment[$cur][1] = $filename; + $this->attachment[$cur][2] = $name; + $this->attachment[$cur][3] = $encoding; + $this->attachment[$cur][4] = $type; + $this->attachment[$cur][5] = false; + + // isStringAttachment + + $this->attachment[$cur][6] = 'attachment'; + $this->attachment[$cur][7] = 0; + return true; +} + +/** + * Attaches all fs, string, and binary attachments to the message. + * Returns an empty string on failure. + * @access private + * @return string + */ + +function AttachAll() +{ + /* Return text of body */ + + $mime = array(); + + /* Add all attachments */ + + for ($i = 0;$i < count($this->attachment);$i++) + { + /* Check for string attachment */ + + $bString = $this->attachment[$i][5]; + + if($bString) + { + $string = $this->attachment[$i][0]; + } + else + { + $path = $this->attachment[$i][0]; + } + + $filename = $this->attachment[$i][1]; + $name = $this->attachment[$i][2]; + $encoding = $this->attachment[$i][3]; + $type = $this->attachment[$i][4]; + $disposition = $this->attachment[$i][6]; + $cid = $this->attachment[$i][7]; + $mime[] = sprintf("--%s%s", $this->boundary[1], $this->LE); + $mime[] = sprintf("Content-Type: %s; name=\"%s\"%s", $type, $name, $this->LE); + $mime[] = sprintf("Content-Transfer-Encoding: %s%s", $encoding, $this->LE); + + if($disposition == 'inline') + { + $mime[] = sprintf("Content-ID: <%s>%s", $cid, $this->LE); + } + + $mime[] = sprintf("Content-Disposition: %s; filename=\"%s\"%s", $disposition, $name, $this->LE . $this->LE); + + /* Encode as string attachment */ + + if($bString) + { + $mime[] = $this->EncodeString($string, $encoding); + + if($this->IsError()) + { + return ''; + } + + $mime[] = $this->LE . $this->LE; + } + else + { + $mime[] = $this->EncodeFile($path, $encoding); + + if($this->IsError()) + { + return ''; + } + + $mime[] = $this->LE . $this->LE; + } + } + + $mime[] = sprintf("--%s--%s", $this->boundary[1], $this->LE); + return join('', $mime); +} + +/** + * Encodes attachment in requested format. Returns an + * empty string on failure. + * @access private + * @return string + */ + +function EncodeFile($path, $encoding = 'base64') +{ + if(!@$fd = fopen($path, 'rb')) + { + $this->SetError($this->Lang('file_open') . $path); + return ''; + } + + $magic_quotes = get_magic_quotes_runtime(); + set_magic_quotes_runtime(0); + $file_buffer = fread($fd, filesize($path)); + $file_buffer = $this->EncodeString($file_buffer, $encoding); + fclose($fd); + set_magic_quotes_runtime($magic_quotes); + return $file_buffer; +} + +/** + * Encodes string to requested format. Returns an + * empty string on failure. + * @access private + * @return string + */ + +function EncodeString($str, $encoding = 'base64') +{ + $encoded = ''; + + switch(strtolower($encoding)) + { + case 'base64': + + /* chunk_split is found in PHP >= 3.0.6 */ + + $encoded = chunk_split(base64_encode($str), 76, $this->LE); + break; + case '7bit': + case '8bit': + $encoded = $this->FixEOL($str); + + if(substr($encoded, -(strlen($this->LE))) != $this->LE)$encoded.= $this->LE; + break; + case 'binary': + $encoded = $str; + break; + case 'quoted-printable': + $encoded = $this->EncodeQP($str); + break; + default: + $this->SetError($this->Lang('encoding') . $encoding); + break; + } + + return $encoded; +} + +/** + * Encode a header string to best of Q, B, quoted or none. + * @access private + * @return string + */ + +function EncodeHeader($str, $position = 'text') +{ + $x = 0; + + switch(strtolower($position)) + { + case 'phrase': + + if(!preg_match('/[\200-\377]/', $str)) + { + /* Can't use addslashes as we don't know what value has magic_quotes_sybase. */ + + $encoded = addcslashes($str, "\0..\37\177\\\""); + + if(($str == $encoded) + && !preg_match('/[^A-Za-z0-9!#$%&\'*+\/=?^_`{|}~ -]/', $str)) + { + return ($encoded); + } + else + { + return ("\"$encoded\""); + } + } + + $x = preg_match_all('/[^\040\041\043-\133\135-\176]/', $str, $matches); + break; + case 'comment': + $x = preg_match_all('/[()"]/', $str, $matches); + + /* Fall-through */ + case 'text': + default: + $x+= preg_match_all('/[\000-\010\013\014\016-\037\177-\377]/', $str, $matches); + break; + } + + if($x == 0) + { + return ($str); + } + + $maxlen = 75 - 7 - strlen($this->CharSet); + + /* Try to select the encoding which should produce the shortest output */ + + if(strlen($str) / 3 < $x) + { + $encoding = 'B'; + $encoded = base64_encode($str); + $maxlen-= $maxlen % 4; + $encoded = trim(chunk_split($encoded, $maxlen, "\n")); + } + else + { + $encoding = 'Q'; + $encoded = $this->EncodeQ($str, $position); + $encoded = $this->WrapText($encoded, $maxlen, true); + $encoded = str_replace('=' . $this->LE, "\n", trim($encoded)); + } + + $encoded = preg_replace('/^(.*)$/m', " =?" . $this->CharSet . "?$encoding?\\1?=", $encoded); + $encoded = trim(str_replace("\n", $this->LE, $encoded)); + return $encoded; +} + +/** + * Encode string to quoted-printable. + * @access public + * @param string $string the text to encode + * @param integer $line_max Number of chars allowed on a line before wrapping + * @return string + */ + +public function EncodeQP($string, $line_max = 74) +{ + $fp = fopen('php://temp/', 'r+'); + $string = preg_replace('/\r\n?/', $this->LE, $string); + + //Normalise line breaks + + $params = array( + 'line-length' => $line_max, + 'line-break-chars' => $this->LE + ); + stream_filter_append($fp, 'convert.quoted-printable-encode', STREAM_FILTER_READ, $params); + fputs($fp, $string); + rewind($fp); + $out = stream_get_contents($fp); + $out = preg_replace('/^\./m', '=2E', $out); + + //Encode . if it is first char on a line + + fclose($fp); + return $out; +} + +/** + * Encode string to q encoding. + * @access private + * @return string + */ + +function EncodeQ($str, $position = 'text') +{ + /* There should not be any EOL in the string */ + + $encoded = preg_replace("[\r\n]", '', $str); + + switch(strtolower($position)) + { + case 'phrase': + $encoded = preg_replace("/([^A-Za-z0-9!*+\/ -])/e", "'='.sprintf('%02X', ord('\\1'))", $encoded); + break; + case 'comment': + $encoded = preg_replace("/([\(\)\"])/e", "'='.sprintf('%02X', ord('\\1'))", $encoded); + case 'text': + default: + + /* Replace every high ascii, control =, ? and _ characters */ + + $encoded = preg_replace('/([\000-\011\013\014\016-\037\075\077\137\177-\377])/e', "'='.sprintf('%02X', ord('\\1'))", $encoded); + break; + } + + /* Replace every spaces to _ (more readable than =20) */ + + $encoded = str_replace(' ', '_', $encoded); + return $encoded; +} + +/** + * Adds a string or binary attachment (non-filesystem) to the list. + * This method can be used to attach ascii or binary data, + * such as a BLOB record from a database. + * @param string $string String attachment data. + * @param string $filename Name of the attachment. + * @param string $encoding File encoding (see $Encoding). + * @param string $type File extension (MIME) type. + * @return void + */ + +function AddStringAttachment($string, $filename, $encoding = 'base64', $type = 'application/octet-stream') +{ + /* Append to $attachment array */ + + $cur = count($this->attachment); + $this->attachment[$cur][0] = $string; + $this->attachment[$cur][1] = $filename; + $this->attachment[$cur][2] = $filename; + $this->attachment[$cur][3] = $encoding; + $this->attachment[$cur][4] = $type; + $this->attachment[$cur][5] = true; + + // isString + + $this->attachment[$cur][6] = 'attachment'; + $this->attachment[$cur][7] = 0; +} + +/** + * Adds an embedded attachment. This can include images, sounds, and + * just about any other document. Make sure to set the $type to an + * image type. For JPEG images use "image/jpeg" and for GIF images + * use "image/gif". + * @param string $path Path to the attachment. + * @param string $cid Content ID of the attachment. Use this to identify + * the Id for accessing the image in an HTML form. + * @param string $name Overrides the attachment name. + * @param string $encoding File encoding (see $Encoding). + * @param string $type File extension (MIME) type. + * @return bool + */ + +function AddEmbeddedImage($path, $cid, $name = '', $encoding = 'base64', $type = 'application/octet-stream') +{ + if(!@is_file($path)) + { + $this->SetError($this->Lang('file_access') . $path); + return false; + } + + $filename = basename($path); + + if($name == '') + { + $name = $filename; + } + + /* Append to $attachment array */ + + $cur = count($this->attachment); + $this->attachment[$cur][0] = $path; + $this->attachment[$cur][1] = $filename; + $this->attachment[$cur][2] = $name; + $this->attachment[$cur][3] = $encoding; + $this->attachment[$cur][4] = $type; + $this->attachment[$cur][5] = false; + $this->attachment[$cur][6] = 'inline'; + $this->attachment[$cur][7] = $cid; + return true; +} + +/** + * Returns true if an inline attachment is present. + * @access private + * @return bool + */ + +function InlineImageExists() +{ + $result = false; + for ($i = 0;$i < count($this->attachment);$i++) + { + if($this->attachment[$i][6] == 'inline') + { + $result = true; + break; + } + } + + return $result; +} + +///////////////////////////////////////////////// +// CLASS METHODS, MESSAGE RESET +///////////////////////////////////////////////// + +/** + * Clears all recipients assigned in the TO array. Returns void. + * @return void + */ + +function ClearAddresses() +{ + $this->to = array(); +} + +/** + * Clears all recipients assigned in the CC array. Returns void. + * @return void + */ + +function ClearCCs() +{ + $this->cc = array(); +} + +/** + * Clears all recipients assigned in the BCC array. Returns void. + * @return void + */ + +function ClearBCCs() +{ + $this->bcc = array(); +} + +/** + * Clears all recipients assigned in the ReplyTo array. Returns void. + * @return void + */ + +function ClearReplyTos() +{ + $this->ReplyTo = array(); +} + +/** + * Clears all recipients assigned in the TO, CC and BCC + * array. Returns void. + * @return void + */ + +function ClearAllRecipients() +{ + $this->to = array(); + $this->cc = array(); + $this->bcc = array(); +} + +/** + * Clears all previously set filesystem, string, and binary + * attachments. Returns void. + * @return void + */ + +function ClearAttachments() +{ + $this->attachment = array(); +} + +/** + * Clears all custom headers. Returns void. + * @return void + */ + +function ClearCustomHeaders() +{ + $this->CustomHeader = array(); +} + +///////////////////////////////////////////////// +// CLASS METHODS, MISCELLANEOUS +///////////////////////////////////////////////// + +/** + * Adds the error message to the error container. + * Returns void. + * @access private + * @return void + */ + +private function SetError($msg) +{ + $this->error_count++; + $this->ErrorInfo = $msg; +} + +/** + * Returns the proper RFC 822 formatted date. + * @access private + * @return string + */ + +private static function RFCDate() +{ + $tz = date('Z'); + $tzs = ($tz < 0) ? '-' : '+'; + $tz = abs($tz); + $tz = (int)($tz / 3600) * 100 + ($tz % 3600) / 60; + $result = sprintf("%s %s%04d", date('D, j M Y H:i:s'), $tzs, $tz); + return $result; +} + +/** + * Returns the server hostname or 'localhost.localdomain' if unknown. + * @access private + * @return string + */ + +private function ServerHostname() +{ + if(!empty($this->Hostname)) + { + $result = $this->Hostname; + } + elseif(isset($_SERVER['SERVER_NAME'])) + { + $result = $_SERVER['SERVER_NAME']; + } + else + { + $result = "localhost.localdomain"; + } + + return $result; +} + +/** + * Returns a message in the appropriate language. + * @access private + * @return string + */ + +private function Lang($key) +{ + if(count($this->language) < 1) + { + $this->SetLanguage('en'); + + // set the default language + } + + if(isset($this->language[$key])) + { + return $this->language[$key]; + } + else + { + return 'Language string failed to load: ' . $key; + } +} + +/** + * Returns true if an error occurred. + * @return bool + */ + +function IsError() +{ + return ($this->error_count > 0); +} + +/** + * Changes every end of line from CR or LF to CRLF. + * @access private + * @return string + */ + +private function FixEOL($str) +{ + $str = str_replace("\r\n", "\n", $str); + $str = str_replace("\r", "\n", $str); + $str = str_replace("\n", $this->LE, $str); + return $str; +} + +/** + * Adds a custom header. + * @return void + */ + +function AddCustomHeader($custom_header) +{ + $this->CustomHeader[] = explode(':', $custom_header, 2); +} + +/** + * Evaluates the message and returns modifications for inline images and backgrounds + * @access public + * @return $message + */ + +function MsgHTML($message) +{ + preg_match_all("/(src|background)=\"(.*)\"/Ui", $message, $images); + + if(isset($images[2])) + { + foreach($images[2] as $i => $url) + { + $filename = basename($url); + $directory = dirname($url); + $cid = 'cid:' . md5($filename); + $fileParts = split("\.", $filename); + $ext = $fileParts[1]; + $mimeType = $this->_mime_types($ext); + $message = preg_replace("/" . $images[1][$i] . "=\"" . preg_quote($url, '/') . "\"/Ui", $images[1][$i] . "=\"" . $cid . "\"", $message); + $this->AddEmbeddedImage($url, md5($filename), $filename, 'base64', $mimeType); + } + } + + $this->IsHTML(true); + $this->Body = $message; + $textMsg = trim(strip_tags($message)); + + if(!empty($textMsg) + && empty($this->AltBody)) + { + $this->AltBody = $textMsg; + } + + if(empty($this->AltBody)) + { + $this->AltBody = 'To view this email message, open the email in with HTML compatibility!' . "\n\n"; + } +} + +/** + * Gets the mime type of the embedded or inline image + * @access private + * @return mime type of ext + */ + +function _mime_types($ext = '') +{ + $mimes = array( + 'hqx' => 'application/mac-binhex40', + 'cpt' => 'application/mac-compactpro', + 'doc' => 'application/msword', + 'bin' => 'application/macbinary', + 'dms' => 'application/octet-stream', + 'lha' => 'application/octet-stream', + 'lzh' => 'application/octet-stream', + 'exe' => 'application/octet-stream', + 'class' => 'application/octet-stream', + 'psd' => 'application/octet-stream', + 'so' => 'application/octet-stream', + 'sea' => 'application/octet-stream', + 'dll' => 'application/octet-stream', + 'oda' => 'application/oda', + 'pdf' => 'application/pdf', + 'ai' => 'application/postscript', + 'eps' => 'application/postscript', + 'ps' => 'application/postscript', + 'smi' => 'application/smil', + 'smil' => 'application/smil', + 'mif' => 'application/vnd.mif', + 'xls' => 'application/vnd.ms-excel', + 'ppt' => 'application/vnd.ms-powerpoint', + 'wbxml' => 'application/vnd.wap.wbxml', + 'wmlc' => 'application/vnd.wap.wmlc', + 'dcr' => 'application/x-director', + 'dir' => 'application/x-director', + 'dxr' => 'application/x-director', + 'dvi' => 'application/x-dvi', + 'gtar' => 'application/x-gtar', + 'php' => 'application/x-httpd-php', + 'php4' => 'application/x-httpd-php', + 'php3' => 'application/x-httpd-php', + 'phtml' => 'application/x-httpd-php', + 'phps' => 'application/x-httpd-php-source', + 'js' => 'application/x-javascript', + 'swf' => 'application/x-shockwave-flash', + 'sit' => 'application/x-stuffit', + 'tar' => 'application/x-tar', + 'tgz' => 'application/x-tar', + 'xhtml' => 'application/xhtml+xml', + 'xht' => 'application/xhtml+xml', + 'zip' => 'application/zip', + 'mid' => 'audio/midi', + 'midi' => 'audio/midi', + 'mpga' => 'audio/mpeg', + 'mp2' => 'audio/mpeg', + 'mp3' => 'audio/mpeg', + 'aif' => 'audio/x-aiff', + 'aiff' => 'audio/x-aiff', + 'aifc' => 'audio/x-aiff', + 'ram' => 'audio/x-pn-realaudio', + 'rm' => 'audio/x-pn-realaudio', + 'rpm' => 'audio/x-pn-realaudio-plugin', + 'ra' => 'audio/x-realaudio', + 'rv' => 'video/vnd.rn-realvideo', + 'wav' => 'audio/x-wav', + 'bmp' => 'image/bmp', + 'gif' => 'image/gif', + 'jpeg' => 'image/jpeg', + 'jpg' => 'image/jpeg', + 'jpe' => 'image/jpeg', + 'png' => 'image/png', + 'tiff' => 'image/tiff', + 'tif' => 'image/tiff', + 'css' => 'text/css', + 'html' => 'text/html', + 'htm' => 'text/html', + 'shtml' => 'text/html', + 'txt' => 'text/plain', + 'text' => 'text/plain', + 'log' => 'text/plain', + 'rtx' => 'text/richtext', + 'rtf' => 'text/rtf', + 'xml' => 'text/xml', + 'xsl' => 'text/xml', + 'mpeg' => 'video/mpeg', + 'mpg' => 'video/mpeg', + 'mpe' => 'video/mpeg', + 'qt' => 'video/quicktime', + 'mov' => 'video/quicktime', + 'avi' => 'video/x-msvideo', + 'movie' => 'video/x-sgi-movie', + 'doc' => 'application/msword', + 'word' => 'application/msword', + 'xl' => 'application/excel', + 'eml' => 'message/rfc822' + ); + return (!isset($mimes[strtolower($ext)])) ? 'application/x-unknown-content-type' : $mimes[strtolower($ext)]; +} + +/** + * Set (or reset) Class Objects (variables) + * + * Usage Example: + * $page->set('X-Priority', '3'); + * + * @access public + * @param string $name Parameter Name + * @param mixed $value Parameter Value + * NOTE: will not work with arrays, there are no arrays to set/reset + */ + +function set($name, $value = '') +{ + if(isset($this->$name)) + { + $this->$name = $value; + } + else + { + $this->SetError('Cannot set or reset variable ' . $name); + return false; + } +} + +/** + * Read a file from a supplied filename and return it. + * + * @access public + * @param string $filename Parameter File Name + */ + +function getFile($filename) +{ + $return = ''; + + if($fp = fopen($filename, 'rb')) + { + while(!feof($fp)) + { + $return.= fread($fp, 1024); + } + + fclose($fp); + return $return; + } + else + { + return false; + } +} + +/** + * Strips newlines to prevent header injection. + * @access private + * @param string $str String + * @return string + */ + +function SecureHeader($str) +{ + $str = trim($str); + $str = str_replace("\r", "", $str); + $str = str_replace("\n", "", $str); + return $str; +} +} + +?> diff --git a/lib/classes/phpmailer/class.SMTP.php b/lib/classes/phpmailer/class.SMTP.php new file mode 100644 index 0000000000..27831cf3b3 --- /dev/null +++ b/lib/classes/phpmailer/class.SMTP.php @@ -0,0 +1,1348 @@ +smtp_conn = 0; + $this->error = null; + $this->helo_rply = null; + $this->do_debug = 0; + } + + /************************************************************* + * CONNECTION FUNCTIONS * + ***********************************************************/ + + /** + * Connect to the server specified on the port specified. + * If the port is not specified use the default SMTP_PORT. + * If tval is specified then a connection will try and be + * established with the server for that number of seconds. + * If tval is not specified the default is 30 seconds to + * try on the connection. + * + * SMTP CODE SUCCESS: 220 + * SMTP CODE FAILURE: 421 + * @access public + * @return bool + */ + + function Connect($host, $port = 0, $tval = 30) + { + /* set the error val to null so there is no confusion */ + + $this->error = null; + + /* make sure we are __not__ connected */ + + if($this->connected()) + { + /* ok we are connected! what should we do? + * for now we will just give an error saying we + * are already connected + */ + + $this->error = array( + "error" => "Already connected to a server" + ); + return false; + } + + if(empty($port)) + { + $port = $this->SMTP_PORT; + } + + /* connect to the smtp server */ + + $this->smtp_conn = fsockopen($host, + + // the host of the server + + $port, + + // the port to use + + $errno, + + // error number if any + + $errstr, + + // error message if any + + $tval); + + // give up after ? secs + /* verify we connected properly */ + + if(empty($this->smtp_conn)) + { + $this->error = array( + "error" => "Failed to connect to server", + "errno" => $errno, + "errstr" => $errstr + ); + + if($this->do_debug >= 1) + { + echo "SMTP -> ERROR: " . $this->error["error"] . ": $errstr ($errno)" . $this->CRLF; + } + + return false; + } + + /* sometimes the SMTP server takes a little longer to respond + * so we will give it a longer timeout for the first read + * - Windows still does not have support for this timeout function + */ + + if(substr(PHP_OS, 0, 3) != "WIN")socket_set_timeout($this->smtp_conn, $tval, 0); + + /* get any announcement stuff */ + + $announce = $this->get_lines(); + + /* set the timeout of any socket functions at 1/10 of a second */ + //if(function_exists("socket_set_timeout")) + // socket_set_timeout($this->smtp_conn, 0, 100000); + + if($this->do_debug >= 2) + { + echo "SMTP -> FROM SERVER:" . $this->CRLF . $announce; + } + + return true; + } + + /** + * Performs SMTP authentication. Must be run after running the + * Hello() method. Returns true if successfully authenticated. + * @access public + * @return bool + */ + + function Authenticate($username, $password) + { + // Start authentication + + fputs($this->smtp_conn, "AUTH LOGIN" . $this->CRLF); + $rply = $this->get_lines(); + $code = substr($rply, 0, 3); + + if($code != 334) + { + $this->error = array( + "error" => "AUTH not accepted from server", + "smtp_code" => $code, + "smtp_msg" => substr($rply, 4) + ); + + if($this->do_debug >= 1) + { + echo "SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF; + } + + return false; + } + + // Send encoded username + + fputs($this->smtp_conn, base64_encode($username) . $this->CRLF); + $rply = $this->get_lines(); + $code = substr($rply, 0, 3); + + if($code != 334) + { + $this->error = array( + "error" => "Username not accepted from server", + "smtp_code" => $code, + "smtp_msg" => substr($rply, 4) + ); + + if($this->do_debug >= 1) + { + echo "SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF; + } + + return false; + } + + // Send encoded password + + fputs($this->smtp_conn, base64_encode($password) . $this->CRLF); + $rply = $this->get_lines(); + $code = substr($rply, 0, 3); + + if($code != 235) + { + $this->error = array( + "error" => "Password not accepted from server", + "smtp_code" => $code, + "smtp_msg" => substr($rply, 4) + ); + + if($this->do_debug >= 1) + { + echo "SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF; + } + + return false; + } + + return true; + } + + /** + * Returns true if connected to a server otherwise false + * @access private + * @return bool + */ + + function Connected() + { + if(!empty($this->smtp_conn)) + { + $sock_status = socket_get_status($this->smtp_conn); + + if($sock_status["eof"]) + { + // hmm this is an odd situation... the socket is + // valid but we are not connected anymore + + if($this->do_debug >= 1) + { + echo "SMTP -> NOTICE:" . $this->CRLF . "EOF caught while checking if connected"; + } + + $this->Close(); + return false; + } + + return true; + + // everything looks good + } + + return false; + } + + /** + * Closes the socket and cleans up the state of the class. + * It is not considered good to use this function without + * first trying to use QUIT. + * @access public + * @return void + */ + + function Close() + { + $this->error = null; + + // so there is no confusion + + $this->helo_rply = null; + + if(!empty($this->smtp_conn)) + { + // close the connection and cleanup + + fclose($this->smtp_conn); + $this->smtp_conn = 0; + } + } + + /*************************************************************** + * SMTP COMMANDS * + *************************************************************/ + + /** + * Issues a data command and sends the msg_data to the server + * finializing the mail transaction. $msg_data is the message + * that is to be send with the headers. Each header needs to be + * on a single line followed by a with the message headers + * and the message body being seperated by and additional . + * + * Implements rfc 821: DATA + * + * SMTP CODE INTERMEDIATE: 354 + * [data] + * . + * SMTP CODE SUCCESS: 250 + * SMTP CODE FAILURE: 552,554,451,452 + * SMTP CODE FAILURE: 451,554 + * SMTP CODE ERROR : 500,501,503,421 + * @access public + * @return bool + */ + + function Data($msg_data) + { + $this->error = null; + + // so no confusion is caused + + if(!$this->connected()) + { + $this->error = array( + "error" => "Called Data() without being connected" + ); + return false; + } + + fputs($this->smtp_conn, "DATA" . $this->CRLF); + $rply = $this->get_lines(); + $code = substr($rply, 0, 3); + + if($this->do_debug >= 2) + { + echo "SMTP -> FROM SERVER:" . $this->CRLF . $rply; + } + + if($code != 354) + { + $this->error = array( + "error" => "DATA command not accepted from server", + "smtp_code" => $code, + "smtp_msg" => substr($rply, 4) + ); + + if($this->do_debug >= 1) + { + echo "SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF; + } + + return false; + } + + /* the server is ready to accept data! + * according to rfc 821 we should not send more than 1000 + * including the CRLF + * characters on a single line so we will break the data up + * into lines by \r and/or \n then if needed we will break + * each of those into smaller lines to fit within the limit. + * in addition we will be looking for lines that start with + * a period '.' and append and additional period '.' to that + * line. NOTE: this does not count towards are limit. + */ + // normalize the line breaks so we know the explode works + + $msg_data = str_replace("\r\n", "\n", $msg_data); + $msg_data = str_replace("\r", "\n", $msg_data); + $lines = explode("\n", $msg_data); + + /* we need to find a good way to determine is headers are + * in the msg_data or if it is a straight msg body + * currently I am assuming rfc 822 definitions of msg headers + * and if the first field of the first line (':' sperated) + * does not contain a space then it _should_ be a header + * and we can process all lines before a blank "" line as + * headers. + */ + + $field = substr($lines[0], 0, strpos($lines[0], ":")); + $in_headers = false; + + if(!empty($field) + && !strstr($field, " ")) + { + $in_headers = true; + } + + $max_line_length = 998; + + // used below; set here for ease in change + + while(list(, $line) = @each($lines)) + { + $lines_out = null; + + if($line == "" + && $in_headers) + { + $in_headers = false; + } + + // ok we need to break this line up into several smaller lines + + while(strlen($line) > $max_line_length) + { + $pos = strrpos(substr($line, 0, $max_line_length), " "); + + // Patch to fix DOS attack + + if(!$pos) + { + $pos = $max_line_length - 1; + } + + $lines_out[] = substr($line, 0, $pos); + $line = substr($line, $pos + 1); + + /* if we are processing headers we need to + * add a LWSP-char to the front of the new line + * rfc 822 on long msg headers + */ + + if($in_headers) + { + $line = "\t" . $line; + } + } + + $lines_out[] = $line; + + // now send the lines to the server + + while(list(, $line_out) = @each($lines_out)) + { + if(strlen($line_out) > 0) + { + if(substr($line_out, 0, 1) == ".") + { + $line_out = "." . $line_out; + } + } + + fputs($this->smtp_conn, $line_out . $this->CRLF); + } + } + + // ok all the message data has been sent so lets get this + // over with aleady + + fputs($this->smtp_conn, $this->CRLF . "." . $this->CRLF); + $rply = $this->get_lines(); + $code = substr($rply, 0, 3); + + if($this->do_debug >= 2) + { + echo "SMTP -> FROM SERVER:" . $this->CRLF . $rply; + } + + if($code != 250) + { + $this->error = array( + "error" => "DATA not accepted from server", + "smtp_code" => $code, + "smtp_msg" => substr($rply, 4) + ); + + if($this->do_debug >= 1) + { + echo "SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF; + } + + return false; + } + + return true; + } + + /** + * Expand takes the name and asks the server to list all the + * people who are members of the _list_. Expand will return + * back and array of the result or false if an error occurs. + * Each value in the array returned has the format of: + * [ ] + * The definition of is defined in rfc 821 + * + * Implements rfc 821: EXPN + * + * SMTP CODE SUCCESS: 250 + * SMTP CODE FAILURE: 550 + * SMTP CODE ERROR : 500,501,502,504,421 + * @access public + * @return string array + */ + + function Expand($name) + { + $this->error = null; + + // so no confusion is caused + + if(!$this->connected()) + { + $this->error = array( + "error" => "Called Expand() without being connected" + ); + return false; + } + + fputs($this->smtp_conn, "EXPN " . $name . $this->CRLF); + $rply = $this->get_lines(); + $code = substr($rply, 0, 3); + + if($this->do_debug >= 2) + { + echo "SMTP -> FROM SERVER:" . $this->CRLF . $rply; + } + + if($code != 250) + { + $this->error = array( + "error" => "EXPN not accepted from server", + "smtp_code" => $code, + "smtp_msg" => substr($rply, 4) + ); + + if($this->do_debug >= 1) + { + echo "SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF; + } + + return false; + } + + // parse the reply and place in our array to return to user + + $entries = explode($this->CRLF, $rply); + + while(list(, $l) = @each($entries)) + { + $list[] = substr($l, 4); + } + + return $list; + } + + /** + * Sends the HELO command to the smtp server. + * This makes sure that we and the server are in + * the same known state. + * + * Implements from rfc 821: HELO + * + * SMTP CODE SUCCESS: 250 + * SMTP CODE ERROR : 500, 501, 504, 421 + * @access public + * @return bool + */ + + function Hello($host = "") + { + $this->error = null; + + // so no confusion is caused + + if(!$this->connected()) + { + $this->error = array( + "error" => "Called Hello() without being connected" + ); + return false; + } + + // if a hostname for the HELO was not specified determine + //a suitable one to send + + if(empty($host)) + { + // we need to determine some sort of appopiate default + // to send to the server + + $host = "localhost"; + } + + // Send extended hello first (RFC 2821) + + if(!$this->SendHello("EHLO", $host)) + { + if(!$this->SendHello("HELO", $host))return false; + } + + return true; + } + + /** + * Sends a HELO/EHLO command. + * @access private + * @return bool + */ + + function SendHello($hello, $host) + { + fputs($this->smtp_conn, $hello . " " . $host . $this->CRLF); + $rply = $this->get_lines(); + $code = substr($rply, 0, 3); + + if($this->do_debug >= 2) + { + echo "SMTP -> FROM SERVER: " . $this->CRLF . $rply; + } + + if($code != 250) + { + $this->error = array( + "error" => $hello . " not accepted from server", + "smtp_code" => $code, + "smtp_msg" => substr($rply, 4) + ); + + if($this->do_debug >= 1) + { + echo "SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF; + } + + return false; + } + + $this->helo_rply = $rply; + return true; + } + + /** + * Gets help information on the keyword specified. If the keyword + * is not specified then returns generic help, ussually contianing + * A list of keywords that help is available on. This function + * returns the results back to the user. It is up to the user to + * handle the returned data. If an error occurs then false is + * returned with $this->error set appropiately. + * + * Implements rfc 821: HELP [ ] + * + * SMTP CODE SUCCESS: 211,214 + * SMTP CODE ERROR : 500,501,502,504,421 + * @access public + * @return string + */ + + function Help($keyword = "") + { + $this->error = null; + + // to avoid confusion + + if(!$this->connected()) + { + $this->error = array( + "error" => "Called Help() without being connected" + ); + return false; + } + + $extra = ""; + + if(!empty($keyword)) + { + $extra = " " . $keyword; + } + + fputs($this->smtp_conn, "HELP" . $extra . $this->CRLF); + $rply = $this->get_lines(); + $code = substr($rply, 0, 3); + + if($this->do_debug >= 2) + { + echo "SMTP -> FROM SERVER:" . $this->CRLF . $rply; + } + + if($code != 211 + && $code != 214) + { + $this->error = array( + "error" => "HELP not accepted from server", + "smtp_code" => $code, + "smtp_msg" => substr($rply, 4) + ); + + if($this->do_debug >= 1) + { + echo "SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF; + } + + return false; + } + + return $rply; + } + + /** + * Starts a mail transaction from the email address specified in + * $from. Returns true if successful or false otherwise. If True + * the mail transaction is started and then one or more Recipient + * commands may be called followed by a Data command. + * + * Implements rfc 821: MAIL FROM: + * + * SMTP CODE SUCCESS: 250 + * SMTP CODE SUCCESS: 552,451,452 + * SMTP CODE SUCCESS: 500,501,421 + * @access public + * @return bool + */ + + function Mail($from) + { + $this->error = null; + + // so no confusion is caused + + if(!$this->connected()) + { + $this->error = array( + "error" => "Called Mail() without being connected" + ); + return false; + } + + $useVerp = ($this->do_verp ? "XVERP" : ""); + fputs($this->smtp_conn, "MAIL FROM:<" . $from . ">" . $useVerp . $this->CRLF); + $rply = $this->get_lines(); + $code = substr($rply, 0, 3); + + if($this->do_debug >= 2) + { + echo "SMTP -> FROM SERVER:" . $this->CRLF . $rply; + } + + if($code != 250) + { + $this->error = array( + "error" => "MAIL not accepted from server", + "smtp_code" => $code, + "smtp_msg" => substr($rply, 4) + ); + + if($this->do_debug >= 1) + { + echo "SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF; + } + + return false; + } + + return true; + } + + /** + * Sends the command NOOP to the SMTP server. + * + * Implements from rfc 821: NOOP + * + * SMTP CODE SUCCESS: 250 + * SMTP CODE ERROR : 500, 421 + * @access public + * @return bool + */ + + function Noop() + { + $this->error = null; + + // so no confusion is caused + + if(!$this->connected()) + { + $this->error = array( + "error" => "Called Noop() without being connected" + ); + return false; + } + + fputs($this->smtp_conn, "NOOP" . $this->CRLF); + $rply = $this->get_lines(); + $code = substr($rply, 0, 3); + + if($this->do_debug >= 2) + { + echo "SMTP -> FROM SERVER:" . $this->CRLF . $rply; + } + + if($code != 250) + { + $this->error = array( + "error" => "NOOP not accepted from server", + "smtp_code" => $code, + "smtp_msg" => substr($rply, 4) + ); + + if($this->do_debug >= 1) + { + echo "SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF; + } + + return false; + } + + return true; + } + + /** + * Sends the quit command to the server and then closes the socket + * if there is no error or the $close_on_error argument is true. + * + * Implements from rfc 821: QUIT + * + * SMTP CODE SUCCESS: 221 + * SMTP CODE ERROR : 500 + * @access public + * @return bool + */ + + function Quit($close_on_error = true) + { + $this->error = null; + + // so there is no confusion + + if(!$this->connected()) + { + $this->error = array( + "error" => "Called Quit() without being connected" + ); + return false; + } + + // send the quit command to the server + + fputs($this->smtp_conn, "quit" . $this->CRLF); + + // get any good-bye messages + + $byemsg = $this->get_lines(); + + if($this->do_debug >= 2) + { + echo "SMTP -> FROM SERVER:" . $this->CRLF . $byemsg; + } + + $rval = true; + $e = null; + $code = substr($byemsg, 0, 3); + + if($code != 221) + { + // use e as a tmp var cause Close will overwrite $this->error + + $e = array( + "error" => "SMTP server rejected quit command", + "smtp_code" => $code, + "smtp_rply" => substr($byemsg, 4) + ); + $rval = false; + + if($this->do_debug >= 1) + { + echo "SMTP -> ERROR: " . $e["error"] . ": " . $byemsg . $this->CRLF; + } + } + + if(empty($e) + || $close_on_error) + { + $this->Close(); + } + + return $rval; + } + + /** + * Sends the command RCPT to the SMTP server with the TO: argument of $to. + * Returns true if the recipient was accepted false if it was rejected. + * + * Implements from rfc 821: RCPT TO: + * + * SMTP CODE SUCCESS: 250,251 + * SMTP CODE FAILURE: 550,551,552,553,450,451,452 + * SMTP CODE ERROR : 500,501,503,421 + * @access public + * @return bool + */ + + function Recipient($to) + { + $this->error = null; + + // so no confusion is caused + + if(!$this->connected()) + { + $this->error = array( + "error" => "Called Recipient() without being connected" + ); + return false; + } + + fputs($this->smtp_conn, "RCPT TO:<" . $to . ">" . $this->CRLF); + $rply = $this->get_lines(); + $code = substr($rply, 0, 3); + + if($this->do_debug >= 2) + { + echo "SMTP -> FROM SERVER:" . $this->CRLF . $rply; + } + + if($code != 250 + && $code != 251) + { + $this->error = array( + "error" => "RCPT not accepted from server", + "smtp_code" => $code, + "smtp_msg" => substr($rply, 4) + ); + + if($this->do_debug >= 1) + { + echo "SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF; + } + + return false; + } + + return true; + } + + /** + * Sends the RSET command to abort and transaction that is + * currently in progress. Returns true if successful false + * otherwise. + * + * Implements rfc 821: RSET + * + * SMTP CODE SUCCESS: 250 + * SMTP CODE ERROR : 500,501,504,421 + * @access public + * @return bool + */ + + function Reset() + { + $this->error = null; + + // so no confusion is caused + + if(!$this->connected()) + { + $this->error = array( + "error" => "Called Reset() without being connected" + ); + return false; + } + + fputs($this->smtp_conn, "RSET" . $this->CRLF); + $rply = $this->get_lines(); + $code = substr($rply, 0, 3); + + if($this->do_debug >= 2) + { + echo "SMTP -> FROM SERVER:" . $this->CRLF . $rply; + } + + if($code != 250) + { + $this->error = array( + "error" => "RSET failed", + "smtp_code" => $code, + "smtp_msg" => substr($rply, 4) + ); + + if($this->do_debug >= 1) + { + echo "SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF; + } + + return false; + } + + return true; + } + + /** + * Starts a mail transaction from the email address specified in + * $from. Returns true if successful or false otherwise. If True + * the mail transaction is started and then one or more Recipient + * commands may be called followed by a Data command. This command + * will send the message to the users terminal if they are logged + * in. + * + * Implements rfc 821: SEND FROM: + * + * SMTP CODE SUCCESS: 250 + * SMTP CODE SUCCESS: 552,451,452 + * SMTP CODE SUCCESS: 500,501,502,421 + * @access public + * @return bool + */ + + function Send($from) + { + $this->error = null; + + // so no confusion is caused + + if(!$this->connected()) + { + $this->error = array( + "error" => "Called Send() without being connected" + ); + return false; + } + + fputs($this->smtp_conn, "SEND FROM:" . $from . $this->CRLF); + $rply = $this->get_lines(); + $code = substr($rply, 0, 3); + + if($this->do_debug >= 2) + { + echo "SMTP -> FROM SERVER:" . $this->CRLF . $rply; + } + + if($code != 250) + { + $this->error = array( + "error" => "SEND not accepted from server", + "smtp_code" => $code, + "smtp_msg" => substr($rply, 4) + ); + + if($this->do_debug >= 1) + { + echo "SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF; + } + + return false; + } + + return true; + } + + /** + * Starts a mail transaction from the email address specified in + * $from. Returns true if successful or false otherwise. If True + * the mail transaction is started and then one or more Recipient + * commands may be called followed by a Data command. This command + * will send the message to the users terminal if they are logged + * in and send them an email. + * + * Implements rfc 821: SAML FROM: + * + * SMTP CODE SUCCESS: 250 + * SMTP CODE SUCCESS: 552,451,452 + * SMTP CODE SUCCESS: 500,501,502,421 + * @access public + * @return bool + */ + + function SendAndMail($from) + { + $this->error = null; + + // so no confusion is caused + + if(!$this->connected()) + { + $this->error = array( + "error" => "Called SendAndMail() without being connected" + ); + return false; + } + + fputs($this->smtp_conn, "SAML FROM:" . $from . $this->CRLF); + $rply = $this->get_lines(); + $code = substr($rply, 0, 3); + + if($this->do_debug >= 2) + { + echo "SMTP -> FROM SERVER:" . $this->CRLF . $rply; + } + + if($code != 250) + { + $this->error = array( + "error" => "SAML not accepted from server", + "smtp_code" => $code, + "smtp_msg" => substr($rply, 4) + ); + + if($this->do_debug >= 1) + { + echo "SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF; + } + + return false; + } + + return true; + } + + /** + * Starts a mail transaction from the email address specified in + * $from. Returns true if successful or false otherwise. If True + * the mail transaction is started and then one or more Recipient + * commands may be called followed by a Data command. This command + * will send the message to the users terminal if they are logged + * in or mail it to them if they are not. + * + * Implements rfc 821: SOML FROM: + * + * SMTP CODE SUCCESS: 250 + * SMTP CODE SUCCESS: 552,451,452 + * SMTP CODE SUCCESS: 500,501,502,421 + * @access public + * @return bool + */ + + function SendOrMail($from) + { + $this->error = null; + + // so no confusion is caused + + if(!$this->connected()) + { + $this->error = array( + "error" => "Called SendOrMail() without being connected" + ); + return false; + } + + fputs($this->smtp_conn, "SOML FROM:" . $from . $this->CRLF); + $rply = $this->get_lines(); + $code = substr($rply, 0, 3); + + if($this->do_debug >= 2) + { + echo "SMTP -> FROM SERVER:" . $this->CRLF . $rply; + } + + if($code != 250) + { + $this->error = array( + "error" => "SOML not accepted from server", + "smtp_code" => $code, + "smtp_msg" => substr($rply, 4) + ); + + if($this->do_debug >= 1) + { + echo "SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF; + } + + return false; + } + + return true; + } + + /** + * This is an optional command for SMTP that this class does not + * support. This method is here to make the RFC821 Definition + * complete for this class and __may__ be implimented in the future + * + * Implements from rfc 821: TURN + * + * SMTP CODE SUCCESS: 250 + * SMTP CODE FAILURE: 502 + * SMTP CODE ERROR : 500, 503 + * @access public + * @return bool + */ + + function Turn() + { + $this->error = array( + "error" => "This method, TURN, of the SMTP " . "is not implemented" + ); + + if($this->do_debug >= 1) + { + echo "SMTP -> NOTICE: " . $this->error["error"] . $this->CRLF; + } + + return false; + } + + /** + * Verifies that the name is recognized by the server. + * Returns false if the name could not be verified otherwise + * the response from the server is returned. + * + * Implements rfc 821: VRFY + * + * SMTP CODE SUCCESS: 250,251 + * SMTP CODE FAILURE: 550,551,553 + * SMTP CODE ERROR : 500,501,502,421 + * @access public + * @return int + */ + + function Verify($name) + { + $this->error = null; + + // so no confusion is caused + + if(!$this->connected()) + { + $this->error = array( + "error" => "Called Verify() without being connected" + ); + return false; + } + + fputs($this->smtp_conn, "VRFY " . $name . $this->CRLF); + $rply = $this->get_lines(); + $code = substr($rply, 0, 3); + + if($this->do_debug >= 2) + { + echo "SMTP -> FROM SERVER:" . $this->CRLF . $rply; + } + + if($code != 250 + && $code != 251) + { + $this->error = array( + "error" => "VRFY failed on name '$name'", + "smtp_code" => $code, + "smtp_msg" => substr($rply, 4) + ); + + if($this->do_debug >= 1) + { + echo "SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF; + } + + return false; + } + + return $rply; + } + + /******************************************************************* + * INTERNAL FUNCTIONS * + ******************************************************************/ + + /** + * Read in as many lines as possible + * either before eof or socket timeout occurs on the operation. + * With SMTP we can tell if we have more lines to read if the + * 4th character is '-' symbol. If it is a space then we don't + * need to read anything else. + * @access private + * @return string + */ + + function get_lines() + { + $data = ""; + + while($str = @fgets($this->smtp_conn, 515)) + { + if($this->do_debug >= 4) + { + echo "SMTP -> get_lines(): \$data was \"$data\"" . $this->CRLF; + echo "SMTP -> get_lines(): \$str is \"$str\"" . $this->CRLF; + } + + $data.= $str; + + if($this->do_debug >= 4) + { + echo "SMTP -> get_lines(): \$data is \"$data\"" . $this->CRLF; + } + + // if the 4th character is a space then we are done reading + // so just break the loop + + if(substr($str, 3, 1) == " ") + { + break; + } + } + + return $data; + } +} + +?> diff --git a/lib/classes/ticket/class.ticket.php b/lib/classes/ticket/class.ticket.php new file mode 100644 index 0000000000..8a67bc1c87 --- /dev/null +++ b/lib/classes/ticket/class.ticket.php @@ -0,0 +1,663 @@ + + * @license http://www.gnu.org/licenses/gpl.txt + * @package Functions + * @version CVS: $Id: class.ticket.php 2724 2009-06-07 14:18:02Z flo $ + * @link http://www.nutime.de/ + * @since File available since Release 1.2.18 + */ + +class ticket +{ + /** + * Userinfo + * @var array + */ + + private $userinfo = array(); + + /** + * Database handler + * @var db + */ + + private $db = false; + + /** + * Settings array + * @var settings + */ + + private $settings = array(); + + /** + * Ticket ID + * @var tid + */ + + private $tid = - 1; + + /** + * Ticket Data Array + * @var t_data + */ + + private $t_data = array(); + + /** + * Ticket-Object-Array + * @var tickets + */ + + static private $tickets = array(); + + /** + * Class constructor. + * + * @param array userinfo + * @param resource database + * @param array settings + * @param int ticket id + */ + + private function __construct($userinfo, $db, $settings, $tid = - 1) + { + $this->userinfo = $userinfo; + $this->db = $db; + $this->settings = $settings; + $this->tid = $tid; + + // initialize data array + + $this->initData(); + + // read data from database + + $this->readData(); + } + + /** + * Singleton ftw ;-) + * + * @param int ticket id + */ + + static public function getInstanceOf($_usernfo, $_db, $_settings, $_tid) + { + if(!isset(self::$tickets[$_tid])) + { + self::$tickets[$_tid] = new ticket($_usernfo, $_db, $_settings, $_tid); + } + + return self::$tickets[$_tid]; + } + + /** + * Initialize data-array + */ + + private function initData() + { + $this->Set('customer', 0, true, true); + $this->Set('admin', 1, true, true); + $this->Set('subject', '', true, true); + $this->Set('category', '0', true, true); + $this->Set('priority', '2', true, true); + $this->Set('message', '', true, true); + $this->Set('dt', 0, true, true); + $this->Set('lastchange', 0, true, true); + $this->Set('ip', '', true, true); + $this->Set('status', '0', true, true); + $this->Set('lastreplier', '0', true, true); + $this->Set('by', '0', true, true); + $this->Set('answerto', '0', true, true); + $this->Set('archived', '0', true, true); + } + + /** + * Read ticket data from database. + */ + + private function readData() + { + if(isset($this->tid) + && $this->tid != - 1) + { + $_ticket = $this->db->query_first('SELECT * FROM `' . TABLE_PANEL_TICKETS . '` WHERE `id` = "' . $this->tid . '"'); + $this->Set('customer', $_ticket['customerid'], true, false); + $this->Set('admin', $_ticket['adminid'], true, false); + $this->Set('subject', $_ticket['subject'], true, false); + $this->Set('category', $_ticket['category'], true, false); + $this->Set('priority', $_ticket['priority'], true, false); + $this->Set('message', $_ticket['message'], true, false); + $this->Set('dt', $_ticket['dt'], true, false); + $this->Set('lastchange', $_ticket['lastchange'], true, false); + $this->Set('ip', $_ticket['ip'], true, false); + $this->Set('status', $_ticket['status'], true, false); + $this->Set('lastreplier', $_ticket['lastreplier'], true, false); + $this->Set('by', $_ticket['by'], true, false); + $this->Set('answerto', $_ticket['answerto'], true, false); + $this->Set('archived', $_ticket['archived'], true, false); + } + } + + /** + * Insert data to database + */ + + public function Insert() + { + $this->db->query("INSERT INTO `" . TABLE_PANEL_TICKETS . "` + (`customerid`, + `adminid`, + `category`, + `priority`, + `subject`, + `message`, + `dt`, + `lastchange`, + `ip`, + `status`, + `lastreplier`, + `by`, + `answerto`) + VALUES + ('" . (int)$this->Get('customer') . "', + '" . (int)$this->Get('admin') . "', + '" . (int)$this->Get('category') . "', + '" . (int)$this->Get('priority') . "', + '" . $this->db->escape($this->Get('subject')) . "', + '" . $this->db->escape($this->Get('message')) . "', + '" . (int)$this->Get('dt') . "', + '" . (int)$this->Get('lastchange') . "', + '" . $this->db->escape($this->Get('ip')) . "', + '" . (int)$this->Get('status') . "', + '" . (int)$this->Get('lastreplier') . "', + '" . (int)$this->Get('by') . "', + '" . (int)$this->Get('answerto') . "');"); + $this->tid = $this->db->insert_id(); + return true; + } + + /** + * Update data in database + */ + + public function Update() + { + // Update "main" ticket + + $this->db->query('UPDATE `' . TABLE_PANEL_TICKETS . '` SET + `priority` = "' . (int)$this->Get('priority') . '", + `lastchange` = "' . (int)$this->Get('lastchange') . '", + `status` = "' . (int)$this->Get('status') . '", + `lastreplier` = "' . (int)$this->Get('lastreplier') . '" + WHERE `id` = "' . (int)$this->tid . '";'); + return true; + } + + /** + * Moves a ticket to the archive + */ + + public function Archive() + { + // Update "main" ticket + + $this->db->query('UPDATE `' . TABLE_PANEL_TICKETS . '` SET `archived` = "1" WHERE `id` = "' . (int)$this->tid . '";'); + + // Update "answers" to ticket + + $this->db->query('UPDATE `' . TABLE_PANEL_TICKETS . '` SET `archived` = "1" WHERE `answerto` = "' . (int)$this->tid . '";'); + return true; + } + + /** + * Remove ticket from database + */ + + public function Delete() + { + // Delete "main" ticket + + $this->db->query('DELETE FROM `' . TABLE_PANEL_TICKETS . '` WHERE `id` = "' . (int)$this->tid . '";'); + + // Delete "answers" to ticket" + + $this->db->query('DELETE FROM `' . TABLE_PANEL_TICKETS . '` WHERE `answerto` = "' . (int)$this->tid . '";'); + return true; + } + + /** + * Mail notifications + */ + + public function sendMail($customerid = - 1, $template_subject = null, $default_subject = null, $template_body = null, $default_body = null) + { + global $mail; + + // Some checks are to be made here in the future + + if($customerid != - 1) + { + // Get e-mail message for customer + + $usr = $this->db->query_first('SELECT `name`, `firstname`, `email` + FROM `' . TABLE_PANEL_CUSTOMERS . '` + WHERE `customerid` = "' . (int)$customerid . '"'); + $replace_arr = array( + 'FIRSTNAME' => $usr['firstname'], + 'NAME' => $usr['name'], + 'SUBJECT' => $this->Get('subject', true) + ); + } + else + { + $replace_arr = array( + 'SUBJECT' => $this->Get('subject', true) + ); + } + + $result = $this->db->query_first('SELECT `value` FROM `' . TABLE_PANEL_TEMPLATES . '` + WHERE `adminid`=\'' . (int)$this->userinfo['adminid'] . '\' + AND `language`=\'' . $this->db->escape($this->userinfo['def_language']) . '\' + AND `templategroup`=\'mails\' + AND `varname`=\'' . $template_subject . '\''); + $mail_subject = html_entity_decode(replace_variables((($result['value'] != '') ? $result['value'] : $default_subject), $replace_arr)); + $result = $this->db->query_first('SELECT `value` FROM `' . TABLE_PANEL_TEMPLATES . '` + WHERE `adminid`=\'' . (int)$this->userinfo['adminid'] . '\' + AND `language`=\'' . $this->db->escape($this->userinfo['def_language']) . '\' + AND `templategroup`=\'mails\' + AND `varname`=\'' . $template_body . '\''); + $mail_body = html_entity_decode(replace_variables((($result['value'] != '') ? $result['value'] : $default_body), $replace_arr)); + + if($customerid != - 1) + { + $mail->From = $this->settings['ticket']['noreply_email']; + $mail->FromName = $this->settings['ticket']['noreply_name']; + $mail->Subject = $mail_subject; + $mail->Body = $mail_body; + $mail->AddAddress($usr['email'], $usr['firstname'] . ' ' . $usr['name']); + + if(!$mail->Send()) + { + standard_error(array('errorsendingmail', $usr['email'])); + } + + $mail->ClearAddresses(); + } + else + { + $admin = $this->db->query_first("SELECT `email` FROM `" . TABLE_PANEL_ADMINS . "` WHERE `adminid`='" . (int)$this->userinfo['adminid'] . "'"); + $mail->From = $this->settings['ticket']['noreply_email']; + $mail->FromName = $this->settings['ticket']['noreply_name']; + $mail->Subject = $mail_subject; + $mail->Body = $mail_body; + $mail->AddAddress($admin['email'], $admin['firstname'] . ' ' . $admin['name']); + + if(!$mail->Send()) + { + standard_error(array('errorsendingmail', $admin['email'])); + } + + $mail->ClearAddresses(); + } + } + + /** + * Add a support-categories + */ + + static public function addCategory($_db, $_category = null, $_admin = 1) + { + if($_category != null + && $_category != '') + { + $_db->query('INSERT INTO `' . TABLE_PANEL_TICKET_CATS . '` (`name`, `adminid`) VALUES ("' . $_db->escape($_category) . '", "' . (int)$_admin . '")'); + return true; + } + + return false; + } + + /** + * Edit a support-categories + */ + + static public function editCategory($_db, $_category = null, $_id = 0) + { + if($_category != null + && $_category != '' + && $_id != 0) + { + $_db->query('UPDATE `' . TABLE_PANEL_TICKET_CATS . '` SET `name` = "' . $_db->escape($_category) . '" + WHERE `id` = "' . (int)$_id . '"'); + return true; + } + + return false; + } + + /** + * Delete a support-categories + */ + + static public function deleteCategory($_db, $_id = 0) + { + if($_id != 0) + { + $result = $_db->query_first('SELECT COUNT(`id`) as `numtickets` FROM `' . TABLE_PANEL_TICKETS . '` + WHERE `category` = "' . (int)$_id . '"'); + + if($result['numtickets'] == "0") + { + $_db->query('DELETE FROM `' . TABLE_PANEL_TICKET_CATS . '` WHERE `id` = "' . (int)$_id . '"'); + return true; + } + else + { + return false; + } + } + + return false; + } + + /** + * Return a support-category-name + */ + + static public function getCategoryName($_db, $_id = 0) + { + if($_id != 0) + { + $category = $_db->query_first('SELECT `name` FROM `' . TABLE_PANEL_TICKET_CATS . '` WHERE `id` = "' . (int)$_id . '"'); + return $category['name']; + } + + return null; + } + + /** + * returns the last x archived tickets + */ + + static public function getLastArchived($_db, $_num = 10, $_admin = 1) + { + if($_num > 0) + { + $archived = array(); + $counter = 0; + $result = $_db->query('SELECT *, + (SELECT COUNT(`sub`.`id`) + FROM `' . TABLE_PANEL_TICKETS . '` `sub` + WHERE `sub`.`answerto` = `main`.`id`) as `ticket_answers` + FROM `' . TABLE_PANEL_TICKETS . '` `main` + WHERE `main`.`answerto` = "0" + AND `main`.`archived` = "1" AND `main`.`adminid` = "' . (int)$_admin . '" + ORDER BY `main`.`lastchange` DESC LIMIT 0, ' . (int)$_num); + + while($row = $_db->fetch_array($result)) + { + $archived[$counter]['id'] = $row['id']; + $archived[$counter]['customerid'] = $row['customerid']; + $archived[$counter]['adminid'] = $row['adminid']; + $archived[$counter]['lastreplier'] = $row['lastreplier']; + $archived[$counter]['ticket_answers'] = $row['ticket_answers']; + $archived[$counter]['category'] = $row['category']; + $archived[$counter]['priority'] = $row['priority']; + $archived[$counter]['subject'] = $row['subject']; + $archived[$counter]['message'] = $row['message']; + $archived[$counter]['dt'] = $row['dt']; + $archived[$counter]['lastchange'] = $row['lastchange']; + $archived[$counter]['status'] = $row['status']; + $archived[$counter]['by'] = $row['by']; + $counter++; + } + + if(isset($archived[0]['id'])) + { + return $archived; + } + else + { + return false; + } + } + } + + /** + * Returns a sql-statement to search the archive + */ + + static public function getArchiveSearchStatement($subject = NULL, $priority = NULL, $fromdate = NULL, $todate = NULL, $message = NULL, $customer = - 1, $admin = 1, $categories = NULL) + { + $query = 'SELECT `main`.*, + (SELECT COUNT(`sub`.`id`) FROM `' . TABLE_PANEL_TICKETS . '` `sub` + WHERE `sub`.`answerto` = `main`.`id`) as `ticket_answers` + FROM `' . TABLE_PANEL_TICKETS . '` `main` + WHERE `main`.`archived` = "1" AND `main`.`answerto` = "0" AND `main`.`adminid` = "' . (int)$admin . '"'; + + if($subject != NULL + && $subject != '') + { + $query.= 'AND `main`.`subject` LIKE "%' . $subject . '%" '; + } + + if($priority != NULL + && isset($priority[0]) + && $priority[0] != '') + { + if(isset($priority[1]) + && $priority[1] != '') + { + if(isset($priority[2]) + && $priority[2] != '') + { + $query.= 'AND (`main`.`priority` = "1" + OR `main`.`priority` = "2" + OR `main`.`priority` = "3") '; + } + else + { + $query.= 'AND (`main`.`priority` = "1" + OR `main`.`priority` = "2") '; + } + } + elseif(isset($priority[2]) + && $priority[2] != '') + { + $query.= 'AND (`main`.`priority` = "1" + OR `main`.`priority` = "3") '; + } + else + { + $query.= 'AND `main`.`priority` = "1" '; + } + } + elseif($priority != NULL + && isset($priority[1]) + && $priority[1] != '') + { + if(isset($priority[2]) + && $priority[2] != '') + { + $query.= 'AND (`main`.`priority` = "2" + OR `main`.`priority` = "3") '; + } + else + { + $query.= 'AND `main`.`priority` = "2" '; + } + } + elseif($priority != NULL) + { + if(isset($priority[3]) + && $priority[3] != '') + { + $query.= 'AND `main`.`priority` = "3" '; + } + } + + if($fromdate != NULL + && $fromdate > 0) + { + $query.= 'AND `main`.`lastchange` > "' . $fromdate . '" '; + } + + if($todate != NULL + && $todate > 0) + { + $query.= 'AND `main`.`lastchange` < "' . $todate . '" '; + } + + if($message != NULL + && $message != '') + { + $query.= 'AND `main`.`message` LIKE "%' . $message . '%" '; + } + + if($customer != - 1) + { + $query.= 'AND `main`.`customerid` = "' . $customer . '" '; + } + + if($categories != NULL) + { + if($categories[0] != '') + { + $query.= 'AND ('; + } + + foreach($categories as $catid) + { + if(isset($catid) + && $catid > 0) + { + $query.= '`main`.`category` = "' . $catid . '" OR '; + } + } + + if($categories[0] != '') + { + $query = substr($query, 0, strlen($query) - 3); + $query.= ') '; + } + } + + return $query; + } + + /** + * Get statustext by status-no + */ + + static public function getStatusText($_lng, $_status = 0) + { + switch($_status) + { + case 0: + return $_lng['ticket']['open']; + break; + case 1: + return $_lng['ticket']['wait_reply']; + break; + case 2: + return $_lng['ticket']['replied']; + break; + default: + return $_lng['ticket']['closed']; + break; + } + } + + /** + * Get prioritytext by priority-no + */ + + static public function getPriorityText($_lng, $_priority = 0) + { + switch($_priority) + { + case 1: + return $_lng['ticket']['high']; + break; + case 2: + return $_lng['ticket']['normal']; + break; + default: + return $_lng['ticket']['low']; + break; + } + } + + /** + * Get a data-var + */ + + public function Get($_var = '', $_vartrusted = false) + { + if($_var != '') + { + if(!$_vartrusted) + { + $_var = htmlspecialchars($_var); + } + + if(isset($this->t_data[$_var])) + { + if(strtolower($_var) == 'message') + { + return htmlspecialchars_decode(nl2br($this->t_data[$_var])); + } + else + { + return $this->t_data[$_var]; + } + } + else + { + return null; + } + } + } + + /** + * Set a data-var + */ + + public function Set($_var = '', $_value = '', $_vartrusted = false, $_valuetrusted = false) + { + if($_var != '' + && $_value != '') + { + if(!$_vartrusted) + { + $_var = htmlspecialchars($_var); + } + + if(!$_valuetrusted) + { + $_value = htmlspecialchars($_value); + } + + $this->t_data[$_var] = $_value; + } + } +} + +?> diff --git a/lib/configfiles/etch.inc.php b/lib/configfiles/etch.inc.php new file mode 100644 index 0000000000..04e61ca1c6 --- /dev/null +++ b/lib/configfiles/etch.inc.php @@ -0,0 +1,267 @@ + Array( + 'label' => 'Debian 4.0 (Etch)', + 'services' => Array( + 'http' => Array( + 'label' => $lng['admin']['configfiles']['http'], + 'daemons' => Array( + 'apache2' => Array( + 'label' => 'Apache 2', + 'commands' => Array( + 'mkdir -p ' . $settings['system']['documentroot_prefix'], + 'mkdir -p ' . $settings['system']['logfiles_directory'], + 'mkdir -p ' . $settings['system']['mod_fcgid_tmpdir'], + 'chmod 1777 ' . $settings['system']['mod_fcgid_tmpdir'], + 'a2dismod userdir', + ), + 'restart' => Array( + '/etc/init.d/apache2 restart' + ), + ), + 'lighttpd' => Array( + 'label' => 'Lighttpd Webserver', + 'commands_1' => Array( + 'apt-get install lighttpd', + ), + 'files' => Array( + 'etc_lighttpd.conf' => '/etc/lighttpd/lighttpd.conf', + ), + 'commands_2' => Array( + $configcommand['vhost'], + $configcommand['diroptions'], + $configcommand['v_inclighty'], + $configcommand['d_inclighty'], + 'mkdir -p ' . $settings['system']['documentroot_prefix'], + 'mkdir -p ' . $settings['system']['logfiles_directory'], + 'mkdir -p ' . $settings['system']['mod_fcgid_tmpdir'], + 'chmod 1777 ' . $settings['system']['mod_fcgid_tmpdir'], + ), + 'restart' => Array( + '/etc/init.d/lighttpd restart' + ) + ) + ) + ), + 'dns' => Array( + 'label' => $lng['admin']['configfiles']['dns'], + 'daemons' => Array( + 'bind' => Array( + 'label' => 'Bind9', + 'commands' => Array( + 'apt-get install bind9', + 'echo "include \"' . $settings['system']['bindconf_directory'] . 'syscp_bind.conf\";" >> /etc/bind/named.conf', + 'touch ' . $settings['system']['bindconf_directory'] . 'syscp_bind.conf' + ), + 'restart' => Array( + '/etc/init.d/bind9 restart' + ) + ), + 'powerdns' => Array( + 'label' => 'PowerDNS', + 'files' => Array( + 'etc_powerdns_pdns.conf' => '/etc/powerdns/pdns.conf', + 'etc_powerdns_pdns-syscp.conf' => '/etc/powerdns/pdns_syscp.conf', + ), + 'restart' => Array( + '/etc/init.d/pdns restart' + ) + ), + ) + ), + 'smtp' => Array( + 'label' => $lng['admin']['configfiles']['smtp'], + 'daemons' => Array( + 'postfix' => Array( + 'label' => 'Postfix', + 'commands' => Array( + 'apt-get install postfix postfix-mysql libsasl2 libsasl2-modules libsasl2-modules-sql', + 'mkdir -p /etc/postfix/sasl', + 'mkdir -p /var/spool/postfix/etc/pam.d', + 'mkdir -p /var/spool/postfix/var/run/mysqld', + 'groupadd -g ' . $settings['system']['vmail_gid'] . ' vmail', + 'useradd -u ' . $settings['system']['vmail_uid'] . ' -g vmail vmail', + 'mkdir -p ' . $settings['system']['vmail_homedir'], + 'chown -R vmail:vmail ' . $settings['system']['vmail_homedir'], + 'touch /etc/postfix/mysql-virtual_alias_maps.cf', + 'touch /etc/postfix/mysql-virtual_mailbox_domains.cf', + 'touch /etc/postfix/mysql-virtual_mailbox_maps.cf', + 'touch /etc/postfix/sasl/smtpd.conf', + 'chown root:root /etc/postfix/main.cf', + 'chown root:root /etc/postfix/master.cf', + 'chown root:postfix /etc/postfix/mysql-virtual_alias_maps.cf', + 'chown root:postfix /etc/postfix/mysql-virtual_mailbox_domains.cf', + 'chown root:postfix /etc/postfix/mysql-virtual_mailbox_maps.cf', + 'chown root:root /etc/postfix/sasl/smtpd.conf', + 'chmod 0644 /etc/postfix/main.cf', + 'chmod 0644 /etc/postfix/master.cf', + 'chmod 0640 /etc/postfix/mysql-virtual_alias_maps.cf', + 'chmod 0640 /etc/postfix/mysql-virtual_mailbox_domains.cf', + 'chmod 0640 /etc/postfix/mysql-virtual_mailbox_maps.cf', + 'chmod 0600 /etc/postfix/sasl/smtpd.conf', + ), + 'files' => Array( + 'etc_postfix_main.cf' => '/etc/postfix/main.cf', + 'etc_postfix_master.cf' => '/etc/postfix/master.cf', + 'etc_postfix_mysql-virtual_alias_maps.cf' => '/etc/postfix/mysql-virtual_alias_maps.cf', + 'etc_postfix_mysql-virtual_mailbox_domains.cf' => '/etc/postfix/mysql-virtual_mailbox_domains.cf', + 'etc_postfix_mysql-virtual_mailbox_maps.cf' => '/etc/postfix/mysql-virtual_mailbox_maps.cf', + 'etc_postfix_sasl_smtpd.conf' => '/etc/postfix/sasl/smtpd.conf' + ), + 'restart' => Array( + '/etc/init.d/postfix restart', + 'newaliases' + ) + ), + 'exim4' => Array( + 'label' => 'Exim4', + 'commands_1' => Array( + 'dpkg-reconfigure exim4-config', + '# choose "no configuration at this time" and "splitted configuration files" in the dialog' + ), + 'files' => Array( + 'etc_exim4_conf.d_acl_30_exim4-config_check_rcpt.rul' => '/etc/exim4/conf.d/acl/30_exim4-config_check_rcpt.rul', + 'etc_exim4_conf.d_auth_30_syscp-config' => '/etc/exim4/conf.d/auth/30_syscp-config', + 'etc_exim4_conf.d_main_10_syscp-config_options' => '/etc/exim4/conf.d/main/10_syscp-config_options', + 'etc_exim4_conf.d_router_180_syscp-config' => '/etc/exim4/conf.d/router/180_syscp-config', + 'etc_exim4_conf.d_transport_30_syscp-config' => '/etc/exim4/conf.d/transport/30_syscp-config' + ), + 'commands_2' => Array( + 'chmod o-rx /var/lib/exim4', + 'chmod o-rx /etc/exim4/conf.d/main/10_syscp-config_options' + ), + 'restart' => Array( + '/etc/init.d/exim4 restart' + ) + ) + ) + ), + 'mail' => Array( + 'label' => $lng['admin']['configfiles']['mail'], + 'daemons' => Array( + 'courier' => Array( + 'label' => 'Courier', + 'commands' => Array( + 'apt-get install courier-pop courier-imap courier-authlib-mysql' + ), + 'files' => Array( + 'etc_courier_authdaemonrc' => '/etc/courier/authdaemonrc', + 'etc_courier_authmysqlrc' => '/etc/courier/authmysqlrc' + ), + 'restart' => Array( + '/etc/init.d/courier-authdaemon restart', + '/etc/init.d/courier-pop restart' + ) + ), + 'dovecot' => Array( + 'label' => 'Dovecot', + 'commands' => Array( + 'apt-get install dovecot-imapd dovecot-pop3d' + ), + 'files' => Array( + 'etc_dovecot_dovecot.conf' => '/etc/dovecot/dovecot.conf', + 'etc_dovecot_dovecot-sql.conf' => '/etc/dovecot/dovecot-sql.conf' + ), + 'restart' => Array( + '/etc/init.d/dovecot restart' + ) + ) + ) + ), + 'ftp' => Array( + 'label' => $lng['admin']['configfiles']['ftp'], + 'daemons' => Array( + 'proftpd' => Array( + 'label' => 'ProFTPd', + 'files' => Array( + 'etc_proftpd_modules.conf' => '/etc/proftpd/modules.conf', + 'etc_proftpd_proftpd.conf' => '/etc/proftpd/proftpd.conf' + ), + 'restart' => Array( + '/etc/init.d/proftpd restart' + ) + ), + 'pure-ftpd' => Array( + 'label' => 'Pure FTPd', + 'commands' => Array( + 'apt-get install pure-ftpd-common pure-ftpd-mysql' + ), + 'files' => Array( + 'etc_pure-ftpd_conf_MinUID' => '/etc/pure-ftpd/conf/MinUID', + 'etc_pure-ftpd_conf_MySQLConfigFile' => '/etc/pure-ftpd/conf/MySQLConfigFile', + 'etc_pure-ftpd_conf_NoAnonymous' => '/etc/pure-ftpd/conf/NoAnonymous', + 'etc_pure-ftpd_conf_MaxIdleTime' => '/etc/pure-ftpd/conf/MaxIdleTime', + 'etc_pure-ftpd_conf_ChrootEveryone' => '/etc/pure-ftpd/conf/ChrootEveryone', + 'etc_pure-ftpd_conf_PAMAuthentication' => '/etc/pure-ftpd/conf/PAMAuthentication', + 'etc_pure-ftpd_db_mysql.conf' => '/etc/pure-ftpd/db/mysql.conf', + 'etc_pure-ftpd_conf_CustomerProof' => '/etc/pure-ftpd/conf/CustomerProof', + 'etc_pure-ftpd_conf_Bind' => '/etc/pure-ftpd/conf/Bind', + 'etc_default_pure-ftpd-common' => '/etc/default/pure-ftpd-common' + ), + 'restart' => Array( + '/etc/init.d/pure-ftpd-mysql restart' + ) + ), + ) + ), + 'etc' => Array( + 'label' => $lng['admin']['configfiles']['etc'], + 'daemons' => Array( + 'cron' => Array( + 'label' => 'Crond (cronscript)', + 'files' => Array( + 'etc_cron.d_syscp' => '/etc/cron.d/syscp' + ), + 'restart' => Array( + '/etc/init.d/cron restart' + ) + ), + 'xinetd' => Array( + 'label' => 'xinet.d (syscp updates in realtime)', + 'commands' => Array( + 'apt-get install xinetd', + 'echo -e "syscp ' . $settings['system']['realtime_port'] . '/tcp # SysCP Realtime" >> /etc/services' + ), + 'files' => Array( + 'etc_xinet.d_syscp' => '/etc/xinetd.d/syscp' + ), + 'restart' => Array( + '/etc/init.d/xinetd restart' + ) + ), + 'awstats' => Array( + 'label' => 'Awstats', + 'files' => Array( + ($settings['system']['mod_log_sql'] == 1 ? 'etc_awstats_awstats.model_log_sql.conf.syscp' : 'etc_awstats_awstats.model.conf.syscp') => '/etc/awstats/awstats.model.conf.syscp', + ($settings['system']['mod_log_sql'] == 1 ? 'etc_cron.d_awstats_log_sql' : 'etc_cron.d_awstats') => '/etc/cron.d/awstats', + ($settings['system']['webserver'] == 'lighttpd' ? 'etc_lighttpd_syscp-awstats.conf' : 'etc_apache_vhosts_05_awstats.conf') => ($settings['system']['webserver'] == 'lighttpd' ? '/etc/lighttpd/syscp-awstats.conf' : '/etc/apache2/sites-enabled/05_awstats.conf') + ), + 'commands' => Array( + ($settings['system']['webserver'] == 'lighttpd' ? 'echo "include \"syscp-awstats.conf\"" >> /etc/lighttpd/lighttpd.conf' : '') + ), + 'restart' => Array( + ($settings['system']['webserver'] == 'lighttpd' ? '/etc/init.d/lighttpd restart' : '/etc/init.d/apache2 restart') + ) + ), + 'libnss' => Array( + 'label' => 'libnss (system login with mysql)', + 'commands' => Array( + 'apt-get install libnss-mysql nscd', + 'chmod 600 /etc/nss-mysql.conf /etc/nss-mysql-root.conf' + ), + 'files' => Array( + 'etc_nss-mysql.conf' => '/etc/nss-mysql.conf', + 'etc_nss-mysql-root.conf' => '/etc/nss-mysql-root.conf', + 'etc_nsswitch.conf' => '/etc/nsswitch.conf', + ), + 'restart' => Array( + '/etc/init.d/nscd restart' + ) + ) + ) + ) + ) + ) +); + +?> diff --git a/lib/configfiles/gentoo.inc.php b/lib/configfiles/gentoo.inc.php new file mode 100644 index 0000000000..85c2c1b03c --- /dev/null +++ b/lib/configfiles/gentoo.inc.php @@ -0,0 +1,290 @@ + Array( + 'label' => 'Gentoo', + 'services' => Array( + 'http' => Array( + 'label' => $lng['admin']['configfiles']['http'], + 'daemons' => Array( + 'apache2' => Array( + 'label' => 'Apache2 Webserver', + 'commands' => Array( + 'touch ' . $settings['system']['apacheconf_vhost'], + 'chown root:0 ' . $settings['system']['apacheconf_vhost'], + 'chmod 0600 ' . $settings['system']['apacheconf_vhost'], + 'touch ' . $settings['system']['apacheconf_diroptions'], + 'chown root:0 ' . $settings['system']['apacheconf_diroptions'], + 'chmod 0600 ' . $settings['system']['apacheconf_diroptions'], + 'mkdir -p ' . $settings['system']['documentroot_prefix'], + 'mkdir -p ' . $settings['system']['logfiles_directory'], + 'mkdir -p ' . $settings['system']['mod_fcgid_tmpdir'], + 'chmod 1777 ' . $settings['system']['mod_fcgid_tmpdir'], + ), + 'restart' => Array( + 'rc-update add apache2 default', + '/etc/init.d/apache2 restart' + ) + ), + 'lighttpd' => Array( + 'label' => 'Lighttpd Webserver', + 'files' => Array( + 'etc_lighttpd.conf' => '/etc/lighttpd/lighttpd.conf' + ), + 'commands' => Array( + $configcommand['vhost'], + $configcommand['diroptions'], + $configcommand['v_inclighty'], + $configcommand['d_inclighty'], + 'mkdir -p ' . $settings['system']['documentroot_prefix'], + 'mkdir -p ' . $settings['system']['logfiles_directory'] + ), + 'restart' => Array( + 'rc-update add lighttpd default', + '/etc/init.d/lighttpd restart' + ) + ) + ) + ), + 'dns' => Array( + 'label' => $lng['admin']['configfiles']['dns'], + 'daemons' => Array( + 'bind' => Array( + 'label' => 'Bind9 Nameserver', + 'files' => Array( + 'etc_bind_default.zone' => '/etc/bind/default.zone' + ), + 'commands' => Array( + 'echo "include \"' . $settings['system']['bindconf_directory'] . 'syscp_bind.conf\";" >> /etc/bind/named.conf', + 'touch ' . $settings['system']['bindconf_directory'] . 'syscp_bind.conf', + 'chown root:0 ' . $settings['system']['bindconf_directory'] . 'syscp_bind.conf', + 'chmod 0600 ' . $settings['system']['bindconf_directory'] . 'syscp_bind.conf' + ), + 'restart' => Array( + 'rc-update add named default', + '/etc/init.d/named restart' + ) + ), + ) + ), + 'smtp' => Array( + 'label' => $lng['admin']['configfiles']['smtp'], + 'daemons' => Array( + 'postfix' => Array( + 'label' => 'Postfix', + 'commands_1' => Array( + 'mkdir -p ' . $settings['system']['vmail_homedir'], + 'chown -R vmail:vmail ' . $settings['system']['vmail_homedir'], + 'chmod 0750 ' . $settings['system']['vmail_homedir'], + 'mv /etc/postfix/main.cf /etc/postfix/main.cf.gentoo', + 'touch /etc/postfix/main.cf', + 'touch /etc/postfix/master.cf', + 'touch /etc/postfix/mysql-virtual_alias_maps.cf', + 'touch /etc/postfix/mysql-virtual_mailbox_domains.cf', + 'touch /etc/postfix/mysql-virtual_mailbox_maps.cf', + 'touch /etc/sasl2/smtpd.conf', + 'chown root:root /etc/postfix/main.cf', + 'chown root:root /etc/postfix/master.cf', + 'chown root:postfix /etc/postfix/mysql-virtual_alias_maps.cf', + 'chown root:postfix /etc/postfix/mysql-virtual_mailbox_domains.cf', + 'chown root:postfix /etc/postfix/mysql-virtual_mailbox_maps.cf', + 'chown root:root /etc/sasl2/smtpd.conf', + 'chmod 0644 /etc/postfix/main.cf', + 'chmod 0644 /etc/postfix/master.cf', + 'chmod 0640 /etc/postfix/mysql-virtual_alias_maps.cf', + 'chmod 0640 /etc/postfix/mysql-virtual_mailbox_domains.cf', + 'chmod 0640 /etc/postfix/mysql-virtual_mailbox_maps.cf', + 'chmod 0600 /etc/sasl2/smtpd.conf', + ), + 'files' => Array( + 'etc_postfix_main.cf' => '/etc/postfix/main.cf', + 'etc_postfix_master.cf' => '/etc/postfix/master.cf', + 'etc_postfix_mysql-virtual_alias_maps.cf' => '/etc/postfix/mysql-virtual_alias_maps.cf', + 'etc_postfix_mysql-virtual_mailbox_domains.cf' => '/etc/postfix/mysql-virtual_mailbox_domains.cf', + 'etc_postfix_mysql-virtual_mailbox_maps.cf' => '/etc/postfix/mysql-virtual_mailbox_maps.cf', + 'etc_sasl2_smtpd.conf' => '/etc/sasl2/smtpd.conf' + ), + 'restart' => Array( + 'rc-update add postfix default', + '/etc/init.d/postfix restart' + ) + ), + 'dkim' => Array( + 'label' => 'DomainKey filter', + 'commands_1' => Array( + 'mkdir -p /etc/postfix/dkim' + ), + 'files' => Array( + 'dkim-filter.conf' => '/etc/postfix/dkim/dkim-filter.conf' + ), + 'commands_2' => Array( + 'chgrp postfix /etc/postfix/dkim/dkim-filter.conf', + 'echo "smtpd_milters = inet:localhost:8891\n +milter_macro_daemon_name = SIGNING\n +milter_default_action = accept\n" >> /etc/postfix/main.cf' + ), + 'restart' => Array( + '/etc/init.d/dkim-filter restart' + ) + ) + ) + ), + 'mail' => Array( + 'label' => $lng['admin']['configfiles']['mail'], + 'daemons' => Array( + 'courier' => Array( + 'label' => 'Courier-IMAP (POP3/IMAP)', + 'files' => Array( + 'etc_courier_authlib_authdaemonrc' => '/etc/courier/authlib/authdaemonrc', + 'etc_courier_authlib_authmysqlrc' => '/etc/courier/authlib/authmysqlrc', + 'etc_courier-imap_pop3d' => '/etc/courier-imap/pop3d', + 'etc_courier-imap_imapd' => '/etc/courier-imap/imapd', + 'etc_courier-imap_pop3d-ssl' => '/etc/courier-imap/pop3d-ssl', + 'etc_courier-imap_imapd-ssl' => '/etc/courier-imap/imapd-ssl' + ), + 'commands' => Array( + 'rm /etc/courier/authlib/authdaemonrc', + 'rm /etc/courier/authlib/authmysqlrc', + 'rm /etc/courier-imap/pop3d', + 'rm /etc/courier-imap/imapd', + 'rm /etc/courier-imap/pop3d-ssl', + 'rm /etc/courier-imap/imapd-ssl', + 'touch /etc/courier/authlib/authdaemonrc', + 'touch /etc/courier/authlib/authmysqlrc', + 'touch /etc/courier-imap/pop3d', + 'touch /etc/courier-imap/imapd', + 'touch /etc/courier-imap/pop3d-ssl', + 'touch /etc/courier-imap/imapd-ssl', + 'chown root:0 /etc/courier/authlib/authdaemonrc', + 'chown root:0 /etc/courier/authlib/authmysqlrc', + 'chown root:0 /etc/courier-imap/pop3d', + 'chown root:0 /etc/courier-imap/imapd', + 'chown root:0 /etc/courier-imap/pop3d-ssl', + 'chown root:0 /etc/courier-imap/imapd-ssl', + 'chmod 0600 /etc/courier/authlib/authdaemonrc', + 'chmod 0600 /etc/courier/authlib/authmysqlrc', + 'chmod 0600 /etc/courier-imap/pop3d', + 'chmod 0600 /etc/courier-imap/imapd', + 'chmod 0600 /etc/courier-imap/pop3d-ssl', + 'chmod 0600 /etc/courier-imap/imapd-ssl' + ), + 'restart' => Array( + 'rc-update add courier-authlib default', + 'rc-update add courier-pop3d default', + 'rc-update add courier-imapd default', + '/etc/init.d/courier-authlib restart', + '/etc/init.d/courier-pop3d restart', + '/etc/init.d/courier-imapd restart' + ) + ), + 'dovecot' => Array( + 'label' => 'Dovecot', + 'commands_1' => Array( + 'mv dovecot.conf dovecot.conf.gentoo', + 'mv dovecot-sql.conf dovecot-sql.conf.gentoo', + 'touch dovecot.conf', + 'touch dovecot-sql.conf', + ), + 'files' => Array( + 'etc_dovecot_dovecot.conf' => '/etc/dovecot/dovecot.conf', + 'etc_dovecot_dovecot-sql.conf' => '/etc/dovecot/dovecot-sql.conf' + ), + 'restart' => Array( + '/etc/init.d/dovecot restart' + ) + ) + ) + ), + 'ftp' => Array( + 'label' => $lng['admin']['configfiles']['ftp'], + 'daemons' => Array( + 'proftpd' => Array( + 'label' => 'ProFTPd', + 'files' => Array( + 'etc_proftpd_proftpd.conf' => '/etc/proftpd/proftpd.conf' + ), + 'commands' => Array( + 'touch /etc/proftpd/proftpd.conf', + 'chown root:0 /etc/proftpd/proftpd.conf', + 'chmod 0600 /etc/proftpd/proftpd.conf' + ), + 'restart' => Array( + 'rc-update add proftpd default', + '/etc/init.d/proftpd restart' + ) + ), + ) + ), + 'etc' => Array( + 'label' => $lng['admin']['configfiles']['etc'], + 'daemons' => Array( + 'cron' => Array( + 'label' => 'Crond (cronscript)', + 'files' => Array( + 'etc_php_syscp-cronjob_php.ini' => '/etc/php/syscp-cronjob/php.ini', + 'etc_cron.d_syscp' => '/etc/cron.d/syscp' + ), + 'commands' => Array( + 'touch /etc/cron.d/syscp', + 'chown root:0 /etc/cron.d/syscp', + 'chmod 0640 /etc/cron.d/syscp', + 'mkdir -p /etc/php/syscp-cronjob', + 'touch /etc/php/syscp-cronjob/php.ini', + 'chown -R root:0 /etc/php/syscp-cronjob', + 'chmod 0750 /etc/php/syscp-cronjob', + 'chmod 0640 /etc/php/syscp-cronjob/php.ini' + ), + 'restart' => Array( + 'rc-update add vixie-cron default', + '/etc/init.d/vixie-cron restart' + ) + ), + 'xinetd' => Array( + 'label' => 'xinet.d (syscp updates in realtime)', + 'commands' => Array( + 'emerge -av xinetd', + 'echo -e "syscp ' . $settings['system']['realtime_port'] . '/tcp # SysCP Realtime" >> /etc/services' + ), + 'files' => Array( + 'etc_xinet.d_syscp' => '/etc/xinetd.d/syscp' + ), + 'restart' => Array( + '/etc/init.d/xinetd restart' + ) + ), + 'awstats' => Array( + 'label' => 'Awstats', + 'files' => Array( + ($settings['system']['mod_log_sql'] == 1 ? 'etc_awstats_awstats.model_log_sql.conf.syscp' : 'etc_awstats_awstats.model.conf.syscp') => '/etc/awstats/awstats.model.conf.syscp', + ($settings['system']['mod_log_sql'] == 1 ? 'etc_cron.d_awstats_log_sql' : 'etc_cron.d_awstats') => '/etc/cron.d/awstats', + ($settings['system']['webserver'] == 'lighttpd' ? 'etc_lighttpd_syscp-awstats.conf' : 'etc_apache_vhosts_05_awstats.conf') => ($settings['system']['webserver'] == 'lighttpd' ? '/etc/lighttpd/syscp-awstats.conf' : '/etc/apache2/sites-enabled/05_awstats.conf') + ), + 'commands' => Array( + ($settings['system']['webserver'] == 'lighttpd' ? 'echo "include \"syscp-awstats.conf\"" >> /etc/lighttpd/lighttpd.conf' : '') + ), + 'restart' => Array( + ($settings['system']['webserver'] == 'lighttpd' ? '/etc/init.d/lighttpd restart' : '/etc/init.d/apache2 restart') + ) + ), + 'libnss' => Array( + 'label' => 'libnss (system login with mysql)', + 'files' => Array( + 'etc_libnss-mysql.cfg' => '/etc/libnss-mysql.cfg', + 'etc_libnss-mysql-root.cfg' => '/etc/libnss-mysql-root.cfg', + 'etc_nsswitch.conf' => '/etc/nsswitch.conf', + ), + 'commands' => Array( + 'emerge -av libnss-mysql', + 'chmod 600 /etc/libnss-mysql.cfg /etc/libnss-mysql-root.cfg' + ), + 'restart' => Array( + 'rc-update add nscd default', + '/etc/init.d/nscd restart' + ) + ) + ) + ) + ) + ) +); + +?> diff --git a/lib/configfiles/hardy.inc.php b/lib/configfiles/hardy.inc.php new file mode 100644 index 0000000000..1174ff2272 --- /dev/null +++ b/lib/configfiles/hardy.inc.php @@ -0,0 +1,261 @@ + Array( + 'label' => 'Ubuntu 8.04 (Hardy)', + 'services' => Array( + 'http' => Array( + 'label' => $lng['admin']['configfiles']['http'], + 'daemons' => Array( + 'apache2' => Array( + 'label' => 'Apache 2', + 'commands' => Array( + 'mkdir -p ' . $settings['system']['documentroot_prefix'], + 'mkdir -p ' . $settings['system']['logfiles_directory'], + 'mkdir -p ' . $settings['system']['mod_fcgid_tmpdir'], + 'chmod 1777 ' . $settings['system']['mod_fcgid_tmpdir'], + 'a2dismod userdir', + ), + 'restart' => Array( + '/etc/init.d/apache2 restart' + ) + ), + 'lighttpd' => Array( + 'label' => 'Lighttpd Webserver', + 'commands_1' => Array( + 'apt-get install lighttpd', + ), + 'files' => Array( + 'etc_lighttpd.conf' => '/etc/lighttpd/lighttpd.conf', + ), + 'commands_2' => Array( + $configcommand['vhost'], + $configcommand['diroptions'], + $configcommand['v_inclighty'], + $configcommand['d_inclighty'], + 'mkdir -p ' . $settings['system']['documentroot_prefix'], + 'mkdir -p ' . $settings['system']['logfiles_directory'], + 'mkdir -p ' . $settings['system']['mod_fcgid_tmpdir'], + 'chmod 1777 ' . $settings['system']['mod_fcgid_tmpdir'], + ), + 'restart' => Array( + '/etc/init.d/lighttpd restart' + ) + ) + ) + ), + 'dns' => Array( + 'label' => $lng['admin']['configfiles']['dns'], + 'daemons' => Array( + 'bind' => Array( + 'label' => 'Bind9', + 'commands' => Array( + 'echo "include \"' . $settings['system']['bindconf_directory'] . 'syscp_bind.conf\";" >> /etc/bind/named.conf', + 'touch ' . $settings['system']['bindconf_directory'] . 'syscp_bind.conf' + ), + 'restart' => Array( + '/etc/init.d/bind9 restart' + ) + ), + 'powerdns' => Array( + 'label' => 'PowerDNS', + 'files' => Array( + 'etc_powerdns_pdns.conf' => '/etc/powerdns/pdns.conf', + 'etc_powerdns_pdns-syscp.conf' => '/etc/powerdns/pdns_syscp.conf', + ), + 'restart' => Array( + '/etc/init.d/pdns restart' + ) + ), + ) + ), + 'smtp' => Array( + 'label' => $lng['admin']['configfiles']['smtp'], + 'daemons' => Array( + 'postfix' => Array( + 'label' => 'Postfix', + 'commands_1' => Array( + 'mkdir -p /etc/postfix/sasl', + 'mkdir -p /var/spool/postfix/etc/pam.d', + 'mkdir -p /var/spool/postfix/var/run/mysqld', + 'groupadd -g ' . $settings['system']['vmail_gid'] . ' vmail', + 'useradd -u ' . $settings['system']['vmail_uid'] . ' -g vmail vmail', + 'mkdir -p ' . $settings['system']['vmail_homedir'], + 'chown -R vmail:vmail ' . $settings['system']['vmail_homedir'], + 'mv /etc/postfix/main.cf /etc/postfix/main.cf.ubuntu', + 'touch /etc/postfix/main.cf', + 'touch /etc/postfix/mysql-virtual_alias_maps.cf', + 'touch /etc/postfix/mysql-virtual_mailbox_domains.cf', + 'touch /etc/postfix/mysql-virtual_mailbox_maps.cf', + 'touch /etc/postfix/sasl/smtpd.conf', + 'chown root:root /etc/postfix/main.cf', + 'chown root:root /etc/postfix/master.cf', + 'chown root:postfix /etc/postfix/mysql-virtual_alias_maps.cf', + 'chown root:postfix /etc/postfix/mysql-virtual_mailbox_domains.cf', + 'chown root:postfix /etc/postfix/mysql-virtual_mailbox_maps.cf', + 'chown root:root /etc/postfix/sasl/smtpd.conf', + 'chmod 0644 /etc/postfix/main.cf', + 'chmod 0644 /etc/postfix/master.cf', + 'chmod 0640 /etc/postfix/mysql-virtual_alias_maps.cf', + 'chmod 0640 /etc/postfix/mysql-virtual_mailbox_domains.cf', + 'chmod 0640 /etc/postfix/mysql-virtual_mailbox_maps.cf', + 'chmod 0600 /etc/postfix/sasl/smtpd.conf', + ), + 'files' => Array( + 'etc_postfix_main.cf' => '/etc/postfix/main.cf', + 'etc_postfix_master.cf' => '/etc/postfix/master.cf', + 'etc_postfix_mysql-virtual_alias_maps.cf' => '/etc/postfix/mysql-virtual_alias_maps.cf', + 'etc_postfix_mysql-virtual_mailbox_domains.cf' => '/etc/postfix/mysql-virtual_mailbox_domains.cf', + 'etc_postfix_mysql-virtual_mailbox_maps.cf' => '/etc/postfix/mysql-virtual_mailbox_maps.cf', + 'etc_postfix_sasl_smtpd.conf' => '/etc/postfix/sasl/smtpd.conf' + ), + 'restart' => Array( + '/etc/init.d/postfix restart', + 'newaliases' + ) + ), + 'exim4' => Array( + 'label' => 'Exim4', + 'commands_1' => Array( + 'dpkg-reconfigure exim4-config', + '# choose "no configuration at this time" and "splitted configuration files" in the dialog' + ), + 'files' => Array( + 'etc_exim4_conf.d_acl_30_exim4-config_check_rcpt.rul' => '/etc/exim4/conf.d/acl/30_exim4-config_check_rcpt.rul', + 'etc_exim4_conf.d_auth_30_syscp-config' => '/etc/exim4/conf.d/auth/30_syscp-config', + 'etc_exim4_conf.d_main_10_syscp-config_options' => '/etc/exim4/conf.d/main/10_syscp-config_options', + 'etc_exim4_conf.d_router_180_syscp-config' => '/etc/exim4/conf.d/router/180_syscp-config', + 'etc_exim4_conf.d_transport_30_syscp-config' => '/etc/exim4/conf.d/transport/30_syscp-config' + ), + 'commands_2' => Array( + 'chmod o-rx /var/lib/exim4', + 'chmod o-rx /etc/exim4/conf.d/main/10_syscp-config_options' + ), + 'restart' => Array( + '/etc/init.d/exim4 restart' + ) + ) + ) + ), + 'mail' => Array( + 'label' => $lng['admin']['configfiles']['mail'], + 'daemons' => Array( + 'courier' => Array( + 'label' => 'Courier', + 'files' => Array( + 'etc_courier_authdaemonrc' => '/etc/courier/authdaemonrc', + 'etc_courier_authmysqlrc' => '/etc/courier/authmysqlrc' + ), + 'restart' => Array( + '/etc/init.d/courier-authdaemon restart', + '/etc/init.d/courier-pop restart' + ) + ), + 'dovecot' => Array( + 'label' => 'Dovecot', + 'commands' => Array( + '/etc/init.d/dovecot stop', + ), + 'files' => Array( + 'etc_dovecot_dovecot.conf' => '/etc/dovecot/dovecot.conf', + 'etc_dovecot_dovecot-sql.conf' => '/etc/dovecot/dovecot-sql.conf' + ), + 'restart' => Array( + '/etc/init.d/dovecot restart' + ) + ) + ) + ), + 'ftp' => Array( + 'label' => $lng['admin']['configfiles']['ftp'], + 'daemons' => Array( + 'proftpd' => Array( + 'label' => 'ProFTPd', + 'files' => Array( + 'etc_proftpd_modules.conf' => '/etc/proftpd/modules.conf', + 'etc_proftpd_proftpd.conf' => '/etc/proftpd/proftpd.conf' + ), + 'restart' => Array( + '/etc/init.d/proftpd restart' + ) + ), + 'pure-ftpd' => Array( + 'label' => 'Pure FTPd', + 'files' => Array( + 'etc_pure-ftpd_conf_MinUID' => '/etc/pure-ftpd/conf/MinUID', + 'etc_pure-ftpd_conf_MySQLConfigFile' => '/etc/pure-ftpd/conf/MySQLConfigFile', + 'etc_pure-ftpd_conf_NoAnonymous' => '/etc/pure-ftpd/conf/NoAnonymous', + 'etc_pure-ftpd_conf_MaxIdleTime' => '/etc/pure-ftpd/conf/MaxIdleTime', + 'etc_pure-ftpd_conf_ChrootEveryone' => '/etc/pure-ftpd/conf/ChrootEveryone', + 'etc_pure-ftpd_conf_PAMAuthentication' => '/etc/pure-ftpd/conf/PAMAuthentication', + 'etc_pure-ftpd_db_mysql.conf' => '/etc/pure-ftpd/db/mysql.conf', + 'etc_pure-ftpd_conf_CustomerProof' => '/etc/pure-ftpd/conf/CustomerProof', + 'etc_pure-ftpd_conf_Bind' => '/etc/pure-ftpd/conf/Bind', + 'etc_default_pure-ftpd-common' => '/etc/default/pure-ftpd-common' + ), + 'restart' => Array( + '/etc/init.d/pure-ftpd-mysql restart' + ) + ), + ) + ), + 'etc' => Array( + 'label' => $lng['admin']['configfiles']['etc'], + 'daemons' => Array( + 'cron' => Array( + 'label' => 'Crond (cronscript)', + 'files' => Array( + 'etc_cron.d_syscp' => '/etc/cron.d/syscp' + ), + 'restart' => Array( + '/etc/init.d/cron restart' + ) + ), + 'xinetd' => Array( + 'label' => 'xinet.d (syscp updates in realtime)', + 'commands' => Array( + 'apt-get install xinetd', + 'echo -e "syscp ' . $settings['system']['realtime_port'] . '/tcp # SysCP Realtime" >> /etc/services' + ), + 'files' => Array( + 'etc_xinet.d_syscp' => '/etc/xinetd.d/syscp' + ), + 'restart' => Array( + '/etc/init.d/xinetd restart' + ) + ), + 'awstats' => Array( + 'label' => 'Awstats', + 'files' => Array( + ($settings['system']['mod_log_sql'] == 1 ? 'etc_awstats_awstats.model_log_sql.conf.syscp' : 'etc_awstats_awstats.model.conf.syscp') => '/etc/awstats/awstats.model.conf.syscp', + ($settings['system']['mod_log_sql'] == 1 ? 'etc_cron.d_awstats_log_sql' : 'etc_cron.d_awstats') => '/etc/cron.d/awstats', + ($settings['system']['webserver'] == 'lighttpd' ? 'etc_lighttpd_syscp-awstats.conf' : 'etc_apache_vhosts_05_awstats.conf') => ($settings['system']['webserver'] == 'lighttpd' ? '/etc/lighttpd/syscp-awstats.conf' : '/etc/apache2/sites-enabled/05_awstats.conf') + ), + 'commands' => Array( + ($settings['system']['webserver'] == 'lighttpd' ? 'echo "include \"syscp-awstats.conf\"" >> /etc/lighttpd/lighttpd.conf' : '') + ), + 'restart' => Array( + ($settings['system']['webserver'] == 'lighttpd' ? '/etc/init.d/lighttpd restart' : '/etc/init.d/apache2 restart') + ) + ), + 'libnss' => Array( + 'label' => 'libnss (system login with mysql)', + 'commands' => Array( + 'apt-get install libnss-mysql nscd', + 'chmod 600 /etc/nss-mysql.conf /etc/nss-mysql-root.conf' + ), + 'files' => Array( + 'etc_nss-mysql.conf' => '/etc/nss-mysql.conf', + 'etc_nss-mysql-root.conf' => '/etc/nss-mysql-root.conf', + 'etc_nsswitch.conf' => '/etc/nsswitch.conf', + ), + 'restart' => Array( + '/etc/init.d/nscd restart' + ) + ) + ) + ) + ) + ) +); + +?> diff --git a/lib/configfiles/lenny.inc.php b/lib/configfiles/lenny.inc.php new file mode 100644 index 0000000000..d813822c38 --- /dev/null +++ b/lib/configfiles/lenny.inc.php @@ -0,0 +1,268 @@ + Array( + 'label' => 'Debian 5.0 (Lenny)', + 'services' => Array( + 'http' => Array( + 'label' => $lng['admin']['configfiles']['http'], + 'daemons' => Array( + 'apache2' => Array( + 'label' => 'Apache 2', + 'commands' => Array( + 'mkdir -p ' . $settings['system']['documentroot_prefix'], + 'mkdir -p ' . $settings['system']['logfiles_directory'], + 'mkdir -p ' . $settings['system']['mod_fcgid_tmpdir'], + 'chmod 1777 ' . $settings['system']['mod_fcgid_tmpdir'], + 'a2dismod userdir', + ), + 'restart' => Array( + '/etc/init.d/apache2 restart' + ), + ), + 'lighttpd' => Array( + 'label' => 'Lighttpd Webserver', + 'commands_1' => Array( + 'apt-get install lighttpd', + ), + 'files' => Array( + 'etc_lighttpd.conf' => '/etc/lighttpd/lighttpd.conf', + ), + 'commands_2' => Array( + $configcommand['vhost'], + $configcommand['diroptions'], + $configcommand['v_inclighty'], + $configcommand['d_inclighty'], + 'mkdir -p ' . $settings['system']['documentroot_prefix'], + 'mkdir -p ' . $settings['system']['logfiles_directory'], + 'mkdir -p ' . $settings['system']['mod_fcgid_tmpdir'], + 'chmod 1777 ' . $settings['system']['mod_fcgid_tmpdir'], + ), + 'restart' => Array( + '/etc/init.d/lighttpd restart' + ) + ) + ) + ), + 'dns' => Array( + 'label' => $lng['admin']['configfiles']['dns'], + 'daemons' => Array( + 'bind' => Array( + 'label' => 'Bind9', + 'commands' => Array( + 'apt-get install bind9', + 'echo "include \"' . $settings['system']['bindconf_directory'] . 'syscp_bind.conf\";" >> /etc/bind/named.conf', + 'touch ' . $settings['system']['bindconf_directory'] . 'syscp_bind.conf' + ), + 'restart' => Array( + '/etc/init.d/bind9 restart' + ) + ), + 'powerdns' => Array( + 'label' => 'PowerDNS', + 'files' => Array( + 'etc_powerdns_pdns.conf' => '/etc/powerdns/pdns.conf', + 'etc_powerdns_pdns-syscp.conf' => '/etc/powerdns/pdns_syscp.conf', + ), + 'restart' => Array( + '/etc/init.d/pdns restart' + ) + ), + ) + ), + 'smtp' => Array( + 'label' => $lng['admin']['configfiles']['smtp'], + 'daemons' => Array( + 'postfix' => Array( + 'label' => 'Postfix', + 'commands' => Array( + 'apt-get install postfix postfix-mysql libsasl2 libsasl2-modules libsasl2-modules-sql', + 'mkdir -p /etc/postfix/sasl', + 'mkdir -p /var/spool/postfix/etc/pam.d', + 'mkdir -p /var/spool/postfix/var/run/mysqld', + 'groupadd -g ' . $settings['system']['vmail_gid'] . ' vmail', + 'useradd -u ' . $settings['system']['vmail_uid'] . ' -g vmail vmail', + 'mkdir -p ' . $settings['system']['vmail_homedir'], + 'chown -R vmail:vmail ' . $settings['system']['vmail_homedir'], + 'touch /etc/postfix/mysql-virtual_alias_maps.cf', + 'touch /etc/postfix/mysql-virtual_mailbox_domains.cf', + 'touch /etc/postfix/mysql-virtual_mailbox_maps.cf', + 'touch /etc/postfix/sasl/smtpd.conf', + 'chown root:root /etc/postfix/main.cf', + 'chown root:root /etc/postfix/master.cf', + 'chown root:postfix /etc/postfix/mysql-virtual_alias_maps.cf', + 'chown root:postfix /etc/postfix/mysql-virtual_mailbox_domains.cf', + 'chown root:postfix /etc/postfix/mysql-virtual_mailbox_maps.cf', + 'chown root:root /etc/postfix/sasl/smtpd.conf', + 'chmod 0644 /etc/postfix/main.cf', + 'chmod 0644 /etc/postfix/master.cf', + 'chmod 0640 /etc/postfix/mysql-virtual_alias_maps.cf', + 'chmod 0640 /etc/postfix/mysql-virtual_mailbox_domains.cf', + 'chmod 0640 /etc/postfix/mysql-virtual_mailbox_maps.cf', + 'chmod 0600 /etc/postfix/sasl/smtpd.conf', + ), + 'files' => Array( + 'etc_postfix_main.cf' => '/etc/postfix/main.cf', + 'etc_postfix_master.cf' => '/etc/postfix/master.cf', + 'etc_postfix_mysql-virtual_alias_maps.cf' => '/etc/postfix/mysql-virtual_alias_maps.cf', + 'etc_postfix_mysql-virtual_mailbox_domains.cf' => '/etc/postfix/mysql-virtual_mailbox_domains.cf', + 'etc_postfix_mysql-virtual_mailbox_maps.cf' => '/etc/postfix/mysql-virtual_mailbox_maps.cf', + 'etc_postfix_sasl_smtpd.conf' => '/etc/postfix/sasl/smtpd.conf' + ), + 'restart' => Array( + '/etc/init.d/postfix restart', + 'newaliases' + ) + ), + 'exim4' => Array( + 'label' => 'Exim4', + 'commands_1' => Array( + 'dpkg-reconfigure exim4-config', + '# choose "no configuration at this time" and "splitted configuration files" in the dialog' + ), + 'files' => Array( + 'etc_exim4_conf.d_acl_30_exim4-config_check_rcpt.rul' => '/etc/exim4/conf.d/acl/30_exim4-config_check_rcpt.rul', + 'etc_exim4_conf.d_auth_30_syscp-config' => '/etc/exim4/conf.d/auth/30_syscp-config', + 'etc_exim4_conf.d_main_10_syscp-config_options' => '/etc/exim4/conf.d/main/10_syscp-config_options', + 'etc_exim4_conf.d_router_180_syscp-config' => '/etc/exim4/conf.d/router/180_syscp-config', + 'etc_exim4_conf.d_transport_30_syscp-config' => '/etc/exim4/conf.d/transport/30_syscp-config' + ), + 'commands_2' => Array( + 'chmod o-rx /var/lib/exim4', + 'chmod o-rx /etc/exim4/conf.d/main/10_syscp-config_options' + ), + 'restart' => Array( + '/etc/init.d/exim4 restart' + ) + ) + ) + ), + 'mail' => Array( + 'label' => $lng['admin']['configfiles']['mail'], + 'daemons' => Array( + 'courier' => Array( + 'label' => 'Courier', + 'commands' => Array( + 'apt-get install courier-pop courier-imap courier-authlib-mysql' + ), + 'files' => Array( + 'etc_courier_authdaemonrc' => '/etc/courier/authdaemonrc', + 'etc_courier_authmysqlrc' => '/etc/courier/authmysqlrc' + ), + 'restart' => Array( + '/etc/init.d/courier-authdaemon restart', + '/etc/init.d/courier-pop restart' + ) + ), + 'dovecot' => Array( + 'label' => 'Dovecot', + 'commands' => Array( + 'apt-get install dovecot-imapd dovecot-pop3d' + ), + 'files' => Array( + 'etc_dovecot_dovecot.conf' => '/etc/dovecot/dovecot.conf', + 'etc_dovecot_dovecot-sql.conf' => '/etc/dovecot/dovecot-sql.conf' + ), + 'restart' => Array( + '/etc/init.d/dovecot restart' + ) + ) + ) + ), + 'ftp' => Array( + 'label' => $lng['admin']['configfiles']['ftp'], + 'daemons' => Array( + 'proftpd' => Array( + 'label' => 'ProFTPd', + 'files' => Array( + 'etc_proftpd_sql.conf' => '/etc/proftpd/sql.conf', + 'etc_proftpd_modules.conf' => '/etc/proftpd/modules.conf', + 'etc_proftpd_proftpd.conf' => '/etc/proftpd/proftpd.conf' + ), + 'restart' => Array( + '/etc/init.d/proftpd restart' + ) + ), + 'pure-ftpd' => Array( + 'label' => 'Pure FTPd', + 'commands' => Array( + 'apt-get install pure-ftpd-common pure-ftpd-mysql' + ), + 'files' => Array( + 'etc_pure-ftpd_conf_MinUID' => '/etc/pure-ftpd/conf/MinUID', + 'etc_pure-ftpd_conf_MySQLConfigFile' => '/etc/pure-ftpd/conf/MySQLConfigFile', + 'etc_pure-ftpd_conf_NoAnonymous' => '/etc/pure-ftpd/conf/NoAnonymous', + 'etc_pure-ftpd_conf_MaxIdleTime' => '/etc/pure-ftpd/conf/MaxIdleTime', + 'etc_pure-ftpd_conf_ChrootEveryone' => '/etc/pure-ftpd/conf/ChrootEveryone', + 'etc_pure-ftpd_conf_PAMAuthentication' => '/etc/pure-ftpd/conf/PAMAuthentication', + 'etc_pure-ftpd_db_mysql.conf' => '/etc/pure-ftpd/db/mysql.conf', + 'etc_pure-ftpd_conf_CustomerProof' => '/etc/pure-ftpd/conf/CustomerProof', + 'etc_pure-ftpd_conf_Bind' => '/etc/pure-ftpd/conf/Bind', + 'etc_default_pure-ftpd-common' => '/etc/default/pure-ftpd-common' + ), + 'restart' => Array( + '/etc/init.d/pure-ftpd-mysql restart' + ) + ), + ) + ), + 'etc' => Array( + 'label' => $lng['admin']['configfiles']['etc'], + 'daemons' => Array( + 'cron' => Array( + 'label' => 'Crond (cronscript)', + 'files' => Array( + 'etc_cron.d_syscp' => '/etc/cron.d/syscp' + ), + 'restart' => Array( + '/etc/init.d/cron restart' + ) + ), + 'xinetd' => Array( + 'label' => 'xinet.d (syscp updates in realtime)', + 'commands' => Array( + 'apt-get install xinetd', + 'echo -e "syscp ' . $settings['system']['realtime_port'] . '/tcp # SysCP Realtime" >> /etc/services' + ), + 'files' => Array( + 'etc_xinet.d_syscp' => '/etc/xinetd.d/syscp' + ), + 'restart' => Array( + '/etc/init.d/xinetd restart' + ) + ), + 'awstats' => Array( + 'label' => 'Awstats', + 'files' => Array( + ($settings['system']['mod_log_sql'] == 1 ? 'etc_awstats_awstats.model_log_sql.conf.syscp' : 'etc_awstats_awstats.model.conf.syscp') => '/etc/awstats/awstats.model.conf.syscp', + ($settings['system']['mod_log_sql'] == 1 ? 'etc_cron.d_awstats_log_sql' : 'etc_cron.d_awstats') => '/etc/cron.d/awstats', + ($settings['system']['webserver'] == 'lighttpd' ? 'etc_lighttpd_syscp-awstats.conf' : 'etc_apache_vhosts_05_awstats.conf') => ($settings['system']['webserver'] == 'lighttpd' ? '/etc/lighttpd/syscp-awstats.conf' : '/etc/apache2/sites-enabled/05_awstats.conf') + ), + 'commands' => Array( + ($settings['system']['webserver'] == 'lighttpd' ? 'echo "include \"syscp-awstats.conf\"" >> /etc/lighttpd/lighttpd.conf' : '') + ), + 'restart' => Array( + ($settings['system']['webserver'] == 'lighttpd' ? '/etc/init.d/lighttpd restart' : '/etc/init.d/apache2 restart') + ) + ), + 'libnss' => Array( + 'label' => 'libnss (system login with mysql)', + 'commands' => Array( + 'apt-get install libnss-mysql nscd', + 'chmod 600 /etc/nss-mysql.conf /etc/nss-mysql-root.conf' + ), + 'files' => Array( + 'etc_nss-mysql.conf' => '/etc/nss-mysql.conf', + 'etc_nss-mysql-root.conf' => '/etc/nss-mysql-root.conf', + 'etc_nsswitch.conf' => '/etc/nsswitch.conf', + ), + 'restart' => Array( + '/etc/init.d/nscd restart' + ) + ) + ) + ) + ) + ) +); + +?> diff --git a/lib/configfiles/suse10.inc.php b/lib/configfiles/suse10.inc.php new file mode 100644 index 0000000000..45feadcd1f --- /dev/null +++ b/lib/configfiles/suse10.inc.php @@ -0,0 +1,139 @@ + Array( + 'label' => 'SUSE Linux 10.0', + 'services' => Array( + 'http' => Array( + 'label' => $lng['admin']['configfiles']['http'], + 'daemons' => Array( + 'apache' => Array( + 'label' => 'Apache', + 'commands' => Array( + $configcommand['vhost'], + $configcommand['diroptions'], + $configcommand['include'], + 'mkdir -p ' . $settings['system']['documentroot_prefix'], + 'mkdir -p ' . $settings['system']['logfiles_directory'] + ), + 'restart' => Array( + '/etc/init.d/apache2 restart' + ) + ), + ) + ), + 'dns' => Array( + 'label' => $lng['admin']['configfiles']['dns'], + 'daemons' => Array( + 'bind' => Array( + 'label' => 'Bind9', + 'commands' => Array( + 'echo "include \"' . $settings['system']['bindconf_directory'] . 'syscp_bind.conf\";" >> /etc/named.conf', + 'touch ' . $settings['system']['bindconf_directory'] . 'syscp_bind.conf' + ), + 'restart' => Array( + '/etc/init.d/named restart' + ) + ), + ) + ), + 'smtp' => Array( + 'label' => $lng['admin']['configfiles']['smtp'], + 'daemons' => Array( + 'postfix' => Array( + 'label' => 'Postfix', + 'files' => Array( + 'etc_postfix_main.cf' => '/etc/postfix/main.cf', + 'etc_postfix_mysql-virtual_alias_maps.cf' => '/etc/postfix/mysql-virtual_alias_maps.cf', + 'etc_postfix_mysql-virtual_mailbox_domains.cf' => '/etc/postfix/mysql-virtual_mailbox_domains.cf', + 'etc_postfix_mysql-virtual_mailbox_maps.cf' => '/etc/postfix/mysql-virtual_mailbox_maps.cf', + 'usr_lib_sasl2_smtpd.conf' => '/usr/lib/sasl2/smtpd.conf' + ), + 'commands' => Array( + 'mkdir -p /var/spool/postfix/etc/pam.d', + 'groupadd -g ' . $settings['system']['vmail_gid'] . ' vmail', + 'useradd -u ' . $settings['system']['vmail_uid'] . ' -g vmail vmail', + 'mkdir -p ' . $settings['system']['vmail_homedir'], + 'chown -R vmail:vmail ' . $settings['system']['vmail_homedir'], + 'touch /etc/postfix/mysql-virtual_alias_maps.cf', + 'touch /etc/postfix/mysql-virtual_mailbox_domains.cf', + 'touch /etc/postfix/mysql-virtual_mailbox_maps.cf', + 'touch /usr/lib/sasl2/smtpd.conf', + 'chmod 660 /etc/postfix/mysql-virtual_alias_maps.cf', + 'chmod 660 /etc/postfix/mysql-virtual_mailbox_domains.cf', + 'chmod 660 /etc/postfix/mysql-virtual_mailbox_maps.cf', + 'chmod 660 /usr/lib/sasl2/smtpd.conf', + 'chgrp postfix /etc/postfix/mysql-virtual_alias_maps.cf', + 'chgrp postfix /etc/postfix/mysql-virtual_mailbox_domains.cf', + 'chgrp postfix /etc/postfix/mysql-virtual_mailbox_maps.cf', + 'chgrp postfix /usr/lib/sasl2/smtpd.conf' + ), + 'restart' => Array( + '/etc/init.d/postfix restart' + ) + ) + ) + ), + 'mail' => Array( + 'label' => $lng['admin']['configfiles']['mail'], + 'daemons' => Array( + 'courier' => Array( + 'label' => 'Courier', + 'files' => Array( + 'etc_authlib_authdaemonrc' => '/etc/authlib/authdaemonrc', + 'etc_authlib_authmysqlrc' => '/etc/authlib/authmysqlrc' + ), + 'restart' => Array( + '/etc/init.d/courier-authdaemon restart', + '/etc/init.d/courier-pop restart' + ) + ), + ) + ), + 'ftp' => Array( + 'label' => $lng['admin']['configfiles']['ftp'], + 'daemons' => Array( + 'proftpd' => Array( + 'label' => 'ProFTPd', + 'files' => Array( + 'etc_proftpd_modules.conf' => '/etc/proftpd/modules.conf', + 'etc_proftpd_proftpd.conf' => '/etc/proftpd/proftpd.conf' + ), + 'restart' => Array( + '/etc/init.d/proftpd restart' + ) + ), + ) + ), + 'etc' => Array( + 'label' => $lng['admin']['configfiles']['etc'], + 'daemons' => Array( + 'cron' => Array( + 'label' => 'Crond (cronscript)', + 'files' => Array( + 'etc_cron.d_syscp' => '/etc/cron.d/syscp' + ), + 'restart' => Array( + '/etc/init.d/cron restart' + ) + ), + 'awstats' => Array( + 'label' => 'Awstats', + 'files' => Array( + ($settings['system']['mod_log_sql'] == 1 ? 'etc_awstats_awstats.model_log_sql.conf.syscp' : 'etc_awstats_awstats.model.conf.syscp') => '/etc/awstats/awstats.model.conf.syscp', + ($settings['system']['mod_log_sql'] == 1 ? 'etc_cron.d_awstats_log_sql' : 'etc_cron.d_awstats') => '/etc/cron.d/awstats', + ($settings['system']['webserver'] == 'lighttpd' ? 'etc_lighttpd_syscp-awstats.conf' : 'etc_apache_vhosts_05_awstats.conf') => ($settings['system']['webserver'] == 'lighttpd' ? '/etc/lighttpd/syscp-awstats.conf' : '/etc/apache2/sites-enabled/05_awstats.conf') + ), + 'commands' => Array( + ($settings['system']['webserver'] == 'lighttpd' ? 'echo "include \"syscp-awstats.conf\"" >> /etc/lighttpd/lighttpd.conf' : '') + ), + 'restart' => Array( + ($settings['system']['webserver'] == 'lighttpd' ? '/etc/init.d/lighttpd restart' : '/etc/init.d/apache2 restart') + ) + ) + ) + ) + ) + ) +); + +?> diff --git a/lib/configfiles_index.inc.php b/lib/configfiles_index.inc.php new file mode 100644 index 0000000000..4ae34434c0 --- /dev/null +++ b/lib/configfiles_index.inc.php @@ -0,0 +1,48 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Panel + * @version $Id: configfiles_index.inc.php 2692 2009-03-27 18:04:47Z flo $ + */ + +$configcommand = array(); + +if(isConfigDir($settings['system']['apacheconf_vhost'])) +{ + $configcommand['vhost'] = 'mkdir -p ' . $settings['system']['apacheconf_vhost']; + $configcommand['include'] = 'echo -e "\\nInclude ' . makeCorrectDir($settings['system']['apacheconf_vhost']) . '*.conf" >> ' . makeCorrectFile(makeCorrectDir($settings['system']['apacheconf_vhost']) . '/httpd.conf'); + $configcommand['v_inclighty'] = 'echo -e \'\\ninclude_shell "find ' . makeCorrectDir($settings['system']['apacheconf_vhost']) . ' -maxdepth 1 -name \'*.conf\' -exec cat {} \;"\' >> /etc/lighttpd/lighttpd.conf'; +} +else +{ + $configcommand['vhost'] = 'touch ' . $settings['system']['apacheconf_vhost']; + $configcommand['include'] = 'echo -e "\\nInclude ' . $settings['system']['apacheconf_vhost'] . '" >> ' . makeCorrectFile(dirname($settings['system']['apacheconf_vhost']) . '/httpd.conf'); + $configcommand['v_inclighty'] = 'echo -e \'\\ninclude "' . $settings['system']['apacheconf_vhost'] . '"\' >> /etc/lighttpd/lighttpd.conf'; +} + +if(isConfigDir($settings['system']['apacheconf_diroptions'])) +{ + $configcommand['diroptions'] = 'mkdir -p ' . $settings['system']['apacheconf_diroptions']; + $configcommand['d_inclighty'] = 'echo -e \'\\ninclude_shell "find ' . makeCorrectDir($settings['system']['apacheconf_diroptions']) . ' -maxdepth 1 -name \'*.conf\' -exec cat {} \;"\' >> /etc/lighttpd/lighttpd.conf'; +} +else +{ + $configcommand['diroptions'] = 'touch ' . $settings['system']['apacheconf_diroptions']; + $configcommand['d_inclighty'] = 'echo -e \'\\ninclude "' . $settings['system']['apacheconf_diroptions'] . '"\' >> /etc/lighttpd/lighttpd.conf'; +} + +$cfgPath = 'lib/configfiles/'; +$configfiles = Array(); +$configfiles = array_merge(include $cfgPath . 'lenny.inc.php', include $cfgPath . 'etch.inc.php', include $cfgPath . 'hardy.inc.php', include $cfgPath . 'gentoo.inc.php', include $cfgPath . 'suse10.inc.php'); + +?> \ No newline at end of file diff --git a/lib/cron_init.php b/lib/cron_init.php new file mode 100644 index 0000000000..85c2af62cb --- /dev/null +++ b/lib/cron_init.php @@ -0,0 +1,248 @@ + + * @author Florian Aders + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package System + * @version $Id: cron_init.php 2724 2009-06-07 14:18:02Z flo $ + */ + +if(@php_sapi_name() != 'cli' + && @php_sapi_name() != 'cgi' + && @php_sapi_name() != 'cgi-fcgi') +{ + die('This script will only work in the shell.'); +} + +$cronscriptDebug = false; +$lockdir = '/var/run/'; +$lockFilename = 'syscp_' . basename($_SERVER['PHP_SELF'], '.php') . '.lock-'; +$lockfName = $lockFilename . getmypid(); +$lockfile = $lockdir . $lockfName; + +// guess the syscp installation path +// normally you should not need to modify this script anymore, if your +// syscp installation isn't in /var/www/syscp + +$pathtophpfiles = dirname(dirname(__FILE__)); + +// should the syscp installation guessing not work correctly, +// uncomment the following line, and put your path in there! +//$pathtophpfiles = '/var/www/syscp/'; +// create and open the lockfile! + +$keepLockFile = false; +$debugHandler = fopen($lockfile, 'w'); +fwrite($debugHandler, 'Setting Lockfile to ' . $lockfile . "\n"); +fwrite($debugHandler, 'Setting SysCP installation path to ' . $pathtophpfiles . "\n"); + +// open the lockfile directory and scan for existing lockfiles + +$lockDirHandle = opendir($lockdir); + +while($fName = readdir($lockDirHandle)) +{ + if($lockFilename == substr($fName, 0, strlen($lockFilename)) + && $lockfName != $fName) + { + // Check if last run jailed out with an exception + + $croncontent = file($lockdir . $fName); + $lastline = $croncontent[(count($croncontent) - 1)]; + + if($lastline == '=== Keep lockfile because of exception ===') + { + fclose($debugHandler); + unlink($lockfile); + die('Last cron jailed out with an exception. Exiting...' . "\n" . 'Take a look into the contents of ' . $lockdir . $fName . '* for more information!' . "\n"); + } + + // Check if cron is running or has died. + + $check_pid = substr(strstr($fName, "-"), 1); + system("kill -CHLD " . $check_pid . " 1> /dev/null 2> /dev/null", $check_pid_return); + + if($check_pid_return == 1) + { + // Result: Existing lockfile/pid isnt running + // Most likely it has died + // + // Action: Remove it and continue + // + + fwrite($debugHandler, 'Previous cronjob didn\'t exit clean. PID: ' . $check_pid . "\n"); + fwrite($debugHandler, 'Removing lockfile: ' . $lockdir . $fName . "\n"); + unlink($lockdir . $fName); + } + else + { + // Result: A Cronscript with this pid + // is still running + // Action: remove my own Lock and die + // + // close the current lockfile + + fclose($debugHandler); + + // ... and delete it + + unlink($lockfile); + die('There is already a Cronjob in progress. Exiting...' . "\n" . 'Take a look into the contents of ' . $lockdir . $lockFilename . '* for more information!' . "\n"); + } + } +} + +/** + * Includes the Usersettings eg. MySQL-Username/Passwort etc. + */ + +require ($pathtophpfiles . '/lib/userdata.inc.php'); +fwrite($debugHandler, 'Userdatas included' . "\n"); + +// Legacy sql-root-information +if(isset($sql['root_user']) && isset($sql['root_password']) && (!isset($sql_root) || !is_array($sql_root))) +{ + $sql_root = array(0 => array('caption' => 'Default', 'host' => $sql['host'], 'user' => $sql['root_user'], 'password' => $sql['root_password'])); + unset($sql['root_user']); + unset($sql['root_password']); +} + +/** + * Includes the Functions + */ + +require ($pathtophpfiles . '/lib/functions.php'); + +/** + * Includes the MySQL-Tabledefinitions etc. + */ + +require ($pathtophpfiles . '/lib/tables.inc.php'); +fwrite($debugHandler, 'Table definitions included' . "\n"); + +/** + * Includes the MySQL-Connection-Class + */ + +fwrite($debugHandler, 'Database Class has been loaded' . "\n"); +$db = new db($sql['host'], $sql['user'], $sql['password'], $sql['db']); + +// If one cronscript needs root, it should say $needrootdb = true before the include +/* +if(isset($needrootdb) + && $needrootdb === true) +{ + $db_root = new db($sql['host'], $sql['root_user'], $sql['root_password'], ''); + + if($db_root->link_id == 0) + { + /** + * Do not proceed further if no database connection could be established + * + + fclose($debugHandler); + unlink($lockfile); + die('root can\'t connect to mysqlserver. Please check userdata.inc.php! Exiting...'); + } + + unset($db_root->password); + fwrite($debugHandler, 'Database-rootconnection established' . "\n"); +}*/ + +unset($sql['root_user'], $sql['root_password']); + +if($db->link_id == 0) +{ + /** + * Do not proceed further if no database connection could be established + */ + + fclose($debugHandler); + unlink($lockfile); + die('SysCP can\'t connect to mysqlserver. Please check userdata.inc.php! Exiting...'); +} + +fwrite($debugHandler, 'Database-connection established' . "\n"); +unset($sql); +unset($db->password); +$result = $db->query("SELECT `settingid`, `settinggroup`, `varname`, `value` FROM `" . TABLE_PANEL_SETTINGS . "`"); + +while($row = $db->fetch_array($result)) +{ + $settings[$row['settinggroup']][$row['varname']] = $row['value']; +} + +unset($row); +unset($result); +fwrite($debugHandler, 'SysCP Settings has been loaded from the database' . "\n"); + +if(!isset($settings['system']['dbversion']) + || $settings['system']['dbversion'] != $dbversion) +{ + /** + * Do not proceed further if the Database version is not the same as the script version + */ + + fclose($debugHandler); + unlink($lockfile); + die('Version of File doesnt match Version of Database. Exiting...'); +} + +fwrite($debugHandler, 'SysCP Version and Database Version are correct' . "\n"); + +$cronbasedir = makeCorrectDir($pathtophpfiles . '/scripts/'); +$crondir = new DirectoryIterator($cronbasedir); +$cronfilename = basename($_SERVER['PHP_SELF'], '.php'); +$cronscriptFullName = makeCorrectFile($cronbasedir . basename($_SERVER['PHP_SELF'])); +$inc_crons = array(); +foreach($crondir as $file) +{ + if(!$file->isDot() + && !$file->isDir() + && preg_match("/^" . $cronfilename . "\.inc\.(.*)\.php$/D", $file->getFilename())) + { + if(fileowner($cronscriptFullName) == $file->getOwner() + && filegroup($cronscriptFullName) == $file->getGroup() + && $file->isReadable()) + { + $inc_crons[] = $file->getPathname(); + } + else + { + fwrite($debugHandler, 'WARNING! uid and/or gid of "' . $cronscriptFullName . '" and "' . $file->getPathname() . '" don\'t match! Execution aborted!' . "\n"); + fclose($debugHandler); + die('WARNING! uid and/or gid of "' . $cronscriptFullName . '" and "' . $file->getPathname() . '" don\'t match! Execution aborted!'); + } + } +} + +if(isset($inc_crons[0])) +{ + natsort($inc_crons); + foreach($inc_crons as $cfile) + { + fwrite($debugHandler, 'Including ...' . $cfile . "\n"); + include_once ($cfile); + } +} + +unset($file, $crondir, $cronname, $cronscriptFullName, $cronfilename, $cronbasedir); +fwrite($debugHandler, 'Functions have been included' . "\n"); + +/** + * Initialize logging + */ + +$cronlog = SysCPLogger::getInstanceOf(array('loginname' => 'cronjob'), $db, $settings); +fwrite($debugHandler, 'Logger has been included' . "\n"); + +?> diff --git a/lib/cron_shutdown.php b/lib/cron_shutdown.php new file mode 100644 index 0000000000..854fa46345 --- /dev/null +++ b/lib/cron_shutdown.php @@ -0,0 +1,46 @@ + + * @author Florian Aders + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package System + * @version $Id: cron_shutdown.php 2692 2009-03-27 18:04:47Z flo $ + */ + +if($settings['logger']['log_cron'] == '1') +{ + $cronlog->setCronLog(0); + fwrite($debugHandler, 'Logging for cron has been shutdown' . "\n"); +} + +$db->close(); +fwrite($debugHandler, 'Closing database connection' . "\n"); + +if(isset($db_root)) +{ + $db_root->close(); + fwrite($debugHandler, 'Closing database rootconnection' . "\n"); +} + +if($keepLockFile === true) +{ + fwrite($debugHandler, '=== Keep lockfile because of exception ==='); +} + +fclose($debugHandler); + +if($keepLockFile === false + && $cronscriptDebug === false) +{ + unlink($lockfile); +} + diff --git a/lib/functions.php b/lib/functions.php new file mode 100644 index 0000000000..495edbea64 --- /dev/null +++ b/lib/functions.php @@ -0,0 +1,76 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Functions + * @version $Id: functions.php 2724 2009-06-07 14:18:02Z flo $ + */ + +$libdirname = dirname(__FILE__); + +includeFunctions($libdirname . '/functions/'); + +function includeFunctions($dirname) +{ + $dirhandle = opendir($dirname); + while(false !== ($filename = readdir($dirhandle))) + { + if($filename != '.' && $filename != '..' && $filename != '') + { + if((substr($filename, 0, 9) == 'function.' || substr($filename, 0, 9) == 'constant.') && substr($filename, -4 ) == '.php') + { + include($dirname . $filename); + } + + if(is_dir($dirname . $filename)) + { + includeFunctions($dirname . $filename . '/'); + } + } + } + closedir($dirhandle); +} + +function __autoload($classname) +{ + global $libdirname; + findIncludeClass($libdirname . '/classes/', $classname); +} + +function findIncludeClass($dirname, $classname) +{ + $dirhandle = opendir($dirname); + while(false !== ($filename = readdir($dirhandle))) + { + if($filename != '.' && $filename != '..' && $filename != '') + { + if($filename == 'class.' . $classname . '.php' || $filename == 'abstract.' . $classname . '.php') + { + include($dirname . $filename); + return; + } + + if(is_dir($dirname . $filename)) + { + findIncludeClass($dirname . $filename . '/', $classname); + } + } + } + closedir($dirhandle); +} + + +function exportDetails($fielddata, $newfieldvalue) +{ + print_r($newfieldvalue); +} + diff --git a/lib/functions/aps/function.storeSettingApsPhpExtensions.php b/lib/functions/aps/function.storeSettingApsPhpExtensions.php new file mode 100644 index 0000000000..343124f9b1 --- /dev/null +++ b/lib/functions/aps/function.storeSettingApsPhpExtensions.php @@ -0,0 +1,42 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Functions + * @version $Id: function.storeSettingApsPhpExtensions.php 2724 2009-06-07 14:18:02Z flo $ + */ + +function storeSettingApsPhpExtensions($fieldname, $fielddata, $newfieldvalue) +{ + $returnvalue = storeSettingField($fieldname, $fielddata, $newfieldvalue); + + if($returnvalue !== false && is_array($fielddata) && isset($fielddata['settinggroup']) && $fielddata['settinggroup'] == 'aps' && isset($fielddata['varname']) && $fielddata['varname'] == 'php-extension') + { + $newfieldvalue_array = explode(',', $newfieldvalue); + + if(in_array('mcrypt', $newfieldvalue_array)) + { + $functions = 'mcrypt_encrypt,mcrypt_decrypt'; + } + else + { + $functions = ''; + } + + if($functions != getSetting('aps', 'php-function')) + { + saveSetting('aps', 'php-function', $functions); + } + } + + return $returnvalue; +} diff --git a/lib/functions/aps/function.storeSettingApsWebserverModules.php b/lib/functions/aps/function.storeSettingApsWebserverModules.php new file mode 100644 index 0000000000..77e58c0974 --- /dev/null +++ b/lib/functions/aps/function.storeSettingApsWebserverModules.php @@ -0,0 +1,46 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Functions + * @version $Id: function.storeSettingApsWebserverModules.php 2724 2009-06-07 14:18:02Z flo $ + */ + +function storeSettingApsWebserverModules($fieldname, $fielddata, $newfieldvalue) +{ + if(is_array($fielddata) && isset($fielddata['settinggroup']) && $fielddata['settinggroup'] == 'aps' && isset($fielddata['varname']) && $fielddata['varname'] == 'webserver-module') + { + $newfieldvalue_array = explode(',', $newfieldvalue); + + if(in_array('mod_rewrite', $newfieldvalue_array)) + { + // Don't have to guess if we have to remove the leading comma as mod_rewrite is set anyways when we're here... + $newfieldvalue .= ',mod_rewrite.c'; + } + + if(in_array('htaccess', $newfieldvalue_array)) + { + $htaccess = 'htaccess'; + } + else + { + $htaccess = ''; + } + + if($htaccess != getSetting('aps', 'webserver-htaccess')) + { + saveSetting('aps', 'webserver-htaccess', $htaccess); + } + } + + return storeSettingField($fieldname, $fielddata, $newfieldvalue); +} diff --git a/lib/functions/aps/function.sys_get_temp_dir.php b/lib/functions/aps/function.sys_get_temp_dir.php new file mode 100644 index 0000000000..4e928e9d4c --- /dev/null +++ b/lib/functions/aps/function.sys_get_temp_dir.php @@ -0,0 +1,63 @@ + + */ + + function sys_get_temp_dir() + { + // Try to get from environment variable + + if(!empty($_ENV['TMP'])) + { + return realpath($_ENV['TMP']); + } + elseif(!empty($_ENV['TMPDIR'])) + { + return realpath($_ENV['TMPDIR']); + } + elseif(!empty($_ENV['TEMP'])) + { + return realpath($_ENV['TEMP']); + } + else + { + // Detect by creating a temporary file + // Try to use system's temporary directory + // as random name shouldn't exist + + $temp_file = tempnam(md5(uniqid(rand(), true)), ''); + + if($temp_file) + { + $temp_dir = realpath(dirname($temp_file)); + unlink($temp_file); + return $temp_dir; + } + else + { + return false; + } + } + } +} diff --git a/lib/functions/database/function.correctMysqlUsers.php b/lib/functions/database/function.correctMysqlUsers.php new file mode 100644 index 0000000000..df0ab6b20c --- /dev/null +++ b/lib/functions/database/function.correctMysqlUsers.php @@ -0,0 +1,89 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Functions + * @version $Id: function.correctMysqlUsers.php 2724 2009-06-07 14:18:02Z flo $ + */ + +function correctMysqlUsers($mysql_access_host_array) +{ + global $db, $settings, $sql, $sql_root; + + foreach($sql_root as $mysql_server => $mysql_server_details) + { + $db_root = new db($mysql_server_details['host'], $mysql_server_details['user'], $mysql_server_details['password'], ''); + unset($db_root->password); + + $users = array(); + $users_result = $db_root->query('SELECT * FROM `mysql`.`user`'); + + while($users_row = $db_root->fetch_array($users_result)) + { + if(!isset($users[$users_row['User']]) + || !is_array($users[$users_row['User']])) + { + $users[$users_row['User']] = array( + 'password' => $users_row['Password'], + 'hosts' => array() + ); + } + + $users[$users_row['User']]['hosts'][] = $users_row['Host']; + } + + $databases = array( + $sql['db'] + ); + $databases_result = $db->query('SELECT * FROM `' . TABLE_PANEL_DATABASES . '` WHERE `dbserver` = \'' . $mysql_server . '\''); + + while($databases_row = $db->fetch_array($databases_result)) + { + $databases[] = $databases_row['databasename']; + } + + foreach($databases as $username) + { + if(isset($users[$username]) + && is_array($users[$username]) + && isset($users[$username]['hosts']) + && is_array($users[$username]['hosts'])) + { + $password = $users[$username]['password']; + foreach($mysql_access_host_array as $mysql_access_host) + { + $mysql_access_host = trim($mysql_access_host); + + if(!in_array($mysql_access_host, $users[$username]['hosts'])) + { + $db_root->query('GRANT ALL PRIVILEGES ON `' . str_replace('_', '\_', $db_root->escape($username)) . '`.* TO `' . $db_root->escape($username) . '`@`' . $db_root->escape($mysql_access_host) . '` IDENTIFIED BY \'password\''); + $db_root->query('SET PASSWORD FOR `' . $db_root->escape($username) . '`@`' . $db_root->escape($mysql_access_host) . '` = \'' . $db_root->escape($password) . '\''); + } + } + + foreach($users[$username]['hosts'] as $mysql_access_host) + { + if(!in_array($mysql_access_host, $mysql_access_host_array)) + { + $db_root->query('REVOKE ALL PRIVILEGES ON * . * FROM `' . $db_root->escape($username) . '`@`' . $db_root->escape($mysql_access_host) . '`'); + $db_root->query('REVOKE ALL PRIVILEGES ON `' . str_replace('_', '\_', $db_root->escape($username)) . '` . * FROM `' . $db_root->escape($username) . '`@`' . $db_root->escape($mysql_access_host) . '`'); + $db_root->query('DELETE FROM `mysql`.`user` WHERE `User` = "' . $db_root->escape($username) . '" AND `Host` = "' . $db_root->escape($mysql_access_host) . '"'); + } + } + } + } + + $db_root->query('FLUSH PRIVILEGES'); + $db_root->close(); + unset($db_root); + } +} diff --git a/lib/functions/database/function.getTables.php b/lib/functions/database/function.getTables.php new file mode 100644 index 0000000000..1ec56effd4 --- /dev/null +++ b/lib/functions/database/function.getTables.php @@ -0,0 +1,120 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Functions + * @version $Id: function.getTables.php 2724 2009-06-07 14:18:02Z flo $ + */ + +/** + * Returns an array with all tables with keys which are in the currently selected database + * + * @param db A valid DB-object + * @return array Array with tables and keys + * + * @author Florian Lippert + */ + +function getTables(&$db) +{ + // This variable is our return-value + + $tables = array(); + + // The fieldname in the associative array which we get by fetch_array() + + $tablefieldname = 'Tables_in_' . $db->database; + + // Query for a list of tables in the currently selected database + + $tables_result = $db->query('SHOW TABLES'); + + while($tables_row = $db->fetch_array($tables_result)) + { + // Extract tablename + + $tablename = $tables_row[$tablefieldname]; + + // Create sub-array with key tablename + + $tables[$tablename] = array(); + + // Query for a list of indexes of the currently selected table + + $keys_result = $db->query('SHOW INDEX FROM ' . $tablename); + + while($keys_row = $db->fetch_array($keys_result)) + { + // Extract keyname + + $keyname = $keys_row['Key_name']; + + // If there is aleady a key in our tablename-sub-array with has the same name as our key + // OR if the sequence is not one + // then we have more then index-columns for our keyname + + if((isset($tables[$tablename][$keyname]) && $tables[$tablename][$keyname] != '') + || $keys_row['Seq_in_index'] != '1') + { + // If there is no keyname in the tablename-sub-array set ... + + if(!isset($tables[$tablename][$keyname])) + { + // ... then create one + + $tables[$tablename][$keyname] = array(); + } + + // If the keyname-sub-array isn't an array ... + + elseif (!is_array($tables[$tablename][$keyname])) + { + // temporary move columname + + $tmpkeyvalue = $tables[$tablename][$keyname]; + + // unset keyname-key + + unset($tables[$tablename][$keyname]); + + // create new array for keyname-key + + $tables[$tablename][$keyname] = array(); + + // keyindex will be 1 by default, if seq is also 1 we'd better use 0 (this case shouldn't ever occur) + + $keyindex = ($keys_row['Seq_in_index'] == '1') ? '0' : '1'; + + // then move back our tmp columname from above + + $tables[$tablename][$keyname][$keyindex] = $tmpkeyvalue; + + // end unset the variable afterwards + + unset($tmpkeyvalue); + } + + // set columname + + $tables[$tablename][$keyname][$keys_row['Seq_in_index']] = $keys_row['Column_name']; + } + else + { + // set columname + + $tables[$tablename][$keyname] = $keys_row['Column_name']; + } + } + } + + return $tables; +} diff --git a/lib/functions/database/function.remove_remarks.php b/lib/functions/database/function.remove_remarks.php new file mode 100644 index 0000000000..53fe1f7a99 --- /dev/null +++ b/lib/functions/database/function.remove_remarks.php @@ -0,0 +1,38 @@ + 0)) + { + if(substr($lines[$i], 0, 1) != "#") + { + $output.= $lines[$i] . "\n"; + } + else + { + $output.= "\n"; + } + + // Trading a bit of speed for lower mem. use here. + + $lines[$i] = ""; + } + } + + return $output; +} diff --git a/lib/functions/database/function.split_sql_file.php b/lib/functions/database/function.split_sql_file.php new file mode 100644 index 0000000000..60f79be01c --- /dev/null +++ b/lib/functions/database/function.split_sql_file.php @@ -0,0 +1,123 @@ + 0))) + { + // This is the total number of single quotes in the token. + + $total_quotes = preg_match_all("/'/", $tokens[$i], $matches); + + // Counts single quotes that are preceded by an odd number of backslashes, + // which means they're escaped quotes. + + $escaped_quotes = preg_match_all("/(? + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Functions + * @version $Id: function.findDirs.php 2724 2009-06-07 14:18:02Z flo $ + */ + +/** + * Returns an array of found directories + * + * This function checks every found directory if they match either $uid or $gid, if they do + * the found directory is valid. It uses recursive function calls to find subdirectories. Due + * to the recursive behauviour this function may consume much memory. + * + * @param string path The path to start searching in + * @param integer uid The uid which must match the found directories + * @param integer gid The gid which must match the found direcotries + * @param array _fileList recursive transport array !for internal use only! + * @return array Array of found valid pathes + * + * @author Martin Burchert + * @author Manuel Bernhardt + */ + +function findDirs($path, $uid, $gid) +{ + $list = array( + $path + ); + $_fileList = array(); + + while(sizeof($list) > 0) + { + $path = array_pop($list); + $path = makeCorrectDir($path); + $dh = opendir($path); + + if($dh === false) + { + standard_error('cannotreaddir', $path); + return null; + } + else + { + while(false !== ($file = @readdir($dh))) + { + if($file == '.' + && (fileowner($path . '/' . $file) == $uid || filegroup($path . '/' . $file) == $gid)) + { + $_fileList[] = makeCorrectDir($path); + } + + if(is_dir($path . '/' . $file) + && $file != '..' + && $file != '.') + { + array_push($list, $path . '/' . $file); + } + } + + @closedir($dh); + } + } + + return $_fileList; +} diff --git a/lib/functions/filedir/function.isConfigDir.php b/lib/functions/filedir/function.isConfigDir.php new file mode 100644 index 0000000000..ae91f4e134 --- /dev/null +++ b/lib/functions/filedir/function.isConfigDir.php @@ -0,0 +1,54 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Functions + * @version $Id: function.isConfigDir.php 2724 2009-06-07 14:18:02Z flo $ + */ + +/** + * Checks if a given directory is valid for multiple configurations + * or should rather be used as a single file + * + * @param string The dir + * @return bool true if usable as dir, false otherwise + * + * @author Florian Lippert + */ + +function isConfigDir($dir) +{ + if(file_exists($dir)) + { + if(is_dir($dir)) + { + $returnval = true; + } + else + { + $returnval = false; + } + } + else + { + if(substr($dir, -1) == '/') + { + $returnval = true; + } + else + { + $returnval = false; + } + } + + return $returnval; +} diff --git a/lib/functions/filedir/function.makeCorrectDir.php b/lib/functions/filedir/function.makeCorrectDir.php new file mode 100644 index 0000000000..5ad7f6e236 --- /dev/null +++ b/lib/functions/filedir/function.makeCorrectDir.php @@ -0,0 +1,40 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Functions + * @version $Id: function.makeCorrectDir.php 2724 2009-06-07 14:18:02Z flo $ + */ + +/** + * Function which returns a correct dirname, means to add slashes at the beginning and at the end if there weren't some + * + * @param string The dirname + * @return string The corrected dirname + * @author Florian Lippert + */ + +function makeCorrectDir($dir) +{ + if(substr($dir, -1, 1) != '/') + { + $dir.= '/'; + } + + if(substr($dir, 0, 1) != '/') + { + $dir = '/' . $dir; + } + + $dir = makeSecurePath($dir); + return $dir; +} diff --git a/lib/functions/filedir/function.makeCorrectFile.php b/lib/functions/filedir/function.makeCorrectFile.php new file mode 100644 index 0000000000..0ba76eff64 --- /dev/null +++ b/lib/functions/filedir/function.makeCorrectFile.php @@ -0,0 +1,37 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Functions + * @version $Id: function.makeCorrectFile.php 2724 2009-06-07 14:18:02Z flo $ + */ + +/** + * Function which returns a correct filename, means to add a slash at the beginning if there wasn't one + * + * @param string filename the filename + * @return string the corrected filename + * @author Florian Lippert + * @author Michael Russ + * @author Martin Burchert + */ + +function makeCorrectFile($filename) +{ + if(substr($filename, 0, 1) != '/') + { + $filename = '/' . $filename; + } + + $filename = makeSecurePath($filename); + return $filename; +} diff --git a/lib/functions/filedir/function.makePathfield.php b/lib/functions/filedir/function.makePathfield.php new file mode 100644 index 0000000000..c202649ffd --- /dev/null +++ b/lib/functions/filedir/function.makePathfield.php @@ -0,0 +1,70 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Functions + * @version $Id: function.makePathfield.php 2724 2009-06-07 14:18:02Z flo $ + */ + +/** + * Returns a valid html tag for the choosen $fieldType for pathes + * + * @param string path The path to start searching in + * @param integer uid The uid which must match the found directories + * @param integer gid The gid which must match the found direcotries + * @param string fieldType Either "Manual" or "Dropdown" + * @return string The html tag for the choosen $fieldType + * + * @author Martin Burchert + * @author Manuel Bernhardt + */ + +function makePathfield($path, $uid, $gid, $fieldType, $value = '') +{ + global $lng; + $value = str_replace($path, '', $value); + $field = ''; + + if($fieldType == 'Manual') + { + $field = ''; + } + elseif($fieldType == 'Dropdown') + { + $dirList = findDirs($path, $uid, $gid); + + natcasesort($dirList); + + if(sizeof($dirList) > 0) + { + $field = ''; + } + else + { + $field = $lng['panel']['dirsmissing']; + $field.= ''; + } + } + + return $field; +} diff --git a/lib/functions/filedir/function.makeSecurePath.php b/lib/functions/filedir/function.makeSecurePath.php new file mode 100644 index 0000000000..aa939b73e6 --- /dev/null +++ b/lib/functions/filedir/function.makeSecurePath.php @@ -0,0 +1,40 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Functions + * @version $Id: function.makeSecurePath.php 2724 2009-06-07 14:18:02Z flo $ + */ + +/** + * Function which returns a secure path, means to remove all multiple dots and slashes + * + * @param string The path + * @return string The corrected path + * @author Florian Lippert + */ + +function makeSecurePath($path) +{ + $search = Array( + '#/+#', + '#\.+#', + '#\0+#' + ); + $replace = Array( + '/', + '.', + '' + ); + $path = preg_replace($search, $replace, $path); + return $path; +} diff --git a/lib/functions/filedir/function.mkDirWithCorrectOwnership.php b/lib/functions/filedir/function.mkDirWithCorrectOwnership.php new file mode 100644 index 0000000000..1b8e0f50aa --- /dev/null +++ b/lib/functions/filedir/function.mkDirWithCorrectOwnership.php @@ -0,0 +1,84 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Functions + * @version $Id: function.mkDirWithCorrectOwnership.php 2724 2009-06-07 14:18:02Z flo $ + */ + +/** + * Creates a directory below a users homedir and sets all directories, + * which had to be created below with correct Owner/Group + * (Copied from cron_tasks.php:rev1189 as we'll need this more often in future) + * + * @param string The homedir of the user + * @param string The dir which should be created + * @param int The uid of the user + * @param int The gid of the user + * @return bool true if everything went okay, false if something went wrong + * + * @author Florian Lippert + * @author Martin Burchert + */ + +function mkDirWithCorrectOwnership($homeDir, $dirToCreate, $uid, $gid) +{ + $returncode = true; + + if($homeDir != '' + && $dirToCreate != '') + { + $homeDir = makeCorrectDir($homeDir); + $dirToCreate = makeCorrectDir($dirToCreate); + + if(substr($dirToCreate, 0, strlen($homeDir)) == $homeDir) + { + $subdir = substr($dirToCreate, strlen($homeDir)); + } + else + { + $subdir = $dirToCreate; + } + + $subdir = makeCorrectDir($subdir); + $subdirlen = strlen($subdir); + $subdirs = array(); + array_push($subdirs, $dirToCreate); + $offset = 0; + + while($offset < $subdirlen) + { + $offset = strpos($subdir, '/', $offset); + $subdirelem = substr($subdir, 0, $offset); + $offset++; + array_push($subdirs, makeCorrectDir($homeDir . $subdirelem)); + } + + $subdirs = array_unique($subdirs); + sort($subdirs); + foreach($subdirs as $sdir) + { + if(!is_dir($sdir)) + { + $sdir = makeCorrectDir($sdir); + safe_exec('mkdir -p ' . escapeshellarg($sdir)); + safe_exec('chown -R ' . (int)$uid . ':' . (int)$gid . ' ' . escapeshellarg($sdir)); + } + } + } + else + { + $returncode = false; + } + + return $returncode; +} diff --git a/lib/functions/filedir/function.safe_exec.php b/lib/functions/filedir/function.safe_exec.php new file mode 100644 index 0000000000..984c04d19f --- /dev/null +++ b/lib/functions/filedir/function.safe_exec.php @@ -0,0 +1,114 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Functions + * @version $Id: function.safe_exec.php 2724 2009-06-07 14:18:02Z flo $ + */ + +/** + * Wrapper around the exec command. + * + * @author Martin Burchert + * @version 1.2 + * @param string exec_string String to be executed + * @return string The result of the exec() + * + * History: + * 1.0 : Initial Version + * 1.1 : Added |,&,>,<,`,*,$,~,? as security breaks. + * 1.2 : Removed * as security break + */ + +function safe_exec($exec_string, &$return_value = false) +{ + global $settings; + + // + // define allowed system commands + // + + $allowed_commands = array( + 'touch', + 'chown', + 'mkdir', + 'webalizer', + 'cp', + 'du', + 'chmod', + 'chattr', + $settings['system']['apachereload_command'], + $settings['system']['bindreload_command'], + $settings['dkim']['dkimrestart_command'], + $settings['system']['awstats_updateall_command'], + 'openssl', + 'unzip', + 'php' + ); + + // + // check for ; in execute command + // + + if((stristr($exec_string, ';')) + or (stristr($exec_string, '|')) + or (stristr($exec_string, '&')) + or (stristr($exec_string, '>')) + or (stristr($exec_string, '<')) + or (stristr($exec_string, '`')) + or (stristr($exec_string, '$')) + or (stristr($exec_string, '~')) + or (stristr($exec_string, '?'))) + { + die('SECURITY CHECK FAILED!' . "\n" . 'The execute string "' . htmlspecialchars($exec_string) . '" is a possible security risk!' . "\n" . 'Please check your whole server for security problems by hand!' . "\n"); + } + + // + // check if command is allowed here + // + + $ok = false; + foreach($allowed_commands as $allowed_command) + { + if(strpos($exec_string, $allowed_command) == 0 + && (strlen($exec_string) === ($allowed_command_pos = strlen($allowed_command)) || substr($exec_string, $allowed_command_pos, 1) === ' ')) + { + $ok = true; + } + } + + if(!$ok) + { + die('SECURITY CHECK FAILED!' . "\n" . 'Your command "' . htmlspecialchars($exec_string) . '" is not allowed!' . "\n" . 'Please check your whole server for security problems by hand!' . "\n"); + } + + // + // execute the command and return output + // + // --- martin @ 08.08.2005 ------------------------------------------------------- + // fixing usage of uninitialised variable + + $return = ''; + + // ------------------------------------------------------------------------------- + + if($return_value == false) + { + exec($exec_string, $return); + } + else + { + exec($exec_string, $return, $return_value); + } + + return $return; +} diff --git a/lib/functions/formfields/bool/function.getFormFieldDataBool.php b/lib/functions/formfields/bool/function.getFormFieldDataBool.php new file mode 100644 index 0000000000..097e4b4ac6 --- /dev/null +++ b/lib/functions/formfields/bool/function.getFormFieldDataBool.php @@ -0,0 +1,30 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Functions + * @version $Id: function.getFormFieldDataBool.php 2724 2009-06-07 14:18:02Z flo $ + */ + +function getFormFieldDataBool($fieldname, $fielddata, $input) +{ + if(isset($input[$fieldname]) && ($input[$fieldname] === '1' || $input[$fieldname] === 1 || $input[$fieldname] === true || strtolower($input[$fieldname]) === 'yes' || strtolower($input[$fieldname]) === 'ja')) + { + $newfieldvalue = '1'; + } + else + { + $newfieldvalue = '0'; + } + + return $newfieldvalue; +} diff --git a/lib/functions/formfields/bool/function.getFormFieldOutputBool.php b/lib/functions/formfields/bool/function.getFormFieldOutputBool.php new file mode 100644 index 0000000000..e05fdfab9a --- /dev/null +++ b/lib/functions/formfields/bool/function.getFormFieldOutputBool.php @@ -0,0 +1,24 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Functions + * @version $Id: function.getFormFieldOutputBool.php 2724 2009-06-07 14:18:02Z flo $ + */ + +function getFormFieldOutputBool($fieldname, $fielddata) +{ + $label = $fielddata['label']; + $boolswitch = makeYesNo($fieldname, '1', '0', $fielddata['value']); + eval("\$returnvalue = \"" . getTemplate("formfields/bool", true) . "\";"); + return $returnvalue; +} diff --git a/lib/functions/formfields/bool/function.validateFormFieldBool.php b/lib/functions/formfields/bool/function.validateFormFieldBool.php new file mode 100644 index 0000000000..e90b00bb76 --- /dev/null +++ b/lib/functions/formfields/bool/function.validateFormFieldBool.php @@ -0,0 +1,28 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Functions + * @version $Id: function.validateFormFieldBool.php 2724 2009-06-07 14:18:02Z flo $ + */ + +function validateFormFieldBool($fieldname, $fielddata, $newfieldvalue) +{ + if($newfieldvalue === '1' || $newfieldvalue === 1 || $newfieldvalue === true || strtolower($newfieldvalue) === 'yes' || strtolower($newfieldvalue) === 'ja' || $newfieldvalue === '0' || $newfieldvalue === 0 || $newfieldvalue === false || strtolower($newfieldvalue) === 'no' || strtolower($newfieldvalue) === 'nein' || strtolower($newfieldvalue) === '') + { + return true; + } + else + { + return 'noboolean'; + } +} diff --git a/lib/functions/formfields/constant.formfields.php b/lib/functions/formfields/constant.formfields.php new file mode 100644 index 0000000000..41de585a53 --- /dev/null +++ b/lib/functions/formfields/constant.formfields.php @@ -0,0 +1,23 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Functions + * @version $Id: constant.formfields.php 2724 2009-06-07 14:18:02Z flo $ + */ + +if(!defined('FORMFIELDS_PLAUSIBILITY_CHECK_OK')) + define('FORMFIELDS_PLAUSIBILITY_CHECK_OK', 0); +if(!defined('FORMFIELDS_PLAUSIBILITY_CHECK_ERROR')) + define('FORMFIELDS_PLAUSIBILITY_CHECK_ERROR', 1); +if(!defined('FORMFIELDS_PLAUSIBILITY_CHECK_QUESTION')) + define('FORMFIELDS_PLAUSIBILITY_CHECK_QUESTION', 2); diff --git a/lib/functions/formfields/date/function.getFormFieldOutputDate.php b/lib/functions/formfields/date/function.getFormFieldOutputDate.php new file mode 100644 index 0000000000..dc1158cb40 --- /dev/null +++ b/lib/functions/formfields/date/function.getFormFieldOutputDate.php @@ -0,0 +1,26 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Functions + * @version $Id: function.getFormFieldOutputDate.php 2735 2009-11-06 09:52:59Z flo $ + */ + +function getFormFieldOutputDate($fieldname, $fielddata) +{ + if(isset($fielddata['date_timestamp']) && $fielddata['date_timestamp'] === true) + { + $fielddata['value'] = date('Y-m-d', $fielddata['value']); + } + + return getFormFieldOutputString($fieldname, $fielddata); +} diff --git a/lib/functions/formfields/date/function.manipulateFormFieldDataDate.php b/lib/functions/formfields/date/function.manipulateFormFieldDataDate.php new file mode 100644 index 0000000000..50ad3a8075 --- /dev/null +++ b/lib/functions/formfields/date/function.manipulateFormFieldDataDate.php @@ -0,0 +1,26 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Functions + * @version $Id: function.manipulateFormFieldDataDate.php 2735 2009-11-06 09:52:59Z flo $ + */ + +function manipulateFormFieldDataDate($fieldname, $fielddata, $newfieldvalue) +{ + if(isset($fielddata['date_timestamp']) && $fielddata['date_timestamp'] === true) + { + $newfieldvalue = strtotime($newfieldvalue); + } + + return $newfieldvalue; +} diff --git a/lib/functions/formfields/date/function.validateFormFieldDate.php b/lib/functions/formfields/date/function.validateFormFieldDate.php new file mode 100644 index 0000000000..8f410d9116 --- /dev/null +++ b/lib/functions/formfields/date/function.validateFormFieldDate.php @@ -0,0 +1,30 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Functions + * @version $Id: function.validateFormFieldDate.php 2735 2009-11-06 09:52:59Z flo $ + */ + +function validateFormFieldDate($fieldname, $fielddata, $newfieldvalue) +{ + if($newfieldvalue == '0000-00-00' || preg_match('/^(19|20)\d\d[-](0[1-9]|1[012])[-](0[1-9]|[12][0-9]|3[01])$/', $newfieldvalue)) + { + $returnvalue = true; + } + else + { + $returnvalue = false; + } + + return $returnvalue; +} diff --git a/lib/functions/formfields/function.buildForm.php b/lib/functions/formfields/function.buildForm.php new file mode 100644 index 0000000000..ceb921747a --- /dev/null +++ b/lib/functions/formfields/function.buildForm.php @@ -0,0 +1,50 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Functions + * @version $Id: function.buildForm.php 2724 2009-06-07 14:18:02Z flo $ + */ + +function buildForm($form) +{ + $fields = ''; + + if(validateFormDefinition($form)) + { + foreach($form['groups'] as $groupname => $groupdetails) + { + if(isset($groupdetails['title']) && $groupdetails['title'] != '') + { + $fields .= getFormGroupOutput($groupname, $groupdetails); + } + + if(validateFieldDefinition($groupdetails)) + { + // Prefetch form fields + foreach($groupdetails['fields'] as $fieldname => $fielddetails) + { + $groupdetails['fields'][$fieldname] = array_merge_prefix($fielddetails, $fielddetails['type'], prefetchFormFieldData($fieldname, $fielddetails)); + $form['groups'][$groupname]['fields'][$fieldname] = $groupdetails['fields'][$fieldname]; + } + + // Collect form field output + foreach($groupdetails['fields'] as $fieldname => $fielddetails) + { + $fields .= getFormFieldOutput($fieldname, $fielddetails); + } + } + } + } + + return $fields; +} diff --git a/lib/functions/formfields/function.checkPlausibilityFormField.php b/lib/functions/formfields/function.checkPlausibilityFormField.php new file mode 100644 index 0000000000..d8b7e9316e --- /dev/null +++ b/lib/functions/formfields/function.checkPlausibilityFormField.php @@ -0,0 +1,30 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Functions + * @version $Id: function.checkPlausibilityFormField.php 2724 2009-06-07 14:18:02Z flo $ + */ + +function checkPlausibilityFormField($fieldname, $fielddata, $newfieldvalue, $allnewfieldvalues) +{ + $returnvalue = ''; + if(is_array($fielddata) && isset($fielddata['plausibility_check_method']) && $fielddata['plausibility_check_method'] != '' && function_exists($fielddata['plausibility_check_method'])) + { + $returnvalue = call_user_func($fielddata['plausibility_check_method'], $fieldname, $fielddata, $newfieldvalue, $allnewfieldvalues); + } + else + { + $returnvalue = false; + } + return $returnvalue; +} diff --git a/lib/functions/formfields/function.getFormFieldData.php b/lib/functions/formfields/function.getFormFieldData.php new file mode 100644 index 0000000000..c910712e45 --- /dev/null +++ b/lib/functions/formfields/function.getFormFieldData.php @@ -0,0 +1,41 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Functions + * @version $Id: function.getFormFieldData.php 2724 2009-06-07 14:18:02Z flo $ + */ + +function getFormFieldData($fieldname, $fielddata, $input) +{ + if(is_array($fielddata) && isset($fielddata['type']) && $fielddata['type'] != '' && function_exists('getFormFieldData' . ucfirst($fielddata['type']))) + { + $newfieldvalue = call_user_func('getFormFieldData' . ucfirst($fielddata['type']), $fieldname, $fielddata, &$input); + } + else + { + if(isset($input[$fieldname])) + { + $newfieldvalue = $input[$fieldname]; + } + elseif(isset($fielddata['default'])) + { + $newfieldvalue = $fielddata['default']; + } + else + { + $newfieldvalue = false; + } + } + + return $newfieldvalue; +} diff --git a/lib/functions/formfields/function.getFormFieldOutput.php b/lib/functions/formfields/function.getFormFieldOutput.php new file mode 100644 index 0000000000..1d44f81e35 --- /dev/null +++ b/lib/functions/formfields/function.getFormFieldOutput.php @@ -0,0 +1,48 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Functions + * @version $Id: function.getFormFieldOutput.php 2733 2009-11-06 09:32:00Z flo $ + */ + +function getFormFieldOutput($fieldname, $fielddata) +{ + $returnvalue = ''; + if(is_array($fielddata) && isset($fielddata['type']) && $fielddata['type'] != '' && function_exists('getFormFieldOutput' . ucfirst($fielddata['type']))) + { + if(isset($fielddata['label']) && is_array($fielddata['label'])) + { + if(isset($fielddata['label']['title']) && isset($fielddata['label']['description'])) + { + $fielddata['label'] = '' . $fielddata['label']['title'] . '
    ' . $fielddata['label']['description']; + } + else + { + $fielddata['label'] = implode(' ', $fielddata['label']); + } + } + if(!isset($fielddata['value'])) + { + if(isset($fielddata['default'])) + { + $fielddata['value'] = $fielddata['default']; + } + else + { + $fielddata['value'] = null; + } + } + $returnvalue = call_user_func('getFormFieldOutput' . ucfirst($fielddata['type']), $fieldname, $fielddata); + } + return $returnvalue; +} diff --git a/lib/functions/formfields/function.getFormGroupOutput.php b/lib/functions/formfields/function.getFormGroupOutput.php new file mode 100644 index 0000000000..82268d3612 --- /dev/null +++ b/lib/functions/formfields/function.getFormGroupOutput.php @@ -0,0 +1,23 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Functions + * @version $Id: function.getFormGroupOutput.php 2724 2009-06-07 14:18:02Z flo $ + */ + +function getFormGroupOutput($groupname, $groupdetails) +{ + global $lng; + eval("\$group = \"" . getTemplate("settings/settings_group") . "\";"); + return $group; +} diff --git a/lib/functions/formfields/function.manipulateFormFieldData.php b/lib/functions/formfields/function.manipulateFormFieldData.php new file mode 100644 index 0000000000..fb87e756d8 --- /dev/null +++ b/lib/functions/formfields/function.manipulateFormFieldData.php @@ -0,0 +1,26 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Functions + * @version $Id: function.manipulateFormFieldData.php 2735 2009-11-06 09:52:59Z flo $ + */ + +function manipulateFormFieldData($fieldname, $fielddata, $newfieldvalue) +{ + if(is_array($fielddata) && isset($fielddata['type']) && $fielddata['type'] != '' && function_exists('manipulateFormFieldData' . ucfirst($fielddata['type']))) + { + $newfieldvalue = call_user_func('manipulateFormFieldData' . ucfirst($fielddata['type']), $fieldname, $fielddata, $newfieldvalue); + } + + return $newfieldvalue; +} diff --git a/lib/functions/formfields/function.prefetchFormFieldData.php b/lib/functions/formfields/function.prefetchFormFieldData.php new file mode 100644 index 0000000000..6410aeea54 --- /dev/null +++ b/lib/functions/formfields/function.prefetchFormFieldData.php @@ -0,0 +1,26 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Functions + * @version $Id: function.prefetchFormFieldData.php 2724 2009-06-07 14:18:02Z flo $ + */ + +function prefetchFormFieldData($fieldname, $fielddata) +{ + $returnvalue = array(); + if(is_array($fielddata) && isset($fielddata['type']) && $fielddata['type'] != '' && function_exists('prefetchFormFieldData' . ucfirst($fielddata['type']))) + { + $returnvalue = call_user_func('prefetchFormFieldData' . ucfirst($fielddata['type']), $fieldname, $fielddata); + } + return $returnvalue; +} diff --git a/lib/functions/formfields/function.processForm.php b/lib/functions/formfields/function.processForm.php new file mode 100644 index 0000000000..dc50b34fae --- /dev/null +++ b/lib/functions/formfields/function.processForm.php @@ -0,0 +1,143 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Functions + * @version $Id: function.processForm.php 2733 2009-11-06 09:32:00Z flo $ + */ + +function processForm($form, $input, $url_params = array()) +{ + if(validateFormDefinition($form)) + { + $submitted_fields = array(); + $changed_fields = array(); + $saved_fields = array(); + + foreach($form['groups'] as $groupname => $groupdetails) + { + if(validateFieldDefinition($groupdetails)) + { + // Prefetch form fields + foreach($groupdetails['fields'] as $fieldname => $fielddetails) + { + $groupdetails['fields'][$fieldname] = array_merge_prefix($fielddetails, $fielddetails['type'], prefetchFormFieldData($fieldname, $fielddetails)); + $form['groups'][$groupname]['fields'][$fieldname] = $groupdetails['fields'][$fieldname]; + } + } + } + + foreach($form['groups'] as $groupname => $groupdetails) + { + if(validateFieldDefinition($groupdetails)) + { + // Validate fields + foreach($groupdetails['fields'] as $fieldname => $fielddetails) + { + $newfieldvalue = getFormFieldData($fieldname, $fielddetails, &$input); + + if($newfieldvalue != $fielddetails['value']) + { + if(($error = validateFormField($fieldname, $fielddetails, $newfieldvalue)) !== true) + { + standard_error($error, $fieldname); + } + else + { + $changed_fields[$fieldname] = $newfieldvalue; + } + } + + $submitted_fields[$fieldname] = $newfieldvalue; + } + } + } + + foreach($form['groups'] as $groupname => $groupdetails) + { + if(validateFieldDefinition($groupdetails)) + { + // Check fields for plausibility + foreach($groupdetails['fields'] as $fieldname => $fielddetails) + { + if(($plausibility_check = checkPlausibilityFormField($fieldname, $fielddetails, $submitted_fields[$fieldname], $submitted_fields)) !== false) + { + if(is_array($plausibility_check) && isset($plausibility_check[0])) + { + if($plausibility_check[0] == FORMFIELDS_PLAUSIBILITY_CHECK_OK) + { + // Nothing to do here, everything's okay + } + elseif($plausibility_check[0] == FORMFIELDS_PLAUSIBILITY_CHECK_ERROR) + { + unset($plausibility_check[0]); + $error = $plausibility_check[1]; + unset($plausibility_check[1]); + $targetname = implode(' ', $plausibility_check); + standard_error($error, $targetname); + } + elseif($plausibility_check[0] == FORMFIELDS_PLAUSIBILITY_CHECK_QUESTION) + { + unset($plausibility_check[0]); + $question = $plausibility_check[1]; + unset($plausibility_check[1]); + $targetname = implode(' ', $plausibility_check); + if(!isset($input[$question])) + { + if(is_array($url_params) && isset($url_params['filename'])) + { + $filename = $url_params['filename']; + unset($url_params['filename']); + } + else + { + $filename = ''; + } + ask_yesno($question, $filename, array_merge($url_params, $submitted_fields, array($question => $question)), $targetname); + } + } + else + { + standard_error('plausibilitychecknotunderstood'); + } + } + } + } + } + } + + foreach($form['groups'] as $groupname => $groupdetails) + { + if(validateFieldDefinition($groupdetails)) + { + // Save fields + foreach($groupdetails['fields'] as $fieldname => $fielddetails) + { + if(isset($changed_fields[$fieldname])) + { + if(($saved_field = saveFormField($fieldname, $fielddetails, manipulateFormFieldData($fieldname, $fielddetails, $changed_fields[$fieldname]))) !== false) + { + $saved_fields = array_merge($saved_fields, $saved_field); + } + else + { + standard_error('errorwhensaving', $fieldname); + } + } + } + } + } + + // Save form + return saveForm($form, $saved_fields); + } +} diff --git a/lib/functions/formfields/function.returnField.php b/lib/functions/formfields/function.returnField.php new file mode 100644 index 0000000000..dcc0115525 --- /dev/null +++ b/lib/functions/formfields/function.returnField.php @@ -0,0 +1,21 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Functions + * @version $Id: function.returnField.php 2735 2009-11-06 09:52:59Z flo $ + */ + +function returnField($fieldname, $fielddata, $newfieldvalue) +{ + return array($fieldname => $newfieldvalue); +} diff --git a/lib/functions/formfields/function.saveForm.php b/lib/functions/formfields/function.saveForm.php new file mode 100644 index 0000000000..e093e9c4b2 --- /dev/null +++ b/lib/functions/formfields/function.saveForm.php @@ -0,0 +1,34 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Functions + * @version $Id: function.saveForm.php 2724 2009-06-07 14:18:02Z flo $ + */ + +function saveForm($fielddata, $newfieldvalue) +{ + $returnvalue = ''; + if(is_array($fielddata) && isset($fielddata['save_method']) && $fielddata['save_method'] != '' && function_exists($fielddata['save_method'])) + { + $returnvalue = call_user_func($fielddata['save_method'], $fielddata, $newfieldvalue); + } + elseif(is_array($fielddata) && !isset($fielddata['save_method'])) + { + $returnvalue = true; + } + else + { + $returnvalue = false; + } + return $returnvalue; +} diff --git a/lib/functions/formfields/function.saveFormField.php b/lib/functions/formfields/function.saveFormField.php new file mode 100644 index 0000000000..4419d77b63 --- /dev/null +++ b/lib/functions/formfields/function.saveFormField.php @@ -0,0 +1,34 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Functions + * @version $Id: function.saveFormField.php 2724 2009-06-07 14:18:02Z flo $ + */ + +function saveFormField($fieldname, $fielddata, $newfieldvalue) +{ + $returnvalue = ''; + if(is_array($fielddata) && isset($fielddata['save_method']) && $fielddata['save_method'] != '' && function_exists($fielddata['save_method'])) + { + $returnvalue = call_user_func($fielddata['save_method'], $fieldname, $fielddata, $newfieldvalue); + } + elseif(is_array($fielddata) && !isset($fielddata['save_method'])) + { + $returnvalue = array(); + } + else + { + $returnvalue = false; + } + return $returnvalue; +} diff --git a/lib/functions/formfields/function.validateFieldDefinition.php b/lib/functions/formfields/function.validateFieldDefinition.php new file mode 100644 index 0000000000..b93005eb37 --- /dev/null +++ b/lib/functions/formfields/function.validateFieldDefinition.php @@ -0,0 +1,28 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Functions + * @version $Id: function.validateFieldDefinition.php 2724 2009-06-07 14:18:02Z flo $ + */ + +function validateFieldDefinition($field) +{ + $returnvalue = false; + + if(is_array($field) && !empty($field) && isset($field['fields']) && is_array($field['fields']) && !empty($field['fields'])) + { + $returnvalue = true; + } + + return $returnvalue; +} diff --git a/lib/functions/formfields/function.validateFormDefinition.php b/lib/functions/formfields/function.validateFormDefinition.php new file mode 100644 index 0000000000..6b56bac63e --- /dev/null +++ b/lib/functions/formfields/function.validateFormDefinition.php @@ -0,0 +1,28 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Functions + * @version $Id: function.validateFormDefinition.php 2724 2009-06-07 14:18:02Z flo $ + */ + +function validateFormDefinition($form) +{ + $returnvalue = false; + + if(is_array($form) && !empty($form) && isset($form['groups']) && is_array($form['groups']) && !empty($form['groups'])) + { + $returnvalue = true; + } + + return $returnvalue; +} diff --git a/lib/functions/formfields/function.validateFormField.php b/lib/functions/formfields/function.validateFormField.php new file mode 100644 index 0000000000..5ef73c821e --- /dev/null +++ b/lib/functions/formfields/function.validateFormField.php @@ -0,0 +1,30 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Functions + * @version $Id: function.validateFormField.php 2724 2009-06-07 14:18:02Z flo $ + */ + +function validateFormField($fieldname, $fielddata, $newfieldvalue) +{ + $returnvalue = ''; + if(is_array($fielddata) && isset($fielddata['type']) && $fielddata['type'] != '' && function_exists('validateFormField' . ucfirst($fielddata['type']))) + { + $returnvalue = call_user_func('validateFormField' . ucfirst($fielddata['type']), $fieldname, $fielddata, $newfieldvalue); + } + else + { + $returnvalue = 'validation method not found'; + } + return $returnvalue; +} diff --git a/lib/functions/formfields/hidden/function.getFormFieldOutputHidden.php b/lib/functions/formfields/hidden/function.getFormFieldOutputHidden.php new file mode 100644 index 0000000000..9c4a532601 --- /dev/null +++ b/lib/functions/formfields/hidden/function.getFormFieldOutputHidden.php @@ -0,0 +1,30 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Functions + * @version $Id: function.getFormFieldOutputHidden.php 2733 2009-11-06 09:32:00Z flo $ + */ + +function getFormFieldOutputHidden($fieldname, $fielddata) +{ + $returnvalue = ''; + + if(isset($fielddata['label']) && $fielddata['label'] != '') + { + $label = $fielddata['label']; + $value = htmlentities($fielddata['value']); + eval("\$returnvalue .= \"" . getTemplate("formfields/hidden", true) . "\";"); + } + + return $returnvalue; +} diff --git a/lib/functions/formfields/hidden/function.validateFormFieldHidden.php b/lib/functions/formfields/hidden/function.validateFormFieldHidden.php new file mode 100644 index 0000000000..8d9a0b04c4 --- /dev/null +++ b/lib/functions/formfields/hidden/function.validateFormFieldHidden.php @@ -0,0 +1,29 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Functions + * @version $Id: function.validateFormFieldHidden.php 2733 2009-11-06 09:32:00Z flo $ + */ + +function validateFormFieldHidden($fieldname, $fielddata, $newfieldvalue) +{ + if($newfieldvalue === $fielddata['value']) + { + return true; + } + else + { + // TODO: Throw some error that actually makes sense - false would just throw unknown error + return false; + } +} diff --git a/lib/functions/formfields/int/function.getFormFieldDataInt.php b/lib/functions/formfields/int/function.getFormFieldDataInt.php new file mode 100644 index 0000000000..63530dde10 --- /dev/null +++ b/lib/functions/formfields/int/function.getFormFieldDataInt.php @@ -0,0 +1,30 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Functions + * @version $Id: function.getFormFieldDataInt.php 2724 2009-06-07 14:18:02Z flo $ + */ + +function getFormFieldDataInt($fieldname, $fielddata, $input) +{ + if(isset($input[$fieldname])) + { + $newfieldvalue = (int)$input[$fieldname]; + } + else + { + $newfieldvalue = (int)$fielddata['default']; + } + + return $newfieldvalue; +} diff --git a/lib/functions/formfields/int/function.getFormFieldOutputInt.php b/lib/functions/formfields/int/function.getFormFieldOutputInt.php new file mode 100644 index 0000000000..41450760b0 --- /dev/null +++ b/lib/functions/formfields/int/function.getFormFieldOutputInt.php @@ -0,0 +1,21 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Functions + * @version $Id: function.getFormFieldOutputInt.php 2724 2009-06-07 14:18:02Z flo $ + */ + +function getFormFieldOutputInt($fieldname, $fielddata) +{ + return getFormFieldOutputString($fieldname, $fielddata); +} diff --git a/lib/functions/formfields/int/function.validateFormFieldInt.php b/lib/functions/formfields/int/function.validateFormFieldInt.php new file mode 100644 index 0000000000..b3b78448ce --- /dev/null +++ b/lib/functions/formfields/int/function.validateFormFieldInt.php @@ -0,0 +1,31 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Functions + * @version $Id: function.validateFormFieldInt.php 2724 2009-06-07 14:18:02Z flo $ + */ + +function validateFormFieldInt($fieldname, $fielddata, $newfieldvalue) +{ + if(isset($fielddata['int_min']) && (int)$newfieldvalue < (int)$fielddata['int_min']) + { + return('intvaluetoolow'); + } + + if(isset($fielddata['int_max']) && (int)$newfieldvalue > (int)$fielddata['int_max']) + { + return('intvaluetoohigh'); + } + + return true; +} diff --git a/lib/functions/formfields/label/function.getFormFieldOutputLabel.php b/lib/functions/formfields/label/function.getFormFieldOutputLabel.php new file mode 100644 index 0000000000..199a9f100b --- /dev/null +++ b/lib/functions/formfields/label/function.getFormFieldOutputLabel.php @@ -0,0 +1,23 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Functions + * @version $Id: function.getFormFieldOutputLabel.php 2724 2009-06-07 14:18:02Z flo $ + */ + +function getFormFieldOutputLabel($fieldname, $fielddata) +{ + $label = $fielddata['label']; + eval("\$returnvalue = \"" . getTemplate("formfields/label", true) . "\";"); + return $returnvalue; +} diff --git a/lib/functions/formfields/label/function.validateFormFieldLabel.php b/lib/functions/formfields/label/function.validateFormFieldLabel.php new file mode 100644 index 0000000000..ad0ba436a7 --- /dev/null +++ b/lib/functions/formfields/label/function.validateFormFieldLabel.php @@ -0,0 +1,24 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Functions + * @version $Id: function.validateFormFieldLabel.php 2733 2009-11-06 09:32:00Z flo $ + */ + +function validateFormFieldLabel($fieldname, $fielddata, $newfieldvalue) +{ + // Return false, in case we happen to have that field in our $input array, so someone doesn't get the chance to save crap to our database + // TODO: Throw some error that actually makes sense - false would just throw unknown error + + return false; +} diff --git a/lib/functions/formfields/option/function.getFormFieldDataOption.php b/lib/functions/formfields/option/function.getFormFieldDataOption.php new file mode 100644 index 0000000000..68ab011c53 --- /dev/null +++ b/lib/functions/formfields/option/function.getFormFieldDataOption.php @@ -0,0 +1,35 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Functions + * @version $Id: function.getFormFieldDataOption.php 2724 2009-06-07 14:18:02Z flo $ + */ + +function getFormFieldDataOption($fieldname, $fielddata, $input) +{ + if(isset($input[$fieldname])) + { + $newfieldvalue = $input[$fieldname]; + } + else + { + $newfieldvalue = $fielddata['default']; + } + + if(is_array($newfieldvalue)) + { + $newfieldvalue = implode(',', $newfieldvalue); + } + + return $newfieldvalue; +} diff --git a/lib/functions/formfields/option/function.getFormFieldOutputOption.php b/lib/functions/formfields/option/function.getFormFieldOutputOption.php new file mode 100644 index 0000000000..50b00a9e57 --- /dev/null +++ b/lib/functions/formfields/option/function.getFormFieldOutputOption.php @@ -0,0 +1,45 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Functions + * @version $Id: function.getFormFieldOutputOption.php 2724 2009-06-07 14:18:02Z flo $ + */ + +function getFormFieldOutputOption($fieldname, $fielddata) +{ + $returnvalue = ''; + + if(isset($fielddata['option_options']) && is_array($fielddata['option_options']) && !empty($fielddata['option_options'])) + { + if(isset($fielddata['option_mode']) && $fielddata['option_mode'] == 'multiple') + { + $multiple = true; + $fielddata['value'] = explode(',', $fielddata['value']); + } + else + { + $multiple = false; + } + + $label = $fielddata['label']; + $options_array = $fielddata['option_options']; + $options = ''; + foreach($options_array as $value => $title) + { + $options .= makeoption($title, $value, $fielddata['value']); + } + eval("\$returnvalue = \"" . getTemplate("formfields/option", true) . "\";"); + } + + return $returnvalue; +} diff --git a/lib/functions/formfields/option/function.prefetchFormFieldDataOption.php b/lib/functions/formfields/option/function.prefetchFormFieldDataOption.php new file mode 100644 index 0000000000..75ffd2b2c5 --- /dev/null +++ b/lib/functions/formfields/option/function.prefetchFormFieldDataOption.php @@ -0,0 +1,28 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Functions + * @version $Id: function.prefetchFormFieldDataOption.php 2724 2009-06-07 14:18:02Z flo $ + */ + +function prefetchFormFieldDataOption($fieldname, $fielddata) +{ + $returnvalue = array(); + + if((!isset($fielddata['option_options']) || !is_array($fielddata['option_options']) || empty($fielddata['option_options'])) && (isset($fielddata['option_options_method']) && function_exists($fielddata['option_options_method']))) + { + $returnvalue['options'] = call_user_func($fielddata['option_options_method']); + } + + return $returnvalue; +} diff --git a/lib/functions/formfields/option/function.validateFormFieldOption.php b/lib/functions/formfields/option/function.validateFormFieldOption.php new file mode 100644 index 0000000000..212cc30f39 --- /dev/null +++ b/lib/functions/formfields/option/function.validateFormFieldOption.php @@ -0,0 +1,43 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Functions + * @version $Id: function.validateFormFieldOption.php 2724 2009-06-07 14:18:02Z flo $ + */ + +function validateFormFieldOption($fieldname, $fielddata, $newfieldvalue) +{ + $returnvalue = true; + + if(isset($fielddata['option_mode']) && $fielddata['option_mode'] == 'multiple') + { + $options = explode(',', $newfieldvalue); + foreach($options as $option) + { + $returnvalue = ($returnvalue && isset($fielddata['option_options'][$option])); + } + } + else + { + $returnvalue = isset($fielddata['option_options'][$newfieldvalue]); + } + + if($returnvalue === true) + { + return true; + } + else + { + return 'not in option'; + } +} diff --git a/lib/functions/formfields/string/function.getFormFieldOutputString.php b/lib/functions/formfields/string/function.getFormFieldOutputString.php new file mode 100644 index 0000000000..5c81e152ba --- /dev/null +++ b/lib/functions/formfields/string/function.getFormFieldOutputString.php @@ -0,0 +1,24 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Functions + * @version $Id: function.getFormFieldOutputString.php 2724 2009-06-07 14:18:02Z flo $ + */ + +function getFormFieldOutputString($fieldname, $fielddata) +{ + $label = $fielddata['label']; + $value = htmlentities($fielddata['value']); + eval("\$returnvalue = \"" . getTemplate("formfields/string", true) . "\";"); + return $returnvalue; +} diff --git a/lib/functions/formfields/string/function.validateFormFieldString.php b/lib/functions/formfields/string/function.validateFormFieldString.php new file mode 100644 index 0000000000..5cf1f21dca --- /dev/null +++ b/lib/functions/formfields/string/function.validateFormFieldString.php @@ -0,0 +1,99 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Functions + * @version $Id: function.validateFormFieldString.php 2724 2009-06-07 14:18:02Z flo $ + */ + +function validateFormFieldString($fieldname, $fielddata, $newfieldvalue) +{ + if(isset($fielddata['string_delimiter']) && $fielddata['string_delimiter'] != '') + { + $newfieldvalues = explode($fielddata['string_delimiter'], $newfieldvalue); + unset($fielddata['string_delimiter']); + + $returnvalue = true; + foreach($newfieldvalues as $single_newfieldvalue) + { + $single_returnvalue = validateFormFieldString($fieldname, $fielddata, $single_newfieldvalue); + if($single_returnvalue !== true) + { + $returnvalue = $single_returnvalue; + break; + } + } + } + else + { + $returnvalue = false; + + if(isset($fielddata['string_type']) && $fielddata['string_type'] == 'mail') + { + $returnvalue = (filter_var($newfieldvalue, FILTER_VALIDATE_EMAIL) == $newfieldvalue); + } + elseif(isset($fielddata['string_type']) && $fielddata['string_type'] == 'url') + { + $returnvalue = validateUrl($newfieldvalue); + } + elseif(isset($fielddata['string_type']) && $fielddata['string_type'] == 'dir') + { + $returnvalue = ($newfieldvalue == makeCorrectDir($newfieldvalue)); + } + elseif(isset($fielddata['string_type']) && $fielddata['string_type'] == 'file') + { + $returnvalue = ($newfieldvalue == makeCorrectFile($newfieldvalue)); + } + elseif(isset($fielddata['string_type']) && $fielddata['string_type'] == 'filedir') + { + $returnvalue = (($newfieldvalue == makeCorrectDir($newfieldvalue)) || ($newfieldvalue == makeCorrectFile($newfieldvalue))); + } + elseif(preg_match('/^[^\r\n\t\f\0]*$/D', $newfieldvalue)) + { + $returnvalue = true; + } + + if(isset($fielddata['string_regexp']) && $fielddata['string_regexp'] != '') + { + if(preg_match($fielddata['string_regexp'], $newfieldvalue)) + { + $returnvalue = true; + } + else + { + $returnvalue = false; + } + } + + if(isset($fielddata['string_emptyallowed']) && $fielddata['string_emptyallowed'] === true && $newfieldvalue === '') + { + $returnvalue = true; + } + elseif(isset($fielddata['string_emptyallowed']) && $fielddata['string_emptyallowed'] === false && $newfieldvalue === '') + { + $returnvalue = 'stringmustntbeempty'; + } + } + + if($returnvalue === true) + { + return true; + } + elseif($returnvalue === false) + { + return 'stringformaterror'; + } + else + { + return $returnvalue; + } +} diff --git a/lib/functions/formfields/text/function.getFormFieldOutputText.php b/lib/functions/formfields/text/function.getFormFieldOutputText.php new file mode 100644 index 0000000000..c511cf1b39 --- /dev/null +++ b/lib/functions/formfields/text/function.getFormFieldOutputText.php @@ -0,0 +1,24 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Functions + * @version $Id: function.getFormFieldOutputText.php 2724 2009-06-07 14:18:02Z flo $ + */ + +function getFormFieldOutputText($fieldname, $fielddata) +{ + $label = $fielddata['label']; + $value = htmlentities($fielddata['value']); + eval("\$returnvalue = \"" . getTemplate("formfields/text", true) . "\";"); + return $returnvalue; +} diff --git a/lib/functions/formfields/text/function.validateFormFieldText.php b/lib/functions/formfields/text/function.validateFormFieldText.php new file mode 100644 index 0000000000..e1384fd038 --- /dev/null +++ b/lib/functions/formfields/text/function.validateFormFieldText.php @@ -0,0 +1,28 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Functions + * @version $Id: function.validateFormFieldText.php 2724 2009-06-07 14:18:02Z flo $ + */ + +function validateFormFieldText($fieldname, $fielddata, $newfieldvalue) +{ + $returnvalue = 'stringformaterror'; + + if(preg_match('/^[^\0]*$/', $newfieldvalue)) + { + $returnvalue = true; + } + + return $returnvalue; +} diff --git a/lib/functions/logger/constant.logger.php b/lib/functions/logger/constant.logger.php new file mode 100644 index 0000000000..0a1cd0c5b2 --- /dev/null +++ b/lib/functions/logger/constant.logger.php @@ -0,0 +1,27 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Functions + * @version $Id: constant.logger.php 2724 2009-06-07 14:18:02Z flo $ + */ + +if(!defined('USR_ACTION')) + define('USR_ACTION', '10'); +if(!defined('RES_ACTION')) + define('RES_ACTION', '20'); +if(!defined('ADM_ACTION')) + define('ADM_ACTION', '30'); +if(!defined('CRON_ACTION')) + define('CRON_ACTION', '40'); +if(!defined('LOG_ERROR')) + define('LOG_ERROR', '99'); diff --git a/lib/functions/output/function.ask_yesno.php b/lib/functions/output/function.ask_yesno.php new file mode 100644 index 0000000000..8deb929e64 --- /dev/null +++ b/lib/functions/output/function.ask_yesno.php @@ -0,0 +1,65 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Functions + * @version $Id: function.ask_yesno.php 2724 2009-06-07 14:18:02Z flo $ + */ + +/** + * Prints Question on screen + * + * @param string The question + * @param string File which will be called with POST if user clicks yes + * @param array Values which will be given to $yesfile. Format: array(variable1=>value1, variable2=>value2, variable3=>value3) + * @param string Name of the target eg Domain or eMail address etc. + * @author Florian Lippert + */ + +function ask_yesno($text, $yesfile, $params = array(), $targetname = '') +{ + global $userinfo, $db, $s, $header, $footer, $lng; + + /* + // For compatibility reasons (if $params contains a string like "field1=value1;field2=value2") this will convert it into a usable array + if(!is_array($params)) + { + $params_tmp=explode(';',$params); + unset($params); + $params=array(); + while(list(,$param_tmp)=each($params_tmp)) + { + $param_tmp=explode('=',$param_tmp); + $params[$param_tmp[0]]=$param_tmp[1]; + } + } +*/ + + $hiddenparams = ''; + + if(is_array($params)) + { + foreach($params as $field => $value) + { + $hiddenparams.= '' . "\n"; + } + } + + if(isset($lng['question'][$text])) + { + $text = $lng['question'][$text]; + } + + $text = strtr($text, array('%s' => $targetname)); + eval("echo \"" . getTemplate('misc/question_yesno', '1') . "\";"); + exit; +} diff --git a/lib/functions/output/function.buildNavigation.php b/lib/functions/output/function.buildNavigation.php new file mode 100644 index 0000000000..ba249d9baf --- /dev/null +++ b/lib/functions/output/function.buildNavigation.php @@ -0,0 +1,120 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Functions + * @version $Id: function.buildNavigation.php 2724 2009-06-07 14:18:02Z flo $ + */ + +/** + * Build Navigation Sidebar + * @param array navigation data + * @param array userinfo the userinfo of the user + * @return string the content of the navigation bar + * + * @author Florian Lippert + */ + +function buildNavigation($navigation, $userinfo) +{ + $returnvalue = ''; + + foreach($navigation as $box) + { + if((!isset($box['show_element']) || $box['show_element'] === true) && + (!isset($box['required_resources']) || $box['required_resources'] == '' || (isset($userinfo[$box['required_resources']]) && ((int)$userinfo[$box['required_resources']] > 0 || $userinfo[$box['required_resources']] == '-1')))) + { + $navigation_links = ''; + foreach($box['elements'] as $element_id => $element) + { + if((!isset($element['show_element']) || $element['show_element'] === true) && + (!isset($element['required_resources']) || $element['required_resources'] == '' || (isset($userinfo[$element['required_resources']]) && ((int)$userinfo[$element['required_resources']] > 0 || $userinfo[$element['required_resources']] == '-1')))) + { + if(isset($element['url']) && trim($element['url']) != '') + { + // append sid only to local + + if(!preg_match('/^https?\:\/\//', $element['url']) + && (isset($userinfo['hash']) && $userinfo['hash'] != '')) + { + // generate sid with ? oder & + + if(strpos($element['url'], '?') !== false) + { + $element['url'].= '&s=' . $userinfo['hash']; + } + else + { + $element['url'].= '?s=' . $userinfo['hash']; + } + } + + $target = ''; + + if(isset($element['new_window']) && $element['new_window'] == true) + { + $target = ' target="_blank"'; + } + + $completeLink = '' . $element['label'] . ''; + } + else + { + $completeLink = $element['label']; + } + + eval("\$navigation_links .= \"" . getTemplate("navigation_link", 1) . "\";"); + } + } + + if($navigation_links != '') + { + if(isset($box['url']) && trim($box['url']) != '') + { + // append sid only to local + + if(!preg_match('/^https?\:\/\//', $box['url']) + && (isset($userinfo['hash']) && $userinfo['hash'] != '')) + { + // generate sid with ? oder & + + if(strpos($box['url'], '?') !== false) + { + $box['url'].= '&s=' . $userinfo['hash']; + } + else + { + $box['url'].= '?s=' . $userinfo['hash']; + } + } + + $target = ''; + + if(isset($box['new_window']) && $box['new_window'] == true) + { + $target = ' target="_blank"'; + } + + $completeLink = '' . $box['label'] . ''; + } + else + { + $completeLink = $box['label']; + } + + eval("\$returnvalue .= \"" . getTemplate("navigation_element", 1) . "\";"); + } + } + } + + return $returnvalue; +} diff --git a/lib/functions/output/function.getCorrectFullUserDetails.php b/lib/functions/output/function.getCorrectFullUserDetails.php new file mode 100644 index 0000000000..65cb3792cd --- /dev/null +++ b/lib/functions/output/function.getCorrectFullUserDetails.php @@ -0,0 +1,52 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Functions + * @version $Id: function.getCorrectFullUserDetails.php 2724 2009-06-07 14:18:02Z flo $ + */ + +/** + * Returns full style user details "Name, Firstname | Company" + * + * @param array An array with keys firstname, name and company + * @return string The full details + * + * @author Florian Lippert + */ + +function getCorrectFullUserDetails($userinfo) +{ + $returnval = ''; + + if(isset($userinfo['firstname']) && isset($userinfo['name']) && isset($userinfo['company'])) + { + if($userinfo['company'] == '') + { + $returnval = $userinfo['name'] . ', ' . $userinfo['firstname']; + } + else + { + if($userinfo['name'] != '' + && $userinfo['firstname'] != '') + { + $returnval = $userinfo['name'] . ', ' . $userinfo['firstname'] . ' | ' . $userinfo['company']; + } + else + { + $returnval = $userinfo['company']; + } + } + } + + return $returnval; +} diff --git a/lib/functions/output/function.getCorrectUserSalutation.php b/lib/functions/output/function.getCorrectUserSalutation.php new file mode 100644 index 0000000000..aa42feb50c --- /dev/null +++ b/lib/functions/output/function.getCorrectUserSalutation.php @@ -0,0 +1,46 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Functions + * @version $Id: function.getCorrectUserSalutation.php 2724 2009-06-07 14:18:02Z flo $ + */ + +/** + * Returns correct user salutation, either "Firstname Name" or "Company" + * + * @param array An array with keys firstname, name and company + * @return string The correct salutation + * + * @author Florian Lippert + */ + +function getCorrectUserSalutation($userinfo) +{ + $returnval = ''; + + if(isset($userinfo['firstname']) && isset($userinfo['name']) && isset($userinfo['company'])) + { + // Always prefer firstname name + + if($userinfo['company'] != '' && $userinfo['name'] == '' && $userinfo['firstname'] == '') + { + $returnval = $userinfo['company']; + } + else + { + $returnval = $userinfo['firstname'] . ' ' . $userinfo['name']; + } + } + + return $returnval; +} diff --git a/lib/functions/output/function.getTemplate.php b/lib/functions/output/function.getTemplate.php new file mode 100644 index 0000000000..5998d4c394 --- /dev/null +++ b/lib/functions/output/function.getTemplate.php @@ -0,0 +1,61 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Functions + * @version $Id: function.getTemplate.php 2724 2009-06-07 14:18:02Z flo $ + */ + +/** + * Get template from filesystem + * + * @param string Templatename + * @param string noarea If area should be used to get template + * @return string The Template + * @author Florian Lippert + */ + +function getTemplate($template, $noarea = 0) +{ + global $templatecache; + + if($noarea != 1) + { + $template = AREA . '/' . $template; + } + + if(!isset($templatecache[$template])) + { + $filename = './templates/' . $template . '.tpl'; + + if(file_exists($filename) + && is_readable($filename)) + { + $templatefile = addcslashes(file_get_contents($filename), '"\\'); + + // loop through template more than once in case we have an "if"-statement in another one + + while(preg_match('/(.*)(<\/if>|(.*)<\/if>)/Uis', $templatefile)) + { + $templatefile = preg_replace('/(.*)(<\/if>|(.*)<\/if>)/Uis', '".( ($1) ? ("$2") : ("$4") )."', $templatefile); + } + } + else + { + $templatefile = 'TEMPLATE NOT FOUND: ' . $filename; + } + + $templatecache[$template] = $templatefile; + } + + return $templatecache[$template]; +} diff --git a/lib/functions/output/function.makecheckbox.php b/lib/functions/output/function.makecheckbox.php new file mode 100644 index 0000000000..f2bde0904e --- /dev/null +++ b/lib/functions/output/function.makecheckbox.php @@ -0,0 +1,62 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Functions + * @version $Id: function.makecheckbox.php 2724 2009-06-07 14:18:02Z flo $ + */ + +/** + * Return HTML Code for a checkbox + * + * @param string The fieldname + * @param string The captions + * @param string The Value which will be returned + * @param bool Add a
    at the end of the checkbox + * @param string Values which will be selected by default + * @param bool Whether the title may contain html or not + * @param bool Whether the value may contain html or not + * @return string HTML Code + * @author Michael Kaufmann + */ + +function makecheckbox($name, $title, $value, $break = false, $selvalue = NULL, $title_trusted = false, $value_trusted = false) +{ + if($selvalue !== NULL + && $value == $selvalue) + { + $checked = 'checked="checked"'; + } + else + { + $checked = ''; + } + + if(!$title_trusted) + { + $title = htmlspecialchars($title); + } + + if(!$value_trusted) + { + $value = htmlspecialchars($value); + } + + $checkbox = ' ' . $title; + + if($break) + { + $checkbox.= '
    '; + } + + return $checkbox; +} diff --git a/lib/functions/output/function.makeoption.php b/lib/functions/output/function.makeoption.php new file mode 100644 index 0000000000..9eae0979b0 --- /dev/null +++ b/lib/functions/output/function.makeoption.php @@ -0,0 +1,54 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Functions + * @version $Id: function.makeoption.php 2724 2009-06-07 14:18:02Z flo $ + */ + +/** + * Return HTML Code for an option within a '; +} diff --git a/lib/functions/output/function.redirectTo.php b/lib/functions/output/function.redirectTo.php new file mode 100644 index 0000000000..402767286c --- /dev/null +++ b/lib/functions/output/function.redirectTo.php @@ -0,0 +1,90 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Functions + * @version $Id: function.redirectTo.php 2724 2009-06-07 14:18:02Z flo $ + */ + +/** + * Sends an header ( 'Location ...' ) to the browser. + * + * @param string Destination + * @param array Get-Variables + * @param boolean if the target we are creating for a redirect + * should be a relative or an absolute url + * + * @return boolean false if params is not an array + * + * @author Florian Lippert + * @author Martin Burchert + * + * @changes martin@2005-01-29 + * - added isRelative parameter + * - speed up the url generation + * - fixed bug #91 + */ + +function redirectTo($destination, $get_variables = array(), $isRelative = false) +{ + $params = array(); + + if(is_array($get_variables)) + { + foreach($get_variables as $key => $value) + { + $params[] = urlencode($key) . '=' . urlencode($value); + } + + $params = '?' . implode($params, '&'); + + if($isRelative) + { + $protocol = ''; + $host = ''; + $path = './'; + } + else + { + if(isset($_SERVER['HTTPS']) + && strtolower($_SERVER['HTTPS']) == 'on') + { + $protocol = 'https://'; + } + else + { + $protocol = 'http://'; + } + + $host = $_SERVER['HTTP_HOST']; + + if(dirname($_SERVER['PHP_SELF']) == '/') + { + $path = '/'; + } + else + { + $path = dirname($_SERVER['PHP_SELF']) . '/'; + } + } + + header('Location: ' . $protocol . $host . $path . $destination . $params); + exit; + } + elseif($get_variables == null) + { + header('Location: ' . $destination); + exit; + } + + return false; +} diff --git a/lib/functions/output/function.standard_error.php b/lib/functions/output/function.standard_error.php new file mode 100644 index 0000000000..75eb020cf4 --- /dev/null +++ b/lib/functions/output/function.standard_error.php @@ -0,0 +1,65 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Functions + * @version $Id: function.standard_error.php 2724 2009-06-07 14:18:02Z flo $ + */ + +/** + * Prints one ore more errormessages on screen + * + * @param array Errormessages + * @param string A %s in the errormessage will be replaced by this string. + * @author Florian Lippert + * @author Ron Brand + */ + +function standard_error($errors = '', $replacer = '') +{ + global $db, $userinfo, $s, $header, $footer, $lng; + $replacer = htmlentities($replacer); + + if(!is_array($errors)) + { + $errors = array( + $errors + ); + } + + $error = ''; + foreach($errors as $single_error) + { + if(isset($lng['error'][$single_error])) + { + $single_error = $lng['error'][$single_error]; + $single_error = strtr($single_error, array('%s' => $replacer)); + } + else + { + $error = 'Unknown Error (' . $single_error . '): ' . $replacer; + break; + } + + if(empty($error)) + { + $error = $single_error; + } + else + { + $error.= ' ' . $single_error; + } + } + + eval("echo \"" . getTemplate('misc/error', '1') . "\";"); + exit; +} diff --git a/lib/functions/output/function.standard_success.php b/lib/functions/output/function.standard_success.php new file mode 100644 index 0000000000..a4866997af --- /dev/null +++ b/lib/functions/output/function.standard_success.php @@ -0,0 +1,55 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Functions + * @version $Id: function.standard_success.php 2724 2009-06-07 14:18:02Z flo $ + */ + +/** + * Prints one ore more errormessages on screen + * + * @param array Errormessages + * @param string A %s in the errormessage will be replaced by this string. + * @author Florian Lippert + */ + +function standard_success($success_message = '', $replacer = '', $params = array()) +{ + global $s, $header, $footer, $lng; + + if(isset($lng['success'][$success_message])) + { + $success_message = strtr($lng['success'][$success_message], array('%s' => htmlentities($replacer))); + } + + if(is_array($params) && isset($params['filename'])) + { + $redirect_url = $params['filename'] . '?s=' . $s; + unset($params['filename']); + + foreach($params as $varname => $value) + { + if($value != '') + { + $redirect_url .= '&' . $varname . '=' . $value; + } + } + } + else + { + $redirect_url = ''; + } + + eval("echo \"" . getTemplate('misc/success', '1') . "\";"); + exit; +} diff --git a/lib/functions/phphelpers/function.array_merge_prefix.php b/lib/functions/phphelpers/function.array_merge_prefix.php new file mode 100644 index 0000000000..fc81d5ce65 --- /dev/null +++ b/lib/functions/phphelpers/function.array_merge_prefix.php @@ -0,0 +1,41 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Functions + * @version $Id: function.array_merge_prefix.php 2724 2009-06-07 14:18:02Z flo $ + */ + +function array_merge_prefix($array1, $key_prefix, $array2) +{ + if(is_array($array1) && is_array($array2)) + { + if($key_prefix != '') + { + foreach($array2 as $key => $value) + { + $array1[$key_prefix . '_' . $key] = $value; + unset($array2[$key]); + } + unset($array2); + return $array1; + } + else + { + return array_merge($array1, $array2); + } + } + else + { + return $array1; + } +} diff --git a/lib/functions/phphelpers/function.array_trim.php b/lib/functions/phphelpers/function.array_trim.php new file mode 100644 index 0000000000..1d2405c9ab --- /dev/null +++ b/lib/functions/phphelpers/function.array_trim.php @@ -0,0 +1,44 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Functions + * @version $Id: function.array_trim.php 2724 2009-06-07 14:18:02Z flo $ + */ + +/** + * Returns Array, whose elements have been checked whether thay are empty or not + * + * @param array The array to trim + * @return array The trim'med array + * @author Florian Lippert + */ + +function array_trim($source) +{ + $returnval = array(); + + if(is_array($source)) + { + while(list($var, $val) = each($source)) + { + if($val != ' ' + && $val != '')$returnval[$var] = $val; + } + } + else + { + $returnval = $source; + } + + return $returnval; +} diff --git a/lib/functions/phphelpers/function.doubleval_ressource.php b/lib/functions/phphelpers/function.doubleval_ressource.php new file mode 100644 index 0000000000..906fad2304 --- /dev/null +++ b/lib/functions/phphelpers/function.doubleval_ressource.php @@ -0,0 +1,38 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Functions + * @version $Id: function.doubleval_ressource.php 2724 2009-06-07 14:18:02Z flo $ + */ + +/** + * Returns a double of the given value which isn't negative. + * Returns -1 if the given value was -1. + * + * @param any The value + * @return double The positive value + * @author Florian Lippert + */ + +function doubleval_ressource($the_value) +{ + $the_value = doubleval($the_value); + + if($the_value < 0 + && $the_value != '-1') + { + $the_value*= - 1; + } + + return $the_value; +} diff --git a/lib/functions/phphelpers/function.html_entity_decode_array.php b/lib/functions/phphelpers/function.html_entity_decode_array.php new file mode 100644 index 0000000000..72717fa651 --- /dev/null +++ b/lib/functions/phphelpers/function.html_entity_decode_array.php @@ -0,0 +1,67 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Functions + * @version $Id: function.html_entity_decode_array.php 2724 2009-06-07 14:18:02Z flo $ + */ + +/** + * Wrapper around html_entity_decode to handle arrays, with the advantage that you + * can select which fields should be handled by htmlentities and with advantage, + * that you can eliminate all html entities by setting complete=true + * + * @param array The subject array + * @param string The fields which should be checked for, separated by spaces + * @param bool Select true to use html_entity_decode_complete instead of html_entity_decode + * @param int See php documentation about this + * @param string See php documentation about this + * @return array The array with html_entity_decode'd strings + * @author Florian Lippert + */ + +function html_entity_decode_array($subject, $fields = '', $complete = false, $quote_style = ENT_COMPAT, $charset = 'ISO-8859-1') +{ + if(is_array($subject)) + { + if(!is_array($fields)) + { + $fields = array_trim(explode(' ', $fields)); + } + + foreach($subject as $field => $value) + { + if((!is_array($fields) || empty($fields)) + || (is_array($fields) && !empty($fields) && in_array($field, $fields))) + { + /** + * Just call ourselve to manage multi-dimensional arrays + */ + + $subject[$field] = html_entity_decode_array($subject[$field], $fields, $complete, $quote_style, $charset); + } + } + } + else + { + if($complete == true) + { + $subject = html_entity_decode_complete($subject, $quote_style, $charset); + } + else + { + $subject = html_entity_decode($subject, $quote_style, $charset); + } + } + + return $subject; +} diff --git a/lib/functions/phphelpers/function.html_entity_decode_complete.php b/lib/functions/phphelpers/function.html_entity_decode_complete.php new file mode 100644 index 0000000000..e9386885d9 --- /dev/null +++ b/lib/functions/phphelpers/function.html_entity_decode_complete.php @@ -0,0 +1,34 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Functions + * @version $Id: function.html_entity_decode_complete.php 2724 2009-06-07 14:18:02Z flo $ + */ + +/** + * Calls html_entity_decode in a loop until the result doesn't differ from original anymore + * + * @param string The string in which the html entities should be eliminated. + * @return string The cleaned string + * @author Florian Lippert + */ + +function html_entity_decode_complete($string) +{ + while($string != html_entity_decode($string)) + { + $string = html_entity_decode($string); + } + + return $string; +} diff --git a/lib/functions/phphelpers/function.htmlentities_array.php b/lib/functions/phphelpers/function.htmlentities_array.php new file mode 100644 index 0000000000..ae07810c3a --- /dev/null +++ b/lib/functions/phphelpers/function.htmlentities_array.php @@ -0,0 +1,58 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Functions + * @version $Id: function.htmlentities_array.php 2724 2009-06-07 14:18:02Z flo $ + */ + +/** + * Wrapper around htmlentities to handle arrays, with the advantage that you + * can select which fields should be handled by htmlentities + * + * @param array The subject array + * @param string The fields which should be checked for, separated by spaces + * @param int See php documentation about this + * @param string See php documentation about this + * @return array The array with htmlentitie'd strings + * @author Florian Lippert + */ + +function htmlentities_array($subject, $fields = '', $quote_style = ENT_COMPAT, $charset = 'ISO-8859-1') +{ + if(is_array($subject)) + { + if(!is_array($fields)) + { + $fields = array_trim(explode(' ', $fields)); + } + + foreach($subject as $field => $value) + { + if((!is_array($fields) || empty($fields)) + || (is_array($fields) && !empty($fields) && in_array($field, $fields))) + { + /** + * Just call ourselve to manage multi-dimensional arrays + */ + + $subject[$field] = htmlentities_array($subject[$field], $fields, $quote_style, $charset); + } + } + } + else + { + $subject = htmlentities($subject, $quote_style, $charset); + } + + return $subject; +} diff --git a/lib/functions/phphelpers/function.intval_ressource.php b/lib/functions/phphelpers/function.intval_ressource.php new file mode 100644 index 0000000000..75c33abc3b --- /dev/null +++ b/lib/functions/phphelpers/function.intval_ressource.php @@ -0,0 +1,38 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Functions + * @version $Id: function.intval_ressource.php 2724 2009-06-07 14:18:02Z flo $ + */ + +/** + * Returns an integer of the given value which isn't negative. + * Returns -1 if the given value was -1. + * + * @param any The value + * @return int The positive value + * @author Florian Lippert + */ + +function intval_ressource($the_value) +{ + $the_value = intval($the_value); + + if($the_value < 0 + && $the_value != '-1') + { + $the_value*= - 1; + } + + return $the_value; +} diff --git a/lib/functions/phphelpers/function.replace_variables.php b/lib/functions/phphelpers/function.replace_variables.php new file mode 100644 index 0000000000..db0b368348 --- /dev/null +++ b/lib/functions/phphelpers/function.replace_variables.php @@ -0,0 +1,56 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Functions + * @version $Id: function.replace_variables.php 2724 2009-06-07 14:18:02Z flo $ + */ + +/** + * Replaces all occurences of variables defined in the second argument + * in the first argument with their values. + * + * @param string The string that should be searched for variables + * @param array The array containing the variables with their values + * @return string The submitted string with the variables replaced. + * @author Michael Duergner + */ + +function replace_variables($text, $vars) +{ + $pattern = "/\{([a-zA-Z0-9\-_]+)\}/"; + + // --- martin @ 08.08.2005 ------------------------------------------------------- + // fixing usage of uninitialised variable + + $matches = array(); + + // ------------------------------------------------------------------------------- + + if(count($vars) > 0 + && preg_match_all($pattern, $text, $matches)) + { + for ($i = 0;$i < count($matches[1]);$i++) + { + $current = $matches[1][$i]; + + if(isset($vars[$current])) + { + $var = $vars[$current]; + $text = str_replace("{" . $current . "}", $var, $text); + } + } + } + + $text = str_replace('\n', "\n", $text); + return $text; +} diff --git a/lib/functions/phphelpers/function.str_replace_array.php b/lib/functions/phphelpers/function.str_replace_array.php new file mode 100644 index 0000000000..18da62fca1 --- /dev/null +++ b/lib/functions/phphelpers/function.str_replace_array.php @@ -0,0 +1,50 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Functions + * @version $Id: function.str_replace_array.php 2724 2009-06-07 14:18:02Z flo $ + */ + +/** + * Replaces Strings in an array, with the advantage that you + * can select which fields should be str_replace'd + * + * @param mixed String or array of strings to search for + * @param mixed String or array to replace with + * @param array The subject array + * @param string The fields which should be checked for, separated by spaces + * @return array The str_replace'd array + * @author Florian Lippert + */ + +function str_replace_array($search, $replace, $subject, $fields = '') +{ + if(is_array($subject)) + { + $fields = array_trim(explode(' ', $fields)); + foreach($subject as $field => $value) + { + if((!is_array($fields) || empty($fields)) + || (is_array($fields) && !empty($fields) && in_array($field, $fields))) + { + $subject[$field] = str_replace($search, $replace, $subject[$field]); + } + } + } + else + { + $subject = str_replace($search, $replace, $subject); + } + + return $subject; +} diff --git a/lib/functions/phphelpers/function.stripslashes_array.php b/lib/functions/phphelpers/function.stripslashes_array.php new file mode 100644 index 0000000000..e796cb024a --- /dev/null +++ b/lib/functions/phphelpers/function.stripslashes_array.php @@ -0,0 +1,67 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Functions + * @version $Id: function.stripslashes_array.php 2724 2009-06-07 14:18:02Z flo $ + */ + +/** + * Wrapper around stripslashes to handle arrays, with the advantage that you + * can select which fields should be handled by htmlentities and with advantage, + * that you can eliminate all slashes by setting complete=true + * + * @param array The subject array + * @param int See php documentation about this + * @param string See php documentation about this + * @param string The fields which should be checked for, separated by spaces + * @param bool Select true to use stripslashes_complete instead of stripslashes + * @return array The array with stripslashe'd strings + * @author Florian Lippert + */ + +function stripslashes_array($subject, $fields = '', $complete = false) +{ + if(is_array($subject)) + { + if(!is_array($fields)) + { + $fields = array_trim(explode(' ', $fields)); + } + + foreach($subject as $field => $value) + { + if((!is_array($fields) || empty($fields)) + || (is_array($fields) && !empty($fields) && in_array($field, $fields))) + { + /** + * Just call ourselve to manage multi-dimensional arrays + */ + + $subject[$field] = stripslashes_array($subject[$field], $fields, $complete); + } + } + } + else + { + if($complete == true) + { + $subject = stripslashes_complete($subject); + } + else + { + $subject = stripslashes($subject); + } + } + + return $subject; +} diff --git a/lib/functions/phphelpers/function.stripslashes_complete.php b/lib/functions/phphelpers/function.stripslashes_complete.php new file mode 100644 index 0000000000..216d96b332 --- /dev/null +++ b/lib/functions/phphelpers/function.stripslashes_complete.php @@ -0,0 +1,34 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Functions + * @version $Id: function.stripslashes_complete.php 2724 2009-06-07 14:18:02Z flo $ + */ + +/** + * Calls stripslashes in a loop until the result doesn't differ from original anymore + * + * @param string The string in which the slashes should be eliminated. + * @return string The cleaned string + * @author Florian Lippert + */ + +function stripslashes_complete($string) +{ + while($string != stripslashes($string)) + { + $string = stripslashes($string); + } + + return $string; +} diff --git a/lib/functions/settings/function.getSetting.php b/lib/functions/settings/function.getSetting.php new file mode 100644 index 0000000000..738ff20d6a --- /dev/null +++ b/lib/functions/settings/function.getSetting.php @@ -0,0 +1,29 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Functions + * @version $Id: function.getSetting.php 2724 2009-06-07 14:18:02Z flo $ + */ + +function getSetting($settinggroup, $varname) +{ + global $settings; + if(isset($settings[$settinggroup]) && is_array($settings[$settinggroup]) && isset($settings[$settinggroup][$varname])) + { + return $settings[$settinggroup][$varname]; + } + else + { + return false; + } +} diff --git a/lib/functions/settings/function.loadSettings.php b/lib/functions/settings/function.loadSettings.php new file mode 100644 index 0000000000..a12105887a --- /dev/null +++ b/lib/functions/settings/function.loadSettings.php @@ -0,0 +1,56 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Functions + * @version $Id: function.loadSettings.php 2729 2009-09-20 10:33:50Z flo $ + */ + +function loadSettings($settings_data, $db) +{ + $settings = array(); + + if(is_array($settings_data) && isset($settings_data['groups']) && is_array($settings_data['groups'])) + { + foreach($settings_data['groups'] as $settings_part => $settings_part_details) + { + if(is_array($settings_part_details) && isset($settings_part_details['fields']) && is_array($settings_part_details['fields'])) + { + foreach($settings_part_details['fields'] as $field_name => $field_details) + { + if(isset($field_details['settinggroup']) && isset($field_details['varname']) && isset($field_details['default'])) + { + $row = $db->query_first('SELECT `settinggroup`, `varname`, `value` FROM `' . TABLE_PANEL_SETTINGS . '` WHERE `settinggroup` = \'' . $db->escape($field_details['settinggroup']) . '\' AND `varname` = \'' . $db->escape($field_details['varname']) . '\' '); + if(!empty($row)) + { + $varvalue = $row['value']; + } + else + { + $varvalue = $field_details['default']; + } + + $settings[$field_details['settinggroup']][$field_details['varname']] = $varvalue; + } + else + { + $varvalue = false; + } + + $settings_data['groups'][$settings_part]['fields'][$field_name]['value'] = $varvalue; + } + } + } + } + + return $settings; +} diff --git a/lib/functions/settings/function.saveSetting.php b/lib/functions/settings/function.saveSetting.php new file mode 100644 index 0000000000..c9415c0daf --- /dev/null +++ b/lib/functions/settings/function.saveSetting.php @@ -0,0 +1,23 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Functions + * @version $Id: function.saveSetting.php 2724 2009-06-07 14:18:02Z flo $ + */ + +function saveSetting($settinggroup, $varname, $newvalue) +{ + global $db; + $query = 'UPDATE `' . TABLE_PANEL_SETTINGS . '` SET `value` = \'' . $db->escape($newvalue) . '\' WHERE `settinggroup` = \'' . $db->escape($settinggroup) . '\' AND `varname`=\'' . $db->escape($varname) . '\''; + return $db->query($query); +} diff --git a/lib/functions/settings/function.storeSettingDefaultIp.php b/lib/functions/settings/function.storeSettingDefaultIp.php new file mode 100644 index 0000000000..d3392f00d9 --- /dev/null +++ b/lib/functions/settings/function.storeSettingDefaultIp.php @@ -0,0 +1,43 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Functions + * @version $Id: function.storeSettingDefaultIp.php 2724 2009-06-07 14:18:02Z flo $ + */ + +function storeSettingDefaultIp($fieldname, $fielddata, $newfieldvalue) +{ + $returnvalue = storeSettingField($fieldname, $fielddata, $newfieldvalue); + + if($returnvalue !== false && is_array($fielddata) && isset($fielddata['settinggroup']) && $fielddata['settinggroup'] == 'system' && isset($fielddata['varname']) && $fielddata['varname'] == 'defaultip') + { + global $db; + + $customerstddomains_result = $db->query('SELECT `standardsubdomain` FROM `' . TABLE_PANEL_CUSTOMERS . '` WHERE `standardsubdomain` <> \'0\''); + $ids = array(); + + while($customerstddomains_row = $db->fetch_array($customerstddomains_result)) + { + $ids[] = (int)$customerstddomains_row['standardsubdomain']; + } + + if(count($ids) > 0) + { + $db->query('UPDATE `' . TABLE_PANEL_DOMAINS . '` SET `ipandport`=\'' . (int)$newfieldvalue . '\' WHERE `id` IN (\'' . implode('\',\'', $ids) . '\') AND `ipandport` = \'' . $db->escape(getSetting('system', 'defaultip')) . '\''); + } + + inserttask('1'); + } + + return $returnvalue; +} diff --git a/lib/functions/settings/function.storeSettingField.php b/lib/functions/settings/function.storeSettingField.php new file mode 100644 index 0000000000..c06207d70b --- /dev/null +++ b/lib/functions/settings/function.storeSettingField.php @@ -0,0 +1,35 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Functions + * @version $Id: function.storeSettingField.php 2724 2009-06-07 14:18:02Z flo $ + */ + +function storeSettingField($fieldname, $fielddata, $newfieldvalue) +{ + if(is_array($fielddata) && isset($fielddata['settinggroup']) && $fielddata['settinggroup'] != '' && isset($fielddata['varname']) && $fielddata['varname'] != '') + { + if(saveSetting($fielddata['settinggroup'], $fielddata['varname'], $newfieldvalue) != false) + { + return array($fielddata['settinggroup'] . '.' . $fielddata['varname'] => $newfieldvalue); + } + else + { + return false; + } + } + else + { + return false; + } +} diff --git a/lib/functions/settings/function.storeSettingHostname.php b/lib/functions/settings/function.storeSettingHostname.php new file mode 100644 index 0000000000..887ae84faf --- /dev/null +++ b/lib/functions/settings/function.storeSettingHostname.php @@ -0,0 +1,43 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Functions + * @version $Id: function.storeSettingHostname.php 2724 2009-06-07 14:18:02Z flo $ + */ + +function storeSettingHostname($fieldname, $fielddata, $newfieldvalue) +{ + $returnvalue = storeSettingField($fieldname, $fielddata, $newfieldvalue); + + if($returnvalue !== false && is_array($fielddata) && isset($fielddata['settinggroup']) && $fielddata['settinggroup'] == 'system' && isset($fielddata['varname']) && $fielddata['varname'] == 'hostname') + { + global $db, $idna_convert; + $newfieldvalue = $idna_convert->encode($newfieldvalue); + + $customerstddomains_result = $db->query('SELECT `standardsubdomain` FROM `' . TABLE_PANEL_CUSTOMERS . '` WHERE `standardsubdomain` <> \'0\''); + $ids = array(); + + while($customerstddomains_row = $db->fetch_array($customerstddomains_result)) + { + $ids[] = (int)$customerstddomains_row['standardsubdomain']; + } + + if(count($ids) > 0) + { + $db->query('UPDATE `' . TABLE_PANEL_DOMAINS . '` SET `domain` = REPLACE(`domain`, \'' . $db->escape(getSetting('system', 'hostname')) . '\', \'' . $db->escape($newfieldvalue) . '\') WHERE `id` IN (\'' . implode('\',\'', $ids) . '\')'); + inserttask('1'); + } + } + + return $returnvalue; +} diff --git a/lib/functions/settings/function.storeSettingIpAddress.php b/lib/functions/settings/function.storeSettingIpAddress.php new file mode 100644 index 0000000000..bd717212e9 --- /dev/null +++ b/lib/functions/settings/function.storeSettingIpAddress.php @@ -0,0 +1,33 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Functions + * @version $Id: function.storeSettingIpAddress.php 2724 2009-06-07 14:18:02Z flo $ + */ + +function storeSettingIpAddress($fieldname, $fielddata, $newfieldvalue) +{ + $returnvalue = storeSettingField($fieldname, $fielddata, $newfieldvalue); + + if($returnvalue !== false && is_array($fielddata) && isset($fielddata['settinggroup']) && $fielddata['settinggroup'] == 'system' && isset($fielddata['varname']) && $fielddata['varname'] == 'ipaddress') + { + $mysql_access_host_array = array_map('trim', explode(',', getSetting('system', 'mysql_access_host'))); + $mysql_access_host_array[] = $newfieldvalue; + $mysql_access_host_array = array_unique(array_trim($mysql_access_host_array)); + $mysql_access_host = implode(',', $mysql_access_host_array); + correctMysqlUsers($mysql_access_host_array); + saveSetting('system', 'mysql_access_host', $mysql_access_host); + } + + return $returnvalue; +} diff --git a/lib/functions/settings/function.storeSettingMysqlAccessHost.php b/lib/functions/settings/function.storeSettingMysqlAccessHost.php new file mode 100644 index 0000000000..9c3631c073 --- /dev/null +++ b/lib/functions/settings/function.storeSettingMysqlAccessHost.php @@ -0,0 +1,44 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Functions + * @version $Id: function.storeSettingMysqlAccessHost.php 2724 2009-06-07 14:18:02Z flo $ + */ + +function storeSettingMysqlAccessHost($fieldname, $fielddata, $newfieldvalue) +{ + $returnvalue = storeSettingField($fieldname, $fielddata, $newfieldvalue); + + if($returnvalue !== false && is_array($fielddata) && isset($fielddata['settinggroup']) && $fielddata['settinggroup'] == 'system' && isset($fielddata['varname']) && $fielddata['varname'] == 'mysql_access_host') + { + $mysql_access_host_array = array_map('trim', explode(',', $newfieldvalue)); + + if(in_array('127.0.0.1', $mysql_access_host_array) + && !in_array('localhost', $mysql_access_host_array)) + { + $mysql_access_host_array[] = 'localhost'; + } + + if(!in_array('127.0.0.1', $mysql_access_host_array) + && in_array('localhost', $mysql_access_host_array)) + { + $mysql_access_host_array[] = '127.0.0.1'; + } + + $mysql_access_host_array = array_unique(array_trim($mysql_access_host_array)); + $newfieldvalue = implode(',', $mysql_access_host_array); + correctMysqlUsers($mysql_access_host_array); + } + + return $returnvalue; +} diff --git a/lib/functions/syscp/function.createAWStatsConf.php b/lib/functions/syscp/function.createAWStatsConf.php new file mode 100644 index 0000000000..14ee707d94 --- /dev/null +++ b/lib/functions/syscp/function.createAWStatsConf.php @@ -0,0 +1,97 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Functions + * @version $Id: function.createAWStatsConf.php 2724 2009-06-07 14:18:02Z flo $ + */ + +/** + * Create or modify the AWStats configuration file for the given domain. + * Modified by Berend Dekens to allow custom configurations. + * + * @param logFile + * @param siteDomain + * @param hostAliases + * @return + * @author Michael Duergner + * @author Berend Dekens + */ + +function createAWStatsConf($logFile, $siteDomain, $hostAliases) +{ + global $pathtophpfiles; + + // Generation header + + $header = "## GENERATED BY SYSCP\n"; + $header2 = "## Do not remove the line above! This tells SysCP to update this configuration\n## If you wish to manually change this configuration file, remove the first line to make sure SysCP won't rebuild this file\n## Generated for domain {SITE_DOMAIN} on " . date('l dS \of F Y h:i:s A') . "\n"; + + // These are the variables we will replace + + $regex = array( + '/\{LOG_FILE\}/', + '/\{SITE_DOMAIN\}/', + '/\{HOST_ALIASES\}/' + ); + $replace = array( + $logFile, + $siteDomain, + $hostAliases + ); + + // File names + + $domain_file = '/etc/awstats/awstats.' . $siteDomain . '.conf'; + $model_file = '/etc/awstats/awstats.model.conf.syscp'; + + // Test if the file exists + + if(file_exists($domain_file)) + { + // Check for the generated header - if this is a manual modification we won't update + + $awstats_domain_conf = fopen($domain_file, 'r'); + + if(fgets($awstats_domain_conf, strlen($header)) != $header) + { + fclose($awstats_domain_conf); + return; + } + + // Close the file + + fclose($awstats_domain_conf); + } + + $awstats_domain_conf = fopen($domain_file, 'w'); + $awstats_model_conf = fopen($model_file, 'r'); + + // Write the header + + fwrite($awstats_domain_conf, $header); + fwrite($awstats_domain_conf, preg_replace($regex, $replace, $header2)); + + // Write the configuration file + + while(($line = fgets($awstats_model_conf, 4096)) !== false) + { + if(!preg_match('/^#/', $line) + && trim($line) != '') + { + fwrite($awstats_domain_conf, preg_replace($regex, $replace, $line)); + } + } + + fclose($awstats_domain_conf); + fclose($awstats_model_conf); +} diff --git a/lib/functions/syscp/function.createAWStatsVhost.php b/lib/functions/syscp/function.createAWStatsVhost.php new file mode 100644 index 0000000000..8fa83382a3 --- /dev/null +++ b/lib/functions/syscp/function.createAWStatsVhost.php @@ -0,0 +1,45 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Functions + * @version $Id: function.createAWStatsVhost.php 2724 2009-06-07 14:18:02Z flo $ + */ + +/** + * This function generates the VHost configuration for AWStats + * This will enable the /awstats url and enable security on these folders + * @param siteDomain Name of the domain we want stats for + * @return String with configuration for use in vhost file + * @author Berend Dekens + */ + +function createAWStatsVhost($siteDomain, $settings = null) +{ + if($settings['system']['mod_fcgid'] != '1') + { + $vhosts_file = ' # AWStats statistics' . "\n"; + $vhosts_file.= ' RewriteEngine On' . "\n"; + $vhosts_file.= ' RewriteRule ^/awstats(/.*)? /awstats/awstats.pl?config=' . $siteDomain . ' [L,PT]' . "\n"; + $vhosts_file.= ' RewriteRule ^/awstats.pl(.*)* /awstats/awstats.pl$1 [QSA,L,PT]' . "\n"; + } + else + { + $vhosts_file = ' ' . "\n"; + $vhosts_file.= ' RewriteEngine On' . "\n"; + $vhosts_file.= ' RewriteRule awstats.pl(.*)$ http://' . $settings['system']['hostname'] . '/cgi-bin/awstats.pl$1 [R,P]' . "\n"; + $vhosts_file.= ' RewriteRule awstats$ http://' . $settings['system']['hostname'] . '/cgi-bin/awstats.pl?config=' . $siteDomain . ' [R,P]' . "\n"; + $vhosts_file.= ' ' . "\n"; + } + + return $vhosts_file; +} diff --git a/lib/functions/syscp/function.getAdmins.php b/lib/functions/syscp/function.getAdmins.php new file mode 100644 index 0000000000..91a858e698 --- /dev/null +++ b/lib/functions/syscp/function.getAdmins.php @@ -0,0 +1,47 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Functions + * @version $Id: function.getAdmins.php 2735 2009-11-06 09:52:59Z flo $ + */ + +function getAdmins($limit_resource = '') +{ + global $db; + + $additional_conditions = ''; + $additional_conditions_array = array(); + if(getSessionUserDetail('customers_see_all') != true) + { + $additional_conditions_array[] = '`adminid` = \'' . (int)getSessionUserDetail('adminid') . '\''; + } + if($limit_resource != '') + { + $additional_conditions_array[] = '(`' . $limit_resource . '_used` < `' . $limit_resource . '` OR `' . $limit_resource . '` = \'-1\')'; + } + if(!empty($additional_conditions_array)) + { + $additional_conditions = ' WHERE ' . implode(' AND ', $additional_conditions_array) . ' '; + } + + $query = 'SELECT `adminid`, `loginname`, `name`, `firstname`, `company` FROM `' . TABLE_PANEL_ADMINS . '` ' . $additional_conditions . ' ORDER BY `name` ASC'; + $result = $db->query($query); + $admins_array = array(); + + while($row = $db->fetch_array($result)) + { + $admins_array[$row['adminid']] = getCorrectFullUserDetails($row) . ' (' . $row['loginname'] . ')'; + } + + return $admins_array; +} diff --git a/lib/functions/syscp/function.getCustomerDetail.php b/lib/functions/syscp/function.getCustomerDetail.php new file mode 100644 index 0000000000..d55f90be8d --- /dev/null +++ b/lib/functions/syscp/function.getCustomerDetail.php @@ -0,0 +1,33 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Functions + * @version $Id: function.getCustomerDetail.php 2735 2009-11-06 09:52:59Z flo $ + */ + +function getCustomerDetail($customerid, $varname) +{ + global $db; + + $query = 'SELECT `' . $db->escape($varname) . '` FROM `' . TABLE_PANEL_CUSTOMERS . '` WHERE `customerid` = \'' . (int)$customerid . '\''; + $customer = $db->query_first($query); + + if(isset($customer[$varname])) + { + return $customer[$varname]; + } + else + { + return false; + } +} diff --git a/lib/functions/syscp/function.getCustomers.php b/lib/functions/syscp/function.getCustomers.php new file mode 100644 index 0000000000..7f11971e30 --- /dev/null +++ b/lib/functions/syscp/function.getCustomers.php @@ -0,0 +1,47 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Functions + * @version $Id: function.getCustomers.php 2735 2009-11-06 09:52:59Z flo $ + */ + +function getCustomers($limit_resource = '') +{ + global $db; + + $additional_conditions = ''; + $additional_conditions_array = array(); + if(getSessionUserDetail('customers_see_all') != true) + { + $additional_conditions_array[] = '`adminid` = \'' . (int)getSessionUserDetail('adminid') . '\''; + } + if($limit_resource != '') + { + $additional_conditions_array[] = '(`' . $limit_resource . '_used` < `' . $limit_resource . '` OR `' . $limit_resource . '` = \'-1\')'; + } + if(!empty($additional_conditions_array)) + { + $additional_conditions = ' WHERE ' . implode(' AND ', $additional_conditions_array) . ' '; + } + + $query = 'SELECT `customerid`, `loginname`, `name`, `firstname`, `company` FROM `' . TABLE_PANEL_CUSTOMERS . '` ' . $additional_conditions . ' ORDER BY `name` ASC'; + $result = $db->query($query); + $customers_array = array(); + + while($row = $db->fetch_array($result)) + { + $customers_array[$row['customerid']] = getCorrectFullUserDetails($row) . ' (' . $row['loginname'] . ')'; + } + + return $customers_array; +} diff --git a/lib/functions/syscp/function.getIpAddresses.php b/lib/functions/syscp/function.getIpAddresses.php new file mode 100644 index 0000000000..38a4710387 --- /dev/null +++ b/lib/functions/syscp/function.getIpAddresses.php @@ -0,0 +1,41 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Functions + * @version $Id: function.getIpAddresses.php 2724 2009-06-07 14:18:02Z flo $ + */ + +function getIpAddresses() +{ + global $db; + + $query = 'SELECT `id`, `ip`, `port` FROM `' . TABLE_PANEL_IPSANDPORTS . '` ORDER BY `ip` ASC, `port` ASC'; + $result = $db->query($query); + $system_ipaddress_array = array(); + + while($row = $db->fetch_array($result)) + { + if(!isset($system_ipaddress_array[$row['ip']]) + && !in_array($row['ip'], $system_ipaddress_array)) + { + if(filter_var($row['ip'], FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) + { + $row['ip'] = '[' . $row['ip'] . ']'; + } + + $system_ipaddress_array[$row['ip']] = $row['ip']; + } + } + + return $system_ipaddress_array; +} diff --git a/lib/functions/syscp/function.getIpPortCombinations.php b/lib/functions/syscp/function.getIpPortCombinations.php new file mode 100644 index 0000000000..7f8dd579a1 --- /dev/null +++ b/lib/functions/syscp/function.getIpPortCombinations.php @@ -0,0 +1,54 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Functions + * @version $Id: function.getIpPortCombinations.php 2733 2009-11-06 09:32:00Z flo $ + */ + +function getIpPortCombinations($ssl = null) +{ + global $db; + + $additional_conditions = ''; + $additional_conditions_array = array(); + if(getSessionUserDetail('ip') != '-1') + { + $admin_ip = $db->query_first('SELECT `id`, `ip`, `port` FROM `' . TABLE_PANEL_IPSANDPORTS . '` WHERE `id` = \'' . (int)getSessionUserDetail('ip') . '\' ORDER BY `ip`, `port` ASC'); + $additional_conditions_array[] = '`ip` = \'' . $admin_ip['ip'] . '\''; + unset($admin_ip); + } + if($ssl !== null) + { + $additional_conditions_array[] = '`ssl` = \'' . ( $ssl === true ? '1' : '0' ) . '\''; + } + if(!empty($additional_conditions_array)) + { + $additional_conditions = ' WHERE ' . implode(' AND ', $additional_conditions_array) . ' '; + } + + $query = 'SELECT `id`, `ip`, `port` FROM `' . TABLE_PANEL_IPSANDPORTS . '` ' . $additional_conditions . ' ORDER BY `ip` ASC, `port` ASC'; + $result = $db->query($query); + $system_ipaddress_array = array(); + + while($row = $db->fetch_array($result)) + { + if(filter_var($row['ip'], FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) + { + $row['ip'] = '[' . $row['ip'] . ']'; + } + + $system_ipaddress_array[$row['id']] = $row['ip'] . ':' . $row['port']; + } + + return $system_ipaddress_array; +} diff --git a/lib/functions/syscp/function.getLanguages.php b/lib/functions/syscp/function.getLanguages.php new file mode 100644 index 0000000000..afdf0144ea --- /dev/null +++ b/lib/functions/syscp/function.getLanguages.php @@ -0,0 +1,36 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Functions + * @version $Id: function.getLanguages.php 2724 2009-06-07 14:18:02Z flo $ + */ + +function getLanguages() +{ + global $db; + + $query = 'SELECT * FROM `' . TABLE_PANEL_LANGUAGE . '` '; + $result = $db->query($query); + $languages_array = array(); + + while($row = $db->fetch_array($result)) + { + if(!isset($languages_array[$row['language']]) + && !in_array($row['language'], $languages_array)) + { + $languages_array[$row['language']] = html_entity_decode($row['language']); + } + } + + return $languages_array; +} diff --git a/lib/functions/syscp/function.getSessionUserDetail.php b/lib/functions/syscp/function.getSessionUserDetail.php new file mode 100644 index 0000000000..d411ee5164 --- /dev/null +++ b/lib/functions/syscp/function.getSessionUserDetail.php @@ -0,0 +1,30 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Functions + * @version $Id: function.getSessionUserDetail.php 2735 2009-11-06 09:52:59Z flo $ + */ + +function getSessionUserDetail($varname) +{ + global $userinfo; + + if(isset($userinfo[$varname])) + { + return $userinfo[$varname]; + } + else + { + return false; + } +} diff --git a/lib/functions/syscp/function.inserttask.php b/lib/functions/syscp/function.inserttask.php new file mode 100644 index 0000000000..096332a92b --- /dev/null +++ b/lib/functions/syscp/function.inserttask.php @@ -0,0 +1,87 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Functions + * @version $Id: function.inserttask.php 2724 2009-06-07 14:18:02Z flo $ + */ + +/** + * Inserts a task into the PANEL_TASKS-Table + * + * @param int Type of task + * @param string Parameter 1 + * @param string Parameter 2 + * @param string Parameter 3 + * @author Florian Lippert + */ + +function inserttask($type, $param1 = '', $param2 = '', $param3 = '') +{ + global $db, $settings; + + if($type == '1' + || $type == '3' + || $type == '4' + || $type == '5') + { + $db->query('DELETE FROM `' . TABLE_PANEL_TASKS . '` WHERE `type`="' . $type . '"'); + $db->query('INSERT INTO `' . TABLE_PANEL_TASKS . '` (`type`) VALUES ("' . $type . '")'); + $doupdate = true; + } + elseif($type == '2' + && $param1 != '' + && $param2 != '' + && $param3 != '') + { + $data = Array(); + $data['loginname'] = $param1; + $data['uid'] = $param2; + $data['gid'] = $param3; + $data = serialize($data); + $db->query('INSERT INTO `' . TABLE_PANEL_TASKS . '` (`type`, `data`) VALUES ("2", "' . $db->escape($data) . '")'); + $doupdate = true; + } + + // Taken from https://wiki.syscp.org/contrib/realtime + + if($doupdate === true + && (int)$settings['system']['realtime_port'] !== 0) + { + $timeout = 15; + $socket = @socket_create(AF_INET, SOCK_STREAM, SOL_TCP); + + if($socket !== false) + { + $time = time(); + + while(!@socket_connect($socket, '127.0.0.1', (int)$settings['system']['realtime_port'])) + { + $err = socket_last_error($socket); + + if($err == 115 + || $err == 114) + { + if((time() - $time) >= $timeout) + { + break; + } + + sleep(1); + continue; + } + } + + @socket_close($socket); + } + } +} diff --git a/lib/functions/syscp/function.loadConfigArrayDir.php b/lib/functions/syscp/function.loadConfigArrayDir.php new file mode 100644 index 0000000000..15854c8e7b --- /dev/null +++ b/lib/functions/syscp/function.loadConfigArrayDir.php @@ -0,0 +1,46 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Functions + * @version $Id: function.loadConfigArrayDir.php 2735 2009-11-06 09:52:59Z flo $ + */ + +function loadConfigArrayDir($data_dirname) +{ + // Workaround until we use gettext + global $lng; + + $data = array(); + + if(is_dir($data_dirname)) + { + $data_files = array(); + $data_dirhandle = opendir($data_dirname); + while(false !== ($data_filename = readdir($data_dirhandle))) + { + if($data_filename != '.' && $data_filename != '..' && $data_filename != '' && substr($data_filename, -4 ) == '.php') + { + $data_files[] = $data_dirname . $data_filename; + } + } + + sort($data_files); + + foreach($data_files as $data_filename) + { + $data = array_merge_recursive($data, include($data_filename)); + } + } + + return $data; +} diff --git a/lib/functions/syscp/function.updateCounters.php b/lib/functions/syscp/function.updateCounters.php new file mode 100644 index 0000000000..b46fbe1a02 --- /dev/null +++ b/lib/functions/syscp/function.updateCounters.php @@ -0,0 +1,284 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Functions + * @version $Id: function.updateCounters.php 2724 2009-06-07 14:18:02Z flo $ + */ + +/** + * Function which updates all counters of used ressources in panel_admins and panel_customers + * @param bool Set to true to get an array with debug information + * @return array Contains debug information if parameter 'returndebuginfo' is set to true + * + * @author Florian Lippert + */ + +function updateCounters($returndebuginfo = false) +{ + global $db; + $returnval = array(); + + if($returndebuginfo === true) + { + $returnval = array( + 'admins' => array(), + 'customers' => array() + ); + } + + $admin_resources = array(); + + // Customers + + $customers = $db->query('SELECT * FROM `' . TABLE_PANEL_CUSTOMERS . '` ORDER BY `customerid`'); + + while($customer = $db->fetch_array($customers)) + { + if(!isset($admin_resources[$customer['adminid']])) + { + $admin_resources[$customer['adminid']] = Array(); + } + + if(!isset($admin_resources[$customer['adminid']]['diskspace_used'])) + { + $admin_resources[$customer['adminid']]['diskspace_used'] = 0; + } + + if(($customer['diskspace'] / 1024) != '-1') + { + $admin_resources[$customer['adminid']]['diskspace_used']+= intval_ressource($customer['diskspace']); + } + + if(!isset($admin_resources[$customer['adminid']]['traffic_used'])) + { + $admin_resources[$customer['adminid']]['traffic_used'] = 0; + } + + $admin_resources[$customer['adminid']]['traffic_used']+= $customer['traffic_used']; + + if(!isset($admin_resources[$customer['adminid']]['mysqls_used'])) + { + $admin_resources[$customer['adminid']]['mysqls_used'] = 0; + } + + if($customer['mysqls'] != '-1') + { + $admin_resources[$customer['adminid']]['mysqls_used']+= intval_ressource($customer['mysqls']); + } + + if(!isset($admin_resources[$customer['adminid']]['ftps_used'])) + { + $admin_resources[$customer['adminid']]['ftps_used'] = 0; + } + + if($customer['ftps'] != '-1') + { + $admin_resources[$customer['adminid']]['ftps_used']+= intval_ressource($customer['ftps']); + } + + if(!isset($admin_resources[$customer['adminid']]['tickets_used'])) + { + $admin_resources[$customer['adminid']]['tickets_used'] = 0; + } + + if($customer['tickets'] != '-1') + { + $admin_resources[$customer['adminid']]['tickets_used']+= intval_ressource($customer['tickets']); + } + + if(!isset($admin_resources[$customer['adminid']]['emails_used'])) + { + $admin_resources[$customer['adminid']]['emails_used'] = 0; + } + + if($customer['emails'] != '-1') + { + $admin_resources[$customer['adminid']]['emails_used']+= intval_ressource($customer['emails']); + } + + if(!isset($admin_resources[$customer['adminid']]['email_accounts_used'])) + { + $admin_resources[$customer['adminid']]['email_accounts_used'] = 0; + } + + if($customer['email_accounts'] != '-1') + { + $admin_resources[$customer['adminid']]['email_accounts_used']+= intval_ressource($customer['email_accounts']); + } + + if(!isset($admin_resources[$customer['adminid']]['email_forwarders_used'])) + { + $admin_resources[$customer['adminid']]['email_forwarders_used'] = 0; + } + + if($customer['email_forwarders'] != '-1') + { + $admin_resources[$customer['adminid']]['email_forwarders_used']+= intval_ressource($customer['email_forwarders']); + } + + if(!isset($admin_resources[$customer['adminid']]['email_quota_used'])) + { + $admin_resources[$customer['adminid']]['email_quota_used'] = 0; + } + + if($customer['email_quota'] != '-1') + { + $admin_resources[$customer['adminid']]['email_quota_used']+= intval_ressource($customer['email_quota']); + } + + if(!isset($admin_resources[$customer['adminid']]['subdomains_used'])) + { + $admin_resources[$customer['adminid']]['subdomains_used'] = 0; + } + + if($customer['subdomains'] != '-1') + { + $admin_resources[$customer['adminid']]['subdomains_used']+= intval_ressource($customer['subdomains']); + } + + $customer_mysqls = $db->query_first('SELECT COUNT(*) AS `number_mysqls` FROM `' . TABLE_PANEL_DATABASES . '` WHERE `customerid` = "' . (int)$customer['customerid'] . '"'); + $customer['mysqls_used_new'] = (int)$customer_mysqls['number_mysqls']; + $customer_emails = $db->query_first('SELECT COUNT(*) AS `number_emails` FROM `' . TABLE_MAIL_VIRTUAL . '` WHERE `customerid` = "' . (int)$customer['customerid'] . '"'); + $customer['emails_used_new'] = (int)$customer_emails['number_emails']; + $customer_emails_result = $db->query('SELECT `email`, `email_full`, `destination`, `popaccountid` AS `number_email_forwarders` FROM `' . TABLE_MAIL_VIRTUAL . '` WHERE `customerid` = "' . (int)$customer['customerid'] . '" '); + $customer_email_forwarders = 0; + $customer_email_accounts = 0; + + while($customer_emails_row = $db->fetch_array($customer_emails_result)) + { + if($customer_emails_row['destination'] != '') + { + $customer_emails_row['destination'] = explode(' ', makeCorrectDestination($customer_emails_row['destination'])); + $customer_email_forwarders+= count($customer_emails_row['destination']); + + if(in_array($customer_emails_row['email_full'], $customer_emails_row['destination'])) + { + $customer_email_forwarders-= 1; + $customer_email_accounts++; + } + } + } + + $customer['email_accounts_used_new'] = $customer_email_accounts; + $customer['email_forwarders_used_new'] = $customer_email_forwarders; + $customer_ftps = $db->query_first('SELECT COUNT(*) AS `number_ftps` FROM `' . TABLE_FTP_USERS . '` WHERE `customerid` = "' . (int)$customer['customerid'] . '"'); + $customer['ftps_used_new'] = ((int)$customer_ftps['number_ftps'] - 1); + $customer_tickets = $db->query_first('SELECT COUNT(*) AS `number_tickets` FROM `' . TABLE_PANEL_TICKETS . '` WHERE `answerto` = "0" AND `customerid` = "' . (int)$customer['customerid'] . '"'); + $customer['tickets_used_new'] = (int)$customer_tickets['number_tickets']; + $customer_subdomains = $db->query_first('SELECT COUNT(*) AS `number_subdomains` FROM `' . TABLE_PANEL_DOMAINS . '` WHERE `customerid` = "' . (int)$customer['customerid'] . '" AND `parentdomainid` <> "0"'); + $customer['subdomains_used_new'] = (int)$customer_subdomains['number_subdomains']; + $customer_email_quota = $db->query_first('SELECT SUM(`quota`) AS `email_quota` FROM `' . TABLE_MAIL_USERS . '` WHERE `customerid` = "' . (int)$customer['customerid'] . '"'); + $customer['email_quota_used_new'] = (int)$customer_email_quota['email_quota']; + $db->query('UPDATE `' . TABLE_PANEL_CUSTOMERS . '` SET `mysqls_used` = "' . (int)$customer['mysqls_used_new'] . '", `emails_used` = "' . (int)$customer['emails_used_new'] . '", `email_accounts_used` = "' . (int)$customer['email_accounts_used_new'] . '", `email_forwarders_used` = "' . (int)$customer['email_forwarders_used_new'] . '", `email_quota_used` = "' . (int)$customer['email_quota_used_new'] . '", `ftps_used` = "' . (int)$customer['ftps_used_new'] . '", `tickets_used` = "' . (int)$customer['tickets_used_new'] . '", `subdomains_used` = "' . (int)$customer['subdomains_used_new'] . '" WHERE `customerid` = "' . (int)$customer['customerid'] . '"'); + + if($returndebuginfo === true) + { + $returnval['customers'][$customer['customerid']] = $customer; + } + } + + // Admins + + $admins = $db->query('SELECT * FROM `' . TABLE_PANEL_ADMINS . '` ORDER BY `adminid`'); + + while($admin = $db->fetch_array($admins)) + { + $admin_customers = $db->query_first('SELECT COUNT(*) AS `number_customers` FROM `' . TABLE_PANEL_CUSTOMERS . '` WHERE `adminid` = "' . (int)$admin['adminid'] . '"'); + $admin['customers_used_new'] = $admin_customers['number_customers']; + $admin_domains = $db->query_first('SELECT COUNT(*) AS `number_domains` FROM `' . TABLE_PANEL_DOMAINS . '` WHERE `adminid` = "' . (int)$admin['adminid'] . '" AND `isemaildomain` = "1"'); + $admin['domains_used_new'] = $admin_domains['number_domains']; + + if(!isset($admin_resources[$admin['adminid']])) + { + $admin_resources[$admin['adminid']] = Array(); + } + + if(!isset($admin_resources[$admin['adminid']]['diskspace_used'])) + { + $admin_resources[$admin['adminid']]['diskspace_used'] = 0; + } + + $admin['diskspace_used_new'] = $admin_resources[$admin['adminid']]['diskspace_used']; + + if(!isset($admin_resources[$admin['adminid']]['traffic_used'])) + { + $admin_resources[$admin['adminid']]['traffic_used'] = 0; + } + + $admin['traffic_used_new'] = $admin_resources[$admin['adminid']]['traffic_used']; + + if(!isset($admin_resources[$admin['adminid']]['mysqls_used'])) + { + $admin_resources[$admin['adminid']]['mysqls_used'] = 0; + } + + $admin['mysqls_used_new'] = $admin_resources[$admin['adminid']]['mysqls_used']; + + if(!isset($admin_resources[$admin['adminid']]['ftps_used'])) + { + $admin_resources[$admin['adminid']]['ftps_used'] = 0; + } + + $admin['ftps_used_new'] = $admin_resources[$admin['adminid']]['ftps_used']; + + if(!isset($admin_resources[$admin['adminid']]['emails_used'])) + { + $admin_resources[$admin['adminid']]['emails_used'] = 0; + } + + $admin['emails_used_new'] = $admin_resources[$admin['adminid']]['emails_used']; + + if(!isset($admin_resources[$admin['adminid']]['email_accounts_used'])) + { + $admin_resources[$admin['adminid']]['email_accounts_used'] = 0; + } + + $admin['email_accounts_used_new'] = $admin_resources[$admin['adminid']]['email_accounts_used']; + + if(!isset($admin_resources[$admin['adminid']]['tickets_used'])) + { + $admin_resources[$admin['adminid']]['tickets_used'] = 0; + } + + $admin['tickets_used_new'] = $admin_resources[$admin['adminid']]['tickets_used']; + + if(!isset($admin_resources[$admin['adminid']]['email_forwarders_used'])) + { + $admin_resources[$admin['adminid']]['email_forwarders_used'] = 0; + } + + $admin['email_forwarders_used_new'] = $admin_resources[$admin['adminid']]['email_forwarders_used']; + + if(!isset($admin_resources[$admin['adminid']]['email_quota_used'])) + { + $admin_resources[$admin['adminid']]['email_quota_used'] = 0; + } + + $admin['email_quota_used_new'] = $admin_resources[$admin['adminid']]['email_quota_used']; + + if(!isset($admin_resources[$admin['adminid']]['subdomains_used'])) + { + $admin_resources[$admin['adminid']]['subdomains_used'] = 0; + } + + $admin['subdomains_used_new'] = $admin_resources[$admin['adminid']]['subdomains_used']; + $db->query('UPDATE `' . TABLE_PANEL_ADMINS . '` SET `customers_used` = "' . (int)$admin['customers_used_new'] . '", `domains_used` = "' . (int)$admin['domains_used_new'] . '", `diskspace_used` = "' . (int)$admin['diskspace_used_new'] . '", `mysqls_used` = "' . (int)$admin['mysqls_used_new'] . '", `emails_used` = "' . (int)$admin['emails_used_new'] . '", `email_accounts_used` = "' . (int)$admin['email_accounts_used_new'] . '", `email_forwarders_used` = "' . (int)$admin['email_forwarders_used_new'] . '", `email_quota_used` = "' . (int)$admin['email_quota_used_new'] . '", `ftps_used` = "' . (int)$admin['ftps_used_new'] . '", `tickets_used` = "' . (int)$admin['tickets_used_new'] . '", `subdomains_used` = "' . (int)$admin['subdomains_used_new'] . '", `traffic_used` = "' . (int)$admin['traffic_used_new'] . '" WHERE `adminid` = "' . (int)$admin['adminid'] . '"'); + + if($returndebuginfo === true) + { + $returnval['admins'][$admin['adminid']] = $admin; + } + } + + return $returnval; +} diff --git a/lib/functions/validate/function.buildValidMailFrom.php b/lib/functions/validate/function.buildValidMailFrom.php new file mode 100644 index 0000000000..5586c9e1da --- /dev/null +++ b/lib/functions/validate/function.buildValidMailFrom.php @@ -0,0 +1,31 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Functions + * @version $Id: function.buildValidMailFrom.php 2724 2009-06-07 14:18:02Z flo $ + */ + +/** + * Create a valid from/to - mailheader (remove carriage-returns) + * + * @param string The name of the recipient + * @param string The mailaddress + * @return string A valid header-entry + * @author Florian Aders + */ + +function buildValidMailFrom($name, $mailaddress) +{ + $mailfrom = str_replace(array("\r", "\n"), '', $name) . ' <' . str_replace(array("\r", "\n"), '', $mailaddress) . '>'; + return $mailfrom; +} diff --git a/lib/functions/validate/function.checkMysqlAccessHost.php b/lib/functions/validate/function.checkMysqlAccessHost.php new file mode 100644 index 0000000000..9ee792b9df --- /dev/null +++ b/lib/functions/validate/function.checkMysqlAccessHost.php @@ -0,0 +1,33 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Functions + * @version $Id: function.checkMysqlAccessHost.php 2724 2009-06-07 14:18:02Z flo $ + */ + +function checkMysqlAccessHost($fieldname, $fielddata, $newfieldvalue, $allnewfieldvalues) +{ + $mysql_access_host_array = array_map('trim', explode(',', $newfieldvalue)); + + foreach($mysql_access_host_array as $host_entry) + { + if(validate_ip($host_entry, true) == false + && validateDomain($host_entry) == false + && $host_entry != '%') + { + return array(FORMFIELDS_PLAUSIBILITY_CHECK_ERROR, 'invalidmysqlhost', $host_entry); + } + } + + return array(FORMFIELDS_PLAUSIBILITY_CHECK_OK); +} diff --git a/lib/functions/validate/function.checkUsername.php b/lib/functions/validate/function.checkUsername.php new file mode 100644 index 0000000000..cc7346ea40 --- /dev/null +++ b/lib/functions/validate/function.checkUsername.php @@ -0,0 +1,35 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Functions + * @version $Id: function.checkUsername.php 2724 2009-06-07 14:18:02Z flo $ + */ + +function checkUsername($fieldname, $fielddata, $newfieldvalue, $allnewfieldvalues) +{ + global $settings; + if(!isset($allnewfieldvalues['customer_mysqlprefix'])) + { + $allnewfieldvalues['customer_mysqlprefix'] = $settings['customer']['mysqlprefix']; + } + $returnvalue = array(); + if(validateUsername($newfieldvalue, $settings['panel']['unix_names'], 14 - strlen($allnewfieldvalues['customer_mysqlprefix'])) === true) + { + $returnvalue = array(FORMFIELDS_PLAUSIBILITY_CHECK_OK); + } + else + { + $returnvalue = array(FORMFIELDS_PLAUSIBILITY_CHECK_ERROR, 'accountprefixiswrong'); + } + return $returnvalue; +} diff --git a/lib/functions/validate/function.makeCorrectDestination.php b/lib/functions/validate/function.makeCorrectDestination.php new file mode 100644 index 0000000000..9a28354fe6 --- /dev/null +++ b/lib/functions/validate/function.makeCorrectDestination.php @@ -0,0 +1,43 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Functions + * @version $Id: function.makeCorrectDestination.php 2724 2009-06-07 14:18:02Z flo $ + */ + +/** + * Function which returns a correct destination for Postfix Virtual Table + * + * @param string The destinations + * @return string the corrected destinations + * @author Florian Lippert + */ + +function makeCorrectDestination($destination) +{ + $search = '/ +/'; + $replace = ' '; + $destination = preg_replace($search, $replace, $destination); + + if(substr($destination, 0, 1) == ' ') + { + $destination = substr($destination, 1); + } + + if(substr($destination, -1, 1) == ' ') + { + $destination = substr($destination, 0, strlen($destination) - 1); + } + + return $destination; +} diff --git a/lib/functions/validate/function.validate.php b/lib/functions/validate/function.validate.php new file mode 100644 index 0000000000..0db781dc1c --- /dev/null +++ b/lib/functions/validate/function.validate.php @@ -0,0 +1,83 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Functions + * @version $Id: function.validate.php 2724 2009-06-07 14:18:02Z flo $ + */ + +/** + * Validates the given string by matching against the pattern, prints an error on failure and exits + * + * @param string $str the string to be tested (user input) + * @param string the $fieldname to be used in error messages + * @param string $pattern the regular expression to be used for testing + * @param string language id for the error + * @return string the clean string + * + * If the default pattern is used and the string does not match, we try to replace the + * 'bad' values and log the action. + * + */ + +function validate($str, $fieldname, $pattern = '', $lng = '', $emptydefault = array()) +{ + global $log; + + if(!is_array($emptydefault)) + { + $emptydefault_array = array( + $emptydefault + ); + unset($emptydefault); + $emptydefault = $emptydefault_array; + unset($emptydefault_array); + } + + // Check if the $str is one of the values which represent the default for an 'empty' value + + if(is_array($emptydefault) + && !empty($emptydefault) + && in_array($str, $emptydefault) + && isset($emptydefault[0])) + { + return $emptydefault[0]; + } + + if($pattern == '') + { + $pattern = '/^[^\r\n\t\f\0]*$/D'; + + if(!preg_match($pattern, $str)) + { + // Allows letters a-z, digits, space (\\040), hyphen (\\-), underscore (\\_) and backslash (\\\\), + // everything else is removed from the string. + + $allowed = "/[^a-z0-9\\040\\.\\-\\_\\\\]/i"; + preg_replace($allowed, "", $str); + $log->logAction(null, LOG_WARNING, "cleaned bad formatted string (" . $str . ")"); + } + } + + if(preg_match($pattern, $str)) + { + return $str; + } + + if($lng == '') + { + $lng = 'stringformaterror'; + } + + standard_error($lng, $fieldname); + exit; +} diff --git a/lib/functions/validate/function.validateDomain.php b/lib/functions/validate/function.validateDomain.php new file mode 100644 index 0000000000..bb498386ef --- /dev/null +++ b/lib/functions/validate/function.validateDomain.php @@ -0,0 +1,46 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Functions + * @version $Id: function.validateDomain.php 2724 2009-06-07 14:18:02Z flo $ + */ + +/** + * Check if the submitted string is a valid domainname, i.e. + * it consists only of the following characters ([a-z0-9][a-z0-9\-]+\.)+[a-z]{2,4} + * + * @param string The domainname which should be checked. + * @return boolean True if the domain is valid, false otherwise + * @author Florian Lippert + * @author Michael Duergner + * + */ + +function validateDomain($domainname) +{ + // we add http:// because this makes a domain valid for the filter; + + $domainname_tmp = 'http://' . $domainname; + + // If FILTER_VALIDATE_URL is good, but FILTER_VALIDATE_URL with FILTER_FLAG_PATH_REQUIRED or FILTER_FLAG_QUERY_REQUIRED is also good, it isn't just a domain. + // This is a ugly hack, maybe a good regex would be better? + + if(filter_var($domainname_tmp, FILTER_VALIDATE_URL) !== false && filter_var($domainname_tmp, FILTER_VALIDATE_URL, FILTER_FLAG_PATH_REQUIRED) === false && filter_var($domainname_tmp, FILTER_VALIDATE_URL, FILTER_FLAG_QUERY_REQUIRED) === false) + { + return $domainname; + } + else + { + return false; + } +} diff --git a/lib/functions/validate/function.validateEmail.php b/lib/functions/validate/function.validateEmail.php new file mode 100644 index 0000000000..dceff330ab --- /dev/null +++ b/lib/functions/validate/function.validateEmail.php @@ -0,0 +1,32 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Functions + * @version $Id: function.validateEmail.php 2724 2009-06-07 14:18:02Z flo $ + */ + +/** + * Returns if an emailaddress is in correct format or not + * + * @param string The email address to check + * @return bool Correct or not + * @author Florian Lippert + * + * @changes Backported regex from SysCP 1.3 (lib/classes/Syscp/Handler/Validation.class.php) + */ + +function validateEmail($email) +{ + $email = strtolower($email); + return filter_var($email, FILTER_VALIDATE_EMAIL); +} diff --git a/lib/functions/validate/function.validateUrl.php b/lib/functions/validate/function.validateUrl.php new file mode 100644 index 0000000000..06061ab369 --- /dev/null +++ b/lib/functions/validate/function.validateUrl.php @@ -0,0 +1,70 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Functions + * @version $Id: function.validateUrl.php 2724 2009-06-07 14:18:02Z flo $ + */ + +/** + * Returns whether a URL is in a correct format or not + * + * @param string URL to be tested + * @return bool + * @author Christian Hoffmann + * + */ + +function validateUrl($url) +{ + if(strtolower(substr($url, 0, 7)) != "http://" + && strtolower(substr($url, 0, 8)) != "https://") + { + $url = 'http://' . $url; + } + + if(filter_var($url, FILTER_VALIDATE_URL, FILTER_FLAG_SCHEME_REQUIRED) !== false) + { + return true; + } + else + { + if(strtolower(substr($url, 0, 7)) == "http://" + || strtolower(substr($url, 0, 8)) == "https://") + { + if(strtolower(substr($url, 0, 7)) == "http://") + { + $ip = strtolower(substr($url, 7)); + } + + if(strtolower(substr($url, 0, 8)) == "https://") + { + $ip = strtolower(substr($url, 8)); + } + + $ip = substr($ip, 0, strpos($ip, '/')); + + if(validate_ip($ip, true) !== false) + { + return true; + } + else + { + return false; + } + } + else + { + return false; + } + } +} diff --git a/lib/functions/validate/function.validateUsername.php b/lib/functions/validate/function.validateUsername.php new file mode 100644 index 0000000000..05d61a42d6 --- /dev/null +++ b/lib/functions/validate/function.validateUsername.php @@ -0,0 +1,45 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Functions + * @version $Id: function.validateUsername.php 2724 2009-06-07 14:18:02Z flo $ + */ + +/** + * Returns if an username is in correct format or not. + * + * @param string The username to check + * @return bool Correct or not + * @author Michael Duergner + * + * @changes Backported regex from SysCP 1.3 (lib/classes/Syscp/Handler/Validation.class.php) + */ + +function validateUsername($username, $unix_names = 1, $mysql_max = '') +{ + if($unix_names == 0) + { + if(strpos($username, '--') === false) + { + return (preg_match('/^[a-z][a-z0-9\-_]{1,' . (int)($mysql_max - 1) . '}[a-z0-9]{1}$/Di', $username) != false); + } + else + { + return false; + } + } + else + { + return (preg_match('/^[a-z][a-z0-9]{1,' . $mysql_max . '}$/Di', $username) != false); + } +} diff --git a/lib/functions/validate/function.validate_ip.php b/lib/functions/validate/function.validate_ip.php new file mode 100644 index 0000000000..94f646fd78 --- /dev/null +++ b/lib/functions/validate/function.validate_ip.php @@ -0,0 +1,44 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Functions + * @version $Id: function.validate_ip.php 2724 2009-06-07 14:18:02Z flo $ + */ + +/** + * Checks whether it is a valid ip + * + * @return mixed ip address on success, standard_error on failure + */ + +function validate_ip($ip, $return_bool = false, $lng = 'invalidip') +{ + if(filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6) === FALSE + && filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4) === FALSE + && filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_RES_RANGE) === FALSE) + { + if($return_bool) + { + return false; + } + else + { + standard_error($lng, $ip); + exit; + } + } + else + { + return $ip; + } +} diff --git a/lib/init.php b/lib/init.php new file mode 100644 index 0000000000..dd521acb5f --- /dev/null +++ b/lib/init.php @@ -0,0 +1,376 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Panel + * @version $Id: init.php 2733 2009-11-06 09:32:00Z flo $ + */ + +// prevent syscp pages from being cached + +header("Cache-Control: no-cache, must-revalidate"); +header("Pragma: no-cache"); +header("Content-type: text/html; charset=ISO-8859-1"); + +// ensure that default timezone is set +if(function_exists("date_default_timezone_set") && function_exists("date_default_timezone_get")) +{ + @date_default_timezone_set(@date_default_timezone_get()); +} + +/** + * Register Globals Security Fix + * - unsetting every variable registered in $_REQUEST and as variable itself + */ + +foreach($_REQUEST as $key => $value) +{ + if(isset($$key)) + { + unset($$key); + } +} + +unset($_); +unset($value); +unset($key); +$filename = basename($_SERVER['PHP_SELF']); + +if(!file_exists('./lib/userdata.inc.php')) +{ + die('You have to configure SysCP first!'); +} + +if(!is_readable('./lib/userdata.inc.php')) +{ + die('You have to make the file "./lib/userdata.inc.php" readable for the http-process!'); +} + +/** + * Includes the Usersettings eg. MySQL-Username/Passwort etc. + */ + +require ('./lib/userdata.inc.php'); + +if(!isset($sql) + || !is_array($sql)) +{ + $config_hint = file_get_contents('./templates/misc/configurehint.tpl'); + die($config_hint); +} + +// Legacy sql-root-information +if(isset($sql['root_user']) && isset($sql['root_password']) && (!isset($sql_root) || !is_array($sql_root))) +{ + $sql_root = array(0 => array('caption' => 'Default', 'host' => $sql['host'], 'user' => $sql['root_user'], 'password' => $sql['root_password'])); + unset($sql['root_user']); + unset($sql['root_password']); +} + +/** + * Includes the Functions + */ + +require ('./lib/functions.php'); + +/** + * Includes the MySQL-Tabledefinitions etc. + */ + +require ('./lib/tables.inc.php'); + +/** + * Includes the MySQL-Connection-Class + */ + +$db = new db($sql['host'], $sql['user'], $sql['password'], $sql['db']); +unset($sql['password']); +unset($db->password); + +// we will try to unset most of the $sql information if they are not needed +// by the calling script. + +if(!isset($need_db_sql_data) || $need_db_sql_data !== true) +{ + unset($sql); + $sql = array(); +} + +if(!isset($need_root_db_sql_data) || $need_root_db_sql_data !== true) +{ + unset($sql_root); + $sql_root = array(); +} + +/** + * Create a new idna converter + */ + +$idna_convert = new idna_convert_wrapper(); + +/** + * Reverse magic_quotes_gpc=on to have clean GPC data again + */ + +if(get_magic_quotes_gpc()) +{ + $in = array(&$_GET, &$_POST, &$_COOKIE); + + while(list($k, $v) = each($in)) + { + foreach($v as $key => $val) + { + if(!is_array($val)) + { + $in[$k][$key] = stripslashes($val); + continue; + } + + $in[] = & $in[$k][$key]; + } + } + + unset($in); +} + +/** + * Selects settings from MySQL-Table + */ + +$settings_data = loadConfigArrayDir('./actions/admin/settings/'); +$settings = loadSettings(&$settings_data, &$db); + +if(!isset($settings['panel']['version']) + || $settings['panel']['version'] != $version) +{ + redirectTo('install/updatesql.php'); + exit; +} + +/** + * SESSION MANAGEMENT + */ + +$remote_addr = $_SERVER['REMOTE_ADDR']; +$http_user_agent = $_SERVER['HTTP_USER_AGENT']; +unset($userinfo); +unset($userid); +unset($customerid); +unset($adminid); +unset($s); + +if(isset($_POST['s'])) +{ + $s = $_POST['s']; + $nosession = 0; +} +elseif(isset($_GET['s'])) +{ + $s = $_GET['s']; + $nosession = 0; +} +else +{ + $s = ''; + $nosession = 1; +} + +$timediff = time() - $settings['session']['sessiontimeout']; +$db->query('DELETE FROM `' . TABLE_PANEL_SESSIONS . '` WHERE `lastactivity` < "' . (int)$timediff . '"'); +$userinfo = Array(); + +if(isset($s) + && $s != "" + && $nosession != 1) +{ + $query = 'SELECT `s`.*, `u`.* FROM `' . TABLE_PANEL_SESSIONS . '` `s` LEFT JOIN `'; + + if(AREA == 'admin') + { + $query.= TABLE_PANEL_ADMINS . '` `u` ON (`s`.`userid` = `u`.`adminid`)'; + $adminsession = '1'; + } + else + { + $query.= TABLE_PANEL_CUSTOMERS . '` `u` ON (`s`.`userid` = `u`.`customerid`)'; + $adminsession = '0'; + } + + $query.= 'WHERE `s`.`hash`="' . $db->escape($s) . '" AND `s`.`ipaddress`="' . $db->escape($remote_addr) . '" AND `s`.`useragent`="' . $db->escape($http_user_agent) . '" AND `s`.`lastactivity` > "' . (int)$timediff . '" AND `s`.`adminsession` = "' . $db->escape($adminsession) . '"'; + $userinfo = $db->query_first($query); + + if((($userinfo['adminsession'] == '1' && AREA == 'admin' && isset($userinfo['adminid'])) || ($userinfo['adminsession'] == '0' && (AREA == 'customer' || AREA == 'login') && isset($userinfo['customerid']))) + && (!isset($userinfo['deactivated']) || $userinfo['deactivated'] != '1')) + { + $userinfo['newformtoken'] = strtolower(md5(uniqid(microtime(), 1))); + $query = 'UPDATE `' . TABLE_PANEL_SESSIONS . '` SET `lastactivity`="' . time() . '", `formtoken`="' . $userinfo['newformtoken'] . '" WHERE `hash`="' . $db->escape($s) . '" AND `adminsession` = "' . $db->escape($adminsession) . '"'; + $db->query($query); + $nosession = 0; + } + else + { + $nosession = 1; + } +} +else +{ + $nosession = 1; +} + +/** + * Language Managament + */ + +$langs = array(); +$languages = array(); + +// query the whole table + +$query = 'SELECT * FROM `' . TABLE_PANEL_LANGUAGE . '` '; +$result = $db->query($query); + +// presort languages + +while($row = $db->fetch_array($result)) +{ + $langs[$row['language']][] = $row; +} + +// buildup $languages for the login screen + +foreach($langs as $key => $value) +{ + $languages[$key] = $key; +} + +if(!isset($userinfo['def_language']) + || !isset($languages[$userinfo['def_language']])) +{ + if(isset($_GET['language']) + && isset($languages[$_GET['language']])) + { + $language = $_GET['language']; + } + else + { + $language = $settings['panel']['standardlanguage']; + } +} +else +{ + $language = $userinfo['def_language']; +} + +// include every english language file we can get + +foreach($langs['English'] as $key => $value) +{ + include_once makeSecurePath($value['file']); +} + +// now include the selected language if its not english + +if($language != 'English') +{ + foreach($langs[$language] as $key => $value) + { + include_once makeSecurePath($value['file']); + } +} + +/** + * Redirects to index.php (login page) if no session exists + */ + +if($nosession == 1 + && AREA != 'login') +{ + unset($userinfo); + redirectTo('index.php'); + exit; +} + +/** + * Initialize Template Engine + */ + +$templatecache = array(); + +/** + * Logic moved out of lng-file + */ + +if(isset($userinfo['loginname']) + && $userinfo['loginname'] != '') +{ + $lng['menue']['main']['username'].= $userinfo['loginname']; + + /** + * Initialize logging + */ + + $log = SysCPLogger::getInstanceOf($userinfo, $db, $settings); +} + +/** + * Fills variables for navigation, header and footer + */ + +if(AREA == 'admin' || AREA == 'customer') +{ + $navigation_data = loadConfigArrayDir('./lib/navigation/'); + $navigation = buildNavigation($navigation_data[AREA], $userinfo); + unset($navigation_data); +} + +eval("\$header = \"" . getTemplate('header', '1') . "\";"); +eval("\$footer = \"" . getTemplate('footer', '1') . "\";"); + +if(isset($_POST['action'])) +{ + $action = $_POST['action']; +} +elseif(isset($_GET['action'])) +{ + $action = $_GET['action']; +} +else +{ + $action = ''; +} + +if(isset($_POST['page'])) +{ + $page = $_POST['page']; +} +elseif(isset($_GET['page'])) +{ + $page = $_GET['page']; +} +else +{ + $page = ''; +} + +if($page == '') +{ + $page = 'overview'; +} + +/** + * Initialize the mailingsystem + */ + +$mail = new PHPMailer(); +$mail->From = $settings['panel']['adminmail']; + +?> \ No newline at end of file diff --git a/lib/navigation/00.syscp.main.php b/lib/navigation/00.syscp.main.php new file mode 100644 index 0000000000..4e041a94f9 --- /dev/null +++ b/lib/navigation/00.syscp.main.php @@ -0,0 +1,239 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Panel + * @version $Id: 00.syscp.main.php 2733 2009-11-06 09:32:00Z flo $ + */ + +return array ( + 'customer' => array ( + 'index' => array ( + 'url' => 'customer_index.php', + 'label' => $lng['menue']['main']['main'], + 'elements' => array ( + array ( + 'label' => $lng['menue']['main']['username'], + ), + array ( + 'url' => 'customer_index.php?page=change_password', + 'label' => $lng['menue']['main']['changepassword'], + ), + array ( + 'url' => 'customer_index.php?page=change_language', + 'label' => $lng['menue']['main']['changelanguage'], + ), + array ( + 'url' => 'customer_index.php?action=logout', + 'label' => $lng['login']['logout'], + ), + ), + ), + 'email' => array ( + 'url' => 'customer_email.php', + 'label' => $lng['menue']['email']['email'], + 'elements' => array ( + array ( + 'url' => 'customer_email.php?page=emails', + 'label' => $lng['menue']['email']['emails'], + 'required_resources' => 'emails', + ), + array ( + 'url' => 'customer_email.php?page=emails&action=add', + 'label' => $lng['emails']['emails_add'], + 'required_resources' => 'emails', + ), + array ( + 'url' => 'customer_autoresponder.php', + 'label' => $lng['menue']['email']['autoresponder'], + 'required_resources' => 'emails', + 'show_element' => ( getSetting('autoresponder', 'autoresponder_active') == true ), + ), + array ( + 'url' => getSetting('panel', 'webmail_url'), + 'new_window' => true, + 'label' => $lng['menue']['email']['webmail'], + 'required_resources' => 'emails_used', + 'show_element' => ( getSetting('panel', 'webmail_url') != '' ), + ), + ), + ), + 'mysql' => array ( + 'url' => 'customer_mysql.php', + 'label' => $lng['menue']['mysql']['mysql'], + 'elements' => array ( + array ( + 'url' => 'customer_mysql.php?page=mysqls', + 'label' => $lng['menue']['mysql']['databases'], + 'required_resources' => 'mysqls', + ), + array ( + 'url' => getSetting('panel', 'phpmyadmin_url'), + 'new_window' => true, + 'label' => $lng['menue']['mysql']['phpmyadmin'], + 'required_resources' => 'mysqls_used', + 'show_element' => ( getSetting('panel', 'phpmyadmin_url') != '' ), + ), + ), + ), + 'domains' => array ( + 'url' => 'customer_domains.php', + 'label' => $lng['menue']['domains']['domains'], + 'elements' => array ( + array ( + 'url' => 'customer_domains.php?page=domains', + 'label' => $lng['menue']['domains']['settings'], + ), + ), + ), + 'ftp' => array ( + 'url' => 'customer_ftp.php', + 'label' => $lng['menue']['ftp']['ftp'], + 'elements' => array ( + array ( + 'url' => 'customer_ftp.php?page=accounts', + 'label' => $lng['menue']['ftp']['accounts'], + ), + array ( + 'url' => getSetting('panel', 'webftp_url'), + 'new_window' => true, + 'label' => $lng['menue']['ftp']['webftp'], + 'show_element' => ( getSetting('panel', 'webftp_url') != '' ), + ), + ), + ), + 'extras' => array ( + 'url' => 'customer_extras.php', + 'label' => $lng['menue']['extras']['extras'], + 'elements' => array ( + array ( + 'url' => 'customer_extras.php?page=htpasswds', + 'label' => $lng['menue']['extras']['directoryprotection'], + ), + array ( + 'url' => 'customer_extras.php?page=htaccess', + 'label' => $lng['menue']['extras']['pathoptions'], + ), + ), + ), + 'traffic' => array ( + 'url' => 'customer_traffic.php', + 'label' => $lng['menue']['traffic']['traffic'], + 'elements' => array ( + array ( + 'url' => 'customer_traffic.php?page=current', + 'label' => $lng['menue']['traffic']['current'], + ), + ), + ), + ), + 'admin' => array ( + 'index' => array ( + 'url' => 'admin_index.php', + 'label' => $lng['admin']['overview'], + 'elements' => array ( + array ( + 'label' => $lng['menue']['main']['username'], + ), + array ( + 'url' => 'admin_index.php?page=change_password', + 'label' => $lng['menue']['main']['changepassword'], + ), + array ( + 'url' => 'admin_index.php?page=change_language', + 'label' => $lng['menue']['main']['changelanguage'], + ), + array ( + 'url' => 'admin_index.php?action=logout', + 'label' => $lng['login']['logout'], + ), + ), + ), + 'resources' => array ( + 'label' => $lng['admin']['resources'], + 'required_resources' => 'customers', + 'elements' => array ( + array ( + 'url' => 'admin_customers.php?page=customers', + 'label' => $lng['admin']['customers'], + 'required_resources' => 'customers', + ), + array ( + 'url' => 'admin_domains.php?page=domains', + 'label' => $lng['admin']['domains'], + 'required_resources' => 'domains', + ), + array ( + 'url' => 'admin_admins.php?page=admins', + 'label' => $lng['admin']['admins'], + 'required_resources' => 'change_serversettings', + ), + ), + ), + 'server' => array ( + 'label' => $lng['admin']['server'], + 'required_resources' => 'change_serversettings', + 'elements' => array ( + array ( + 'url' => 'admin_configfiles.php?page=configfiles', + 'label' => $lng['admin']['configfiles']['serverconfiguration'], + 'required_resources' => 'change_serversettings', + ), + array ( + 'url' => 'admin_settings.php?page=settings', + 'label' => $lng['admin']['serversettings'], + 'required_resources' => 'change_serversettings', + ), + array ( + 'url' => 'admin_ipsandports.php?page=ipsandports', + 'label' => $lng['admin']['ipsandports']['ipsandports'], + 'required_resources' => 'change_serversettings', + ), + array ( + 'url' => 'admin_settings.php?page=rebuildconfigs', + 'label' => $lng['admin']['rebuildconf'], + 'required_resources' => 'change_serversettings', + ), + array ( + 'url' => 'admin_settings.php?page=updatecounters', + 'label' => $lng['admin']['updatecounters'], + 'required_resources' => 'change_serversettings', + ), + array ( + 'url' => 'admin_phpsettings.php?page=overview', + 'label' => $lng['menue']['phpsettings']['maintitle'], + 'show_element' => ( getSetting('system', 'mod_fcgid') == true ), + ), + ), + ), + 'misc' => array ( + 'label' => $lng['admin']['misc'], + 'elements' => array ( + array ( + 'url' => 'admin_templates.php?page=email', + 'label' => $lng['admin']['templates']['email'], + ), + array ( + 'url' => 'admin_logger.php?page=log', + 'label' => $lng['menue']['logger']['logger'], + 'required_resources' => 'change_serversettings', + 'show_element' => ( getSetting('logger', 'enabled') == true ), + ), + array ( + 'url' => 'admin_message.php?page=message', + 'label' => $lng['admin']['message'], + ), + ), + ), + ), +); +?> \ No newline at end of file diff --git a/lib/navigation/10.tickets.php b/lib/navigation/10.tickets.php new file mode 100644 index 0000000000..4673106e40 --- /dev/null +++ b/lib/navigation/10.tickets.php @@ -0,0 +1,53 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Panel + * @version $Id: 20.tickets.php 2733 2009-11-06 09:32:00Z flo $ + */ + +return array ( + 'customer' => array ( + 'tickets' => array ( + 'url' => 'customer_tickets.php', + 'label' => $lng['menue']['ticket']['ticket'], + 'show_element' => ( getSetting('ticket', 'enabled') == true ), + 'elements' => array ( + array ( + 'url' => 'customer_tickets.php?page=tickets', + 'label' => $lng['menue']['ticket']['ticket'], + ), + ), + ), + ), + 'admin' => array ( + 'tickets' => array ( + 'label' => $lng['admin']['ticketsystem'], + 'show_element' => ( getSetting('ticket', 'enabled') == true ), + 'elements' => array ( + array ( + 'url' => 'admin_tickets.php?page=tickets', + 'label' => $lng['menue']['ticket']['ticket'], + ), + array ( + 'url' => 'admin_tickets.php?page=archive', + 'label' => $lng['menue']['ticket']['archive'], + ), + array ( + 'url' => 'admin_tickets.php?page=categories', + 'label' => $lng['menue']['ticket']['categories'], + ), + ), + ), + ), +); +?> \ No newline at end of file diff --git a/lib/navigation/20.aps.installer.php b/lib/navigation/20.aps.installer.php new file mode 100644 index 0000000000..d6155e0052 --- /dev/null +++ b/lib/navigation/20.aps.installer.php @@ -0,0 +1,66 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Panel + * @version $Id: 30.aps.installer.php 2733 2009-11-06 09:32:00Z flo $ + */ + +return array ( + 'customer' => array ( + 'aps' => array ( + 'label' => $lng['customer']['aps'], + 'required_resources' => 'phpenabled', + 'show_element' => ( getSetting('aps', 'aps_active') == true ), + 'elements' => array ( + array ( + 'url' => 'customer_aps.php?action=overview', + 'label' => $lng['aps']['overview'], + ), + array ( + 'url' => 'customer_aps.php?action=customerstatus', + 'label' => $lng['aps']['status'], + ), + array ( + 'url' => 'customer_aps.php?action=search', + 'label' => $lng['aps']['search'], + ), + ), + ), + ), + 'admin' => array ( + 'aps' => array ( + 'label' => $lng['admin']['aps'], + 'required_resources' => 'can_manage_aps_packages', + 'show_element' => ( getSetting('aps', 'aps_active') == true ), + 'elements' => array ( + array ( + 'url' => 'admin_aps.php?action=upload', + 'label' => $lng['aps']['upload'], + ), + array ( + 'url' => 'admin_aps.php?action=scan', + 'label' => $lng['aps']['scan'], + ), + array ( + 'url' => 'admin_aps.php?action=managepackages', + 'label' => $lng['aps']['managepackages'], + ), + array ( + 'url' => 'admin_aps.php?action=manageinstances', + 'label' => $lng['aps']['manageinstances'], + ), + ), + ), + ), +); +?> \ No newline at end of file diff --git a/lib/tables.inc.php b/lib/tables.inc.php new file mode 100644 index 0000000000..42223baaee --- /dev/null +++ b/lib/tables.inc.php @@ -0,0 +1,71 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Panel + * @version $Id: tables.inc.php 2722 2009-05-04 18:59:28Z flo $ + */ + +define('TABLE_FTP_GROUPS', 'ftp_groups'); +define('TABLE_FTP_USERS', 'ftp_users'); +define('TABLE_MAIL_USERS', 'mail_users'); +define('TABLE_MAIL_VIRTUAL', 'mail_virtual'); +define('TABLE_PANEL_ADMINS', 'panel_admins'); +define('TABLE_PANEL_CUSTOMERS', 'panel_customers'); +define('TABLE_PANEL_DATABASES', 'panel_databases'); +define('TABLE_PANEL_DOMAINS', 'panel_domains'); +define('TABLE_PANEL_HTACCESS', 'panel_htaccess'); +define('TABLE_PANEL_HTPASSWDS', 'panel_htpasswds'); +define('TABLE_PANEL_SESSIONS', 'panel_sessions'); +define('TABLE_PANEL_SETTINGS', 'panel_settings'); +define('TABLE_PANEL_TASKS', 'panel_tasks'); +define('TABLE_PANEL_TEMPLATES', 'panel_templates'); +define('TABLE_PANEL_TRAFFIC', 'panel_traffic'); +define('TABLE_PANEL_TRAFFIC_ADMINS', 'panel_traffic_admins'); +define('TABLE_PANEL_DISKSPACE', 'panel_diskspace'); +define('TABLE_PANEL_DISKSPACE_ADMINS', 'panel_diskspace_admins'); +define('TABLE_PANEL_LANGUAGE', 'panel_languages'); +define('TABLE_PANEL_CRONSCRIPT', 'panel_cronscript'); +define('TABLE_PANEL_IPSANDPORTS', 'panel_ipsandports'); +define('TABLE_PANEL_TICKETS', 'panel_tickets'); +define('TABLE_PANEL_TICKET_CATS', 'panel_ticket_categories'); +define('TABLE_PANEL_LOG', 'panel_syslog'); +define('TABLE_MAIL_AUTORESPONDER', 'mail_autoresponder'); +define('TABLE_PANEL_PHPCONFIGS', 'panel_phpconfigs'); +define('TABLE_APS_PACKAGES', 'aps_packages'); +define('TABLE_APS_INSTANCES', 'aps_instances'); +define('TABLE_APS_SETTINGS', 'aps_settings'); +define('TABLE_APS_TASKS', 'aps_tasks'); +define('TABLE_APS_TEMP_SETTINGS', 'aps_temp_settings'); + +// APS constants + +define('TASK_INSTALL', 1); +define('TASK_REMOVE', 2); +define('TASK_RECONFIGURE', 3); +define('TASK_UPGRADE', 4); +define('TASK_SYSTEM_UPDATE', 5); +define('TASK_SYSTEM_DOWNLOAD', 6); +define('INSTANCE_INSTALL', 1); +define('INSTANCE_TASK_ACTIVE', 2); +define('INSTANCE_SUCCESS', 3); +define('INSTANCE_ERROR', 4); +define('INSTANCE_UNINSTALL', 5); +define('PACKAGE_LOCKED', 1); +define('PACKAGE_ENABLED', 2); + +// VERSION INFO + +$version = '1.0'; +$dbversion = '2'; + +?> diff --git a/lng/bulgarian.lng.php b/lng/bulgarian.lng.php new file mode 100644 index 0000000000..e7d02d1018 --- /dev/null +++ b/lng/bulgarian.lng.php @@ -0,0 +1,436 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Language + * @version $Id: bulgarian.lng.php 2692 2009-03-27 18:04:47Z flo $ + */ + +/** + * Global + */ + +$lng['translator'] = 'Ðикола Колев'; +$lng['panel']['edit'] = 'редакциÑ'; +$lng['panel']['delete'] = 'изтриване'; +$lng['panel']['create'] = 'Ñъздаване'; +$lng['panel']['save'] = 'запазване'; +$lng['panel']['yes'] = 'да'; +$lng['panel']['no'] = 'не'; +$lng['panel']['emptyfornochanges'] = 'оÑтавете празно, ако нÑма промени'; +$lng['panel']['emptyfordefault'] = 'оÑтавете празно за ÑтойноÑти по подразбиране'; +$lng['panel']['path'] = 'Път'; +$lng['panel']['toggle'] = 'Изберете'; +$lng['panel']['next'] = 'Ñледващ'; +$lng['panel']['dirsmissing'] = 'Ðе мога да Ð½Ð°Ð¼ÐµÑ€Ñ Ð¸Ð»Ð¸ да прочета директориÑта!'; +$lng['panel']['urloverridespath'] = 'URL (Ð¾Ñ‚Ð¼ÐµÐ½Ñ Ð¿ÑŠÑ‚Ñ)'; +$lng['panel']['pathorurl'] = 'Път или URL'; +$lng['panel']['ascending'] = 'възходÑщ'; +$lng['panel']['decending'] = 'низходÑщ'; +$lng['panel']['search'] = 'ТърÑете'; +$lng['panel']['used'] = 'използвани'; +$lng['panel']['translator'] = 'Преводач'; + +/** + * Login + */ + +$lng['login']['username'] = 'ПотребителÑко име'; +$lng['login']['password'] = 'Парола'; +$lng['login']['language'] = 'Език'; +$lng['login']['login'] = 'Вход'; +$lng['login']['logout'] = 'Изход'; +$lng['login']['profile_lng'] = 'Език от профила'; + +/** + * Customer + */ + +$lng['customer']['documentroot'] = 'Домашна директориÑ'; +$lng['customer']['name'] = 'ФамилиÑ'; +$lng['customer']['firstname'] = 'Име'; +$lng['customer']['company'] = 'Фирма'; +$lng['customer']['street'] = 'Улица'; +$lng['customer']['zipcode'] = 'ПощенÑки код'; +$lng['customer']['city'] = 'Град'; +$lng['customer']['phone'] = 'Телефон'; +$lng['customer']['fax'] = 'ФакÑ'; +$lng['customer']['email'] = 'E-поща'; +$lng['customer']['customernumber'] = 'КлиентÑки номер'; +$lng['customer']['diskspace'] = 'Уеб проÑтранÑтво (МБ)'; +$lng['customer']['traffic'] = 'Трафик (ГБ)'; +$lng['customer']['mysqls'] = 'MySQL бази данни'; +$lng['customer']['emails'] = 'ÐдреÑи за е-поща'; +$lng['customer']['accounts'] = 'Ðкаунти за е-поща'; +$lng['customer']['forwarders'] = 'Препращане на е-поща'; +$lng['customer']['ftps'] = 'FTP акаунти'; +$lng['customer']['subdomains'] = 'Поддомейн(и)'; +$lng['customer']['domains'] = 'Домейн(и)'; +$lng['customer']['unlimited'] = 'неограничен'; + +/** + * Customermenue + */ + +$lng['menue']['main']['main'] = 'Ðачало'; +$lng['menue']['main']['changepassword'] = 'СмÑна на паролата'; +$lng['menue']['main']['changelanguage'] = 'СмÑна на езика'; +$lng['menue']['email']['email'] = 'Е-поща'; +$lng['menue']['email']['emails'] = 'ÐдреÑи'; +$lng['menue']['email']['webmail'] = 'УебПоща'; +$lng['menue']['mysql']['mysql'] = 'MySQL'; +$lng['menue']['mysql']['databases'] = 'Бази данни'; +$lng['menue']['mysql']['phpmyadmin'] = 'phpMyAdmin'; +$lng['menue']['domains']['domains'] = 'Домейни'; +$lng['menue']['domains']['settings'] = 'ÐаÑтройки'; +$lng['menue']['ftp']['ftp'] = 'FTP'; +$lng['menue']['ftp']['accounts'] = 'Ðкаунти'; +$lng['menue']['ftp']['webftp'] = 'WebFTP'; +$lng['menue']['extras']['extras'] = 'Допълнителни'; +$lng['menue']['extras']['directoryprotection'] = 'Защита на директории'; +$lng['menue']['extras']['pathoptions'] = 'Опции за директории'; +$lng['menue']['main']['username'] = 'ПотребителÑко име: '; + +/** + * Index + */ + +$lng['index']['customerdetails'] = 'ПодробноÑти за клиента'; +$lng['index']['accountdetails'] = 'ПодробноÑти за акаунта'; + +/** + * Change Password + */ + +$lng['changepassword']['old_password'] = 'Стара парола'; +$lng['changepassword']['new_password'] = 'Ðова парола'; +$lng['changepassword']['new_password_confirm'] = 'Ðова парола (още веднъж)'; +$lng['changepassword']['new_password_ifnotempty'] = 'Ðова парола (ако оÑтавите празно, нÑма да Ñе промени)'; +$lng['changepassword']['also_change_ftp'] = ' ÑÐ¼ÐµÐ½Ñ Ñъщо и паролата на Ð³Ð»Ð°Ð²Ð½Ð¸Ñ FTP акаунт'; + +/** + * Domains + */ + +$lng['domains']['description'] = 'Тук можете да Ñъздавате (под)домейни и да променÑте техните директории.
    .СиÑтемата ще има нужда от извеÑтно време, за да влезе в Ñила вÑÑка промÑна.'; +$lng['domains']['domainsettings'] = 'ÐаÑтройки на домейна'; +$lng['domains']['domainname'] = 'Име на домейна'; +$lng['domains']['subdomain_add'] = 'Създаване на поддомейн'; +$lng['domains']['subdomain_edit'] = 'Ð ÐµÐ´Ð°ÐºÑ†Ð¸Ñ Ð½Ð° (под)домейн'; +$lng['domains']['wildcarddomain'] = 'Създаване като домейн, който прихваща вÑички заÑвки?'; +$lng['domains']['aliasdomain'] = 'ПÑевдоним за домейн'; +$lng['domains']['noaliasdomain'] = 'Без пÑевдоним за домейн'; +$lng['domain']['openbasedirpath'] = 'OpenBasedir-път'; +$lng['domain']['docroot'] = 'Път за полето по-горе'; +$lng['domain']['homedir'] = 'Домашна директориÑ'; +$lng['domains']['hasaliasdomains'] = 'Дали да има пÑевдоними на домейни'; +$lng['domains']['statstics'] = 'СтатиÑтики на потреблението'; + +/** + * eMails + */ + +$lng['emails']['description'] = 'Тук можете да Ñъздавате и да променÑте Ñвоите +адреÑи за електронна поща.
    Ðкаунтът предÑтавлÑва нещо като пощенÑка ÐºÑƒÑ‚Ð¸Ñ +пред дома ви. Ðко нÑкой иÑка да ви изпрати електронна поща, Ñ‚Ñ Ñ‰Ðµ бъде доÑтавена +във Ð²Ð°ÑˆÐ¸Ñ Ð°ÐºÐ°ÑƒÐ½Ñ‚.

    За да Ñвалите ÑвоÑта електронна поща, използвайте +Ñледните наÑтройки за пощенÑката програма: (Данните в курÑив Ñ‚Ñ€Ñбва да +бъдат променени по ÑÑŠÐ¾Ñ‚Ð²ÐµÑ‚Ð½Ð¸Ñ Ð½Ð°Ñ‡Ð¸Ð½!)
    Име на хоÑÑ‚: Име на +домейн
    ПотребителÑко име: Име на акаунта/Ð°Ð´Ñ€ÐµÑ Ð·Ð° електронна +поща
    Парола: паролата, коÑто Ñте Ñи избрали'; +$lng['emails']['emailaddress'] = 'Email адреÑ'; +$lng['emails']['emails_add'] = 'Създаване на email адреÑ'; +$lng['emails']['emails_edit'] = 'Ð ÐµÐ´Ð°ÐºÑ†Ð¸Ñ Ð½Ð° email адреÑ'; +$lng['emails']['catchall'] = 'Catchall'; +$lng['emails']['iscatchall'] = 'Да дефинирам ли като catchall адреÑ?'; +$lng['emails']['account'] = 'Ðкаунт'; +$lng['emails']['account_add'] = 'Създаване на акаунт'; +$lng['emails']['account_delete'] = 'Изтриване на акаунт'; +$lng['emails']['from'] = 'Източник'; +$lng['emails']['to'] = 'Ðазначение'; +$lng['emails']['forwarders'] = 'ПренаÑочване към'; +$lng['emails']['forwarder_add'] = 'Създаване на пренаÑочване'; + +/** + * FTP + */ + +$lng['ftp']['description'] = 'Тук можете да Ñъздадете и да промените Ñвоите +Ñметки за доÑтъп до FTP.
    Промените Ñе прилагат незабавно и акаунтите могат +да бъдат използвани веднага'; +$lng['ftp']['account_add'] = 'Създаване на акаунт'; + +/** + * MySQL + */ + +$lng['mysql']['description'] = 'Тук можете да Ñъздавате и редактирате MySQL бази от данни.
    Промените влизат в Ñила незабавно, а базите могат да бъдат използвани веднага.
    Ð’ менюто отлÑво ще намерите инÑтрумента phpMyAdmin, Ñ ÐºÐ¾Ð¹Ñ‚Ð¾ леÑно можете да админиÑтрирате Ñвоите бази от данни.

    За да ги използвате в php Ñкриптове, ви Ñ‚Ñ€Ñбват Ñледните ÑтойноÑти: (Данните в курÑив Ñ‚Ñ€Ñбва да бъдат заменени ÑÑŠÑ Ñъответните ÑтойноÑти, които Ñте запиÑали!)
    Име на хоÑÑ‚: localhost
    ПотребителÑко име: Име на база
    Парола: паролата, коÑто Ñте избрали
    База данни: Име на базата'; +$lng['mysql']['databasename'] = 'Име на базата или на потребителÑ'; +$lng['mysql']['databasedescription'] = 'ОпиÑание на базата'; +$lng['mysql']['database_create'] = 'Създаване на база'; + +/** + * Extras + */ + +$lng['extras']['description'] = 'Тук можете да добавите нÑкои екÑтри, например защита на директориите.
    СиÑтемата ще има нужда от време, за да приложи новите наÑтройки Ñлед вÑÑка промÑна.'; +$lng['extras']['directoryprotection_add'] = 'ДобавÑне защита на директории'; +$lng['extras']['view_directory'] = 'показване Ñъдържанието на директориÑта'; +$lng['extras']['pathoptions_add'] = 'добавÑне опции на пътÑ'; +$lng['extras']['directory_browsing'] = 'разглеждане Ñъдържанието на директориÑта'; +$lng['extras']['pathoptions_edit'] = 'редактиране опции на пътÑ'; +$lng['extras']['error404path'] = '404'; +$lng['extras']['error403path'] = '403'; +$lng['extras']['error500path'] = '500'; +$lng['extras']['error401path'] = '401'; +$lng['extras']['errordocument404path'] = 'URL към ErrorDocument 404'; +$lng['extras']['errordocument403path'] = 'URL към ErrorDocument 403'; +$lng['extras']['errordocument500path'] = 'URL към ErrorDocument 500'; +$lng['extras']['errordocument401path'] = 'URL към ErrorDocument 401'; + +/** + * Errors + */ + +$lng['error']['error'] = 'Грешка'; +$lng['error']['directorymustexist'] = 'ДиректориÑта %s Ñ‚Ñ€Ñбва да ÑъщеÑтвува. МолÑ, Ñъздайте Ñ ÑÑŠÑ ÑÐ²Ð¾Ñ FTP клиент.'; +$lng['error']['filemustexist'] = 'Файлът %s Ñ‚Ñ€Ñбва да ÑъщеÑтвува.'; +$lng['error']['allresourcesused'] = 'Вече Ñте изразходвали вÑичките Ñи реÑурÑи.'; +$lng['error']['domains_cantdeletemaindomain'] = 'Ðе можете да изтриете домейн, който Ñе използва като email домейн.'; +$lng['error']['domains_canteditdomain'] = 'Ðе можете да редактиране този домейн. Това е забранено от админиÑтратора.'; +$lng['error']['domains_cantdeletedomainwithemail'] = 'Ðе можете да изтриете домейн, който Ñе използва като email домейн. Първо изтрийте вÑички email адреÑи.'; +$lng['error']['firstdeleteallsubdomains'] = 'Първо Ñ‚Ñ€Ñбва да изтриете вÑички поддомейни, за да можете да Ñъздадете общ домейн за пренаÑочване.'; +$lng['error']['youhavealreadyacatchallforthisdomain'] = 'Вече Ñте дефинирали catchall Ð°Ð´Ñ€ÐµÑ Ð·Ð° този домейн.'; +$lng['error']['ftp_cantdeletemainaccount'] = 'Ðе можете да изтриете Ð³Ð»Ð°Ð²Ð½Ð¸Ñ Ñи FTP акаунт'; +$lng['error']['login'] = 'ПотребителÑкото име или паролата Ñа грешни. МолÑ, опитайте отново!'; +$lng['error']['login_blocked'] = 'Ðкаунтът е замразен поради твърде много грешни опити за влизане.
    МолÑ, опитайте отново Ñлед ' . $settings['login']['deactivatetime'] . ' Ñекунди.'; +$lng['error']['notallreqfieldsorerrors'] = 'Ðе Ñте попълнили вÑичко, или нÑкои от полетата Ñа попълнени неправилно.'; +$lng['error']['oldpasswordnotcorrect'] = 'Старата ви парола е неправилна.'; +$lng['error']['youcantallocatemorethanyouhave'] = 'Ðе можете да раздадете повече реÑурÑи, отколкото има отделени за Ñамите ваÑ.'; +$lng['error']['mustbeurl'] = 'Ðе Ñте въвели правилно или пълно url (напр. http://somedomain.com/error404.htm)'; +$lng['error']['stringisempty'] = 'ЛипÑват въведени данни в поле'; +$lng['error']['stringiswrong'] = 'Грешни въведени данни в поле'; +$lng['error']['myloginname'] = '\'ПотребителÑко име\''; +$lng['error']['mypassword'] = '\'Парола\''; +$lng['error']['oldpassword'] = '\'Стара парола\''; +$lng['error']['newpassword'] = '\'Ðова парола\''; +$lng['error']['newpasswordconfirm'] = '\'Ðова парола (отново)\''; +$lng['error']['newpasswordconfirmerror'] = 'Ðовата парола и потвърждението не Ñъвпадат'; +$lng['error']['myname'] = '\'ФамилиÑ\''; +$lng['error']['myfirstname'] = '\'Име\''; +$lng['error']['emailadd'] = '\'Ел. поща\''; +$lng['error']['mydomain'] = '\'Домейн\''; +$lng['error']['mydocumentroot'] = '\'ОÑновен път\''; +$lng['error']['loginnameexists'] = 'ПотребителÑкото име %s вече ÑъщеÑтвува'; +$lng['error']['emailiswrong'] = 'ЕлектронниÑÑ‚ Ð°Ð´Ñ€ÐµÑ %s Ñъдържа невалидни знаци или е непълен'; +$lng['error']['loginnameiswrong'] = 'ПотребителÑкото име %s Ñъдържа невалидни знаци'; +$lng['error']['userpathcombinationdupe'] = 'КомбинациÑта от потребителÑко име и път вече ÑъщеÑтвува'; +$lng['error']['patherror'] = 'Генерална грешка! ПътÑÑ‚ не може да бъде празен!'; +$lng['error']['errordocpathdupe'] = 'ОпциÑта за път %s вече ÑъщеÑтвува'; +$lng['error']['adduserfirst'] = 'МолÑ, първо Ñъздайте клиент'; +$lng['error']['domainalreadyexists'] = 'Домейнът %s вече е даден на клиент'; +$lng['error']['nolanguageselect'] = 'Ðе е избран език.'; +$lng['error']['nosubjectcreate'] = 'ТрÑбва да изберете тема за този шаблон за електронна поща.'; +$lng['error']['nomailbodycreate'] = 'ТрÑбва да изберете Ñъдържание за този шаблон за електронна поща.'; +$lng['error']['templatenotfound'] = 'Шаблонът не е открит.'; +$lng['error']['alltemplatesdefined'] = 'Ðе можете да дефинирате повече шаблони. Вече Ñе поддържат вÑички езици.'; +$lng['error']['wwwnotallowed'] = 'www не е позволено като име на поддомейн.'; +$lng['error']['subdomainiswrong'] = 'Поддомейнът %s Ñъдържа невалидни знаци.'; +$lng['error']['domaincantbeempty'] = 'Името на домейн не може да бъде празно.'; +$lng['error']['domainexistalready'] = 'Домейнът %s вече ÑъщеÑтвува.'; +$lng['error']['emailexistalready'] = 'ÐдреÑÑŠÑ‚ за електронна поща %s вече ÑъщеÑтвува.'; +$lng['error']['maindomainnonexist'] = 'ГлавниÑÑ‚ домейн %s не ÑъщеÑтвува.'; +$lng['error']['destinationnonexist'] = 'МолÑ, Ñъздайте Ñвоeто препращане в полето \'ДеÑтинациÑ\'.'; +$lng['error']['destinationalreadyexistasmail'] = 'Препращането към %s вече ÑъщеÑтвува като активен ел. адреÑ.'; +$lng['error']['destinationalreadyexist'] = 'Вече Ñте дефинирали препращач %s .'; +$lng['error']['destinationiswrong'] = 'Препращачът %s Ñъдържа невалидни знаци или е непълен.'; +$lng['error']['domainname'] = $lng['domains']['domainname']; +$lng['error']['invalidpath'] = 'Ðе Ñте избрали валиден URL (или може би проблем Ñ Ð¿Ð¾ÐºÐ°Ð·Ð²Ð°Ð½ÐµÑ‚Ð¾ Ñъдържание на директориÑ?)'; +$lng['error']['domainisaliasorothercustomer'] = 'ИзбраниÑÑ‚ пÑевдоним на домейн е или пÑевдоним Ñам по Ñебе Ñи, или принадлежи на друг клиент.'; +$lng['error']['ipstillhasdomains'] = 'КомбинациÑта от IP и порт вÑе още има домейни, Ñвързани Ñ Ð½ÐµÑ. МолÑ, прехвърлете ги към друга IP/порт комбинациÑ, преди да изтриете тази.'; +$lng['error']['cantdeletedefaultip'] = 'Ðе можете да изтриете комбинациÑта по подразбиране от IP и порт за риÑелъри. МолÑ, направете друга ÐºÐ¾Ð¼Ð±Ð¸Ð½Ð°Ñ†Ð¸Ñ Ð¿Ð¾ подразбиране за риÑелъри, преди да изтриете тази.'; +$lng['error']['cantdeletesystemip'] = 'Ðе можете да изтриете поÑледното ÑиÑтемно IP. Можете или да Ñъздадете нова IP/порт ÐºÐ¾Ð¼Ð±Ð¸Ð½Ð°Ñ†Ð¸Ñ Ð·Ð° ÑиÑтемното IP или да зададете ново ÑиÑтемно IP.'; +$lng['error']['myipaddress'] = '\'IP\''; +$lng['error']['myport'] = '\'Порт\''; +$lng['error']['myipdefault'] = 'ТрÑбва да изберете ÐºÐ¾Ð¼Ð±Ð¸Ð½Ð°Ñ†Ð¸Ñ Ð¾Ñ‚ IP и порт по подразбиране.'; +$lng['error']['myipnotdouble'] = 'Тази ÐºÐ¾Ð¼Ð±Ð¸Ð½Ð°Ñ†Ð¸Ñ IP/порт вече ÑъщеÑтвува.'; +$lng['error']['cantchangesystemip'] = 'Ðе можете да промените поÑледното ÑиÑтемно IP. Можете или да Ñъздадете нова IP/порт ÐºÐ¾Ð¼Ð±Ð¸Ð½Ð°Ñ†Ð¸Ñ Ð·Ð° ÑиÑтемното IP или да зададете ново ÑиÑтемно IP..'; +$lng['error']['loginnameissystemaccount'] = 'Ðе можете да Ñъздавате Ñметки, които Ñа подобни на ÑиÑтемните. МолÑ, въведете друго име на Ñметка.'; +$lng['error']['sessiontimeoutiswrong'] = 'За "Изтичане на ÑеÑиÑ" е позволена Ñамо чиÑлова ÑтойноÑÑ‚.'; +$lng['error']['maxloginattemptsiswrong'] = 'За "МакÑимален брой опити за влизане" е позволена Ñамо чиÑлова ÑтойноÑÑ‚.'; +$lng['error']['deactivatetimiswrong'] = 'За "Време за деактивациÑ" е позволена Ñамо чиÑлова ÑтойноÑÑ‚.'; +$lng['error']['accountprefixiswrong'] = '"КлиентÑки префикÑ" е грешен.'; +$lng['error']['mysqlprefixiswrong'] = '"SQL префикÑ" е грешен.'; +$lng['error']['ftpprefixiswrong'] = '"FTP префикÑ" е грешен.'; +$lng['error']['ipiswrong'] = '"IP адреÑ" е грешен. Позволени Ñа Ñамо валидни IP адреÑи.'; +$lng['error']['vmailuidiswrong'] = '"UID на поща" е грешен. Позволени Ñа Ñамо чиÑлови ÑтойноÑти на UID.'; +$lng['error']['vmailgidiswrong'] = '"GID на поща" е грешен. Позволени Ñа Ñамо чиÑлови ÑтойноÑти на GID.'; +$lng['error']['adminmailiswrong'] = '"ÐÐ´Ñ€ÐµÑ Ð½Ð° изпращач" е грешен. Позволени Ñа Ñамо валидни адреÑи за e-поща.'; +$lng['error']['pagingiswrong'] = 'СтойноÑтта на "ЗапиÑи на Ñтраница" е грешен. Позволени Ñа Ñамо цифрови ÑтойноÑти.'; +$lng['error']['phpmyadminiswrong'] = 'Връзката Ñъм phpMyAdmin е невалидна.'; +$lng['error']['webmailiswrong'] = 'Връзката към уеб поща е невалидна.'; +$lng['error']['webftpiswrong'] = 'Връзката към WebFTP е невалидна.'; +$lng['error']['stringformaterror'] = 'СтойноÑтта в полето "%s" не е в Ð¾Ñ‡Ð°ÐºÐ²Ð°Ð½Ð¸Ñ Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚.'; + +/** + * Questions + */ + +$lng['question']['question'] = 'Таен въпроÑ'; +$lng['question']['admin_customer_reallydelete'] = 'ÐаиÑтина ли иÑкате да изтриете клиент %s? Това е необратимо!'; +$lng['question']['admin_domain_reallydelete'] = 'ÐаиÑтина ли иÑкате да изтриете домейн %s?'; +$lng['question']['admin_domain_reallydisablesecuritysetting'] = 'ÐаиÑтина ли иÑкате да деактивирате тези наÑтройки на ÑигурноÑтта (OpenBasedir и/или SafeMode)?'; +$lng['question']['admin_admin_reallydelete'] = 'ÐаиÑтина ли иÑкате да изтриете админиÑтраторът %s? Ð’Ñеки негов клиент и домейн ще бъдат прикрепени към Ð³Ð»Ð°Ð²Ð½Ð¸Ñ Ð°Ð´Ð¼Ð¸Ð½Ð¸Ñтратор.'; +$lng['question']['admin_template_reallydelete'] = 'ÐаиÑтина ли иÑкате да изтриете шаблона \'%s\'?'; +$lng['question']['domains_reallydelete'] = 'ÐаиÑтина ли иÑкате да изтриете домейна %s?'; +$lng['question']['email_reallydelete'] = 'ÐаиÑтина ли иÑкате да изтриете адреÑа за електронна поща %s?'; +$lng['question']['email_reallydelete_account'] = 'ÐаиÑтина ли иÑкате да изтриете Ñметката за електронна поща на %s?'; +$lng['question']['email_reallydelete_forwarder'] = 'ÐаиÑтина ли иÑкате да изтриете препращането за %s?'; +$lng['question']['extras_reallydelete'] = 'ÐаиÑтина ли иÑкате да изтриете защитата на Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ %s?'; +$lng['question']['extras_reallydelete_pathoptions'] = 'ÐаиÑтина ли иÑкате да изтриете опциите на Ð¿ÑŠÑ‚Ñ %s?'; +$lng['question']['ftp_reallydelete'] = 'ÐаиÑтина ли иÑкате да изтриете FTP Ñметката %s?'; +$lng['question']['mysql_reallydelete'] = 'ÐаиÑтина ли иÑкате да изтриете базата данни %s? Това е необратимо!'; +$lng['question']['admin_configs_reallyrebuild'] = 'ÐаиÑтина ли иÑкате да изградите отново конфигурационните файлове на bind и apache?'; +$lng['question']['admin_ip_reallydelete'] = 'ÐаиÑтина ли иÑкате да изтриете IP адреÑÑŠÑ‚ %s?'; +$lng['question']['admin_domain_reallydocrootoutofcustomerroot'] = 'Сигурни ли Ñте, че иÑкате главната Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ Ð½Ð° този домейн да не попада в главната Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ Ð½Ð° клиента?'; + +/** + * Mails + */ + +$lng['mails']['pop_success']['mailbody'] = 'Здравейте,\n\nвашиÑÑ‚ пощенÑки акаунт {EMAIL}\nе Ñъздаден уÑпешно.\n\nТова Ñъобщение е генерирано автоматично, затова\nмолÑ, не отговарÑйте!\n\nПоздрави, екипът на ÐœÐЕТ'; +$lng['mails']['pop_success']['subject'] = 'ПощенÑкиÑÑ‚ акаунт е Ñъздаден уÑпешно'; +$lng['mails']['createcustomer']['mailbody'] = 'Здравейте {FIRSTNAME} {NAME},\n\nето Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð·Ð° Ð²Ð°ÑˆÐ¸Ñ Ð°ÐºÐ°ÑƒÐ½Ñ‚:\n\nПотребителÑко име: {USERNAME}\nПарола: {PASSWORD}\n\nПоздрави,\nекипът на ÐœÐЕТ'; +$lng['mails']['createcustomer']['subject'] = 'Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð·Ð° Ñметката'; + +/** + * Admin + */ + +$lng['admin']['overview'] = 'Преглед'; +$lng['admin']['ressourcedetails'] = 'Използвани реÑурÑи'; +$lng['admin']['systemdetails'] = 'СиÑтемни детайли'; +$lng['admin']['syscpdetails'] = 'SysCP детайли'; +$lng['admin']['installedversion'] = 'ИнÑталирана верÑиÑ'; +$lng['admin']['latestversion'] = 'ПоÑледна верÑиÑ'; +$lng['admin']['lookfornewversion']['clickhere'] = 'ПотърÑете чрез уеб уÑлуга'; +$lng['admin']['lookfornewversion']['error'] = 'Грешка при четене'; +$lng['admin']['resources'] = 'РеÑурÑи'; +$lng['admin']['customer'] = 'Клиент'; +$lng['admin']['customers'] = 'Клиенти'; +$lng['admin']['customer_add'] = 'ДобавÑне на клиент'; +$lng['admin']['customer_edit'] = 'Ð ÐµÐ´Ð°ÐºÑ†Ð¸Ñ Ð½Ð° клиент'; +$lng['admin']['domains'] = 'Домейни'; +$lng['admin']['domain_add'] = 'ДобавÑне на домейн'; +$lng['admin']['domain_edit'] = 'Ð ÐµÐ´Ð°ÐºÑ†Ð¸Ñ Ð½Ð° домейн'; +$lng['admin']['subdomainforemail'] = 'Поддомейни като емайл домейни'; +$lng['admin']['admin'] = 'ÐдминиÑтратор'; +$lng['admin']['admins'] = 'ÐдминиÑтратори'; +$lng['admin']['admin_add'] = 'ДобавÑне на админиÑтратор'; +$lng['admin']['admin_edit'] = 'Ð ÐµÐ´Ð°ÐºÑ†Ð¸Ñ Ð½Ð° админиÑтратор'; +$lng['admin']['customers_see_all'] = 'Може ли да вижда вÑички клиенти?'; +$lng['admin']['domains_see_all'] = 'Може ли да вижда вÑички домейни?'; +$lng['admin']['change_serversettings'] = 'Може ли да Ð¿Ñ€Ð¾Ð¼ÐµÐ½Ñ Ð½Ð°Ñтройките на Ñървъра?'; +$lng['admin']['server'] = 'Сървър'; +$lng['admin']['serversettings'] = 'ÐаÑтройки'; +$lng['admin']['stdsubdomain'] = 'Стандартен поддомейн'; +$lng['admin']['stdsubdomain_add'] = 'Създаване на Ñтандартен поддомейн'; +$lng['admin']['deactivated'] = 'Деактивиран'; +$lng['admin']['deactivated_user'] = 'Деактивирай потребител'; +$lng['admin']['sendpassword'] = 'Изпрати парола'; +$lng['admin']['ownvhostsettings'] = 'СобÑтвени наÑтройки на виртуален хоÑÑ‚'; +$lng['admin']['configfiles']['serverconfiguration'] = 'КонфигурациÑ'; +$lng['admin']['configfiles']['files'] = 'Конфигурационни файлове: МолÑ, променете Ñледните файлове или ги Ñъздайте ÑÑŠÑ
    Ñледното Ñъдържание, ако не ÑъщеÑтвуват.
    Внимание: Паролата за MySQL не е Ñменена поради ÑÑŠÐ¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð·Ð° ÑигурноÑÑ‚.
    МолÑ, Ñменете "MYSQL_PASSWORD" Ñами. Ðко забравите ÑвоÑта MySQL md,f.d
    можете да Ñ Ð½Ð°Ð¼ÐµÑ€Ð¸Ñ‚Ðµ в "lib/userdata.inc.php".'; +$lng['admin']['configfiles']['commands'] = 'Команди: МолÑ, изпълнете Ñледните команди в ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð¸Ñ Ñ€ÐµÐ´ на обвивката.'; +$lng['admin']['configfiles']['restart'] = 'Restart: МолÑ, изпълнете Ñледните команди в ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð¸Ñ Ñ€ÐµÐ´ на обвивката, за да Ñе презареди новата конфигурациÑ.'; +$lng['admin']['templates']['templates'] = 'Шаблони'; +$lng['admin']['templates']['template_add'] = 'ДобавÑне на шаблон'; +$lng['admin']['templates']['template_edit'] = 'Ð ÐµÐ´Ð°ÐºÑ†Ð¸Ñ Ð½Ð° шаблон'; +$lng['admin']['templates']['action'] = 'ДейÑтвие'; +$lng['admin']['templates']['email'] = 'Ел. поща'; +$lng['admin']['templates']['subject'] = 'Тема'; +$lng['admin']['templates']['mailbody'] = 'Съдържание'; +$lng['admin']['templates']['createcustomer'] = 'Поздравителна поща за вÑички клиенти'; +$lng['admin']['templates']['pop_success'] = 'Поздравителна поща за нови Ñметки за ел. поща'; +$lng['admin']['templates']['template_replace_vars'] = 'Променлива, коÑто да бъде заменена в шаблона:'; +$lng['admin']['templates']['FIRSTNAME'] = 'Ще бъде заменено Ñ Ð¿ÑŠÑ€Ð²Ð¾Ñ‚Ð¾ име на клиента.'; +$lng['admin']['templates']['NAME'] = 'Ще бъде заменено Ñ Ð¸Ð¼ÐµÑ‚Ð¾ на клиента.'; +$lng['admin']['templates']['USERNAME'] = 'Ще бъде заменено Ñ Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð¸Ñ‚ÐµÐ»Ñкото име на клиента.'; +$lng['admin']['templates']['PASSWORD'] = 'Ще бъде заменено Ñ Ð¿Ð°Ñ€Ð¾Ð»Ð°Ñ‚Ð° за Ñметката на клиента.'; +$lng['admin']['templates']['EMAIL'] = 'Ще бъде заменено ÑÑŠÑ Ñметка за POP3/IMAP.'; +$lng['admin']['rebuildconf'] = 'ВъзÑтановÑване на конфигурационни файлове'; +$lng['admin']['cronlastrun'] = 'ПоÑледен cron'; +$lng['admin']['ipsandports']['ipsandports'] = 'IP адреÑи и портове'; +$lng['admin']['ipsandports']['add'] = 'ДобавÑне на IP/порт'; +$lng['admin']['ipsandports']['edit'] = 'Ð ÐµÐ´Ð°ÐºÑ†Ð¸Ñ Ð½Ð° на IP/порт'; +$lng['admin']['ipsandports']['ipandport'] = 'IP/порт'; +$lng['admin']['ipsandports']['ip'] = 'IP'; +$lng['admin']['ipsandports']['port'] = 'Порт'; +$lng['admin']['memorylimitdisabled'] = 'Забранен'; +$lng['admin']['valuemandatory'] = 'Тази ÑтойноÑÑ‚ е задължителна'; +$lng['admin']['valuemandatorycompany'] = 'ТрÑбва да бъдат попълнени или "фамилиÑ" и "първо име" or "фирма"'; + +/** + * Serversettings + */ + +$lng['serversettings']['session_timeout']['title'] = 'Изтичане на ÑеÑиÑ'; +$lng['serversettings']['session_timeout']['description'] = 'Колко дълго Ñ‚Ñ€Ñбва да е неактивен един потребител, преди ÑеÑиÑта да Ñтане невалидна (в Ñекунди)?'; +$lng['serversettings']['accountprefix']['title'] = 'ÐŸÑ€ÐµÑ„Ð¸ÐºÑ Ð½Ð° клиент'; +$lng['serversettings']['accountprefix']['description'] = 'Какъв ще бъде префикÑа на Ñметките на клиенти?'; +$lng['serversettings']['mysqlprefix']['title'] = 'SQL префикÑ'; +$lng['serversettings']['mysqlprefix']['description'] = 'Какъв Ð¿Ñ€ÐµÑ„Ð¸ÐºÑ Ñ‰Ðµ имат Ñметките за MySQL?'; +$lng['serversettings']['ftpprefix']['title'] = 'FTP префикÑ'; +$lng['serversettings']['ftpprefix']['description'] = 'Какъв Ð¿Ñ€ÐµÑ„Ð¸ÐºÑ Ñ‰Ðµ имат Ñметките за FTP?'; +$lng['serversettings']['documentroot_prefix']['title'] = 'Ð”Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ Ð·Ð° документи'; +$lng['serversettings']['documentroot_prefix']['description'] = 'Къде ще Ñе ÑъхранÑват вÑички данни?'; +$lng['serversettings']['logfiles_directory']['title'] = 'Ð”Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ Ð·Ð° журнални файлове'; +$lng['serversettings']['logfiles_directory']['description'] = 'Къде ще Ñе ÑъхранÑват вÑички журнални файлове?'; +$lng['serversettings']['ipaddress']['title'] = 'IP адреÑ'; +$lng['serversettings']['ipaddress']['description'] = 'Какъв е IP адреÑÑŠÑ‚ на този Ñървър?'; +$lng['serversettings']['hostname']['title'] = 'Име на хоÑÑ‚'; +$lng['serversettings']['hostname']['description'] = 'Какво е името на хоÑÑ‚ на този Ñървър?'; +$lng['serversettings']['apachereload_command']['title'] = 'Команда за презареждане на apache'; +$lng['serversettings']['apachereload_command']['description'] = 'Каква е командата за презареждане на apache?'; +$lng['serversettings']['bindconf_directory']['title'] = 'Конфигурационна Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ Ð½Ð° Bind'; +$lng['serversettings']['bindconf_directory']['description'] = 'Къде Ñе намират конфигурационните файлове на bind?'; +$lng['serversettings']['bindreload_command']['title'] = 'Команда за презареждане на bind'; +$lng['serversettings']['bindreload_command']['description'] = 'Каква е командата за презареждане на bind?'; +$lng['serversettings']['binddefaultzone']['title'] = 'Зона по подразбиране на Bind'; +$lng['serversettings']['binddefaultzone']['description'] = 'Какво е името на зоната по подразбиране?'; +$lng['serversettings']['vmail_uid']['title'] = 'UID на пощите'; +$lng['serversettings']['vmail_uid']['description'] = 'Какво ще бъде потребителÑкото ID на пощите?'; +$lng['serversettings']['vmail_gid']['title'] = 'GID на пощите'; +$lng['serversettings']['vmail_gid']['description'] = 'Какво ще бъде груповото ID на пощите?'; +$lng['serversettings']['vmail_homedir']['title'] = 'Ð”Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ Ð·Ð° пощи'; +$lng['serversettings']['vmail_homedir']['description'] = 'Къде ще Ñе ÑъхранÑват вÑички пощи?'; +$lng['serversettings']['adminmail']['title'] = 'Изпращач'; +$lng['serversettings']['adminmail']['description'] = 'Какъв ще бъде адреÑа на изпращача на вÑички пощи от този панел?'; +$lng['serversettings']['phpmyadmin_url']['title'] = 'phpMyAdmin URL'; +$lng['serversettings']['phpmyadmin_url']['description'] = 'Какъв е адреÑÑŠÑ‚ на phpMyAdmin? (Ñ‚Ñ€Ñбва да започва Ñ http://)'; +$lng['serversettings']['webmail_url']['title'] = 'ÐÐ´Ñ€ÐµÑ Ð½Ð° уеб поща'; +$lng['serversettings']['webmail_url']['description'] = 'Какъв е адреÑÑŠÑ‚ на уеб пощата? (Ñ‚Ñ€Ñбва да започва Ñ http://)'; +$lng['serversettings']['webftp_url']['title'] = 'WebFTP URL'; +$lng['serversettings']['webftp_url']['description'] = 'Какъв е адреÑÑŠÑ‚ на WebFTP? (Ñ‚Ñ€Ñбва да започва Ñ http://)'; +$lng['serversettings']['language']['description'] = 'Какъв е езикът по подразбиране на Ð²Ð°ÑˆÐ¸Ñ Ñървър?'; +$lng['serversettings']['maxloginattempts']['title'] = 'МакÑимален брой опити за влизане'; +$lng['serversettings']['maxloginattempts']['description'] = 'МакÑимален брой неуÑпешни опити за влизане, преди Ñметката да бъде деактивирана.'; +$lng['serversettings']['deactivatetime']['title'] = 'ПродължителноÑÑ‚ на деактивациÑта'; +$lng['serversettings']['deactivatetime']['description'] = 'Време в Ñекунди, за което ще бъде деактивирана дадена Ñметка при прекалено голÑм брой неуÑпешни опити за влизане.'; +$lng['serversettings']['pathedit']['title'] = 'Тип на въвеждането на пътÑ'; +$lng['serversettings']['pathedit']['description'] = 'ПътÑÑ‚ да бъде избиран поÑредÑтвом падащо меню или поле за вход?'; +$lng['serversettings']['paging']['title'] = 'ЗапиÑи на Ñтраница'; +$lng['serversettings']['paging']['description'] = 'Колко запиÑа да бъдат показвани на Ñтраница? (0 = забранÑва Ñтранирането)'; +$lng['serversettings']['defaultip']['title'] = 'IP/порт по подразбиране'; +$lng['serversettings']['defaultip']['description'] = 'ÐšÐ¾Ñ Ðµ комбинациÑта IP/порт по подразбиране?'; + +?> diff --git a/lng/catalan.lng.php b/lng/catalan.lng.php new file mode 100644 index 0000000000..5706611112 --- /dev/null +++ b/lng/catalan.lng.php @@ -0,0 +1,395 @@ +El sistema necessitarà una mica de temps per aplicar els nous canvis un cop efectuats.'; +$lng['domains']['domainsettings'] = 'Opcions de domini'; +$lng['domains']['domainname'] = 'Nom del domini'; +$lng['domains']['subdomain_add'] = 'Crear subdomini'; +$lng['domains']['subdomain_edit'] = 'Editar (sub)domini'; +$lng['domains']['wildcarddomain'] = 'Crear un domini comodí? (wildcarddomain)'; +$lng['domains']['aliasdomain'] = 'Sobrenom per a aquest domini'; +$lng['domains']['noaliasdomain'] = 'No hi ha sobrenom del domini'; + +/** + * eMails + */ + +$lng['emails']['description'] = 'Des d\'aquí pots modificar les adreces de correu, crear-ne de noves o esborrar les que hi ha.
    Pensa que després de crear la adreça de correu, has de crear o bé un COMPTE o bé un REDIRECCIONADOR, sense una de les dues coses la adreça és inútil.

    Per baixar-te el correu en el teu client de correu (Outlook, Thunderbird, ...) utilitza la següent informació: (La informació en cursiva ha de ser substituida per la que correspongui al compte de correu en questió!)
    Servidor de correu entrant o sortint: el teu domini
    Nom dusuari: (usuari@exemple.com) (ATENCIÓ: És imprescindible posar la adreça sencera en el camp de l\'usuari, en cas contrari no funcionaria)
    Clau: la clau del compte de correu'; +$lng['emails']['emailaddress'] = 'adreces d\'email'; +$lng['emails']['emails_add'] = 'Crear adreça d\'email'; +$lng['emails']['emails_edit'] = 'Editar adreces d\'email'; +$lng['emails']['catchall'] = 'Compte comodí'; +$lng['emails']['iscatchall'] = 'Definir els Comptes comodí?'; +$lng['emails']['account'] = 'Compte'; +$lng['emails']['account_add'] = 'Crear compte'; +$lng['emails']['account_delete'] = 'Esborrar compte'; +$lng['emails']['from'] = 'Origen'; +$lng['emails']['to'] = 'Destí'; +$lng['emails']['forwarders'] = 'Redireccions'; +$lng['emails']['forwarder_add'] = 'Crear redirecció'; + +/** + * FTP + */ + +$lng['ftp']['description'] = 'Aquí pots crear els teus comptes FTP.
    Els canis s\'aplicaran a l\'instant.'; +$lng['ftp']['account_add'] = 'Crear compte'; + +/** + * MySQL + */ + +$lng['mysql']['description'] = 'Pendent de traduir
    Here you can create and change your MySQL-Databases.
    The changes are made instantly and the database can be used immediately.
    At the menu on the left side you find the tool phpMyAdmin with which you can easily administer your database.

    To use your databases in your own php-scripts use the following settings: (The data in italics have to be changed into the equivalents you typed in!)
    Hostname:
    Username: Databasename
    Password: the password you\'ve chosen
    Database: Databasename'; +$lng['mysql']['databasename'] = 'nom d\'usuari/base de dades'; +$lng['mysql']['databasedescription'] = 'descripció de la base de dades'; +$lng['mysql']['database_create'] = 'Crear base de dades'; + +/** + * Extras + */ + +$lng['extras']['description'] = 'Aquí pots controlar alguns extres, com protecció de directoris.
    El sistema requereix una mica de temps en aplicar els canvis un cop fets.'; +$lng['extras']['directoryprotection_add'] = 'Afegir protecció de directori'; +$lng['extras']['view_directory'] = 'mostra el contingut del directori'; +$lng['extras']['pathoptions_add'] = 'afegir opcions de la ruta (PATH)'; +$lng['extras']['directory_browsing'] = 'navegar pel contingut del directori'; +$lng['extras']['pathoptions_edit'] = 'editar opcions de la ruta (PATH)'; +$lng['extras']['error404path'] = '404'; +$lng['extras']['error403path'] = '403'; +$lng['extras']['error500path'] = '500'; +$lng['extras']['error401path'] = '401'; +$lng['extras']['errordocument404path'] = 'Ruta a ErrorDocument 404'; +$lng['extras']['errordocument403path'] = 'Ruta a ErrorDocument 403'; +$lng['extras']['errordocument500path'] = 'Ruta a ErrorDocument 500'; +$lng['extras']['errordocument401path'] = 'Ruta a ErrorDocument 401'; + +/** + * Errors + */ + +$lng['error']['error'] = 'Error'; +$lng['error']['directorymustexist'] = 'El directori que has escrit no existeix. Si us plau, crea\'l per FTP.'; +$lng['error']['filemustexist'] = 'El fitxer ha d\'existir.'; +$lng['error']['allresourcesused'] = 'Ja has gastat tots els teus recursos!'; +$lng['error']['domains_cantdeletemaindomain'] = 'No pots esborrar aquest domini perquè està sent usat en una adreça d\'email.'; +$lng['error']['domains_canteditdomain'] = 'No pots editar aquests dominis. Han estat bloquejats per l\'administrador'; +$lng['error']['domains_cantdeletedomainwithemail'] = 'No pots esborrar aquest domini perquè està sent usat per una direcció de correu. Has d\'esborrar abans la direcció de correu'; +$lng['error']['firstdeleteallsubdomains'] = 'No pots esborrar tots els subdominis si no tens un domini comodí (Wildcarddomain).'; +$lng['error']['youhavealreadyacatchallforthisdomain'] = 'Ja tens un compte comodí'; +$lng['error']['ftp_cantdeletemainaccount'] = 'No pots esborrar el compte principal FTP'; +$lng['error']['login'] = 'El nom d\'usuari o la Clau són incorrectes. Sisplau torna-ho a intentar!'; +$lng['error']['login_blocked'] = 'Aquest compte ha estat suspès a causa de massa intents fraudulents d\'identificació.
    Si us plau, torna a provar-ho en ' . $settings['login']['deactivatetime'] . ' segons.'; +$lng['error']['notallreqfieldsorerrors'] = 'No has omplert tots els camps o algun camp és incorrecte.'; +$lng['error']['oldpasswordnotcorrect'] = 'La clau antiga no és la correcta.'; +$lng['error']['youcantallocatemorethanyouhave'] = 'No pots ocupar més espai del que tens assignat!'; +$lng['error']['mustbeurl'] = 'No has escrit una URL correcte'; +$lng['error']['invalidpath'] = 'No has escrit una URL vàlida (potser hi ha algun problema en el llistat de directoris)'; +$lng['error']['stringisempty'] = 'Camp de text buit'; +$lng['error']['stringiswrong'] = 'Contingut erroni en el camp de text'; +$lng['error']['myloginname'] = '\'' . $lng['login']['username'] . '\''; +$lng['error']['mypassword'] = '\'' . $lng['login']['password'] . '\''; +$lng['error']['oldpassword'] = '\'' . $lng['changepassword']['old_password'] . '\''; +$lng['error']['newpassword'] = '\'' . $lng['changepassword']['new_password'] . '\''; +$lng['error']['newpasswordconfirm'] = '\'' . $lng['changepassword']['new_password_confirm'] . '\''; +$lng['error']['newpasswordconfirmerror'] = 'La nova clau no coincideix amb la confirmació'; +$lng['error']['myname'] = '\'' . $lng['customer']['name'] . '\''; +$lng['error']['myfirstname'] = '\'' . $lng['customer']['firstname'] . '\''; +$lng['error']['emailadd'] = '\'' . $lng['customer']['email'] . '\''; +$lng['error']['mydomain'] = '\'Domini\''; +$lng['error']['mydocumentroot'] = '\'Arrel dels documents\''; +$lng['error']['loginnameexists'] = 'Ja existeix l\'usuari %s'; +$lng['error']['emailiswrong'] = 'L\'adreça de correu %s conté caràcters invàlids o està incompleta'; +$lng['error']['loginnameiswrong'] = 'El nom d\'usuari %s conté no és vàlid'; +$lng['error']['userpathcombinationdupe'] = 'La combinació d\'usuari i Ruta escollida ja existeix'; +$lng['error']['patherror'] = 'Error! Has d\'introduir una ruta'; +$lng['error']['errordocpathdupe'] = 'Aquesta opció per la ruta %s ja existeix'; +$lng['error']['adduserfirst'] = 'Abans has de crear un client'; +$lng['error']['domainalreadyexists'] = 'El domini %s ja està assignat a un client'; +$lng['error']['nolanguageselect'] = 'Has de sel·leccionar un idioma.'; +$lng['error']['nosubjectcreate'] = 'Has de definir l\'assumpte per aquesta plantilla de correu.'; +$lng['error']['nomailbodycreate'] = 'Has de definir el cos del missatge per aquesta plantilla de correu.'; +$lng['error']['templatenotfound'] = 'No s\'ha trobat la plantilla.'; +$lng['error']['alltemplatesdefined'] = 'No pots definir noves plantilles. Tots els idiomes estan suportats.'; +$lng['error']['wwwnotallowed'] = 'www no és un subdomini permès.'; +$lng['error']['subdomainiswrong'] = 'El subdomini %s conté caràcters invàlids.'; +$lng['error']['domaincantbeempty'] = 'El domini no pot ser un camp buit.'; +$lng['error']['domainexistalready'] = 'Ja existeix el domini %s.'; +$lng['error']['domainisaliasorothercustomer'] = 'El sobrenom de domini escollit ja existeix, o pertany a un altre client.'; +$lng['error']['emailexistalready'] = 'Ja existeix l\'adreça %s.'; +$lng['error']['maindomainnonexist'] = 'El domini %s no existeix.'; +$lng['error']['destinationnonexist'] = 'Si us plau crea la redirecció a \'Destí\'.'; +$lng['error']['destinationalreadyexistasmail'] = 'La redirecció a %s ja existeix com un compte de correu.'; +$lng['error']['destinationalreadyexist'] = 'Ja hi ha una redirecció a %s .'; +$lng['error']['destinationiswrong'] = 'La redirecció %s conté caràcters invàlids o és incompleta.'; +$lng['error']['domainname'] = $lng['domains']['domainname']; + +/** + * Questions + */ + +$lng['question']['question'] = 'Preguntes de seguretat..'; +$lng['question']['admin_customer_reallydelete'] = 'Estas segur que vols esborrar el client %s? Aquesta acció és irreversible!'; +$lng['question']['admin_domain_reallydelete'] = 'Segur que vols esborrar el domini %s?'; +$lng['question']['admin_domain_reallydisablesecuritysetting'] = 'Segur que vols desactivar aquesta opció de seguretat? (OpenBasedir and/or SafeMode)?'; +$lng['question']['admin_admin_reallydelete'] = 'Segur que vols esborrar l\'administrador %s? Tots els seus clients aniran a parar a l\'administrador principal.'; +$lng['question']['admin_template_reallydelete'] = 'Segur que vols esborrar aquesta plantilla \'%s\'?'; +$lng['question']['domains_reallydelete'] = 'Segur que vols esborrar el domini %s?'; +$lng['question']['email_reallydelete'] = 'Segur que vols esborrar la adreça %s?'; +$lng['question']['email_reallydelete_account'] = 'Segur que vols esborrar el compte %s?'; +$lng['question']['email_reallydelete_forwarder'] = 'Segur que vols esborrar la redirecció %s?'; +$lng['question']['extras_reallydelete'] = 'Segur que vols esborrar la direcció de directori de %s?'; +$lng['question']['extras_reallydelete_pathoptions'] = 'Segur que vols eliminar les opcions de ruta (PATH) de %s?'; +$lng['question']['ftp_reallydelete'] = 'Segur que vols esborrar el compte FTP %s?'; +$lng['question']['mysql_reallydelete'] = 'Segur que vols eliminar la base de dades %s? Aquesta acció és irreversible!'; +$lng['question']['admin_configs_reallyrebuild'] = 'Segur que vols regenerar les configuracions dels servidors apache i bind?'; + +/** + * Mails + */ + +$lng['mails']['pop_success']['mailbody'] = 'Hola,\n\nel teu compte d\'email $destination\ns\'ha creat satisfactoriament.\n\nAixò és un missatge creat automàticament, si us plau uno responguis. Gràcies.'; +$lng['mails']['pop_success']['subject'] = 'Compte de correu creat satisfactoriament'; +$lng['mails']['createcustomer']['mailbody'] = 'Hola {FIRSTNAME} {NAME},\n\n aquí te la seva informació:\n\nNom d\'usuari: $loginname\nClau: $password\n\n Gràcies per tot, disfruta del teu compte'; +$lng['mails']['createcustomer']['subject'] = 'Informació del compte'; + +/** + * Admin + */ + +$lng['admin']['overview'] = 'Resum'; +$lng['admin']['ressourcedetails'] = 'Recursos utilitzats'; +$lng['admin']['systemdetails'] = 'Detalls del sistema'; +$lng['admin']['syscpdetails'] = 'Detalls de SysCP'; +$lng['admin']['installedversion'] = 'Versió'; +$lng['admin']['latestversion'] = 'Última versió'; +$lng['admin']['lookfornewversion']['clickhere'] = 'cerca a internet'; +$lng['admin']['lookfornewversion']['error'] = 'Error carregant'; +$lng['admin']['resources'] = 'Personal'; +$lng['admin']['customer'] = 'Client'; +$lng['admin']['customers'] = 'Clients'; +$lng['admin']['customer_add'] = 'Crear client'; +$lng['admin']['customer_edit'] = 'Editar client'; +$lng['admin']['domains'] = 'Dominis'; +$lng['admin']['domain_add'] = 'Crear domini'; +$lng['admin']['domain_edit'] = 'Editar domini'; +$lng['admin']['subdomainforemail'] = 'Subdomini com a subdomini de correu'; +$lng['admin']['admin'] = 'Administrador'; +$lng['admin']['admins'] = 'Administradors'; +$lng['admin']['admin_add'] = 'Crear administrador'; +$lng['admin']['admin_edit'] = 'Editar administrador'; +$lng['admin']['customers_see_all'] = 'Pot veure tots els clients?'; +$lng['admin']['domains_see_all'] = 'Pot veure tots els dominis?'; +$lng['admin']['change_serversettings'] = 'Pot canviar configuracions del servidor?'; +$lng['admin']['server'] = 'Servidor'; +$lng['admin']['serversettings'] = 'Opcions del servidor'; +$lng['admin']['rebuildconf'] = 'Regenerar fitxers de configuració'; +$lng['admin']['stdsubdomain'] = 'Subdomini estàndar'; +$lng['admin']['stdsubdomain_add'] = 'Crear subdomini estàndar'; +$lng['admin']['deactivated'] = 'Desactivat'; +$lng['admin']['deactivated_user'] = 'Desactivar Usuari'; +$lng['admin']['sendpassword'] = 'Enviar Clau'; +$lng['admin']['ownvhostsettings'] = 'Opcions dels vhost propis'; +$lng['admin']['configfiles']['serverconfiguration'] = 'Configuracions del servidor'; +$lng['admin']['configfiles']['files'] = 'Fitxers de configuració: Si us plau, canvia els continguts fitxers o crea\'ls
    amb el cotingut que surt a continuació si no existeixen.
    Nota: El Mysql-password no ha estat modificat per questions de seguretat.
    Canvia "MYSQL_PASSWORD" per la clau que desitgi'; +$lng['admin']['configfiles']['commands'] = 'Comandaments: Executa\'ls en una consola.'; +$lng['admin']['configfiles']['restart'] = 'Restart: Executa els següents comandaments en la consola per carregar la nova configuració.'; +$lng['admin']['templates']['templates'] = 'Plantilles'; +$lng['admin']['templates']['template_add'] = 'Afegir plantilla'; +$lng['admin']['templates']['template_edit'] = 'Editar plantilla'; +$lng['admin']['templates']['action'] = 'Acció'; +$lng['admin']['templates']['email'] = 'E-Mail'; +$lng['admin']['templates']['subject'] = 'Assumpte'; +$lng['admin']['templates']['mailbody'] = 'Cos del missatge'; +$lng['admin']['templates']['createcustomer'] = 'Missatge de benvinguda a nous clients'; +$lng['admin']['templates']['pop_success'] = 'Missatge de benvinguda a les noves comptes de correu'; +$lng['admin']['templates']['template_replace_vars'] = 'Variables per substituir a la plantilla:'; +$lng['admin']['templates']['FIRSTNAME'] = 'Substituit pel cognom del client.'; +$lng['admin']['templates']['NAME'] = 'Substituit pel nom del client.'; +$lng['admin']['templates']['USERNAME'] = 'Reemplaçat pel nom d\'usuari'; +$lng['admin']['templates']['PASSWORD'] = 'Reemplaçat per la contrassenya.'; +$lng['admin']['templates']['EMAIL'] = 'Reemplaçat per l\'adreça de correu'; + +/** + * Serversettings + */ + +$lng['serversettings']['session_timeout']['title'] = 'Sessió Timeout'; +$lng['serversettings']['session_timeout']['description'] = 'Quant triga un usuari en esdevenir inactiu (segons)?'; +$lng['serversettings']['accountprefix']['title'] = 'Prefix del client'; +$lng['serversettings']['accountprefix']['description'] = 'Quin prefix han de tenir els clients?'; +$lng['serversettings']['mysqlprefix']['title'] = 'Prefix SQL'; +$lng['serversettings']['mysqlprefix']['description'] = 'Quin prefix han de tenir els comptes SQL?'; +$lng['serversettings']['ftpprefix']['title'] = 'Prefix FTP'; +$lng['serversettings']['ftpprefix']['description'] = 'Quin prefix han de tenir els comptes FTP?'; +$lng['serversettings']['documentroot_prefix']['title'] = 'Directori principal'; +$lng['serversettings']['documentroot_prefix']['description'] = 'On es desen els documents?'; +$lng['serversettings']['logfiles_directory']['title'] = 'Directori de logs'; +$lng['serversettings']['logfiles_directory']['description'] = 'On es desen els fitxers de registre (log)?'; +$lng['serversettings']['ipaddress']['title'] = 'Adreça IP'; +$lng['serversettings']['ipaddress']['description'] = 'Quina és la adreça IP del servidor?'; +$lng['serversettings']['hostname']['title'] = 'Hostname'; +$lng['serversettings']['hostname']['description'] = 'Quin és el hostname del servidor?'; +$lng['serversettings']['apachereload_command']['title'] = 'Comanda de reinici d\'Apache'; +$lng['serversettings']['apachereload_command']['description'] = 'Quina és la comanda per reiniciar Apache?'; +$lng['serversettings']['bindconf_directory']['title'] = 'Directori de configuració de Bind'; +$lng['serversettings']['bindconf_directory']['description'] = 'On són els fitxers de configuració de Bind?'; +$lng['serversettings']['bindreload_command']['title'] = 'Comanda de reinici de Bind'; +$lng['serversettings']['bindreload_command']['description'] = 'Quina és la comanda per reiniciar Bind?'; +$lng['serversettings']['binddefaultzone']['title'] = 'Zona predeterminada de Bind'; +$lng['serversettings']['binddefaultzone']['description'] = 'Quina és la zona per defecte de Bind?'; +$lng['serversettings']['vmail_uid']['title'] = 'UID de les adreces de correu'; +$lng['serversettings']['vmail_uid']['description'] = 'Quina User ID han de tenir les adreces de correu?'; +$lng['serversettings']['vmail_gid']['title'] = 'GID de les adreces de correu'; +$lng['serversettings']['vmail_gid']['description'] = 'Quina Group ID han de tenir les adreces de correu?'; +$lng['serversettings']['vmail_homedir']['title'] = 'Directori dels correus'; +$lng['serversettings']['vmail_homedir']['description'] = 'Quin és el directori on es desaran tots els missatges de correu?'; +$lng['serversettings']['adminmail']['title'] = 'Remitent'; +$lng['serversettings']['adminmail']['description'] = 'Quin és el remitent dels missatges del SysCP?'; +$lng['serversettings']['phpmyadmin_url']['title'] = 'Adreça de phpMyAdmin'; +$lng['serversettings']['phpmyadmin_url']['description'] = 'Quina és la URL del phpMyAdmin? (ha de començar amb http://)'; +$lng['serversettings']['webmail_url']['title'] = 'Adreça de WebMail'; +$lng['serversettings']['webmail_url']['description'] = 'Quina és la URL del WebMail? (ha de començar amb http://)'; +$lng['serversettings']['webftp_url']['title'] = 'Adreça de WebFTP'; +$lng['serversettings']['webftp_url']['description'] = 'Quina és la URL del WebFTP? (ha de començar amb http://)'; +$lng['serversettings']['language']['description'] = 'Quin és l\'idioma per defecte?'; +$lng['serversettings']['maxloginattempts']['title'] = 'Intents de logueix màxims'; +$lng['serversettings']['maxloginattempts']['description'] = 'Número de vegades que pots intentar identificar-te abans de que la compta es desactivi.'; +$lng['serversettings']['deactivatetime']['title'] = 'Temps de desactivacio'; +$lng['serversettings']['deactivatetime']['description'] = 'Segons que la compta estarà inactiva quan s\'ha produit un seguit d\'intents frustrats d\'identificació.'; +$lng['serversettings']['pathedit']['title'] = 'Tipus d\'entrada de ruta'; +$lng['serversettings']['pathedit']['description'] = 'Vols que la ruta sigui escrita en una casella de text o en un menú desplegable?'; + +/** + * ADDED BETWEEN 1.2.12 and 1.2.13 + */ + +$lng['admin']['cronlastrun'] = 'Última volta'; +$lng['serversettings']['paging']['title'] = 'Entrades per pàgina'; +$lng['serversettings']['paging']['description'] = 'Entrades per pàgina? (0 = sense paginar)'; +$lng['error']['ipstillhasdomains'] = 'La combinació IP/Port que vols esborrar té dominis assignats. Si us plau, reassigna els dominis a una altra IP/Port abans d\'esborrar.'; +$lng['error']['cantdeletedefaultip'] = 'No pots esborrar la combinació IP/Port per defecte del resseller, si us plau, assigna una nova combinació IP/Port al resseller abans d\'esborrar.'; +$lng['error']['cantdeletesystemip'] = 'No pots esborrar la IP del sistema, abans crea una nova combinació IP/Port pel sistema.'; +$lng['error']['myipaddress'] = '\'IP\''; +$lng['error']['myport'] = '\'Port\''; +$lng['error']['myipdefault'] = 'Has de sel·leccionar una combinació IP/Port per defecte.'; +$lng['error']['myipnotdouble'] = 'Aquesta combinació IP/Port ja existeix.'; +$lng['question']['admin_ip_reallydelete'] = 'Segur que vols esborrar la IP %s?'; +$lng['admin']['ipsandports']['ipsandports'] = 'IPs i Ports'; +$lng['admin']['ipsandports']['add'] = 'Afegir IP/Port'; +$lng['admin']['ipsandports']['edit'] = 'Editar IP/Port'; +$lng['admin']['ipsandports']['ipandport'] = 'IP/Port'; +$lng['admin']['ipsandports']['ip'] = 'IP'; +$lng['admin']['ipsandports']['port'] = 'Port'; + +?> \ No newline at end of file diff --git a/lng/czech.lng.php b/lng/czech.lng.php new file mode 100644 index 0000000000..955d247809 --- /dev/null +++ b/lng/czech.lng.php @@ -0,0 +1,700 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Language + * @version $Id: czech.lng.php 2724 2009-06-07 14:18:02Z flo $ + */ + +/** + * Global + */ + +$lng['translator'] = ''; +$lng['panel']['edit'] = 'upravit'; +$lng['panel']['delete'] = 'smazat'; +$lng['panel']['create'] = 'vytvoøit'; +$lng['panel']['save'] = 'uložit'; +$lng['panel']['yes'] = 'ano'; +$lng['panel']['no'] = 'ne'; +$lng['panel']['emptyfornochanges'] = 'prázdné - žádné zmìny'; +$lng['panel']['emptyfordefault'] = 'prázdné - pro výchozí'; +$lng['panel']['path'] = 'Cesta'; +$lng['panel']['toggle'] = 'Pøepnout'; +$lng['panel']['next'] = 'další'; +$lng['panel']['dirsmissing'] = 'Nemohu nejít/èíst adresáø!'; + +/** + * Login + */ + +$lng['login']['username'] = 'Uživatel'; +$lng['login']['password'] = 'Heslo'; +$lng['login']['language'] = 'Jazyk'; +$lng['login']['login'] = 'Pøihlásit'; +$lng['login']['logout'] = 'Odhlásit'; +$lng['login']['profile_lng'] = 'Jazyk profilu'; + +/** + * Customer + */ + +$lng['customer']['documentroot'] = 'Domácí adresáø'; +$lng['customer']['name'] = 'Jméno'; +$lng['customer']['firstname'] = 'Køestní jméno'; +$lng['customer']['company'] = 'Spoleènost'; +$lng['customer']['street'] = 'Ulice'; +$lng['customer']['zipcode'] = 'PSÈ'; +$lng['customer']['city'] = 'Mìsto'; +$lng['customer']['phone'] = 'Telefon'; +$lng['customer']['fax'] = 'Fax'; +$lng['customer']['email'] = 'Email'; +$lng['customer']['customernumber'] = 'Zákazníkovo ID'; +$lng['customer']['diskspace'] = 'Webový prostor (MB)'; +$lng['customer']['traffic'] = 'Pøenosy (GB)'; +$lng['customer']['mysqls'] = 'MySQL-Databáze'; +$lng['customer']['emails'] = 'E-mailové-adresy'; +$lng['customer']['accounts'] = 'E-mailvé-Úèty'; +$lng['customer']['forwarders'] = 'E-mailové-Pøeposílaèe'; +$lng['customer']['ftps'] = 'FTP-Úèty'; +$lng['customer']['subdomains'] = 'Sub-Domény'; +$lng['customer']['domains'] = 'Doména'; +$lng['customer']['unlimited'] = 'neomezeno'; + +/** + * Customermenue + */ + +$lng['menue']['main']['main'] = 'Hlavní'; +$lng['menue']['main']['changepassword'] = 'Zmìnit heslo'; +$lng['menue']['main']['changelanguage'] = 'Zmìnit jazyl'; +$lng['menue']['email']['email'] = 'E-mail'; +$lng['menue']['email']['emails'] = 'Adresy'; +$lng['menue']['email']['webmail'] = 'WebMail'; +$lng['menue']['mysql']['mysql'] = 'MySQL'; +$lng['menue']['mysql']['databases'] = 'Databáze'; +$lng['menue']['mysql']['phpmyadmin'] = 'phpMyAdmin'; +$lng['menue']['domains']['domains'] = 'Domény'; +$lng['menue']['domains']['settings'] = 'Nastavení'; +$lng['menue']['ftp']['ftp'] = 'FTP'; +$lng['menue']['ftp']['accounts'] = 'Úèty'; +$lng['menue']['ftp']['webftp'] = 'WebFTP'; +$lng['menue']['extras']['extras'] = 'Extra'; +$lng['menue']['extras']['directoryprotection'] = 'Ochrana adresáøe'; +$lng['menue']['extras']['pathoptions'] = 'nastavení cesty'; + +/** + * Index + */ + +$lng['index']['customerdetails'] = 'Detaily zákazníka'; +$lng['index']['accountdetails'] = 'Detaily úètu'; + +/** + * Change Password + */ + +$lng['changepassword']['old_password'] = 'Staré heslo'; +$lng['changepassword']['new_password'] = 'Nové heslo'; +$lng['changepassword']['new_password_confirm'] = 'Nové heslo (potvrzení)'; +$lng['changepassword']['new_password_ifnotempty'] = 'Nové heslo (prázdné = beze zmìn)'; +$lng['changepassword']['also_change_ftp'] = ' také zmìnit heslo k hlavnímu FTP úètu'; + +/** + * Domains + */ + +$lng['domains']['description'] = 'Zde mùžete vytvoøit (sub-)domény a mìnit jejich cesty.
    Systém potøebuje nìjaký èas, než se po úpravì nové nastavení projeví.'; +$lng['domains']['domainsettings'] = 'Nastavení domény'; +$lng['domains']['domainname'] = 'Jméno domény'; +$lng['domains']['subdomain_add'] = 'Vytvoøit subdoménu'; +$lng['domains']['subdomain_edit'] = 'Upravit (sub)doménu'; +$lng['domains']['wildcarddomain'] = 'Vytvoøit jako wildcard doménu?'; +$lng['domains']['aliasdomain'] = 'Alias pro doménu'; +$lng['domains']['noaliasdomain'] = 'Žádný alias pro doménu'; + +/** + * E-mails + */ + +$lng['emails']['description'] = 'Zde mùžete také vytvoøit a mìnit e-mailové adresy.
    Úèet je jako Vaše poštovní schránka pøed Vaším domem. Pokud Vám nìkdo pošle e-mail, pøijde na tento úèet.

    Pro stažení e-mailù použijte následující nastavení ve svém poštovním klientu: (Data kurzívou musí být zmìnìna podle toho, co jste zadali!)
    Host: Jméno domény
    Uživatelské jméno: Jméno úètu / e-mailové adresy
    Heslo: heslo které jste zadali'; +$lng['emails']['emailaddress'] = 'E-mail-adresa'; +$lng['emails']['emails_add'] = 'Vytvoøit e-mailovou-adresu'; +$lng['emails']['emails_edit'] = 'Editovat e-mailovou-addresu'; +$lng['emails']['catchall'] = 'Catchall'; +$lng['emails']['iscatchall'] = 'Definovat jako catchall-adresu?'; +$lng['emails']['account'] = 'Úèet'; +$lng['emails']['account_add'] = 'Vytvoøit úèet'; +$lng['emails']['account_delete'] = 'Smazat úèet'; +$lng['emails']['from'] = 'Zdroj'; +$lng['emails']['to'] = 'Cíl'; +$lng['emails']['forwarders'] = 'Pøeposílatelé'; +$lng['emails']['forwarder_add'] = 'Vytvoøit pøeposílatele'; + +/** + * FTP + */ + +$lng['ftp']['description'] = 'Zde mùžete vytváøet a mìnit FTP úèty.
    Zmìny jsou provedeny okamžitì a úèty mohou být okamžitì použity.'; +$lng['ftp']['account_add'] = 'Vytvoøit úèet'; + +/** + * MySQL + */ + +$lng['mysql']['databasename'] = 'jméno uživatele/databáze'; +$lng['mysql']['databasedescription'] = 'popis databáze'; +$lng['mysql']['database_create'] = 'Vytvoøit databázi'; + +/** + * Extras + */ + +$lng['extras']['description'] = 'Zde mùžete vkládat extra vìci, napøíklad ochranu adresáøù.
    Systém potøebuje nìjaký èas, než se zmìny projeví.'; +$lng['extras']['directoryprotection_add'] = 'Pøidat ochranu adresáøe'; +$lng['extras']['view_directory'] = 'zobrazit obsah adresáøe'; +$lng['extras']['pathoptions_add'] = 'pøidat nastavení cesty'; +$lng['extras']['directory_browsing'] = 'prohlížení obsahu adresáøe'; +$lng['extras']['pathoptions_edit'] = 'upravit nastavení cesty'; +$lng['extras']['error404path'] = '404'; +$lng['extras']['error403path'] = '403'; +$lng['extras']['error500path'] = '500'; +$lng['extras']['error401path'] = '401'; +$lng['extras']['errordocument404path'] = 'URL k Chybové stránce 404'; +$lng['extras']['errordocument403path'] = 'URL k Chybové stránce 403'; +$lng['extras']['errordocument500path'] = 'URL k Chybové stránce 500'; +$lng['extras']['errordocument401path'] = 'URL k Chybové stránce 401'; + +/** + * Errors + */ + +$lng['error']['error'] = 'Chyba'; +$lng['error']['directorymustexist'] = 'Adresáø %s musí existovat. Prosím vytvoøte jej s pomocí Vašeho FTP klienta.'; +$lng['error']['filemustexist'] = 'Soubor %s musí existovat.'; +$lng['error']['allresourcesused'] = 'Už jste použili všechny své zdroje.'; +$lng['error']['domains_cantdeletemaindomain'] = 'Nemùžete smazat doménu, která se používá jako e-mailová doména.'; +$lng['error']['domains_canteditdomain'] = 'Nemùžete upravovat tuto doménu. Byla zakázána adminem.'; +$lng['error']['domains_cantdeletedomainwithemail'] = 'Nemùžete smazat doménu, která se používá jako e-mailová doména. Nejdøíve smažte všechny emailové adresy.'; +$lng['error']['firstdeleteallsubdomains'] = 'Musíte smazat všechny subdomény než budete moci vytvoøit "wildcard" doménu.'; +$lng['error']['youhavealreadyacatchallforthisdomain'] = 'Už jste definovali "catchall" pro tuto doménu.'; +$lng['error']['ftp_cantdeletemainaccount'] = 'Nemùžete smazat svùj hlavní FTP úèet'; +$lng['error']['login'] = 'Uživatelské jméno nebo heslo, které jste zadali, je špatné. Prosím zkuste to znovu!'; +$lng['error']['login_blocked'] = 'Tento úèet byl zablokován z dùvodu pøíliš velkého množství chyb pøi pøihlášení.
    Prosím zkuste to znovu za ' . $settings['login']['deactivatetime'] . ' sekund.'; +$lng['error']['notallreqfieldsorerrors'] = 'Nevyplnili jste všechna políèka nebo jsou nìkteré vyplnìna špatnì.'; +$lng['error']['oldpasswordnotcorrect'] = 'Staré heslo není správné.'; +$lng['error']['youcantallocatemorethanyouhave'] = 'Nemùžete alokovat více zdrojù než sami vlastníte'; +$lng['error']['mustbeurl'] = 'Vložili jste nesprávnou nebo nekompletní url (napø. http://somedomain.com/error404.htm)'; +$lng['error']['invalidpath'] = 'Nevybrali jste správnou url (možná problém s "dirlistingem"?)'; +$lng['error']['stringisempty'] = 'Chybìjící vstup v poli'; +$lng['error']['stringiswrong'] = 'Špatný vstup v poli'; +$lng['error']['myloginname'] = '\'' . $lng['login']['username'] . '\''; +$lng['error']['mypassword'] = '\'' . $lng['login']['password'] . '\''; +$lng['error']['oldpassword'] = '\'' . $lng['changepassword']['old_password'] . '\''; +$lng['error']['newpassword'] = '\'' . $lng['changepassword']['new_password'] . '\''; +$lng['error']['newpasswordconfirm'] = '\'' . $lng['changepassword']['new_password_confirm'] . '\''; +$lng['error']['newpasswordconfirmerror'] = 'Nové heslo se neshoduje s tím pro potvrzení'; +$lng['error']['myname'] = '\'' . $lng['customer']['name'] . '\''; +$lng['error']['myfirstname'] = '\'' . $lng['customer']['firstname'] . '\''; +$lng['error']['emailadd'] = '\'' . $lng['customer']['email'] . '\''; +$lng['error']['mydomain'] = '\'Domain\''; +$lng['error']['mydocumentroot'] = '\'Documentroot\''; +$lng['error']['loginnameexists'] = 'Pøihlašovací jméno %s již existuje'; +$lng['error']['emailiswrong'] = 'Emailová adresa %s obsahuje nepovolené znaky nebo je nekompletní'; +$lng['error']['loginnameiswrong'] = 'Pøihlašovací jméno %s obsahuje nepovolené znaky'; +$lng['error']['userpathcombinationdupe'] = 'Kombinace Uživatelského jména a cesty již existuje'; +$lng['error']['patherror'] = 'Obecná chyba! Cesta nemùže být prázdná'; +$lng['error']['errordocpathdupe'] = 'Možnost pro cestu %s již existuje'; +$lng['error']['adduserfirst'] = 'Vytvoøte prosím nejdøíve zákazníka'; +$lng['error']['domainalreadyexists'] = 'Doména %s je již pøiøazena k zákazníkovi'; +$lng['error']['nolanguageselect'] = 'Nebyl vybrán žádný jazyk.'; +$lng['error']['nosubjectcreate'] = 'Musíte definovat téma pro tuto e-mailovou šablonu.'; +$lng['error']['nomailbodycreate'] = 'Musíte definovat text e-mailu pro tuto e-mailovou šablonu.'; +$lng['error']['templatenotfound'] = 'Šablona nebyla nalezena.'; +$lng['error']['alltemplatesdefined'] = 'Nemùžete definovat více šablon, všechny jazyky jsou již podporovány.'; +$lng['error']['wwwnotallowed'] = 'www není povoleno pro subdomény.'; +$lng['error']['subdomainiswrong'] = 'Subdoména %s obsahuje neplatné znaky.'; +$lng['error']['domaincantbeempty'] = 'Jméno domény nesmí být prázdné.'; +$lng['error']['domainexistalready'] = 'Doména %s již existuje.'; +$lng['error']['domainisaliasorothercustomer'] = 'Vybraný alias pro doménu je buï sama aliasem domény nebo patøí jinému zákazníkovi.'; +$lng['error']['emailexistalready'] = 'E-mailová adresa %s již existuje.'; +$lng['error']['maindomainnonexist'] = 'Hlavní doména %s neexistuje.'; +$lng['error']['destinationnonexist'] = 'Prosím vytvoøte pøeposílatele v poli \'Cíl\'.'; +$lng['error']['destinationalreadyexistasmail'] = 'Pøeposílaè na %s již existuje jako aktivní emailová adresa.'; +$lng['error']['destinationalreadyexist'] = 'Už jste nastavili pøeposílaè na %s .'; +$lng['error']['destinationiswrong'] = 'Pøeposílaè %s obsahuje nesprávné znaky nebo není kompletní.'; +$lng['error']['domainname'] = $lng['domains']['domainname']; + +/** + * Questions + */ + +$lng['question']['question'] = 'Bezpeènostní otázka'; +$lng['question']['admin_customer_reallydelete'] = 'Chcete opravdu smazat uživatele %s? Akci nelze vzít zpìt!'; +$lng['question']['admin_domain_reallydelete'] = 'Chcete opravdu smazat doménu %s?'; +$lng['question']['admin_domain_reallydisablesecuritysetting'] = 'Chcete opravdu deaktivovat tato Bezpeènostní nastavení (OpenBasedir a/nebo SafeMode)?'; +$lng['question']['admin_admin_reallydelete'] = 'Chcete opravdu smazat administrátory %s? Každý zákazník a doména bude nastavena k Vašemu úètu.'; +$lng['question']['admin_template_reallydelete'] = 'Chcete opravdu smazat šablonu \'%s\'?'; +$lng['question']['domains_reallydelete'] = 'Chcete opravdu smazat doménu %s?'; +$lng['question']['email_reallydelete'] = 'Opravdu chcete smazat e-mailovou adresu %s?'; +$lng['question']['email_reallydelete_account'] = 'Chcete opravdu smazat e-mailový úèet %s?'; +$lng['question']['email_reallydelete_forwarder'] = 'Chcete opravdu smazat pøeposílaè %s?'; +$lng['question']['extras_reallydelete'] = 'Chcete opravdu odstranit ochranu adresáøe %s?'; +$lng['question']['extras_reallydelete_pathoptions'] = 'Opravdu chcete smazat nastavení cesty pro %s?'; +$lng['question']['ftp_reallydelete'] = 'Opravdu chcete smazat FTP úèet %s?'; +$lng['question']['mysql_reallydelete'] = 'Opravdu chcete smazat databázi %s? Tato akce nemùže být vzata zpìt!'; +$lng['question']['admin_configs_reallyrebuild'] = 'Opravdu chcete rebuildovat apache a nabindovat konfiguraèní soubory?'; + +/** + * Mails + */ + +$lng['mails']['pop_success']['mailbody'] = 'Dobrý den,\n\nVáš e-mailový úèet {EMAIL}\nbyl v poøádku nastaven.\n\nToto je automaticky vytvoøený\ne-mail, prosím neodpovídejte na nìj!\n\nPøejeme hezký den, SysCP-Team'; +$lng['mails']['pop_success']['subject'] = 'Poštovní úèet byl úspìšnì nastaven'; +$lng['mails']['createcustomer']['mailbody'] = 'Dobrý den, {FIRSTNAME} {NAME},\n\nzde jsou informace o Vašem úètu:\n\nUživatel: {USERNAME}\nHeslo: {PASSWORD}\n\nDìkujeme,\nSysCP-Team'; +$lng['mails']['createcustomer']['subject'] = 'Informace o úètu'; + +/** + * Admin + */ + +$lng['admin']['overview'] = 'Pøehled'; +$lng['admin']['ressourcedetails'] = 'Použité zdroje'; +$lng['admin']['systemdetails'] = 'Detaily systému'; +$lng['admin']['syscpdetails'] = 'SysCP Detaily'; +$lng['admin']['installedversion'] = 'Nainstalovaná verze'; +$lng['admin']['latestversion'] = 'Poslední verze'; +$lng['admin']['lookfornewversion']['clickhere'] = 'hledat pøes webservice'; +$lng['admin']['lookfornewversion']['error'] = 'Chyba pøi ètení'; +$lng['admin']['resources'] = 'Zdroje'; +$lng['admin']['customer'] = 'Zákazník'; +$lng['admin']['customers'] = 'Zákazníci'; +$lng['admin']['customer_add'] = 'Vytvoøit zákazníka'; +$lng['admin']['customer_edit'] = 'Upravit zákazníka'; +$lng['admin']['domains'] = 'Domény'; +$lng['admin']['domain_add'] = 'Vytvoøit doménu'; +$lng['admin']['domain_edit'] = 'Upravit doménu'; +$lng['admin']['subdomainforemail'] = 'Subdomény jako emailové domény'; +$lng['admin']['admin'] = 'Administrátor'; +$lng['admin']['admins'] = 'Administrátoøi'; +$lng['admin']['admin_add'] = 'Vytvoøit administrátora'; +$lng['admin']['admin_edit'] = 'Upravit administrátora'; +$lng['admin']['customers_see_all'] = 'Mùže vidìt všechy zákazníky?'; +$lng['admin']['domains_see_all'] = 'Mùže vidìt všechny domény?'; +$lng['admin']['change_serversettings'] = 'Mùže mìnit nastavení serveru?'; +$lng['admin']['server'] = 'Server'; +$lng['admin']['serversettings'] = 'Nastavení'; +$lng['admin']['rebuildconf'] = 'Pøebudovat konfiguraèní soubory'; +$lng['admin']['stdsubdomain'] = 'Standardní subdoména'; +$lng['admin']['stdsubdomain_add'] = 'Vytvoøit standardní subdoménu'; +$lng['admin']['phpenabled'] = 'PHP zapnuto'; +$lng['admin']['deactivated'] = 'Deaktivováno'; +$lng['admin']['deactivated_user'] = 'Deaktivovat uživatele'; +$lng['admin']['sendpassword'] = 'Zaslat heslo'; +$lng['admin']['ownvhostsettings'] = 'Vlastní vHost-nastavení'; +$lng['admin']['configfiles']['serverconfiguration'] = 'Konfigurace'; +$lng['admin']['configfiles']['files'] = 'Konfiguraèní soubory: Prosím zmìòte následující soubory nabo je vytvoøte s
    následujícím obsahem, pokud neexistují.
    Poznámka: MySQL heslo nebylo nahrazeno z bezpeènostních dùvodù.
    Prosím nahraïte "MYSQL_PASSWORD" svým vlastním. Pokud jste zapomnìli své mysql heslo
    najdete jej v "lib/userdata.inc.php".'; +$lng['admin']['configfiles']['commands'] = 'Pøíkazy: Prosím spuste následující pøíkazy v pøíkazovém øádku.'; +$lng['admin']['configfiles']['restart'] = 'Restart: Prosím spuste nísledující pøíkazy v pøíkazovém øádku, aby jste nahráli novou konfiguraci.'; +$lng['admin']['templates']['templates'] = 'Šablony'; +$lng['admin']['templates']['template_add'] = 'Pøidat šablonu'; +$lng['admin']['templates']['template_edit'] = 'Upravit šablonu'; +$lng['admin']['templates']['action'] = 'Akce'; +$lng['admin']['templates']['email'] = 'E-Mail'; +$lng['admin']['templates']['subject'] = 'Pøedmìt'; +$lng['admin']['templates']['mailbody'] = 'Tìlo mailu'; +$lng['admin']['templates']['createcustomer'] = 'Uvítací mail pro nové zákazníky'; +$lng['admin']['templates']['pop_success'] = 'Uvítací mail pro nové emailové úèty'; +$lng['admin']['templates']['template_replace_vars'] = 'Promìnné k nahrazení v šablonì:'; +$lng['admin']['templates']['FIRSTNAME'] = 'Nahrazeno køestním jménem zákazníka.'; +$lng['admin']['templates']['NAME'] = 'Nahrazeno jménem zákazníka.'; +$lng['admin']['templates']['USERNAME'] = 'Nahrazeno uživatelským jménem zákazníka.'; +$lng['admin']['templates']['PASSWORD'] = 'Nahrazeno zákazníkovým heslem.'; +$lng['admin']['templates']['EMAIL'] = 'Nahrazeno adresou POP3/IMAP úètu.'; + +/** + * Serversettings + */ + +$lng['serversettings']['session_timeout']['title'] = 'Session Timeout'; +$lng['serversettings']['session_timeout']['description'] = 'Jak dlouho musý být uživatel neaktivní, než session vyprší (sekundy)?'; +$lng['serversettings']['accountprefix']['title'] = 'Zákazníkova pøedpona'; +$lng['serversettings']['accountprefix']['description'] = 'Jké pøedpony by mìly mít úèty zákazníkù?'; +$lng['serversettings']['mysqlprefix']['title'] = 'SQL pøedpona'; +$lng['serversettings']['mysqlprefix']['description'] = 'Jaké pøedpony by mìly mít úèty mysql?'; +$lng['serversettings']['ftpprefix']['title'] = 'FTP pøedpona'; +$lng['serversettings']['ftpprefix']['description'] = 'Jakou pøedponu by mìly mít ftp úèty?'; +$lng['serversettings']['documentroot_prefix']['title'] = 'Domácí adresáø'; +$lng['serversettings']['documentroot_prefix']['description'] = 'Kde by mìly být uloženy všechny domácí adresáøe?'; +$lng['serversettings']['logfiles_directory']['title'] = 'Adresáø pro log soubory'; +$lng['serversettings']['logfiles_directory']['description'] = 'Kde by mìly být všechny log soubory uloženy?'; +$lng['serversettings']['ipaddress']['title'] = 'IP-Adresa'; +$lng['serversettings']['ipaddress']['description'] = 'Jaká je IP adresa tohoto serveru?'; +$lng['serversettings']['hostname']['title'] = 'Jméno hosta'; +$lng['serversettings']['hostname']['description'] = 'Jaké je jméno hosta tohoto serveru?'; +$lng['serversettings']['apachereload_command']['title'] = 'Pøíkaz pro reload apache'; +$lng['serversettings']['apachereload_command']['description'] = 'Jaký je pøíkaz, kterým apache znovunahraje své konfiguraèní soubory?'; +$lng['serversettings']['bindconf_directory']['title'] = 'Bindujte konfiguraèní adresáø'; +$lng['serversettings']['bindconf_directory']['description'] = 'Kde by mìly být uloženy "bind configfiles"?'; +$lng['serversettings']['bindreload_command']['title'] = 'Bind reload pøíkaz'; +$lng['serversettings']['bindreload_command']['description'] = 'Jaký je pøíkaz pro znovunahrání "bind configfiles"?'; +$lng['serversettings']['binddefaultzone']['title'] = 'Bind výchozí zóna'; +$lng['serversettings']['binddefaultzone']['description'] = 'Jaký je název výchozí zóny?'; +$lng['serversettings']['vmail_uid']['title'] = 'UID-mailù'; +$lng['serversettings']['vmail_uid']['description'] = 'Jaké UserID by mìly e-maily mít?'; +$lng['serversettings']['vmail_gid']['title'] = 'GID-mailù'; +$lng['serversettings']['vmail_gid']['description'] = 'Jaké GroupID by mìly maily mít?'; +$lng['serversettings']['vmail_homedir']['title'] = 'Mails-Home adresáø'; +$lng['serversettings']['vmail_homedir']['description'] = 'Kam by se mìly všechny maily ukládat?'; +$lng['serversettings']['adminmail']['title'] = 'Odesílatel'; +$lng['serversettings']['adminmail']['description'] = 'Jaká je odesílatelova adresa pro emaily odeslané z Panelu?'; +$lng['serversettings']['phpmyadmin_url']['title'] = 'phpMyAdminova URL'; +$lng['serversettings']['phpmyadmin_url']['description'] = 'Jaká je URL adresa phpMyAdmin? (musí zaèínat http(s)://)'; +$lng['serversettings']['webmail_url']['title'] = 'WebMailová URL'; +$lng['serversettings']['webmail_url']['description'] = 'Jaká je URL adresa k WebMailu? (musí zaèínat with http(s)://)'; +$lng['serversettings']['webftp_url']['title'] = 'WebFTP URL'; +$lng['serversettings']['webftp_url']['description'] = 'Jaká je URL k WebFTP? (musí zaèínat with http(s)://)'; +$lng['serversettings']['language']['description'] = 'Jaký je výchozí jazyk Vašeho serveru?'; +$lng['serversettings']['maxloginattempts']['title'] = 'Maximální poèet pokusù o pøihlášení'; +$lng['serversettings']['maxloginattempts']['description'] = 'Maximální poèet pokusù o pøihlášení k úètu, než se úèet zablokuje.'; +$lng['serversettings']['deactivatetime']['title'] = 'Deaktivovaný po dobu'; +$lng['serversettings']['deactivatetime']['description'] = 'Èas (sek.) po který bude úèet deaktivován pro pøíliš mnoho pokusù o pøihlášení.'; +$lng['serversettings']['pathedit']['title'] = 'Typ vstupu cesty'; +$lng['serversettings']['pathedit']['description'] = 'Mìla by být cesta vybírána pomocí vyskakovacího menu nebo vstupním polem?'; +$lng['serversettings']['nameservers']['title'] = 'Nameservery'; +$lng['serversettings']['nameservers']['description'] = 'Støedníkem oddìlený seznam obsahující hostname všech nameserverù. První bude primární.'; +$lng['serversettings']['mxservers']['title'] = 'MX servery'; +$lng['serversettings']['mxservers']['description'] = 'Støedníkem oddìlený seznam obsahující páry èísel a hostname oddìlených mezerou (napø. \'10 mx.example.com\') obsahující mx servery.'; + +/** + * CHANGED BETWEEN 1.2.12 and 1.2.13 + */ + +$lng['mysql']['description'] = 'Zde mùžete vytváøet a mìnit své MySQL-Databáze.
    Zmìny jsou provedeny okamžitì a databáze mùže být okamžitì používána.
    V menu vlevo mùžete najít nástroj phpMyAdmin se kterým mùžete jednoduše upravovat svou databázi.

    Pro použití databáze ve svých php skriptech použijte následující nastavení: (Data kurzívou musí být zmìnìna na Vámi vložené hodnoty!)
    Host:
    Uživatelské jméno: Databasename
    Heslo: heslo které jste zvolili
    Databáze: Databasename'; + +/** + * ADDED BETWEEN 1.2.12 and 1.2.13 + */ + +$lng['admin']['cronlastrun'] = 'Poslední generování konfiguraèních souborù'; +$lng['serversettings']['paging']['title'] = 'Záznamù na stránku'; +$lng['serversettings']['paging']['description'] = 'Kolik záznamù by mìlo být zobrazeno na stránce? (0 = zrušit stránkování)'; +$lng['error']['ipstillhasdomains'] = 'IP/Port kombinace, kterou chcete smazat má stále pøiøazené domény, prosím pøeøaïte je k jiné IP/Port kombinaci než smažete tuto IP/Port kombinaci.'; +$lng['error']['cantdeletedefaultip'] = 'Nemùžete smazat IP/Port kombinaci výchozího pøeprodejce, prosím vytvoøte jinou IP/Port kombinaci výchozí pro pøeprodejce než smažete tuto IP/Port kombinaci.'; +$lng['error']['cantdeletesystemip'] = 'Nemùžete smazat poslední systémovou IP, buï vytvoøte novou IP/Port kombinaci pro systémovou IP nebo zmìòte IP systému.'; +$lng['error']['myipaddress'] = '\'IP\''; +$lng['error']['myport'] = '\'Port\''; +$lng['error']['myipdefault'] = 'Musíte vybrat IP/Port kombinaci která by se mìla stát výchozí.'; +$lng['error']['myipnotdouble'] = 'Tato kombinace IP/Portu již existuje.'; +$lng['question']['admin_ip_reallydelete'] = 'Chcete opravdu smayat IP adresu %s?'; +$lng['admin']['ipsandports']['ipsandports'] = 'IP a Porty'; +$lng['admin']['ipsandports']['add'] = 'Pøidat IP/Port'; +$lng['admin']['ipsandports']['edit'] = 'Upravit IP/Port'; +$lng['admin']['ipsandports']['ipandport'] = 'IP/Port'; +$lng['admin']['ipsandports']['ip'] = 'IP'; +$lng['admin']['ipsandports']['port'] = 'Port'; + +// ADDED IN 1.2.13-rc3 + +$lng['error']['cantchangesystemip'] = 'Nemùžete zmìnit poslední systémovou IP, buï vytvoøte novou IP/Port kombinaci pro systémovou IP nebo zmìòte IP systému.'; +$lng['question']['admin_domain_reallydocrootoutofcustomerroot'] = 'Jste si jisti, že chcete aby root dokumentù pro tuto doménu nebyl v "customerroot" zákazníka?'; + +// ADDED IN 1.2.14-rc1 + +$lng['admin']['memorylimitdisabled'] = 'Zakázáno'; +$lng['domain']['openbasedirpath'] = 'OpenBasedir-cesta'; +$lng['domain']['docroot'] = 'Cesta z políèka nahoøe'; +$lng['domain']['homedir'] = 'Domovní adresáø'; +$lng['admin']['valuemandatory'] = 'Tato hodnota je povinná'; +$lng['admin']['valuemandatorycompany'] = 'Buï "jméno" a "køestní jméno" nebo "spoleènost" musí být vyplnìna'; +$lng['menue']['main']['username'] = 'Pøihlášen(a) jako: '; +$lng['panel']['urloverridespath'] = 'URL (pøepíše cestu)'; +$lng['panel']['pathorurl'] = 'Cesta nebo URL'; +$lng['error']['sessiontimeoutiswrong'] = 'Pouze èíselné "Session Timeout" je povoleno.'; +$lng['error']['maxloginattemptsiswrong'] = 'ouze èíselné "Maximální poèet pokusù o pøihlášení" je povoleno.'; +$lng['error']['deactivatetimiswrong'] = 'ouze èíselné "Èas deaktivace" je povoleno.'; +$lng['error']['accountprefixiswrong'] = '"Pøedpona uživatele" je špatnì.'; +$lng['error']['mysqlprefixiswrong'] = '"SQL pøedpona" je špatnì.'; +$lng['error']['ftpprefixiswrong'] = '"FTP pøedpona" je špatnì.'; +$lng['error']['ipiswrong'] = '"IP-Adresa" je špatnì. Pouze validní IP adresa je povolena.'; +$lng['error']['vmailuidiswrong'] = '"Mails-uid" je špatnì. Je povoleno pouze èíselné UID.'; +$lng['error']['vmailgidiswrong'] = '"Mails-gid" je špatnì. Je povoleno pouze èíselné GID.'; +$lng['error']['adminmailiswrong'] = '"Sender-address" je špatnì. Je povolena pouze validní emailová adresa.'; +$lng['error']['pagingiswrong'] = '"Entries per Page"-value je špatnì. Jsou povolena pouze èísla.'; +$lng['error']['phpmyadminiswrong'] = 'phpMyAdmin-url naní správná url.'; +$lng['error']['webmailiswrong'] = 'WebMail-odkaz není správný odkaz.'; +$lng['error']['webftpiswrong'] = 'WebFTP-odkaz není správný odkaz.'; +$lng['domains']['hasaliasdomains'] = 'Má aliasové domény'; +$lng['serversettings']['defaultip']['title'] = 'Výchozí IP/Port'; +$lng['serversettings']['defaultip']['description'] = 'Jaká je výchozí IP/Port kombinace?'; +$lng['domains']['statstics'] = 'Statistika použití'; +$lng['panel']['ascending'] = 'sestupnì'; +$lng['panel']['decending'] = 'vzestupnì'; +$lng['panel']['search'] = 'Vyhledávání'; +$lng['panel']['used'] = 'použito'; + +// ADDED IN 1.2.14-rc3 + +$lng['panel']['translator'] = 'Pøekladatel'; + +// ADDED IN 1.2.14-rc4 + +$lng['error']['stringformaterror'] = 'Hodnota pole "%s" není v oèekávaném formátu.'; + +// ADDED IN 1.2.15-rc1 + +$lng['admin']['serversoftware'] = 'Software serveru'; +$lng['admin']['phpversion'] = 'PHP-Verze'; +$lng['admin']['phpmemorylimit'] = 'PHP-Limit-Pamìti'; +$lng['admin']['mysqlserverversion'] = 'MySQL verze serveru'; +$lng['admin']['mysqlclientversion'] = 'MySQL verze klienta'; +$lng['admin']['webserverinterface'] = 'Webserver rozhraní'; +$lng['domains']['isassigneddomain'] = 'Je pøiøazená doména'; +$lng['serversettings']['phpappendopenbasedir']['title'] = 'Cesty k pøidání k OpenBasedir'; +$lng['serversettings']['phpappendopenbasedir']['description'] = 'Tyto cesty (oddìleny pomocí "colons") budou vloženy do OpenBasedir-statementu v každém vhost-containeru.'; + +// CHANGED IN 1.2.15-rc1 + +$lng['error']['loginnameissystemaccount'] = 'Nemùžete vytvoøit úèty, které jsou podobné systémovým úètùm (napøíklad zaèínají "%s"). Prosím vložte jiné jméno úètu.'; +$lng['error']['youcantdeleteyourself'] = 'Z bezpeènostních dùvodù se nemùžete smazat.'; +$lng['error']['youcanteditallfieldsofyourself'] = 'Poznámka: Z bezpeènostních dùvodù nemùžete upravovat všechna pole svého úètu.'; + +// ADDED IN 1.2.16-svn1 + +$lng['serversettings']['natsorting']['title'] = 'Použít "lidské" tøídìní v seznamech'; +$lng['serversettings']['natsorting']['description'] = 'Øadit seznamy jako web1 -> web2 -> web11 místo web1 -> web11 -> web2.'; + +// ADDED IN 1.2.16-svn2 + +$lng['serversettings']['deactivateddocroot']['title'] = 'Docroot pro deaktivované uživatele'; +$lng['serversettings']['deactivateddocroot']['description'] = 'Když bude uživatel deaktivován, tato cesta bude použita jako jeho docroot. Ponechte prázdné, pokud nechcete vytváøet.'; + +// ADDED IN 1.2.16-svn4 + +$lng['panel']['reset'] = 'zrušit zmìny'; +$lng['admin']['accountsettings'] = 'Nastavení úètu'; +$lng['admin']['panelsettings'] = 'Nastavení panelu'; +$lng['admin']['systemsettings'] = 'Nastavení systému'; +$lng['admin']['webserversettings'] = 'Nastavení webserveru'; +$lng['admin']['mailserversettings'] = 'Nastavení mailserveru'; +$lng['admin']['nameserversettings'] = 'Nastavení nameserveru'; +$lng['admin']['updatecounters'] = 'Pøepoèítat využití zdrojù'; +$lng['question']['admin_counters_reallyupdate'] = 'Opravdu chcete pøepoèítat využití zdrojù?'; +$lng['panel']['pathDescription'] = 'Pokud adresáø neexistuje, bude vytvoøen automaticky.'; + +// ADDED IN 1.2.16-svn6 + +$lng['mails']['trafficninetypercent']['mailbody'] = 'Vážený uživateli {NAME},\n\nPoužil jste {TRAFFICUSED} MB z Vámi dostupných {TRAFFIC} MB pøenosù.\nTo je více jak 90%.\n\nPøejeme hezký den, SysCP-Team'; +$lng['mails']['trafficninetypercent']['subject'] = 'Dosahujíc vašeho limitu pøenosù'; +$lng['admin']['templates']['trafficninetypercent'] = 'Upozoròovací mail pro zákazníky, pokud vyèerpají 90% z pøenosù'; +$lng['admin']['templates']['TRAFFIC'] = 'Nahrazeno pøenosy, které byly pøidìleny uživateli.'; +$lng['admin']['templates']['TRAFFICUSED'] = 'Nahrazeno pøenosy, které byly vyèerpány zákazníkem.'; + +// ADDED IN 1.2.16-svn7 + +$lng['admin']['subcanemaildomain']['never'] = 'Nikdy'; +$lng['admin']['subcanemaildomain']['choosableno'] = 'Výbìr, výchozí ne'; +$lng['admin']['subcanemaildomain']['choosableyes'] = 'Výbìr, výchozí ano'; +$lng['admin']['subcanemaildomain']['always'] = 'Vždy'; +$lng['changepassword']['also_change_webalizer'] = ' také zmìòte heslo pro webalizer statistics'; + +// ADDED IN 1.2.16-svn8 + +$lng['serversettings']['mailpwcleartext']['title'] = 'Také uložte hesla mailových úètù nešifrovaná v databázi'; +$lng['serversettings']['mailpwcleartext']['description'] = 'Pokud je toto nastaveno na "ano", všechna hesla budou ukládána bez šifrování (èístý text, èitelná pro kohokoliv s pøístupem k databázi) v tabulce mail_users. Toto aktivujte jen pokud to opravdu potøebujete!'; +$lng['serversettings']['mailpwcleartext']['removelink'] = 'Kliknutím zde vymažete všechna nezašifrovaná hesla z tabulky.'; +$lng['question']['admin_cleartextmailpws_reallywipe'] = 'Opravdu chcete vymazat všechna nezašifrovaná hesla pro e-mailové úèty z tabulky mail_users? Tento krok nelze vrátit zpìt!'; +$lng['admin']['configfiles']['overview'] = 'Pøehled'; +$lng['admin']['configfiles']['wizard'] = 'Prùvodce'; +$lng['admin']['configfiles']['distribution'] = 'Distribuce'; +$lng['admin']['configfiles']['service'] = 'Služba'; +$lng['admin']['configfiles']['daemon'] = 'Daemon'; +$lng['admin']['configfiles']['http'] = 'Webserver (HTTP)'; +$lng['admin']['configfiles']['dns'] = 'Nameserver (DNS)'; +$lng['admin']['configfiles']['mail'] = 'Mailserver (IMAP/POP3)'; +$lng['admin']['configfiles']['smtp'] = 'Mailserver (SMTP)'; +$lng['admin']['configfiles']['ftp'] = 'FTP-Server'; +$lng['admin']['configfiles']['etc'] = 'Ostatní (System)'; +$lng['admin']['configfiles']['choosedistribution'] = '-- Vyberte distribuci --'; +$lng['admin']['configfiles']['chooseservice'] = '-- Vyberte službu --'; +$lng['admin']['configfiles']['choosedaemon'] = '-- Vyberte daemona --'; +$lng['admin']['trafficlastrun'] = 'Poslední kalkulace pøenosù'; + +// ADDED IN 1.2.16-svn10 + +$lng['serversettings']['ftpdomain']['title'] = 'FTP úèty na doménì'; +$lng['serversettings']['ftpdomain']['description'] = 'Zákazníci mohou vytváøet FTP úèty user@customerdomain?'; +$lng['panel']['back'] = 'Back'; + +// ADDED IN 1.2.16-svn12 + +$lng['serversettings']['mod_log_sql']['title'] = 'Doèasnì ukládat logy do databáze'; +$lng['serversettings']['mod_log_sql']['description'] = 'Použít mod_log_sql pro doèasné uložení webrequestù
    Toto vyžaduje speciální konfiguraci apache!'; +$lng['serversettings']['mod_fcgid']['title'] = 'Includuj PHP pøes mod_fcgid/suexec'; +$lng['serversettings']['mod_fcgid']['description'] = 'Použij mod_fcgid/suexec/libnss_mysql pro bìh PHP s odpovídajícím úøivatelským úètem.
    toto vyžaduje speciální konfiguraci apache!'; +$lng['serversettings']['sendalternativemail']['title'] = 'Použij alternativní e-mailovou adresu'; +$lng['serversettings']['sendalternativemail']['description'] = 'Pošli email s heslem na jinou adresu pøi vytváøení emailového úètu'; +$lng['emails']['alternative_emailaddress'] = 'Alternativní e-mailová adresa'; +$lng['mails']['pop_success_alternative']['mailbody'] = 'Vážený uživateli,\n\nVáš emailový úèet {EMAIL}\nbyl úspìšnì nastaven.\nVaše heslo je {PASSWORD}.\n\nTento e-mail byl automaticky vygenerován,\nprosím neodpovídejte na nìj!\n\nPøejeme Vám hezký den, SysCP-Team'; +$lng['mails']['pop_success_alternative']['subject'] = 'E-mailový úèet byl úspìšnì vytvoøen'; +$lng['admin']['templates']['pop_success_alternative'] = 'Uvítací e-mail pro nové úèty byl odeslán na alternativní adresu'; +$lng['admin']['templates']['EMAIL_PASSWORD'] = 'Nahrazeno heslem úètu POP3/IMAP.'; + +// ADDED IN 1.2.16-svn13 + +$lng['error']['documentrootexists'] = 'Adresáø "%s" již existuje pro tohoto zákazníka. Prosím odstraòte jej, než budete znovu zákazníka vkládat.'; + +// ADDED IN 1.2.16-svn14 + +$lng['serversettings']['apacheconf_vhost']['title'] = 'Apache vhost konfiguraèní soubor/dirname'; +$lng['serversettings']['apacheconf_vhost']['description'] = 'Kde by mìla být uložena konfigurace vhosta? Mùžete zde buï specifikovat soubor (všichni vhosti v jednom souboru) nebo adresáø (každý vhost má vlastní soubor).'; +$lng['serversettings']['apacheconf_diroptions']['title'] = 'Apache diroptions konfiguraèní soubor/dirname'; +$lng['serversettings']['apacheconf_diroptions']['description'] = 'Kde by mìla být uložena konfigurace diroptions? Mùžete zde buï specifikovat soubor (všichni diroptions v jednom souboru) nebo adresáø (každý diroption má vlastní soubor).'; +$lng['serversettings']['apacheconf_htpasswddir']['title'] = 'Apache htpasswd dirname'; +$lng['serversettings']['apacheconf_htpasswddir']['description'] = 'Kde by mìly být uloženy htpasswd soubory pro ochranu adresáøù?'; + +// ADDED IN 1.2.16-svn15 + +$lng['error']['formtokencompromised'] = 'The request seems to be compromised. Z bezpeènostních dùvodù jste byli odhlášeni.'; +$lng['serversettings']['mysql_access_host']['title'] = 'MySQL-Access-Hosts'; +$lng['serversettings']['mysql_access_host']['description'] = 'Støedníkem oddìlený seznam hostù, ze kterých bude dovoleno uživatelùm se pøipojit k MySQL-Serveru.'; + +// ADDED IN 1.2.18-svn1 + +$lng['admin']['ipsandports']['create_listen_statement'] = 'Vytvoøit Listen statement'; +$lng['admin']['ipsandports']['create_namevirtualhost_statement'] = 'Vytvoøit NameVirtualHost statement'; +$lng['admin']['ipsandports']['create_vhostcontainer'] = 'Vytvoøit vHost-Container'; +$lng['admin']['ipsandports']['create_vhostcontainer_servername_statement'] = 'Vytvoøit ServerName statement v vHost-Container'; + +// ADDED IN 1.2.18-svn2 + +$lng['admin']['webalizersettings'] = 'Nastavení Webalizeru'; +$lng['admin']['webalizer']['normal'] = 'Normální'; +$lng['admin']['webalizer']['quiet'] = 'Tichý'; +$lng['admin']['webalizer']['veryquiet'] = 'Žádný výstup'; +$lng['serversettings']['webalizer_quiet']['title'] = 'Výstup Webalizeru'; +$lng['serversettings']['webalizer_quiet']['description'] = 'Povídavost webalizer-programu'; + +// ADDED IN 1.2.18-svn3 + +$lng['ticket']['admin_email'] = 'root@localhost'; +$lng['ticket']['noreply_email'] = 'tikety@syscp'; +$lng['admin']['ticketsystem'] = 'Support-tikety'; +$lng['menue']['ticket']['ticket'] = 'Support tikety'; +$lng['menue']['ticket']['categories'] = 'Kategorie podpory'; +$lng['menue']['ticket']['archive'] = 'Archiv-tiketù'; +$lng['ticket']['description'] = 'Nastavit popis zde!'; +$lng['ticket']['ticket_new'] = 'Otevøít nový tiket'; +$lng['ticket']['ticket_reply'] = 'zodpovìdìt tiket'; +$lng['ticket']['ticket_reopen'] = 'Znovuotevøít tiket'; +$lng['ticket']['ticket_newcateory'] = 'Vytvoøit novou kategorii'; +$lng['ticket']['ticket_editcateory'] = 'Upravit kategorii'; +$lng['ticket']['ticket_view'] = 'Zobrazit ticketcourse'; +$lng['ticket']['ticketcount'] = 'Tikety'; +$lng['ticket']['ticket_answers'] = 'Odpovìdi'; +$lng['ticket']['lastchange'] = 'Poslední akce'; +$lng['ticket']['subject'] = 'Pøedmìt'; +$lng['ticket']['status'] = 'Status'; +$lng['ticket']['lastreplier'] = 'Poslední odpovídající'; +$lng['ticket']['priority'] = 'Priorita'; +$lng['ticket']['low'] = 'Nízká'; +$lng['ticket']['normal'] = 'Normální'; +$lng['ticket']['high'] = 'Vysoká'; +$lng['ticket']['unf_low'] = 'Nízká'; +$lng['ticket']['unf_normal'] = 'Normální'; +$lng['ticket']['unf_high'] = 'Vysoká'; +$lng['ticket']['lastchange'] = 'Poslední zmìna'; +$lng['ticket']['lastchange_from'] = 'Od data (dd.mm.yyyy)'; +$lng['ticket']['lastchange_to'] = 'Do data (dd.mm.yyyy)'; +$lng['ticket']['category'] = 'Kategorie'; +$lng['ticket']['no_cat'] = 'Žádná'; +$lng['ticket']['message'] = 'Zpráva'; +$lng['ticket']['show'] = 'Zobraz'; +$lng['ticket']['answer'] = 'Odpovìï'; +$lng['ticket']['close'] = 'Zavøít'; +$lng['ticket']['reopen'] = 'Znovuotevøít'; +$lng['ticket']['archive'] = 'Archiv'; +$lng['ticket']['ticket_delete'] = 'Smazat tiket'; +$lng['ticket']['lastarchived'] = 'Nedávno archivované tikety'; +$lng['ticket']['archivedtime'] = 'Archivováno'; +$lng['ticket']['open'] = 'Otevøít'; +$lng['ticket']['wait_reply'] = 'Èeká na odpovìï'; +$lng['ticket']['replied'] = 'Odpovìzeno'; +$lng['ticket']['closed'] = 'Zavøený'; +$lng['ticket']['staff'] = 'Personál'; +$lng['ticket']['customer'] = 'Zákazník'; +$lng['ticket']['old_tickets'] = 'Tiket zprávy'; +$lng['ticket']['search'] = 'Prohledat archiv'; +$lng['ticket']['nocustomer'] = 'Žádný výbìr'; +$lng['ticket']['archivesearch'] = 'Výsledky prohledávání archivu'; +$lng['ticket']['noresults'] = 'Nenalezeny žádné tikety'; +$lng['ticket']['notmorethanxopentickets'] = 'Kvùli ochranì proti SPAMu nemùžete mít otevøeno víc jak %s tiketù'; +$lng['ticket']['supportstatus'] = 'Status-podpory'; +$lng['ticket']['supportavailable'] = 'Naše podpora jsou k dispozici a pøipraveni pomoci.'; +$lng['ticket']['supportnotavailable'] = 'Naše podpora není momentálnì dostupná'; +$lng['admin']['templates']['ticket'] = 'Upozoròovací e-maily pro tikety podpory'; +$lng['admin']['templates']['SUBJECT'] = 'Nahrazeno pøedmìtem tiketu podpory'; +$lng['admin']['templates']['new_ticket_for_customer'] = 'Zákaznické upozornìní, že byl tiket odeslán'; +$lng['admin']['templates']['new_ticket_by_customer'] = 'Administrátorské upozornìní, že byl tiket otevøen zákazníkem'; +$lng['admin']['templates']['new_reply_ticket_by_customer'] = 'Administrátorské upozornìní, že pøišla odpovìï na tiket od zákazníka'; +$lng['admin']['templates']['new_ticket_by_staff'] = 'Zákaznické upozornìní, že byl tiket otevøen personálem'; +$lng['admin']['templates']['new_reply_ticket_by_staff'] = 'Zákaznické upozornìní na odpovìï na tiket od personálu'; +$lng['mails']['new_ticket_for_customer']['mailbody'] = 'Vážený uživateli {FIRSTNAME} {NAME},\n\nVáš tiket podpory s pøedmìtem "{SUBJECT}" byl odeslán.\n\nAž pøijde odpovìï na Váš tiket, budete upozornìni.\n\nDìkujeme,\n SysCP-Team'; +$lng['mails']['new_ticket_for_customer']['subject'] = 'Váš tiket na podporu byl odeslán'; +$lng['mails']['new_ticket_by_customer']['mailbody'] = 'Milý administrátore,\n\nbyl odeslán nový tiket s pøedmìtem "{SUBJECT}".\n\nProsím pøihlašte se pro otevøení tiketu.\n\nDìkujeme,\n SysCP-Team'; +$lng['mails']['new_ticket_by_customer']['subject'] = 'Nový tiket podpory byl odeslán'; +$lng['mails']['new_reply_ticket_by_customer']['mailbody'] = 'Milý administrátore,\n\ntiket podpory "{SUBJECT}" byl zodpovìzen zákazníkem.\n\nProsím pøihlašte se pro otevøení tiketu.\n\nDìkujeme,\n SysCP-Team'; +$lng['mails']['new_reply_ticket_by_customer']['subject'] = 'Nová odpovìï na tiket podpory'; +$lng['mails']['new_ticket_by_staff']['mailbody'] = 'Vážený uživateli {FIRSTNAME} {NAME},\n\nbyl pro Vás otevøen tiket podpory s pøedmìtem "{SUBJECT}".\n\nProsím pøihlašte se pro otevøení tiketu.\n\nDìkujeme,\n SysCP-Team'; +$lng['mails']['new_ticket_by_staff']['subject'] = 'Nový tiket podpory byl odeslán'; +$lng['mails']['new_reply_ticket_by_staff']['mailbody'] = 'Vážený uživateli {FIRSTNAME} {NAME},\n\ntiket podpory s pøedmìtem "{SUBJECT}" byl zodpovìzen naším personálem.\n\nPro pøeètení tiketu se prosím pøihlašte.\n\nDìkujem,\n SysCP-Team'; +$lng['mails']['new_reply_ticket_by_staff']['subject'] = 'Nová odpovìï na tiket podpory'; +$lng['question']['ticket_reallyclose'] = 'Opravdu chcete zavøít tiket "%s"?'; +$lng['question']['ticket_reallydelete'] = 'Opravdu chcete smazat tiket "%s"?'; +$lng['question']['ticket_reallydeletecat'] = 'Opravdu chcete smazat kategorii "%s"?'; +$lng['question']['ticket_reallyarchive'] = 'Opravdu chcete pøesunout tiket "%s" do archivu?'; +$lng['error']['mysubject'] = '\'' . $lng['ticket']['subject'] . '\''; +$lng['error']['mymessage'] = '\'' . $lng['ticket']['message'] . '\''; +$lng['error']['mycategory'] = '\'' . $lng['ticket']['category'] . '\''; +$lng['error']['nomoreticketsavailable'] = 'Použili jste všechny dostupné tikety. Prosím kontaktujte svého administrátora.'; +$lng['error']['nocustomerforticket'] = 'Nemohu vytváøet tikety bez zákazníkù'; +$lng['error']['categoryhastickets'] = 'Kategorie stále obsahuje tikety.
    Prosím smažte tikety aby jste mohli smazat kategorii'; +$lng['error']['notmorethanxopentickets'] = $lng['ticket']['notmorethanxopentickets']; +$lng['admin']['ticketsettings'] = 'Tikety-podpory nastavení'; +$lng['admin']['archivelastrun'] = 'Poslední archivace tiketù'; +$lng['serversettings']['ticket']['noreply_email']['title'] = 'Bez odpovìdní e-mailová adresa'; +$lng['serversettings']['ticket']['noreply_email']['description'] = 'Odesílatelova adresa pro tikety podpory, vìtšinou nìco jako no-reply@domain.tld'; +$lng['serversettings']['ticket']['worktime_begin']['title'] = 'Zaèátek práce podpory (hh:mm)'; +$lng['serversettings']['ticket']['worktime_begin']['description'] = 'Start-time pokud je podpora k dispozici'; +$lng['serversettings']['ticket']['worktime_end']['title'] = 'Konec práce podpory (hh:mm)'; +$lng['serversettings']['ticket']['worktime_end']['description'] = 'End-time pokud je podpora k dispozici'; +$lng['serversettings']['ticket']['worktime_sat'] = 'Je podpora k dispozici o sobotách?'; +$lng['serversettings']['ticket']['worktime_sun'] = 'Je podpora k dispozici o nedìlích?'; +$lng['serversettings']['ticket']['worktime_all']['title'] = 'Podpora bez èasového omezení'; +$lng['serversettings']['ticket']['worktime_all']['description'] = 'Pokud "Ano" možnosti zaèátku a konce práce podpory bude pøepsána'; +$lng['serversettings']['ticket']['archiving_days'] = 'Po kolika dnech by mìly být uzavøené tikety archivovány?'; +$lng['customer']['tickets'] = 'Tikety podpory'; + +// ADDED IN 1.2.18-svn4 + +$lng['admin']['domain_nocustomeraddingavailable'] = 'Momentálnì není možné pøidat doménu. Nejdøíve musíte pøidat aspoò jednoho zákazníka.'; +$lng['serversettings']['ticket']['enable'] = 'Zapnout systém tiketù'; +$lng['serversettings']['ticket']['concurrentlyopen'] = 'Kolik tiketù by mìlo být k dispozici najednou?'; +$lng['error']['norepymailiswrong'] = '"Bezodpovìdní adresa" je špatnì. Je povolena pouze validní e-mailová adresa.'; +$lng['error']['tadminmailiswrong'] = '"Ticketadmin-adresa" je špatnì. Je povolena pouze validní e-mailová adresa.'; +$lng['ticket']['awaitingticketreply'] = 'Máte %s nezodpovìzených tiketù podpory'; + +// ADDED IN 1.2.18-svn5 + +$lng['serversettings']['ticket']['noreply_name'] = 'Jméno odesílatele tiketù v emailu'; + +?> \ No newline at end of file diff --git a/lng/danish.lng.php b/lng/danish.lng.php new file mode 100644 index 0000000000..d40cb3e5ca --- /dev/null +++ b/lng/danish.lng.php @@ -0,0 +1,452 @@ +Det tager et stykke tid for ændringer at blive opdateret i systemet.'; +$lng['domains']['domainsettings'] = 'Domæne indstillinger'; +$lng['domains']['domainname'] = 'Domæne navn'; +$lng['domains']['subdomain_add'] = 'Opræt suddomæne'; +$lng['domains']['subdomain_edit'] = 'Editer (sub)domæne'; +$lng['domains']['wildcarddomain'] = 'Opret som wildcarddomæne?'; +$lng['domains']['aliasdomain'] = 'Domæne alias'; +$lng['domains']['noaliasdomain'] = 'Intet domæne alias'; + +/** + * eMails + */ + +$lng['emails']['description'] = 'Her kan du oprette og ændre eMail adresser og kontoer.
    eMail modtages af de adresser du opretter. For at kunne hente eMail skal du oprette en konto til adressen, dette gøres ved at vælge "opret konto" efter du har oprettet eMail adressen.
    Dit email program skal konfigureres som følger: (Teksk i italisk skrift skal erstattes med de data du taster ind)
    Hostname: Domænenavn
    Bruger: Konto navn / eMail adresse
    Kodeord: kodeordet du har valgt'; +$lng['emails']['emailaddress'] = 'eMail-adresse'; +$lng['emails']['emails_add'] = 'Opret eMail-adresse'; +$lng['emails']['emails_edit'] = 'Editer eMail-adresse'; +$lng['emails']['catchall'] = 'Fang-Alt'; +$lng['emails']['iscatchall'] = 'Brug som "Fang-Alt" adresse?'; +$lng['emails']['account'] = 'Konto'; +$lng['emails']['account_add'] = 'Opret konto'; +$lng['emails']['account_delete'] = 'Slet konto'; +$lng['emails']['from'] = 'Kilde'; +$lng['emails']['to'] = 'Til'; +$lng['emails']['forwarders'] = 'Videresendere'; +$lng['emails']['forwarder_add'] = 'Opret videresender'; + +/** + * FTP + */ + +$lng['ftp']['description'] = 'Her kan du oprette og ændre dine FTP kontoer.
    ændringer bliver gennemført øjeblikeligt, og kontoerne kan straks tages i brug.'; +$lng['ftp']['account_add'] = 'Opret konto'; + +/** + * MySQL + */ + +$lng['mysql']['databasename'] = 'bruger/database navn'; +$lng['mysql']['databasedescription'] = 'database beskrivelse'; +$lng['mysql']['database_create'] = 'Opret database'; + +/** + * Extras + */ + +$lng['extras']['description'] = 'Her kan du udføre ekstra indstillinger, for eksempel kodeords beskyttelse af mapper.
    Det tager et stykke tid for ændringer at blive opdateret i systemet.'; +$lng['extras']['directoryprotection_add'] = 'Tilføj mappe beskyttelse'; +$lng['extras']['view_directory'] = 'vis mappe indhold'; +$lng['extras']['pathoptions_add'] = 'tilføj regler for sti'; +$lng['extras']['directory_browsing'] = 'vis mappe indhold?'; +$lng['extras']['pathoptions_edit'] = 'ændre regler for sti'; +$lng['extras']['error404path'] = '404'; +$lng['extras']['error403path'] = '403'; +$lng['extras']['error500path'] = '500'; +$lng['extras']['error401path'] = '401'; +$lng['extras']['errordocument404path'] = 'URL til ErrorDocument 404'; +$lng['extras']['errordocument403path'] = 'URL til ErrorDocument 403'; +$lng['extras']['errordocument500path'] = 'URL til ErrorDocument 500'; +$lng['extras']['errordocument401path'] = 'URL til ErrorDocument 401'; + +/** + * Errors + */ + +$lng['error']['error'] = 'Fejl'; +$lng['error']['directorymustexist'] = 'Mappen %s eksisterer ikke. Du skal oprette den via din FTP-klient.'; +$lng['error']['filemustexist'] = 'Filen %s skal være oprettet.'; +$lng['error']['allresourcesused'] = 'Du har brugt dine tilladte ressourcer.'; +$lng['error']['domains_cantdeletemaindomain'] = 'Du kan ikke slette et eMail-domæne.'; +$lng['error']['domains_canteditdomain'] = 'Du kan ikke lave ændringer i dette domæne, da det er blevet låst af administratoren.'; +$lng['error']['domains_cantdeletedomainwithemail'] = 'Du kan ikke slette et domæne med tilknyttede eMail-adresser. Slet alle email adresser først.'; +$lng['error']['firstdeleteallsubdomains'] = 'Du skal først slette alle sub-domæner for du kan oprette et wildcarddomæne.'; +$lng['error']['youhavealreadyacatchallforthisdomain'] = 'Du har allerede valgt en Fang-Alt adresse for dette domæne.'; +$lng['error']['ftp_cantdeletemainaccount'] = 'Du kan ikke slette din primære FTP konto.'; +$lng['error']['login'] = 'Den indtastede bruger/kode er ikke korrekt. Forsøg venligst igen.'; +$lng['error']['login_blocked'] = 'Denne konto er blevet midlertidigt lukket grundet for mange fejlagtige logind forsøg.
    Forsøg venligst igen om ' . $settings['login']['deactivatetime'] . ' sekunder.'; +$lng['error']['notallreqfieldsorerrors'] = 'Alle krævede felter er ikke udfyldt, eller der er fejl i en eller flere af udfyldningerne.'; +$lng['error']['oldpasswordnotcorrect'] = 'Det gamle kodeord er ikke indtastet korrekt.'; +$lng['error']['youcantallocatemorethanyouhave'] = 'Du kan ikke tildele flere ressourcer end du er blevet bevilliget.'; +$lng['error']['mustbeurl'] = 'Din indtastning er ikke en gyldig URL (f.eks. http://eksempel.com/fejl404.htm)'; +$lng['error']['invalidpath'] = 'Du har valgt en ikke gyldig url (måske et problem med mappe list?)'; +$lng['error']['stringisempty'] = 'Manglende intasting i feltet'; +$lng['error']['stringiswrong'] = 'Forkert indtastning i feltet'; +$lng['error']['myloginname'] = '\'' . $lng['login']['username'] . '\''; +$lng['error']['mypassword'] = '\'' . $lng['login']['password'] . '\''; +$lng['error']['oldpassword'] = '\'' . $lng['changepassword']['old_password'] . '\''; +$lng['error']['newpassword'] = '\'' . $lng['changepassword']['new_password'] . '\''; +$lng['error']['newpasswordconfirm'] = '\'' . $lng['changepassword']['new_password_confirm'] . '\''; +$lng['error']['newpasswordconfirmerror'] = 'Det nye kodeord og kontrol indtastning stemmer ikke overens'; +$lng['error']['myname'] = '\'' . $lng['customer']['name'] . '\''; +$lng['error']['myfirstname'] = '\'' . $lng['customer']['firstname'] . '\''; +$lng['error']['emailadd'] = '\'' . $lng['customer']['email'] . '\''; +$lng['error']['mydomain'] = '\'Domæne\''; +$lng['error']['mydocumentroot'] = '\'Mapperod\''; +$lng['error']['loginnameexists'] = 'Brugernavnet %s eksisterer allerede'; +$lng['error']['emailiswrong'] = 'eMail-Adressen %s indeholder ugyldige tegn eller er ikke komplet'; +$lng['error']['loginnameiswrong'] = 'Brugernavnet %s indeholder ugyldige tegn'; +$lng['error']['userpathcombinationdupe'] = 'Kombinationen af brugernavn og sti findes allerede.'; +$lng['error']['patherror'] = 'Fejl! Sti kan ikke være tom'; +$lng['error']['errordocpathdupe'] = 'Indstillinger for stien %s eksisterer allerede'; +$lng['error']['adduserfirst'] = 'Opret venligst en kunde først'; +$lng['error']['domainalreadyexists'] = 'Domænet %s er allerede delligeret til en kunde'; +$lng['error']['nolanguageselect'] = 'Ingen sprog er valgt.'; +$lng['error']['nosubjectcreate'] = 'Du skal angive en overskrift for denne eMail skabelon.'; +$lng['error']['nomailbodycreate'] = 'Du skal skrive et indhold til denne eMail skabelon.'; +$lng['error']['templatenotfound'] = 'Skabelon blev ikke fundet.'; +$lng['error']['alltemplatesdefined'] = 'Du kan ikke oprette flere skabeloner da alle sprog allerede er understøttet.'; +$lng['error']['wwwnotallowed'] = 'www er ikke tilladt som sub-domæne.'; +$lng['error']['subdomainiswrong'] = 'Sub-domænet %s indeholder ugyldige tegn.'; +$lng['error']['domaincantbeempty'] = 'The domain-name can not be empty.'; +$lng['error']['domainexistalready'] = 'Domænet %s eksisterer allerede.'; +$lng['error']['domainisaliasorothercustomer'] = 'Det valgte alias-domæne er enten selv et alias domæne, eller tilhører en anden kunde.'; +$lng['error']['emailexistalready'] = 'eMail-Adressen %s eksisterer allerede.'; +$lng['error']['maindomainnonexist'] = 'Hoved-domænet %s eksisterer ikke.'; +$lng['error']['destinationnonexist'] = 'Opret venligst videresenderen i feltet.'; +$lng['error']['destinationalreadyexistasmail'] = 'Videresenderen til %s eksisterer allerede som en aktiv eMail-adresse.'; +$lng['error']['destinationalreadyexist'] = 'Der er allerede angivet en videresender til %s .'; +$lng['error']['destinationiswrong'] = 'Videresenderen %s indeholder ugyldige tegn eller er ikke komplet.'; +$lng['error']['domainname'] = $lng['domains']['domainname']; + +/** + * Questions + */ + +$lng['question']['question'] = 'Sikkerhedsspørgsmål'; +$lng['question']['admin_customer_reallydelete'] = 'Er du sikker på du vil slette kunden %s? Dette kan ikke fortrydes!'; +$lng['question']['admin_domain_reallydelete'] = 'Er du sikker på du vil slette domænet %s?'; +$lng['question']['admin_domain_reallydisablesecuritysetting'] = 'Er du sikker på du vil deaktivere disse sikkerheds indstillinger (OpenBasedir og/eller SafeMode)?'; +$lng['question']['admin_admin_reallydelete'] = 'Er du sikker på du vil slette administrator %s? Alle kunder og domæner som hører hertil vil blive allokeret til øverste adminstartor.'; +$lng['question']['admin_template_reallydelete'] = 'Er du sikker på du vil slette skabelonen \'%s*\'?'; +$lng['question']['domains_reallydelete'] = 'Er du sikker på du vil slette domænet %s?'; +$lng['question']['email_reallydelete'] = 'Er du sikker på du vil slette eMail-adressen %s?'; +$lng['question']['email_reallydelete_account'] = 'Er du sikker på du vil slette eMail-account fra %s?'; +$lng['question']['email_reallydelete_forwarder'] = 'Er du sikker på du vil slette videresenderen %s?'; +$lng['question']['extras_reallydelete'] = 'Er du sikker på du vil slette mappe beskyttelse for %s?'; +$lng['question']['extras_reallydelete_pathoptions'] = 'Er du sikker på du vil slette regler for stien %s?'; +$lng['question']['ftp_reallydelete'] = 'Er du sikker på du vil slette FTP kontoen %s?'; +$lng['question']['mysql_reallydelete'] = 'Er du sikker på du vil slette databasen %s? Dette kan ikke fortrydes!'; +$lng['question']['admin_configs_reallyrebuild'] = 'Er du sikker på du vil genbygge dine apache og bind konfigurations filer?'; + +/** + * Mails + */ + +$lng['mails']['pop_success']['mailbody'] = 'Hej,\n\ndin eMail konto {EMAIL}\ner blevet oprettet.\n\nDette er en automatisk genereret\neMail, svar er ikke nødvendig!\n\nHilsen, SysCP-Teamet'; +$lng['mails']['pop_success']['subject'] = 'eMail konto er blevet oprettet'; +$lng['mails']['createcustomer']['mailbody'] = 'Hej {FIRSTNAME} {NAME},\n\ndette er information til din konto:\n\nBruger: {USERNAME}\nKodeord: {PASSWORD}\n\nHilsen, SysCP-Teamet'; +$lng['mails']['createcustomer']['subject'] = 'Konto information'; + +/** + * Admin + */ + +$lng['admin']['overview'] = 'Oversigt'; +$lng['admin']['ressourcedetails'] = 'Brugte ressourcer'; +$lng['admin']['systemdetails'] = 'System Detaljer'; +$lng['admin']['syscpdetails'] = 'SysCP Detaljer'; +$lng['admin']['installedversion'] = 'Installeret Version'; +$lng['admin']['latestversion'] = 'Seneste Version'; +$lng['admin']['lookfornewversion']['clickhere'] = 'søg via webservice'; +$lng['admin']['lookfornewversion']['error'] = 'Fejl under læsning'; +$lng['admin']['resources'] = 'Ressourcer'; +$lng['admin']['customer'] = 'Kunde'; +$lng['admin']['customers'] = 'Kunder'; +$lng['admin']['customer_add'] = 'Opret kunde'; +$lng['admin']['customer_edit'] = 'Editer kunde'; +$lng['admin']['domains'] = 'Domæner'; +$lng['admin']['domain_add'] = 'Opret domæne'; +$lng['admin']['domain_edit'] = 'Editer domæne'; +$lng['admin']['subdomainforemail'] = 'Subdomæner som eMaildomæner'; +$lng['admin']['admin'] = 'Admin'; +$lng['admin']['admins'] = 'Admins'; +$lng['admin']['admin_add'] = 'Opret administrator'; +$lng['admin']['admin_edit'] = 'Editer administrator'; +$lng['admin']['customers_see_all'] = 'Kan se alle kunder?'; +$lng['admin']['domains_see_all'] = 'Kan se alle domæner?'; +$lng['admin']['change_serversettings'] = 'Kan ændre server indstillinger?'; +$lng['admin']['server'] = 'Server'; +$lng['admin']['serversettings'] = 'Indstillinger'; +$lng['admin']['rebuildconf'] = 'Genbyg konfigurations filer'; +$lng['admin']['stdsubdomain'] = 'Standart subdomæne'; +$lng['admin']['stdsubdomain_add'] = 'Opret standart subdomæne'; +$lng['admin']['deactivated'] = 'Deaktiveret'; +$lng['admin']['deactivated_user'] = 'Deaktiver Bruger'; +$lng['admin']['sendpassword'] = 'Send kodeord'; +$lng['admin']['ownvhostsettings'] = 'Egne vHost-indstillinger'; +$lng['admin']['configfiles']['serverconfiguration'] = 'Konfiguration'; +$lng['admin']['configfiles']['files'] = 'Konfigurationsfiler: Lav venligst ændringerne i de følgende filer eller opret
    dem med dette indhold hvis de ikke eksisterer.
    Bemærk: MySQL Kodeordet er ikke blevet ændre af sikkerhedsgrunde.
    Udskift venligst "MYSQL_PASSWORD" manuelt. Hvis du har glemt dit MySQL kodeord
    er det at finde i "lib/userdata.inc.php".'; +$lng['admin']['configfiles']['commands'] = 'Kommandoer: Udfør disse kommandoer i shell\'et.'; +$lng['admin']['configfiles']['restart'] = 'Genstart: Udfør disse kommandoer i shell\'et for at aktivere den nye konfiguration.'; +$lng['admin']['templates']['templates'] = 'Skabeloner'; +$lng['admin']['templates']['template_add'] = 'Tilføj skabelon'; +$lng['admin']['templates']['template_edit'] = 'Editer skabelon'; +$lng['admin']['templates']['action'] = 'Handling'; +$lng['admin']['templates']['email'] = 'E-Mail'; +$lng['admin']['templates']['subject'] = 'Emne'; +$lng['admin']['templates']['mailbody'] = 'Mail indhold'; +$lng['admin']['templates']['createcustomer'] = 'Velkomst mail for nye kunder'; +$lng['admin']['templates']['pop_success'] = 'Velkomst mail for nye email kontoer'; +$lng['admin']['templates']['template_replace_vars'] = 'Variabler der udskiftes i skabelonen:'; +$lng['admin']['templates']['FIRSTNAME'] = 'Udskiftes med kundes navn.'; +$lng['admin']['templates']['NAME'] = 'Udskiftes med kundes efternavn.'; +$lng['admin']['templates']['USERNAME'] = 'Udskiftes med kundes konto brugernavn.'; +$lng['admin']['templates']['PASSWORD'] = 'Udskiftes med kundes konto kodeord.'; +$lng['admin']['templates']['EMAIL'] = 'Udskiftes med adressen af POP3/IMAP kontoen.'; + +/** + * Serversettings + */ + +$lng['serversettings']['session_timeout']['title'] = 'Sæssion Timeout'; +$lng['serversettings']['session_timeout']['description'] = 'Hvor længe skal en bruger være inaktiv før sæssionen bliver ugyldig (i sekunder)?'; +$lng['serversettings']['accountprefix']['title'] = 'Kundepræfiks'; +$lng['serversettings']['accountprefix']['description'] = 'Hvilket præfiks skal kunde kontoer have?'; +$lng['serversettings']['mysqlprefix']['title'] = 'SQL Præfiks'; +$lng['serversettings']['mysqlprefix']['description'] = 'Hvilket præfiks skal MySQL databaser have?'; +$lng['serversettings']['ftpprefix']['title'] = 'FTP Præfiks'; +$lng['serversettings']['ftpprefix']['description'] = 'Hvilket præfiks skal FTP kontoer have?'; +$lng['serversettings']['documentroot_prefix']['title'] = 'Dokument mappe'; +$lng['serversettings']['documentroot_prefix']['description'] = 'Hvor skal data opbevares?'; +$lng['serversettings']['logfiles_directory']['title'] = 'Logfilmappe'; +$lng['serversettings']['logfiles_directory']['description'] = 'Hvor skal alle logfilerne opbevares?'; +$lng['serversettings']['ipaddress']['title'] = 'IP-Adresse'; +$lng['serversettings']['ipaddress']['description'] = 'Hvad er denne servers IP-adresse?'; +$lng['serversettings']['hostname']['title'] = 'Hostname'; +$lng['serversettings']['hostname']['description'] = 'Hvad er denne servers hostname?'; +$lng['serversettings']['apachereload_command']['title'] = 'Apache genstart kommando'; +$lng['serversettings']['apachereload_command']['description'] = 'Hvad er kommandoen til at genstarte apache?'; +$lng['serversettings']['bindconf_directory']['title'] = 'Bind konfigurations mappe'; +$lng['serversettings']['bindconf_directory']['description'] = 'Hvor er bind\'s konfigurationsfiler?'; +$lng['serversettings']['bindreload_command']['title'] = 'Bind genstart kommando'; +$lng['serversettings']['bindreload_command']['description'] = 'Hvad er kommandoen til at genstarte bind?'; +$lng['serversettings']['binddefaultzone']['title'] = 'Bind default zone'; +$lng['serversettings']['binddefaultzone']['description'] = 'Hvad er navnet på default zone?'; +$lng['serversettings']['vmail_uid']['title'] = 'Mails-Uid'; +$lng['serversettings']['vmail_uid']['description'] = 'Hvilket UserID skal mails bruge?'; +$lng['serversettings']['vmail_gid']['title'] = 'Mails-Gid'; +$lng['serversettings']['vmail_gid']['description'] = 'Hvilket GroupID skal mails bruge?'; +$lng['serversettings']['vmail_homedir']['title'] = 'Mails-Homedir'; +$lng['serversettings']['vmail_homedir']['description'] = 'Hvor skal alle mails opbevares?'; +$lng['serversettings']['adminmail']['title'] = 'Afsender'; +$lng['serversettings']['adminmail']['description'] = 'Hvilken adresse skal eMails sendt fra kontrol panelet være?'; +$lng['serversettings']['phpmyadmin_url']['title'] = 'phpMyAdmin URL'; +$lng['serversettings']['phpmyadmin_url']['description'] = 'Hvad er URL\'en til phpMyAdmin? (skal starte med http://)'; +$lng['serversettings']['webmail_url']['title'] = 'WebMail URL'; +$lng['serversettings']['webmail_url']['description'] = 'Hvad er URL\'en til WebMail? (skal starte med http://)'; +$lng['serversettings']['webftp_url']['title'] = 'WebFTP URL'; +$lng['serversettings']['webftp_url']['description'] = 'Hvad er URL\'en til WebFTP? (skal starte med http://)'; +$lng['serversettings']['language']['description'] = 'Hvilket sprog er standart på din server?'; +$lng['serversettings']['maxloginattempts']['title'] = 'Maksimum log ind forsøg'; +$lng['serversettings']['maxloginattempts']['description'] = 'Maksimum log ind forsøg hvorefter kontoen bliver spærret.'; +$lng['serversettings']['deactivatetime']['title'] = 'Spærrings periode'; +$lng['serversettings']['deactivatetime']['description'] = 'Tid i sekunder en konto skal forblive spærret.'; +$lng['serversettings']['pathedit']['title'] = 'Sti valg type'; +$lng['serversettings']['pathedit']['description'] = 'SKal sti vælges via et indtastningfelt eller en dropdown menu?'; + +/** + * CHANGED BETWEEN 1.2.12 and 1.2.13 + */ + +$lng['mysql']['description'] = 'Her kan du oprette og editere dine MySQL-Databaser.
    ændringerne er øjeblikkelige og databaserne kan bruges med det samme.
    I menuen til venstre finder du værktøjet phpMyAdmin hvilket kan bruges til nemt at administrere din(e) database(r).

    For at gøre brug af databaser i dine egne php-scripts skal de følgende indstillinger bruges: (Teksk i italisk skrift skal erstattes med de data du taster ind)
    Vært:
    Bruger: Databasenavn
    Kodeord: kodeordet du har valgt
    Database: Databasenavn'; + +/** + * ADDED BETWEEN 1.2.12 and 1.2.13 + */ + +$lng['admin']['cronlastrun'] = 'Sidste Cron'; +$lng['serversettings']['paging']['title'] = 'Genstande per side'; +$lng['serversettings']['paging']['description'] = 'Hvor mange genstande skal vises per side? (0 = brug ikke side inddeling)'; +$lng['error']['ipstillhasdomains'] = 'IP/Port kombinationen du vil slette har stadig domæner tilknyttet. Overfør disse domæner til en anden IP/Port kombination for at slette denne.'; +$lng['error']['cantdeletedefaultip'] = 'Du kan ikke slette standart IP/Port kombinationen for sælgere. Opret venligst en anden IP/Port kombination som standart først.'; +$lng['error']['cantdeletesystemip'] = 'Du kan ikke slette den sidste system IP. Opret en ny IP/Port først eller lav denne om.'; +$lng['error']['myipaddress'] = '\'IP\''; +$lng['error']['myport'] = '\'Port\''; +$lng['error']['myipdefault'] = 'Do skal vælge en IP/Port kombination som skal bruges som standart.'; +$lng['error']['myipnotdouble'] = 'Denne IP/Port kombination eksisterer allerede.'; +$lng['question']['admin_ip_reallydelete'] = 'Er du sikker på du vil slette IP-adressen %s?'; +$lng['admin']['ipsandports']['ipsandports'] = 'IP\'er og Porte'; +$lng['admin']['ipsandports']['add'] = 'Tilføj IP/Port'; +$lng['admin']['ipsandports']['edit'] = 'Editer IP/Port'; +$lng['admin']['ipsandports']['ipandport'] = 'IP/Port'; +$lng['admin']['ipsandports']['ip'] = 'IP'; +$lng['admin']['ipsandports']['port'] = 'Port'; + +// ADDED IN 1.2.13-rc3 + +$lng['error']['cantchangesystemip'] = 'Du kan ikke ændre den sidste system IP. Opret endten en ny IP/Port kombination til system IP\'en eller skift system IP\'en.'; +$lng['question']['admin_domain_reallydocrootoutofcustomerroot'] = 'Er du sikker på du vil ændre mappe roden for dette domæne til en sti som ikke er i kundes mappe?'; + +// ADDED IN 1.2.14-rc1 + +$lng['admin']['memorylimitdisabled'] = 'Deaktiveret'; +$lng['error']['loginnameissystemaccount'] = 'Du kan ikke oprette konto\'er hvis navn minder om system kontoer. Forsøg venligst med et andet navn.'; +$lng['domain']['openbasedirpath'] = 'OpenBasedir-sti'; +$lng['domain']['docroot'] = 'Sti fra feltet ovenfor'; +$lng['domain']['homedir'] = 'Hjemme mappe'; +$lng['admin']['valuemandatory'] = 'Denne værdi er obligatorisk'; +$lng['admin']['valuemandatorycompany'] = 'Enten "Navn", "Efternavn" eller "Firma" skal være udfyldt'; +$lng['menue']['main']['username'] = 'Logget ind som: '; +$lng['panel']['urloverridespath'] = 'URL (Tilsidesætter sti)'; +$lng['panel']['pathorurl'] = 'Sti eller URL'; +$lng['error']['sessiontimeoutiswrong'] = '"Session Timeout" må kun bestå af tal.'; +$lng['error']['maxloginattemptsiswrong'] = '"Max Login Attempts" må kun bestå af tal.'; +$lng['error']['deactivatetimiswrong'] = '"Deactivate Time" må kun bestå af tal.'; +$lng['error']['accountprefixiswrong'] = '&quopt;Kundepræfiks" er ikke korrekt.'; +$lng['error']['mysqlprefixiswrong'] = '"SQL Præfiks" er ikke korrekt.'; +$lng['error']['ftpprefixiswrong'] = '"FTP Præfiks" er ikke korrekt.'; +$lng['error']['ipiswrong'] = '"IP-Adresse" er ikke en gyldig IP adresse'; +$lng['error']['vmailuidiswrong'] = '"Mails-uid" er ikke korrekt. UID skal bestå af tal.'; +$lng['error']['vmailgidiswrong'] = '"Mails-gid" er ikke korrekt. GID skal bestå af tal.'; +$lng['error']['adminmailiswrong'] = '"Afsender-adresse" er ikke en gyldig eMail adresse.'; +$lng['error']['pagingiswrong'] = '"Genstande per side" må kun bestå af tal.'; +$lng['error']['phpmyadminiswrong'] = 'phpMyAdmin linket er ikke gyldigt.'; +$lng['error']['webmailiswrong'] = 'WebMail linket er ikke gyldigt.'; +$lng['error']['webftpiswrong'] = 'WebFTP linket er ikke gyldigt.'; +$lng['domains']['hasaliasdomains'] = 'Har aliasdomæne(r)'; +$lng['serversettings']['defaultip']['title'] = 'Standart IP/Port'; +$lng['serversettings']['defaultip']['description'] = 'Hvilket IP/Port kombination skal bruges som standart?'; +$lng['domains']['statstics'] = 'Forbrugs statestik'; +$lng['panel']['ascending'] = 'kronologisk'; +$lng['panel']['decending'] = 'omvendt kronologisk'; +$lng['panel']['search'] = 'Søg'; +$lng['panel']['used'] = 'brugt'; +$lng['error']['stringformaterror'] = 'Den indtastede værdi i feltet "%s" er ugyldig'; + +// ADDED IN 1.2.15-svn1 + +$lng['admin']['serversoftware'] = 'Serversoftware'; +$lng['admin']['phpversion'] = 'PHP-Version'; +$lng['admin']['phpmemorylimit'] = 'PHP Hukommelses Græse'; +$lng['admin']['mysqlserverversion'] = 'MySQL Server Version'; +$lng['admin']['mysqlclientversion'] = 'MySQL Klient Version'; +$lng['admin']['webserverinterface'] = 'Webserver Brugerflade'; + +?> \ No newline at end of file diff --git a/lng/dutch.lng.php b/lng/dutch.lng.php new file mode 100644 index 0000000000..e384d10186 --- /dev/null +++ b/lng/dutch.lng.php @@ -0,0 +1,464 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Language + * @version $Id: dutch.lng.php 2692 2009-03-27 18:04:47Z flo $ + */ + +/** + * Global + */ + +$lng['translator'] = 'Sander Klein'; +$lng['panel']['edit'] = 'bewerken'; +$lng['panel']['delete'] = 'verwijderen'; +$lng['panel']['create'] = 'nieuw'; +$lng['panel']['save'] = 'opslaan'; +$lng['panel']['yes'] = 'ja'; +$lng['panel']['no'] = 'nee'; +$lng['panel']['emptyfornochanges'] = 'leeg laten voor huidige instelling'; +$lng['panel']['emptyfordefault'] = 'leeg laten voor de standaard instellingen'; +$lng['panel']['path'] = 'Pad'; +$lng['panel']['toggle'] = 'In- of uitschalen'; +$lng['panel']['next'] = 'volgende'; +$lng['panel']['dirsmissing'] = 'Kan de map niet lezen of vinden!'; + +/** + * Login + */ + +$lng['login']['username'] = 'Gebruikersnaam'; +$lng['login']['password'] = 'Wachtwoord'; +$lng['login']['language'] = 'Taal'; +$lng['login']['login'] = 'Inloggen'; +$lng['login']['logout'] = 'Uitloggen'; +$lng['login']['profile_lng'] = 'Profiel taal'; + +/** + * Customer + */ + +$lng['customer']['documentroot'] = 'Home directory'; +$lng['customer']['name'] = 'Naam'; +$lng['customer']['firstname'] = 'Voornaam'; +$lng['customer']['company'] = 'Bedrijfsnaam'; +$lng['customer']['street'] = 'Straat'; +$lng['customer']['zipcode'] = 'Postcode'; +$lng['customer']['city'] = 'Plaats'; +$lng['customer']['phone'] = 'Telefoonnummer'; +$lng['customer']['fax'] = 'Faxnummer'; +$lng['customer']['email'] = 'Email'; +$lng['customer']['customernumber'] = 'Klant ID'; +$lng['customer']['diskspace'] = 'Webruimte (MB)'; +$lng['customer']['traffic'] = 'Verkeer (GB)'; +$lng['customer']['mysqls'] = 'MySQL-Databases'; +$lng['customer']['emails'] = 'E-mail-Adressen'; +$lng['customer']['accounts'] = 'E-mail-Accounts'; +$lng['customer']['forwarders'] = 'E-mail-Forwarders'; +$lng['customer']['ftps'] = 'FTP-Accounts'; +$lng['customer']['subdomains'] = 'Sub-Domein(en)'; +$lng['customer']['domains'] = 'Domein(en)'; +$lng['customer']['unlimited'] = 'onbeperkt'; + +/** + * Customermenue + */ + +$lng['menue']['main']['main'] = 'Main'; +$lng['menue']['main']['changepassword'] = 'Wijzig wachtwoord'; +$lng['menue']['main']['changelanguage'] = 'Wijzig taal'; +$lng['menue']['email']['email'] = 'E-mail'; +$lng['menue']['email']['emails'] = 'Adressen'; +$lng['menue']['email']['webmail'] = 'WebMail'; +$lng['menue']['mysql']['mysql'] = 'MySQL'; +$lng['menue']['mysql']['databases'] = 'Databases'; +$lng['menue']['mysql']['phpmyadmin'] = 'phpMyAdmin'; +$lng['menue']['domains']['domains'] = 'Domeinen'; +$lng['menue']['domains']['settings'] = 'Instellingen'; +$lng['menue']['ftp']['ftp'] = 'FTP'; +$lng['menue']['ftp']['accounts'] = 'Accounts'; +$lng['menue']['ftp']['webftp'] = 'WebFTP'; +$lng['menue']['extras']['extras'] = 'Extras'; +$lng['menue']['extras']['directoryprotection'] = 'Map beveiliging'; +$lng['menue']['extras']['pathoptions'] = 'pad opties'; + +/** + * Index + */ + +$lng['index']['customerdetails'] = 'Klant Details'; +$lng['index']['accountdetails'] = 'Account Details'; + +/** + * Change Password + */ + +$lng['changepassword']['old_password'] = 'Oud wachtwoord'; +$lng['changepassword']['new_password'] = 'Nieuw wachtwoord'; +$lng['changepassword']['new_password_confirm'] = 'Nieuw wacthwoord (bevestigen)'; +$lng['changepassword']['new_password_ifnotempty'] = 'Nieuw wachtwoord (leeg = niet veranderen)'; +$lng['changepassword']['also_change_ftp'] = ' wijzig ook het wachtwoord van het hoofd FTP account'; + +/** + * Domains + */ + +$lng['domains']['description'] = 'Hier kunt u nieuwe (sub-) domeinen maken en de paden aanpassen.
    Het systeem heeft een paar minuten nodig om de wijzigingen door te voeren na iedere varandering.'; +$lng['domains']['domainsettings'] = 'Domein instellingen'; +$lng['domains']['domainname'] = 'Domeinnaam'; +$lng['domains']['subdomain_add'] = 'Maak subdomein'; +$lng['domains']['subdomain_edit'] = 'Bewerk (sub)domein'; +$lng['domains']['wildcarddomain'] = 'Maak als wildcarddomein?'; +$lng['domains']['aliasdomain'] = 'Alias voor domein'; +$lng['domains']['noaliasdomain'] = 'Geen alias domein'; + +/** + * E-mails + */ + +$lng['emails']['description'] = 'Hier kunt u e-mail adressen maken en wijzigen.
    Een aacount is net als een brievenbus voor uw huis. Als iemand u mail stuurd word dit op uw account bezorgt.

    Om uw emails te downloaden moet u het volgende installen in uw mail programma: (De schuigedrukte gegevens moeten gewijzigd worden in hetgeen dat u ingegeven heeft!)
    Servernaam: Domeinnaam
    Gebruikersnaam: Account naam / e-mail adres
    Wachtwoord: het door u ingegeven wachtwoord'; +$lng['emails']['emailaddress'] = 'E-mail adres'; +$lng['emails']['emails_add'] = 'Maak nieuw e-mail adres'; +$lng['emails']['emails_edit'] = 'Bewerk e-mail-adres'; +$lng['emails']['catchall'] = 'Catchall'; +$lng['emails']['iscatchall'] = 'Definieer als catchall-adres?'; +$lng['emails']['account'] = 'Account'; +$lng['emails']['account_add'] = 'Maak nieuw account'; +$lng['emails']['account_delete'] = 'Verwijder account'; +$lng['emails']['from'] = 'Van'; +$lng['emails']['to'] = 'Aan'; +$lng['emails']['forwarders'] = 'Forwarders'; +$lng['emails']['forwarder_add'] = 'Maak forwarder'; + +/** + * FTP + */ + +$lng['ftp']['description'] = 'Hier kunt u nieuwe FTP accounts maken of bestaande accounts wijzigen.
    De wijzigingen worden direct doorgevoerd en het account kan direct gebruikt worden.'; +$lng['ftp']['account_add'] = 'Maak nieuw account'; + +/** + * MySQL + */ + +$lng['mysql']['databasename'] = 'gebruiker/database naam'; +$lng['mysql']['databasedescription'] = 'database omschrijving'; +$lng['mysql']['database_create'] = 'Maak database'; + +/** + * Extras + */ + +$lng['extras']['description'] = 'Hier kunt u wat extra instellingen doen zoals map beveiliging.
    Het systeem heeft enkele minuten nodig om elke wijziging door te voeren.'; +$lng['extras']['directoryprotection_add'] = 'Map beveiliging toevoegen'; +$lng['extras']['view_directory'] = 'map inhoud laten zien'; +$lng['extras']['pathoptions_add'] = 'Pad opties toevoegen'; +$lng['extras']['directory_browsing'] = 'map inhoud browsen'; +$lng['extras']['pathoptions_edit'] = 'Pad opties bewerken'; +$lng['extras']['error404path'] = '404'; +$lng['extras']['error403path'] = '403'; +$lng['extras']['error500path'] = '500'; +$lng['extras']['error401path'] = '401'; +$lng['extras']['errordocument404path'] = 'URL naar Foutdocument 404'; +$lng['extras']['errordocument403path'] = 'URL naar Foutdocument 403'; +$lng['extras']['errordocument500path'] = 'URL naar Foutdocument 500'; +$lng['extras']['errordocument401path'] = 'URL naar Foutducument 401'; + +/** + * Errors + */ + +$lng['error']['error'] = 'Fout'; +$lng['error']['directorymustexist'] = 'De map %s bestaat niet. Maak hem eerst aan met uw FTP client.'; +$lng['error']['filemustexist'] = 'Het bestand %s bestaat niet.'; +$lng['error']['allresourcesused'] = 'U heeft al uw resources al gebruikt.'; +$lng['error']['domains_cantdeletemaindomain'] = 'U kunt een domein dat gebruikt word als email-domein niet verwijderen.'; +$lng['error']['domains_canteditdomain'] = 'U kunt dit domein niet aanpassen. Dit is door de admin onbruikbaar gemaakt.'; +$lng['error']['domains_cantdeletedomainwithemail'] = 'U kunt een domein dat gebruikt word als email-domein niet verwijderen. Verwijder eerst alle e-mail adressen.'; +$lng['error']['firstdeleteallsubdomains'] = 'U moet eerst alle subdomeinen verwijderen voor u een wildcard domein kunt maken.'; +$lng['error']['youhavealreadyacatchallforthisdomain'] = 'U heeft al een catchall voor dit domein aangemaakt.'; +$lng['error']['ftp_cantdeletemainaccount'] = 'U kunt uw hoofd FTP account niet verwijderen'; +$lng['error']['login'] = 'De door u ingegeven gebruikersnaam en wacthwoord zijn verkeerd. Probeer opnieuw!'; +$lng['error']['login_blocked'] = 'Dit account is inactief vanwege teveel login fouten.
    Probeer het nog eens over ' . $settings['login']['deactivatetime'] . ' seconden.'; +$lng['error']['notallreqfieldsorerrors'] = 'U heeft niet alle velden goed, of helemaal niet ingevuld.'; +$lng['error']['oldpasswordnotcorrect'] = 'Het oude wachtwoord is niet correct.'; +$lng['error']['youcantallocatemorethanyouhave'] = 'U kunt niet meer resources gebruiken dan dat u bezit.'; +$lng['error']['mustbeurl'] = 'U heeft geen goed of compleet URL ingegeven (bijv. http://eenserver.com/error404.htm)'; +$lng['error']['invalidpath'] = 'U heeft geen goed URL ingegeven (misschien een probleem met dirlisting?)'; +$lng['error']['stringisempty'] = 'Geen waarde in invoerveld'; +$lng['error']['stringiswrong'] = 'Verkeerde waarde in invoerveld'; +$lng['error']['myloginname'] = '\'' . $lng['login']['username'] . '\''; +$lng['error']['mypassword'] = '\'' . $lng['login']['password'] . '\''; +$lng['error']['oldpassword'] = '\'' . $lng['changepassword']['old_password'] . '\''; +$lng['error']['newpassword'] = '\'' . $lng['changepassword']['new_password'] . '\''; +$lng['error']['newpasswordconfirm'] = '\'' . $lng['changepassword']['new_password_confirm'] . '\''; +$lng['error']['newpasswordconfirmerror'] = 'Het nieuwe wacthwoord en de bevestiging zijn niet gelijk'; +$lng['error']['myname'] = '\'' . $lng['customer']['name'] . '\''; +$lng['error']['myfirstname'] = '\'' . $lng['customer']['firstname'] . '\''; +$lng['error']['emailadd'] = '\'' . $lng['customer']['email'] . '\''; +$lng['error']['mydomain'] = '\'Domain\''; +$lng['error']['mydocumentroot'] = '\'Documentroot\''; +$lng['error']['loginnameexists'] = 'Loginnaam %s bestaat al'; +$lng['error']['emailiswrong'] = 'E-mail Adres %s bevat illegale karakters of is niet compleet'; +$lng['error']['loginnameiswrong'] = 'Loginnaame %s bevat illegale karakters'; +$lng['error']['userpathcombinationdupe'] = 'Combinatie van Gebruikersnaam en Pad bestaat reeds'; +$lng['error']['patherror'] = 'Generale Fout! pad kan niet leeg zijn'; +$lng['error']['errordocpathdupe'] = 'Optie voor pad %s bestaat reeds'; +$lng['error']['adduserfirst'] = 'Maak klant eerst aan, aub'; +$lng['error']['domainalreadyexists'] = 'Het domein %s is al aan een klant toegewezen'; +$lng['error']['nolanguageselect'] = 'Geen taal geselecteerd.'; +$lng['error']['nosubjectcreate'] = 'U moet een onderwerp ingeven voor dit e-mail sjabloon.'; +$lng['error']['nomailbodycreate'] = 'U moet een tekst ingeven voor dit e-mail sjabloon.'; +$lng['error']['templatenotfound'] = 'Sjabloon niet gevonden.'; +$lng['error']['alltemplatesdefined'] = 'U kunt niet meer sjablonen definieeren, alle talen worden al ondersteund.'; +$lng['error']['wwwnotallowed'] = 'www is niet toegestaan voor subdomeinen.'; +$lng['error']['subdomainiswrong'] = 'Het subdomein %s bevat illegale karakters.'; +$lng['error']['domaincantbeempty'] = 'De domeinnaam kan niet leeg zijn.'; +$lng['error']['domainexistalready'] = 'Het domein %s bestaads reeds.'; +$lng['error']['domainisaliasorothercustomer'] = 'Het geselecteerde alias domein verwijsd naar zichzelf of is van een andere gebruiker.'; +$lng['error']['emailexistalready'] = 'Het e-mail adres %s bestaat reeds.'; +$lng['error']['maindomainnonexist'] = 'Het hoofd-domein %s bestaat niet.'; +$lng['error']['destinationnonexist'] = 'Maak uw forwarder in het veld \'Destination\' alstublieft.'; +$lng['error']['destinationalreadyexistasmail'] = 'De forwarder naar %s bestaat reeds als actief e-mail adres.'; +$lng['error']['destinationalreadyexist'] = 'U heeft al een forwarder die verwijst naar %s .'; +$lng['error']['destinationiswrong'] = 'De forwarder naar %s bevat illegale karakter(s) of is niet compleet.'; +$lng['error']['domainname'] = $lng['domains']['domainname']; + +/** + * Questions + */ + +$lng['question']['question'] = 'Beveiligings vraag'; +$lng['question']['admin_customer_reallydelete'] = 'Weet u zeker dat u de klant %s wilt verwijderen? Dit kan niet ongedaan worden gemaakt!'; +$lng['question']['admin_domain_reallydelete'] = 'Weet u zeker dat u het domein %s wilt verwijderen?'; +$lng['question']['admin_domain_reallydisablesecuritysetting'] = 'Weet u echt heel zeker dat deze beveiligings instellingen wilt deactiveren (OpenBasedir en/of SafeMode)?'; +$lng['question']['admin_admin_reallydelete'] = 'Weet u zeker dat u de admin %s verwijderen wilt? Iedere klant en domein zal worden toegewezen aan de hoofd administrator.'; +$lng['question']['admin_template_reallydelete'] = 'Weet u zeker dat u het sjabloon \'%s\' verwijderen wilt?'; +$lng['question']['domains_reallydelete'] = 'Weet u zeker dat u het domein %s verwijderen wilt?'; +$lng['question']['email_reallydelete'] = 'Weet u zeker dat u het e-mail adres %s verwijderen wilt?'; +$lng['question']['email_reallydelete_account'] = 'Weet u zeker dat het e-mail account van %s verwijderen wilt?'; +$lng['question']['email_reallydelete_forwarder'] = 'Weet u zeker dat u de forwarder %s verwijderen wilt?'; +$lng['question']['extras_reallydelete'] = 'Weet u zeker dat u de map beveiliging voor de map %s verwijderen wilt?'; +$lng['question']['extras_reallydelete_pathoptions'] = 'Weet u zeker dat u de pad-opties voor %s verwijderen wilt?'; +$lng['question']['ftp_reallydelete'] = 'Weet u zeker dat u het FTP account %s verwijderen wilt?'; +$lng['question']['mysql_reallydelete'] = 'Weet u zeker dat u de database %s verwijderen wilt? Dit kan niet ongedaan gemaakt worden!'; +$lng['question']['admin_configs_reallyrebuild'] = 'Weet u zeker dat u de configuratie bestanden voor Apache en Bind opnieuw wilt opbouwen?'; + +/** + * Mails + */ + +$lng['mails']['pop_success']['mailbody'] = 'Hallo,\n\nUw mail account {EMAIL}\nis succesvol aangemaakt.\n\nDit is een automatisch verstuurde\ne-mail, beantwoord deze niet AUB!\n\nMet vriendelijke groet, het SysCP-Team'; +$lng['mails']['pop_success']['subject'] = 'Mail account succesvol aangemaakt'; +$lng['mails']['createcustomer']['mailbody'] = 'Hallo {FIRSTNAME} {NAME},\n\nhierbij uw account informatie:\n\nGebruikersnaam: {USERNAME}\nWachtwoord: {PASSWORD}\n\nMet vriendelijke groet,\nhet SysCP-Team'; +$lng['mails']['createcustomer']['subject'] = 'Account informatie'; + +/** + * Admin + */ + +$lng['admin']['overview'] = 'Overzicht'; +$lng['admin']['ressourcedetails'] = 'Gebruikte resources'; +$lng['admin']['systemdetails'] = 'Systeem Details'; +$lng['admin']['syscpdetails'] = 'SysCP Details'; +$lng['admin']['installedversion'] = 'Geinstalleerde Versie'; +$lng['admin']['latestversion'] = 'Laatste Versie'; +$lng['admin']['lookfornewversion']['clickhere'] = 'zoeken via webservice'; +$lng['admin']['lookfornewversion']['error'] = 'Fout tijdens lezen'; +$lng['admin']['resources'] = 'Resources'; +$lng['admin']['customer'] = 'Klant'; +$lng['admin']['customers'] = 'Klanten'; +$lng['admin']['customer_add'] = 'Maak klant'; +$lng['admin']['customer_edit'] = 'Bewerk klant'; +$lng['admin']['domains'] = 'Domeinen'; +$lng['admin']['domain_add'] = 'Maak domein'; +$lng['admin']['domain_edit'] = 'Bewerk domein'; +$lng['admin']['subdomainforemail'] = 'Subdomein als emaildomein'; +$lng['admin']['admin'] = 'Beheerder'; +$lng['admin']['admins'] = 'Beheerders'; +$lng['admin']['admin_add'] = 'Maak beheerder'; +$lng['admin']['admin_edit'] = 'Bewerk beheerder'; +$lng['admin']['customers_see_all'] = 'Kan alle klanten zien?'; +$lng['admin']['domains_see_all'] = 'Kan alle domeinen zien?'; +$lng['admin']['change_serversettings'] = 'Kan server instellingen aanpassen?'; +$lng['admin']['server'] = 'Server'; +$lng['admin']['serversettings'] = 'Instellingen'; +$lng['admin']['rebuildconf'] = 'Configuratie bestanden opnieuw aanmaken'; +$lng['admin']['stdsubdomain'] = 'Standaard subdomein'; +$lng['admin']['stdsubdomain_add'] = 'Maak standard subdomein'; +$lng['admin']['deactivated'] = 'Gedeactieveerd'; +$lng['admin']['deactivated_user'] = 'Gebruiker deactiveren'; +$lng['admin']['sendpassword'] = 'Verstuur wachtwoord'; +$lng['admin']['ownvhostsettings'] = 'Eigen vHost-Instellingen'; +$lng['admin']['configfiles']['serverconfiguration'] = 'Configuratie'; +$lng['admin']['configfiles']['files'] = 'Configuratiebestanden: Wijzig de volgende bestanden of maak ze aan met
    de volgende inhoud als u dit nog niet gedaan heeft.
    Let Op: Het MySQL-wachtwoord is niet aangepast vanwege beveiligings overwegingen.
    Vervang "MYSQL_PASSWORD" zelf. Als u uw MYSQl wachtwoord vergeten bent
    kunt u het terugvinden in "lib/userdata.inc.php".'; +$lng['admin']['configfiles']['commands'] = 'Commando\'s: Start de volgende commando\'s in een shell.'; +$lng['admin']['configfiles']['restart'] = 'Herstarten: Start de volgende commando\'s in een shell zodat de configuratie opnieuw geladen wordt.'; +$lng['admin']['templates']['templates'] = 'Sjablonen'; +$lng['admin']['templates']['template_add'] = 'Maak sjabloon'; +$lng['admin']['templates']['template_edit'] = 'Bewerk sjabloon'; +$lng['admin']['templates']['action'] = 'Actie'; +$lng['admin']['templates']['email'] = 'E-Mail'; +$lng['admin']['templates']['subject'] = 'Onderwerp'; +$lng['admin']['templates']['mailbody'] = 'Mail inhoud'; +$lng['admin']['templates']['createcustomer'] = 'Welkomst bericht voor nieuwe klanten'; +$lng['admin']['templates']['pop_success'] = 'Welkomst bericht voor e-mail nieuw account'; +$lng['admin']['templates']['template_replace_vars'] = 'Variabelen die aangepast worden in het sjabloon:'; +$lng['admin']['templates']['FIRSTNAME'] = 'Vervangen door de voornaam van de klant.'; +$lng['admin']['templates']['NAME'] = 'Vervangen door de naam van de klant.'; +$lng['admin']['templates']['USERNAME'] = 'Vervangen door de gebruikersnaam van de klant.'; +$lng['admin']['templates']['PASSWORD'] = 'Vervangen door het wachtwoord van de klant.'; +$lng['admin']['templates']['EMAIL'] = 'Vervangen door het adres van het POP3/IMAP account.'; + +/** + * Serversettings + */ + +$lng['serversettings']['session_timeout']['title'] = 'Sessie Timeout'; +$lng['serversettings']['session_timeout']['description'] = 'Hoe lang moet een gebruiker inactief zijn voor dat de sessie ongeldig wordt (seconden)?'; +$lng['serversettings']['accountprefix']['title'] = 'Klant Voorvoegsel'; +$lng['serversettings']['accountprefix']['description'] = 'Welk voorvoegsel moet een klant account hebben?'; +$lng['serversettings']['mysqlprefix']['title'] = 'SQL Voorvoegsel'; +$lng['serversettings']['mysqlprefix']['description'] = 'Welk voorvoegsel moet een mysql account hebben?'; +$lng['serversettings']['ftpprefix']['title'] = 'FTP Voorvoegsel'; +$lng['serversettings']['ftpprefix']['description'] = 'Welk voorvoegsel moet een FTP account hebben?'; +$lng['serversettings']['documentroot_prefix']['title'] = 'Document map'; +$lng['serversettings']['documentroot_prefix']['description'] = 'Waar zullen alle gegeven opgeslagen worden?'; +$lng['serversettings']['logfiles_directory']['title'] = 'Logfiles map'; +$lng['serversettings']['logfiles_directory']['description'] = 'Waar zullen alle log-file opgeslagen worden?'; +$lng['serversettings']['ipaddress']['title'] = 'IP-Adres'; +$lng['serversettings']['ipaddress']['description'] = 'Wat is het IP-adres van deze server?'; +$lng['serversettings']['hostname']['title'] = 'Hostnaam'; +$lng['serversettings']['hostname']['description'] = 'Wat is de hostnaam van deze server?'; +$lng['serversettings']['apachereload_command']['title'] = 'Apache reload commando'; +$lng['serversettings']['apachereload_command']['description'] = 'Wat is het commando op apache te herladen?'; +$lng['serversettings']['bindconf_directory']['title'] = 'Bind configuratie map'; +$lng['serversettings']['bindconf_directory']['description'] = 'Waar staan de bind configuratie bestanden?'; +$lng['serversettings']['bindreload_command']['title'] = 'Bind reload commando'; +$lng['serversettings']['bindreload_command']['description'] = 'Wat is het command om bind te herladen?'; +$lng['serversettings']['binddefaultzone']['title'] = 'Bind default zone'; +$lng['serversettings']['binddefaultzone']['description'] = 'Wat is de naam van de default zone?'; +$lng['serversettings']['vmail_uid']['title'] = 'Mails-Uid'; +$lng['serversettings']['vmail_uid']['description'] = 'Welk UserID moeten de e-mails hebben?'; +$lng['serversettings']['vmail_gid']['title'] = 'Mails-Gid'; +$lng['serversettings']['vmail_gid']['description'] = 'Welke GroupID moeten e-mails hebben?'; +$lng['serversettings']['vmail_homedir']['title'] = 'Mails-Homedir'; +$lng['serversettings']['vmail_homedir']['description'] = 'Waar moeten alle e-mail opgeslagen worden?'; +$lng['serversettings']['adminmail']['title'] = 'Afzender'; +$lng['serversettings']['adminmail']['description'] = 'Wat is de afzender voor e-mail verstuurd vanuit het Panel?'; +$lng['serversettings']['phpmyadmin_url']['title'] = 'phpMyAdmin URL'; +$lng['serversettings']['phpmyadmin_url']['description'] = 'Wat is de URL die verwijst naar phpMyAdmin? (moet beginnen met http://)'; +$lng['serversettings']['webmail_url']['title'] = 'WebMail URL'; +$lng['serversettings']['webmail_url']['description'] = 'Wat is de URL die verwijst naar WebMail? (moet beginnen met http://)'; +$lng['serversettings']['webftp_url']['title'] = 'WebFTP URL'; +$lng['serversettings']['webftp_url']['description'] = 'Wat is de URL die verwijst naar WebFTP? (moet beginnen met http://)'; +$lng['serversettings']['language']['description'] = 'Wat is uw standaard server taal?'; +$lng['serversettings']['maxloginattempts']['title'] = 'Maximaal aantal inlog pogingen'; +$lng['serversettings']['maxloginattempts']['description'] = 'Maximaam aantal inlog pogingen voor het account gedeactiveerd wordt.'; +$lng['serversettings']['deactivatetime']['title'] = 'Deactivatie Tijd'; +$lng['serversettings']['deactivatetime']['description'] = 'Tijd (in seconden) dat een account gedeactiveerd word na te veel inlogpogingen.'; +$lng['serversettings']['pathedit']['title'] = 'Manier van Pad ingeven'; +$lng['serversettings']['pathedit']['description'] = 'Moet het pad geselecteerd worden met een \'dropdown\' menu of met een invoerveld?'; + +/** + * CHANGED BETWEEN 1.2.12 and 1.2.13 + */ + +$lng['mysql']['description'] = 'Hier kunt u MySQL-Databases maken en wijzigen.
    De wijzigingen worden direct gemaakt en de database kan direkt gebruikt worden.
    In het menu dat links staat vind u de tool phpMyAdmin welke u kunt gebruiken om uw database makkelijk te beheren.

    Om gebruikt te maken van uw database in uw eigen php programmas kunt u de volgende instellingen gebruiken: (De gegeven in italics moeten aangepast worden in wat u ingevoerd heeft!)
    Hostnaam:
    Gebruikersnaam: Databasenaam
    Wachtwoord: het wachtwoord dat u gekozen heeft
    Database: Databasenaam'; + +/** + * ADDED BETWEEN 1.2.12 and 1.2.13 + */ + +$lng['admin']['cronlastrun'] = 'Laatste Cron-run'; +$lng['serversettings']['paging']['title'] = 'Vermeldingen per pagina'; +$lng['serversettings']['paging']['description'] = 'Hoeveel vermeldingen er getoond moeten worden per pagina? (0 = alles laten zien)'; +$lng['error']['ipstillhasdomains'] = 'De IP/Port combinatie die u verwijderen wilt heeft nog domeinen toegewezen, wijs deze opnieuw to aan andere IP/Poort combinaties voordat u deze IP/Poort combinatie verwijderd.'; +$lng['error']['cantdeletedefaultip'] = 'U kunt de standaard reseller IP/Poort combinatie niet verwijderen, maak eerst een andere IP/Port combinatie standaard voor reseller voor dat u deze IP/Port combinatie verwijderd.'; +$lng['error']['cantdeletesystemip'] = 'U kunt het laatste IP/Poort combinatie van het systeem niet verwijderen, maak eerste een andere IP/Port combinatie aan voor het systeem of wijzig het ipadres van het systeem.'; +$lng['error']['myipaddress'] = '\'IP\''; +$lng['error']['myport'] = '\'Poort\''; +$lng['error']['myipdefault'] = 'U moet een IP/Poort combinatie selecteren die standaard moet worden.'; +$lng['error']['myipnotdouble'] = 'Deze IP/Poort combinatie bestaat reeds.'; +$lng['question']['admin_ip_reallydelete'] = 'Weet u zeker dat u het IP adres %s verwijderen wilt?'; +$lng['admin']['ipsandports']['ipsandports'] = 'IP-adressen en Poorten'; +$lng['admin']['ipsandports']['add'] = 'Maak IP/Poort'; +$lng['admin']['ipsandports']['edit'] = 'Bewerk IP/Poort'; +$lng['admin']['ipsandports']['ipandport'] = 'IP/Poort'; +$lng['admin']['ipsandports']['ip'] = 'IP'; +$lng['admin']['ipsandports']['port'] = 'Poort'; + +// ADDED IN 1.2.13-rc3 + +$lng['error']['cantchangesystemip'] = 'U kunt het laatste system IP niet wijzigen, maak eerst een nieuwe IP/Poort cominatie aan of wijzig het ip-adres van het systeem.'; +$lng['question']['admin_domain_reallydocrootoutofcustomerroot'] = 'Weet u zeker dat u de document root voor dit domein niet in de klant-root van de klant wil hebben?'; + +// ADDED IN 1.2.14-rc1 + +$lng['admin']['memorylimitdisabled'] = 'Gedeactiveerd'; +$lng['domain']['openbasedirpath'] = 'OpenBasedir-pad'; +$lng['domain']['docroot'] = 'Pad van bovenstaand veld'; +$lng['domain']['homedir'] = 'Home directory'; +$lng['admin']['valuemandatory'] = 'Deze waarde is verplicht'; +$lng['admin']['valuemandatorycompany'] = 'De waarde "naam" en "voornaam" of "bedrijf" moet ingevoerd worden'; +$lng['menue']['main']['username'] = 'Ingelogged als: '; +$lng['panel']['urloverridespath'] = 'URL (Vervangd path)'; +$lng['panel']['pathorurl'] = 'Pad of URL'; +$lng['error']['sessiontimeoutiswrong'] = 'Alleen nummerieke "Session Timeout" zijn toegestaan.'; +$lng['error']['maxloginattemptsiswrong'] = 'Alleen nummerieke "Maximaal aantal inlogpogingen" zijn toegestaan.'; +$lng['error']['deactivatetimiswrong'] = 'Allee nummerieke "Deactivatie Tijd" zijn toegestaan.'; +$lng['error']['accountprefixiswrong'] = 'Het "Klan voorvoegsel" is verkeerd.'; +$lng['error']['mysqlprefixiswrong'] = 'Het "SQL voorvoegsel" is verkeerd.'; +$lng['error']['ftpprefixiswrong'] = 'Het "FTP voorvoegsel" is verkeerd.'; +$lng['error']['ipiswrong'] = 'Het "IP-Adres" is verkeerd. Alleen een geldig ip-adres is toegestaan.'; +$lng['error']['vmailuidiswrong'] = 'Het "Mails-uid" is verkeerd. Alleen een nummeriek UID is toegestaan.'; +$lng['error']['vmailgidiswrong'] = 'Het "Mails-gid" is verkeerd. Alleen een nummeriek GID is toegestaan.'; +$lng['error']['adminmailiswrong'] = 'Het "Afzender-adres" is verkeerd. Alleen geldige e-mail adressen zijn toegestaan.'; +$lng['error']['pagingiswrong'] = 'Het aantal "Vermeldingen per pagina" is verkeerd. Alleen nummerieke karakters zijn toegestaan.'; +$lng['error']['phpmyadminiswrong'] = 'De phpMyAdmin-link is niet een geldige link.'; +$lng['error']['webmailiswrong'] = 'De WebMail-link is niet een geldige link.'; +$lng['error']['webftpiswrong'] = 'De WebFTP-link is niet een geldige link.'; +$lng['domains']['hasaliasdomains'] = 'Heeft alias domein(en)'; +$lng['serversettings']['defaultip']['title'] = 'Standaard IP/Poort'; +$lng['serversettings']['defaultip']['description'] = 'Wat is de standaard IP/Poort combinatie?'; +$lng['domains']['statstics'] = 'Gebruiks Statistieken'; +$lng['panel']['ascending'] = 'oplopend'; +$lng['panel']['decending'] = 'aflopend'; +$lng['panel']['search'] = 'Zoeken'; +$lng['panel']['used'] = 'gebruikt'; + +// ADDED IN 1.2.14-rc3 + +$lng['panel']['translator'] = 'Vertaler'; + +// ADDED IN 1.2.14-rc4 + +$lng['error']['stringformaterror'] = 'De waarde voor het veld "%s" is niet in het verwachte formaat.'; + +// ADDED IN 1.2.15-rc1 + +$lng['admin']['serversoftware'] = 'Serversoftware'; +$lng['admin']['phpversion'] = 'PHP-Versie'; +$lng['admin']['phpmemorylimit'] = 'PHP-Geheugen-Limiet'; +$lng['admin']['mysqlserverversion'] = 'MySQL Server Versie'; +$lng['admin']['mysqlclientversion'] = 'MySQL Client Versie'; +$lng['admin']['webserverinterface'] = 'Webserver Interface'; +$lng['domains']['isassigneddomain'] = 'Is toegewezen domein'; +$lng['serversettings']['phpappendopenbasedir']['title'] = 'Pad wat toegevoegd word aan OpenBasedir'; +$lng['serversettings']['phpappendopenbasedir']['description'] = 'Deze paden (gescheiden door dubbele punten) zullen worden toegevoegd aan het OpenBasedir-statement in iedere vhost-container.'; + +// CHANGED IN 1.2.15-rc1 + +$lng['error']['loginnameissystemaccount'] = 'U kunt geen accounts aanmaken die gelijk zijn aan systeem accounts (bijvoorbeeld beginnend met "%s"). Kies een andere accountnaam AUB.'; + +?> \ No newline at end of file diff --git a/lng/english.lng.php b/lng/english.lng.php new file mode 100644 index 0000000000..564704bc00 --- /dev/null +++ b/lng/english.lng.php @@ -0,0 +1,1247 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Language + * @version $Id: english.lng.php 2724 2009-06-07 14:18:02Z flo $ + */ + +/** + * Global + */ + +$lng['translator'] = ''; +$lng['panel']['edit'] = 'edit'; +$lng['panel']['delete'] = 'delete'; +$lng['panel']['create'] = 'create'; +$lng['panel']['save'] = 'save'; +$lng['panel']['yes'] = 'yes'; +$lng['panel']['no'] = 'no'; +$lng['panel']['emptyfornochanges'] = 'empty for no changes'; +$lng['panel']['emptyfordefault'] = 'empty for defaults'; +$lng['panel']['path'] = 'Path'; +$lng['panel']['toggle'] = 'Toggle'; +$lng['panel']['next'] = 'next'; +$lng['panel']['dirsmissing'] = 'Can not find or read the directory!'; + +/** + * Login + */ + +$lng['login']['username'] = 'Username'; +$lng['login']['password'] = 'Password'; +$lng['login']['language'] = 'Language'; +$lng['login']['login'] = 'Login'; +$lng['login']['logout'] = 'Logout'; +$lng['login']['profile_lng'] = 'Profile language'; + +/** + * Customer + */ + +$lng['customer']['documentroot'] = 'Home directory'; +$lng['customer']['name'] = 'Name'; +$lng['customer']['firstname'] = 'First name'; +$lng['customer']['company'] = 'Company'; +$lng['customer']['street'] = 'Street'; +$lng['customer']['zipcode'] = 'Zipcode'; +$lng['customer']['city'] = 'City'; +$lng['customer']['phone'] = 'Phone'; +$lng['customer']['fax'] = 'Fax'; +$lng['customer']['email'] = 'Email'; +$lng['customer']['customernumber'] = 'Customer ID'; +$lng['customer']['diskspace'] = 'Webspace (MB)'; +$lng['customer']['traffic'] = 'Traffic (GB)'; +$lng['customer']['mysqls'] = 'MySQL-Databases'; +$lng['customer']['emails'] = 'E-mail-Addresses'; +$lng['customer']['accounts'] = 'E-mail-Accounts'; +$lng['customer']['forwarders'] = 'E-mail-Forwarders'; +$lng['customer']['ftps'] = 'FTP-Accounts'; +$lng['customer']['subdomains'] = 'Sub-Domain'; +$lng['customer']['domains'] = 'Domain'; +$lng['customer']['unlimited'] = 'unlimited'; + +/** + * Customermenue + */ + +$lng['menue']['main']['main'] = 'Main'; +$lng['menue']['main']['changepassword'] = 'Change password'; +$lng['menue']['main']['changelanguage'] = 'Change language'; +$lng['menue']['email']['email'] = 'E-mail'; +$lng['menue']['email']['emails'] = 'Addresses'; +$lng['menue']['email']['webmail'] = 'WebMail'; +$lng['menue']['mysql']['mysql'] = 'MySQL'; +$lng['menue']['mysql']['databases'] = 'Databases'; +$lng['menue']['mysql']['phpmyadmin'] = 'phpMyAdmin'; +$lng['menue']['domains']['domains'] = 'Domains'; +$lng['menue']['domains']['settings'] = 'Settings'; +$lng['menue']['ftp']['ftp'] = 'FTP'; +$lng['menue']['ftp']['accounts'] = 'Accounts'; +$lng['menue']['ftp']['webftp'] = 'WebFTP'; +$lng['menue']['extras']['extras'] = 'Extras'; +$lng['menue']['extras']['directoryprotection'] = 'Directory protection'; +$lng['menue']['extras']['pathoptions'] = 'path options'; + +/** + * Index + */ + +$lng['index']['customerdetails'] = 'Customer Details'; +$lng['index']['accountdetails'] = 'Account Details'; + +/** + * Change Password + */ + +$lng['changepassword']['old_password'] = 'Old password'; +$lng['changepassword']['new_password'] = 'New password'; +$lng['changepassword']['new_password_confirm'] = 'New password (confirm)'; +$lng['changepassword']['new_password_ifnotempty'] = 'New password (empty = no change)'; +$lng['changepassword']['also_change_ftp'] = ' also change password of the main FTP account'; + +/** + * Domains + */ + +$lng['domains']['description'] = 'Here you can create (sub-)domains and change their paths.
    The system will need some time to apply the new settings after every change.'; +$lng['domains']['domainsettings'] = 'Domain settings'; +$lng['domains']['domainname'] = 'Domain name'; +$lng['domains']['subdomain_add'] = 'Create subdomain'; +$lng['domains']['subdomain_edit'] = 'Edit (sub)domain'; +$lng['domains']['wildcarddomain'] = 'Create as wildcarddomain?'; +$lng['domains']['aliasdomain'] = 'Alias for domain'; +$lng['domains']['noaliasdomain'] = 'No alias domain'; + +/** + * E-mails + */ + +$lng['emails']['description'] = 'Here you can create and change your e-mail addresses.
    An account is like your letterbox in front of your house. If someone sends you an email, it will be dropped into the account.

    To download your emails use the following settings in your mailprogram: (The data in italics has to be changed to the equivalents you typed in!)
    Hostname: Domainname
    Username: Account name / e-mail address
    Password: the password you\'ve chosen'; +$lng['emails']['emailaddress'] = 'E-mail-address'; +$lng['emails']['emails_add'] = 'Create e-mail-address'; +$lng['emails']['emails_edit'] = 'Edit e-mail-address'; +$lng['emails']['catchall'] = 'Catchall'; +$lng['emails']['iscatchall'] = 'Define as catchall-address?'; +$lng['emails']['account'] = 'Account'; +$lng['emails']['account_add'] = 'Create account'; +$lng['emails']['account_delete'] = 'Delete account'; +$lng['emails']['from'] = 'Source'; +$lng['emails']['to'] = 'Destination'; +$lng['emails']['forwarders'] = 'Forwarders'; +$lng['emails']['forwarder_add'] = 'Create forwarder'; + +/** + * FTP + */ + +$lng['ftp']['description'] = 'Here you can create and change your FTP accounts.
    The changes are made instantly and the accounts can be used immediately.'; +$lng['ftp']['account_add'] = 'Create Account'; + +/** + * MySQL + */ + +$lng['mysql']['databasename'] = 'user/database name'; +$lng['mysql']['databasedescription'] = 'database description'; +$lng['mysql']['database_create'] = 'Create database'; + +/** + * Extras + */ + +$lng['extras']['description'] = 'Here you can add some extras, for example directory protection.
    The system will need some time to apply the new settings after every change.'; +$lng['extras']['directoryprotection_add'] = 'Add directory protection'; +$lng['extras']['view_directory'] = 'display directory content'; +$lng['extras']['pathoptions_add'] = 'add path options'; +$lng['extras']['directory_browsing'] = 'directory content browsing'; +$lng['extras']['pathoptions_edit'] = 'edit path options'; +$lng['extras']['error404path'] = '404'; +$lng['extras']['error403path'] = '403'; +$lng['extras']['error500path'] = '500'; +$lng['extras']['error401path'] = '401'; +$lng['extras']['errordocument404path'] = 'URL to ErrorDocument 404'; +$lng['extras']['errordocument403path'] = 'URL to ErrorDocument 403'; +$lng['extras']['errordocument500path'] = 'URL to ErrorDocument 500'; +$lng['extras']['errordocument401path'] = 'URL to ErrorDocument 401'; + +/** + * Errors + */ + +$lng['error']['error'] = 'Error'; +$lng['error']['directorymustexist'] = 'The directory %s must exist. Please create it with your FTP client.'; +$lng['error']['filemustexist'] = 'The file %s must exist.'; +$lng['error']['allresourcesused'] = 'You have already used all of your resources.'; +$lng['error']['domains_cantdeletemaindomain'] = 'You cannot delete a domain which is used as an email-domain.'; +$lng['error']['domains_canteditdomain'] = 'You cannot edit this domain. It has been disabled by the admin.'; +$lng['error']['domains_cantdeletedomainwithemail'] = 'You cannot delete a domain which is used as an email-domain. Delete all email addresses first.'; +$lng['error']['firstdeleteallsubdomains'] = 'You have to delete all Subdomains first before you can create a wildcard domain.'; +$lng['error']['youhavealreadyacatchallforthisdomain'] = 'You have already defined a catchall for this domain.'; +$lng['error']['ftp_cantdeletemainaccount'] = 'You cannot delete your main FTP account'; +$lng['error']['login'] = 'The username or password you typed in is wrong. Please try it again!'; +$lng['error']['login_blocked'] = 'This account has been suspended because of too many login errors.
    Please try again in ' . $settings['login']['deactivatetime'] . ' seconds.'; +$lng['error']['notallreqfieldsorerrors'] = 'You have not filled in all or filled in some fields incorrectly.'; +$lng['error']['oldpasswordnotcorrect'] = 'The old password is not correct.'; +$lng['error']['youcantallocatemorethanyouhave'] = 'You cannot allocate more resources than you own for yourself.'; +$lng['error']['mustbeurl'] = 'You have not typed a valid or complete url (e.g. http://somedomain.com/error404.htm)'; +$lng['error']['invalidpath'] = 'You have not chosen a valid url (maybe problems with the dirlisting?)'; +$lng['error']['stringisempty'] = 'Missing Input in Field'; +$lng['error']['stringiswrong'] = 'Wrong Input in Field'; +$lng['error']['myloginname'] = '\'' . $lng['login']['username'] . '\''; +$lng['error']['mypassword'] = '\'' . $lng['login']['password'] . '\''; +$lng['error']['oldpassword'] = '\'' . $lng['changepassword']['old_password'] . '\''; +$lng['error']['newpassword'] = '\'' . $lng['changepassword']['new_password'] . '\''; +$lng['error']['newpasswordconfirm'] = '\'' . $lng['changepassword']['new_password_confirm'] . '\''; +$lng['error']['newpasswordconfirmerror'] = 'New password and confirmation does not match'; +$lng['error']['myname'] = '\'' . $lng['customer']['name'] . '\''; +$lng['error']['myfirstname'] = '\'' . $lng['customer']['firstname'] . '\''; +$lng['error']['emailadd'] = '\'' . $lng['customer']['email'] . '\''; +$lng['error']['mydomain'] = '\'Domain\''; +$lng['error']['mydocumentroot'] = '\'Documentroot\''; +$lng['error']['loginnameexists'] = 'Login-Name %s already exists'; +$lng['error']['emailiswrong'] = 'E-mail-Address %s contains invalid characters or is incomplete'; +$lng['error']['loginnameiswrong'] = 'Login-Name %s contains invalid characters'; +$lng['error']['userpathcombinationdupe'] = 'Combination of Username and Path already exists'; +$lng['error']['patherror'] = 'General Error! path cannot be empty'; +$lng['error']['errordocpathdupe'] = 'Option for path %s already exists'; +$lng['error']['adduserfirst'] = 'Please create a customer first'; +$lng['error']['domainalreadyexists'] = 'The domain %s is already assigned to a customer'; +$lng['error']['nolanguageselect'] = 'No language selected.'; +$lng['error']['nosubjectcreate'] = 'You must define a topic for this mail template.'; +$lng['error']['nomailbodycreate'] = 'You must define a Mail-Text for this mail template.'; +$lng['error']['templatenotfound'] = 'Template was not found.'; +$lng['error']['alltemplatesdefined'] = 'You cant define more templates, all languages are supported already.'; +$lng['error']['wwwnotallowed'] = 'www is not allowed for subdomains.'; +$lng['error']['subdomainiswrong'] = 'The subdomain %s contains invalid characters.'; +$lng['error']['domaincantbeempty'] = 'The domain-name can not be empty.'; +$lng['error']['domainexistalready'] = 'The domain %s already exists.'; +$lng['error']['domainisaliasorothercustomer'] = 'The selected alias domain is either itself an alias domain or belongs to another customer.'; +$lng['error']['emailexistalready'] = 'The e-mail-Address %s already exists.'; +$lng['error']['maindomainnonexist'] = 'The main-domain %s does not exist.'; +$lng['error']['destinationnonexist'] = 'Please create your forwarder in the field \'Destination\'.'; +$lng['error']['destinationalreadyexistasmail'] = 'The forwarder to %s already exists as active EMail-Address.'; +$lng['error']['destinationalreadyexist'] = 'You have already defined a forwarder to %s .'; +$lng['error']['destinationiswrong'] = 'The forwarder %s contains invalid character(s) or is incomplete.'; +$lng['error']['domainname'] = $lng['domains']['domainname']; + +/** + * Questions + */ + +$lng['question']['question'] = 'Security question'; +$lng['question']['admin_customer_reallydelete'] = 'Do you really want to delete the customer %s? This cannot be undone!'; +$lng['question']['admin_domain_reallydelete'] = 'Do you really want to delete the domain %s?'; +$lng['question']['admin_domain_reallydisablesecuritysetting'] = 'Do you really want to deactivate these Security settings (OpenBasedir and/or SafeMode)?'; +$lng['question']['admin_admin_reallydelete'] = 'Do you really want to delete the admin %s? Every customer and domain will be reassigned to your account.'; +$lng['question']['admin_template_reallydelete'] = 'Do you really want to delete the template \'%s\'?'; +$lng['question']['domains_reallydelete'] = 'Do you really want to delete the domain %s?'; +$lng['question']['email_reallydelete'] = 'Do you really want to delete the email-address %s?'; +$lng['question']['email_reallydelete_account'] = 'Do you really want to delete the email-account of %s?'; +$lng['question']['email_reallydelete_forwarder'] = 'Do you really want to delete the forwarder %s?'; +$lng['question']['extras_reallydelete'] = 'Do you really want to delete the directory protection for %s?'; +$lng['question']['extras_reallydelete_pathoptions'] = 'Do you really want to delete the path options for %s?'; +$lng['question']['ftp_reallydelete'] = 'Do you really want to delete the FTP account %s?'; +$lng['question']['mysql_reallydelete'] = 'Do you really want to delete the database %s? This cannot be undone!'; +$lng['question']['admin_configs_reallyrebuild'] = 'Do you really want to rebuild your apache and bind config files?'; + +/** + * Mails + */ + +$lng['mails']['pop_success']['mailbody'] = 'Hello,\n\nyour Mail account {EMAIL}\nwas set up successfully.\n\nThis is an automatically created\ne-mail, please do not answer!\n\nYours sincerely, the SysCP-Team'; +$lng['mails']['pop_success']['subject'] = 'Mail account set up successfully'; +$lng['mails']['createcustomer']['mailbody'] = 'Hello {FIRSTNAME} {NAME},\n\nhere is your account information:\n\nUsername: {USERNAME}\nPassword: {PASSWORD}\n\nThank you,\nthe SysCP-Team'; +$lng['mails']['createcustomer']['subject'] = 'Account information'; + +/** + * Admin + */ + +$lng['admin']['overview'] = 'Overview'; +$lng['admin']['ressourcedetails'] = 'Used resources'; +$lng['admin']['systemdetails'] = 'System Details'; +$lng['admin']['syscpdetails'] = 'SysCP Details'; +$lng['admin']['installedversion'] = 'Installed version'; +$lng['admin']['latestversion'] = 'Latest version'; +$lng['admin']['lookfornewversion']['clickhere'] = 'search via webservice'; +$lng['admin']['lookfornewversion']['error'] = 'Error while reading'; +$lng['admin']['resources'] = 'Resources'; +$lng['admin']['customer'] = 'Customer'; +$lng['admin']['customers'] = 'Customers'; +$lng['admin']['customer_add'] = 'Create customer'; +$lng['admin']['customer_edit'] = 'Edit customer'; +$lng['admin']['domains'] = 'Domains'; +$lng['admin']['domain_add'] = 'Create domain'; +$lng['admin']['domain_edit'] = 'Edit domain'; +$lng['admin']['subdomainforemail'] = 'Subdomains as emaildomains'; +$lng['admin']['admin'] = 'Admin'; +$lng['admin']['admins'] = 'Admins'; +$lng['admin']['admin_add'] = 'Create admin'; +$lng['admin']['admin_edit'] = 'Edit admin'; +$lng['admin']['customers_see_all'] = 'Can see all customers?'; +$lng['admin']['domains_see_all'] = 'Can see all domains?'; +$lng['admin']['change_serversettings'] = 'Can change server settings?'; +$lng['admin']['server'] = 'Server'; +$lng['admin']['serversettings'] = 'Settings'; +$lng['admin']['rebuildconf'] = 'Rebuild Config Files'; +$lng['admin']['stdsubdomain'] = 'Standard subdomain'; +$lng['admin']['stdsubdomain_add'] = 'Create standard subdomain'; +$lng['admin']['phpenabled'] = 'PHP enabled'; +$lng['admin']['deactivated'] = 'Deactivated'; +$lng['admin']['deactivated_user'] = 'Deactivate User'; +$lng['admin']['sendpassword'] = 'Send password'; +$lng['admin']['ownvhostsettings'] = 'Own vHost-Settings'; +$lng['admin']['configfiles']['serverconfiguration'] = 'Configuration'; +$lng['admin']['configfiles']['files'] = 'Configfiles: Please change the following files or create them with
    the following content if they do not exist.
    Please Note: The MySQL-password has not been replaced for security reasons.
    Please replace "MYSQL_PASSWORD" on your own. If you forgot your MySQL-password
    you\'ll find it in "lib/userdata.inc.php".'; +$lng['admin']['configfiles']['commands'] = 'Commands: Please execute the following commands in a shell.'; +$lng['admin']['configfiles']['restart'] = 'Restart: Please execute the following commands in a shell in order to reload the new configuration.'; +$lng['admin']['templates']['templates'] = 'E-Mail-templates'; +$lng['admin']['templates']['template_add'] = 'Add template'; +$lng['admin']['templates']['template_edit'] = 'Edit template'; +$lng['admin']['templates']['action'] = 'Action'; +$lng['admin']['templates']['email'] = 'E-Mail- & Filetemplates'; +$lng['admin']['templates']['subject'] = 'Subject'; +$lng['admin']['templates']['mailbody'] = 'Mail body'; +$lng['admin']['templates']['createcustomer'] = 'Welcome mail for new customers'; +$lng['admin']['templates']['pop_success'] = 'Welcome mail for new email accounts'; +$lng['admin']['templates']['template_replace_vars'] = 'Variables to be replaced in the template:'; +$lng['admin']['templates']['FIRSTNAME'] = 'Replaced with the customers firstname.'; +$lng['admin']['templates']['NAME'] = 'Replaced with the customers name.'; +$lng['admin']['templates']['USERNAME'] = 'Replaced with the customers account username.'; +$lng['admin']['templates']['PASSWORD'] = 'Replaced with the customers account password.'; +$lng['admin']['templates']['EMAIL'] = 'Replaced with the address of the POP3/IMAP account.'; +$lng['admin']['webserver'] = 'Webserver'; + +/** + * Serversettings + */ + +$lng['serversettings']['session_timeout']['title'] = 'Session Timeout'; +$lng['serversettings']['session_timeout']['description'] = 'How long does a user have to be inactive before a session gets invalid (seconds)?'; +$lng['serversettings']['accountprefix']['title'] = 'Customer prefix'; +$lng['serversettings']['accountprefix']['description'] = 'Which prefix should customer accounts have?'; +$lng['serversettings']['mysqlprefix']['title'] = 'SQL Prefix'; +$lng['serversettings']['mysqlprefix']['description'] = 'Which prefix should mysql accounts have?'; +$lng['serversettings']['ftpprefix']['title'] = 'FTP Prefix'; +$lng['serversettings']['ftpprefix']['description'] = 'Which prefix should ftp accounts have?'; +$lng['serversettings']['documentroot_prefix']['title'] = 'Home directory'; +$lng['serversettings']['documentroot_prefix']['description'] = 'Where should all home directories be stored?'; +$lng['serversettings']['logfiles_directory']['title'] = 'Logfiles directory'; +$lng['serversettings']['logfiles_directory']['description'] = 'Where should all log files be stored?'; +$lng['serversettings']['ipaddress']['title'] = 'IP-Address'; +$lng['serversettings']['ipaddress']['description'] = 'What\'s the IP-address of this server?'; +$lng['serversettings']['hostname']['title'] = 'Hostname'; +$lng['serversettings']['hostname']['description'] = 'What\'s the Hostname of this server?'; +$lng['serversettings']['apachereload_command']['title'] = 'Apache reload command'; +$lng['serversettings']['apachereload_command']['description'] = 'What\'s the apache command to reload apache configfiles?'; +$lng['serversettings']['bindconf_directory']['title'] = 'Bind config directory'; +$lng['serversettings']['bindconf_directory']['description'] = 'Where should bind configfiles be saved?'; +$lng['serversettings']['bindreload_command']['title'] = 'Bind reload command'; +$lng['serversettings']['bindreload_command']['description'] = 'What\'s the bind command to reload bind configfiles?'; +$lng['serversettings']['binddefaultzone']['title'] = 'Bind default zone'; +$lng['serversettings']['binddefaultzone']['description'] = 'What\'s the name of the default zone?'; +$lng['serversettings']['vmail_uid']['title'] = 'Mails-UID'; +$lng['serversettings']['vmail_uid']['description'] = 'Which UserID should mails have?'; +$lng['serversettings']['vmail_gid']['title'] = 'Mails-GID'; +$lng['serversettings']['vmail_gid']['description'] = 'Which GroupID should mails have?'; +$lng['serversettings']['vmail_homedir']['title'] = 'Mails-Homedir'; +$lng['serversettings']['vmail_homedir']['description'] = 'Where should all mails be stored?'; +$lng['serversettings']['adminmail']['title'] = 'Sender'; +$lng['serversettings']['adminmail']['description'] = 'What\'s the sender address for emails sent from the Panel?'; +$lng['serversettings']['phpmyadmin_url']['title'] = 'phpMyAdmin URL'; +$lng['serversettings']['phpmyadmin_url']['description'] = 'What\'s the URL to phpMyAdmin? (has to start with http(s)://)'; +$lng['serversettings']['webmail_url']['title'] = 'WebMail URL'; +$lng['serversettings']['webmail_url']['description'] = 'What\'s the URL to WebMail? (has to start with http(s)://)'; +$lng['serversettings']['webftp_url']['title'] = 'WebFTP URL'; +$lng['serversettings']['webftp_url']['description'] = 'What\'s the URL to WebFTP? (has to start with http(s)://)'; +$lng['serversettings']['language']['description'] = 'What\'s your standard server language?'; +$lng['serversettings']['maxloginattempts']['title'] = 'Max Login Attempts'; +$lng['serversettings']['maxloginattempts']['description'] = 'Maximum login attempts after which the account gets deactivated.'; +$lng['serversettings']['deactivatetime']['title'] = 'Deactivate Time'; +$lng['serversettings']['deactivatetime']['description'] = 'Time (sec.) an account gets deactivated after too many login tries.'; +$lng['serversettings']['pathedit']['title'] = 'Type of path input'; +$lng['serversettings']['pathedit']['description'] = 'Should a path be selected by a dropdown menu or by an input field?'; +$lng['serversettings']['nameservers']['title'] = 'Nameservers'; +$lng['serversettings']['nameservers']['description'] = 'A comma separated list containing the hostnames of all nameservers. The first one will be the primary one.'; +$lng['serversettings']['mxservers']['title'] = 'MX servers'; +$lng['serversettings']['mxservers']['description'] = 'A comma seperated list containing a pair of a number and a hostname separated by whitespace (e.g. \'10 mx.example.com\') containing the mx servers.'; + +/** + * CHANGED BETWEEN 1.2.12 and 1.2.13 + */ + +$lng['mysql']['description'] = 'Here you can create and change your MySQL-Databases.
    The changes are made instantly and the database can be used immediately.
    At the menu on the left side you find the tool phpMyAdmin with which you can easily administer your database.

    To use your databases in your own php-scripts use the following settings: (The data in italics have to be changed into the equivalents you typed in!)
    Hostname:
    Username: Databasename
    Password: the password you\'ve chosen
    Database: Databasename'; + +/** + * ADDED BETWEEN 1.2.12 and 1.2.13 + */ + +$lng['admin']['cronlastrun'] = 'Last generating of configfiles'; +$lng['serversettings']['paging']['title'] = 'Entries per page'; +$lng['serversettings']['paging']['description'] = 'How many entries shall be shown on one page? (0 = disable paging)'; +$lng['error']['ipstillhasdomains'] = 'The IP/Port combination you want to delete still has domains assigned to it, please reassign those to other IP/Port combinations before deleting this IP/Port combination.'; +$lng['error']['cantdeletedefaultip'] = 'You cannot delete the default reseller IP/Port combination, please make another IP/Port combination default for resellers before deleting this IP/Port combination.'; +$lng['error']['cantdeletesystemip'] = 'You cannot delete the last system IP, either create a new IP/Port combination for the system IP or change the system IP.'; +$lng['error']['myipaddress'] = '\'IP\''; +$lng['error']['myport'] = '\'Port\''; +$lng['error']['myipdefault'] = 'You need to select an IP/Port combination that should become default.'; +$lng['error']['myipnotdouble'] = 'This IP/Port combination already exists.'; +$lng['error']['admin_domain_emailsystemhostname'] = 'Sorry. You can not use the Server Hostname as email domain'; +$lng['question']['admin_ip_reallydelete'] = 'Do you really want to delete the IP address %s?'; +$lng['admin']['ipsandports']['ipsandports'] = 'IPs and Ports'; +$lng['admin']['ipsandports']['add'] = 'Add IP/Port'; +$lng['admin']['ipsandports']['edit'] = 'Edit IP/Port'; +$lng['admin']['ipsandports']['ipandport'] = 'IP/Port'; +$lng['admin']['ipsandports']['ip'] = 'IP'; +$lng['admin']['ipsandports']['port'] = 'Port'; + +// ADDED IN 1.2.13-rc3 + +$lng['error']['cantchangesystemip'] = 'You cannot change the last system IP, either create another new IP/Port combination for the system IP or change the system IP.'; +$lng['question']['admin_domain_reallydocrootoutofcustomerroot'] = 'Are you sure, you want the document root for this domain, not being within the customer root of the customer?'; + +// ADDED IN 1.2.14-rc1 + +$lng['admin']['memorylimitdisabled'] = 'Disabled'; +$lng['domain']['openbasedirpath'] = 'OpenBasedir-path'; +$lng['domain']['docroot'] = 'Path from field above'; +$lng['domain']['homedir'] = 'Home directory'; +$lng['admin']['valuemandatory'] = 'This value is mandatory'; +$lng['admin']['valuemandatorycompany'] = 'Either "name" and "firstname" or "company" must be filled'; +$lng['menue']['main']['username'] = 'Logged in as: '; +$lng['panel']['urloverridespath'] = 'URL (overrides path)'; +$lng['panel']['pathorurl'] = 'Path or URL'; +$lng['error']['sessiontimeoutiswrong'] = 'Only numerical "Session Timeout" is allowed.'; +$lng['error']['maxloginattemptsiswrong'] = 'Only numerical "Max Login Attempts" are allowed.'; +$lng['error']['deactivatetimiswrong'] = 'Only numerical "Deactivate Time" is allowed.'; +$lng['error']['accountprefixiswrong'] = 'The "Customerprefix" is wrong.'; +$lng['error']['mysqlprefixiswrong'] = 'The "SQL Prefix" is wrong.'; +$lng['error']['ftpprefixiswrong'] = 'The "FTP Prefix" is wrong.'; +$lng['error']['ipiswrong'] = 'The "IP-Address" is wrong. Only a valid IP-address is allowed.'; +$lng['error']['vmailuidiswrong'] = 'The "Mails-uid" is wrong. Only a numerical UID is allowed.'; +$lng['error']['vmailgidiswrong'] = 'The "Mails-gid" is wrong. Only a numerical GID is allowed.'; +$lng['error']['adminmailiswrong'] = 'The "Sender-address" is wrong. Only a valid email-address is allowed.'; +$lng['error']['pagingiswrong'] = 'The "Entries per Page"-value is wrong. Only numerical characters are allowed.'; +$lng['error']['phpmyadminiswrong'] = 'The phpMyAdmin-link is not a valid link.'; +$lng['error']['webmailiswrong'] = 'The WebMail-link is not a valid link.'; +$lng['error']['webftpiswrong'] = 'The WebFTP-link is not a valid link.'; +$lng['domains']['hasaliasdomains'] = 'Has alias domain(s)'; +$lng['serversettings']['defaultip']['title'] = 'Default IP/Port'; +$lng['serversettings']['defaultip']['description'] = 'What\'s the default IP/Port combination?'; +$lng['domains']['statstics'] = 'Usage Statistics'; +$lng['panel']['ascending'] = 'ascending'; +$lng['panel']['decending'] = 'decending'; +$lng['panel']['search'] = 'Search'; +$lng['panel']['used'] = 'used'; + +// ADDED IN 1.2.14-rc3 + +$lng['panel']['translator'] = 'Translator'; + +// ADDED IN 1.2.14-rc4 + +$lng['error']['stringformaterror'] = 'The value for the field "%s" is not in the expected format.'; + +// ADDED IN 1.2.15-rc1 + +$lng['admin']['serversoftware'] = 'Serversoftware'; +$lng['admin']['phpversion'] = 'PHP-Version'; +$lng['admin']['phpmemorylimit'] = 'PHP-Memory-Limit'; +$lng['admin']['mysqlserverversion'] = 'MySQL Server Version'; +$lng['admin']['mysqlclientversion'] = 'MySQL Client Version'; +$lng['admin']['webserverinterface'] = 'Webserver Interface'; +$lng['domains']['isassigneddomain'] = 'Is assigned domain'; +$lng['serversettings']['phpappendopenbasedir']['title'] = 'Paths to append to OpenBasedir'; +$lng['serversettings']['phpappendopenbasedir']['description'] = 'These paths (separated by colons) will be added to the OpenBasedir-statement in every vhost-container.'; + +// CHANGED IN 1.2.15-rc1 + +$lng['error']['loginnameissystemaccount'] = 'You cannot create accounts which are similar to system accounts (as for example begin with "%s"). Please enter another account name.'; +$lng['error']['youcantdeleteyourself'] = 'You cannot delete yourself for security reasons.'; +$lng['error']['youcanteditallfieldsofyourself'] = 'Note: You cannot edit all fields of your own account for security reasons.'; + +// ADDED IN 1.2.16-svn1 + +$lng['serversettings']['natsorting']['title'] = 'Use natural human sorting in list view'; +$lng['serversettings']['natsorting']['description'] = 'Sorts lists as web1 -> web2 -> web11 instead of web1 -> web11 -> web2.'; + +// ADDED IN 1.2.16-svn2 + +$lng['serversettings']['deactivateddocroot']['title'] = 'Docroot for deactivated users'; +$lng['serversettings']['deactivateddocroot']['description'] = 'When a user is deactivated this path is used as his docroot. Leave empty for not creating a vhost at all.'; + +// ADDED IN 1.2.16-svn4 + +$lng['panel']['reset'] = 'discard changes'; +$lng['admin']['accountsettings'] = 'Account settings'; +$lng['admin']['panelsettings'] = 'Panel settings'; +$lng['admin']['systemsettings'] = 'System settings'; +$lng['admin']['webserversettings'] = 'Webserver settings'; +$lng['admin']['mailserversettings'] = 'Mailserver settings'; +$lng['admin']['nameserversettings'] = 'Nameserver settings'; +$lng['admin']['updatecounters'] = 'Recalculate resource usage'; +$lng['question']['admin_counters_reallyupdate'] = 'Do you really want to recalculate resource usage?'; +$lng['panel']['pathDescription'] = 'If the directory doesn\'t exist, it will be created automatically.'; + +// ADDED IN 1.2.16-svn6 + +$lng['mails']['trafficninetypercent']['mailbody'] = 'Dear {NAME},\n\nYou used {TRAFFICUSED} MB of your available {TRAFFIC} MB of traffic.\nThis is more than 90%.\n\nYours sincerely, the SysCP-Team'; +$lng['mails']['trafficninetypercent']['subject'] = 'Reaching your traffic limit'; +$lng['admin']['templates']['trafficninetypercent'] = 'Notification mail for customers when ninety percent of traffic is exhausted'; +$lng['admin']['templates']['TRAFFIC'] = 'Replaced with the traffic, which was assigned to the customer.'; +$lng['admin']['templates']['TRAFFICUSED'] = 'Replaced with the traffic, which was exhausted by the customer.'; + +// ADDED IN 1.2.16-svn7 + +$lng['admin']['subcanemaildomain']['never'] = 'Never'; +$lng['admin']['subcanemaildomain']['choosableno'] = 'Choosable, default no'; +$lng['admin']['subcanemaildomain']['choosableyes'] = 'Choosable, default yes'; +$lng['admin']['subcanemaildomain']['always'] = 'Always'; +$lng['changepassword']['also_change_webalizer'] = ' also change password of the webalizer statistics'; + +// ADDED IN 1.2.16-svn8 + +$lng['serversettings']['mailpwcleartext']['title'] = 'Also save passwords of mail accounts unencrypted in database'; +$lng['serversettings']['mailpwcleartext']['description'] = 'If this is set to yes, all passwords will also be saved unencrypted (clear text, plain readable for everyone with database access) in the mail_users-table. Only activate this if you really need it!'; +$lng['serversettings']['mailpwcleartext']['removelink'] = 'Click here to wipe all unencrypted passwords from the table.'; +$lng['question']['admin_cleartextmailpws_reallywipe'] = 'Do you really want to wipe all unencrypted mail account passwords from the table mail_users? This cannot be reverted!'; +$lng['admin']['configfiles']['overview'] = 'Overview'; +$lng['admin']['configfiles']['wizard'] = 'Wizard'; +$lng['admin']['configfiles']['distribution'] = 'Distribution'; +$lng['admin']['configfiles']['service'] = 'Service'; +$lng['admin']['configfiles']['daemon'] = 'Daemon'; +$lng['admin']['configfiles']['http'] = 'Webserver (HTTP)'; +$lng['admin']['configfiles']['dns'] = 'Nameserver (DNS)'; +$lng['admin']['configfiles']['mail'] = 'Mailserver (IMAP/POP3)'; +$lng['admin']['configfiles']['smtp'] = 'Mailserver (SMTP)'; +$lng['admin']['configfiles']['ftp'] = 'FTP-Server'; +$lng['admin']['configfiles']['etc'] = 'Others (System)'; +$lng['admin']['configfiles']['choosedistribution'] = '-- Choose a distribution --'; +$lng['admin']['configfiles']['chooseservice'] = '-- Choose a service --'; +$lng['admin']['configfiles']['choosedaemon'] = '-- Choose a daemon --'; +$lng['admin']['trafficlastrun'] = 'Last traffic calculation'; + +// ADDED IN 1.2.16-svn10 + +$lng['serversettings']['ftpdomain']['title'] = 'FTP accounts @domain'; +$lng['serversettings']['ftpdomain']['description'] = 'Customers can create Ftp accounts user@customerdomain?'; +$lng['panel']['back'] = 'Back'; + +// ADDED IN 1.2.16-svn12 + +$lng['serversettings']['mod_log_sql']['title'] = 'Temporary save logs in the database'; +$lng['serversettings']['mod_log_sql']['description'] = 'Use mod_log_sql to save webrequests temporarily
    This needs a special apache-configuration!'; +$lng['serversettings']['mod_fcgid']['title'] = 'Include PHP via mod_fcgid/suexec'; +$lng['serversettings']['mod_fcgid']['description'] = 'Use mod_fcgid/suexec/libnss_mysql to run PHP with the corresponding useraccount.
    This needs a special Apache configuration. All following options are only valid if the module is enabled.'; +$lng['serversettings']['sendalternativemail']['title'] = 'Use alternative email-address'; +$lng['serversettings']['sendalternativemail']['description'] = 'Send the password-email to a different address during email-account-creation'; +$lng['emails']['alternative_emailaddress'] = 'Alternative e-mail-address'; +$lng['mails']['pop_success_alternative']['mailbody'] = 'Hello,\n\nyour Mail account {EMAIL}\nwas set up successfully.\nYour password is {PASSWORD}.\n\nThis is an automatically created\ne-mail, please do not answer!\n\nYours sincerely, the SysCP-Team'; +$lng['mails']['pop_success_alternative']['subject'] = 'Mail account set up successfully'; +$lng['admin']['templates']['pop_success_alternative'] = 'Welcome mail for new email accounts sent to alternative address'; +$lng['admin']['templates']['EMAIL_PASSWORD'] = 'Replaced with the POP3/IMAP account password.'; + +// ADDED IN 1.2.16-svn13 + +$lng['error']['documentrootexists'] = 'The directory "%s" already exists for this customer. Please remove this before adding the customer again.'; + +// ADDED IN 1.2.16-svn14 + +$lng['serversettings']['apacheconf_vhost']['title'] = 'Apache vhost configuration file/dirname'; +$lng['serversettings']['apacheconf_vhost']['description'] = 'Where should the vhost configuration be stored? You could either specify a file (all vhosts in one file) or directory (each vhost in his own file) here.'; +$lng['serversettings']['apacheconf_diroptions']['title'] = 'Apache diroptions configuration file/dirname'; +$lng['serversettings']['apacheconf_diroptions']['description'] = 'Where should the diroptions configuration be stored? You could either specify a file (all diroptions in one file) or directory (each diroption in his own file) here.'; +$lng['serversettings']['apacheconf_htpasswddir']['title'] = 'Apache htpasswd dirname'; +$lng['serversettings']['apacheconf_htpasswddir']['description'] = 'Where should the htpasswd files for directory protection be stored?'; + +// ADDED IN 1.2.16-svn15 + +$lng['error']['formtokencompromised'] = 'The request seems to be compromised. For security reasons you were logged out.'; +$lng['serversettings']['mysql_access_host']['title'] = 'MySQL-Access-Hosts'; +$lng['serversettings']['mysql_access_host']['description'] = 'A comma separated list of hosts from which users should be allowed to connect to the MySQL-Server.'; + +// ADDED IN 1.2.18-svn1 + +$lng['admin']['ipsandports']['create_listen_statement'] = 'Create Listen statement'; +$lng['admin']['ipsandports']['create_namevirtualhost_statement'] = 'Create NameVirtualHost statement'; +$lng['admin']['ipsandports']['create_vhostcontainer'] = 'Create vHost-Container'; +$lng['admin']['ipsandports']['create_vhostcontainer_servername_statement'] = 'Create ServerName statement in vHost-Container'; + +// ADDED IN 1.2.18-svn2 + +$lng['admin']['webalizersettings'] = 'Webalizer settings'; +$lng['admin']['webalizer']['normal'] = 'Normal'; +$lng['admin']['webalizer']['quiet'] = 'Quiet'; +$lng['admin']['webalizer']['veryquiet'] = 'No output'; +$lng['serversettings']['webalizer_quiet']['title'] = 'Webalizer output'; +$lng['serversettings']['webalizer_quiet']['description'] = 'Verbosity of the webalizer-program'; + +// ADDED IN 1.2.18-svn3 + +$lng['ticket']['admin_email'] = 'root@localhost'; +$lng['ticket']['noreply_email'] = 'tickets@syscp'; +$lng['admin']['ticketsystem'] = 'Support-tickets'; +$lng['menue']['ticket']['ticket'] = 'Support tickets'; +$lng['menue']['ticket']['categories'] = 'Support categories'; +$lng['menue']['ticket']['archive'] = 'Ticket-archive'; +$lng['ticket']['description'] = 'Here you can send help-requests to your responsible administrator.
    Notifications will be sent via e-mail.'; +$lng['ticket']['ticket_new'] = 'Open a new ticket'; +$lng['ticket']['ticket_reply'] = 'Answer ticket'; +$lng['ticket']['ticket_reopen'] = 'Reopen ticket'; +$lng['ticket']['ticket_newcateory'] = 'Create new category'; +$lng['ticket']['ticket_editcateory'] = 'Edit category'; +$lng['ticket']['ticket_view'] = 'View ticketcourse'; +$lng['ticket']['ticketcount'] = 'Tickets'; +$lng['ticket']['ticket_answers'] = 'Replies'; +$lng['ticket']['lastchange'] = 'Last action'; +$lng['ticket']['subject'] = 'Subject'; +$lng['ticket']['status'] = 'Status'; +$lng['ticket']['lastreplier'] = 'Last replier'; +$lng['ticket']['priority'] = 'Priority'; +$lng['ticket']['low'] = 'Low'; +$lng['ticket']['normal'] = 'Normal'; +$lng['ticket']['high'] = 'High'; +$lng['ticket']['unf_low'] = 'Low'; +$lng['ticket']['unf_normal'] = 'Normal'; +$lng['ticket']['unf_high'] = 'High'; +$lng['ticket']['lastchange'] = 'Last change'; +$lng['ticket']['lastchange_from'] = 'From date (dd.mm.yyyy)'; +$lng['ticket']['lastchange_to'] = 'To date (dd.mm.yyyy)'; +$lng['ticket']['category'] = 'Category'; +$lng['ticket']['no_cat'] = 'None'; +$lng['ticket']['message'] = 'Message'; +$lng['ticket']['show'] = 'View'; +$lng['ticket']['answer'] = 'Answer'; +$lng['ticket']['close'] = 'Close'; +$lng['ticket']['reopen'] = 'Re-open'; +$lng['ticket']['archive'] = 'Archive'; +$lng['ticket']['ticket_delete'] = 'Delete ticket'; +$lng['ticket']['lastarchived'] = 'Recently archived tickets'; +$lng['ticket']['archivedtime'] = 'Archived'; +$lng['ticket']['open'] = 'Open'; +$lng['ticket']['wait_reply'] = 'Waiting for reply'; +$lng['ticket']['replied'] = 'Replied'; +$lng['ticket']['closed'] = 'Closed'; +$lng['ticket']['staff'] = 'Staff'; +$lng['ticket']['customer'] = 'Customer'; +$lng['ticket']['old_tickets'] = 'Ticket messages'; +$lng['ticket']['search'] = 'Search archive'; +$lng['ticket']['nocustomer'] = 'No choice'; +$lng['ticket']['archivesearch'] = 'Archive searchresults'; +$lng['ticket']['noresults'] = 'No tickets found'; +$lng['ticket']['notmorethanxopentickets'] = 'Due to spam-protection you cannot have more than %s open tickets'; +$lng['ticket']['supportstatus'] = 'Support-Status'; +$lng['ticket']['supportavailable'] = 'Our support engineers are available and ready to assist.'; +$lng['ticket']['supportnotavailable'] = 'Our support engineers are currently not available'; +$lng['admin']['templates']['ticket'] = 'Notification-mails for support-tickets'; +$lng['admin']['templates']['SUBJECT'] = 'Replaced with the support-ticket subject'; +$lng['admin']['templates']['new_ticket_for_customer'] = 'Customer-information that the ticket has been sent'; +$lng['admin']['templates']['new_ticket_by_customer'] = 'Admin-notification for a ticket opened by a customer'; +$lng['admin']['templates']['new_reply_ticket_by_customer'] = 'Admin-notification for a ticket-reply by a customer'; +$lng['admin']['templates']['new_ticket_by_staff'] = 'Customer-notification for a ticket opened by a staff'; +$lng['admin']['templates']['new_reply_ticket_by_staff'] = 'Customer-notification for a ticket-reply by a staff'; +$lng['mails']['new_ticket_for_customer']['mailbody'] = 'Hello {FIRSTNAME} {NAME},\n\nyour support-ticket with the subject "{SUBJECT}" has been sent.\n\nYou will be notified when your ticket has been answered.\n\nThank you,\nthe SysCP-Team'; +$lng['mails']['new_ticket_for_customer']['subject'] = 'Your support ticket has been sent'; +$lng['mails']['new_ticket_by_customer']['mailbody'] = 'Hello admin,\n\na new support-ticket with the subject "{SUBJECT}" has been submitted.\n\nPlease login to open the ticket.\n\nThank you,\nthe SysCP-Team'; +$lng['mails']['new_ticket_by_customer']['subject'] = 'New support ticket submitted'; +$lng['mails']['new_reply_ticket_by_customer']['mailbody'] = 'Hello admin,\n\nthe support-ticket "{SUBJECT}" has been answered by a customer.\n\nPlease login to open the ticket.\n\nThank you,\nthe SysCP-Team'; +$lng['mails']['new_reply_ticket_by_customer']['subject'] = 'New reply to support ticket'; +$lng['mails']['new_ticket_by_staff']['mailbody'] = 'Hello {FIRSTNAME} {NAME},\n\na support-ticket with the subject "{SUBJECT}" has been opened for you.\n\nPlease login to open the ticket.\n\nThank you,\nthe SysCP-Team'; +$lng['mails']['new_ticket_by_staff']['subject'] = 'New support ticket submitted'; +$lng['mails']['new_reply_ticket_by_staff']['mailbody'] = 'Hello {FIRSTNAME} {NAME},\n\nthe support-ticket with the subject "{SUBJECT}" has been answered by our staff.\n\nPlease login to view the ticket.\n\nThank you,\nthe SysCP-Team'; +$lng['mails']['new_reply_ticket_by_staff']['subject'] = 'New reply to support ticket'; +$lng['question']['ticket_reallyclose'] = 'Do you really want to close the ticket "%s"?'; +$lng['question']['ticket_reallydelete'] = 'Do you really want to delete the ticket "%s"?'; +$lng['question']['ticket_reallydeletecat'] = 'Do you really want to delete the category "%s"?'; +$lng['question']['ticket_reallyarchive'] = 'Do you really want to move the ticket "%s" to the archive?'; +$lng['error']['mysubject'] = '\'' . $lng['ticket']['subject'] . '\''; +$lng['error']['mymessage'] = '\'' . $lng['ticket']['message'] . '\''; +$lng['error']['mycategory'] = '\'' . $lng['ticket']['category'] . '\''; +$lng['error']['nomoreticketsavailable'] = 'You have used all your available tickets. Please contact your administrator.'; +$lng['error']['nocustomerforticket'] = 'Cannot create tickets without customers'; +$lng['error']['categoryhastickets'] = 'The category still has tickets in it.
    Please delete the tickets to delete the category'; +$lng['error']['notmorethanxopentickets'] = $lng['ticket']['notmorethanxopentickets']; +$lng['admin']['ticketsettings'] = 'Support-Ticket settings'; +$lng['admin']['archivelastrun'] = 'Last ticket archiving'; +$lng['serversettings']['ticket']['noreply_email']['title'] = 'No-reply e-mail address'; +$lng['serversettings']['ticket']['noreply_email']['description'] = 'The sender-address for support-ticket, mostly something like no-reply@domain.tld'; +$lng['serversettings']['ticket']['worktime_begin']['title'] = 'Begin support-time (hh:mm)'; +$lng['serversettings']['ticket']['worktime_begin']['description'] = 'Start-time when support is available'; +$lng['serversettings']['ticket']['worktime_end']['title'] = 'End support-time (hh:mm)'; +$lng['serversettings']['ticket']['worktime_end']['description'] = 'End-time when support is available'; +$lng['serversettings']['ticket']['worktime_sat'] = 'Support available on saturdays?'; +$lng['serversettings']['ticket']['worktime_sun'] = 'Support available on sundays?'; +$lng['serversettings']['ticket']['worktime_all']['title'] = 'No time limit for support'; +$lng['serversettings']['ticket']['worktime_all']['description'] = 'If "Yes" the options for start- and endtime will be overwritten'; +$lng['serversettings']['ticket']['archiving_days'] = 'After how many days should closed tickets be archived?'; +$lng['customer']['tickets'] = 'Support-tickets'; + +// ADDED IN 1.2.18-svn4 + +$lng['admin']['domain_nocustomeraddingavailable'] = 'It\'s not possible to add a domain currently. You first need to add at least one customer.'; +$lng['serversettings']['ticket']['enable'] = 'Enable ticketsystem'; +$lng['serversettings']['ticket']['concurrentlyopen'] = 'How many tickets shall be able to be opened at one time?'; +$lng['error']['norepymailiswrong'] = 'The "Noreply-address" is wrong. Only a valid email-address is allowed.'; +$lng['error']['tadminmailiswrong'] = 'The "Ticketadmin-address" is wrong. Only a valid email-address is allowed.'; +$lng['ticket']['awaitingticketreply'] = 'You have %s unanswered support-ticket(s)'; + +// ADDED IN 1.2.18-svn5 + +$lng['serversettings']['ticket']['noreply_name'] = 'Ticket e-mail sendername'; + +// ADDED IN 1.2.19-svn1 + +$lng['serversettings']['mod_fcgid']['configdir']['title'] = 'Configuration directory'; +$lng['serversettings']['mod_fcgid']['configdir']['description'] = 'Where should all fcgid-configuration files be stored? If you don\'t use a self compiled suexec binary, which is the normal situation, this path must be under /var/www/'; +$lng['serversettings']['mod_fcgid']['tmpdir']['title'] = 'Temp directory'; + +// ADDED IN 1.2.19-svn3 + +$lng['serversettings']['ticket']['reset_cycle']['title'] = 'Reset used tickets cycle'; +$lng['serversettings']['ticket']['reset_cycle']['description'] = 'Reset the customers used ticket counter to 0 in the chosen cycle'; +$lng['admin']['tickets']['daily'] = 'Daily'; +$lng['admin']['tickets']['weekly'] = 'Weekly'; +$lng['admin']['tickets']['monthly'] = 'Monthly'; +$lng['admin']['tickets']['yearly'] = 'Yearly'; +$lng['error']['ticketresetcycleiswrong'] = 'The cycle for ticket-resets has to be "daily", "weekly", "monthly" or "yearly".'; + +// ADDED IN 1.2.19-svn4 + +$lng['menue']['traffic']['traffic'] = 'Traffic'; +$lng['menue']['traffic']['current'] = 'Current Month'; +$lng['traffic']['month'] = "Month"; +$lng['traffic']['day'] = "Day"; +$lng['traffic']['months'][1] = "January"; +$lng['traffic']['months'][2] = "February"; +$lng['traffic']['months'][3] = "March"; +$lng['traffic']['months'][4] = "April"; +$lng['traffic']['months'][5] = "May"; +$lng['traffic']['months'][6] = "June"; +$lng['traffic']['months'][7] = "July"; +$lng['traffic']['months'][8] = "August"; +$lng['traffic']['months'][9] = "September"; +$lng['traffic']['months'][10] = "October"; +$lng['traffic']['months'][11] = "November"; +$lng['traffic']['months'][12] = "December"; +$lng['traffic']['mb'] = "Traffic (MB)"; +$lng['traffic']['distribution'] = 'FTP | HTTP | Mail'; +$lng['traffic']['sumhttp'] = 'Summation HTTP-Traffic in'; +$lng['traffic']['sumftp'] = 'Summation FTP-Traffic in'; +$lng['traffic']['summail'] = 'Summation Mail-Traffic in'; + +// ADDED IN 1.2.19-svn4.5 + +$lng['serversettings']['no_robots']['title'] = 'Allow searchengine-robots to index your SysCP'; + +// ADDED IN 1.2.19-svn6 + +$lng['admin']['loggersettings'] = 'Log settings'; +$lng['serversettings']['logger']['enable'] = 'Logging enabled/disabled'; +$lng['serversettings']['logger']['severity'] = 'Logging level'; +$lng['admin']['logger']['normal'] = 'normal'; +$lng['admin']['logger']['paranoid'] = 'paranoid'; +$lng['serversettings']['logger']['types']['title'] = 'Log-type(s)'; +$lng['serversettings']['logger']['types']['description'] = 'Specify logtypes seperated by comma.
    Available logtypes are: syslog, file, mysql'; +$lng['serversettings']['logger']['logfile'] = 'Logfile path including filename'; +$lng['error']['logerror'] = 'Log-Error: %s'; +$lng['serversettings']['logger']['logcron'] = 'Log cronjobs (one run)'; +$lng['question']['logger_reallytruncate'] = 'Do you really want to truncate the table "%s"?'; +$lng['admin']['loggersystem'] = 'System-logging'; +$lng['menue']['logger']['logger'] = 'System-logging'; +$lng['logger']['date'] = 'Date'; +$lng['logger']['type'] = 'Type'; +$lng['logger']['action'] = 'Action'; +$lng['logger']['user'] = 'User'; +$lng['logger']['truncate'] = 'Empty log'; + +// ADDED IN 1.2.19-svn7 + +$lng['serversettings']['ssl']['use_ssl'] = 'Use SSL'; +$lng['serversettings']['ssl']['ssl_cert_file'] = 'Path to the SSL certificate'; +$lng['serversettings']['ssl']['openssl_cnf'] = 'Defaults for creating the Cert file'; +$lng['panel']['reseller'] = 'reseller'; +$lng['panel']['admin'] = 'admin'; +$lng['panel']['customer'] = 'customer/s'; +$lng['error']['nomessagetosend'] = 'You did not enter a message.'; +$lng['error']['noreceipientsgiven'] = 'You did not specify any receipient'; +$lng['admin']['emaildomain'] = 'Emaildomain'; +$lng['admin']['email_only'] = 'Only email?'; +$lng['admin']['wwwserveralias'] = 'Add a "www." ServerAlias'; +$lng['admin']['ipsandports']['enable_ssl'] = 'Is this an SSL Port?'; +$lng['admin']['ipsandports']['ssl_cert_file'] = 'Path to the SSL Certificate'; +$lng['panel']['send'] = 'send'; +$lng['admin']['subject'] = 'Subject'; +$lng['admin']['receipient'] = 'Recipient'; +$lng['admin']['message'] = 'Write a Message'; +$lng['admin']['text'] = 'Message'; +$lng['menu']['message'] = 'Messages'; +$lng['error']['errorsendingmail'] = 'The message to "%s" failed'; +$lng['error']['cannotreaddir'] = 'Unable to read directory "%s"'; +$lng['message']['success'] = 'Successfully sent message to %s recipients'; +$lng['message']['noreceipients'] = 'No e-mail has been sent because there are no recipients in the database'; +$lng['admin']['sslsettings'] = 'SSL settings'; +$lng['cronjobs']['notyetrun'] = 'Not yet run'; +$lng['install']['servername_should_be_fqdn'] = 'The servername should be a FQDN and not an IP address'; +$lng['serversettings']['default_vhostconf']['title'] = 'Default vhost-settings'; +$lng['serversettings']['default_vhostconf']['description'] = 'The content of this field will be included into the domain vhost container directly. Attention: The code won\'t be checked for any errors. If it contains errors, apache might ot start again!'; +$lng['error']['invalidip'] = 'Invalid IP address: %s'; +$lng['serversettings']['decimal_places'] = 'Number of decimal places in traffic/webspace output'; + +// ADDED IN 1.2.19-svn8 + +$lng['admin']['dkimsettings'] = 'DomainKey settings'; +$lng['dkim']['dkim_prefix']['title'] = 'Prefix'; +$lng['dkim']['dkim_prefix']['description'] = 'Please specify the path to the DKIM RSA-files as well as to the configuration files for the Milter-plugin'; +$lng['dkim']['dkim_domains']['title'] = 'Domains filename'; +$lng['dkim']['dkim_domains']['description'] = 'Filename of the DKIM Domains parameter specified in the dkim-milter configuration'; +$lng['dkim']['dkim_dkimkeys']['title'] = 'KeyList filename'; +$lng['dkim']['dkim_dkimkeys']['description'] = 'Filename of the DKIM KeyList parameter specified in the dkim-milter configuration'; +$lng['dkim']['dkimrestart_command']['title'] = 'Milter restart command'; +$lng['dkim']['dkimrestart_command']['description'] = 'Please specify the restart command for the DKIM milter service'; + +// ADDED IN 1.2.19-svn9 + +$lng['admin']['caneditphpsettings'] = 'Can change php-related domain settings?'; + +// ADDED IN 1.2.19-svn12 + +$lng['admin']['allips'] = 'All IP\'s'; +$lng['panel']['nosslipsavailable'] = 'There are currently no ssl ip/port combinations for this server'; +$lng['ticket']['by'] = 'by'; +$lng['dkim']['use_dkim']['title'] = 'Activate DKIM support?'; +$lng['dkim']['use_dkim']['description'] = 'Would you like to use the Domain Keys (DKIM) system?'; +$lng['error']['invalidmysqlhost'] = 'Invalid MySQL host address: %s'; +$lng['error']['cannotuseawstatsandwebalizeratonetime'] = 'You cannot enable Webalizer and Awstats at the same time, please chose one of them'; +$lng['serversettings']['webalizer_enabled'] = 'Enable webalizer statistics'; +$lng['serversettings']['awstats_enabled'] = 'Enable awstats statistics'; +$lng['admin']['awstatssettings'] = 'Awstats settings'; +$lng['serversettings']['awstats_domain_file']['title'] = 'Awstats domainfiles directory'; +$lng['serversettings']['awstats_model_file']['title'] = 'Awstats model file'; + +// ADDED IN 1.2.19-svn16 + +$lng['admin']['domain_dns_settings'] = 'Domain dns settings'; +$lng['dns']['destinationip'] = 'Domain IP'; +$lng['dns']['standardip'] = 'Server standard IP'; +$lng['dns']['a_record'] = 'A-Record (IPv6 optional)'; +$lng['dns']['cname_record'] = 'CNAME-Record'; +$lng['dns']['mxrecords'] = 'Define MX records'; +$lng['dns']['standardmx'] = 'Server tandard MX record'; +$lng['dns']['mxconfig'] = 'Custom MX records'; +$lng['dns']['priority10'] = 'Priority 10'; +$lng['dns']['priority20'] = 'Priority 20'; +$lng['dns']['txtrecords'] = 'Define TXT records'; +$lng['dns']['txtexample'] = 'Example (SPF-entry):
    v=spf1 ip4:xxx.xxx.xx.0/23 -all'; +$lng['serversettings']['selfdns']['title'] = 'Customer domain dns settings'; +$lng['serversettings']['selfdnscustomer']['title'] = 'Allow customers to edit domain dns settings'; +$lng['admin']['activated'] = 'Activated'; +$lng['admin']['statisticsettings'] = 'Statistic settings'; +$lng['admin']['or'] = 'or'; + +// ADDED IN 1.2.19-svn17 + +$lng['serversettings']['unix_names']['title'] = 'Use UNIX compatible usernames'; +$lng['serversettings']['unix_names']['description'] = 'Allows you to use - and _ in usernames if No'; +$lng['error']['cannotwritetologfile'] = 'Cannot open logfile %s for writing'; +$lng['admin']['sysload'] = 'System load'; +$lng['admin']['noloadavailable'] = 'not available'; +$lng['admin']['nouptimeavailable'] = 'not available'; +$lng['panel']['backtooverview'] = 'Back to overview'; +$lng['admin']['nosubject'] = '(No Subject)'; +$lng['admin']['configfiles']['statistics'] = 'Statistics'; +$lng['login']['forgotpwd'] = 'Forgot your password?'; +$lng['login']['presend'] = 'Reset password'; +$lng['login']['email'] = 'E-mail address'; +$lng['login']['remind'] = 'Reset my password'; +$lng['login']['usernotfound'] = 'User not found!'; +$lng['pwdreminder']['subject'] = 'SysCP - Password reset'; +$lng['pwdreminder']['body'] = 'Hello %s,\n\nyour syscp password has been reset!\nThe new password is: %p\n\nThank you,\nthe SysCP-Team'; +$lng['pwdreminder']['success'] = 'Password reset successfully.
    You now should receive an email with your new password.'; + +// ADDED IN 1.2.19-svn18 + +$lng['serversettings']['allow_password_reset']['title'] = 'Allow password reset by customers'; +$lng['pwdreminder']['notallowed'] = 'Password reset is deactivated'; + +// ADDED IN 1.2.19-svn20 + +$lng['serversettings']['awstats_path']['title'] = 'Path to awstats cgi-bin folder'; +$lng['serversettings']['awstats_path']['description'] = 'e.g. /usr/share/webapps/awstats/6.1/webroot/cgi-bin/'; +$lng['serversettings']['awstats_updateall_command']['title'] = 'Path to "awstats_updateall.pl"'; +$lng['serversettings']['awstats_updateall_command']['description'] = 'e.g. /usr/bin/awstats_updateall.pl'; + +// ADDED IN 1.2.19-svn21 + +$lng['customer']['title'] = 'Title'; +$lng['customer']['country'] = 'Country'; +$lng['panel']['dateformat'] = 'YYYY-MM-DD'; +$lng['panel']['dateformat_function'] = 'Y-m-d'; + +// Y = Year, m = Month, d = Day + +$lng['panel']['timeformat_function'] = 'H:i:s'; + +// H = Hour, i = Minute, s = Second + +$lng['panel']['default'] = 'Default'; +$lng['panel']['never'] = 'Never'; +$lng['panel']['active'] = 'Active'; +$lng['panel']['please_choose'] = 'Please choose'; +$lng['panel']['allow_modifications'] = 'Allow modifications'; +$lng['domains']['add_date'] = 'Added to SysCP'; +$lng['domains']['registration_date'] = 'Added at registry'; +$lng['domains']['topleveldomain'] = 'Top-Level-Domain'; + +// ADDED IN 1.2.19-svn22 + +$lng['serversettings']['allow_password_reset']['description'] = 'Customers can reset their password and a new password will be sent to their e-mail address'; +$lng['serversettings']['allow_password_reset_admin']['title'] = 'Allow password reset by admins'; +$lng['serversettings']['allow_password_reset_admin']['description'] = 'Admins/reseller can reset their password and a new password will be sent to their e-mail address'; + +// ADDED IN 1.2.19-svn25 + +$lng['emails']['quota'] = 'Quota'; +$lng['emails']['noquota'] = 'No quota'; +$lng['emails']['updatequota'] = 'Update Quota'; +$lng['serversettings']['mail_quota']['title'] = 'Mailbox-quota'; +$lng['serversettings']['mail_quota']['description'] = 'The default quota for a new created mailboxes (MegaByte).'; +$lng['serversettings']['mail_quota_enabled']['title'] = 'Use mailbox-quota for customers'; +$lng['serversettings']['mail_quota_enabled']['description'] = 'Activate to use quotas on mailboxes. Default is No since this requires a special setup.'; +$lng['serversettings']['mail_quota_enabled']['removelink'] = 'Click here to wipe all quotas for mail accounts.'; +$lng['serversettings']['mail_quota_enabled']['enforcelink'] = 'Click here to enforce default quota to all User mail accounts.'; +$lng['question']['admin_quotas_reallywipe'] = 'Do you really want to wipe all quotas on table mail_users? This cannot be reverted!'; +$lng['question']['admin_quotas_reallyenforce'] = 'Do you really want to enforce the default quota to all Users? This cannot be reverted!'; +$lng['error']['vmailquotawrong'] = 'The quotasize must be positive number.'; +$lng['customer']['email_quota'] = 'E-mail quota'; +$lng['customer']['email_imap'] = 'E-mail IMAP'; +$lng['customer']['email_pop3'] = 'E-mail POP3'; +$lng['customer']['mail_quota'] = 'Mailquota'; +$lng['panel']['megabyte'] = 'MegaByte'; +$lng['panel']['not_supported'] = 'Not supported in: '; +$lng['emails']['quota_edit'] = 'Change E-Mail Quota'; +$lng['error']['allocatetoomuchquota'] = 'You tried to allocate %s MB ' . $lng['emails']['quota'] . ', but you do not have enough left.'; + +// Autoresponder module + +$lng['menue']['email']['autoresponder'] = 'Autoresponder'; +$lng['autoresponder']['active'] = 'Active'; +$lng['autoresponder']['autoresponder_add'] = 'Add autoresponder'; +$lng['autoresponder']['autoresponder_edit'] = 'Edit autoresponder'; +$lng['autoresponder']['autoresponder_new'] = 'Create new autoresponder'; +$lng['autoresponder']['subject'] = 'Subject'; +$lng['autoresponder']['message'] = 'Message'; +$lng['autoresponder']['account'] = 'Account'; +$lng['autoresponder']['sender'] = 'Sender'; +$lng['question']['autoresponderdelete'] = 'Do you really want to delete the autoresponder?'; +$lng['error']['noemailaccount'] = 'There can be two reasons why you cannot create a new autoresponder: You need at least one email account to create a new autoresponder. Secondly it can be possible that all accounts already have an autoresponder configured.'; +$lng['error']['missingfields'] = 'Not all required fields were filled out.'; +$lng['error']['accountnotexisting'] = 'The given email account doesn\'t exist.'; +$lng['error']['autoresponderalreadyexists'] = 'There is already an autoresponder configured for this account.'; +$lng['error']['invalidautoresponder'] = 'The given account is invalid.'; +$lng['serversettings']['autoresponder_active']['title'] = 'Use autoresponder module'; +$lng['serversettings']['autoresponder_active']['description'] = 'Do you want to use the autoresponder module? Therefore an extra cronjob must be set up.'; +$lng['invoice']['active'] = 'Billing active'; +$lng['admin']['security_settings'] = 'Security Options'; +$lng['admin']['know_what_youre_doing'] = 'Change only, if you know what you\'re doing!'; +$lng['admin']['show_version_login']['title'] = 'Show SysCP version on login'; +$lng['admin']['show_version_login']['description'] = 'Show the SysCP version in the footer on the login page'; +$lng['admin']['show_version_footer']['title'] = 'Show SysCP version in footer'; +$lng['admin']['show_version_footer']['description'] = 'Show the SysCP version in the footer on the rest of the pages'; +$lng['admin']['syscp_graphic']['title'] = 'Header graphic for SysCP'; +$lng['admin']['syscp_graphic']['description'] = 'What graphic should be shown in the header'; + +//improved syscp + +$lng['menue']['phpsettings']['maintitle'] = 'PHP Configurations'; +$lng['admin']['phpsettings']['title'] = 'PHP Configuration'; +$lng['admin']['phpsettings']['description'] = 'Short description'; +$lng['admin']['phpsettings']['actions'] = 'Actions'; +$lng['admin']['phpsettings']['activedomains'] = 'In use for domain(s)'; +$lng['admin']['phpsettings']['notused'] = 'Configuration not in use'; +$lng['admin']['misc'] = 'Miscellaneous'; +$lng['admin']['phpsettings']['editsettings'] = 'Change PHP settings'; +$lng['admin']['phpsettings']['addsettings'] = 'Create new PHP settings'; +$lng['admin']['phpsettings']['viewsettings'] = 'View PHP settings'; +$lng['admin']['phpsettings']['phpinisettings'] = 'php.ini settings'; +$lng['error']['nopermissionsorinvalidid'] = 'You don\'t have enough permissions to change these settings or an invalid id was given.'; +$lng['panel']['view'] = 'view'; +$lng['question']['phpsetting_reallydelete'] = 'Do you really want to delete these settings? All domains which use these settings currently will be changed to the default config.'; +$lng['admin']['phpsettings']['addnew'] = 'Create new settings'; +$lng['error']['phpsettingidwrong'] = 'A PHP Configuration with this id doesn\'t exist'; +$lng['error']['descriptioninvalid'] = 'The description is too short, too long or contains illegal characters.'; +$lng['error']['info'] = 'Info'; +$lng['admin']['phpconfig']['template_replace_vars'] = 'Variables that will be replaced in the configs'; +$lng['admin']['phpconfig']['safe_mode'] = 'Will be replaced with the safe_mode setting of the domain.'; +$lng['admin']['phpconfig']['pear_dir'] = 'Will be replaced with the global setting for the pear directory.'; +$lng['admin']['phpconfig']['open_basedir'] = 'Will be replaced with the open_basedir setting of the domain.'; +$lng['admin']['phpconfig']['tmp_dir'] = 'Will be replaced with the temporary directory of the domain.'; +$lng['admin']['phpconfig']['open_basedir_global'] = 'Will be replaced with the global value of the path which will be attached to the open_basedir.'; +$lng['admin']['phpconfig']['customer_email'] = 'Will be replaced with the e-mail address of the customer who owns this domain.'; +$lng['admin']['phpconfig']['admin_email'] = 'Will be replaced with e-mail address of the admin who owns this domain.'; +$lng['admin']['phpconfig']['domain'] = 'Will be replaced with the domain.'; +$lng['admin']['phpconfig']['customer'] = 'Will be replaced with the loginname of the customer who owns this domain.'; +$lng['admin']['phpconfig']['admin'] = 'Will be replaced with the loginname of the admin who owns this domain.'; +$lng['login']['backtologin'] = 'Back to login'; +$lng['serversettings']['mod_fcgid']['starter']['title'] = 'Processes per Domain'; +$lng['serversettings']['mod_fcgid']['starter']['description'] = 'How many processes should be started/allowed per domain? The value 0 is recommended cause PHP will then manage the amount of processes itself very efficiently.'; +$lng['serversettings']['mod_fcgid']['wrapper']['title'] = 'Wrapper in Vhosts'; +$lng['serversettings']['mod_fcgid']['wrapper']['description'] = 'How should the wrapper be included in the Vhosts'; +$lng['serversettings']['mod_fcgid']['tmpdir']['description'] = 'Where should the temp directories be stored'; +$lng['serversettings']['mod_fcgid']['peardir']['title'] = 'Global PEAR directories'; +$lng['serversettings']['mod_fcgid']['peardir']['description'] = 'Which global PEAR directories should be replaced in every php.ini config? Different directories must be separated by a colon.'; + +//improved syscp 2 + +$lng['admin']['templates']['index_html'] = 'index file for newly created customer directories'; +$lng['admin']['templates']['SERVERNAME'] = 'Replaced with the servername.'; +$lng['admin']['templates']['CUSTOMER'] = 'Replaced with the loginname of the customer.'; +$lng['admin']['templates']['ADMIN'] = 'Replaced with the loginname of the admin.'; +$lng['admin']['templates']['CUSTOMER_EMAIL'] = 'Replaced with the e-mail address of the customer.'; +$lng['admin']['templates']['ADMIN_EMAIL'] = 'Replaced with the e-mail address of the admin.'; +$lng['admin']['templates']['filetemplates'] = 'File templates'; +$lng['admin']['templates']['filecontent'] = 'File content'; +$lng['error']['filecontentnotset'] = 'The file cannot be empty!'; +$lng['serversettings']['index_file_extension']['description'] = 'Which file extension should be used for the index file in newly created customer directories? This file extension will be used, if you or one of your admins has created its own index file template.'; +$lng['serversettings']['index_file_extension']['title'] = 'File extension for index file in newly created customer directories'; +$lng['error']['index_file_extension'] = 'The file extension for the index file must be between 1 and 6 characters long. The extension can only contain characters like a-z, A-Z and 0-9'; +$lng['admin']['expert_settings'] = 'Expert settings!'; +$lng['admin']['mod_fcgid_starter']['title'] = 'PHP Processes for this domain (empty for default value)'; + +//added with aps installer + +$lng['admin']['aps'] = 'APS Installer'; +$lng['customer']['aps'] = 'APS Installer'; +$lng['aps']['scan'] = 'Scan for new packages'; +$lng['aps']['upload'] = 'Upload new packages'; +$lng['aps']['managepackages'] = 'Manage Packages'; +$lng['aps']['manageinstances'] = 'Manage Instances'; +$lng['aps']['overview'] = 'Package overview'; +$lng['aps']['status'] = 'My Packages'; +$lng['aps']['search'] = 'Search for Packages'; +$lng['aps']['upload_description'] = 'Please select the APS Installer zipfiles to install them in the system.'; +$lng['aps']['search_description'] = 'Name, Description, Keyword, Version'; +$lng['aps']['detail'] = 'More information'; +$lng['aps']['install'] = 'Install package'; +$lng['aps']['data'] = 'Data'; +$lng['aps']['version'] = 'Version'; +$lng['aps']['homepage'] = 'Homepage'; +$lng['aps']['installed_size'] = 'Size after Installation'; +$lng['aps']['categories'] = 'Categories'; +$lng['aps']['languages'] = 'Languages'; +$lng['aps']['long_description'] = 'Long description'; +$lng['aps']['configscript'] = 'Configuration script'; +$lng['aps']['changelog'] = 'Changelog'; +$lng['aps']['license'] = 'License'; +$lng['aps']['license_link'] = 'Link to License'; +$lng['aps']['screenshots'] = 'Screenshots'; +$lng['aps']['back'] = 'Back to overview'; +$lng['aps']['install_wizard'] = 'Installation wizard...'; +$lng['aps']['wizard_error'] = 'Your input contains invalid data. Please correct yourself to continue the installation.'; +$lng['aps']['basic_settings'] = 'Basic settings'; +$lng['aps']['application_location'] = 'Installation location'; +$lng['aps']['application_location_description'] = 'Location where the application will be installed.'; +$lng['aps']['no_domains'] = 'No domains found'; +$lng['aps']['database_password'] = 'Database password'; +$lng['aps']['database_password_description'] = 'Password which should be used for the new created database.'; +$lng['aps']['license_agreement'] = 'Agreement'; +$lng['aps']['cancel_install'] = 'Abort Installation'; +$lng['aps']['notazipfile'] = 'The uploaded file is not a zipfile.'; +$lng['aps']['filetoobig'] = 'The file is too big.'; +$lng['aps']['filenotcomplete'] = 'The file wasn\'t uploaded completely.'; +$lng['aps']['phperror'] = 'There occured a PHP internal error. The PHP upload errorcode is #'; +$lng['aps']['moveproblem'] = 'The script failed to move the uploaded file into the destination directory. Please ensure that all permissions are set correctly.'; +$lng['aps']['uploaderrors'] = 'Errors for the file %s
      %s
    '; +$lng['aps']['nospecialchars'] = 'Special characters are not allowed in the search term!'; +$lng['aps']['noitemsfound'] = 'No Packages were found!'; +$lng['aps']['nopackagesinstalled'] = 'You haven\'t installed any package yet which could be shown.'; +$lng['aps']['instance_install'] = 'Package Installation pending'; +$lng['aps']['instance_task_active'] = 'Installation running at this moment'; +$lng['aps']['instance_success'] = 'Package is installed/was installed successfully'; +$lng['aps']['instance_error'] = 'Package isn\'t installed - there occured some errors on the Installation'; +$lng['aps']['instance_uninstall'] = 'Package Uninstallation pending'; +$lng['aps']['unknown_status'] = 'Error - Unknown value'; +$lng['aps']['currentstatus'] = 'Current status'; +$lng['aps']['activetasks'] = 'Current tasks'; +$lng['aps']['task_install'] = 'Installation pending'; +$lng['aps']['task_remove'] = 'Uninstallation pending'; +$lng['aps']['task_reconfigure'] = 'Reconfiguration pending'; +$lng['aps']['task_upgrade'] = 'Update/Upgrade pending'; +$lng['aps']['no_task'] = 'No tasks pending'; +$lng['aps']['applicationlinks'] = 'Application links'; +$lng['aps']['mainsite'] = 'Main site'; +$lng['aps']['uninstall'] = 'Uninstall Package'; +$lng['aps']['reconfigure'] = 'Change settings'; +$lng['aps']['erroronnewinstance'] = 'This Package cannot be installed.

    Please go back to the Package overview and start a new Installation.'; +$lng['aps']['successonnewinstance'] = '%s will be installed now.

    Go back to "My Packages" and wait until the Installation has finished. This can take some time.'; +$lng['aps']['php_misc_handler'] = 'PHP - Misc - There is no support for other file extensions than .php for the PHP Parser.'; +$lng['aps']['php_misc_directoryhandler'] = 'PHP - Misc - There is no support for per directory disabled PHP Handlers.'; +$lng['aps']['asp_net'] = 'ASP.NET - Package not supported.'; +$lng['aps']['cgi'] = 'CGI - Package not supported.'; +$lng['aps']['php_extension'] = 'PHP - Extension "%s" missing.'; +$lng['aps']['php_function'] = 'PHP - Function "%s" missing.'; +$lng['aps']['php_configuration'] = 'PHP - Configuration - Current "%s" setting not supported by Package.'; +$lng['aps']['php_configuration_post_max_size'] = 'PHP - Configuration - "post_max_size" value too low.'; +$lng['aps']['php_configuration_memory_limit'] = 'PHP - Configuration - "memory_limit" value too low.'; +$lng['aps']['php_configuration_max_execution_time'] = 'PHP - Configuration - "max_execution_time" value too low.'; +$lng['aps']['php_general_old'] = 'PHP - General - PHP Version too old.'; +$lng['aps']['php_general_new'] = 'PHP - General - PHP Version too new.'; +$lng['aps']['db_mysql_support'] = 'Database - The Package needs another database engine than MySQL.'; +$lng['aps']['db_mysql_version'] = 'Database - MySQL Server too old.'; +$lng['aps']['webserver_module'] = 'Webserver - Module "%s" missing.'; +$lng['aps']['webserver_fcgid'] = 'Webserver - This Package requires additional modules from the Webserver. In your FastCGI/mod_fcgid environment the function "apache_get_modules" doesn\'t exist. The Package cannot be installed because the APS Installer is unable to verify if this modules are installed.'; +$lng['aps']['webserver_htaccess'] = 'Webserver - This Package requires that .htaccess files are parsed by the Webserver. The Package cannot be installed because the APS Installer is unable to determine if this is enabled.'; +$lng['aps']['misc_configscript'] = 'Misc - The language of the configuration script is not supported.'; +$lng['aps']['misc_charset'] = 'Misc - In the current Installer version its not possibel to validate formfields from the wizard against a specific charset. The Package cannot be installed.'; +$lng['aps']['misc_version_already_installed'] = 'Same version of Package already installed.'; +$lng['aps']['misc_only_newer_versions'] = 'For security reasons only newer Package versions can be installed on the system than them which are already installed.'; +$lng['aps']['erroronscan'] = 'Errors for %s
      %s
    '; +$lng['aps']['invalidzipfile'] = 'Errors for %s
    • This is not a valid APS zipfile!
    '; +$lng['aps']['successpackageupdate'] = '%s successfully installed as a Package update'; +$lng['aps']['successpackageinstall'] = '%s successfully installed as a new Package'; +$lng['aps']['class_zip_missing'] = 'SimpleXML Class, exec function or ZIP Functions missing or not enabled! For further information about this problem look into the handbook for this module.'; +$lng['aps']['dir_permissions'] = 'The PHP/Webserver process must be able to write in the directory /var/www/syscp/temp/ and /var/www/syscp/packages/'; +$lng['aps']['initerror'] = 'There are some problems with this module:
      %s
    Fix these problems, otherwise the module cannot be used!'; +$lng['aps']['iderror'] = 'Wrong id specified!'; +$lng['aps']['nopacketsforinstallation'] = 'There are no packages to install.'; +$lng['aps']['nopackagestoinstall'] = 'There are no packages to view or install.'; +$lng['aps']['nodomains'] = 'Select a domain from the list. If there is none, the Package cannot be installed!'; +$lng['aps']['wrongpath'] = 'Either this path contains invalid characters or there is another application installed already.'; +$lng['aps']['dbpassword'] = 'Specify a password with a minimum length of 8 characters.'; +$lng['aps']['error_text'] = 'Specify a text without special characters.'; +$lng['aps']['error_email'] = 'Specify a valid e-mail address.'; +$lng['aps']['error_domain'] = 'Specify a valid URL like http://www.example.com/'; +$lng['aps']['error_integer'] = 'Specify a numeric value (Integer-Format) e.g. 5 or 7.'; +$lng['aps']['error_float'] = 'Specify a numeric value (Float-Format) e.g. 5,2432 or 7,5346.'; +$lng['aps']['error_password'] = 'Specify a password.'; +$lng['aps']['error_license'] = 'Yes, I have read the license and will abide by its terms.'; +$lng['aps']['error_licensenoaccept'] = 'You must accept the license to install this application.'; +$lng['aps']['stopinstall'] = 'Abort Installation'; +$lng['aps']['installstopped'] = 'The Installation of this Package was aborted successfully.'; +$lng['aps']['installstoperror'] = 'The Installation cannot be aborted anymore because installation has started already. If you\'d like to uninstall the Package, wait until the Installation has finished and then go to "My Packages" to trigger an Uninstallation.'; +$lng['aps']['waitfortask'] = 'There are no actions to select. Wait until all tasks have finished.'; +$lng['aps']['removetaskexisting'] = 'There is already a task for Uninstallation.

    Please go back to "My Packages" and wait until the Uninstallation has finished.'; +$lng['aps']['packagewillberemoved'] = 'The Package will be uninstalled now.

    Please go back to "My Packages" and wait until the Uninstallation has finished.'; +$lng['question']['reallywanttoremove'] = 'Do you really want to uninstall this Package?

    All database contents and files will be erased. Be sure to make a manual backup of a files you need for any further usage!

    '; +$lng['aps']['searchoneresult'] = '%s Package found'; +$lng['aps']['searchmultiresult'] = '%s Packages found'; +$lng['question']['reallywanttostop'] = 'Do you really want to abort the Installation of this Package?

    '; +$lng['aps']['packagenameandversion'] = 'Packagename & Version'; +$lng['aps']['package_locked'] = 'Locked'; +$lng['aps']['package_enabled'] = 'Enabled'; +$lng['aps']['lock'] = 'Lock'; +$lng['aps']['unlock'] = 'Enable'; +$lng['aps']['remove'] = 'Remove'; +$lng['aps']['allpackages'] = 'All Packages'; +$lng['question']['reallyremovepackages'] = 'Do you really want to delete these packages?

    Packages with dependencies can only be remove if the corresponding Instances have been removed!

    '; +$lng['aps']['nopackagesinsystem'] = 'There were no packages installed in the system which could be managed.'; +$lng['aps']['packagenameandstatus'] = 'Packagename & Status'; +$lng['aps']['activate_aps']['title'] = 'Enable APS Installer'; +$lng['aps']['activate_aps']['description'] = 'Here the APS Installer can be enabled and disabled globaly.'; +$lng['aps']['packages_per_page']['title'] = 'Packages per page'; +$lng['aps']['packages_per_page']['description'] = 'How many packages should be displayed per page for customers?'; +$lng['aps']['upload_fields']['title'] = 'Upload fields per page'; +$lng['aps']['upload_fields']['description'] = 'How many upload fields should be displayed on the page to install new packages in the system?'; +$lng['aps']['exceptions']['title'] = 'Exceptions for Package validation'; +$lng['aps']['exceptions']['description'] = 'Some packages need special configuration parameters or modules. The Installer cannot always determine if this options/extensions are available. For this reason you can now define exceptions that packages can be installed in the system. Do only select options which match your real configuration setup. For further information about this problem look into the handbook for this module.'; +$lng['aps']['settings_php_extensions'] = 'PHP-Extensions'; +$lng['aps']['settings_php_configuration'] = 'PHP-Configuration'; +$lng['aps']['settings_webserver_modules'] = 'Webserver modules'; +$lng['aps']['settings_webserver_misc'] = 'Webserver miscellaneous'; +$lng['aps']['specialoptions'] = 'Special options'; +$lng['aps']['removeunused'] = 'Remove unused packages'; +$lng['aps']['enablenewest'] = 'Enabled newest version of package, lock others'; +$lng['aps']['installations'] = 'Installations'; +$lng['aps']['statistics'] = 'Statistics'; +$lng['aps']['numerofpackagesinstalled'] = '%s Packages installed
    '; +$lng['aps']['numerofpackagesenabled'] = '%s Packages enabled
    '; +$lng['aps']['numerofpackageslocked'] = '%s Packages locked
    '; +$lng['aps']['numerofinstances'] = '%s Instances installed
    '; +$lng['question']['reallydoaction'] = 'Do you really want to execute the selected actions?

    Data which can be lost by continuing, cannot be restored later.

    '; +$lng['aps']['linktolicense'] = 'Link to license'; +$lng['aps']['initerror_customer'] = 'There is currently a problem with this SysCP extension. Contact your administrator for further information.'; +$lng['aps']['numerofinstances'] = '%s Installations at all
    '; +$lng['aps']['numerofinstancessuccess'] = '%s successful Installations
    '; +$lng['aps']['numerofinstanceserror'] = '%s failed Installations
    '; +$lng['aps']['numerofinstancesaction'] = '%s planed Installations/Uninstallations'; +$lng['aps']['downloadallpackages'] = 'Download all packages from distribution server'; +$lng['aps']['updateallpackages'] = 'Update all packages by distribution server'; +$lng['aps']['downloadtaskexists'] = 'There is already a task for the download of all packages. Please wait until this task has finished.'; +$lng['aps']['downloadtaskinserted'] = 'A task for the download of all packages has been created. This can take up to several minutes.'; +$lng['aps']['updatetaskexists'] = 'There is already an task for the update of all packages. Please wait until this task has finished.'; +$lng['aps']['updatetaskinserted'] = 'A task for the update of all packages has been created. This can take up to several minutes.'; +$lng['aps']['canmanagepackages'] = 'Can manage APS packages'; +$lng['aps']['numberofapspackages'] = 'Amount of APS installations'; +$lng['aps']['allpackagesused'] = 'Error

    You have already reached the number of installable APS applications.'; +$lng['aps']['noinstancesexisting'] = 'There are currently no instances which could be managed. There must be installed at least one application by a customer.'; +$lng['aps']['lightywarning'] = 'Warning'; +$lng['aps']['lightywarningdescription'] = 'You are using the lighttpd webserver together with SysCP. The APS module was mainly written for Apache, so it can be possible that some features do not work with lighttpd. Please remember this when using the APS module. If you have found or experienced any problems in connection with lighttpd and the APS module please report them to the developers that they can be fixed within the next release if SysCP.'; +$lng['error']['customerdoesntexist'] = 'The customer you have chosen doesn\'t exist.'; +$lng['error']['admindoesntexist'] = 'The admin you have chosen doesn\'t exist.'; + +// ADDED IN 1.2.19-svn37 + +$lng['serversettings']['system_realtime_port']['title'] = 'Port for realtime SysCP'; +$lng['serversettings']['system_realtime_port']['description'] = 'SysCP connects to this port at localhost everytime a new cron task is scheduled. If value is 0 (zero), this feature ist deactivated.
    See also: Make SysCP work in realtime (SysCP Wiki)'; +$lng['serversettings']['session_allow_multiple_login']['title'] = 'Allow multiple login'; +$lng['serversettings']['session_allow_multiple_login']['description'] = 'If activated a user could login multiple times.'; +$lng['serversettings']['panel_allow_domain_change_admin']['title'] = 'Allow moving domains between admins'; +$lng['serversettings']['panel_allow_domain_change_admin']['description'] = 'If activated you can change the admin of a domain at domainsettings.
    Attention: If a customer isn\'t assigned to the same admin as the domain, the admin can see every other domain of that customer!'; +$lng['serversettings']['panel_allow_domain_change_customer']['title'] = 'Allow moving domains between customers'; +$lng['serversettings']['panel_allow_domain_change_customer']['description'] = 'If activated you can change the customer of a domain at domainsettings.
    Attention: SysCP won\'t change any paths. This could render a domain unusable!'; +$lng['domains']['associated_with_domain'] = 'Associated'; +$lng['domains']['aliasdomains'] = 'Alias domains'; +$lng['error']['ipportdoesntexist'] = 'The ip/port combination you have chosen doesn\'t exist.'; + +// ADDED IN 1.2.19-svn38 + +$lng['admin']['phpserversettings'] = 'PHP Settings'; +$lng['admin']['phpsettings']['binary'] = 'PHP Binary'; +$lng['admin']['phpsettings']['file_extensions'] = 'File extensions'; +$lng['admin']['phpsettings']['file_extensions_note'] = '(without dot, separated by spaces)'; +$lng['admin']['mod_fcgid_maxrequests']['title'] = 'Maximum php requests for this domain (empty for default value)'; +$lng['serversettings']['mod_fcgid']['maxrequests']['title'] = 'Maximum Requests per Domain'; +$lng['serversettings']['mod_fcgid']['maxrequests']['description'] = 'How many requests should be allowed per domain?'; + +// fix bug #1124 +$lng['admin']['webserver'] = 'Webserver'; +$lng['error']['admin_domain_emailsystemhostname'] = 'The server-hostname cannot be used as email-domain.'; +$lng['aps']['license_link'] = 'Link to the license'; + +// ADDED IN 1.4.2.1 +$lng['admin']['thankyou'] = 'Thank you'; +$lng['admin']['contributors'] = 'All these people contributed to the SysCP Project (no particular order)'; + +// ADDED IN 1.4.2.1-1 + +$lng['mysql']['mysql_server'] = 'MySQL-Server'; + +// ADDED IN 1.4.2.1-2 + +$lng['admin']['ipsandports']['webserverdefaultconfig'] = 'Webserver Default Config'; +$lng['admin']['ipsandports']['webserverdomainconfig'] = 'Webserver Domain Config'; +$lng['admin']['ipsandports']['webserverssldomainconfig'] = 'Webserver SSL Config'; +$lng['admin']['ipsandports']['ssl_key_file'] = 'Path to the SSL Keyfile'; +$lng['admin']['ipsandports']['ssl_ca_file'] = 'Path to the SSL CA certificate'; +$lng['admin']['ipsandports']['default_vhostconf_domain'] = 'Default vhost-settings for every domain container'; +$lng['serversettings']['ssl']['ssl_key_file'] = 'Path to the SSL Keyfile'; +$lng['serversettings']['ssl']['ssl_ca_file'] = 'Path to the SSL CA certificate'; + +$lng['error']['usernamealreadyexists'] = 'The username %s already exists.'; + +$lng['error']['plausibilitychecknotunderstood'] = 'Answer of plausibility check not understood.'; +$lng['error']['errorwhensaving'] = 'An error occured when saving the field %s'; + +$lng['success']['success'] = 'Information'; +$lng['success']['clickheretocontinue'] = 'Click here to continue'; +$lng['success']['settingssaved'] = 'The settings have been successfully saved.'; +?> \ No newline at end of file diff --git a/lng/french.lng.php b/lng/french.lng.php new file mode 100644 index 0000000000..0c69b70897 --- /dev/null +++ b/lng/french.lng.php @@ -0,0 +1,1103 @@ + + * @author Aldo Reset + * @author Romain MARIADASSOU + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Language + * @version $Id: french.lng.php 2724 2009-06-07 14:18:02Z flo $ + */ + +/** + * Some importants rules of typograhie in french : + * These signs << ! ? : " & >> must be be preceded by white space + * -> We can make the white space like that : <<   >> + * -> so the white space is still committed to the previous letter and punctuation mark as follows. + * These signs << . ; , ' >> should be glued to the previous letter + * These signs << / | = >> would be preceded and followed with a white as mush as possible, it is much clear from reading. + */ + +/** + * Global + */ + +$lng['translator'] = 'Tim Zielosko, Aldo Reset, Romain MARIADASSOU'; +$lng['panel']['edit'] = 'Modifier'; +$lng['panel']['delete'] = 'Supprimer'; +$lng['panel']['create'] = 'Ajouter'; +$lng['panel']['save'] = 'Sauvegarder'; +$lng['panel']['yes'] = 'Oui'; +$lng['panel']['no'] = 'Non'; +$lng['panel']['emptyfornochanges'] = 'Laissez vide pour ne pas modifier'; +$lng['panel']['emptyfordefault'] = 'Laissez vide pour l\'option standard'; +$lng['panel']['path'] = 'Dossier'; +$lng['panel']['toggle'] = 'Activer / Désactiver'; +$lng['panel']['next'] = 'continuer'; +$lng['panel']['dirsmissing'] = 'Dossiers non disponibles ou illisibles'; + +/** + * Login + */ + +$lng['login']['username'] = 'Identifiant'; +$lng['login']['password'] = 'Mot de passe'; +$lng['login']['language'] = 'Langue'; +$lng['login']['login'] = 'Se connecter'; +$lng['login']['logout'] = 'Se déconnecter'; +$lng['login']['profile_lng'] = 'Langue du profil'; + +/** + * Customer + */ + +$lng['customer']['documentroot'] = 'Chemin'; +$lng['customer']['name'] = 'Nom'; +$lng['customer']['firstname'] = 'Prénom'; +$lng['customer']['company'] = 'Entreprise'; +$lng['customer']['street'] = 'Rue'; +$lng['customer']['zipcode'] = 'Code postal'; +$lng['customer']['city'] = 'Ville'; +$lng['customer']['phone'] = 'Téléphone'; +$lng['customer']['fax'] = 'Fax'; +$lng['customer']['email'] = 'E-mail'; +$lng['customer']['customernumber'] = 'Numéro du client'; +$lng['customer']['diskspace'] = 'Espace Web (Mo)'; +$lng['customer']['traffic'] = 'Trafic (Go)'; +$lng['customer']['mysqls'] = 'Base(s) de données MySQL'; +$lng['customer']['emails'] = 'Adresse(s) e-mail'; +$lng['customer']['accounts'] = 'Accès e-mail'; +$lng['customer']['forwarders'] = 'Transfert(s) e-mail'; +$lng['customer']['ftps'] = 'Accès FTP'; +$lng['customer']['subdomains'] = 'Sous-domaine(s)'; +$lng['customer']['domains'] = 'Domaine(s)'; +$lng['customer']['unlimited'] = 'illimité'; + +/** + * Customermenue + */ + +$lng['menue']['main']['main'] = 'Général'; +$lng['menue']['main']['changepassword'] = 'Changer de mot de passe'; +$lng['menue']['main']['changelanguage'] = 'Changer de langue'; +$lng['menue']['email']['email'] = 'E-mail'; +$lng['menue']['email']['emails'] = 'Adresse(s) e-mail(s)'; +$lng['menue']['email']['webmail'] = 'Webmail'; +$lng['menue']['mysql']['mysql'] = 'MySQL'; +$lng['menue']['mysql']['databases'] = 'Bases de données'; +$lng['menue']['mysql']['phpmyadmin'] = 'phpMyAdmin'; +$lng['menue']['domains']['domains'] = 'Domaines'; +$lng['menue']['domains']['settings'] = 'Paramètres des sites'; +$lng['menue']['ftp']['ftp'] = 'FTP'; +$lng['menue']['ftp']['accounts'] = 'Comptes d\'accès FTP'; +$lng['menue']['ftp']['webftp'] = 'WebFTP'; +$lng['menue']['extras']['extras'] = 'Extras'; +$lng['menue']['extras']['directoryprotection'] = 'Protection des dossiers'; +$lng['menue']['extras']['pathoptions'] = 'Options des dossiers'; + +/** + * Index + */ + +$lng['index']['customerdetails'] = 'Informations personnelles'; +$lng['index']['accountdetails'] = 'Informations du compte'; + +/** + * Change Password + */ + +$lng['changepassword']['old_password'] = 'Ancien mot de passe'; +$lng['changepassword']['new_password'] = 'Nouveau mot de passe'; +$lng['changepassword']['new_password_confirm'] = 'Nouveau mot de passe (confirmation)'; +$lng['changepassword']['new_password_ifnotempty'] = 'Nouveau mot de passe (Veuillez laisser vide pour ne pas changer)'; +$lng['changepassword']['also_change_ftp'] = 'Changer aussi le mot de passe du compte FTP principal ?'; + +/** + * Domains + */ + +$lng['domains']['description'] = 'Ici, vous pouvez ajouter des sites et domaines et changer leurs doosiers.
    Il vous faudra patienter quelques minutes après chaque changement pour que la configuration soit activée.'; +$lng['domains']['domainsettings'] = 'Configuration des Domaines'; +$lng['domains']['domainname'] = 'Nom du Domaine'; +$lng['domains']['subdomain_add'] = 'Ajouter un sous-domaine'; +$lng['domains']['subdomain_edit'] = 'Changer un sous-domaine'; +$lng['domains']['wildcarddomain'] = 'Domaine générique (Wilcard) ?'; +$lng['domains']['aliasdomain'] = 'Alias pour le domaine'; +$lng['domains']['noaliasdomain'] = 'Domaine sans alias'; + +/** + * E-mails + */ + +$lng['emails']['description'] = 'Ici, vous pouvez ajouter vos boîtes e-mails.

    Les informations pour configurer votre logiciel e-mail sont les suivantes :

    Nom du serveur : votre-domaine.com
    Identifiant : l\'adresse e-mail
    Mot de passe : le mot de passe que vous avez choisi'; +$lng['emails']['emailaddress'] = 'Adresse'; +$lng['emails']['emails_add'] = 'Ajouter une adresse e-mail'; +$lng['emails']['emails_edit'] = 'Changer une adresse e-mail'; +$lng['emails']['catchall'] = 'Catchall'; +$lng['emails']['iscatchall'] = 'Définir comme adresse "catchall" ?'; +$lng['emails']['account'] = 'Accès'; +$lng['emails']['account_add'] = 'Ajouter un accès'; +$lng['emails']['account_delete'] = 'Supprimer l\'accès'; +$lng['emails']['from'] = 'de'; +$lng['emails']['to'] = 'à'; +$lng['emails']['forwarders'] = 'Réexpédition'; +$lng['emails']['forwarder_add'] = 'Ajouter un renvoi'; + +/** + * FTP + */ + +$lng['ftp']['description'] = 'Ici, vous pouvez ajouter des accès FTP supplémentaires.
    Les changements, ainsi que l\'accès, sont immédiatement opérationnels.'; +$lng['ftp']['account_add'] = 'Ajouter un accès'; + +/** + * MySQL + */ + +$lng['mysql']['databasename'] = 'Nom de la base de données'; +$lng['mysql']['databasedescription'] = 'Description de la base de données'; +$lng['mysql']['database_create'] = 'Ajouter une base de données'; + +/** + * Extras + */ + +$lng['extras']['description'] = 'Ici, vous pouvez ajouter des extras, comme par exemple, la protection de dossiers du site.
    Il vous faudra patienter quelques minutes après chaque changement pour que la configuration soit activée.'; +$lng['extras']['directoryprotection_add'] = 'Ajouter une protection de dossier'; +$lng['extras']['view_directory'] = 'Aperçu du dossier'; +$lng['extras']['pathoptions_add'] = 'Ajouter des options sur le dossier'; +$lng['extras']['directory_browsing'] = 'Afficher le contenu des dossiers'; +$lng['extras']['pathoptions_edit'] = 'Modifier les options de dossier'; +$lng['extras']['error404path'] = '404'; +$lng['extras']['error403path'] = '403'; +$lng['extras']['error500path'] = '500'; +$lng['extras']['error401path'] = '401'; +$lng['extras']['errordocument404path'] = 'Emplacement du document "Erreur 404"'; +$lng['extras']['errordocument403path'] = 'Emplacement du document "Erreur 403"'; +$lng['extras']['errordocument500path'] = 'Emplacement du document "Erreur 500"'; +$lng['extras']['errordocument401path'] = 'Emplacement du document "Erreur 401"'; + +/** + * Errors + */ + +$lng['error']['error'] = 'Erreur'; +$lng['error']['directorymustexist'] = 'Le dossier que vous avez choisi n\'existe pas. Veuillez ajouter le dossier avec votre client FTP.'; +$lng['error']['filemustexist'] = 'Le fichier que vous avez sélectionné n\'existe pas.'; +$lng['error']['allresourcesused'] = 'Vous avez déjà utilisé toutes les ressources.'; +$lng['error']['domains_cantdeletemaindomain'] = 'Vous ne pouvez pas supprimer un domaine qui est utilisé pour des adresses e-mails.'; +$lng['error']['domains_canteditdomain'] = 'Vous n\'avez pas le droit de configurer ce domaine.'; +$lng['error']['domains_cantdeletedomainwithemail'] = 'Vous ne pouvez pas supprimer un domaine qui est utilisé pour des e-mails. Vous devez d\'abord supprimer toutes les adresses e-mails qu\'il contient.'; +$lng['error']['firstdeleteallsubdomains'] = 'Il faut d\'abord supprimer tous les sous-domaines avant d\'ajouter un domaine "wildcard".'; +$lng['error']['youhavealreadyacatchallforthisdomain'] = 'Vous avez déjà défini une adresse "catchall" pour ce domaine.'; +$lng['error']['ftp_cantdeletemainaccount'] = 'Vous ne pouvez pas supprimer votre accès principal.'; +$lng['error']['login'] = 'Identifiant / mot de passe invalide.'; +$lng['error']['login_blocked'] = 'Cet identifiant a été bloqué à cause de nombreuses tentatives de connexions invalides.
    Veuillez réessayer dans ' . $settings['login']['deactivatetime'] . ' secondes.'; +$lng['error']['notallreqfieldsorerrors'] = 'Vous n\'avez pas rempli toutes les cases obligatoires ou vous les avez remplis avec des informations invalides.'; +$lng['error']['oldpasswordnotcorrect'] = 'L\'ancien mot de passe n\'est pas correct.'; +$lng['error']['youcantallocatemorethanyouhave'] = 'Vous ne pouvez pas distribuer plus de ressources qu\'il n\'en reste.'; +$lng['error']['mustbeurl'] = 'Vous n\'avez pas entré une adresse URL valide.'; +$lng['error']['invalidpath'] = 'Vous n\'avez pas choisi une adresse URL valide (probablement à cause de problèmes avec le listing de dossiers ?)'; +$lng['error']['stringisempty'] = 'Entrée manquante'; +$lng['error']['stringiswrong'] = 'Entrée invalide'; +$lng['error']['myloginname'] = '"' . $lng['login']['username'] . '"'; +$lng['error']['mypassword'] = '"' . $lng['login']['password'] . '"'; +$lng['error']['oldpassword'] = '"' . $lng['changepassword']['old_password'] . '"'; +$lng['error']['newpassword'] = '"' . $lng['changepassword']['new_password'] . '"'; +$lng['error']['newpasswordconfirm'] = '"' . $lng['changepassword']['new_password_confirm'] . '"'; +$lng['error']['newpasswordconfirmerror'] = 'Le nouveau mot de passe et sa confirmation ne sont pas identiques pas.'; +$lng['error']['myname'] = '"' . $lng['customer']['name'] . '"'; +$lng['error']['myfirstname'] = '"' . $lng['customer']['firstname'] . '"'; +$lng['error']['emailadd'] = '"' . $lng['customer']['email'] . '"'; +$lng['error']['mydomain'] = '"domaine"'; +$lng['error']['mydocumentroot'] = '"Documentroot"'; +$lng['error']['loginnameexists'] = 'L\'identifiant "%s" existe déjà.'; +$lng['error']['emailiswrong'] = 'L\'adresse "%s" contient des signes invalides ou est incomplète.'; +$lng['error']['loginnameiswrong'] = 'L\'identifiant "%s" contient des signes invalides.'; +$lng['error']['userpathcombinationdupe'] = 'Cette combinaison d\'identifiant et de dossier existe déjà.'; +$lng['error']['patherror'] = 'Erreur générale ! Le dossier ne doit pas être vide.'; +$lng['error']['errordocpathdupe'] = 'Il y a déjà une option concernant le dossier "%s".'; +$lng['error']['adduserfirst'] = 'Vous devez d\'abord ajouter un.'; +$lng['error']['domainalreadyexists'] = 'Le domaine "%s" existe déjà.'; +$lng['error']['nolanguageselect'] = 'Aucune langue choisis.'; +$lng['error']['nosubjectcreate'] = 'Il faut entrer un sujet.'; +$lng['error']['nomailbodycreate'] = 'Il faut entrer un corps de texte.'; +$lng['error']['templatenotfound'] = 'Aucun modèle trouvé.'; +$lng['error']['alltemplatesdefined'] = 'Vous avez déjà appliqué des modèles pour toutes les langues.'; +$lng['error']['wwwnotallowed'] = 'Un sous-domaine ne peut pas s\'appeler www.'; +$lng['error']['subdomainiswrong'] = 'Le sous-domaine "%s" contient des signes invalides.'; +$lng['error']['domaincantbeempty'] = 'Le nom de domaine ne doit pas être vide.'; +$lng['error']['domainexistalready'] = 'Le domaine "%s" existe déjà.'; +$lng['error']['domainisaliasorothercustomer'] = 'L\'alias du domaine choisi est soit un alias existant d\'un autre client ou soit fait référence à lui même.'; +$lng['error']['emailexistalready'] = 'L\'adresse "%s" existe déjà.'; +$lng['error']['maindomainnonexist'] = 'Le domaine "%s" n\'existe pas.'; +$lng['error']['destinationnonexist'] = 'Veuillez écrire votre adresse de renvoi à l\'emplacement "à".'; +$lng['error']['destinationalreadyexistasmail'] = 'Le renvoi vers l\'adresse "%s" existe déjà comme adresse active.'; +$lng['error']['destinationalreadyexist'] = 'Il existe déjà une réexpédition vers l\'adresse "%s".'; +$lng['error']['destinationiswrong'] = 'L\'adresse "%s" contient des signes invalides ou est incomplète.'; +$lng['error']['domainname'] = $lng['domains']['domainname']; +$lng['error']['youcantdeletechangemainadmin'] = 'Pour des raisons de sécurité, il n\'est pas possible de supprimer ou modifier l\'administrateur principal.'; +$lng['error']['loginnameissystemaccount'] = 'Vous ne pouvez pas créer un compte identique au compte système, veuillez réessayer avec un autre nom.'; + +/** + * Questions + */ + +$lng['question']['question'] = 'Question de sécurité'; +$lng['question']['admin_customer_reallydelete'] = 'Etes-vous sûr de vouloir supprimer le compte "%s" ?
    ATTENTION ! Toutes ses informations seront supprimées ! Une fois fait, il vous appartiendra de supprimer manuellement tous les dossiers du compte sur le système de fichiers.'; +$lng['question']['admin_domain_reallyenablemailsystemhostname'] = 'Etes-vous sûr de vouloir activé le serveur de nom en tant que serveur de mails ?'; +$lng['question']['admin_domain_reallydelete'] = 'Etes-vous sûr de vouloir supprimer le domaine "%s" ?'; +$lng['question']['admin_domain_reallydisablesecuritysetting'] = 'Etes-vous sûr de vouloir désactiver les modes de sécurité suivants : OpenBasedir et / où SafeMode ?'; +$lng['question']['admin_admin_reallydelete'] = 'Etes-vous sûr de vouloir supprimer l\'administrateur "%s" ?
    Tous ses comptes seront affectés à l\'administrateur principal.'; +$lng['question']['admin_template_reallydelete'] = 'Etes-vous sûr de vouloir supprimer le modèle "%s" ?'; +$lng['question']['domains_reallydelete'] = 'Etes-vous sûr de vouloir supprimer le domaine "%s" ?'; +$lng['question']['email_reallydelete'] = 'Etes-vous sûr de vouloir supprimer l\'adresse e-mail "%s" ? '; +$lng['question']['email_reallydelete_account'] = 'Etes-vous sûr de vouloir supprimer l\'accès e-mail "%s" ?'; +$lng['question']['email_reallydelete_forwarder'] = 'Etes-vous sûr de vouloir supprimer le renvoi vers "%s" ?'; +$lng['question']['extras_reallydelete'] = 'Etes-vous sûr de vouloir supprimer la protection du dossier "%s" ?'; +$lng['question']['extras_reallydelete_pathoptions'] = 'Etes-vous sûr de vouloir supprimer les options du dossier "%s" ?'; +$lng['question']['ftp_reallydelete'] = 'Etes-vous sûr de vouloir supprimer l\'accès ftp "%s" ?'; +$lng['question']['mysql_reallydelete'] = 'Etes-vous sûr de vouloir supprimer la base de données "%s" ?
    ATTENTION : Toutes les données seront perdues à jamais !'; +$lng['question']['admin_configs_reallyrebuild'] = 'Etes-vous sûr de vouloir régénérer les fichiers de configuration Apache et Bind ?'; + +/** + * Mails + */ + +$lng['mails']['pop_success']['mailbody'] = 'Bonjour,\n\nvotre accès POP3 / IMAP {EMAIL}\na été créé avec succès.\n\nCeci est un e-mail généré automatiquement, veuillez ne pas répondre à ce message.\n\nCordialement,\nL\'équipe SysCP\nhttp://www.syscp.org'; +$lng['mails']['pop_success']['subject'] = 'Accès POP3 / IMAP créé'; +$lng['mails']['createcustomer']['mailbody'] = 'Bonjour {FIRSTNAME} {NAME},\n\nVous trouverez ci-dessous vos informations d\'accès au panel d\'administration :\n\nAdresse d\'administration : http://demo.syscp.org\n\nIdentifiant : {USERNAME}\nMot de passe : {PASSWORD}\n\nCordialement,\nL\'équipe SysCP\nhttp://www.syscp.org\n'; +$lng['mails']['createcustomer']['subject'] = 'SysCP : Informations pour votre accès au panel d\'administration'; + +/** + * Admin + */ + +$lng['admin']['overview'] = 'Sommaire'; +$lng['admin']['ressourcedetails'] = 'Ressources utilisées'; +$lng['admin']['systemdetails'] = 'Informations du système'; +$lng['admin']['syscpdetails'] = 'Informations de SysCP'; +$lng['admin']['installedversion'] = 'Version installée'; +$lng['admin']['latestversion'] = 'Dernière version en date'; +$lng['admin']['lookfornewversion']['clickhere'] = 'Vérifier par internet'; +$lng['admin']['lookfornewversion']['error'] = 'Erreur pour vérifier la dernière version'; +$lng['admin']['resources'] = 'Ressources'; +$lng['admin']['customer'] = 'Compte'; +$lng['admin']['customers'] = 'Comptes'; +$lng['admin']['customer_add'] = 'Ajouter un compte'; +$lng['admin']['customer_edit'] = 'Modifier un compte'; +$lng['admin']['domains'] = 'Domaines'; +$lng['admin']['domain_add'] = 'Ajouter un domaine'; +$lng['admin']['domain_edit'] = 'Modifier le domaine'; +$lng['admin']['subdomainforemail'] = 'Sous-domaines comme domaine e-mail'; +$lng['admin']['admin'] = 'Administrateur'; +$lng['admin']['admins'] = 'Administrateurs'; +$lng['admin']['admin_add'] = 'Ajouter un administrateur'; +$lng['admin']['admin_edit'] = 'Modifier un administrateur'; +$lng['admin']['customers_see_all'] = 'Peut voir tous les comptes ?'; +$lng['admin']['domains_see_all'] = 'Peut voir tous les Domaines ?'; +$lng['admin']['change_serversettings'] = 'Peut modifier la configuration du serveur ?'; +$lng['admin']['server'] = 'Serveur'; +$lng['admin']['serversettings'] = 'Paramètres'; +$lng['admin']['rebuildconf'] = 'Régénérer la configuration'; +$lng['admin']['stdsubdomain'] = 'Sous-domaine type'; +$lng['admin']['stdsubdomain_add'] = 'Ajouter un sous-domaine type'; +$lng['admin']['phpenabled'] = 'PHP activé'; +$lng['admin']['deactivated'] = 'Désactiver'; +$lng['admin']['deactivated_user'] = 'Désactiver l\'utilisateur'; +$lng['admin']['sendpassword'] = 'Envoyer le mot de passe'; +$lng['admin']['ownvhostsettings'] = 'Configuration spéciale du vHost'; +$lng['admin']['configfiles']['serverconfiguration'] = 'Exemple de configuration'; +$lng['admin']['configfiles']['files'] = 'Fichiers de configuration : Veuillez créer ou modifier les fichiers suivants avec le contenu ci-dessous.

    IMPORTANT : Le mot de passe MySQL n\'est pas donné dans les informations ci-dessous
    pour des raisons de sécurité. Veuillez donc remplacer les "MYSQL_PASSWORD"
    manuellement avec le mot de passe correspondant. En cas d\'oubli, vous pouvez le retrouver dans
    le fichier "lib/userdata.inc.php".'; +$lng['admin']['configfiles']['commands'] = 'Commandes : Veuillez exécuter les commandes ci-dessous dans le shell.'; +$lng['admin']['configfiles']['restart'] = 'Redémarrage : Veuillez exécuter les commandes ci-dessous pour
    prendre en compte les changements.'; +$lng['admin']['templates']['templates'] = 'Modèles'; +$lng['admin']['templates']['template_add'] = 'Ajouter un modèle'; +$lng['admin']['templates']['template_edit'] = 'Modifier un modèle'; +$lng['admin']['templates']['action'] = 'Action'; +$lng['admin']['templates']['email'] = 'E-mail'; +$lng['admin']['templates']['subject'] = 'Référence'; +$lng['admin']['templates']['mailbody'] = 'Texte de l\'e-mail'; +$lng['admin']['templates']['createcustomer'] = 'E-mail de bienvenue pour les nouveaux clients'; +$lng['admin']['templates']['pop_success'] = 'E-mail de bienvenue pour les nouveaux accès e-mail'; +$lng['admin']['templates']['template_replace_vars'] = 'Les variables qui seront remplacées dans le template :'; +$lng['admin']['templates']['FIRSTNAME'] = 'Sera remplacé par le prénom.'; +$lng['admin']['templates']['NAME'] = 'Sera remplacé par le nom.'; +$lng['admin']['templates']['USERNAME'] = 'Sera remplacé par le login.'; +$lng['admin']['templates']['PASSWORD'] = 'Sera remplacé par le mot de passe du client.'; +$lng['admin']['templates']['EMAIL'] = 'Sera remplacé par l\'accès e-mail.'; + +/** + * Serversettings + */ + +$lng['serversettings']['session_timeout']['title'] = 'Durée d\'inactivité maximale'; +$lng['serversettings']['session_timeout']['description'] = 'Combien de secondes d\'inactivité avant qu\'une session ne se ferme ?'; +$lng['serversettings']['accountprefix']['title'] = 'Préfix des comptes'; +$lng['serversettings']['accountprefix']['description'] = 'Quel préfix doivent avoir les comptes ?'; +$lng['serversettings']['mysqlprefix']['title'] = 'Préfix SQL'; +$lng['serversettings']['mysqlprefix']['description'] = 'Quel préfix doivent avoir les bases de données ?'; +$lng['serversettings']['ftpprefix']['title'] = 'Préfix FTP'; +$lng['serversettings']['ftpprefix']['description'] = 'Quel préfix doivent avoir les accès FTP ?'; +$lng['serversettings']['documentroot_prefix']['title'] = 'Dossier de stockage'; +$lng['serversettings']['documentroot_prefix']['description'] = 'Où doivent être stockés tous les dossiers et fichiers des différents comptes ?'; +$lng['serversettings']['logfiles_directory']['title'] = 'Dossier des fichiers de log'; +$lng['serversettings']['logfiles_directory']['description'] = 'Où doivent être stockés les archives des logs d\'accès du serveur Web ?'; +$lng['serversettings']['ipaddress']['title'] = 'Adresse IP'; +$lng['serversettings']['ipaddress']['description'] = 'Quelle est l\'adresse IP du serveur ?'; +$lng['serversettings']['hostname']['title'] = 'Nom d\'hôte'; +$lng['serversettings']['hostname']['description'] = 'Quel est le nom d\'hôte (hostname) du serveur ?'; +$lng['serversettings']['apachereload_command']['title'] = 'Commande de rechargement d\'Apache'; +$lng['serversettings']['apachereload_command']['description'] = 'Quelle est la commande pour recharger / redémarrer Apache ?'; +$lng['serversettings']['apacheconf_filename']['title'] = 'Nom du fichier de configuration Apache'; +$lng['serversettings']['apacheconf_filename']['description'] = 'Dans quel fichier souhaitez-vous enregistrer la configuration Apache ?'; +$lng['serversettings']['bindconf_directory']['title'] = 'Emplacement du dossier de configuration de Bind / Named'; +$lng['serversettings']['bindconf_directory']['description'] = 'Où doit être stocké la configuration de Bind / Named ?'; +$lng['serversettings']['bindreload_command']['title'] = 'Commande de rechargement de Bind / Named'; +$lng['serversettings']['bindreload_command']['description'] = 'Quelle est la commande pour recharger / redémarrer Bind / Named ?'; +$lng['serversettings']['binddefaultzone']['title'] = 'Nom du fichier de zone par défaut Bind / Named'; +$lng['serversettings']['binddefaultzone']['description'] = 'Quel est le nom du fichier de zone par défaut pour Bind / Named ?'; +$lng['serversettings']['vmail_uid']['title'] = 'UID des e-mails'; +$lng['serversettings']['vmail_uid']['description'] = 'Quel UID doivent avoir les e-mails ?'; +$lng['serversettings']['vmail_gid']['title'] = 'GID des e-mails'; +$lng['serversettings']['vmail_gid']['description'] = 'Quel GID doivent avoir les e-mails ?'; +$lng['serversettings']['vmail_homedir']['title'] = 'Emplacement des e-mails'; +$lng['serversettings']['vmail_homedir']['description'] = 'Dans quel dossier doivent être stocker les e-mails ?'; +$lng['serversettings']['adminmail']['title'] = 'Adresse e-mail de l\'administrateur'; +$lng['serversettings']['adminmail']['description'] = 'Quelle est l\'adresse e-mail par défaut des e-mails envoyés par SysCP ?'; +$lng['serversettings']['phpmyadmin_url']['title'] = 'Adresse URL de phpMyAdmin'; +$lng['serversettings']['phpmyadmin_url']['description'] = 'A quelle adresse se trouve phpMyAdmin ?'; +$lng['serversettings']['webmail_url']['title'] = 'Adresse URL du WebMail'; +$lng['serversettings']['webmail_url']['description'] = 'A quelle adresse se trouve le WebMail ?'; +$lng['serversettings']['webftp_url']['title'] = 'Adresse URL du WebFTP'; +$lng['serversettings']['webftp_url']['description'] = 'A quelle adresse se trouve le WebFTP ?'; +$lng['serversettings']['language']['description'] = 'Quelle langue est la langue par défaut ?'; +$lng['serversettings']['maxloginattempts']['title'] = 'Nombre d\'essais maximum avant désactivation'; +$lng['serversettings']['maxloginattempts']['description'] = 'Nombre de tentatives maximum avant la désactivation de l\'accès.'; +$lng['serversettings']['deactivatetime']['title'] = 'Durée de la désactivation'; +$lng['serversettings']['deactivatetime']['description'] = 'Durée (en secondes) pendant laquelle l\'accès sera désactivé.'; +$lng['serversettings']['pathedit']['title'] = 'Mode de sélection des dossiers'; +$lng['serversettings']['pathedit']['description'] = 'Choisir un dossier par une liste déroulante ou l\'entrer manuellement ?'; +$lng['serversettings']['nameservers']['title'] = 'Serveurs de nom «Nameservers»'; +$lng['serversettings']['nameservers']['description'] = 'Une liste séparée par des virgules contenant les noms d\'hôtes de tous les serveurs de noms. Le premier dans la liste sera le serveur primaire.'; +$lng['serversettings']['mxservers']['title'] = 'Serveurs de messagerie «MX»'; +$lng['serversettings']['mxservers']['description'] = 'Une liste séparée par des virgules contenant les serveurs de messagerie avec leur poid : un nombre et le nom d\'hôte séparé par un espace; par exemple : "10 mx.exemple.com".'; + +/** + * CHANGED BETWEEN 1.2.12 and 1.2.13 + */ + +$lng['mysql']['description'] = 'Ici, vous pouvez ajouter et effacer des bases de données MySQL.
    Les changements, ainsi que les bases de données, sont immédiatement opérationnels.
    Dans le menu, vous trouverez un lien vers phpMyAdmin, avec lequel vous pouvez gérer vos bases de données.

    L\'accès aux bases de données depuis les scripts PHP fonctionne comme suit : (Il faut remplacer les valeurs en italique par vos informations !)

    $connexion = mysql_connect(\'localhost\', \'Votre identifiant\', \'Votre mot de passe\');
    mysql_select_db(\'Le nom de la base de données\', $connexion);'; + +/** + * ADDED BETWEEN 1.2.12 and 1.2.13 + */ + +$lng['admin']['cronlastrun'] = 'Dernière tâche "cron"'; +$lng['serversettings']['paging']['title'] = 'Nombre de résultats par page'; +$lng['serversettings']['paging']['description'] = 'Nombre de résultats par page ? (0 = Désactive la pagination)'; +$lng['error']['ipstillhasdomains'] = 'La combinaison IP / port est encore utilisée, veuillez réassigner le ou les domaines existant(s) avec cette adresse IP / port concerné(s) à une autre combinaison IP / port avant de supprimer celle-ci.'; +$lng['error']['cantdeletedefaultip'] = 'Vous ne pouvez pas supprimer cette combinaison IP / Port, veuillez d\'abord attribuer une autre combinaison IP / Port par défaut à ce revendeur avant de supprimer celle-ci.'; +$lng['error']['cantdeletesystemip'] = 'Vous ne pouvez pas créer, modifier ou supprimer l\'IP du système.'; +$lng['error']['myipaddress'] = '"IP"'; +$lng['error']['myport'] = '"Port"'; +$lng['error']['myipdefault'] = 'Choissez une combinaison IP / port par défaut.'; +$lng['error']['myipnotdouble'] = 'Cette combinaison existe déjà.'; +$lng['question']['admin_ip_reallydelete'] = 'Etes-vous sûr de vouloir supprimer l\'adresse IP "%s" ?'; +$lng['admin']['ipsandports']['ipsandports'] = 'IPs et ports'; +$lng['admin']['ipsandports']['add'] = 'Ajouter une IP / port'; +$lng['admin']['ipsandports']['edit'] = 'Modifier une IP / port'; +$lng['admin']['ipsandports']['ipandport'] = 'IP / Port'; +$lng['admin']['ipsandports']['ip'] = 'IP'; +$lng['admin']['ipsandports']['port'] = 'Port'; + +// ADDED IN 1.2.13-rc3 + +$lng['error']['cantchangesystemip'] = 'Vous ne pouvez pas modifier l\'adresse IP du système, ni en ajouter de nouvelle.'; +$lng['question']['admin_domain_reallydocrootoutofcustomerroot'] = 'Etes-vous sûr de vouloir différencier la racine principale de ce domaine de la racine principale du client ?'; + +// ADDED IN 1.2.14-rc1 + +$lng['admin']['memorylimitdisabled'] = 'Désactivé'; +$lng['domain']['openbasedirpath'] = 'Dossier "OpenBasedir"'; +$lng['domain']['docroot'] = 'Identique au dossier ci-dessus'; +$lng['domain']['homedir'] = 'Dossier Principal'; +$lng['admin']['valuemandatory'] = 'Cette valeur est obligatoire'; +$lng['admin']['valuemandatorycompany'] = 'Vous devez indiquer au moins l\'une des 3 valeurs suivantes : "nom" ou "prénom" ou "entreprise"'; +$lng['menue']['main']['username'] = 'Utilisateur : '; +$lng['panel']['urloverridespath'] = 'URL (supplante la valeur dossier)'; +$lng['panel']['pathorurl'] = 'Dossier ou URL'; +$lng['error']['sessiontimeoutiswrong'] = 'Seule une valeur numérique pour le temps d\'inactivité est autorisée.'; +$lng['error']['maxloginattemptsiswrong'] = 'Seule une valeur numérique pour "nombre maximum de tentative de connexion" est autorisée.'; +$lng['error']['deactivatetimiswrong'] = 'Seule une valeur numérique pour la durée de désactivation est autorisée.'; +$lng['error']['accountprefixiswrong'] = 'Le "Préfixe client" n\'est pas valide.'; +$lng['error']['mysqlprefixiswrong'] = 'Le "Préfixe SQL" n\'est pas valide.'; +$lng['error']['ftpprefixiswrong'] = 'Le "Préfixe FTP" n\'est pas valide.'; +$lng['error']['ipiswrong'] = 'L\'"Adresse IP" n\'est pas valide.'; +$lng['error']['vmailuidiswrong'] = 'L\'"UID e-mail" est incorrect. Seul un UID numérique est autorisé.'; +$lng['error']['vmailgidiswrong'] = 'Le "GID e-mail" est incorrect. Seul un GID numérique est autorisé.'; +$lng['error']['adminmailiswrong'] = 'L\'adresse e-mail de l\'administrateur est incorrect. Seulement une adresse e-mail valide est autorisé.'; +$lng['error']['pagingiswrong'] = 'La valeur "Nombre de résultats page" est incorrecte. Seul une valeur numérique est autorisée.'; +$lng['error']['phpmyadminiswrong'] = 'Le lien pour phpMyAdmin n\'est pas valide.'; +$lng['error']['webmailiswrong'] = 'Le lien pour le WebMail n\'est pas valide.'; +$lng['error']['webftpiswrong'] = 'Le lien pour le WebFTP n\'est pas valide.'; +$lng['domains']['hasaliasdomains'] = 'Le domaine possède un ou des alias.'; +$lng['domains']['istopleveldomain'] = 'Est le nom de domaine principal'; +$lng['serversettings']['defaultip']['title'] = 'IP / Port par défaut'; +$lng['serversettings']['defaultip']['description'] = 'Quel est l\'IP / Port par défaut ?'; +$lng['domains']['statstics'] = 'Fréquentation'; +$lng['panel']['ascending'] = 'ascendant'; +$lng['panel']['decending'] = 'descendant'; +$lng['panel']['search'] = 'Rechercher'; +$lng['panel']['used'] = 'utilisé'; + +// ADDED IN 1.2.14-rc3 + +$lng['panel']['translator'] = 'Traducteur(s)'; + +// ADDED IN 1.2.14-rc4 + +$lng['error']['stringformaterror'] = 'La valeur pour "%s" n\'est pas dans un format reconnu.'; + +// ADDED IN 1.2.15-rc1 + +$lng['admin']['serversoftware'] = 'Logiciel Serveur'; +$lng['admin']['phpversion'] = 'Version de PHP'; +$lng['admin']['phpmemorylimit'] = 'Limite mémoire de PHP'; +$lng['admin']['mysqlserverversion'] = 'Version du serveur MySQL'; +$lng['admin']['mysqlclientversion'] = 'Version du client MySQL'; +$lng['admin']['webserverinterface'] = 'Interface Web'; +$lng['domains']['isassigneddomain'] = 'Le domaine est attribué'; +$lng['serversettings']['phpappendopenbasedir']['title'] = 'Dossier(s) de l\'OpenBasedir'; +$lng['serversettings']['phpappendopenbasedir']['description'] = 'Liste de dossiers séparée par des virgules qui sera ajouté à la variable "OpenBasedir" des conteneurs vHosts.'; + +// CHANGED IN 1.2.15-rc1 + +$lng['error']['loginnameissystemaccount'] = 'Vous ne pouvez pas créer de compte ressemblant aux comptes système (ex : "%s"). Veuillez entrer un autre nom de compte.'; +$lng['error']['youcantdeleteyourself'] = 'Vous ne pouvez pas supprimer votre propre compte pour des raisons évidente de sécurité ...'; +$lng['error']['youcanteditallfieldsofyourself'] = 'Note : Vous ne pouvez pas éditer tous les champs de votre propre compte pour des raisons de sécurité.'; + +// ADDED IN 1.2.16-svn1 + +$lng['serversettings']['natsorting']['title'] = 'Utiliser un tri naturel dans les différentes vues'; +$lng['serversettings']['natsorting']['description'] = 'Trier les listes comme web1 -> web2 -> etc ... -> web11 au lieu de web1 -> web11 -> web2.'; + +// ADDED IN 1.2.16-svn2 + +$lng['serversettings']['deactivateddocroot']['title'] = 'Dossier "DocumentRoot" pour les utilisateurs désactivés'; +$lng['serversettings']['deactivateddocroot']['description'] = 'Quand un utilisateur est désactivé, ce dossier sera utilisé comme dossier racine pour le serveur Web. Laissez vide pour ne pas créer de vHost et ne rien afficher du tout lorsque l\'utilisateur est désactivé.'; + +// ADDED IN 1.2.16-svn4 + +$lng['panel']['reset'] = 'Ignorer les changements'; +$lng['admin']['accountsettings'] = 'Paramètres du compte'; +$lng['admin']['panelsettings'] = 'Paramètres du panel'; +$lng['admin']['systemsettings'] = 'Paramètres du système'; +$lng['admin']['webserversettings'] = 'Paramètres du serveur Web'; +$lng['admin']['mailserversettings'] = 'Paramètres du serveur de Mail'; +$lng['admin']['nameserversettings'] = 'Paramètres du serveur de Noms'; +$lng['admin']['updatecounters'] = 'Recalculer les ressources utilisées'; +$lng['question']['admin_counters_reallyupdate'] = 'Etes-vous sûr de vouloir recalculer les ressources utilisées ?'; +$lng['panel']['pathDescription'] = 'Si le dossier n\'existe pas, il sera créé automatiquement.'; + +// ADDED IN 1.2.16-svn6 + +$lng['mails']['trafficninetypercent']['mailbody'] = 'Bonjour {FIRSTNAME} {NAME},\n\nVous utilisez {TRAFFICUSED} Mo sur {TRAFFIC} Mo de votre quota de trafic.\nCe dernier est à plus de 90%.\n\nCordialement,\nL\'équipe SysCP.'; +$lng['mails']['trafficninetypercent']['subject'] = 'Limite de trafic bientôt atteinte.'; +$lng['admin']['templates']['trafficninetypercent'] = 'E-mail de notification pour les utilisateurs, lorsque leur taux de trafic atteint plus de 90%.'; +$lng['admin']['templates']['TRAFFIC'] = 'Sera remplacé par le taux de trafic qui a été attribué à l\'utilisateur.'; +$lng['admin']['templates']['TRAFFICUSED'] = 'Sera remplacé par le taux de trafic qui a été consommé par l\'utilisateur.'; + +// ADDED IN 1.2.16-svn7 + +$lng['admin']['subcanemaildomain']['never'] = 'Jamais'; +$lng['admin']['subcanemaildomain']['choosableno'] = 'A choisir, par défaut : non'; +$lng['admin']['subcanemaildomain']['choosableyes'] = 'A choisir, par défaut : oui'; +$lng['admin']['subcanemaildomain']['always'] = 'Toujours'; +$lng['changepassword']['also_change_webalizer'] = 'Changer aussi le mot de passe des statistiques Webalizer ?'; + +// ADDED IN 1.2.16-svn8 + +$lng['serversettings']['mailpwcleartext']['title'] = 'Sauvegarder aussi les mots de passe des comptes e-mails de façon décrypter dans la base de données'; +$lng['serversettings']['mailpwcleartext']['description'] = 'Si cela est à Oui, tous les mots de passe seront aussi sauvegarder de façon décrypter dans la table mail_users (en texte clair pour toutes personnes qui auraient accès à la base de données). Activer cette option, uniquement si vous en avez vraiment besoin !'; +$lng['serversettings']['mailpwcleartext']['removelink'] = 'Cliquez ici pour retirer tous les mots de passe en texte clair de la base de données.'; +$lng['question']['admin_cleartextmailpws_reallywipe'] = 'Etes-vous sûr de vouloir retirer tous les mots de passe en clairs des comptes e-mails de la table mail_users ? Cette action ne peut être annulée !'; +$lng['admin']['configfiles']['overview'] = 'Aperçu'; +$lng['admin']['configfiles']['wizard'] = 'Assistant'; +$lng['admin']['configfiles']['distribution'] = 'Distribution'; +$lng['admin']['configfiles']['service'] = 'Service'; +$lng['admin']['configfiles']['daemon'] = 'Démon'; +$lng['admin']['configfiles']['http'] = 'Serveur Web (HTTP)'; +$lng['admin']['configfiles']['dns'] = 'Serveur de Noms (DNS)'; +$lng['admin']['configfiles']['mail'] = 'Serveur de Mails (IMAP/POP3)'; +$lng['admin']['configfiles']['smtp'] = 'Serveur de Mails (SMTP)'; +$lng['admin']['configfiles']['ftp'] = 'Serveur FTP'; +$lng['admin']['configfiles']['etc'] = 'Autres (Système)'; +$lng['admin']['configfiles']['choosedistribution'] = '-- Choisissez une distribution --'; +$lng['admin']['configfiles']['chooseservice'] = '-- Choisissez un service --'; +$lng['admin']['configfiles']['choosedaemon'] = '-- Choisissez un démon --'; +$lng['admin']['trafficlastrun'] = 'Dernier calcul du trafic'; + +// ADDED IN 1.2.16-svn10 + +$lng['serversettings']['ftpdomain']['title'] = 'Comptes FTP @domaine'; +$lng['serversettings']['ftpdomain']['description'] = 'Les utilisateurs peuvent-ils créer des comptes FTP de la forme utilisateur@domaine.com ?'; +$lng['panel']['back'] = 'Retour'; + +// ADDED IN 1.2.16-svn12 + +$lng['serversettings']['mod_log_sql']['title'] = 'Sauvegarder temporairement les logs dans la base de données'; +$lng['serversettings']['mod_log_sql']['description'] = 'Utiliser mod_log_sql pour sauvegarder temporairement les requêtes Web.
    Cela à besoin d\'une configuration spécifique d\'Apache !'; +$lng['serversettings']['mod_fcgid']['title'] = 'Utiliser PHP par mod_fcgid / suexec'; +$lng['serversettings']['mod_fcgid']['description'] = 'Utiliser mod_fcgid / suexec / libnss_mysql pour lancer PHP avec le compte correspondant à l\'utilisateur ?
    Cela à besoin d\'une configuration spécifique d\'Apache !'; +$lng['serversettings']['sendalternativemail']['title'] = 'Utiliser une adresse e-mail alternative'; +$lng['serversettings']['sendalternativemail']['description'] = 'Envoyer le mot de passe du compte e-mail à une adresse différents pour la création du compte e-mail ?'; +$lng['emails']['alternative_emailaddress'] = 'Adresse e-mail alternative'; +$lng['mails']['pop_success_alternative']['mailbody'] = 'Bonjour,\n\nVotre compte e-mail {EMAIL} a été correctement créé.\n\nVotre mot de passe est : {PASSWORD}.\n\nCeci est un message généré automatiquemenent, veuillez ne pas répondre à cet e-mail car il ne serait être consulter.\n\nCordialement,\nL\'équipe SysCP.'; +$lng['mails']['pop_success_alternative']['subject'] = 'Compte e-mail correctement créé'; +$lng['admin']['templates']['pop_success_alternative'] = 'Message de bienvenue envoyé à l\'adresse e-mail alternative pour les nouveaux comptes e-mails'; +$lng['admin']['templates']['EMAIL_PASSWORD'] = 'Remplacer par le mot de passe du compte POP3 / IMAP.'; + +// ADDED IN 1.2.16-svn13 + +$lng['error']['documentrootexists'] = 'Le dossier "%s" existe déjà pour cet utilisateur. Veuillez le supprimer / déplacer avant de réessayer l\'ajout de cet utilisateur.'; + +// ADDED IN 1.2.16-svn14 + +$lng['serversettings']['apacheconf_vhost']['title'] = 'Dossier / fichier de configuration des vHosts pour Apache'; +$lng['serversettings']['apacheconf_vhost']['description'] = 'Où doit être stocké le fichier de configuration des vHosts ? Vous pouvez soit entrer le nom d\'un fichier (tous les vHosts dans un seul fichier), soit le nom d\'un dossier (chacun des vHosts dans un fichier séparé du dossier).'; +$lng['serversettings']['apacheconf_diroptions']['title'] = 'Fichier / dossier de configuration des options des dossiers pour Apache'; +$lng['serversettings']['apacheconf_diroptions']['description'] = 'Où doit être stocké le fichier de configuration des options de dossiers ? Vous pouvez soit entrer le nom d\'un fichier (toutes les options des dossiers dans un seul fichier), soit le nom d\'un dossier (chacune des options de dossier dans un fichier séparé du dossier).'; +$lng['serversettings']['apacheconf_htpasswddir']['title'] = 'Dossier du fichier htpasswd pour Apache'; +$lng['serversettings']['apacheconf_htpasswddir']['description'] = 'Où doit être stocké le fichier de configuration de protection des dossiers "htpasswd" pour Apache ?'; + +// ADDED IN 1.2.16-svn15 + +$lng['error']['formtokencompromised'] = 'La requête semble compromise. Pour des raisons de sécurité, vous avez été déconnecté.'; +$lng['serversettings']['mysql_access_host']['title'] = 'Hôtes de connexion MySQL'; +$lng['serversettings']['mysql_access_host']['description'] = 'Une liste séparée par des virgules contenant la liste des hôtes depuis lesquels les utilisateurs sont autorisés à se connecter au serveur MySQL.'; + +// ADDED IN 1.2.18-svn1 + +$lng['admin']['ipsandports']['create_listen_statement'] = 'Déclaration des ports d\'écoute'; +$lng['admin']['ipsandports']['create_namevirtualhost_statement'] = 'Déclaration des hôtes virtuels "NameVirtualHost"'; +$lng['admin']['ipsandports']['create_vhostcontainer'] = 'Déclaration des conteneurs virtuels "vHost"'; +$lng['admin']['ipsandports']['create_vhostcontainer_servername_statement'] = 'Déclaration des noms d\'hôtes "ServerName" dans les conteneurs virtuels "vHost"'; + +// ADDED IN 1.2.18-svn2 + +$lng['admin']['webalizersettings'] = 'Paramètres pour Webalizer'; +$lng['admin']['webalizer']['normal'] = 'Normal'; +$lng['admin']['webalizer']['quiet'] = 'Silencieux'; +$lng['admin']['webalizer']['veryquiet'] = 'Aucune sortie'; +$lng['serversettings']['webalizer_quiet']['title'] = 'Sortie Webalizer'; +$lng['serversettings']['webalizer_quiet']['description'] = 'Verbosité du programme Webalizer'; + +// ADDED IN 1.2.18-svn3 + +$lng['ticket']['admin_email'] = 'root@localhost'; +$lng['ticket']['noreply_email'] = 'billets@syscp'; +$lng['admin']['ticketsystem'] = 'Système de billets'; +$lng['menue']['ticket']['ticket'] = 'Billets de support'; +$lng['menue']['ticket']['categories'] = 'Catégories de support'; +$lng['menue']['ticket']['archive'] = 'Archives de billets'; +$lng['ticket']['description'] = 'Entrez une description !'; +$lng['ticket']['ticket_new'] = 'Ouvrir un nouveau billet'; +$lng['ticket']['ticket_reply'] = 'Réponse au billet'; +$lng['ticket']['ticket_reopen'] = 'Réouvrir le billet'; +$lng['ticket']['ticket_newcateory'] = 'Créer une nouvelle catégorie'; +$lng['ticket']['ticket_editcateory'] = 'Editer la catégorie'; +$lng['ticket']['ticket_view'] = 'Voir l\'historique du billet'; +$lng['ticket']['ticketcount'] = 'Billets'; +$lng['ticket']['ticket_answers'] = 'Réponses'; +$lng['ticket']['lastchange'] = 'Dernière action'; +$lng['ticket']['subject'] = 'Sujet'; +$lng['ticket']['status'] = 'Etat'; +$lng['ticket']['lastreplier'] = 'Dernière réponse de'; +$lng['ticket']['priority'] = 'Priorité'; +$lng['ticket']['low'] = 'Basse'; +$lng['ticket']['normal'] = 'Normale'; +$lng['ticket']['high'] = 'Haute'; +$lng['ticket']['unf_low'] = 'Basse'; +$lng['ticket']['unf_normal'] = 'Normale'; +$lng['ticket']['unf_high'] = 'Haute'; +$lng['ticket']['lastchange'] = 'Dernier changement'; +$lng['ticket']['lastchange_from'] = 'Depuis (jj.mm.aaaa)'; +$lng['ticket']['lastchange_to'] = 'Jusqu\'au (jj.mm.aaaa)'; +$lng['ticket']['category'] = 'Catégorie'; +$lng['ticket']['no_cat'] = 'Aucune'; +$lng['ticket']['message'] = 'Message'; +$lng['ticket']['show'] = 'Voir'; +$lng['ticket']['answer'] = 'Répondre'; +$lng['ticket']['close'] = 'Fermer'; +$lng['ticket']['reopen'] = 'Réouvrir'; +$lng['ticket']['archive'] = 'Archive'; +$lng['ticket']['ticket_delete'] = 'Effacer le billet'; +$lng['ticket']['lastarchived'] = 'Billets récemment archivés'; +$lng['ticket']['archivedtime'] = 'Archivé'; +$lng['ticket']['open'] = 'Ouvert'; +$lng['ticket']['wait_reply'] = 'Attente d\'une réponse'; +$lng['ticket']['replied'] = 'Répondu'; +$lng['ticket']['closed'] = 'Fermé'; +$lng['ticket']['staff'] = 'L\'équipe'; +$lng['ticket']['customer'] = 'Client'; +$lng['ticket']['old_tickets'] = 'Messages du billet'; +$lng['ticket']['search'] = 'Rechercher dans les archives'; +$lng['ticket']['nocustomer'] = 'Aucun choix'; +$lng['ticket']['archivesearch'] = 'Résultat de la recherche dans les archives'; +$lng['ticket']['noresults'] = 'Aucun billet trouvé'; +$lng['ticket']['notmorethanxopentickets'] = 'Pour éviter les abus, vous ne pouvez avoir plus de %s billets ouverts'; +$lng['ticket']['supportstatus'] = 'Etat du support'; +$lng['ticket']['supportavailable'] = 'Nos équipes de support sont disponibles et prêtes à vous assister.'; +$lng['ticket']['supportnotavailable'] = 'Nos équipes de support ne sont actuellement pas disponibles.'; +$lng['admin']['templates']['ticket'] = 'E-mail de notification pour les billets de support'; +$lng['admin']['templates']['SUBJECT'] = 'Sera remplacé par le sujet du billet de support.'; +$lng['admin']['templates']['new_ticket_for_customer'] = 'Informe le client que le billet a été envoyé'; +$lng['admin']['templates']['new_ticket_by_customer'] = 'Notifie l\'administrateur qu\'un nouveau billet a été ouvert par un client'; +$lng['admin']['templates']['new_reply_ticket_by_customer'] = 'Notifie l\'administrateur d\'une réponse du client au billet'; +$lng['admin']['templates']['new_ticket_by_staff'] = 'Informe le client qu\'un billet a été ouvert par l\'équipe de support'; +$lng['admin']['templates']['new_reply_ticket_by_staff'] = 'Informe le client d\'une réponse de l\'équipe de support au billet'; +$lng['mails']['new_ticket_for_customer']['mailbody'] = 'Bonjour {FIRSTNAME} {NAME},\n\nVotre demande de billet de support ayant comme sujet "{SUBJECT}" a été envoyé.\n\nVous receverez une notification lorsque votre billet aura une réponse.\n\nMerci,\nL\'équipe SysCP.'; +$lng['mails']['new_ticket_for_customer']['subject'] = 'Votre billet de support a été envoyé'; +$lng['mails']['new_ticket_by_customer']['mailbody'] = 'Bonjour administrateur,\n\nUn nouveau billet de support ayant comme sujet "{SUBJECT}" a été ouvert.\n\nVeuillez vous connecter pour consulter le billet.\n\nMerci,\nl\'équipe SysCP.'; +$lng['mails']['new_ticket_by_customer']['subject'] = 'Nouveau billet de support soumis'; +$lng['mails']['new_reply_ticket_by_customer']['mailbody'] = 'Bonjour administrateur,\n\nLe billet de support "{SUBJECT}" a reçu une réponse de la part du client.\n\nVeuillez vous connecter pour consulter le billet.\n\nMerci,\nL\'équipe SysCP.'; +$lng['mails']['new_reply_ticket_by_customer']['subject'] = 'Nouvelle réponse au billet de support'; +$lng['mails']['new_ticket_by_staff']['mailbody'] = 'Bonjour {FIRSTNAME} {NAME},\n\nUn billet de support ayant comme sujet "{SUBJECT}" a été ouvert pour vous par notre équipe.\n\nVeuillez vous connecter pour consulter le billet.\n\nMerci,\nL\'équipe SysCP.'; +$lng['mails']['new_ticket_by_staff']['subject'] = 'Nouvelle demande de support soumise'; +$lng['mails']['new_reply_ticket_by_staff']['mailbody'] = 'Bonjour {FIRSTNAME} {NAME},\n\nLe billet de support ayant comme sujet "{SUBJECT}" a reçu une réponse par notre équipe.\n\nVeuillez vous connecter pour consulter le billet.\n\nMerci,\nL\équipe SysCP.'; +$lng['mails']['new_reply_ticket_by_staff']['subject'] = 'Nouvelle réponse au billet de support'; +$lng['question']['ticket_reallyclose'] = 'Etes-vous sûr de vouloir clôturer le billet "%s" ?'; +$lng['question']['ticket_reallydelete'] = 'Etes-vous sûr de vouloir supprimer le billet "%s" ?'; +$lng['question']['ticket_reallydeletecat'] = 'Etes-vous sûr de vouloir supprimer la catégorie "%s" ?'; +$lng['question']['ticket_reallyarchive'] = 'Etes-vous sûr de vouloir archiver le billet "%s" ?'; +$lng['error']['mysubject'] = '"' . $lng['ticket']['subject'] . '"'; +$lng['error']['mymessage'] = '"' . $lng['ticket']['message'] . '"'; +$lng['error']['mycategory'] = '"' . $lng['ticket']['category'] . '"'; +$lng['error']['nomoreticketsavailable'] = 'Vous n\'avez plus de billets de disponibles. Veuillez contacter votre administrateur.'; +$lng['error']['nocustomerforticket'] = 'Ne peut créer de billet sans client'; +$lng['error']['categoryhastickets'] = 'La catégorie possède des billets.
    Veuillez d\'abord supprimer tous les billets de cette catégorie.'; +$lng['error']['notmorethanxopentickets'] = $lng['ticket']['notmorethanxopentickets']; +$lng['admin']['ticketsettings'] = 'Paramètres des billets de support'; +$lng['admin']['archivelastrun'] = 'Derniers billets archivés'; +$lng['serversettings']['ticket']['noreply_email']['title'] = 'Adresse e-mail de non réponse'; +$lng['serversettings']['ticket']['noreply_email']['description'] = 'L\'adresse e-mail de l\'expéditeur de notification pour les billets de support, quelque chose du type no-reply@domaine.com'; +$lng['serversettings']['ticket']['worktime_begin']['title'] = 'Début du support (hh:mm)'; +$lng['serversettings']['ticket']['worktime_begin']['description'] = 'Horaire de début du support'; +$lng['serversettings']['ticket']['worktime_end']['title'] = 'Fin du support (hh:mm)'; +$lng['serversettings']['ticket']['worktime_end']['description'] = 'Horaire de fin du support'; +$lng['serversettings']['ticket']['worktime_sat'] = 'Support disponible le samedi ?'; +$lng['serversettings']['ticket']['worktime_sun'] = 'Support disponible le dimanche ?'; +$lng['serversettings']['ticket']['worktime_all']['title'] = 'Aucune limite horaire pour le support'; +$lng['serversettings']['ticket']['worktime_all']['description'] = 'Si "Oui", les options pour le début et la fin du support seront écrasés.'; +$lng['serversettings']['ticket']['archiving_days'] = 'Après combien de jours un billet fermé sera automatiquement archivé ?'; +$lng['customer']['tickets'] = 'Billet de support'; + +// ADDED IN 1.2.18-svn4 + +$lng['admin']['domain_nocustomeraddingavailable'] = 'Il n\'est acutellement pas possible d\'ajouter de domaines. Vous devez d\'abord ajouter un client.'; +$lng['serversettings']['ticket']['enable'] = 'Activer le système de billets'; +$lng['serversettings']['ticket']['concurrentlyopen'] = 'Combien de billets peuvent être ouverts au même moment ?'; +$lng['error']['norepymailiswrong'] = 'L\'adresse de "non réponse" n\'est pas bonne. Une adresse e-mail valide doit être entrée.'; +$lng['error']['tadminmailiswrong'] = 'L\'adresse de "l\'administrateur de billets" n\'est pas bonne. Une adresse e-mail valide doit être entrée.'; +$lng['ticket']['awaitingticketreply'] = 'Vous avez %s billet(s) de support non répondu(s).'; + +// ADDED IN 1.2.18-svn5 + +$lng['serversettings']['ticket']['noreply_name'] = 'Nom de l\'expéditeur e-mail des billets'; + +// ADDED IN 1.2.19-svn1 + +$lng['serversettings']['mod_fcgid']['configdir']['title'] = 'Dossier de configuration FCGI'; +$lng['serversettings']['mod_fcgid']['configdir']['description'] = 'Où doivent être stockés les fichiers de configuration pour FCGI ?'; +$lng['serversettings']['mod_fcgid']['tmpdir']['title'] = 'Dossier temporaire pour FCGI'; + +// ADDED IN 1.2.19-svn3 + +$lng['serversettings']['ticket']['reset_cycle']['title'] = 'Intervalle de réinitialisation des billets utilisés'; +$lng['serversettings']['ticket']['reset_cycle']['description'] = 'Remettre le compteur de billets à 0 dans le temps imparti'; +$lng['admin']['tickets']['daily'] = 'Journalière'; +$lng['admin']['tickets']['weekly'] = 'Hebdomadaire'; +$lng['admin']['tickets']['monthly'] = 'Mensuelle'; +$lng['admin']['tickets']['yearly'] = 'Annuelle'; +$lng['error']['ticketresetcycleiswrong'] = 'L\'intervalle de réinitialisation doit être "journalière", "hebdomadaire", "mensuelle" ou "annuelle".'; + +// ADDED IN 1.2.19-svn4 + +$lng['menue']['traffic']['traffic'] = 'Trafic'; +$lng['menue']['traffic']['current'] = 'Mois actuel'; +$lng['traffic']['month'] = 'Mois'; +$lng['traffic']['day'] = 'Jour'; +$lng['traffic']['months'][1] = 'Janvier'; +$lng['traffic']['months'][2] = 'Février'; +$lng['traffic']['months'][3] = 'Mars'; +$lng['traffic']['months'][4] = 'Avril'; +$lng['traffic']['months'][5] = 'Mai'; +$lng['traffic']['months'][6] = 'Juin'; +$lng['traffic']['months'][7] = 'Juillet'; +$lng['traffic']['months'][8] = 'Août'; +$lng['traffic']['months'][9] = 'Septembre'; +$lng['traffic']['months'][10] = 'Octobre'; +$lng['traffic']['months'][11] = 'Novembre'; +$lng['traffic']['months'][12] = 'Décembre'; +$lng['traffic']['mb'] = 'Trafic (Mo)'; +$lng['traffic']['distribution'] = 'FTP | HTTP | E-mail'; +$lng['traffic']['sumhttp'] = 'Trafic HTTP total entrant'; +$lng['traffic']['sumftp'] = 'Trafic FTP total entrant'; +$lng['traffic']['summail'] = 'Trafic E-mail total entrant'; + +// ADDED IN 1.2.19-svn4.5 + +$lng['serversettings']['no_robots']['title'] = 'Permettre aux robots des moteurs de recherche d\'indexer l\'installation de SysCP'; + +// ADDED IN 1.2.19-svn6 + +$lng['admin']['loggersettings'] = 'Paramètres des logs'; +$lng['serversettings']['logger']['enable'] = 'Activer / Désactiver les logs'; +$lng['serversettings']['logger']['severity'] = 'Niveau de log'; +$lng['admin']['logger']['normal'] = 'normal'; +$lng['admin']['logger']['paranoid'] = 'paranoïaque'; +$lng['serversettings']['logger']['types']['title'] = 'Type(s) de log'; +$lng['serversettings']['logger']['types']['description'] = 'Spécifiez les types de log séparés par des virgules.
    Les types de log disponible sont : syslog, file, mysql'; +$lng['serversettings']['logger']['logfile'] = 'Nom du fichier de log, dossier + nom du fichier'; +$lng['error']['logerror'] = 'Erreur log : %s'; +$lng['serversettings']['logger']['logcron'] = 'Loguer les travaux de cron (lancer une fois)'; +$lng['question']['logger_reallytruncate'] = 'Etes-vous sûr de vouloir vider la table "%s" ?'; +$lng['admin']['loggersystem'] = 'Log système'; +$lng['menue']['logger']['logger'] = 'Log système'; +$lng['logger']['date'] = 'Date'; +$lng['logger']['type'] = 'Type'; +$lng['logger']['action'] = 'Action'; +$lng['logger']['user'] = 'Utilisateur'; +$lng['logger']['truncate'] = 'Vider les logs'; + +// ADDED IN 1.2.19-svn7 + +$lng['serversettings']['ssl']['use_ssl'] = 'Utiliser SSL ?'; +$lng['serversettings']['ssl']['ssl_cert_file'] = 'Où est situé le fichier de certificat ?'; +$lng['serversettings']['ssl']['openssl_cnf'] = 'Paramètres par défaut pour créer le certificat'; +$lng['panel']['reseller'] = 'revendeur'; +$lng['panel']['admin'] = 'administrateur'; +$lng['panel']['customer'] = 'client(s)'; +$lng['error']['nomessagetosend'] = 'Vous n\'avez pas entré de message.'; +$lng['error']['noreceipientsgiven'] = 'Vous n\'avez pas spécifier de destinataire'; +$lng['admin']['emaildomain'] = 'Domaine e-mail'; +$lng['admin']['email_only'] = 'Seulement des e-mails ?'; +$lng['admin']['wwwserveralias'] = 'Ajouter un "www." à l\'alias du serveur "ServerAlias"'; +$lng['admin']['ipsandports']['enable_ssl'] = 'Est-ce un port SSL ?'; +$lng['admin']['ipsandports']['ssl_cert_file'] = 'Emplacement du certificat SSL'; +$lng['panel']['send'] = 'envoyé'; +$lng['admin']['subject'] = 'Sujet'; +$lng['admin']['receipient'] = 'Destinataire'; +$lng['admin']['message'] = 'Ecrire un message'; +$lng['admin']['text'] = 'Message'; +$lng['menu']['message'] = 'Messages'; +$lng['error']['errorsendingmail'] = 'Echec d\'envoi du message à "%s"'; +$lng['error']['cannotreaddir'] = 'Impossible de lire dossier "%s"'; +$lng['message']['success'] = 'Le message a été envoyé aux destinataires "%s"'; +$lng['message']['noreceipients'] = 'Aucun e-mail n\'a été envoyé car il n\'existe aucun destinataire dans la base de données'; +$lng['admin']['sslsettings'] = 'Paramètres SSL'; +$lng['cronjobs']['notyetrun'] = 'Pas encore lancé'; +$lng['install']['servername_should_be_fqdn'] = 'Le nom du serveur doit être un nom FQDN, pas une adresse IP'; +$lng['serversettings']['default_vhostconf']['title'] = 'Paramètres par défaut pour les vHosts'; +$lng['emails']['quota'] = 'Quota'; +$lng['emails']['quota_type']['byte'] = 'octet(s)'; +$lng['emails']['quota_type']['kilobyte'] = 'Ko'; +$lng['emails']['quota_type']['megabyte'] = 'Mo'; +$lng['emails']['quota_type']['gigabyte'] = 'Go'; +$lng['emails']['noquota'] = 'Pas de quota'; +$lng['emails']['updatequota'] = 'Mise à jour'; +$lng['serversettings']['mail_quota']['title'] = 'Quota de la boîte aux lettres'; +$lng['serversettings']['mail_quota']['description'] = 'Quota par défaut pour toutes nouvelles boîtes aux lettres créées.'; +$lng['serversettings']['mail_quota_enabled']['title'] = 'Utiliser les quotas de boîtes aux lettres pour les clients'; +$lng['serversettings']['mail_quota_enabled']['description'] = 'Activez cette option pour utiliser les quotas sur les boîtes aux lettres. Par défaut, cette option est à Non car cela requiert une configuration spécifique.'; +$lng['serversettings']['mail_quota_enabled']['removelink'] = 'Cliquez ici pour retirer tous les quotas de tous les comptes e-mails.'; +$lng['question']['admin_quotas_reallywipe'] = 'Etes-vous sûr de vouloir retirer tous les quotas de la table mail_users ? Cette action ne peut être annulée !'; +$lng['error']['vmailquotawrong'] = 'La taille du quota doit être entre 1 et 999'; +$lng['customer']['email_quota'] = 'Quota e-mail'; +$lng['customer']['email_imap'] = 'E-mail IMAP'; +$lng['customer']['email_pop3'] = 'E-mail POP3'; +$lng['customer']['mail_quota'] = 'Quota e-mail'; +$lng['error']['invalidip'] = 'Adresse IP invalide : %s'; +$lng['serversettings']['decimal_places'] = 'Nombre de décimales à afficher pour le trafic / espace web'; + +// ADDED IN 1.2.19-svn8 + +$lng['admin']['dkimsettings'] = 'Paramètres DKIM'; +$lng['dkim']['dkim_prefix']['title'] = 'Prefix DKIM'; +$lng['dkim']['dkim_prefix']['description'] = 'Veuillez entrer l\'emplacement des fichiers RSA pour DKIM ainsi que l\'emplacement du fichier de configuration pour le plugin Milter'; +$lng['dkim']['dkim_domains']['title'] = 'Nom du fichier DKIM'; +$lng['dkim']['dkim_domains']['description'] = 'Nom du fichier des paramètres DKIM pour les domaines tel que entré dans la configuration de DKIM-milter'; +$lng['dkim']['dkim_dkimkeys']['title'] = 'Nom du fichier des clefs DKIM'; +$lng['dkim']['dkim_dkimkeys']['description'] = 'Nom du fichier des paramètres des clefs DKIM tel que entré dans la configuration de DKIM-milter'; +$lng['dkim']['dkimrestart_command']['title'] = 'Commande de redémarrage de DKIM-milter'; +$lng['dkim']['dkimrestart_command']['description'] = 'Veuillez entrer la commande de redémarrage du service DKIM-milter'; + +// ADDED IN 1.2.19-svn9 + +$lng['admin']['caneditphpsettings'] = 'Peut changer les paramètres PHP du domaine ?'; + +// ADDED IN 1.2.19-svn12 + +$lng['admin']['allips'] = 'Toutes les adresses IP'; +$lng['panel']['nosslipsavailable'] = 'Il n\'y a actuellement aucune combinaison IP / Port configurer pour SSL'; +$lng['ticket']['by'] = 'de '; +$lng['dkim']['use_dkim']['title'] = 'Activer le support DKIM ?'; +$lng['dkim']['use_dkim']['description'] = 'Voulez-vous utiliser le système DKIM (DomainKeys Identified Mail) ?'; +$lng['error']['invalidmysqlhost'] = 'Adresse hôte MySQL invalide : "%s"'; +$lng['error']['cannotuseawstatsandwebalizeratonetime'] = 'Vous ne pouvez pas activer AWStats et Webalizer en même temps. Veuillez n\'en choisir qu\'un seul.'; +$lng['serversettings']['webalizer_enabled'] = 'Activer les statistiques Webalizer'; +$lng['serversettings']['awstats_enabled'] = 'Activer les statistiques AWStats'; +$lng['admin']['awstatssettings'] = 'Paramètres Awstats'; +$lng['serversettings']['awstats_domain_file']['title'] = 'Dossier domaines pour AWStats'; +$lng['serversettings']['awstats_model_file']['title'] = 'Fichier modèle pour AWStats'; + +// ADDED IN 1.2.19-svn16 + +$lng['admin']['domain_dns_settings'] = 'Paramètres DNS'; +$lng['dns']['destinationip'] = 'IP du domaine'; +$lng['dns']['standardip'] = 'IP standard du serveur'; +$lng['dns']['a_record'] = 'Enregistrement de type "A" (IPv6 optionnel)'; +$lng['dns']['cname_record'] = 'Enregistrement CNAME'; +$lng['dns']['mxrecords'] = 'Définition des enregistrements MX'; +$lng['dns']['standardmx'] = 'Enregistrements MX standard du serveur'; +$lng['dns']['mxconfig'] = 'Enregistrements MX personnalisé'; +$lng['dns']['priority10'] = 'Priorité 10'; +$lng['dns']['priority20'] = 'Priorité 20'; +$lng['dns']['txtrecords'] = 'Définir des enregistrement TXT'; +$lng['dns']['txtexample'] = 'Exemple (pour SPF) :
    v=spf1 ip4:xxx.xxx.xx.0/23 -all'; +$lng['serversettings']['selfdns']['title'] = 'Paramètres manuel des DNS du domaine'; +$lng['serversettings']['selfdnscustomer']['title'] = 'Permettre aux clients de modifier les paramètes DNS du domaine'; +$lng['admin']['activated'] = 'Activé'; +$lng['admin']['statisticsettings'] = 'Paramètres des statistiques'; +$lng['admin']['or'] = 'ou'; + +// ADDED IN 1.2.19-svn17 + +$lng['serversettings']['unix_names']['title'] = 'Utiliser des noms d\'utilisateurs compatible UNIX'; +$lng['serversettings']['unix_names']['description'] = 'Vous permet d\'utiliser les - et _ dans les noms d\'utilisateurs si l\'option est à Non'; +$lng['error']['cannotwritetologfile'] = 'Ne peut ouvrir le fichier de log %s en écriture'; +$lng['admin']['sysload'] = 'Charge du système'; +$lng['admin']['noloadavailable'] = 'Non disponible'; +$lng['admin']['nouptimeavailable'] = 'Non disponible'; +$lng['panel']['backtooverview'] = 'Retour à l\'aperçu'; +$lng['admin']['nosubject'] = '(Aucun sujet)'; +$lng['admin']['configfiles']['statistics'] = 'Statistiques'; +$lng['login']['forgotpwd'] = 'Mot de passe oublié ?'; +$lng['login']['presend'] = 'Réinitialiser le mot de passe'; +$lng['login']['email'] = 'Adresse e-mail'; +$lng['login']['remind'] = 'Réinitialiser mon mot de passe'; +$lng['login']['usernotfound'] = 'Erreur : utilisateur inconnu !'; +$lng['pwdreminder']['subject'] = 'SysCP - réinitialisation du mot de passe'; +$lng['pwdreminder']['body'] = 'Bonjour %s,\n\nVotre mot de passe pour SysCP a été réinitialiser !\nLe nouveau mot de passe est : %p\n\nCordialement,\nL\'équipe SysCP.'; +$lng['pwdreminder']['success'] = 'Mot de passe correctement réinitialiser.
    Vous devriez recevoir un e-mail avec votre nouveau mot de passe d\'ici quelques minutes.'; + +// ADDED IN 1.2.19-svn18 + +$lng['serversettings']['allow_password_reset']['title'] = 'Permettre aux clients de réinitialiser leurs mots de passe'; +$lng['pwdreminder']['notallowed'] = 'La réinitialisation des mots de passe est désactivée.'; + +// ADDED IN 1.2.19-svn20 + +$lng['serversettings']['awstats_path']['title'] = 'Dossier CGI-BIN de AWStats'; +$lng['serversettings']['awstats_path']['description'] = 'exemple : /var/www/cgi-bin/'; +$lng['serversettings']['awstats_updateall_command']['title'] = 'Emplacement de "awstats_updateall.pl"'; +$lng['serversettings']['awstats_updateall_command']['description'] = 'exemple : /usr/share/awstats/tools/awstats_updateall.pl'; + +// ADDED IN 1.2.19-svn21 + +$lng['customer']['title'] = 'Titre'; +$lng['customer']['country'] = 'Pays'; +$lng['panel']['dateformat'] = 'YYYY-MM-DD'; +$lng['panel']['dateformat_function'] = 'Y-m-d'; + +// Y = Year, m = Month, d = Day + +$lng['panel']['timeformat_function'] = 'H:i:s'; + +// H = Hour, i = Minute, s = Second + +$lng['panel']['default'] = 'Par défaut'; +$lng['panel']['never'] = 'Jamais'; +$lng['panel']['active'] = 'Actif'; +$lng['panel']['please_choose'] = 'Veuillez choisir'; +$lng['panel']['intervalfee_type']['y'] = 'Années'; +$lng['panel']['intervalfee_type']['m'] = 'Mois'; +$lng['panel']['intervalfee_type']['d'] = 'Jours'; +$lng['panel']['intervalfee_type_one']['y'] = 'Année'; +$lng['panel']['intervalfee_type_one']['m'] = 'Mois'; +$lng['panel']['intervalfee_type_one']['d'] = 'Jour'; +$lng['panel']['service_still_active'] = 'Le service est toujours actif'; +$lng['panel']['allow_modifications'] = 'Permettre les modifications'; +$lng['domains']['add_date'] = 'Ajouter à SysCP'; +$lng['domains']['registration_date'] = 'Ajouter à l\'enregistrement'; +$lng['domains']['topleveldomain'] = 'Domaine de premier niveau'; +$lng['admin']['accountdata'] = 'Informations du compte'; +$lng['admin']['contactdata'] = 'Informations du contact'; +$lng['admin']['servicedata'] = 'Informations du service'; +$lng['admin']['billingdata'] = 'Informations de facturation'; +$lng['admin']['invoicedata'] = 'Informations de la facture'; +$lng['admin']['customer_categories_once'] = 'Inclure des frais d\'installation pour les clients'; +$lng['admin']['customer_categories_period'] = 'Inclure des frais périodiques aux clients'; +$lng['customer']['taxid'] = 'Numéro d\'identification de la taxe'; +$lng['customer']['calc_tax'] = 'Calculer le montant des taxes'; +$lng['customer']['create_contract'] = 'Créer le contrat'; +$lng['customer']['contract_date'] = 'Date du contrat'; +$lng['customer']['contract_number'] = 'Description / Numéro du contrat'; +$lng['customer']['additional_service_description'] = 'Description additionnelle pour le service'; +$lng['customer']['contract_details'] = 'Détails du contrat'; +$lng['customer']['included_domains'] = 'Domaines inclus'; +$lng['customer']['additional_traffic'] = 'Trafic additionnel'; +$lng['customer']['additional_diskspace'] = 'Espace Web additionnel'; +$lng['customer']['term_of_payment'] = 'Délai de paiement'; +$lng['customer']['payment_every'] = 'Paiement tous les / toutes les'; +$lng['customer']['payment_method'] = 'Moyen de paiement'; +$lng['customer']['payment_methods'][CONST_BILLING_PAYMENTMETHOD_BANKTRANSFER] = 'Virement bancaire'; +$lng['customer']['payment_methods'][CONST_BILLING_PAYMENTMETHOD_DEBITCARD] = 'Carte de crédit'; +$lng['customer']['bankaccount_holder'] = 'Titulaire du compte'; +$lng['customer']['bankaccount_number'] = 'Numéro de compte'; +$lng['customer']['bankaccount_blz'] = 'Numéro de la banque'; +$lng['customer']['bankaccount_bank'] = 'Nom de la banque'; +$lng['service']['quantity'] = 'Quantité'; +$lng['service']['interval_fee'] = 'Intervalle de taxation'; +$lng['service']['interval_length'] = 'Longueur de l\'intervalle'; +$lng['service']['interval_payment'] = 'Intervalle de paiement'; +$lng['service']['interval_payment_prepaid'] = 'Prépayé / avant paiement'; +$lng['service']['interval_payment_postpaid'] = 'Post payé / après paiement'; +$lng['service']['setup_fee'] = 'Montant des frais d\'installation'; +$lng['service']['active'] = 'Service activé'; +$lng['service']['start_date'] = 'Activé depuis'; +$lng['service']['end_date'] = 'Inactif depuis'; +$lng['service']['lastinvoiced_date'] = 'Dernière facture'; +$lng['service']['valid_from'] = 'Valide du'; +$lng['service']['valid_to'] = 'Valide jusqu\'au'; +$lng['invoice']['invoicenumbertemplate'] = 'H-{year}/{number}'; +$lng['invoice']['sender'] = ''; +$lng['invoice']['invoice'] = 'Facture'; +$lng['invoice']['cancellation'] = 'Annuler la facture'; +$lng['invoice']['reminder'] = 'Rappel'; +$lng['invoice']['preview'] = 'Pré-visualiser'; +$lng['invoice']['dateheader'] = 'Fait à %s'; +$lng['invoice']['number'] = 'Facture numéro'; +$lng['invoice']['contract_number'] = 'Numéro de contrat'; +$lng['invoice']['contract_details'] = 'Détails du contrat'; +$lng['invoice']['contract_details_template'] = 'Contrat d\'hébergement Web %s contenant un espace de %s Mo, ' . chr(128) . 'pour un prix de %s par Go supplémentaires, %s Go de trafic, ' . chr(128) . 'pour un prix de %s par Go supplémentaire; inclus les noms de domaines de %s tous les %s %s'; +$lng['invoice']['period'] = 'Période de facturation'; +$lng['invoice']['header'][0] = 'Point de vente'; +$lng['invoice']['header'][1] = 'Description'; +$lng['invoice']['header'][2] = 'Intervalle'; +$lng['invoice']['header'][3] = 'Net [' . chr(128) . ']'; +$lng['invoice']['header'][4] = 'Taxe [' . chr(128) . ']'; +$lng['invoice']['header'][5] = '%'; +$lng['invoice']['header'][6] = 'Total [' . chr(128) . ']'; +$lng['invoice']['subtotal'] = 'Sous-total'; +$lng['invoice']['tax'] = 'Taxe (%s%%)'; +$lng['invoice']['credit_note'] = 'Note de crédit'; +$lng['invoice']['total'] = 'Total'; +$lng['invoice']['payment_methods'][0] = 'Le montant de la facture à payer dans un délai de %s jours. ' . "\n" . 'N\'ayant pas encore reçu de règlement à ce jour, nous vous prions de vouloir effectuer votre règlement par virement bancaire sur notre compte à créditer. Si vous souhaitez opter pour le prélèvement automatique, veuillez remplir le formulaire et nous le renvoyer par courrier postal.'; +$lng['invoice']['payment_methods'][1] = 'Le montant de la facture est de %s à notre crédit dans un délai de %s, sur notre compte numéro %s, %s recouvrées par prélèvement'; +$lng['invoice']['tax_text']['line'] = 'T.V.A. %s : %s' . "\n"; +$lng['invoice']['tax_text']['client'] = 'du client'; +$lng['invoice']['state'] = 'état'; +$lng['invoice']['states'][CONST_BILLING_INVOICESTATE_INVOICED] = 'facturé'; +$lng['invoice']['states'][CONST_BILLING_INVOICESTATE_SENT] = 'envoyé'; +$lng['invoice']['states'][CONST_BILLING_INVOICESTATE_PAID] = 'payé'; +$lng['invoice']['states'][CONST_BILLING_INVOICESTATE_CANCELLED_NO_REINVOICE] = 'annulé (par de refacturation)'; +$lng['invoice']['states'][CONST_BILLING_INVOICESTATE_CANCELLED_REINVOICE_WITHOUT_CREDIT_NOTE] = 'annulé (refacturation sans note de crédit)'; +$lng['invoice']['states'][CONST_BILLING_INVOICESTATE_CANCELLED_REINVOICE_WITH_CREDIT_NOTE] = 'annulé (refacturation avec note de crédit)'; +$lng['invoice']['states'][CONST_BILLING_INVOICESTATE_CANCELLED_REINVOICED] = 'annulé (re-facturé)'; +$lng['invoice']['state_change'] = 'dernier changement d\'état'; +$lng['invoice']['change_state'] = 'changer l\'état de la facture'; +$lng['invoice']['total_fee'] = 'sans taxe'; +$lng['invoice']['total_fee_taxed'] = 'Total'; +$lng['invoice']['fix'] = 'Correction de la facture'; +$lng['invoice']['pdf'] = 'Créer un PDF'; +$lng['invoice']['create_reminder'] = 'Créer un rappel'; +$lng['invoice']['changelog'] = 'Historique des changements'; +$lng['invoice']['deleted_line'] = 'La ligne a été supprimée.'; +$lng['invoice']['original_value'] = 'Valeur initiale'; +$lng['invoice']['page_footer'] = 'page %s sur %s'; +$lng['billing']['billing'] = 'Facturation'; +$lng['billing']['invoices'] = 'Factures'; +$lng['billing']['invoices_admin'] = 'Factures (Administrateurs)'; +$lng['billing']['openinvoices'] = 'Factures ouvertes'; +$lng['billing']['openinvoices_admin'] = 'Factures ouvertes (Administrateurs)'; +$lng['billing']['cacheinvoicefees'] = 'Mettre à jour la liste / les tarifs'; +$lng['billing']['invoice'] = 'Facture'; +$lng['billing']['invoice_date'] = 'Date de facture'; +$lng['billing']['invoice_fee'] = 'Frais de facture'; +$lng['billing']['preview'] = 'Pré-visualiser'; +$lng['billing']['caption'] = 'Légende'; +$lng['billing']['number'] = 'Facture numéro'; +$lng['billing']['caption_setup'] = 'Légende pour les frais d\'installation'; +$lng['billing']['caption_interval'] = 'Légende pour les frais de gestion interne'; +$lng['billing']['template'] = 'Modèle'; +$lng['billing']['interval'] = 'Intervalle'; +$lng['billing']['other'] = 'Autres services'; +$lng['billing']['other_add'] = 'Ajouter d\'autres services'; +$lng['billing']['other_edit'] = 'Modifier les autres services'; +$lng['billing']['taxclassesnrates'] = 'Classifications et montants des taxes'; +$lng['billing']['taxclass'] = 'Classification de la taxe'; +$lng['billing']['taxrate'] = 'Taux de taxe'; +$lng['billing']['taxrate_add'] = 'Ajouter un taux de taxe'; +$lng['billing']['taxrate_edit'] = 'Modifier un taux de taxe'; +$lng['billing']['domains_templates'] = 'Modèle de domaine'; +$lng['billing']['domains_templates_add'] = 'Ajouter un modèle de domaine'; +$lng['billing']['domains_templates_edit'] = 'Modifier un modèle de domaine'; +$lng['billing']['other_templates'] = 'Autres modèles de services'; +$lng['billing']['other_templates_add'] = 'Ajouter d\'autres modèles de services'; +$lng['billing']['other_templates_edit'] = 'Modifier les autres modèles de services'; +$lng['billing']['categories']['hosting_caption'] = 'Hébergement'; +$lng['billing']['categories']['hosting_rowcaption_setup'] = 'Contrat d\'hébergement - Frais d\'installation'; +$lng['billing']['categories']['hosting_rowcaption_interval'] = 'Contrat d\'hébergement'; +$lng['billing']['categories']['hosting_rowcaption_setup_withloginname'] = 'Contrat d\'hébergement ({loginname}) - Frais d\'installation'; +$lng['billing']['categories']['hosting_rowcaption_interval_withloginname'] = 'Contrat d\'hébergement ({loginname})'; +$lng['billing']['categories']['domains_caption'] = 'Domaines'; +$lng['billing']['categories']['domains_rowcaption_setup'] = 'Domaine {domain} - Frais d\'installation'; +$lng['billing']['categories']['domains_rowcaption_interval'] = 'Domaine {domain}'; +$lng['billing']['categories']['traffic_caption'] = 'Trafic'; +$lng['billing']['categories']['traffic_rowcaption_setup'] = $lng['billing']['categories']['traffic_rowcaption_interval'] = 'Trafic utilisé : {traffic_total}/{traffic_included} Go'; +$lng['billing']['categories']['traffic_rowcaption_setup_unlimited'] = $lng['billing']['categories']['traffic_rowcaption_interval_unlimited'] = 'Trafic utilisé : {traffic_total}/' . $lng['customer']['unlimited'] . ' Go'; +$lng['billing']['categories']['other_caption'] = 'Autre'; +$lng['billing']['categories']['other_rowcaption_setup'] = $lng['billing']['categories']['other_rowcaption_interval'] = 'Autre'; +$lng['billing']['categories']['diskspace_caption'] = 'Espace Web'; +$lng['billing']['categories']['diskspace_rowcaption_setup'] = $lng['billing']['categories']['diskspace_rowcaption_interval'] = 'Espace Web utilisé : {diskspace_total}/{diskspace_included} Go'; +$lng['billing']['categories']['diskspace_rowcaption_setup_unlimited'] = $lng['billing']['categories']['diskspace_rowcaption_interval_unlimited'] = 'Espace Web utilisé : {diskspace_total}/' . $lng['customer']['unlimited'] . ' Go'; +$lng['question']['billing_invoice_row_reallydelete'] = 'Etes-vous sûr de vouloir supprimer cette ligne de facturation ?'; +$lng['question']['billing_invoice_row_reallyreset'] = 'Etes-vous sûr de vouloir ignorer tous les changements effectués à cette facture ?'; +$lng['question']['billing_invoice_row_reallyreset_key'] = 'Etes-vous sûr de vouloir ignorer tous les changements effectués à cette ligne ?'; +$lng['question']['billing_domains_template_reallydelete'] = 'Etes-vous sûr de vouloir supprimer le modèle pour "%s" ?'; +$lng['question']['billing_other_template_reallydelete'] = 'Etes-vous sûr de vouloir supprimer le modèle pour "%s" ?'; +$lng['question']['billing_other_service_reallydelete'] = 'Etes-vous sûr de vouloir supprimer ce service ?'; +$lng['question']['billing_taxrate_reallydelete'] = 'Etes-vous sûr de vouloir supprimer ce taux de taxe ?'; + +// ADDED IN 1.2.19-svn22 + +$lng['serversettings']['allow_password_reset']['description'] = 'Les clients peuvent réinitialiser leurs mots de passe et il sera envoyé à leurs propres adresses e-mails'; +$lng['serversettings']['allow_password_reset_admin']['title'] = 'Permettre la réinitialisation des mots de passe par les administrateurs'; +$lng['serversettings']['allow_password_reset_admin']['description'] = 'Les administrateurs / revendeurs peuvent réinitialiser leurs mots de passe et il sera envoyé à leurs propres adresses e-mails'; + +// ADDED IN 1.2.19-svn23 + +$lng['admin']['edit_billingdata'] = 'Peut modifier les informations de facturation ?'; +$lng['error']['service_still_active'] = 'Le service est toujours actif.'; + +// ADDED IN 1.2.19-svn23 + +$lng['admin']['billingsettings'] = 'Paramètres de facturation'; +$lng['serversettings']['billing']['activate_billing']['title'] = 'Activer la facturation'; +$lng['serversettings']['billing']['activate_billing']['description'] = 'Ici, vous pouvez activer / désactiver le système global de facturation.'; +$lng['serversettings']['billing']['highlight_inactive']['title'] = 'Mettre en surbrillance les factures impayées'; +$lng['serversettings']['billing']['highlight_inactive']['description'] = 'Est-ce les factures impayées doivent être mises en surbrillance ?'; +$lng['serversettings']['billing']['invoicenumber_count']['title'] = 'Numéro de facture actuel'; +$lng['serversettings']['billing']['invoicenumber_count']['description'] = 'Est un numéro de facture fixe. Lors de tous changements, vous serez amené à en discuter avec votre comptable.'; + +?> \ No newline at end of file diff --git a/lng/german.lng.php b/lng/german.lng.php new file mode 100644 index 0000000000..8698348a2c --- /dev/null +++ b/lng/german.lng.php @@ -0,0 +1,1228 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Language + * @version $Id: german.lng.php 2724 2009-06-07 14:18:02Z flo $ + */ + +/** + * Global + */ + +$lng['translator'] = ''; +$lng['panel']['edit'] = 'bearbeiten'; +$lng['panel']['delete'] = 'löschen'; +$lng['panel']['create'] = 'anlegen'; +$lng['panel']['save'] = 'Speichern'; +$lng['panel']['yes'] = 'Ja'; +$lng['panel']['no'] = 'Nein'; +$lng['panel']['emptyfornochanges'] = 'leer für keine Änderung'; +$lng['panel']['emptyfordefault'] = 'leer für Standardeinstellung'; +$lng['panel']['path'] = 'Pfad'; +$lng['panel']['toggle'] = 'Umschalten'; +$lng['panel']['next'] = 'weiter'; +$lng['panel']['dirsmissing'] = 'Verzeichnisse nicht verfügbar oder lesbar'; + +/** + * Login + */ + +$lng['login']['username'] = 'Benutzername'; +$lng['login']['password'] = 'Passwort'; +$lng['login']['language'] = 'Sprache'; +$lng['login']['login'] = 'Anmelden'; +$lng['login']['logout'] = 'Abmelden'; +$lng['login']['profile_lng'] = 'Profilsprache'; + +/** + * Customer + */ + +$lng['customer']['documentroot'] = 'Heimatverzeichnis'; +$lng['customer']['name'] = 'Name'; +$lng['customer']['firstname'] = 'Vorname'; +$lng['customer']['company'] = 'Firma'; +$lng['customer']['street'] = 'Straße'; +$lng['customer']['zipcode'] = 'PLZ'; +$lng['customer']['city'] = 'Ort'; +$lng['customer']['phone'] = 'Telefon'; +$lng['customer']['fax'] = 'Fax'; +$lng['customer']['email'] = 'E-Mail'; +$lng['customer']['customernumber'] = 'Kundennummer'; +$lng['customer']['diskspace'] = 'Webspace (MB)'; +$lng['customer']['traffic'] = 'Traffic (GB)'; +$lng['customer']['mysqls'] = 'MySQL-Datenbanken'; +$lng['customer']['emails'] = 'E-Mail-Adressen'; +$lng['customer']['accounts'] = 'E-Mail-Konten'; +$lng['customer']['forwarders'] = 'E-Mail-Weiterleitungen'; +$lng['customer']['ftps'] = 'FTP-Konten'; +$lng['customer']['subdomains'] = 'Sub-Domain(s)'; +$lng['customer']['domains'] = 'Domain(s)'; +$lng['customer']['unlimited'] = 'unbegrenzt'; + +/** + * Customermenue + */ + +$lng['menue']['main']['main'] = 'Allgemein'; +$lng['menue']['main']['changepassword'] = 'Passwort ändern'; +$lng['menue']['main']['changelanguage'] = 'Sprache ändern'; +$lng['menue']['email']['email'] = 'E-Mail'; +$lng['menue']['email']['emails'] = 'Adressen'; +$lng['menue']['email']['webmail'] = 'WebMail'; +$lng['menue']['mysql']['mysql'] = 'MySQL'; +$lng['menue']['mysql']['databases'] = 'Datenbanken'; +$lng['menue']['mysql']['phpmyadmin'] = 'phpMyAdmin'; +$lng['menue']['domains']['domains'] = 'Domains'; +$lng['menue']['domains']['settings'] = 'Einstellungen'; +$lng['menue']['ftp']['ftp'] = 'FTP'; +$lng['menue']['ftp']['accounts'] = 'Benutzerkonten'; +$lng['menue']['ftp']['webftp'] = 'WebFTP'; +$lng['menue']['extras']['extras'] = 'Extras'; +$lng['menue']['extras']['directoryprotection'] = 'Verzeichnisschutz'; +$lng['menue']['extras']['pathoptions'] = 'Pfadoptionen'; + +/** + * Index + */ + +$lng['index']['customerdetails'] = 'Kundendaten'; +$lng['index']['accountdetails'] = 'Kontodaten'; + +/** + * Change Password + */ + +$lng['changepassword']['old_password'] = 'Altes Passwort'; +$lng['changepassword']['new_password'] = 'Neues Passwort'; +$lng['changepassword']['new_password_confirm'] = 'Neues Passwort (bestätigen)'; +$lng['changepassword']['new_password_ifnotempty'] = 'Neues Passwort (leer = nicht ändern)'; +$lng['changepassword']['also_change_ftp'] = 'Auch Passwort vom Haupt-FTP-Zugang ändern'; + +/** + * Domains + */ + +$lng['domains']['description'] = 'Hier können Sie (Sub-)Domains erstellen und deren Pfade ändern.
    Nach jeder Änderung braucht das System etwas Zeit um die Konfiguration neu einzulesen.'; +$lng['domains']['domainsettings'] = 'Domaineinstellungen'; +$lng['domains']['domainname'] = 'Domainname'; +$lng['domains']['subdomain_add'] = 'Subdomain anlegen'; +$lng['domains']['subdomain_edit'] = '(Sub-)Domain bearbeiten'; +$lng['domains']['wildcarddomain'] = 'Als Wildcarddomain eintragen?'; +$lng['domains']['aliasdomain'] = 'Alias für Domain'; +$lng['domains']['noaliasdomain'] = 'Keine Aliasdomain'; + +/** + * eMails + */ + +$lng['emails']['description'] = 'Hier können Sie Ihre E-Mail Adressen einrichten.
    Ein Konto ist wie Ihr Briefkasten vor der Haustüre. Wenn jemand eine E-Mail an Sie schreibt, dann wird diese in dieses Konto gelegt.

    Die Zugangsdaten von Ihrem Mailprogramm sind wie folgt: (Die Angaben in kursiver Schrift sind durch die jeweiligen Einträge zu ersetzen!)
    Hostname: Domainname
    Benutzername: Kontoname / E-Mail-Adresse
    Passwort: das gewählte Passwort'; +$lng['emails']['emailaddress'] = 'E-Mail-Adresse'; +$lng['emails']['emails_add'] = 'E-Mail-Adresse anlegen'; +$lng['emails']['emails_edit'] = 'E-Mail-Adresse ändern'; +$lng['emails']['catchall'] = 'Catchall'; +$lng['emails']['iscatchall'] = 'Als Catchall-Adresse definieren?'; +$lng['emails']['account'] = 'Konto'; +$lng['emails']['account_add'] = 'Konto anlegen'; +$lng['emails']['account_delete'] = 'Konto löschen'; +$lng['emails']['from'] = 'Von'; +$lng['emails']['to'] = 'Nach'; +$lng['emails']['forwarders'] = 'Weiterleitungen'; +$lng['emails']['forwarder_add'] = 'Weiterleitung hinzufügen'; + +/** + * FTP + */ + +$lng['ftp']['description'] = 'Hier können Sie zusätzliche FTP-Konten einrichten.
    Die Änderungen sind sofort wirksam und die FTP-Konten sofort benutzbar.'; +$lng['ftp']['account_add'] = 'Benutzerkonto anlegen'; + +/** + * MySQL + */ + +$lng['mysql']['databasename'] = 'Benutzer-/Datenbankname'; +$lng['mysql']['databasedescription'] = 'Datenbankbeschreibung'; +$lng['mysql']['database_create'] = 'Datenbank anlegen'; + +/** + * Extras + */ + +$lng['extras']['description'] = 'Hier können Sie zusätzliche Extras einrichten, wie zum Beispiel Verzeichnisschutz.
    Die Änderungen sind erst nach einer bestimmten Zeit wirksam.'; +$lng['extras']['directoryprotection_add'] = 'Verzeichnisschutz anlegen'; +$lng['extras']['view_directory'] = 'Verzeichnis anzeigen'; +$lng['extras']['pathoptions_add'] = 'Pfadoptionen hinzufügen'; +$lng['extras']['directory_browsing'] = 'Verzeichnisinhalt anzeigen'; +$lng['extras']['pathoptions_edit'] = 'Pfadoptionen bearbeiten'; +$lng['extras']['error404path'] = '404'; +$lng['extras']['error403path'] = '403'; +$lng['extras']['error500path'] = '500'; +$lng['extras']['error401path'] = '401'; +$lng['extras']['errordocument404path'] = 'URL zum Fehlerdokument 404'; +$lng['extras']['errordocument403path'] = 'URL zum Fehlerdokument 403'; +$lng['extras']['errordocument500path'] = 'URL zum Fehlerdokument 500'; +$lng['extras']['errordocument401path'] = 'URL zum Fehlerdokument 401'; + +/** + * Errors + */ + +$lng['error']['error'] = 'Fehlermeldung'; +$lng['error']['directorymustexist'] = 'Das Verzeichnis %s muss existieren. Legen Sie es bitte mit Ihrem FTP-Programm an.'; +$lng['error']['filemustexist'] = 'Die Datei %s muss existieren.'; +$lng['error']['allresourcesused'] = 'Sie haben bereits alle Ihnen zur Verfügung stehenden Ressourcen verbraucht.'; +$lng['error']['domains_cantdeletemaindomain'] = 'Sie können keine Domain, die als E-Mail-Domain verwendet wird, löschen. '; +$lng['error']['domains_canteditdomain'] = 'Sie können diese Domain nicht bearbeiten. Dies wurde durch den Admin verweigert'; +$lng['error']['domains_cantdeletedomainwithemail'] = 'Sie können keine Domain löschen, die noch als E-Mail-Domain verwendet wird. Löschen Sie zuerst alle E-Mail-Adressen dieser Domain.'; +$lng['error']['firstdeleteallsubdomains'] = 'Sie müssen erst alle Subdomains löschen, bevor Sie eine Wildcarddomain anlegen können.'; +$lng['error']['youhavealreadyacatchallforthisdomain'] = 'Sie haben bereits eine Adresse als Catchall für diese Domain definiert.'; +$lng['error']['ftp_cantdeletemainaccount'] = 'Sie können Ihren Hauptaccount nicht löschen.'; +$lng['error']['login'] = 'Der angegebene Benutzername/Passwort ist falsch.'; +$lng['error']['login_blocked'] = 'Dieser Account wurde aufgrund zu vieler Fehlversuche vorrübergehend geschlossen.
    Bitte versuchen Sie es in ' . $settings['login']['deactivatetime'] . ' Sekunden erneut.'; +$lng['error']['notallreqfieldsorerrors'] = 'Sie haben nicht alle Felder oder ein Feld mit fehlerhaften Angaben ausgefüllt.'; +$lng['error']['oldpasswordnotcorrect'] = 'Das alte Passwort ist nicht korrekt.'; +$lng['error']['youcantallocatemorethanyouhave'] = 'Sie können nicht mehr Ressourcen verteilen als Sie noch frei haben.'; +$lng['error']['mustbeurl'] = 'Sie müssen eine vollständige URL angeben (z.B. http://irgendwas.de/error404.htm)'; +$lng['error']['invalidpath'] = 'Sie haben keine gültige URL ausgewählt (Evtl. Probleme beim Verzeichnislisting?)'; +$lng['error']['stringisempty'] = 'Fehlende Eingabe im Feld'; +$lng['error']['stringiswrong'] = 'Falsche Eingabe im Feld'; +$lng['error']['myloginname'] = '\'' . $lng['login']['username'] . '\''; +$lng['error']['mypassword'] = '\'' . $lng['login']['password'] . '\''; +$lng['error']['oldpassword'] = '\'' . $lng['changepassword']['old_password'] . '\''; +$lng['error']['newpassword'] = '\'' . $lng['changepassword']['new_password'] . '\''; +$lng['error']['newpasswordconfirm'] = '\'' . $lng['changepassword']['new_password_confirm'] . '\''; +$lng['error']['newpasswordconfirmerror'] = 'Das neue Passwort und die Bestätigung sind nicht identisch.'; +$lng['error']['myname'] = '\'' . $lng['customer']['name'] . '\''; +$lng['error']['myfirstname'] = '\'' . $lng['customer']['firstname'] . '\''; +$lng['error']['emailadd'] = '\'' . $lng['customer']['email'] . '\''; +$lng['error']['mydomain'] = '\'Domain\''; +$lng['error']['mydocumentroot'] = '\'Documentroot\''; +$lng['error']['loginnameexists'] = 'Der Login-Name %s existiert bereits.'; +$lng['error']['emailiswrong'] = 'Die E-Mail-Adresse %s enthält ungültige Zeichen oder ist nicht vollständig.'; +$lng['error']['loginnameiswrong'] = 'Der Login-Name %s enthält ungültige Zeichen.'; +$lng['error']['userpathcombinationdupe'] = 'Kombination aus Benutzername und Pfad existiert bereits.'; +$lng['error']['patherror'] = 'Allgemeiner Fehler! Pfad darf nicht leer sein.'; +$lng['error']['errordocpathdupe'] = 'Option für Pfad %s existiert bereits.'; +$lng['error']['adduserfirst'] = 'Sie müssen zuerst einen Kunden anlegen.'; +$lng['error']['domainalreadyexists'] = 'Die Domain %s wurde bereits einem Kunden zugeordnet.'; +$lng['error']['nolanguageselect'] = 'Keine Sprache ausgewählt.'; +$lng['error']['nosubjectcreate'] = 'Sie müssen einen Betreff angeben.'; +$lng['error']['nomailbodycreate'] = 'Sie müssen einen E-Mail-Text eingeben.'; +$lng['error']['templatenotfound'] = 'Vorlage wurde nicht gefunden.'; +$lng['error']['alltemplatesdefined'] = 'Sie können keine weiteren Vorlagen anlegen, da bereits alle Sprachen mit Vorlagen versorgt sind.'; +$lng['error']['wwwnotallowed'] = 'Ihre Subdomain darf nicht www heissen.'; +$lng['error']['subdomainiswrong'] = 'Die Subdomain %s enthält ungültige Zeichen.'; +$lng['error']['domaincantbeempty'] = 'Der Domain-Name darf nicht leer sein.'; +$lng['error']['domainexistalready'] = 'Die Domain %s existiert bereits.'; +$lng['error']['domainisaliasorothercustomer'] = 'Die ausgewählte Aliasdomain ist entweder selber eine Aliasdomain oder gehört zu einem anderen Kunden.'; +$lng['error']['emailexistalready'] = 'Die E-Mail-Adresse %s existiert bereits.'; +$lng['error']['maindomainnonexist'] = 'Die Haupt-Domain %s existiert nicht.'; +$lng['error']['destinationnonexist'] = 'Bitte geben Sie Ihre Weiterleitungsadresse im Feld \'Nach\' ein.'; +$lng['error']['destinationalreadyexistasmail'] = 'Die Weiterleitung zu %s exisitiert bereits als aktive E-Mail-Adresse.'; +$lng['error']['destinationalreadyexist'] = 'Es gibt bereits eine Weiterleitung nach %s .'; +$lng['error']['destinationiswrong'] = 'Die Weiterleitungsadresse-Adresse %s enthält ungültige Zeichen oder ist nicht vollständig.'; +$lng['error']['domainname'] = $lng['domains']['domainname']; + +/** + * Questions + */ + +$lng['question']['question'] = 'Sicherheitsabfrage'; +$lng['question']['admin_customer_reallydelete'] = 'Wollen Sie den Kunden %s wirklich löschen?
    ACHTUNG! Alle Daten gehen unwiderruflich verloren! Nach dem Vorgang müssen Sie die Daten aus dem Dateisystem noch manuell entfernen.'; +$lng['question']['admin_domain_reallydelete'] = 'Wollen Sie die Domain %s wirklich löschen?'; +$lng['question']['admin_domain_reallydisablesecuritysetting'] = 'Wollen Sie diese wichtigen Sicherheitseinstellungen (OpenBasedir und/oder SafeMode) wirklich deaktivieren?'; +$lng['question']['admin_admin_reallydelete'] = 'Wollen Sie den Admin %s wirklich löschen?
    Alle Kunden und Domains werden Ihrem Account zugeteilt.'; +$lng['question']['admin_template_reallydelete'] = 'Wollen Sie die Vorlage \'%s\' wirklich löschen?'; +$lng['question']['domains_reallydelete'] = 'Wollen Sie die Domain %s wirklich löschen?'; +$lng['question']['email_reallydelete'] = 'Wollen Sie die E-Mail-Adresse %s wirklich löschen?'; +$lng['question']['email_reallydelete_account'] = 'Wollen Sie das Konto von %s wirklich löschen?'; +$lng['question']['email_reallydelete_forwarder'] = 'Wollen Sie die Weiterleitung %s wirklich löschen?'; +$lng['question']['extras_reallydelete'] = 'Wollen Sie den Verzeichnisschutz für %s wirklich löschen?'; +$lng['question']['extras_reallydelete_pathoptions'] = 'Wollen Sie die Optionen für den Pfad %s wirklich löschen?'; +$lng['question']['ftp_reallydelete'] = 'Wollen Sie das FTP-Benutzerkonto %s wirklich löschen?'; +$lng['question']['mysql_reallydelete'] = 'Wollen Sie die Datenbank %s wirklich löschen?
    ACHTUNG! Alle Daten gehen unwiderruflich verloren!'; +$lng['question']['admin_configs_reallyrebuild'] = 'Wollen Sie wirklich Ihre Apache und Bind Konfigurationsdateien neu erstellen lassen?'; + +/** + * Mails + */ + +$lng['mails']['pop_success']['mailbody'] = 'Hallo,\n\nIhr E-Mail-Konto {USERNAME}\nwurde erfolgreich eingerichtet.\n\nDies ist eine automatisch generierte\nE-Mail, bitte antworten Sie nicht auf\ndiese Mitteilung.\n\nIhr SysCP-Team'; +$lng['mails']['pop_success']['subject'] = 'E-Mail-Konto erfolgreich eingerichtet'; +$lng['mails']['createcustomer']['mailbody'] = 'Hallo {FIRSTNAME} {NAME},\n\nhier ihre Accountinformationen:\n\nBenutzername: {USERNAME}\nPassword: {PASSWORD}\n\nVielen Dank,\nIhr SysCP-Team'; +$lng['mails']['createcustomer']['subject'] = 'Kontoinformationen'; + +/** + * Admin + */ + +$lng['admin']['overview'] = 'Übersicht'; +$lng['admin']['ressourcedetails'] = 'Verbrauchte Ressourcen'; +$lng['admin']['systemdetails'] = 'Systemdetails'; +$lng['admin']['syscpdetails'] = 'SysCP-Details'; +$lng['admin']['installedversion'] = 'Installierte Version'; +$lng['admin']['latestversion'] = 'Neueste Version'; +$lng['admin']['lookfornewversion']['clickhere'] = 'per Webservice abfragen'; +$lng['admin']['lookfornewversion']['error'] = 'Fehler beim Auslesen'; +$lng['admin']['resources'] = 'Ressourcen'; +$lng['admin']['customer'] = 'Kunde'; +$lng['admin']['customers'] = 'Kunden'; +$lng['admin']['customer_add'] = 'Kunden anlegen'; +$lng['admin']['customer_edit'] = 'Kunden bearbeiten'; +$lng['admin']['domains'] = 'Domains'; +$lng['admin']['domain_add'] = 'Domain anlegen'; +$lng['admin']['domain_edit'] = 'Domain bearbeiten'; +$lng['admin']['subdomainforemail'] = 'Subdomains als E-Mail-Domains'; +$lng['admin']['admin'] = 'Admin'; +$lng['admin']['admins'] = 'Admins'; +$lng['admin']['admin_add'] = 'Admin anlegen'; +$lng['admin']['admin_edit'] = 'Admin bearbeiten'; +$lng['admin']['customers_see_all'] = 'Kann alle Kunden sehen?'; +$lng['admin']['domains_see_all'] = 'Kann alle Domains sehen?'; +$lng['admin']['change_serversettings'] = 'Kann Servereinstellungen bearbeiten?'; +$lng['admin']['server'] = 'Server'; +$lng['admin']['serversettings'] = 'Einstellungen'; +$lng['admin']['rebuildconf'] = 'Configs neuschreiben'; +$lng['admin']['stdsubdomain'] = 'Standardsubdomain'; +$lng['admin']['stdsubdomain_add'] = 'Standardsubdomain anlegen'; +$lng['admin']['phpenabled'] = 'PHP verfügbar'; +$lng['admin']['deactivated'] = 'Gesperrt'; +$lng['admin']['deactivated_user'] = 'Benutzer sperren'; +$lng['admin']['sendpassword'] = 'Passwort zusenden'; +$lng['admin']['ownvhostsettings'] = 'Eigene vHost-Einstellungen'; +$lng['admin']['configfiles']['serverconfiguration'] = 'Konfiguration'; +$lng['admin']['configfiles']['files'] = 'Konfigurationsdateien: Bitte ändern Sie die entsprechenden Konfigurationsdateien
    oder legen sie mit dem folgenden Inhalt neu an, falls sie nicht existieren.
    Bitte beachten Sie: Das MySQL-Passwort wurde aus Sicherheitsgründen nicht ersetzt.
    Bitte ersetzen Sie "MYSQL_PASSWORD" manuell durch das entsprechende Passwort.
    Falls Sie es vergessen haben sollten, finden Sie es in der Datei "lib/userdata.inc.php".'; +$lng['admin']['configfiles']['commands'] = 'Kommandos: Bitte führen Sie die folgenden Kommandos in einer Shell aus.'; +$lng['admin']['configfiles']['restart'] = 'Neustart: Bitte führen Sie die folgenden Kommandos zum Neuladen
    der Konfigurationsdateien in einer Shell aus.'; +$lng['admin']['templates']['templates'] = 'E-Mail-Vorlagen'; +$lng['admin']['templates']['template_add'] = 'Vorlage hinzufügen'; +$lng['admin']['templates']['template_edit'] = 'Vorlage bearbeiten'; +$lng['admin']['templates']['action'] = 'Aktion'; +$lng['admin']['templates']['email'] = 'E-Mail- & Dateivorlagen'; +$lng['admin']['templates']['subject'] = 'Betreff'; +$lng['admin']['templates']['mailbody'] = 'Mailtext'; +$lng['admin']['templates']['createcustomer'] = 'Willkommensmail für neue Kunden'; +$lng['admin']['templates']['pop_success'] = 'Willkommensmail für neue E-Mail Konten'; +$lng['admin']['wwwserveralias'] = 'www. ServerAlias hinzufügen'; +$lng['admin']['templates']['template_replace_vars'] = 'Variablen, die in den Vorlagen ersetzt werden:'; +$lng['admin']['templates']['FIRSTNAME'] = 'Wird mit dem Vornamen des Kunden ersetzt.'; +$lng['admin']['templates']['NAME'] = 'Wird mit dem Namen des Kunden ersetzt.'; +$lng['admin']['templates']['USERNAME'] = 'Wird mit dem Benutzernamen des neuen Kundenkontos ersetzt.'; +$lng['admin']['templates']['PASSWORD'] = 'Wird mit dem Passwort des neuen Kundenkontos ersetzt.'; +$lng['admin']['templates']['EMAIL'] = 'Wird mit der Adresse des neuen POP3/IMAP Kontos ersetzt.'; + +/** + * Serversettings + */ + +$lng['serversettings']['session_timeout']['title'] = 'Session Timeout'; +$lng['serversettings']['session_timeout']['description'] = 'Wie lange muss ein Benutzer inaktiv sein, damit die Session ungültig wird? (Sekunden)'; +$lng['serversettings']['accountprefix']['title'] = 'Kundenprefix'; +$lng['serversettings']['accountprefix']['description'] = 'Welchen Prefix sollen die Kundenaccounts haben?'; +$lng['serversettings']['mysqlprefix']['title'] = 'SQL-Prefix'; +$lng['serversettings']['mysqlprefix']['description'] = 'Welchen Prefix sollen die MySQL-Benutzerkonten haben?'; +$lng['serversettings']['ftpprefix']['title'] = 'FTP-Prefix'; +$lng['serversettings']['ftpprefix']['description'] = 'Welchen Prefix sollen die FTP-Benutzerkonten haben?'; +$lng['serversettings']['documentroot_prefix']['title'] = 'Heimatverzeichnis'; +$lng['serversettings']['documentroot_prefix']['description'] = 'Wo sollen alle Heimatverzeichnisse der Kunden liegen?'; +$lng['serversettings']['logfiles_directory']['title'] = 'Apache-Logdateien-Verzeichnis'; +$lng['serversettings']['logfiles_directory']['description'] = 'Wo sollen alle Logdateien des Apache liegen?'; +$lng['serversettings']['ipaddress']['title'] = 'IP-Adresse'; +$lng['serversettings']['ipaddress']['description'] = 'Welche IP-Adresse hat der Server?'; +$lng['serversettings']['hostname']['title'] = 'Hostname'; +$lng['serversettings']['hostname']['description'] = 'Welchen Hostnamen hat der Server?'; +$lng['serversettings']['apachereload_command']['title'] = 'Apache-Reload-Command'; +$lng['serversettings']['apachereload_command']['description'] = 'Wie heisst das Skript zum Neuladen der Apache-Konfigurationsdateien?'; +$lng['serversettings']['bindconf_directory']['title'] = 'Bind-Config-Directory'; +$lng['serversettings']['bindconf_directory']['description'] = 'Wo liegen die Bind-Konfigurationsdateien?'; +$lng['serversettings']['bindreload_command']['title'] = 'Bind-Reload-Command'; +$lng['serversettings']['bindreload_command']['description'] = 'Wie heisst das Skript zum Neuladen der Bind-Konfigurationsdateien?'; +$lng['serversettings']['binddefaultzone']['title'] = 'Bind-Default-Zone'; +$lng['serversettings']['binddefaultzone']['description'] = 'Wie heißt die Default-Zone für alle Domains?'; +$lng['serversettings']['vmail_uid']['title'] = 'Mails-Uid'; +$lng['serversettings']['vmail_uid']['description'] = 'Welche UID sollen die E-Mails haben?'; +$lng['serversettings']['vmail_gid']['title'] = 'Mails-Gid'; +$lng['serversettings']['vmail_gid']['description'] = 'Welche GID sollen die E-Mails haben?'; +$lng['serversettings']['vmail_homedir']['title'] = 'Mails-Homedir'; +$lng['serversettings']['vmail_homedir']['description'] = 'Wo sollen die E-Mails liegen?'; +$lng['serversettings']['adminmail']['title'] = 'Absenderadresse'; +$lng['serversettings']['adminmail']['description'] = 'Wie ist die Absenderadresse für E-Mails aus dem Panel?'; +$lng['serversettings']['phpmyadmin_url']['title'] = 'phpMyAdmin-URL'; +$lng['serversettings']['phpmyadmin_url']['description'] = 'Wo liegt der phpMyAdmin? (muss mit http(s):// beginnen)'; +$lng['serversettings']['webmail_url']['title'] = 'WebMail-URL'; +$lng['serversettings']['webmail_url']['description'] = 'Wo liegt das WebMail? (muss mit http(s):// beginnen)'; +$lng['serversettings']['webftp_url']['title'] = 'WebFTP-URL'; +$lng['serversettings']['webftp_url']['description'] = 'Wo liegt das WebFTP? (muss mit http(s):// beginnen)'; +$lng['serversettings']['language']['description'] = 'Welche Sprache ist Ihre Standardsprache?'; +$lng['serversettings']['maxloginattempts']['title'] = 'Maximale Loginversuche'; +$lng['serversettings']['maxloginattempts']['description'] = 'Maximale Anzahl an Loginversuchen bis der Account deaktiviert wird.'; +$lng['serversettings']['deactivatetime']['title'] = 'Länge der Deaktivierung'; +$lng['serversettings']['deactivatetime']['description'] = 'Zeitraum (in sek.) für den der Account deaktiviert ist.'; +$lng['serversettings']['pathedit']['title'] = 'Pfad-Eingabemethode'; +$lng['serversettings']['pathedit']['description'] = 'Soll ein Pfad via Dropdown-Menü ausgewählt oder manuell eingegeben werden können.'; +$lng['serversettings']['nameservers']['title'] = 'Nameserver'; +$lng['serversettings']['nameservers']['description'] = 'Eine durch Komma getrennte Liste mit den Hostnamen aller Nameserver. Der erste ist der primäre.'; +$lng['serversettings']['mxservers']['title'] = 'MX Server'; +$lng['serversettings']['mxservers']['description'] = 'Eine durch Komma getrenne Liste die ein Paar mit einer Nummer und den Hostnamen einen MX Servers, getrennt durch ein Leerzeichen, enthaelt (z.B. \'10 mx.example.com\').'; + +/** + * CHANGED BETWEEN 1.2.12 and 1.2.13 + */ + +$lng['mysql']['description'] = 'Hier können Sie MySQL-Datenbanken anlegen und löschen.
    Die Änderungen werden sofort wirksam und die Datenbanken sofort benutzbar.
    Im Menü finden Sie einen Link zum phpMyAdmin, mit dem Sie Ihre Datenbankeninhalte einfach bearbeiten können.

    Die Zugangsdaten von php-Skripten sind wie folgt: (Die Angaben in kursiver Schrift sind durch die jeweiligen Einträge zu ersetzen!)
    Hostname:
    Benutzername: Datenbankname
    Passwort: das gewählte Passwort
    Datenbank: Datenbankname'; + +/** + * ADDED BETWEEN 1.2.12 and 1.2.13 + */ + +$lng['admin']['cronlastrun'] = 'Letzter Cronjob'; +$lng['serversettings']['paging']['title'] = 'Einträge pro Seite'; +$lng['serversettings']['paging']['description'] = 'Wieviele Einträge sollen auf einer Seite gezeigt werden? (0 = Paging deaktivieren)'; +$lng['error']['ipstillhasdomains'] = 'Die IP/Port Kombination, die Sie löschen wollen ist noch bei einer oder mehreren Domains eingetragen. Bitte ändern sie die Domains vorher auf eine andere IP/Port Kombination um diese löschen zu können.'; +$lng['error']['cantdeletedefaultip'] = 'Sie können die Standard IP/Port Kombination für Reseller nicht löschen. Bitte setzen Sie eine andere IP/Port Kombination als Standard um diese löschen zu können.'; +$lng['error']['cantdeletesystemip'] = 'Sie können die letzte System IP nicht löschen. Entweder legen Sie eine neue IP/Port Kombination als Systemeinstellung an oder ändern die System IP.'; +$lng['error']['myipaddress'] = '\'IP\''; +$lng['error']['myport'] = '\'Port\''; +$lng['error']['myipdefault'] = 'Sie müssen eine IP/Port Kombination auswählen, die den Standard defninieren soll.'; +$lng['error']['myipnotdouble'] = 'Diese Kombination aus IP und Post existiert bereits.'; +$lng['question']['admin_ip_reallydelete'] = 'Wollen Sie wirklich die IP %s löschen?'; +$lng['admin']['ipsandports']['ipsandports'] = 'IPs und Ports'; +$lng['admin']['ipsandports']['add'] = 'IP/Port hinzufügen'; +$lng['admin']['ipsandports']['edit'] = 'IP/Port bearbeiten'; +$lng['admin']['ipsandports']['ipandport'] = 'IP/Port'; +$lng['admin']['ipsandports']['ip'] = 'IP'; +$lng['admin']['ipsandports']['port'] = 'Port'; + +// ADDED IN 1.2.13-rc3 + +$lng['error']['cantchangesystemip'] = 'Sie können die letzte System IP nicht löschen. Entweder legen Sie noch eine neue IP/Port Kombination als Systemeinstellung an oder ändern die System IP.'; +$lng['question']['admin_domain_reallydocrootoutofcustomerroot'] = 'Sind Sie sicher, dass der DocumentRoot dieser Domain außerhalb des Heimatverzeichnisses des Kunden liegen soll?'; + +// ADDED IN 1.2.14-rc1 + +$lng['admin']['memorylimitdisabled'] = 'Deaktiviert'; +$lng['domain']['openbasedirpath'] = 'OpenBasedir-Pfad'; +$lng['domain']['docroot'] = 'Oben eingegebener Pfad'; +$lng['domain']['homedir'] = 'Heimverzeichnis'; +$lng['admin']['valuemandatory'] = 'Dieses Feld muss ausgefüllt werden'; +$lng['admin']['valuemandatorycompany'] = 'Entweder "Name" und "Vorname" oder "Firma" muss ausgefüllt werden'; +$lng['menue']['main']['username'] = 'Angemeldet als: '; +$lng['panel']['urloverridespath'] = 'URL (überschreibt Pfad)'; +$lng['panel']['pathorurl'] = 'Pfad oder URL'; +$lng['error']['sessiontimeoutiswrong'] = '"Session-Timeout" muss ein numerischer Wert sein.'; +$lng['error']['maxloginattemptsiswrong'] = '"Maximale Loginversuche" muss ein numerischer Wert sein.'; +$lng['error']['deactivatetimiswrong'] = '"Länge der Deaktivierung" muss numerisch sein.'; +$lng['error']['accountprefixiswrong'] = 'Das "Kundenprefix" ist falsch.'; +$lng['error']['mysqlprefixiswrong'] = 'Das "SQL-Prefix" ist falsch.'; +$lng['error']['ftpprefixiswrong'] = 'Das "FTP-Prefix" ist falsch.'; +$lng['error']['ipiswrong'] = 'Die "IP-Adresse" ist falsch. Es ist nur eine gültige IP-Adresse erlaubt.'; +$lng['error']['vmailuidiswrong'] = 'Die "Mails-UID" ist falsch. Nur eine numerische UID ist erlaubt.'; +$lng['error']['vmailgidiswrong'] = 'Die "Mails-GID" ist falsch. Nur eine numerische GID ist erlaubt.'; +$lng['error']['adminmailiswrong'] = 'Die "Absenderadresse" ist fehlerhaft. Es ist nur eine gültige E-Mail-Adresse erlaubt'; +$lng['error']['pagingiswrong'] = 'Die "Einträge pro Seite"-Einstellung ist falsch. Nur numerische Zeichen sind erlaubt.'; +$lng['error']['phpmyadminiswrong'] = 'Die "phpMyAdmin-URL" ist keine gültige URL.'; +$lng['error']['webmailiswrong'] = 'Die "WebMail-URL" ist keine gültige URL.'; +$lng['error']['webftpiswrong'] = 'Die "WebFTP-URL" ist keine gültige URL.'; +$lng['domains']['hasaliasdomains'] = 'Hat Aliasdomain(s)'; +$lng['serversettings']['defaultip']['title'] = 'Standard IP/Port'; +$lng['serversettings']['defaultip']['description'] = 'Welche IP/Port-Kombination soll standardmäßig verwendet werden?'; +$lng['domains']['statstics'] = 'Statistiken'; +$lng['panel']['ascending'] = 'aufsteigend'; +$lng['panel']['decending'] = 'absteigend'; +$lng['panel']['search'] = 'Suche'; +$lng['panel']['used'] = 'benutzt'; + +// ADDED IN 1.2.14-rc3 + +$lng['panel']['translator'] = 'Übersetzung'; + +// ADDED IN 1.2.14-rc4 + +$lng['error']['stringformaterror'] = 'Der Wert des Feldes "%s" ist nicht im erwarteten Format.'; + +// ADDED IN 1.2.15-rc1 + +$lng['admin']['serversoftware'] = 'Serversoftware'; +$lng['admin']['phpversion'] = 'PHP-Version'; +$lng['admin']['phpmemorylimit'] = 'PHP-Memory-Limit'; +$lng['admin']['mysqlserverversion'] = 'MySQL Server Version'; +$lng['admin']['mysqlclientversion'] = 'MySQL Client Version'; +$lng['admin']['webserverinterface'] = 'Webserver Interface'; +$lng['domains']['isassigneddomain'] = 'Ist zugewiesene Domain'; +$lng['serversettings']['phpappendopenbasedir']['title'] = 'An OpenBasedir anzuhängende Pfade'; +$lng['serversettings']['phpappendopenbasedir']['description'] = 'Diese (durch Doppelpunkte getrennten) Pfade werden dem OpenBasedir-Statement in jedem vhost-Container angehängt.'; + +// CHANGED IN 1.2.15-rc1 + +$lng['error']['loginnameissystemaccount'] = 'Sie können keinen Account anlegen, welcher wie ein Systemaccount aussieht (also zum Beispiel mit "%s" anfängt). Bitte wählen Sie einen anderen Accountnamen.'; +$lng['error']['youcantdeleteyourself'] = 'Aus Sicherheitsgründen können Sie sich nicht selbst löschen.'; +$lng['error']['youcanteditallfieldsofyourself'] = 'Hinweis: Aus Sicherheitsgründen können Sie nicht alle Felder Ihres eigenen Accounts bearbeiten.'; + +// ADDED IN 1.2.16-svn1 + +$lng['serversettings']['natsorting']['title'] = 'Natürliche Sortierung in der Listenansicht nutzen'; +$lng['serversettings']['natsorting']['description'] = 'Sortiert die Liste in der Reihenfolge web1 -> web2 -> web11 anstatt web1 -> web11 -> web2.'; + +// ADDED IN 1.2.16-svn2 + +$lng['serversettings']['deactivateddocroot']['title'] = 'Docroot für deaktivierte Benutzer'; +$lng['serversettings']['deactivateddocroot']['description'] = 'Dieser Pfad wird als docroot für deaktivierte Benutzer verwendet. Wenn leer, wird kein vHost erstellt.'; + +// ADDED IN 1.2.16-svn4 + +$lng['panel']['reset'] = 'Änderungen verwerfen'; +$lng['admin']['accountsettings'] = 'Konteneinstellungen'; +$lng['admin']['panelsettings'] = 'Paneleinstellungen'; +$lng['admin']['systemsettings'] = 'Systemeinstellungen'; +$lng['admin']['webserversettings'] = 'Webservereinstellungen'; +$lng['admin']['mailserversettings'] = 'Mailservereinstellungen'; +$lng['admin']['nameserversettings'] = 'Nameservereinstellungen'; +$lng['admin']['updatecounters'] = 'Ressourcenverbrauch'; +$lng['question']['admin_counters_reallyupdate'] = 'Wollen Sie den Ressourcenverbrauch neu berechnen?'; +$lng['panel']['pathDescription'] = 'Wenn das Verzeichnis nicht existiert, wird es automatisch erstellt.'; + +// ADDED IN 1.2.16-svn6 + +$lng['mails']['trafficninetypercent']['mailbody'] = 'Sehr geehrte(r) {NAME},\n\nSie haben bereits {TRAFFICUSED} MB von Ihren insgesamt {TRAFFIC} MB Traffic verbraucht.\nDies sind mehr als 90%.\n\nVielen Dank,\ndas SysCP-Team'; +$lng['mails']['trafficninetypercent']['subject'] = 'Sie erreichen bald Ihr Traffic-Limit'; +$lng['admin']['templates']['trafficninetypercent'] = 'Hinweismail für Kunden, wenn sie 90% des Traffics verbraucht haben'; +$lng['admin']['templates']['TRAFFIC'] = 'Wird mit Traffic, der dem Kunden zugewiesen wurde, ersetzt.'; +$lng['admin']['templates']['TRAFFICUSED'] = 'Wird mit Traffic, der vom Kunden bereits verbraucht wurde, ersetzt.'; + +// ADDED IN 1.2.16-svn7 + +$lng['admin']['subcanemaildomain']['never'] = 'Nie'; +$lng['admin']['subcanemaildomain']['choosableno'] = 'Wählbar, Standardwert: Nein'; +$lng['admin']['subcanemaildomain']['choosableyes'] = 'Wählbar, Standardwert: Ja'; +$lng['admin']['subcanemaildomain']['always'] = 'Immer'; +$lng['changepassword']['also_change_webalizer'] = ' Auch Passwort vom Webalizer ändern'; + +// ADDED IN 1.2.16-svn8 + +$lng['serversettings']['mailpwcleartext']['title'] = 'Passwörter der Mail-Konten auch im Klartext in der Datenbank speichern'; +$lng['serversettings']['mailpwcleartext']['description'] = 'Wenn diese Einstellung auf Ja gesetzt wird, werden alle Passwörter auch unverschlüsselt (also im Klartext, für jeden mit Zugriff auf die SysCP-Datenbank sofort lesbar) in der mail_users-Tabelle gespeichert. Aktivieren Sie diese Option nur dann, wenn Sie sie wirklich gebrauchen!'; +$lng['serversettings']['mailpwcleartext']['removelink'] = 'Klicken Sie hier, um alle unverschlüsselten Passwörter aus der Tabelle zu entfernen.'; +$lng['question']['admin_cleartextmailpws_reallywipe'] = 'Wollen Sie wirklich alle unverschlüsselten Passwörter aus der Tabelle mail_users entfernen? Dieser Schritt kann nicht rückgängig gemacht werden!'; +$lng['admin']['configfiles']['overview'] = 'Übersicht'; +$lng['admin']['configfiles']['wizard'] = 'Assistent'; +$lng['admin']['configfiles']['distribution'] = 'Distribution'; +$lng['admin']['configfiles']['service'] = 'Service'; +$lng['admin']['configfiles']['daemon'] = 'Daemon'; +$lng['admin']['configfiles']['http'] = 'Webserver (HTTP)'; +$lng['admin']['configfiles']['dns'] = 'Nameserver (DNS)'; +$lng['admin']['configfiles']['mail'] = 'Mailserver (IMAP/POP3)'; +$lng['admin']['configfiles']['smtp'] = 'Mailserver (SMTP)'; +$lng['admin']['configfiles']['ftp'] = 'FTP-Server'; +$lng['admin']['configfiles']['etc'] = 'Sonstige (System)'; +$lng['admin']['configfiles']['choosedistribution'] = '-- Distribution wählen --'; +$lng['admin']['configfiles']['chooseservice'] = '-- Service wählen --'; +$lng['admin']['configfiles']['choosedaemon'] = '-- Daemon wählen --'; +$lng['admin']['trafficlastrun'] = 'Letzte Trafficberechnung'; + +// ADDED IN 1.2.16-svn10 + +$lng['serversettings']['ftpdomain']['title'] = 'FTP-Benutzerkonten @domain'; +$lng['serversettings']['ftpdomain']['description'] = 'Können Kunden FTP-Benutzerkonten user@customerdomain anlegen?'; +$lng['panel']['back'] = 'Zurück'; + +// ADDED IN 1.2.16-svn12 + +$lng['serversettings']['mod_log_sql']['title'] = 'Logs in Datenbank zwischenspeichern'; +$lng['serversettings']['mod_log_sql']['description'] = 'mod_log_sql benutzen um die Webzugriffe temporär zu speichern
    Dies benötigt eine spezielle Apache-Konfiguration'; +$lng['serversettings']['mod_fcgid']['title'] = 'PHP über mod_fcgid/suexec einbinden'; +$lng['serversettings']['mod_fcgid']['description'] = 'mod_fcgid/suexec/libnss_mysql benutzen um PHP unter dem jeweiligen Useraccount laufen zu lassen
    Dies benötigt eine spezielle Apache-Konfiguration'; +$lng['serversettings']['sendalternativemail']['title'] = 'Alternative E-Mail-Adresse benutzen'; +$lng['serversettings']['sendalternativemail']['description'] = 'Während des Erstellens eines Accounts das Passwort an eine andere E-Mail-Adresse senden'; +$lng['emails']['alternative_emailaddress'] = 'Alternative E-Mail-Adresse'; +$lng['mails']['pop_success_alternative']['mailbody'] = 'Hallo,\n\nihr E-Mail-Konto {USERNAME}\nwurde erfolgreich eingerichtet.\nIhr Passwort lautet {PASSWORD}.\n\nDies ist eine automatisch generierte\neMail, bitte antworten Sie nicht auf\ndiese Mitteilung.\n\nIhr SysCP-Team'; +$lng['mails']['pop_success_alternative']['subject'] = 'E-Mail-Konto erfolgreich eingerichtet'; +$lng['admin']['templates']['pop_success_alternative'] = 'Willkommensmail für neue E-Mail Konten für die alternative Email Addresse'; +$lng['admin']['templates']['EMAIL_PASSWORD'] = 'Wird mit dem Passwort des neuen POP3/IMAP Kontos ersetzt.'; + +// ADDED IN 1.2.16-svn13 + +$lng['error']['documentrootexists'] = 'Es existiert noch ein Verzeichnis "%s" für diesen Kunden. Bitte dieses vorher löschen.'; + +// ADDED IN 1.2.16-svn14 + +$lng['serversettings']['apacheconf_vhost']['title'] = 'Apache vHost-Konfigurations-Datei/Verzeichnis-Name'; +$lng['serversettings']['apacheconf_vhost']['description'] = 'Wo soll die vHost-Konfigurationen abgelegt werden? Sie können entweder eine Datei (also mit allen vhosts) oder einen Ordner (mit einer Datei pro vhost) angeben.'; +$lng['serversettings']['apacheconf_diroptions']['title'] = 'Apache Verzeichnisoption-Konfigurations-Datei/Verzeichnis-Name'; +$lng['serversettings']['apacheconf_diroptions']['description'] = 'Wo soll die Verzeichnisoption-Konfigurationen abgelegt werden? Sie können entweder eine Datei (also mit allen vhosts) oder einen Ordner (mit einer Datei pro vhost) angeben.'; +$lng['serversettings']['apacheconf_htpasswddir']['title'] = 'Apache htpasswd Verzeichnisname'; +$lng['serversettings']['apacheconf_htpasswddir']['description'] = 'Wo sollen die htpasswd-Dateien fü den Verzeichnisschutz abgelegt werden?'; + +// ADDED IN 1.2.16-svn15 + +$lng['error']['formtokencompromised'] = 'Das Formular scheint manipuliert worden zu sein. Aus Sicherheitsgründen wurden Sie ausgelogged.'; +$lng['serversettings']['mysql_access_host']['title'] = 'MySQL-Access-Hosts'; +$lng['serversettings']['mysql_access_host']['description'] = 'Eine durch Komma getrennte Liste mit den Hostnamen aller Hostnames/IP-Adressen, von denen sich die Benutzer einloggen dürfen.'; + +// CHANGED IN 1.2.18 + +$lng['serversettings']['mod_log_sql']['description'] = 'mod_log_sql benutzen um die Webzugriffe temporär zu speichern
    Dies benötigt eine spezielle Apache-Konfiguration'; +$lng['serversettings']['mod_fcgid']['description'] = 'mod_fcgid/suexec/libnss_mysql benutzen um PHP unter dem jeweiligen Useraccount laufen zu lassen
    Dies benötigt eine spezielle Apache-Konfiguration. Alle nachfolgenden Optionen sind nur gültig wenn das Modul aktiviert wird.'; + +// ADDED IN 1.2.18-svn1 + +$lng['admin']['ipsandports']['create_listen_statement'] = 'Erstelle Listen-Eintrag'; +$lng['admin']['ipsandports']['create_namevirtualhost_statement'] = 'Erstelle NameVirtualHost-Eintrag'; +$lng['admin']['ipsandports']['create_vhostcontainer'] = 'Erstelle vHost-Container'; +$lng['admin']['ipsandports']['create_vhostcontainer_servername_statement'] = 'Erstelle ServerName-Eintrag im vHost-Container'; + +// ADDED IN 1.2.18-svn2 + +$lng['admin']['webalizersettings'] = 'Webalizereinstellungen'; +$lng['admin']['webalizer']['normal'] = 'Normal'; +$lng['admin']['webalizer']['quiet'] = 'Leise'; +$lng['admin']['webalizer']['veryquiet'] = 'Keine Ausgaben'; +$lng['serversettings']['webalizer_quiet']['title'] = 'Webalizerausgabe'; +$lng['serversettings']['webalizer_quiet']['description'] = 'Ausgabefreudigkeit des webalizer-Programms'; + +// ADDED IN 1.2.18-svn3 + +$lng['ticket']['admin_email'] = 'root@localhost'; +$lng['ticket']['noreply_email'] = 'tickets@syscp'; +$lng['admin']['ticketsystem'] = 'Support-Tickets'; +$lng['menue']['ticket']['ticket'] = 'Support Tickets'; +$lng['menue']['ticket']['categories'] = 'Support Kategorien'; +$lng['menue']['ticket']['archive'] = 'Ticket-Archiv'; +$lng['ticket']['description'] = 'Hier können Sie Hilfe-Anfragen an Ihren zuständigen Administrator senden.
    Benachrichtigungen werden per E-Mail verschickt.'; +$lng['ticket']['ticket_new'] = 'Neues Support-Ticket erstellen'; +$lng['ticket']['ticket_reply'] = 'Auf Support-Ticket antworten'; +$lng['ticket']['ticket_reopen'] = 'Ticket wiedereröffnen'; +$lng['ticket']['ticket_newcateory'] = 'Neue Kategorie erstellen'; +$lng['ticket']['ticket_editcateory'] = 'Kategorie bearbeiten'; +$lng['ticket']['ticket_view'] = 'Ticketverlauf ansehen'; +$lng['ticket']['ticketcount'] = 'Anzahl Tickets'; +$lng['ticket']['ticket_answers'] = 'Antworten'; +$lng['ticket']['lastchange'] = 'Letzte Aktualisierung'; +$lng['ticket']['subject'] = 'Betreff'; +$lng['ticket']['status'] = 'Status'; +$lng['ticket']['lastreplier'] = 'Letzte Antwort'; +$lng['ticket']['priority'] = 'Priorität'; +$lng['ticket']['low'] = 'Niedrig'; +$lng['ticket']['normal'] = 'Normal'; +$lng['ticket']['high'] = 'Hoch'; +$lng['ticket']['unf_low'] = 'Niedrig'; +$lng['ticket']['unf_normal'] = 'Normal'; +$lng['ticket']['unf_high'] = 'Hoch'; +$lng['ticket']['lastchange'] = 'Letzte Änderung'; +$lng['ticket']['lastchange_from'] = 'Anfangsdatum (tt.mm.jjjj)'; +$lng['ticket']['lastchange_to'] = 'Enddatum (tt.mm.jjjj)'; +$lng['ticket']['category'] = 'Kategorie'; +$lng['ticket']['no_cat'] = 'Keine'; +$lng['ticket']['message'] = 'Nachricht'; +$lng['ticket']['show'] = 'Anschauen'; +$lng['ticket']['answer'] = 'Antworten'; +$lng['ticket']['close'] = 'Schließen'; +$lng['ticket']['reopen'] = 'Wiedereröffnen'; +$lng['ticket']['archive'] = 'Archivieren'; +$lng['ticket']['ticket_delete'] = 'Ticket löschen'; +$lng['ticket']['lastarchived'] = 'Zuletzt archivierte Tickets'; +$lng['ticket']['archivedtime'] = 'Archiviert'; +$lng['ticket']['open'] = 'Offen'; +$lng['ticket']['wait_reply'] = 'Warte auf Antwort'; +$lng['ticket']['replied'] = 'Beantwortet'; +$lng['ticket']['closed'] = 'Geschlossen'; +$lng['ticket']['staff'] = 'Mitarbeiter'; +$lng['ticket']['customer'] = 'Kunde'; +$lng['ticket']['old_tickets'] = 'Bisheriger Ticketverlauf'; +$lng['ticket']['search'] = 'Archiv durchsuchen'; +$lng['ticket']['nocustomer'] = 'Keine Angabe'; +$lng['ticket']['archivesearch'] = 'Archiv Suchergebnis'; +$lng['ticket']['noresults'] = 'Keine Tickets gefunden'; +$lng['ticket']['notmorethanxopentickets'] = 'Zum Schutz gegen Spam können Sie nicht mehr als %s offene Tickets haben'; +$lng['ticket']['supportstatus'] = 'Support-Status'; +$lng['ticket']['supportavailable'] = 'Der Support ist besetzt und steht zu Ihrer Verfügung.'; +$lng['ticket']['supportnotavailable'] = 'Der Support ist zur Zeit nicht besetzt.'; +$lng['admin']['templates']['ticket'] = 'Benachrichtigungs-Mails für Support-Tickets'; +$lng['admin']['templates']['SUBJECT'] = 'Wird mit dem Betreff des Support-Tickets ersetzt'; +$lng['admin']['templates']['new_ticket_for_customer'] = 'Kunden-Information das das Ticket übermittelt wurde'; +$lng['admin']['templates']['new_ticket_by_customer'] = 'Admin-Benachrichtigung für ein Ticket eines Kunden'; +$lng['admin']['templates']['new_reply_ticket_by_customer'] = 'Admin-Benachrichtigung für ein beantwortetes Ticket'; +$lng['admin']['templates']['new_ticket_by_staff'] = 'Kunden-Benachrichtigung für ein Ticket eines Mitarbeiters'; +$lng['admin']['templates']['new_reply_ticket_by_staff'] = 'Kunden-Benachrichtigung für ein beantwortetes Ticket'; +$lng['mails']['new_ticket_for_customer']['mailbody'] = 'Hallo {FIRSTNAME} {NAME},\n\nihr Support-Ticket mit dem Betreff "{SUBJECT}" wurde erfolgreich gesendet.\n\nSobald ihr Ticket beantwortet wurde, werden Sie per E-Mail benachrichtigt.\n\nVielen Dank,\nthe SysCP-Team'; +$lng['mails']['new_ticket_for_customer']['subject'] = 'Wir haben Ihr Support-Ticket erhalten.'; +$lng['mails']['new_ticket_by_customer']['mailbody'] = 'Hallo Admin,\n\nein neues Support-Ticket wurde uebermittelt.\n\nBitte melde Dich an um es aufzurufen.\n\nVielen Dank,\ndas SysCP-Team'; +$lng['mails']['new_ticket_by_customer']['subject'] = 'Neues Support-Ticket'; +$lng['mails']['new_reply_ticket_by_customer']['mailbody'] = 'Hallo Admin,\n\ndas Support-Ticket "{SUBJECT}" wurde von einem Kunden beantwortet.\n\nBitte melde Dich an um es aufzurufen.\n\nVielen Dank,\ndas SysCP-Team'; +$lng['mails']['new_reply_ticket_by_customer']['subject'] = 'Neue Antwort zu einem Support-Ticket'; +$lng['mails']['new_ticket_by_staff']['mailbody'] = 'Hallo {FIRSTNAME} {NAME},\n\nein Support-Ticket mit dem Betreff "{SUBJECT}" wurde an Sie übermittelt.\n\nBitte melden Sie sich an, um das Ticket aufzurufen.\n\nVielen Dank,\ndas SysCP-Team'; +$lng['mails']['new_ticket_by_staff']['subject'] = 'Neues Support-Ticket'; +$lng['mails']['new_reply_ticket_by_staff']['mailbody'] = 'Hallo {FIRSTNAME} {NAME},\n\ndas Support-Ticket mit dem Betreff "{SUBJECT}" wurde von einem Mitarbeiter beantwortet.\n\nBitte melden Sie sich an, um das Ticket aufzurufen.\n\nVielen Dank,\ndas SysCP-Team'; +$lng['mails']['new_reply_ticket_by_staff']['subject'] = 'Neue Antwort zu einem Support-Ticket'; +$lng['question']['ticket_reallyclose'] = 'Wollen Sie das Ticket "%s" wirklich schließen?'; +$lng['question']['ticket_reallydelete'] = 'Wollen Sie das Ticket "%s" wirklich löschen?'; +$lng['question']['ticket_reallydeletecat'] = 'Wollen Sie die Kategorie "%s" wirklich löschen?'; +$lng['question']['ticket_reallyarchive'] = 'Wollen Sie das Ticket "%s" wirklich in das Archiv verschieben?'; +$lng['error']['mysubject'] = '\'' . $lng['ticket']['subject'] . '\''; +$lng['error']['mymessage'] = '\'' . $lng['ticket']['message'] . '\''; +$lng['error']['mycategory'] = '\'' . $lng['ticket']['category'] . '\''; +$lng['error']['nomoreticketsavailable'] = 'Sie haben Ihr Ticketkontingent aufgebraucht. Bitte kontaktieren Sie ihren Administrator.'; +$lng['error']['nocustomerforticket'] = 'Keine Kunden vorhanden um ein Ticket zu erstellen.'; +$lng['error']['categoryhastickets'] = 'In dieser Kategorie befinden sich noch Tickets.
    Bitte löschen Sie diese um die Kategorie zu löschen'; +$lng['error']['notmorethanxopentickets'] = $lng['ticket']['notmorethanxopentickets']; +$lng['admin']['ticketsettings'] = 'Support-Ticket Einstellungen'; +$lng['admin']['archivelastrun'] = 'Letzte Ticket-Archivierung'; +$lng['serversettings']['ticket']['noreply_email']['title'] = 'Keine-Antwort E-Mail Adresse'; +$lng['serversettings']['ticket']['noreply_email']['description'] = 'Die Absender-Adresse der Support-Tickets. Meist sowas wie KEINE-ANTWORT@domain.tld'; +$lng['serversettings']['ticket']['worktime_begin']['title'] = 'Beginn Support-Zeit (hh:mm)'; +$lng['serversettings']['ticket']['worktime_begin']['description'] = 'Beginn der Zeit in der der Support besetzt ist.'; +$lng['serversettings']['ticket']['worktime_end']['title'] = 'Ende Support-Zeit (hh:mm)'; +$lng['serversettings']['ticket']['worktime_end']['description'] = 'Ende der Zeit in der der Support besetzt ist.'; +$lng['serversettings']['ticket']['worktime_sat'] = 'Support an Samstagen besetzt?'; +$lng['serversettings']['ticket']['worktime_sun'] = 'Support an Sonntagen besetzt?'; +$lng['serversettings']['ticket']['worktime_all']['title'] = 'Kein zeitlich begrenzter Support'; +$lng['serversettings']['ticket']['worktime_all']['description'] = 'Wenn "Ja" überschreibt diese Option Start- und Endzeit des Supports'; +$lng['serversettings']['ticket']['archiving_days'] = 'Nach wievielen Tagen sollen abgeschlossene Tickets archiviert werden?'; +$lng['customer']['tickets'] = 'Support-Tickets'; + +// ADDED IN 1.2.18-svn4 + +$lng['admin']['domain_nocustomeraddingavailable'] = 'Es können derzeit keine Domains angelegt werden. Sie müssen zuerst einen Kunden anlegen'; +$lng['serversettings']['ticket']['enable'] = 'Ticketsystem aktivieren'; +$lng['serversettings']['ticket']['concurrentlyopen'] = 'Wieviele Tickets kann ein Kunde gleichzeitig öffnen?'; +$lng['error']['norepymailiswrong'] = 'Die "Keine-Antwort-Adresse" ist fehlerhaft. Es ist nur eine gültige E-Mail-Adresse erlaubt'; +$lng['error']['tadminmailiswrong'] = 'Die "Ticket-Admin-Adresse" ist fehlerhaft. Es ist nur eine gültige E-Mail-Adresse erlaubt'; +$lng['ticket']['awaitingticketreply'] = 'Sie haben %s unbeantwortete(s) Support-Ticket(s)'; + +// ADDED IN 1.2.18-svn5 + +$lng['serversettings']['ticket']['noreply_name'] = 'Ticket E-Mail Absendername'; + +// ADDED IN 1.2.19-svn + +$lng['serversettings']['mod_fcgid']['configdir']['title'] = 'Konfigurations-Verzeichnis'; +$lng['serversettings']['mod_fcgid']['configdir']['description'] = 'Wo sollen alle Konfigurationsdateien von fcgid liegen? Wenn Sie keine selbst kompilierte suexec Binary benutzen, was in der Regel der Fall ist, muss dieser Pfad unter /var/www/ liegen.'; +$lng['serversettings']['mod_fcgid']['tmpdir']['title'] = 'Temporäres Verzeichnis'; + +// ADDED IN 1.2.19-svn3 + +$lng['serversettings']['ticket']['reset_cycle']['title'] = 'Turnus verbrauchte Tickets zurücksetzen'; +$lng['serversettings']['ticket']['reset_cycle']['description'] = 'Setzt die Anzahl der vom Kunden verbrauchten Tickets in dem angegebenen Turnus auf 0'; +$lng['admin']['tickets']['daily'] = 'Täglich'; +$lng['admin']['tickets']['weekly'] = 'Wöchentlich'; +$lng['admin']['tickets']['monthly'] = 'Monatlich'; +$lng['admin']['tickets']['yearly'] = 'Jährlich'; +$lng['error']['ticketresetcycleiswrong'] = 'Der Turnus des Ticket-Zurücksetzen muss "Täglich", "Wöchentlich", "Monatlich" oder "Jährlich" sein.'; + +// ADDED IN 1.2.19-svn4 + +$lng['menue']['traffic']['traffic'] = 'Traffic'; +$lng['menue']['traffic']['current'] = 'Aktueller Monat'; +$lng['traffic']['month'] = "Monat"; +$lng['traffic']['months'][1] = "Januar"; +$lng['traffic']['months'][2] = "Februar"; +$lng['traffic']['months'][3] = "März"; +$lng['traffic']['months'][4] = "April"; +$lng['traffic']['months'][5] = "Mai"; +$lng['traffic']['months'][6] = "Juni"; +$lng['traffic']['months'][7] = "Juli"; +$lng['traffic']['months'][8] = "August"; +$lng['traffic']['months'][9] = "September"; +$lng['traffic']['months'][10] = "Oktober"; +$lng['traffic']['months'][11] = "November"; +$lng['traffic']['months'][12] = "Dezember"; +$lng['traffic']['mb'] = "Traffic (MB)"; +$lng['traffic']['day'] = "Tag"; +$lng['traffic']['distribution'] = 'FTP | HTTP | Mail'; +$lng['traffic']['sumhttp'] = 'Summe HTTP-Traffic in'; +$lng['traffic']['sumftp'] = 'Summe FTP-Traffic in'; +$lng['traffic']['summail'] = 'Summe Mail-Traffic in'; + +// ADDED IN 1.2.19-svn4.5 + +$lng['serversettings']['no_robots']['title'] = 'Erlaube die Indizierung Ihres SysCP durch Suchmaschinen'; + +// ADDED IN 1.2.19-svn6 + +$lng['admin']['loggersettings'] = 'Log Einstellungen'; +$lng['serversettings']['logger']['enable'] = 'Logging ja/nein'; +$lng['serversettings']['logger']['severity'] = 'Logging Level'; +$lng['admin']['logger']['normal'] = 'Normal'; +$lng['admin']['logger']['paranoid'] = 'Paranoid'; +$lng['serversettings']['logger']['types']['title'] = 'Log-Art(en)'; +$lng['serversettings']['logger']['types']['description'] = 'Tragen Sie hier die gewünschten Logtypen kommagetrennt ein.
    Mögliche Logtypen sind: syslog, file, mysql'; +$lng['serversettings']['logger']['logfile'] = 'Log-Datei Pfad inklusive Dateinamen'; +$lng['error']['logerror'] = 'Log-Fehler: %s'; +$lng['serversettings']['logger']['logcron'] = 'Log Cronjobs (einen Durchgang)'; +$lng['question']['logger_reallytruncate'] = 'Wollen Sie die Tabelle "%s" wirklich leeren?'; +$lng['admin']['loggersystem'] = 'System-Logging'; +$lng['menue']['logger']['logger'] = 'System-Logging'; +$lng['logger']['date'] = 'Datum'; +$lng['logger']['type'] = 'Typ'; +$lng['logger']['action'] = 'Aktion'; +$lng['logger']['user'] = 'Benutzer'; +$lng['logger']['truncate'] = 'Log leeren'; + +// ADDED IN 1.2.19-svn7 + +$lng['serversettings']['ssl']['use_ssl'] = 'SSL nutzen'; +$lng['serversettings']['ssl']['ssl_cert_file'] = 'Pfad zum Zertifikat'; +$lng['serversettings']['ssl']['openssl_cnf'] = 'Standardwerte zum Erstellen eines Zertifikats'; +$lng['panel']['reseller'] = 'Reseller'; +$lng['panel']['admin'] = 'Administrator'; +$lng['panel']['customer'] = 'Kunde/n'; +$lng['error']['nomessagetosend'] = 'Keine Nachricht angegeben'; +$lng['error']['noreceipientsgiven'] = 'Keine Empfänger angegeben'; +$lng['admin']['emaildomain'] = 'E-Maildomain'; +$lng['admin']['email_only'] = 'Nur E-Mail?'; +$lng['admin']['wwwserveralias'] = 'Einen "www." ServerAlias hinzufügen'; +$lng['admin']['ipsandports']['enable_ssl'] = 'Ist dies ein SSL-Port?'; +$lng['admin']['ipsandports']['ssl_cert_file'] = 'Pfad zum Zertifikat'; +$lng['panel']['send'] = 'Versenden'; +$lng['admin']['subject'] = 'Betreff'; +$lng['admin']['receipient'] = 'Empfänger'; +$lng['admin']['message'] = 'Rundmail senden'; +$lng['admin']['text'] = 'Nachricht'; +$lng['menu']['message'] = 'Nachrichten'; +$lng['error']['errorsendingmail'] = 'Das Versenden der Nachricht an "%s" schlug fehl.'; +$lng['error']['cannotreaddir'] = 'Der Ordner "%s" kann nicht gelesen werden'; +$lng['message']['success'] = 'Nachricht erfolgreich an %s Empfänger gesendet'; +$lng['message']['noreceipients'] = 'Es wurde keine E-Mail versendet da sich keine Empfänger in der Datenbank befinden'; +$lng['admin']['sslsettings'] = 'SSL Einstellungen'; +$lng['cronjobs']['notyetrun'] = 'Bisher nicht gestartet'; +$lng['install']['servername_should_be_fqdn'] = 'Der Servername sollte eine FQDN sein und keine IP Adresse'; +$lng['serversettings']['default_vhostconf']['title'] = 'Standard Vhost-Einstellungen'; +$lng['serversettings']['default_vhostconf']['description'] = 'Der Inhalt dieses Feldes wird direkt in jeden Domain-vHost-Container übernommen. Achtung: Der Code wird nicht auf Fehler geprüft. Etwaige Fehler werden also auch übernommen. Apache könnte nicht mehr starten!'; +$lng['error']['invalidip'] = 'Ungültige IP Adresse: %s'; +$lng['serversettings']['decimal_places'] = 'Nachkommastellen bei der Ausgabe von Traffic/Webspace'; + +// ADDED IN 1.2.19-svn8 + +$lng['admin']['dkimsettings'] = 'DomainKey - Einstellungen'; +$lng['dkim']['dkim_prefix']['title'] = 'Prefix'; +$lng['dkim']['dkim_prefix']['description'] = 'Wie lautet der Pfad zu den DKIM RSA-Dateien sowie den Einstellungsdateien des Milter-Plugins?'; +$lng['dkim']['dkim_domains']['title'] = 'Domains Dateiname'; +$lng['dkim']['dkim_domains']['description'] = 'Dateiname der DKIM Domains Angabe aus der dkim-milter-Konfigurationsdatei'; +$lng['dkim']['dkim_dkimkeys']['title'] = 'KeyList Dateiname'; +$lng['dkim']['dkim_dkimkeys']['description'] = 'Dateiname der DKIM KeyList Angabe aus der dkim-milter-Konfigurationsdatei'; +$lng['dkim']['dkimrestart_command']['title'] = 'Milter Restart Kommando'; +$lng['dkim']['dkimrestart_command']['description'] = 'Wie lautet das Kommando zum Neustarten des DKIM Milter Dienstes?'; + +// ADDED IN 1.2.19-svn9 + +$lng['admin']['caneditphpsettings'] = 'Kann PHP-bezogene Domaineinstellungen machen?'; + +// ADDED IN 1.2.19-svn12 + +$lng['admin']['allips'] = 'Alle IP\'s'; +$lng['panel']['nosslipsavailable'] = 'Für diesen Server wurden noch keine SSL IP/Port Kombinationen eingetragen'; +$lng['ticket']['by'] = 'von'; +$lng['dkim']['use_dkim']['title'] = 'DKIM Support aktivieren?'; +$lng['dkim']['use_dkim']['description'] = 'Wollen Sie das Domain Keys (DKIM) System benutzen?'; +$lng['error']['invalidmysqlhost'] = 'Ungültige MySQL Host Adresse: %s'; +$lng['error']['cannotuseawstatsandwebalizeratonetime'] = 'Webalizer und Awstats können nicht zur gleichen Zeit aktiviert werden, bitte wählen Sie eines aus'; +$lng['serversettings']['webalizer_enabled'] = 'Nutze Webalizer Statistiken'; +$lng['serversettings']['awstats_enabled'] = 'Nutze AWStats Statistiken'; +$lng['admin']['awstatssettings'] = 'Awstats Einstellungen'; +$lng['serversettings']['awstats_domain_file']['title'] = 'Awstats Domain-Dateien Ordner'; +$lng['serversettings']['awstats_model_file']['title'] = 'Awstats Model Datei'; + +// ADDED IN 1.2.19-svn16 + +$lng['admin']['domain_dns_settings'] = 'Domain DNS Einstellungen'; +$lng['dns']['destinationip'] = 'Domain IP'; +$lng['dns']['standardip'] = 'Server Standard IP'; +$lng['dns']['a_record'] = 'A-Eintrag (IPv6 optional)'; +$lng['dns']['cname_record'] = 'CNAME-Eintrag'; +$lng['dns']['mxrecords'] = 'MX Einträge definieren'; +$lng['dns']['standardmx'] = 'Server Standard MX Eintrag'; +$lng['dns']['mxconfig'] = 'Eigene MX Einträge'; +$lng['dns']['priority10'] = 'Priorität 10'; +$lng['dns']['priority20'] = 'Priorität 20'; +$lng['dns']['txtrecords'] = 'TXT Einträge definieren'; +$lng['dns']['txtexample'] = 'Beispiel (SPF-Eintrag):
    v=spf1 ip4:xxx.xxx.xx.0/23 -all'; +$lng['serversettings']['selfdns']['title'] = 'Manuelle DNS Einstellungen für Domains'; +$lng['serversettings']['selfdnscustomer']['title'] = 'Erlaube Kunden eigene DNS Einstellungen vornehmen zu können'; +$lng['admin']['activated'] = 'Aktiviert'; +$lng['admin']['statisticsettings'] = 'Statistik Einstellungen'; +$lng['admin']['or'] = 'oder'; + +// ADDED IN 1.2.19-svn17 + +$lng['serversettings']['unix_names']['title'] = 'Benutze UNIX kompatible Benutzernamen'; +$lng['serversettings']['unix_names']['description'] = 'Erlaubt die Nutzung von - und _ in Benutzernamen wenn Nein'; +$lng['error']['cannotwritetologfile'] = 'Logdatei %s konnte nicht für Schreiboperationen geöffnet werden.'; +$lng['admin']['sysload'] = 'System-Auslastung'; +$lng['admin']['noloadavailable'] = 'nicht verfügbar'; +$lng['admin']['nouptimeavailable'] = 'nicht verfügbar'; +$lng['panel']['backtooverview'] = 'Zurück zur Übersicht'; +$lng['admin']['nosubject'] = '(Kein Betreff)'; +$lng['admin']['configfiles']['statistics'] = 'Statistik'; +$lng['login']['forgotpwd'] = 'Passwort vergessen?'; +$lng['login']['presend'] = 'Passwort zurücksetzen'; +$lng['login']['email'] = 'E-Mail Adresse'; +$lng['login']['remind'] = 'Passwort zurücksetzen'; +$lng['login']['usernotfound'] = 'Fehler: Unbekannter Benutzer!'; +$lng['pwdreminder']['subject'] = 'SysCP - Passwort zurückgesetzt'; +$lng['pwdreminder']['body'] = 'Hallo %s,\n\nIhr SysCP Passwort wurde zurückgesetzt!\nDas neue Passwort lautet: %p\n\nVielen Dank,\nIhr SysCP-Team'; +$lng['pwdreminder']['success'] = 'Passwort erfolgreich zurückgesetzt.
    Sie sollten nun eine E-Mail mit dem neuen Passwort erhalten.'; + +// ADDED IN 1.2.19-svn18 + +$lng['serversettings']['allow_password_reset']['title'] = 'Erlaube das Zurücksetzen des Kundenpassworts'; +$lng['pwdreminder']['notallowed'] = 'Das Zurücksetzen des Passworts ist deaktiviert'; + +// ADDED IN 1.2.19-svn20 + +$lng['serversettings']['awstats_path']['title'] = 'Pfad zum awstats cgi-bin Ordner'; +$lng['serversettings']['awstats_path']['description'] = 'z.B. /usr/share/webapps/awstats/6.1/webroot/cgi-bin/'; +$lng['serversettings']['awstats_updateall_command']['title'] = 'Pfad zu "awstats_updateall.pl"'; +$lng['serversettings']['awstats_updateall_command']['description'] = 'z.B. /usr/bin/awstats_updateall.pl'; + +// ADDED IN 1.2.19-svn21 + +$lng['customer']['title'] = 'Titel'; +$lng['customer']['country'] = 'Land'; +$lng['panel']['dateformat'] = 'JJJJ-MM-TT'; +$lng['panel']['dateformat_function'] = 'd.m.Y'; + +// Y = Year, m = Month, d = Day + +$lng['panel']['timeformat_function'] = 'H:i:s'; + +// H = Hour, i = Minute, s = Second + +$lng['panel']['default'] = 'Standard'; +$lng['panel']['never'] = 'Nie'; +$lng['panel']['active'] = 'Aktiv'; +$lng['panel']['please_choose'] = 'Bitte auswählen'; +$lng['panel']['allow_modifications'] = 'Änderungen zulassen'; +$lng['domains']['add_date'] = 'Zu SysCP hinzugefügt'; +$lng['domains']['registration_date'] = 'Bei Registry hinzugefügt'; +$lng['domains']['topleveldomain'] = 'Top-Level-Domain'; + +// ADDED IN 1.2.19-svn22 + +$lng['serversettings']['allow_password_reset']['description'] = 'Kunden können ihr Passwort zurücksetzen und bekommen ein Neues per E-Mail zugesandt'; +$lng['serversettings']['allow_password_reset_admin']['title'] = 'Erlaube das Zurücksetzen von Admin-/Reseller-Passwörtern.'; +$lng['serversettings']['allow_password_reset_admin']['description'] = 'Admins/Reseller können ihr Passwort zurücksetzen und bekommen ein Neues per E-Mail zugesandt'; + +// ADDED IN 1.2.19-svn25 +// Mailquota + +$lng['emails']['quota'] = 'Kontingent'; +$lng['emails']['noquota'] = 'Kein Kontingent'; +$lng['emails']['updatequota'] = 'Update Kontingent'; +$lng['serversettings']['mail_quota']['title'] = 'Mailbox-Kontingent'; +$lng['serversettings']['mail_quota']['description'] = 'Standard-Kontingent für neuerstellte E-Mail Benutzerkonten (MegaByte)'; +$lng['serversettings']['mail_quota_enabled']['title'] = 'Nutze E-Mail Kontingent für Kunden'; +$lng['serversettings']['mail_quota_enabled']['description'] = 'Aktiviere Kontingent für E-Mailkonten. Standard ist Nein da dies eine spezielle Konfiguration voraussetzt.'; +$lng['serversettings']['mail_quota_enabled']['removelink'] = 'Hier klicken, um alle E-Mail Kontingente zu entfernen'; +$lng['serversettings']['mail_quota_enabled']['enforcelink'] = 'Hier klicken, um allen Benutzern das Standard Kontingent zu zuweisen'; +$lng['question']['admin_quotas_reallywipe'] = 'Sind Sie sicher, dass alle E-Mail Kontingente aus der Tabelle mail_users entfernt werden sollen? Dieser Schritt kann nicht rückgängig gemacht werden!'; +$lng['question']['admin_quotas_reallyenforce'] = 'Sind Sie sicher, dass sie allen Benutzern das default Quota zuweisen wollen? Dies kann nicht rückgängig gemacht werden!'; +$lng['error']['vmailquotawrong'] = 'Die Kontingent-Größe muss positiv sein.'; +$lng['customer']['email_quota'] = 'E-Mail Kontingent'; +$lng['customer']['email_imap'] = 'E-Mail IMAP'; +$lng['customer']['email_pop3'] = 'E-Mail POP3'; +$lng['customer']['mail_quota'] = 'E-Mail Kontingent'; +$lng['panel']['megabyte'] = 'MegaByte'; +$lng['emails']['quota_edit'] = 'E-Mail Kontingent ändern'; +$lng['panel']['not_supported'] = 'Nicht ünterstüzt in: '; +$lng['error']['allocatetoomuchquota'] = 'Sie versuchen %s MB ' . $lng['emails']['quota'] . ' zu zuweisen, haben aber nicht genug übrig.'; + +// Autoresponder module + +$lng['menue']['email']['autoresponder'] = 'Abwesenheitsnachrichten'; +$lng['autoresponder']['active'] = 'Aktiviert'; +$lng['autoresponder']['autoresponder_add'] = 'Abwesenheitsnachricht hinzufügen'; +$lng['autoresponder']['autoresponder_edit'] = 'Abwesenheitsnachricht bearbeiten'; +$lng['autoresponder']['autoresponder_new'] = 'Neue Abwesenheitsnachricht erstellen'; +$lng['autoresponder']['subject'] = 'Betreff'; +$lng['autoresponder']['message'] = 'Nachricht'; +$lng['autoresponder']['account'] = 'Konto'; +$lng['autoresponder']['sender'] = 'Absender'; +$lng['question']['autoresponderdelete'] = 'Abwesenheitsnachricht wirklich löschen?'; +$lng['error']['noemailaccount'] = 'Es gibt zwei mögliche Gründe warum keine Abwesenheitsnachricht erstellt werden kann: Sie benötigen mindestens einen E-Mail Account. Zweitens kann es sein dass bereits für alle Accounts eine Abwesenheitsnachricht eingerichtet wurde.'; +$lng['error']['missingfields'] = 'Es wurden nicht alle Felder augefüllt.'; +$lng['error']['accountnotexisting'] = 'Der angegebene E-Mail-Account existiert nicht.'; +$lng['error']['autoresponderalreadyexists'] = 'Für dieses Konto existiert bereits eine Abwesenheitsnachricht.'; +$lng['error']['invalidautoresponder'] = 'Das angegebene Konto ist ungültig.'; +$lng['serversettings']['autoresponder_active']['title'] = 'Abwesenheitsnachrichten-Modul verwenden'; +$lng['serversettings']['autoresponder_active']['description'] = 'Möchten Sie das Abwesenheitsnachrichten-Modul verwenden? Dazu muss ein separater Cronjob eingerichtet sein.'; +$lng['invoice']['active'] = 'Rechnung aktiviert'; +$lng['admin']['show_version_login']['title'] = 'Zeige SysCP Version beim Login'; +$lng['admin']['show_version_login']['description'] = 'Zeige SysCP Version in der Fußzeile der Loginseite'; +$lng['admin']['show_version_footer']['title'] = 'Zeige SysCP Version in Fußzeile'; +$lng['admin']['show_version_footer']['description'] = 'Zeige SysCP Version in der Fußzeile aller anderen Seiten'; +$lng['admin']['syscp_graphic']['title'] = 'Grafik im Kopfbereich des Panels'; +$lng['admin']['syscp_graphic']['description'] = 'Welche Grafik soll im Kopfbereich des Panels anstatt des SysCP Logos angezeigt werden?'; + +//improved syscp + +$lng['menue']['phpsettings']['maintitle'] = 'PHP Konfigurationen'; +$lng['admin']['phpsettings']['title'] = 'PHP Konfiguration'; +$lng['admin']['phpsettings']['description'] = 'Kurzbeschreibung'; +$lng['admin']['phpsettings']['actions'] = 'Aktionen'; +$lng['admin']['phpsettings']['activedomains'] = 'In Verwendung für Domain(s)'; +$lng['admin']['phpsettings']['notused'] = 'Konfiguration wird nicht verwendet'; +$lng['admin']['misc'] = 'Sonstiges'; +$lng['admin']['phpsettings']['editsettings'] = 'PHP Konfiguration bearbeiten'; +$lng['admin']['phpsettings']['addsettings'] = 'PHP Konfiguration erstellen'; +$lng['admin']['phpsettings']['viewsettings'] = 'PHP Konfiguration ansehen'; +$lng['admin']['phpsettings']['phpinisettings'] = 'php.ini Einstellungen'; +$lng['error']['nopermissionsorinvalidid'] = 'Entweder fehlen Ihnen die nötigen Rechte diese Einstellung zu ändern oder es wurde eine ungültige Id übergeben'; +$lng['panel']['view'] = 'ansehen'; +$lng['question']['phpsetting_reallydelete'] = 'Wollen Sie diese PHP Einstellungen wirklich löschen? Alle Domains die diese Einstellungen bis jetzt verwendet haben, werden dann auf die Standard Einstellungen umgestellt.'; +$lng['admin']['phpsettings']['addnew'] = 'Neue Konfiguration erstellen'; +$lng['error']['phpsettingidwrong'] = 'Eine PHP Konfiguration mit dieser Id existiert nicht'; +$lng['error']['descriptioninvalid'] = 'Der Beschreibungstext ist zu kurz, zu lang oder enthält ungültige Zeichen'; +$lng['error']['info'] = 'Info'; +$lng['admin']['phpconfig']['template_replace_vars'] = 'Variablen, die in den Konfigurationen ersetzt werden'; +$lng['admin']['phpconfig']['safe_mode'] = 'Wird mit der safe_mode Einstellung der Domain ersetzt.'; +$lng['admin']['phpconfig']['pear_dir'] = 'Wird mit dem globalen Wert für das Include Verzeichnis ersetzt.'; +$lng['admin']['phpconfig']['open_basedir'] = 'Wird mit der open_basedir Einstellung der Domain ersetzt.'; +$lng['admin']['phpconfig']['tmp_dir'] = 'Wird mit der Einstellung für das temporäre Verzeichnis der Domain ersetzt.'; +$lng['admin']['phpconfig']['open_basedir_global'] = 'Wird mit der globalen Einstellung des Pfades ersetzt, der dem open_basedir hinzugefügt wird.'; +$lng['admin']['phpconfig']['customer_email'] = 'Wird mit der E-Mail Adresse des Kunden ersetzt, dem die Domain gehört.'; +$lng['admin']['phpconfig']['admin_email'] = 'Wird mit der E-Mail Adresse des Admins ersetzt, dem die Domain gehört.'; +$lng['admin']['phpconfig']['domain'] = 'Wird mit der Domain ersetzt.'; +$lng['admin']['phpconfig']['customer'] = 'Wird mit dem Loginnamen des Kunden ersetzt, dem die Domain gehört.'; +$lng['admin']['phpconfig']['admin'] = 'Wird mit dem Loginnamen des Admins ersetzt, dem die Domain gehört.'; +$lng['login']['backtologin'] = 'Zurück zum Login'; +$lng['serversettings']['mod_fcgid']['starter']['title'] = 'Prozesse je Domain'; +$lng['serversettings']['mod_fcgid']['starter']['description'] = 'Wieviele PHP Prozesse pro Domain sollen gestartet/erlaubt werden. Der Wert 0 wird empfohlen, da PHP dann selbst die Anzahl effizient verwaltet.'; +$lng['serversettings']['mod_fcgid']['wrapper']['title'] = 'Wrappereinbindung in Vhosts'; +$lng['serversettings']['mod_fcgid']['wrapper']['description'] = 'Wie sollen die Wrapper in den Vhosts eingebunden werden'; +$lng['serversettings']['mod_fcgid']['tmpdir']['description'] = 'Wo sollen die temporären Verzeichnisse erstellt werden'; +$lng['admin']['know_what_youre_doing'] = 'Ändern Sie diese Einstellungen nur, wenn Sie wissen was Sie tun!'; +$lng['serversettings']['mod_fcgid']['peardir']['title'] = 'Globale PEAR Verzeichnisse'; +$lng['serversettings']['mod_fcgid']['peardir']['description'] = 'Welche globalen PEAR Verzeichnisse sollen in den php.ini Einstellungen ersetzt werden? Einzelne Verzeichnisse sind mit einem Doppelpunkt zu trennen.'; + +//improved syscp 2 + +$lng['admin']['templates']['index_html'] = 'index.html Datei für neu erzeugte Kundenverzeichnisse'; +$lng['admin']['templates']['SERVERNAME'] = 'Wird mit dem Servernamen ersetzt.'; +$lng['admin']['templates']['CUSTOMER'] = 'Wird mit dem Loginnamen des Kunden ersetzt.'; +$lng['admin']['templates']['ADMIN'] = 'Wird mit dem Loginnamen des Admins ersetzt.'; +$lng['admin']['templates']['CUSTOMER_EMAIL'] = 'Wird mit der E-Mail Adresse des Kunden ersetzt.'; +$lng['admin']['templates']['ADMIN_EMAIL'] = 'Wird mit der E-Mail Adresse des Admin ersetzt.'; +$lng['admin']['templates']['filetemplates'] = 'Dateivorlagen'; +$lng['admin']['templates']['filecontent'] = 'Dateiinhalt'; +$lng['error']['filecontentnotset'] = 'Diese Datei darf nicht leer sein!'; +$lng['serversettings']['index_file_extension']['description'] = 'Welche Dateiendung soll die index Datei in neu erstellten Kundenverzeichnissen haben? Diese Dateiendung wird dann verwendet, wenn Sie bzw. einer Ihrer Admins eigene index Dateivorlagen erstellt haben.'; +$lng['serversettings']['index_file_extension']['title'] = 'Dateiendung für index Datei in neu erstellen Kundenverzeichnissen'; +$lng['error']['index_file_extension'] = 'Die Dateiendung für die index Datei muss zwischen 1 und 6 Zeichen lang sein und darf nur aus den Zeichen a-z, A-Z und 0-9 bestehen'; +$lng['admin']['security_settings'] = 'Sicherheitseinstellungen'; +$lng['admin']['expert_settings'] = 'Experteneinstellungen!'; +$lng['admin']['mod_fcgid_starter']['title'] = 'PHP Prozesse für diese Domain (leer für Standardwert)'; + +//added with aps installer + +$lng['admin']['aps'] = 'APS Installer'; +$lng['customer']['aps'] = 'APS Installer'; +$lng['aps']['scan'] = 'Neue Pakete einlesen'; +$lng['aps']['upload'] = 'Neue Pakete hochladen'; +$lng['aps']['managepackages'] = 'Pakete verwalten'; +$lng['aps']['manageinstances'] = 'Instanzen verwalten'; +$lng['aps']['overview'] = 'Paketübersicht'; +$lng['aps']['status'] = 'Meine Pakete'; +$lng['aps']['search'] = 'Paket suchen'; +$lng['aps']['upload_description'] = 'Bitte wählen Sie die APS ZIP-Dateien aus, um diese im System zu installieren.'; +$lng['aps']['search_description'] = 'Name, Beschreibung, Schlagwort, Version'; +$lng['aps']['detail'] = 'Weitere Informationen'; +$lng['aps']['install'] = 'Paket installieren'; +$lng['aps']['data'] = 'Daten'; +$lng['aps']['version'] = 'Version'; +$lng['aps']['homepage'] = 'Homepage'; +$lng['aps']['installed_size'] = 'Größe nach Installation'; +$lng['aps']['categories'] = 'Kategorien'; +$lng['aps']['languages'] = 'Sprachen'; +$lng['aps']['long_description'] = 'Langbeschreibung'; +$lng['aps']['configscript'] = 'Konfigurationskript'; +$lng['aps']['changelog'] = 'Changelog'; +$lng['aps']['license'] = 'Lizenz'; +$lng['aps']['linktolicense'] = 'Link zur Lizenz'; +$lng['aps']['screenshots'] = 'Screenshots'; +$lng['aps']['back'] = 'Zurück zur Übersicht'; +$lng['aps']['install_wizard'] = 'Installationsassistent...'; +$lng['aps']['wizard_error'] = 'Ihre Eingaben enthalten ungültige Daten. Bitte korrigieren Sie diese, um mit der Installation fortzufahren.'; +$lng['aps']['basic_settings'] = 'Grundlegende Einstellungen'; +$lng['aps']['application_location'] = 'Installationsort'; +$lng['aps']['application_location_description'] = 'Ort an dem die Anwendung installiert werden soll.'; +$lng['aps']['no_domains'] = 'Keine Domains gefunden'; +$lng['aps']['database_password'] = 'Datenbankpasswort'; +$lng['aps']['database_password_description'] = 'Passwort welches für die neu zu erstellende Datenbank verwendet werden soll.'; +$lng['aps']['license_agreement'] = 'Zustimmung'; +$lng['aps']['cancel_install'] = 'Installation abbrechen'; +$lng['aps']['notazipfile'] = 'Die hochgeladene Datei ist keine gültige ZIP-Datei.'; +$lng['aps']['filetoobig'] = 'Die Datei ist zu groß.'; +$lng['aps']['filenotcomplete'] = 'Die Datei wurde nicht vollständig hochgeladen.'; +$lng['aps']['phperror'] = 'Es trat ein PHP interner Fehler auf. Der Upload Fehlercode lautet #'; +$lng['aps']['moveproblem'] = 'Die hochgeladene Datei konnte nicht aus dem temporären Ordner verschoben werden. Prüfen Sie ob alle Rechte korrekt gesetzt sind. Dies gilt insbesondere fü die Ordner /var/www/syscp/temp/ und /var/www/syscp/packages/.'; +$lng['aps']['uploaderrors'] = 'Fehler für die Datei %s
      %s
    '; +$lng['aps']['nospecialchars'] = 'Sonderzeichen sind im Suchausdruck nicht erlaubt!'; +$lng['aps']['noitemsfound'] = 'Es wurden keine Pakete gefunden!'; +$lng['aps']['nopackagesinstalled'] = 'Sie haben noch kein Paket installiert welches angezeigt werden könnte.'; +$lng['aps']['instance_install'] = 'Paket wurde zur Installation vorgemerkt'; +$lng['aps']['instance_task_active'] = 'Paket wird gerade installiert'; +$lng['aps']['instance_success'] = 'Paket ist installiert bzw. wurde erfolgreich installiert'; +$lng['aps']['instance_error'] = 'Paket ist nicht installiert - bei der Installation traten Fehler auf'; +$lng['aps']['instance_uninstall'] = 'Paket wurde zur Deinstallation vorgemerkt'; +$lng['aps']['unknown_status'] = 'Fehler - Unbekannter Wert'; +$lng['aps']['currentstatus'] = 'Aktueller Status'; +$lng['aps']['activetasks'] = 'Aktuelle Jobs'; +$lng['aps']['task_install'] = 'Installation ausstehend'; +$lng['aps']['task_remove'] = 'Deinstallation ausstehend'; +$lng['aps']['task_reconfigure'] = 'Neukonfiguration ausstehend'; +$lng['aps']['task_upgrade'] = 'Aktualisierung ausstehend'; +$lng['aps']['no_task'] = 'Kein Task ausstehend'; +$lng['aps']['applicationlinks'] = 'Anwendungslinks'; +$lng['aps']['mainsite'] = 'Hauptseite'; +$lng['aps']['uninstall'] = 'Paket deinstallieren'; +$lng['aps']['reconfigure'] = 'Einstellungen ändern'; +$lng['aps']['erroronnewinstance'] = 'Dieses Paket kann nicht installiert werden.

    Bitte gehen Sie zurück zur Paketübersicht und starten Sie eine neue Installation.'; +$lng['aps']['successonnewinstance'] = '%s wird nun installiert.

    Gehen Sie zurück zu "Meine Pakete" und warten Sie bis die Installation abgeschlossen ist. Dies kann einige Minuten in Anspruch nehmen.'; +$lng['aps']['php_misc_handler'] = 'PHP - Sonstiges - Es werden keine anderen Dateiendungen als .php zum Parsen unterstützt.'; +$lng['aps']['php_misc_directoryhandler'] = 'PHP - Sonstiges - Je Verzeichnis deaktivierte PHP Handler werden nicht unterstützt.'; +$lng['aps']['asp_net'] = 'ASP.NET - Paket wird nicht unterstützt.'; +$lng['aps']['cgi'] = 'CGI - Paket wird nicht unterstützt.'; +$lng['aps']['php_extension'] = 'PHP - Erweiterung "%s" fehlt.'; +$lng['aps']['php_function'] = 'PHP - Funktion "%s" fehlt.'; +$lng['aps']['php_configuration'] = 'PHP - Konfiguration - Aktuelle "%s" Einstellung wird von Paket nicht unterstützt.'; +$lng['aps']['php_configuration_post_max_size'] = 'PHP - Konfiguration - "post_max_size" Wert zu klein.'; +$lng['aps']['php_configuration_memory_limit'] = 'PHP - Konfiguration - "memory_limit" Wert zu klein.'; +$lng['aps']['php_configuration_max_execution_time'] = 'PHP - Konfiguration - "max_execution_time" Wert zu klein.'; +$lng['aps']['php_general_old'] = 'PHP - Generell - PHP Version zu alt.'; +$lng['aps']['php_general_new'] = 'PHP - Generell - PHP Version zu neu.'; +$lng['aps']['db_mysql_support'] = 'Datenbank - Das Paket benötigt eine andere Datenbank Engine als MySQL.'; +$lng['aps']['db_mysql_version'] = 'Datenbank - MySQL Server zu alt.'; +$lng['aps']['webserver_module'] = 'Webserver - Modul "%s" fehlt.'; +$lng['aps']['webserver_fcgid'] = 'Webserver - Von diesem Paket werden einige Webserver Module benötigt. Da Sie SysCP in einer FastCGI/mod_fcgid Umgebung verwenden existiert die Funktion "apache_get_modules" nicht. Es kann also nicht ermittelt werden ob das Paket unterstützt wird.'; +$lng['aps']['webserver_htaccess'] = 'Webserver - Dieses Paket benötigt dass .htaccess Dateien vom Webserver geparst werden. Das Paket kann nicht installiert werden, da nicht ermittelt werden kann ob diese Funktion aktiviert ist.'; +$lng['aps']['misc_configscript'] = 'Sonstiges - Die Sprache des Konfigurationsskriptes wird nicht unterstützt.'; +$lng['aps']['misc_charset'] = 'Sonstiges - In der aktuellen Version wird eine Validierung gegen einen gewissen Zeichensatz im Installationsassitenten nicht unterstützt.'; +$lng['aps']['misc_version_already_installed'] = 'Die gleiche Paketversion ist bereits installiert.'; +$lng['aps']['misc_only_newer_versions'] = 'Aus Sicherheitsgründen können nur Pakete installiert werden die neuer sind als die, die bereits im System installiert sind.'; +$lng['aps']['erroronscan'] = 'Fehler für %s
      %s
    '; +$lng['aps']['invalidzipfile'] = 'Fehler für %s
    • Dies ist keine gültige APS ZIP-Datei!
    '; +$lng['aps']['successpackageupdate'] = '%s erfolgreich als Paketupdate installiert'; +$lng['aps']['successpackageinstall'] = '%s erfolgreich als neues Paket installiert'; +$lng['aps']['class_zip_missing'] = 'SimpleXML Klasse, exec Funktion oder ZIP Funktionen nicht vorhanden bzw. aktiviert! Für genauere Informationen zu diesem Problem schauen Sie bitte in das Handbuch zu diesem Modul.'; +$lng['aps']['dir_permissions'] = 'Der PHP bzw. Webserver Prozess muss Schreibrechte für /var/www/syscp/temp/ und /var/www/syscp/packages/ haben.'; +$lng['aps']['initerror'] = 'Es gibt ein paar Probleme mit diesem Modul:
      %s
    Beheben Sie diese Probleme oder das Modul kann nicht genutzt werden!'; +$lng['aps']['iderror'] = 'Es wurde eine falsche Id übergeben!'; +$lng['aps']['nopacketsforinstallation'] = 'Es wurden keine Pakete zur Installation gefunden.'; +$lng['aps']['nopackagestoinstall'] = 'Es existieren keine Pakete die angezeigt oder installiert werden könnten.'; +$lng['aps']['nodomains'] = 'Wählen Sie eine Domain aus der Liste. Sollte keine Domain vorhanden sein können Sie keine Pakete installieren!'; +$lng['aps']['wrongpath'] = 'Entweder enthält dieser Pfad ungültige Zeichen oder es ist bereits eine Anwendung am gegebenen Ort installiert.'; +$lng['aps']['dbpassword'] = 'Geben Sie ein Passwort mit einer minimalen Länge von 8 Zeichen ein.'; +$lng['aps']['error_text'] = 'Geben Sie einen Text ohne Sonderzeichen ein.'; +$lng['aps']['error_email'] = 'Geben Sie eine gültige E-Mail Adresse ein.'; +$lng['aps']['error_domain'] = 'Geben Sie eine gültige URL wie http://www.example.com/ ein.'; +$lng['aps']['error_integer'] = 'Geben Sie eine Zahl (Integer-Format) ein. Beispiel: 5 oder 7.'; +$lng['aps']['error_float'] = 'Geben Sie eine Zahl (Float-Format) ein. Beispiel: 5,2432 oder 7,5346.'; +$lng['aps']['error_password'] = 'Geben Sie ein Passwort ein.'; +$lng['aps']['error_license'] = 'Ja, ich habe die Lizenz gelesen und willige ein diese zu befolgen.'; +$lng['aps']['error_licensenoaccept'] = 'Sie müssen die Lizenz annehmen um die Anwendung installieren zu können.'; +$lng['aps']['stopinstall'] = 'Installation abbrechen'; +$lng['aps']['installstopped'] = 'Die Installation für dieses Paket wurde erfolgreich abgebrochen.'; +$lng['aps']['installstoperror'] = 'Die Installation kann nicht mehr abgebrochen werden, da diese bereits gestartet wurde. Möchten Sie das Paket entfernen, so warten Sie die Installation ab und entfernen Sie dann das Paket unter "Meine Pakete"'; +$lng['aps']['waitfortask'] = 'Es stehen momentan keine Aktionen zur Verfügung. Warten Sie bis alle Tasks abgearbeitet wurden.'; +$lng['aps']['removetaskexisting'] = 'Es gibt bereits einen Task zur Deinstallation.

    Bitte gehen Sie zurück zu "Meine Pakete" und warten Sie bis die Deinstallation abgeschlossen ist.'; +$lng['aps']['packagewillberemoved'] = 'Das Paket wird nun deinstalliert.

    Gehen Sie zurück zu "Meine Pakete" und warten Sie bis die Deinstallation abgeschlossen ist.'; +$lng['question']['reallywanttoremove'] = 'Wollen Sie dieses Paket wirklich deinstallieren?

    Alle Datenbankinhalte und Dateien werden unwiderruflich gelöscht. Wenn Sie die enthaltenen Daten weiterhin benötigen, stellen Sie sicher dass Sie diese vorher sichern!

    '; +$lng['aps']['searchoneresult'] = '%s Paket gefunden'; +$lng['aps']['searchmultiresult'] = '%s Pakete gefunden'; +$lng['question']['reallywanttostop'] = 'Wollen Sie die Installation dieses Paketes wirklich abbrechen?

    '; +$lng['aps']['packagenameandversion'] = 'Paketname & Version'; +$lng['aps']['package_locked'] = 'Gesperrt'; +$lng['aps']['package_enabled'] = 'Freigegeben'; +$lng['aps']['lock'] = 'Sperren'; +$lng['aps']['unlock'] = 'Freigeben'; +$lng['aps']['remove'] = 'Löschen'; +$lng['aps']['allpackages'] = 'Alle Pakete'; +$lng['question']['reallyremovepackages'] = 'Wollen Sie diese Pakete wirklich löschen?

    Pakete mit Abhängigkeiten können erst gelöscht werden wenn die entsprechenden Instanzen dafür deinstalliert wurden!

    '; +$lng['aps']['nopackagesinsystem'] = 'Es wurden noch keine Pakete im System installiert, die verwaltet werden könnten.'; +$lng['aps']['packagenameandstatus'] = 'Paketname & Status'; +$lng['aps']['activate_aps']['title'] = 'APS Installer aktivieren'; +$lng['aps']['activate_aps']['description'] = 'Hier können Sie den APS Installer global aktivieren bzw. deaktivieren.'; +$lng['aps']['packages_per_page']['title'] = 'Pakete pro Seite'; +$lng['aps']['packages_per_page']['description'] = 'Wieviele Pakete sollen Kunden pro Seite angezeigt bekommen?'; +$lng['aps']['upload_fields']['title'] = 'Uploadfelder pro Seite'; +$lng['aps']['upload_fields']['description'] = 'Wieviele Uploadfelder sollen im Panel zur Installation von Paketen angezeigt werden?'; +$lng['aps']['exceptions']['title'] = 'Ausnahmen für Paketvalidierung'; +$lng['aps']['exceptions']['description'] = 'Manche Pakete benötigen spezielle Konfigurationsparameter oder Module. Der Installer selbst kann nicht immer eindeutig feststellen ob diese Optionen/Erweiterungen aktiviert sind. Aus diesem Grund kann man hier nun Ausnahmen festlegen damit Pakete dann trotzdem installiert werden können. Wählen Sie nur die Optionen aus, die auch wirklich so mit der Realität übereinstimmen. Für genauere Informationen zu diesem Problem schauen Sie bitte in das Handbuch zu diesem Modul.'; +$lng['aps']['settings_php_extensions'] = 'PHP-Erweiterungen'; +$lng['aps']['settings_php_configuration'] = 'PHP-Konfiguration'; +$lng['aps']['settings_webserver_modules'] = 'Webserver Module'; +$lng['aps']['settings_webserver_misc'] = 'Webserver Sonstiges'; +$lng['aps']['specialoptions'] = 'Sonderoptionen'; +$lng['aps']['removeunused'] = 'Ungenutzte Pakete entfernen'; +$lng['aps']['enablenewest'] = 'Von jedem Paket neueste Version freigeben, alte sperren'; +$lng['aps']['installations'] = 'Installationen'; +$lng['aps']['statistics'] = 'Statistiken'; +$lng['aps']['numerofpackagesinstalled'] = '%s Pakete vorhanden
    '; +$lng['aps']['numerofpackagesenabled'] = '%s Pakete freigegeben
    '; +$lng['aps']['numerofpackageslocked'] = '%s Pakete gesperrt
    '; +$lng['aps']['numerofinstances'] = '%s Instanzen installiert
    '; +$lng['question']['reallydoaction'] = 'Wollen Sie die gewählten Aktionen wirklich durchführen?

    Daten, die durch diese Vorgänge möglicherweise gelöscht werden, können anschließend nicht wieder hergestellt werden.

    '; +$lng['aps']['initerror_customer'] = 'Es gibt momentan ein Problem mit dieser SysCP Erweiterung. Wenden Sie sich an Ihren Administrator für weitere Informationen.'; +$lng['aps']['numerofinstances'] = '%s Installationen insgesamt
    '; +$lng['aps']['numerofinstancessuccess'] = '%s erfolgreiche Installationen
    '; +$lng['aps']['numerofinstanceserror'] = '%s fehlgeschlagene Installationen
    '; +$lng['aps']['numerofinstancesaction'] = '%s geplante Installationen/Deinstallationen'; +$lng['aps']['downloadallpackages'] = 'Alle Pakete vom Distributionsserver herunterladen'; +$lng['aps']['updateallpackages'] = 'Alle Pakete über Distributionsserver aktualisieren'; +$lng['aps']['downloadtaskexists'] = 'Es gibt bereits einen Task zum Download aller Pakete. Bitte warten Sie bis dieser abgeschlossen ist.'; +$lng['aps']['downloadtaskinserted'] = 'Es wurde ein Task zum Download aller Pakete erstellt. Dieser Vorgang kann einige Minuten in Anspruch nehmen.'; +$lng['aps']['updatetaskexists'] = 'Es gibt bereits einen Task zur Aktualisierung aller Pakete. Bitte warten Sie bis dieser abgeschlossen ist.'; +$lng['aps']['updatetaskinserted'] = 'Es wurde ein Task zur Aktualisierung aller Pakete erstellt. Dieser Vorgang kann einige Minuten in Anspruch nehmen.'; +$lng['aps']['canmanagepackages'] = 'Darf APS Pakete verwalten'; +$lng['aps']['numberofapspackages'] = 'Anzahl an APS Installationen'; +$lng['aps']['allpackagesused'] = 'Fehler

    Sie haben bereits die Anzahl an installierbaren APS Anwendungen erreicht bzw. überschritten.'; +$lng['aps']['noinstancesexisting'] = 'Es gibt momentan noch keine Instanzen, die verwaltet werden könnten. Es muss mindestens eine Anwendung von einem Kunden installiert worden sein.'; +$lng['aps']['lightywarning'] = 'Warnung'; +$lng['aps']['lightywarningdescription'] = 'Sie verwenden den lighttpd Webserver zusammen mit SysCP. Da das APS Modul hauptsächlich für den Apache Webserver geschrieben wurde, kann es unter Umständen vorkommen, dass gewisse Features mit lighttpd nicht funktionieren. Bitte beachten Sie dies bei der Verwendung des APS Moduls. Sollten Sie Fehler bei der Verwendung oder Probleme bei der Nutzung haben, so leiten Sie diese bitte an die Entwickler weiter, damit diese Probleme in der nächsten Version behoben werden können.'; +$lng['error']['customerdoesntexist'] = 'Der ausgewählte Kunde existiert nicht.'; +$lng['error']['admindoesntexist'] = 'Der ausgewählte Admin existiert nicht.'; + +// ADDED IN 1.2.19-svn37 + +$lng['serversettings']['system_realtime_port']['title'] = 'Port für Realtime SysCP'; +$lng['serversettings']['system_realtime_port']['description'] = 'Dieser Port auf localhost wird bei jedem neuen Cron-Task kontaktiert. Wenn der Wert 0 (Null) ist, dann ist dieses Feature deaktiviert.
    Siehe dazu auch: Make SysCP work in realtime (SysCP Wiki)'; +$lng['serversettings']['session_allow_multiple_login']['title'] = 'Erlaube gleichzeitigen Login'; +$lng['serversettings']['session_allow_multiple_login']['description'] = 'Wenn diese Option aktiviert ist, können sich Nutzer mehrmals gleichzeitig anmelden.'; +$lng['serversettings']['panel_allow_domain_change_admin']['title'] = 'Erlaube Verschieben von Domains unter Admins'; +$lng['serversettings']['panel_allow_domain_change_admin']['description'] = 'Wenn diese Option aktiviert ist, kann unter Domaineinstellungen die Domain einem anderen Admin zugewiesen werden.
    Achtung: Wenn der Kunde einer Domain nicht dem gleichen Admin zugeordnet ist wie die Domain selbst, kann dieser Admin alle anderen Domains des Kunden sehen!'; +$lng['serversettings']['panel_allow_domain_change_customer']['title'] = 'Erlaube Verschieben von Domains unter Kunden'; +$lng['serversettings']['panel_allow_domain_change_customer']['description'] = 'Wenn diese Option aktiviert ist, kann unter Domaineinstellungen die Domain einem anderen Kunden zugewiesen werden.
    Achtung: Es werden keine Pfade bei dieser Aktion angepasst. Das kann dazu führen, dass die Domain nach dem Verschieben nicht mehr richtig funktioniert!'; +$lng['domains']['associated_with_domain'] = 'Verbunden mit'; +$lng['domains']['aliasdomains'] = 'Aliasdomains'; +$lng['error']['ipportdoesntexist'] = 'Die gewählte IP/Port-Kombination existiert nicht.'; + +// ADDED IN 1.2.19-svn38 + +$lng['admin']['phpserversettings'] = 'PHP Einstellungen'; +$lng['admin']['phpsettings']['binary'] = 'PHP Binary'; +$lng['admin']['phpsettings']['file_extensions'] = 'Dateiendungen'; +$lng['admin']['phpsettings']['file_extensions_note'] = '(ohne Punkt, durch Leerzeichen getrennt)'; +$lng['admin']['mod_fcgid_maxrequests']['title'] = 'Maxmale PHP Requests für diese Domain (leer für Standardwert)'; +$lng['serversettings']['mod_fcgid']['maxrequests']['title'] = 'Maximale Requests pro Domain'; +$lng['serversettings']['mod_fcgid']['maxrequests']['description'] = 'Wieviele PHP Requests pro Domain sollen erlaubt werden?'; + +// fix bug #1124 +$lng['admin']['webserver'] = 'Webserver'; +$lng['error']['admin_domain_emailsystemhostname'] = 'Der Server-Hostname kann leider nicht als E-Mail-Domain verwendet werden.'; +$lng['aps']['license_link'] = 'Link zur Lizenz'; + +// ADDED IN 1.4.2.1 +$lng['admin']['thankyou'] = 'Vielen Dank'; +$lng['admin']['contributors'] = 'Diese Leute haben zum SysCP Projekt beigetragen (keine besondere Ordnung)'; + +?> \ No newline at end of file diff --git a/lng/hungarian.lng.php b/lng/hungarian.lng.php new file mode 100644 index 0000000000..1ebd2f088d --- /dev/null +++ b/lng/hungarian.lng.php @@ -0,0 +1,469 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Language + * @version $Id: hungarian.lng.php 2692 2009-03-27 18:04:47Z flo $ + */ + +/** + * Global + */ + +$lng['translator'] = 'Puchner László'; +$lng['panel']['edit'] = 'szerkeszt'; +$lng['panel']['delete'] = 'töröl'; +$lng['panel']['create'] = 'létrehoz'; +$lng['panel']['save'] = 'ment'; +$lng['panel']['yes'] = 'igen'; +$lng['panel']['no'] = 'nem'; +$lng['panel']['emptyfornochanges'] = 'változtatásig üres'; +$lng['panel']['emptyfordefault'] = 'alapértelmezésben üres'; +$lng['panel']['path'] = 'Útvonal'; +$lng['panel']['toggle'] = 'Átkapcsol'; +$lng['panel']['next'] = 'következő'; +$lng['panel']['dirsmissing'] = 'Könyvtár nem található vagy nem olvasható!'; + +/** + * Login + */ + +$lng['login']['username'] = 'Felhasználónév'; +$lng['login']['password'] = 'Jelszó'; +$lng['login']['language'] = 'Nyelv'; +$lng['login']['login'] = 'Bejelentkezés'; +$lng['login']['logout'] = 'Kijelentkezés'; +$lng['login']['profile_lng'] = 'Profile nyelve'; + +/** + * Customer + */ + +$lng['customer']['documentroot'] = 'Kezdőkönyvtár'; +$lng['customer']['name'] = 'Név'; +$lng['customer']['firstname'] = 'Keresztnév'; +$lng['customer']['company'] = 'Cégnév'; +$lng['customer']['street'] = 'Utca'; +$lng['customer']['zipcode'] = 'Irányítószám'; +$lng['customer']['city'] = 'Település'; +$lng['customer']['phone'] = 'Telefon'; +$lng['customer']['fax'] = 'Fax'; +$lng['customer']['email'] = 'E-mail'; +$lng['customer']['customernumber'] = 'Felhasználó-azonosító'; +$lng['customer']['diskspace'] = 'Tárhely (MB)'; +$lng['customer']['traffic'] = 'Forgalom (GB)'; +$lng['customer']['mysqls'] = 'MySQL-Adatbázis'; +$lng['customer']['emails'] = 'E-mail címek'; +$lng['customer']['accounts'] = 'E-mail fiókok'; +$lng['customer']['forwarders'] = 'E-mail továbbítók'; +$lng['customer']['ftps'] = 'FTP fiókok'; +$lng['customer']['subdomains'] = 'Aldomain(ek)'; +$lng['customer']['domains'] = 'Domain(ek)'; +$lng['customer']['unlimited'] = 'korlátlan'; + +/** + * Customermenue + */ + +$lng['menue']['main']['main'] = 'Főmenü'; +$lng['menue']['main']['changepassword'] = 'Jelszócsere'; +$lng['menue']['main']['changelanguage'] = 'Nyelv-változtatás'; +$lng['menue']['email']['email'] = 'E-mail'; +$lng['menue']['email']['emails'] = 'Címek'; +$lng['menue']['email']['webmail'] = 'WebMail'; +$lng['menue']['mysql']['mysql'] = 'MySQL'; +$lng['menue']['mysql']['databases'] = 'Adatbázisok'; +$lng['menue']['mysql']['phpmyadmin'] = 'phpMyAdmin'; +$lng['menue']['domains']['domains'] = 'Domainek'; +$lng['menue']['domains']['settings'] = 'Beállítások'; +$lng['menue']['ftp']['ftp'] = 'FTP'; +$lng['menue']['ftp']['accounts'] = 'Fiókok'; +$lng['menue']['ftp']['webftp'] = 'WebFTP'; +$lng['menue']['extras']['extras'] = 'Extrák'; +$lng['menue']['extras']['directoryprotection'] = 'Könyvtárvédelem'; +$lng['menue']['extras']['pathoptions'] = 'Útvonal opciók'; + +/** + * Index + */ + +$lng['index']['customerdetails'] = 'Felhasználói adatok'; +$lng['index']['accountdetails'] = 'Fiók adatok'; + +/** + * Change Password + */ + +$lng['changepassword']['old_password'] = 'Régi jelszó'; +$lng['changepassword']['new_password'] = 'Új jelszó'; +$lng['changepassword']['new_password_confirm'] = 'Új jelszó (megerősítés)'; +$lng['changepassword']['new_password_ifnotempty'] = 'Új jelszó (üres = nem változik)'; +$lng['changepassword']['also_change_ftp'] = ' a fő FTP fiók jelszav&aat is megváltoztatja'; + +/** + * Domains + */ + +$lng['domains']['description'] = 'Itt hozhat létre (al-)domaineket és megváltoztathatja azok útvonalait.
    A rendszernek minden változtatás után szüksége van némi időre, míg az új beállításokat érvényesíti.'; +$lng['domains']['domainsettings'] = 'Domain beállítások'; +$lng['domains']['domainname'] = 'Domain név'; +$lng['domains']['subdomain_add'] = '(Al-)domain létrehozása'; +$lng['domains']['subdomain_edit'] = '(Al-)domain szerkesztése'; +$lng['domains']['wildcarddomain'] = 'Helyettesítőként hozza létre?'; +$lng['domains']['aliasdomain'] = 'Domain alias (álnév)'; +$lng['domains']['noaliasdomain'] = 'Nincs domain alias (álnév)'; + +/** + * E-mails + */ + +$lng['emails']['description'] = 'Itt hozhatja létre és módosíthatja e-mail címeit.
    Egy fiók olyan, mint az Ön postaládája a ház előtt. Ha valaki küld Önnek egy e-mailt, az a postaládába érkezik meg.

    Az e-mailek letöltéséhez állísa be levelező-programját az alábbiak szerint: (A dőltbetűs adatokat változtassa meg azok alapján, amelyeket beírt!)
    Szerver (host) neve: Domain név
    felhasználón&eav: Postafiók neve / e-mail cím
    Jelszó: A jelszó, amelyet választott'; +$lng['emails']['emailaddress'] = 'E-mail cím'; +$lng['emails']['emails_add'] = 'E-mail cím létrehozása'; +$lng['emails']['emails_edit'] = 'E-mail cím szerkesztése'; +$lng['emails']['catchall'] = 'Gyűjtő'; +$lng['emails']['iscatchall'] = 'Beállítja gyűjtő címként?'; +$lng['emails']['account'] = 'Fiók'; +$lng['emails']['account_add'] = 'Fiók létrehozása'; +$lng['emails']['account_delete'] = 'Fiók törlése'; +$lng['emails']['from'] = 'Feladó'; +$lng['emails']['to'] = 'Cím'; +$lng['emails']['forwarders'] = 'Továbbítók'; +$lng['emails']['forwarder_add'] = 'Továbbító létrehozása'; + +/** + * FTP + */ + +$lng['ftp']['description'] = 'Itt hozhatja létre és módosíthatja FTP fiókjait.
    A változások azonnal érvénybe lépnek és használhatók.'; +$lng['ftp']['account_add'] = 'Fiók létrehozása'; + +/** + * MySQL + */ + +$lng['mysql']['databasename'] = 'felhasználó/adatbázis neve'; +$lng['mysql']['databasedescription'] = 'adatbázis leírása'; +$lng['mysql']['database_create'] = 'Adatbázis létrehozása'; + +/** + * Extras + */ + +$lng['extras']['description'] = 'Itt állíthat be egyebeket, pl. könyvtárvédelmet.
    A rendszernek minden változtatás után szüksége van némi időre, míg az új beállításokat érvényesíti.'; +$lng['extras']['directoryprotection_add'] = 'Könyvtárvédelem hozzáadása'; +$lng['extras']['view_directory'] = 'A könyvtár tartalmának megmutatása'; +$lng['extras']['pathoptions_add'] = 'Útvonal opciók hozzáadása'; +$lng['extras']['directory_browsing'] = 'A könyvtár tartalmána böngészése'; +$lng['extras']['pathoptions_edit'] = 'Útvonal opciók szerkesztése'; +$lng['extras']['error404path'] = '404'; +$lng['extras']['error403path'] = '403'; +$lng['extras']['error500path'] = '500'; +$lng['extras']['error401path'] = '401'; +$lng['extras']['errordocument404path'] = 'A 404-es hibaüzenet URL-je'; +$lng['extras']['errordocument403path'] = 'A 403-as hibaüzenet URL-je'; +$lng['extras']['errordocument500path'] = 'A 500-as hibaüzenet URL-je'; +$lng['extras']['errordocument401path'] = 'A 401-es hibaüzenet URL-je'; + +/** + * Errors + */ + +$lng['error']['error'] = 'Hiba'; +$lng['error']['directorymustexist'] = 'Léteznie kell a %s könyvtárnak. Kérem, hozza létre FTP cliensével.'; +$lng['error']['filemustexist'] = 'Léteznie kell a %sfájlnak.'; +$lng['error']['allresourcesused'] = 'Ön már minden erőforrását felhasználta.'; +$lng['error']['domains_cantdeletemaindomain'] = 'Nem törölhet le olyan domain nevet, amelyet e-mail domainként használnak.'; +$lng['error']['domains_canteditdomain'] = 'Nem szerkeszthati ezt a domain nevet. Az adminisztrátor letiltotta.'; +$lng['error']['domains_cantdeletedomainwithemail'] = 'Nem törölhet le olyan domain nevet, amelyet e-mail domainként használnak. Töröljön ki minden e-mail címet előbb.'; +$lng['error']['firstdeleteallsubdomains'] = 'Mielőtt létrehozna egy gyűjtő-domaint, törölnie kell az összes al-domaint.'; +$lng['error']['youhavealreadyacatchallforthisdomain'] = 'Ön már meghatározott egy gyűjtőt erre a domain-re.'; +$lng['error']['ftp_cantdeletemainaccount'] = 'Nem törölheti fő FTP hozzáférését.'; +$lng['error']['login'] = 'Helytelen a felhasználónév vagy a jelszó, amelyet begépelt. Kérem, próbálja újra!'; +$lng['error']['login_blocked'] = 'Ezt a hozzáférés fel lett függesztve a túl sok bejelentkezési hiba miatt. Kérem, próbálja újra!'; +$settings['login']['deactivatetime'] . ' seconds.'; +$lng['error']['notallreqfieldsorerrors'] = 'Nem teljesen vagy helytelenül töltötte ki a mezőket.'; +$lng['error']['oldpasswordnotcorrect'] = 'A régi jelszó helytelen.'; +$lng['error']['youcantallocatemorethanyouhave'] = 'Nem oszthat ki több erőforrást, mint amennyit birtokol.'; +$lng['error']['mustbeurl'] = 'Nem teljes vagy nem érvényes URL-t (pl.: http://somedomain.com/error404.htm) gépelt be'; +$lng['error']['invalidpath'] = 'Nem választott ki érvényes URL-t (lehet, hogy probléma van a könyvtárlistázással?).'; +$lng['error']['stringisempty'] = 'A mezőben nincs adat.'; +$lng['error']['stringiswrong'] = 'A mezőben helytelen adat van.'; +$lng['error']['myloginname'] = '\'' . $lng['login']['username'] . '\''; +$lng['error']['mypassword'] = '\'' . $lng['login']['password'] . '\''; +$lng['error']['oldpassword'] = '\'' . $lng['changepassword']['old_password'] . '\''; +$lng['error']['newpassword'] = '\'' . $lng['changepassword']['new_password'] . '\''; +$lng['error']['newpasswordconfirm'] = '\'' . $lng['changepassword']['new_password_confirm'] . '\''; +$lng['error']['newpasswordconfirmerror'] = 'Az új jelszó és annak megerősítése nem egyezik meg.'; +$lng['error']['myname'] = '\'' . $lng['customer']['name'] . '\''; +$lng['error']['myfirstname'] = '\'' . $lng['customer']['firstname'] . '\''; +$lng['error']['emailadd'] = '\'' . $lng['customer']['email'] . '\''; +$lng['error']['mydomain'] = '\'Domain\''; +$lng['error']['mydocumentroot'] = '\'Dokumentum útvonal\''; +$lng['error']['loginnameexists'] = 'A(z) %s felhasználónév már létezik'; +$lng['error']['emailiswrong'] = 'A(z) %s e-mail cím érvénytelen karaktereket tartalmaz vagy nem teljes.'; +$lng['error']['loginnameiswrong'] = 'A(z) %s felhasználónév érvénytelen karaktereket tartalmaz.'; +$lng['error']['userpathcombinationdupe'] = 'A felhasználónév és útvonal kombinációja már létezik.'; +$lng['error']['patherror'] = 'Általános hiba! Az útvonal nem lehet üres.'; +$lng['error']['errordocpathdupe'] = 'A(z) %s útvonalra vonatkozó opció már létezik.'; +$lng['error']['adduserfirst'] = 'Kérem, előbb hozzon létre egy felhasználót!'; +$lng['error']['domainalreadyexists'] = 'A(z) %s domain név már hozzá van rendelve egy felhasználóhoz.'; +$lng['error']['nolanguageselect'] = 'Nincs kiválasztott nyelv.'; +$lng['error']['nosubjectcreate'] = 'Meg kell határoznia egy tárgyat ehhez a sablonhoz.'; +$lng['error']['nomailbodycreate'] = 'Meg kell határoznia az üzenet szövegét ehhez a sablonhoz.'; +$lng['error']['templatenotfound'] = 'A sablon nem található.'; +$lng['error']['alltemplatesdefined'] = 'Nem készíthet több sablont, már minden nyelv támogatva van.'; +$lng['error']['wwwnotallowed'] = 'a www előtag al-domaineknél nem használható.'; +$lng['error']['subdomainiswrong'] = 'A(z) %s al-domain érvénytelen karaktereket tartalmaz.'; +$lng['error']['domaincantbeempty'] = 'A domain neve nem lehet üres.'; +$lng['error']['domainexistalready'] = 'A(z) %s domain már létezik.'; +$lng['error']['domainisaliasorothercustomer'] = 'A választott domain álnév (alias) vagy maga is domain álnév, vagy más felhasználóhoz tartozik.'; +$lng['error']['emailexistalready'] = 'A(z) %s e-mail cím már létezik.'; +$lng['error']['maindomainnonexist'] = 'A(z) %s fő domain nem létezik.'; +$lng['error']['destinationnonexist'] = 'Kérem, levél-továbbítóját a \'Cél\' mappában hozza létre.'; +$lng['error']['destinationalreadyexistasmail'] = 'A(z) %s továbbító már létezik mint aktív e-mail cím.'; +$lng['error']['destinationalreadyexist'] = 'Ön már létrehozott egy továbbítót ehhez: %s .'; +$lng['error']['destinationiswrong'] = 'A(z) %s továbbító érvénytelen karakter(eke)t tartalmaz vagy nem teljes.'; +$lng['error']['domainname'] = $lng['domains']['domainname']; + +/** + * Questions + */ + +$lng['question']['question'] = 'Biztonsági kérdés'; +$lng['question']['admin_customer_reallydelete'] = 'Tényleg törölni akarja a(z) %s felhasználót? Ezt a lépést nem lehet visszavonni!'; +$lng['question']['admin_domain_reallydelete'] = 'Tényleg törölni akarja a(z) %s domain?'; +$lng['question']['admin_domain_reallydisablesecuritysetting'] = 'Tényleg hatástalanítani akarja ezeket a biztonsági beállításokat (OpenBasedir és/vagy SafeMode)?'; +$lng['question']['admin_admin_reallydelete'] = 'Tényleg törölni akarja a(z) %s adminisztrátort? Minden hozzá tartozó felhasználó és domain a főadminisztrátorhoz lesz rendelve.'; +$lng['question']['admin_template_reallydelete'] = 'Tényleg törölni akarja a(z) \'%s\' sablont?'; +$lng['question']['domains_reallydelete'] = 'Tényleg törölni akarja a(z) %s domain-t?'; +$lng['question']['email_reallydelete'] = 'Tényleg törölni akarja a(z) %s e-mail címet?'; +$lng['question']['email_reallydelete_account'] = 'Tényleg törölni akarja a(z) %s e-mail postafiókot?'; +$lng['question']['email_reallydelete_forwarder'] = 'Tényleg törölni akarja a(z) %s továbbítót?'; +$lng['question']['extras_reallydelete'] = 'Tényleg törölni akarja a(z) %s könyvtár-védelmét?'; +$lng['question']['extras_reallydelete_pathoptions'] = 'Tényleg törölni akarja a(z) %s útvonal-beállításait?'; +$lng['question']['ftp_reallydelete'] = 'Tényleg törölni akarja a(z) %s FTP hozzáférést?'; +$lng['question']['mysql_reallydelete'] = 'Tényleg törölni szeretné a(z) adatbázist? Ez a lépés nem vonható vissza!'; +$lng['question']['admin_configs_reallyrebuild'] = 'Tényleg újra szeretné építeni az Apache és Bind konfigurációs állományait?'; + +/** + * Mails + */ + +$lng['mails']['pop_success']['mailbody'] = 'Üdvözlöm!\n\nE-mail fiókja {EMAIL} létrejött.\n\nEz egy automatikusan küldött\ne-mail, kérem, ne válaszoljon rá!\n\nTisztelettel: a SysCP csapata'; +$lng['mails']['pop_success']['subject'] = 'E-mail fiók létrehozva.'; +$lng['mails']['createcustomer']['mailbody'] = 'Tisztelt {FIRSTNAME} {NAME}!\n\nAz Ön postafiók adatai:\n\nFelhasználónév: {USERNAME}\nJelszó: {PASSWORD}\n\nKöszönjük:\na SysCP csapata'; +$lng['mails']['createcustomer']['subject'] = 'Postafiók információ'; + +/** + * Admin + */ + +$lng['admin']['overview'] = 'Áttekintés'; +$lng['admin']['ressourcedetails'] = 'Felhasznált erőforrások'; +$lng['admin']['systemdetails'] = 'Rendszeradatok'; +$lng['admin']['syscpdetails'] = 'SysCP adatok'; +$lng['admin']['installedversion'] = 'Installált Verzió'; +$lng['admin']['latestversion'] = 'Legutolsó verzió'; +$lng['admin']['lookfornewversion']['clickhere'] = 'keresés a webszervizen keresztül'; +$lng['admin']['lookfornewversion']['error'] = 'Olvasási hiba'; +$lng['admin']['resources'] = 'Erőforrások'; +$lng['admin']['customer'] = 'Felhasználó'; +$lng['admin']['customers'] = 'Felhasználók'; +$lng['admin']['customer_add'] = 'Felhasználó hozzáadása'; +$lng['admin']['customer_edit'] = 'Felhasználó szerkesztése'; +$lng['admin']['domains'] = 'Domainek'; +$lng['admin']['domain_add'] = 'Domain hozzáadása'; +$lng['admin']['domain_edit'] = 'Domain szerkesztése'; +$lng['admin']['subdomainforemail'] = 'Aldomainek mint e-mail-domainek'; +$lng['admin']['admin'] = 'Adminisztrátor'; +$lng['admin']['admins'] = 'Adminisztrátorok'; +$lng['admin']['admin_add'] = 'Adminisztrátor hozzáadása'; +$lng['admin']['admin_edit'] = 'Adminisztrátor szerkesztése'; +$lng['admin']['customers_see_all'] = 'Láthatja az összes felhasználót?'; +$lng['admin']['domains_see_all'] = 'Láthatja az összes domaint?'; +$lng['admin']['change_serversettings'] = 'Megváltoztathatja a szerver beállításait?'; +$lng['admin']['server'] = 'Szerver'; +$lng['admin']['serversettings'] = 'Beállítások'; +$lng['admin']['rebuildconf'] = 'A konfig. fájlok újraírása'; +$lng['admin']['stdsubdomain'] = 'Egyszerű aldomain'; +$lng['admin']['stdsubdomain_add'] = 'Egyszerű aldomain hozzáadása'; +$lng['admin']['deactivated'] = 'Kikapcsolva'; +$lng['admin']['deactivated_user'] = 'Felhasználó kikapcsolása'; +$lng['admin']['sendpassword'] = 'Jelszó küldése'; +$lng['admin']['ownvhostsettings'] = 'Saját vHost beállítások'; +$lng['admin']['configfiles']['serverconfiguration'] = 'Konfiguráció'; +$lng['admin']['configfiles']['files'] = 'Konfig. fájlok: Kérem, változtassa meg a következő fájlokat, vagy - ha még nem léteznek - hozza létre őket a következő tartalommal.
    Fontos: A MySQL jelszó biztonsági okokból nem lesz kicserélve. Kérem, cserélje ki a "MYSQL_PASSWORD"-öt! Ha elfelejtette a NySQL jelszót, megtalálja a "lib/userdata.inc.php" fájlban.'; +$lng['admin']['configfiles']['commands'] = 'Parancsok: Kérem, hajtsa végre a következő parancsokat egy héjprogramban (shell)!'; +$lng['admin']['configfiles']['restart'] = 'Újraindítás: Kérem, hajtsa végre a következő parancsokat egy héjprogramban (shell), hogy az új konfiguráció betöltődjön.'; +$lng['admin']['templates']['templates'] = 'Sablonok'; +$lng['admin']['templates']['template_add'] = 'Sablon hozzáadása'; +$lng['admin']['templates']['template_edit'] = 'Sablon szerkesztése'; +$lng['admin']['templates']['action'] = 'Alkalom'; +$lng['admin']['templates']['email'] = 'E-mail'; +$lng['admin']['templates']['subject'] = 'Tárgy'; +$lng['admin']['templates']['mailbody'] = 'Szövegrörzs'; +$lng['admin']['templates']['createcustomer'] = 'Üdvözlő levél új felhasználóknak'; +$lng['admin']['templates']['pop_success'] = 'Üdvözlő levél új fiók esetén'; +$lng['admin']['templates']['template_replace_vars'] = 'A sablonban használható változók'; +$lng['admin']['templates']['FIRSTNAME'] = 'A felhasználó keresztneve '; +$lng['admin']['templates']['NAME'] = 'A felhasználó neve '; +$lng['admin']['templates']['USERNAME'] = 'A felhasználó felhasználóneve'; +$lng['admin']['templates']['PASSWORD'] = 'A felhasználó felhasználóneve jelszava'; +$lng['admin']['templates']['EMAIL'] = 'A POP3/IMAP fiók címe.'; + +/** + * Serversettings + */ + +$lng['serversettings']['session_timeout']['title'] = 'Munkamenet időtúllépés'; +$lng['serversettings']['session_timeout']['description'] = 'Mennyi idő múlva váljon a munkamenet érvénytelenné a felhasználó utolsó tevékenységétől (másodperc)?'; +$lng['serversettings']['accountprefix']['title'] = 'Felhasználói előtag'; +$lng['serversettings']['accountprefix']['description'] = 'Milyen előtaggal legyenek a felhasználói hozzáférések ellátva?'; +$lng['serversettings']['mysqlprefix']['title'] = 'SQL előtag'; +$lng['serversettings']['mysqlprefix']['description'] = 'Melyen előtaggal legyenek a mysql hozzáférések ellátva?'; +$lng['serversettings']['ftpprefix']['title'] = 'FTP előtag'; +$lng['serversettings']['ftpprefix']['description'] = 'Milyen előtaggal legyenek az FTP hozzáférések ellátva?'; +$lng['serversettings']['documentroot_prefix']['title'] = 'Documentum könyvtár'; +$lng['serversettings']['documentroot_prefix']['description'] = 'Hol legyen minen adat tárolva?'; +$lng['serversettings']['logfiles_directory']['title'] = 'Naplófájlok könyvtára'; +$lng['serversettings']['logfiles_directory']['description'] = 'Hol legyen minden naplófájl tárolva?'; +$lng['serversettings']['ipaddress']['title'] = 'IP cím'; +$lng['serversettings']['ipaddress']['description'] = 'Mi az IP címe ennek a szervernek?'; +$lng['serversettings']['hostname']['title'] = 'Hostnév (gépnév)'; +$lng['serversettings']['hostname']['description'] = 'Mi legyen a neve ennek a szervernek?'; +$lng['serversettings']['apachereload_command']['title'] = 'Apache újraindítási parancs'; +$lng['serversettings']['apachereload_command']['description'] = 'Mi az Apache újraindítási parancsa?'; +$lng['serversettings']['bindconf_directory']['title'] = 'Bind konfigurációs könyvtár'; +$lng['serversettings']['bindconf_directory']['description'] = 'Hol vannak a Bind konfigurációs állományok?'; +$lng['serversettings']['bindreload_command']['title'] = 'Bind újraindítási parancs'; +$lng['serversettings']['bindreload_command']['description'] = 'Mi a Bind újraindítási parancsa?'; +$lng['serversettings']['binddefaultzone']['title'] = 'Bind alapértelmezett zóna'; +$lng['serversettings']['binddefaultzone']['description'] = 'Mi az alapértelmezett zóna neve?'; +$lng['serversettings']['vmail_uid']['title'] = 'E-mail felhasználó-azonosító (UID)'; +$lng['serversettings']['vmail_uid']['description'] = 'Melyik felhasználó-azonosítót (UserID) használják a levelek?'; +$lng['serversettings']['vmail_gid']['title'] = 'E-mail csoport-azonosító (GID)'; +$lng['serversettings']['vmail_gid']['description'] = 'Melyik csoport-azonosítót (GroupID) használják a levelek?'; +$lng['serversettings']['vmail_homedir']['title'] = 'E-mail könyvtár'; +$lng['serversettings']['vmail_homedir']['description'] = 'Hol legyenek az e-mailek tárolva?'; +$lng['serversettings']['adminmail']['title'] = 'Feladó'; +$lng['serversettings']['adminmail']['description'] = 'Ki legyen a feladója a panelről küldött leveleknek?'; +$lng['serversettings']['phpmyadmin_url']['title'] = 'phpMyAdmin URL'; +$lng['serversettings']['phpmyadmin_url']['description'] = 'Mi a phpMyAdmin URL-je? (http://-vel kell kezdődnie)'; +$lng['serversettings']['webmail_url']['title'] = 'WebMail URL'; +$lng['serversettings']['webmail_url']['description'] = 'Mi a WebMail URL-je? (http://-vel kell kezdődnie)'; +$lng['serversettings']['webftp_url']['title'] = 'WebFTP URL'; +$lng['serversettings']['webftp_url']['description'] = 'Mi a WebFTP URL-je? (http://-vel kell kezdődnie)'; +$lng['serversettings']['language']['description'] = 'Mi a szerver alapértelmezett nyelve?'; +$lng['serversettings']['maxloginattempts']['title'] = 'Maximális bejelentkezési kísérlet'; +$lng['serversettings']['maxloginattempts']['description'] = 'Bejelentkezési kísérletek maximális száma, mielőtt a hozzáférés zárolva lesz.'; +$lng['serversettings']['deactivatetime']['title'] = 'Zárlat-idő'; +$lng['serversettings']['deactivatetime']['description'] = 'Az időszak (másodpercekben), ameddig a túl sok bejelentkezési kísérlet után a hozzáférés zárolva lesz.'; +$lng['serversettings']['pathedit']['title'] = 'Az útvonal-megadás típusa'; +$lng['serversettings']['pathedit']['description'] = 'Legördülő menü vagy beviteli mező segítségével lesznek az útvonalak kiválasztva?'; + +/** + * CHANGED BETWEEN 1.2.12 and 1.2.13 + */ + +$lng['mysql']['description'] = 'Itt hozhatja létre és változtathatja meg MySQL adatbázisait.
    + A változások azonnal érvényre jutnak, és az adatbázis rögtön használható.
    + A bal oldali menüben megtalálja a phpMyAdmin eszközt, amellyel könnyedén kezelheti adatbázisát.
    +
    Saját PHP kódjaiból a következő beállításokkal férhet hozzá adatbázisához: (A dőltbetűs adatokat helyettesítenie kell az Ön által megadottakkal!)
    Hostnév:
    + Felhasználónév: Adatbázisnév
    Jelszó: a jelszó, amelyet Ön kiválasztott
    Adatbázis: Adatbázisnév'; + +/** + * ADDED BETWEEN 1.2.12 and 1.2.13 + */ + +$lng['admin']['cronlastrun'] = 'Utolsó Cron futás'; +$lng['serversettings']['paging']['title'] = 'Bejegyzések száma egy lapon'; +$lng['serversettings']['paging']['description'] = 'Hány bejegyzés jelenjen meg egy lapon? (0 = lapozás kikapcsolása)'; +$lng['error']['ipstillhasdomains'] = 'A törölni kívánt IP/Port kombinációhoz domainek vannak rendelve. Rendelje hozzá ezeket egy másik IP/Port kombinációhoz, mielőtt a jelenlegi IP/Port kombinációt törli.'; +$lng['error']['cantdeletedefaultip'] = 'Nem törölheti az alapértelmezett viszonteladói IP/Port kombinációt. Hozzon létre új alapértelmezett IP/Port kombinációt a viszonteladóknak, mielőtt ezt az IP/Port kombinációt törli.'; +$lng['error']['cantdeletesystemip'] = 'Nem törölheti a rendszer utolsó IP címét. Hozzon létre egy új IP/Port kombinációt a rendszer IP címére, vagy változatassa meg a rendszer IP címét.'; +$lng['error']['myipaddress'] = '\'IP\''; +$lng['error']['myport'] = '\'Port\''; +$lng['error']['myipdefault'] = 'Választania kell egy IP/Port kombinációt alapértelmezésnek.'; +$lng['error']['myipnotdouble'] = 'Ez az IP/Port kombináció már létezik.'; +$lng['question']['admin_ip_reallydelete'] = 'Valóban törölni akarja a(z) %s IP címet?'; +$lng['admin']['ipsandports']['ipsandports'] = 'IP címek és Portok'; +$lng['admin']['ipsandports']['add'] = 'IP/Port hozzáadása'; +$lng['admin']['ipsandports']['edit'] = 'IP/Port szerkesztése'; +$lng['admin']['ipsandports']['ipandport'] = 'IP/Port'; +$lng['admin']['ipsandports']['ip'] = 'IP'; +$lng['admin']['ipsandports']['port'] = 'Port'; + +// ADDED IN 1.2.13-rc3 + +$lng['error']['cantchangesystemip'] = 'Nem változtathatja meg a rendszer utolsó IP címét. Hozzon létre egy új IP/Port kombinációt a rendszer IP címére, vagy változatassa meg a rendszer IP címét.'; +$lng['question']['admin_domain_reallydocrootoutofcustomerroot'] = 'Biztos, hogy a dokumentum gyökerét (root) rendeli ehhez a domainhez, nem pedig a felhasználói könyvtárban marad?'; + +// ADDED IN 1.2.14-rc1 + +$lng['admin']['memorylimitdisabled'] = 'Letiltva'; +$lng['domain']['openbasedirpath'] = 'OpenBasedir útvonal'; +$lng['domain']['docroot'] = 'Útvonal a a fenti mezőből'; +$lng['domain']['homedir'] = 'Kezdőkönyvtár'; +$lng['admin']['valuemandatory'] = 'Ez a mező kötelező'; +$lng['admin']['valuemandatorycompany'] = 'Vagy a "név" és "keresztnév", vagy a "cégnév" mezőt ki kell tölteni.'; +$lng['menue']['main']['username'] = 'Bejelentkezve mint: '; +$lng['panel']['urloverridespath'] = 'URL (figyelmen kívül hagyja az útvonalat)'; +$lng['panel']['pathorurl'] = 'Útvonal az URL-hez'; +$lng['error']['sessiontimeoutiswrong'] = 'Csak numerikus "Munkamenet Időtúllépés"adható meg.'; +$lng['error']['maxloginattemptsiswrong'] = 'Csak numerikus "Maximális Bejelentkezési Kísérlet"adható meg. '; +$lng['error']['deactivatetimiswrong'] = 'Csak numerikus "Kikapcsolási Idő" adható meg.'; +$lng['error']['accountprefixiswrong'] = 'A "Felhasználói Előtag" helytelen.'; +$lng['error']['mysqlprefixiswrong'] = 'Az "SQL Előtag" helytelen.'; +$lng['error']['ftpprefixiswrong'] = 'Az "FTP Előtag "helytelen.'; +$lng['error']['ipiswrong'] = 'Az "IP Cím" helytelen. Csak érvényes IPcím adható meg.'; +$lng['error']['vmailuidiswrong'] = 'A "Levelezési Felhasználó-azonosító (LFA) " helytelen. Csak numerikus LFA adható meg.'; +$lng['error']['vmailgidiswrong'] = 'A "Levelezési GID " helytelen. Csak numerikus GID adható meg.'; +$lng['error']['adminmailiswrong'] = 'A "Feladó Címe " helytelen. Csak érvényes e-mail cím adható meg.'; +$lng['error']['pagingiswrong'] = 'A "Laponkénti Bejegyzés " értéke helytelen. Csak numerikus karaktereket lehet megadni..'; +$lng['error']['phpmyadminiswrong'] = 'A phpMyAdmin hivatkozás érvénytelen.'; +$lng['error']['webmailiswrong'] = 'A WebMail hivatkozás érvénytelen.'; +$lng['error']['webftpiswrong'] = 'A WebFTP hivatkozás érvénytelen'; +$lng['domains']['hasaliasdomains'] = 'Alias (al-)domainjei'; +$lng['serversettings']['defaultip']['title'] = 'Alapértelmezett IP/Port'; +$lng['serversettings']['defaultip']['description'] = 'Mi az alapértelmezett IP/Port kombináció?'; +$lng['domains']['statstics'] = 'Használati statisztika'; +$lng['panel']['ascending'] = 'növekvő'; +$lng['panel']['decending'] = 'csökkenő'; +$lng['panel']['search'] = 'Keresés'; +$lng['panel']['used'] = 'felhasznált'; + +// ADDED IN 1.2.14-rc3 + +$lng['panel']['translator'] = 'Fordító'; + +// ADDED IN 1.2.14-rc4 + +$lng['error']['stringformaterror'] = 'A "%s" mező értéke nem megfelelő formátumú.'; + +// ADDED IN 1.2.15-rc1 + +$lng['admin']['serversoftware'] = 'Szerverszoftver'; +$lng['admin']['phpversion'] = 'PHP verzió'; +$lng['admin']['phpmemorylimit'] = 'PHP memória korlát'; +$lng['admin']['mysqlserverversion'] = 'MySQL szerver verzió'; +$lng['admin']['mysqlclientversion'] = 'MySQL kliens verzió'; +$lng['admin']['webserverinterface'] = 'Webszerver Interfész'; +$lng['domains']['isassigneddomain'] = 'Hozzárendelt domain'; +$lng['serversettings']['phpappendopenbasedir']['title'] = 'Az OpenBasedir-hez csatolt útvonalak'; +$lng['serversettings']['phpappendopenbasedir']['description'] = 'Ezek az útvonalak (kettősponttal elválasztva) lesznek hozzáadva az OpenBasedir jegyzékhez minden vhost tárolóban.'; + +// CHANGED IN 1.2.15-rc1 + +$lng['error']['loginnameissystemaccount'] = 'Nem hozhat létre olyan fiókot, amely hasonlít a rendszerfiókokhoz (mint pl. a "%s" kezdetűek). Kérem, adjon meg másik fióknevet!'; + +?> \ No newline at end of file diff --git a/lng/italian.lng.php b/lng/italian.lng.php new file mode 100644 index 0000000000..8663740f51 --- /dev/null +++ b/lng/italian.lng.php @@ -0,0 +1,445 @@ + + * @author Luca Longinotti + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Language + * @version $Id: italian.lng.php 2692 2009-03-27 18:04:47Z flo $ + */ + +/** + * Global + */ + +$lng['translator'] = 'Luca Longinotti & Luca Piona'; +$lng['panel']['edit'] = 'Modifica'; +$lng['panel']['delete'] = 'Cancella'; +$lng['panel']['create'] = 'Crea'; +$lng['panel']['save'] = 'Salva'; +$lng['panel']['yes'] = 'Si'; +$lng['panel']['no'] = 'No'; +$lng['panel']['emptyfornochanges'] = 'lasciare vuoto se non si vuole cambiare'; +$lng['panel']['emptyfordefault'] = 'lasciare vuoto per l\'impostazione di default'; +$lng['panel']['path'] = 'Percorso'; +$lng['panel']['toggle'] = 'Cambia'; +$lng['panel']['next'] = 'Prossimo'; +$lng['panel']['dirsmissing'] = 'Impossibile trovare o leggere la directory!'; + +/** + * Login + */ + +$lng['login']['username'] = 'Nome Utente'; +$lng['login']['password'] = 'Password'; +$lng['login']['language'] = 'Lingua'; +$lng['login']['login'] = 'Login'; +$lng['login']['logout'] = 'Logout'; +$lng['login']['profile_lng'] = 'Scegli la lingua'; + +/** + * Customer + */ + +$lng['customer']['documentroot'] = 'Cartella Principale'; +$lng['customer']['name'] = 'Cognome'; +$lng['customer']['firstname'] = 'Nome'; +$lng['customer']['company'] = 'Ditta'; +$lng['customer']['street'] = 'Via'; +$lng['customer']['zipcode'] = 'CAP'; +$lng['customer']['city'] = 'Città'; +$lng['customer']['phone'] = 'Telefono'; +$lng['customer']['fax'] = 'Fax'; +$lng['customer']['email'] = 'Email'; +$lng['customer']['customernumber'] = 'ID Cliente'; +$lng['customer']['diskspace'] = 'Spazio Web (MB)'; +$lng['customer']['traffic'] = 'Traffico (GB)'; +$lng['customer']['mysqls'] = 'Database MySQL'; +$lng['customer']['emails'] = 'Indirizzi Email'; +$lng['customer']['accounts'] = 'Account Email'; +$lng['customer']['forwarders'] = 'Reindirizzamenti Email'; +$lng['customer']['ftps'] = 'Account FTP'; +$lng['customer']['subdomains'] = 'Sottodomini'; +$lng['customer']['domains'] = 'Domini'; +$lng['customer']['unlimited'] = 'illimitati'; + +/** + * Customermenue + */ + +$lng['menue']['main']['main'] = 'Principale'; +$lng['menue']['main']['changepassword'] = 'Cambia la password'; +$lng['menue']['main']['changelanguage'] = 'Cambia la lingua'; +$lng['menue']['email']['email'] = 'Email'; +$lng['menue']['email']['emails'] = 'Indirizzi'; +$lng['menue']['email']['webmail'] = 'WebMail'; +$lng['menue']['mysql']['mysql'] = 'MySQL'; +$lng['menue']['mysql']['databases'] = 'Database'; +$lng['menue']['mysql']['phpmyadmin'] = 'phpMyAdmin'; +$lng['menue']['domains']['domains'] = 'Domini'; +$lng['menue']['domains']['settings'] = 'Opzioni'; +$lng['menue']['ftp']['ftp'] = 'FTP'; +$lng['menue']['ftp']['accounts'] = 'Account'; +$lng['menue']['ftp']['webftp'] = 'WebFTP'; +$lng['menue']['extras']['extras'] = 'Extra'; +$lng['menue']['extras']['directoryprotection'] = 'Cartelle Protette'; +$lng['menue']['extras']['pathoptions'] = 'Opzioni Cartelle'; + +/** + * Index + */ + +$lng['index']['customerdetails'] = 'Dettagli Cliente'; +$lng['index']['accountdetails'] = 'Dettagli Account'; + +/** + * Change Password + */ + +$lng['changepassword']['old_password'] = 'Vecchia password'; +$lng['changepassword']['new_password'] = 'Nuova password'; +$lng['changepassword']['new_password_confirm'] = 'Nuova password (verifica)'; +$lng['changepassword']['new_password_ifnotempty'] = 'Nuova password (vuota = non cambia)'; +$lng['changepassword']['also_change_ftp'] = ' cambia la password dell\'account FTP principale?'; + +/** + * Domains + */ + +$lng['domains']['description'] = 'Qui puoi creare (sotto)domini e cambiare il loro percorso.
    Il sistema, dopo ogni cambiamento, necessita di un po\' di tempo per applicare le nuove impostazioni.'; +$lng['domains']['domainsettings'] = 'Opzioni del dominio'; +$lng['domains']['domainname'] = 'Nome del dominio'; +$lng['domains']['subdomain_add'] = 'Crea sottodominio'; +$lng['domains']['subdomain_edit'] = 'Modifica il (sotto)dominio'; +$lng['domains']['wildcarddomain'] = 'Crea una wildcarddomain?'; +$lng['domains']['aliasdomain'] = 'Alias per questo dominio'; +$lng['domains']['noaliasdomain'] = 'Nessun alias per il dominio'; + +/** + * eMails + */ + +$lng['emails']['description'] = 'Qui puoi creare e cambiare i tuoi indirizzi Email.
    Un account è come la bucalettere davanti a casa tua. Se qualcuno ti manda un\'Email, essa sarà recapitata all\'interno del tuo account.

    Per scaricare le tue Email usa le seguenti impostazioni nel tuo programma di posta elettronica: (I dati scritti in corsivo vanno cambiati con i tuoi!)
    Hostname: Nome del dominio
    Username: Nome dell\'account / Indirizzo Email
    Password: La password scelta'; +$lng['emails']['emailaddress'] = 'Indirizzo Email'; +$lng['emails']['emails_add'] = 'Crea indirizzo Email'; +$lng['emails']['emails_edit'] = 'Modifica indirizzo Email'; +$lng['emails']['catchall'] = 'Catch-all'; +$lng['emails']['iscatchall'] = 'Definisci come indirizzo catch-all?'; +$lng['emails']['account'] = 'Account'; +$lng['emails']['account_add'] = 'Crea account'; +$lng['emails']['account_delete'] = 'Cancella account'; +$lng['emails']['from'] = 'Da'; +$lng['emails']['to'] = 'Per'; +$lng['emails']['forwarders'] = 'Reindirizzamenti'; +$lng['emails']['forwarder_add'] = 'Crea reindirizzamento'; + +/** + * FTP + */ + +$lng['ftp']['description'] = 'Qui puoi creare e modificare i tuoi account FTP.
    I cambiamenti sono effettuati in tempo reale e gli account si possono usare immediatamente.'; +$lng['ftp']['account_add'] = 'Crea account'; + +/** + * MySQL + */ + +$lng['mysql']['description'] = 'Qui puoi creare e modificare i tuoi database MySQL.
    I cambiamenti sono effettuati in tempo reale e i databases si possono usare immediatamente.
    Nel menù di sinistra trovi il tool phpMyAdmin con il quale potrai comodamente amministrare i tuoi databases attraverso il tuo web-browser.

    Per utilizzare i database nei vostri script PHP, utilizzate le seguenti impostazioni: (I dati scritti in corsivo vanno cambiati con i tuoi!)
    Hostname:
    Username: L\'username scelto
    Password: La password scelta per quell\'username
    Database: Nome del database'; +$lng['mysql']['databasename'] = 'Nome database'; +$lng['mysql']['databasedescription'] = 'Descrizione database'; +$lng['mysql']['database_create'] = 'Crea database'; + +/** + * Extras + */ + +$lng['extras']['description'] = 'Qui puoi aggiungere alcune opzioni extra, per esempio impostare delle cartelle protette.
    Il sistema, dopo ogni cambiamento, necessita di un po\' di tempo per applicare le nuove impostazioni.'; +$lng['extras']['directoryprotection_add'] = 'Aggiungi protezione cartella'; +$lng['extras']['view_directory'] = 'Mostra protezione cartella'; +$lng['extras']['pathoptions_add'] = 'Aggiungi opzioni cartella'; +$lng['extras']['directory_browsing'] = 'Visualizza file e cartelle'; +$lng['extras']['pathoptions_edit'] = 'Modifica opzioni cartella'; +$lng['extras']['error404path'] = '404'; +$lng['extras']['error403path'] = '403'; +$lng['extras']['error500path'] = '500'; +$lng['extras']['error401path'] = '401'; +$lng['extras']['errordocument404path'] = 'URL to ErrorDocument 404'; +$lng['extras']['errordocument403path'] = 'URL to ErrorDocument 403'; +$lng['extras']['errordocument500path'] = 'URL to ErrorDocument 500'; +$lng['extras']['errordocument401path'] = 'URL to ErrorDocument 401'; + +/** + * Errors + */ + +$lng['error']['error'] = 'Errore'; +$lng['error']['directorymustexist'] = 'La cartella %s deve esistere. Per favore creala tramite il tuo client FTP.'; +$lng['error']['filemustexist'] = 'Il file %s deve esistere.'; +$lng['error']['allresourcesused'] = 'Hai già usato tutte le tue risorse.'; +$lng['error']['domains_cantdeletemaindomain'] = 'Non puoi cancellare un dominio usato come dominio Email.'; +$lng['error']['domains_canteditdomain'] = 'Non puoi modificare questo dominio. La funzione è stata disabilitata dall\'admin.'; +$lng['error']['domains_cantdeletedomainwithemail'] = 'Non puoi cancellare un dominio usato come dominio Email. Cancella prima tutti gli indirizzi Email che lo utilizzano.'; +$lng['error']['firstdeleteallsubdomains'] = 'Prima di creare un dominio wildcard, cancella tutti i sottodomini presenti per quel dominio.'; +$lng['error']['youhavealreadyacatchallforthisdomain'] = 'Hai già definito un catchall per questo dominio.'; +$lng['error']['ftp_cantdeletemainaccount'] = 'Non puoi cancellare il tuo account FTP principale.'; +$lng['error']['login'] = 'Il nome utente o la password da te immessi sono incorretti. Per favore riprova!'; +$lng['error']['login_blocked'] = 'Questo account è stato sospeso per i troppi tentativi di login falliti.
    Riprovi tra ' . $settings['login']['deactivatetime'] . ' secondi.'; +$lng['error']['notallreqfieldsorerrors'] = 'Alcuni campi sono stati lasciati vuoti o sono stati riempiti incorrettamente.'; +$lng['error']['oldpasswordnotcorrect'] = 'La vecchia password non è corretta.'; +$lng['error']['youcantallocatemorethanyouhave'] = 'Non puoi assegnare più risorse di quante ne possieda tu stesso.'; +$lng['error']['mustbeurl'] = 'Non hai inserito un\'indirizzo valido o completo (per es. http://qualchedominio.com/errore404.htm).'; +$lng['error']['invalidpath'] = 'Non hai scelto un\'indirizzo valido.'; +$lng['error']['stringisempty'] = 'Manca il dato nel campo.'; +$lng['error']['stringiswrong'] = 'Dato incorretto.'; +$lng['error']['myloginname'] = '\'' . $lng['login']['username'] . '\''; +$lng['error']['mypassword'] = '\'' . $lng['login']['password'] . '\''; +$lng['error']['oldpassword'] = '\'' . $lng['changepassword']['old_password'] . '\''; +$lng['error']['newpassword'] = '\'' . $lng['changepassword']['new_password'] . '\''; +$lng['error']['newpasswordconfirm'] = '\'' . $lng['changepassword']['new_password_confirm'] . '\''; +$lng['error']['newpasswordconfirmerror'] = 'La nuova password non corrisponde a quella vecchia.'; +$lng['error']['myname'] = '\'' . $lng['customer']['name'] . '\''; +$lng['error']['myfirstname'] = '\'' . $lng['customer']['firstname'] . '\''; +$lng['error']['emailadd'] = '\'' . $lng['customer']['email'] . '\''; +$lng['error']['mydomain'] = '\'Dominio\''; +$lng['error']['mydocumentroot'] = '\'Documentroot\''; +$lng['error']['loginnameexists'] = 'Il login %s esiste già.'; +$lng['error']['emailiswrong'] = 'L\'indirizzo Email %s contiene caratteri invalidi o è incompleto.'; +$lng['error']['loginnameiswrong'] = 'Il login %s contiene caratteri invalidi.'; +$lng['error']['userpathcombinationdupe'] = 'La combinazione tra nome utente e percorso esiste già.'; +$lng['error']['patherror'] = 'Errore! Il percorso non può essere vuoto.'; +$lng['error']['errordocpathdupe'] = 'Le opzioni per la cartella %s esistono già.'; +$lng['error']['adduserfirst'] = 'Per favore crea prima un utente ...'; +$lng['error']['domainalreadyexists'] = 'Il dominio %s è già assegnato ad un cliente.'; +$lng['error']['nolanguageselect'] = 'Nessuna lingua selezionata.'; +$lng['error']['nosubjectcreate'] = 'Devi definire un titolo per questo template Email.'; +$lng['error']['nomailbodycreate'] = 'Devi definiro un testo per questo template Email.'; +$lng['error']['templatenotfound'] = 'Il template non è stato trovato.'; +$lng['error']['alltemplatesdefined'] = 'Non puoi definire altri template, tutte le lingue sono già definite.'; +$lng['error']['wwwnotallowed'] = 'www non è ammesso come sottodominio.'; +$lng['error']['subdomainiswrong'] = 'Il sottodominio %s contiene caratteri invalidi.'; +$lng['error']['domaincantbeempty'] = 'Il nome dominio non può essere vuoto.'; +$lng['error']['domainexistalready'] = 'Il dominio %s esiste già.'; +$lng['error']['domainisaliasorothercustomer'] = 'Il dominio alias selezionato è a sua volta un dominio alias o appartiene ad un altro cliente.'; +$lng['error']['emailexistalready'] = 'L\'indirizzo Email %s esiste già.'; +$lng['error']['maindomainnonexist'] = 'Il dominio principale %s non esiste.'; +$lng['error']['destinationnonexist'] = 'Per favore crea il tuo reindirizzamento nel campo \'Destinazione\'.'; +$lng['error']['destinationalreadyexistasmail'] = 'Il reindirizzamento a %s esiste già come indirizzo Email attivo.'; +$lng['error']['destinationalreadyexist'] = 'Hai già definito un reindirizzamento per %s .'; +$lng['error']['destinationiswrong'] = 'Il reindirizzamento %s contiene caratteri invalidi o è incompleto.'; +$lng['error']['domainname'] = $lng['domains']['domainname']; + +/** + * Questions + */ + +$lng['question']['question'] = 'Domanda di sicurezza'; +$lng['question']['admin_customer_reallydelete'] = 'Sei sicuro di voler cancellare il cliente %s? Quest\'azione non potrà essere annullata!'; +$lng['question']['admin_domain_reallydelete'] = 'Sei sicuro di voler cancellare il dominio %s?'; +$lng['question']['admin_domain_reallydisablesecuritysetting'] = 'Sei sicuro di voler disattivare queste opzioni di sicurezza (OpenBasedir e/o SafeMode)?'; +$lng['question']['admin_admin_reallydelete'] = 'Sei sicuro di voler cancellare l\'admin %s? Tutti i clienti e i domini saranno affidati all\'amministratore principale.'; +$lng['question']['admin_template_reallydelete'] = 'Sei sicuro di voler cancellare il template \'%s\'?'; +$lng['question']['domains_reallydelete'] = 'Sei sicuro di voler cancellare il dominio %s?'; +$lng['question']['email_reallydelete'] = 'Sei sicuro di voler cancellare l\'indirizzo Email %s?'; +$lng['question']['email_reallydelete_account'] = 'Sei sicuro di voler cancellare l\'account Email di %s?'; +$lng['question']['email_reallydelete_forwarder'] = 'Sei sicuro di voler cancellare il reindirizzamento a %s?'; +$lng['question']['extras_reallydelete'] = 'Sei sicuro di voler cancellare la protezione per la cartella %s?'; +$lng['question']['extras_reallydelete_pathoptions'] = 'Sei sicuro di voler cancellare le opzioni cartella per %s?'; +$lng['question']['ftp_reallydelete'] = 'Sei sicuro di voler cancellare l\'account FTP %s?'; +$lng['question']['mysql_reallydelete'] = 'Sei sicuro di voler cancellare il database %s? Quest\'azione non potrà essere annullata!'; +$lng['question']['admin_configs_reallyrebuild'] = 'Sei sicuro di voler rigenerare i file di configurazione per Apache e Bind?'; + +/** + * Mails + */ + +$lng['mails']['pop_success']['mailbody'] = 'Salve,\n\nil tuo indirizzo Email {EMAIL}\nè stato configurato con successo.\n\nQuesta è un\'Email creata automaticamente,\n per favore non rispondere!\n\nCordiali saluti, SysCP-Team.'; +$lng['mails']['pop_success']['subject'] = 'Indirizzo Email configurato con successo'; +$lng['mails']['createcustomer']['mailbody'] = 'Salve {FIRSTNAME} {NAME},\n\nqueste sono le informazioni per il tuo account:\n\nNome Utente: {USERNAME}\nPassword: {PASSWORD}\n\nGrazie,\nSysCP-Team.'; +$lng['mails']['createcustomer']['subject'] = 'Informazioni account'; + +/** + * Admin + */ + +$lng['admin']['overview'] = 'Visione d\'insieme'; +$lng['admin']['ressourcedetails'] = 'Risorse utilizzate'; +$lng['admin']['systemdetails'] = 'Dettagli sistema'; +$lng['admin']['syscpdetails'] = 'Dettagli SysCP'; +$lng['admin']['installedversion'] = 'Versione installata'; +$lng['admin']['latestversion'] = 'Ultima versione disponibile'; +$lng['admin']['lookfornewversion']['clickhere'] = 'Cerca sul web'; +$lng['admin']['lookfornewversion']['error'] = 'Errore durante la lettura'; +$lng['admin']['resources'] = 'Risorse'; +$lng['admin']['customer'] = 'Cliente'; +$lng['admin']['customers'] = 'Clienti'; +$lng['admin']['customer_add'] = 'Crea cliente'; +$lng['admin']['customer_edit'] = 'Modifica cliente'; +$lng['admin']['domains'] = 'Domini'; +$lng['admin']['domain_add'] = 'Crea dominio'; +$lng['admin']['domain_edit'] = 'Modifica dominio'; +$lng['admin']['subdomainforemail'] = 'Sottodominio utilizzabile come dominio Email'; +$lng['admin']['admin'] = 'Admin'; +$lng['admin']['admins'] = 'Admin'; +$lng['admin']['admin_add'] = 'Crea admin'; +$lng['admin']['admin_edit'] = 'Modifica admin'; +$lng['admin']['customers_see_all'] = 'Può vedere tutti i clienti?'; +$lng['admin']['domains_see_all'] = 'Può vedere tutti i domini?'; +$lng['admin']['change_serversettings'] = 'Può cambiare le impostazioni del server?'; +$lng['admin']['server'] = 'Server'; +$lng['admin']['serversettings'] = 'Opzioni'; +$lng['admin']['rebuildconf'] = 'Rigenera file di configurazione'; +$lng['admin']['stdsubdomain'] = 'Sottodominio standard'; +$lng['admin']['stdsubdomain_add'] = 'Crea sottodominio standard'; +$lng['admin']['deactivated'] = 'Disattiva'; +$lng['admin']['deactivated_user'] = 'Disattiva utente'; +$lng['admin']['sendpassword'] = 'Invia password'; +$lng['admin']['ownvhostsettings'] = 'Impostazioni vHost speciali'; +$lng['admin']['configfiles']['serverconfiguration'] = 'Configurazione servizi'; +$lng['admin']['configfiles']['files'] = 'File di configurazione: Per favore cambia questi file o creali
    se non esistono, con il seguente contenuto.
    NOTA: La password di MySQL non è stata rimpiazzata per ragioni di sicurezza.
    Per favore rimpiazza "MYSQL_PASSWORD" con la password MySQL dell\'utente syscp. Se hai dimenticato la password per MySQL
    la trovi in "lib/userdata.inc.php".'; +$lng['admin']['configfiles']['commands'] = 'Comandi: Per favore esegui i seguenti comandi in una shell.'; +$lng['admin']['configfiles']['restart'] = 'Ricarica: Per favore esegui i seguenti comandi (in ordine) in una shell per ricaricare la configurazione.'; +$lng['admin']['templates']['templates'] = 'Template'; +$lng['admin']['templates']['template_add'] = 'Aggiungi template'; +$lng['admin']['templates']['template_edit'] = 'Modifica template'; +$lng['admin']['templates']['action'] = 'Azione'; +$lng['admin']['templates']['email'] = 'Email'; +$lng['admin']['templates']['subject'] = 'Soggetto:'; +$lng['admin']['templates']['mailbody'] = 'Testo dell\'Email'; +$lng['admin']['templates']['createcustomer'] = 'Email di benvenuto per i nuovi clienti'; +$lng['admin']['templates']['pop_success'] = 'Benevenuto per ogni nuovo account Email'; +$lng['admin']['templates']['template_replace_vars'] = 'Variabili da cambiare nel template:'; +$lng['admin']['templates']['FIRSTNAME'] = 'Rimpiazzato con il nome del cliente.'; +$lng['admin']['templates']['NAME'] = 'Rimpiazzato con il cognome del cliente.'; +$lng['admin']['templates']['USERNAME'] = 'Rimpiazzato con il nome utente dell\'account.'; +$lng['admin']['templates']['PASSWORD'] = 'Rimpiazzato con la password dell\'account.'; +$lng['admin']['templates']['EMAIL'] = 'Rimapiazzato con l\'indirizzo dell\'account.'; + +/** + * Serversettings + */ + +$lng['serversettings']['session_timeout']['title'] = 'Timeout della sessione'; +$lng['serversettings']['session_timeout']['description'] = 'Quanto tempo un utente deve rimanere inattivo prima che la sessione diventi invalida (secondi)?'; +$lng['serversettings']['accountprefix']['title'] = 'Prefisso Cliente'; +$lng['serversettings']['accountprefix']['description'] = 'Che prefisso dovrebbero avere gli account dei clienti?'; +$lng['serversettings']['mysqlprefix']['title'] = 'Prefisso SQL'; +$lng['serversettings']['mysqlprefix']['description'] = 'Che prefisso dovrebbero avere i database SQL?'; +$lng['serversettings']['ftpprefix']['title'] = 'Prefisso FTP'; +$lng['serversettings']['ftpprefix']['description'] = 'Che prefisso dovrebbero avere gli account FTP?'; +$lng['serversettings']['documentroot_prefix']['title'] = 'Cartella dati web'; +$lng['serversettings']['documentroot_prefix']['description'] = 'Dove devono essere immagazzinati tutti i dati web?'; +$lng['serversettings']['logfiles_directory']['title'] = 'Cartella logfiles'; +$lng['serversettings']['logfiles_directory']['description'] = 'Dove devono essere immagazzinati tutti i log?'; +$lng['serversettings']['ipaddress']['title'] = 'Indirizzo IP'; +$lng['serversettings']['ipaddress']['description'] = 'Qual\'è l\'indirizzo IP di questo server?'; +$lng['serversettings']['hostname']['title'] = 'Hostname'; +$lng['serversettings']['hostname']['description'] = 'QUal\'è l\'hostname di questo server?'; +$lng['serversettings']['apachereload_command']['title'] = 'Comando riavvio Apache'; +$lng['serversettings']['apachereload_command']['description'] = 'Qual\'è il comando per riavviare Apache?'; +$lng['serversettings']['bindconf_directory']['title'] = 'Cartella configurazione Bind'; +$lng['serversettings']['bindconf_directory']['description'] = 'Dove sono i file di configurazione per Bind?'; +$lng['serversettings']['bindreload_command']['title'] = 'Comando riavvio Bind'; +$lng['serversettings']['bindreload_command']['description'] = 'Qual\'è il comando per riavviare Bind?'; +$lng['serversettings']['binddefaultzone']['title'] = 'Zona di default Bind'; +$lng['serversettings']['binddefaultzone']['description'] = 'Qual\'è il nome della zona di default Bind?'; +$lng['serversettings']['vmail_uid']['title'] = 'UID Email'; +$lng['serversettings']['vmail_uid']['description'] = 'Che UserID dovrebbe avere l\'utente che gestisce le Email?'; +$lng['serversettings']['vmail_gid']['title'] = 'GID Email'; +$lng['serversettings']['vmail_gid']['description'] = 'Che GroupID dovrebbe avere l\'utente che gestisce le Email?'; +$lng['serversettings']['vmail_homedir']['title'] = 'Cartella Email'; +$lng['serversettings']['vmail_homedir']['description'] = 'Dove devono essere immagazzinate tutte le Email?'; +$lng['serversettings']['adminmail']['title'] = 'Mittente'; +$lng['serversettings']['adminmail']['description'] = 'Qual\'è l\'indirizzo del mittente delle Email provenienti dal pannello?'; +$lng['serversettings']['phpmyadmin_url']['title'] = 'URL phpMyAdmin'; +$lng['serversettings']['phpmyadmin_url']['description'] = 'Qual\'è l\'URL di phpMyAdmin? (deve cominciare per http://)'; +$lng['serversettings']['webmail_url']['title'] = 'URL WebMail'; +$lng['serversettings']['webmail_url']['description'] = 'Qual\'è l\'URL della WebMail? (deve cominciare per http://)'; +$lng['serversettings']['webftp_url']['title'] = 'URL WebFTP'; +$lng['serversettings']['webftp_url']['description'] = 'Qual\'è l\'URL del WebFTP? (deve cominciare per http://)'; +$lng['serversettings']['language']['description'] = 'Qual\'è la lingua standard del tuo server?'; +$lng['serversettings']['maxloginattempts']['title'] = 'Numero massimo tentativi login'; +$lng['serversettings']['maxloginattempts']['description'] = 'Numero massimo di tentativi di login prima che l\'account sia disattivato.'; +$lng['serversettings']['deactivatetime']['title'] = 'Durata disattivamento'; +$lng['serversettings']['deactivatetime']['description'] = 'Tempo (sec.) di disattivazione dell\'account dopo troppi tentativi di login.'; +$lng['serversettings']['pathedit']['title'] = 'Modalità di scelta percorsi/cartelle'; +$lng['serversettings']['pathedit']['description'] = 'Un percorso/cartella andrà scelto attraverso un menu a tendina o inserendolo a mano?'; + +/** + * New strings + */ + +$lng['admin']['cronlastrun'] = 'Ultimo Cronjob'; +$lng['serversettings']['paging']['title'] = 'Elementi da visualizzare per pagina'; +$lng['serversettings']['paging']['description'] = 'Quanti elementi dovrebbero essere visualizzati su una pagina? (0 = disattiva impaginazione)'; +$lng['error']['ipstillhasdomains'] = 'La combinazione IP/Porta che vuoi eliminare ha ancora dei domini assegnati, per favore riassegna questi domini ad altre combinazioni IP/Porta prima di eliminare questa.'; +$lng['error']['cantdeletedefaultip'] = 'Non puoi eliminare la combinazione IP/Porta default dei rivenditori, per favore imposta un\'altra combinazione IP/Porta come default dei rivenditori prima di eliminare questa.'; +$lng['error']['cantdeletesystemip'] = 'Non puoi eliminare l\'ultima IP di sistema, crea un\'altra combinazione IP/Porta per l\'IP di sistema o cambia l\'IP di sistema.'; +$lng['error']['myipaddress'] = '\'IP\''; +$lng['error']['myport'] = '\'Porta\''; +$lng['error']['myipdefault'] = 'Devi selezionare una combinazione IP/Porta che diventerà default.'; +$lng['error']['myipnotdouble'] = 'Questa combinazione IP/Porta esiste già.'; +$lng['question']['admin_ip_reallydelete'] = 'Vuoi veramente eliminare l\'indirizzo IP %s?'; +$lng['admin']['ipsandports']['ipsandports'] = 'IP e Porte'; +$lng['admin']['ipsandports']['add'] = 'Aggiungi IP/Porta'; +$lng['admin']['ipsandports']['edit'] = 'Modifica IP/Porta'; +$lng['admin']['ipsandports']['ipandport'] = 'IP/Porta'; +$lng['admin']['ipsandports']['ip'] = 'IP'; +$lng['admin']['ipsandports']['port'] = 'Porta'; +$lng['error']['cantchangesystemip'] = 'Non puoi cambiare l\'ultima IP di sistema, crea un\'altra combinazione IP/Porta per l\'IP di sistema o cambia l\'IP di sistema.'; +$lng['question']['admin_domain_reallydocrootoutofcustomerroot'] = 'Sei sicuro di volere la cartella base dei dati web di questo dominio al di fuori della cartella base del cliente?'; +$lng['admin']['memorylimitdisabled'] = 'Disabilitato'; +$lng['error']['loginnameissystemaccount'] = 'Non puoi creare account con nomi simili agli account di sistema. Per favore cambia il nome dell\'account.'; +$lng['domain']['openbasedirpath'] = 'Percorso OpenBasedir'; +$lng['domain']['docroot'] = 'Percorso del campo sopra'; +$lng['domain']['homedir'] = 'Cartella Home'; +$lng['admin']['valuemandatory'] = 'Questo valore è obbligatorio'; +$lng['admin']['valuemandatorycompany'] = 'O i campi "nome" e "cognome" O il capo "compagnia" devono essere riempiti'; +$lng['menue']['main']['username'] = 'Connesso come utente: '; +$lng['panel']['urloverridespath'] = 'URL (sovrascrive il percorso)'; +$lng['panel']['pathorurl'] = 'Percorso o URL'; +$lng['error']['sessiontimeoutiswrong'] = '"Timeout Sessione" deve essere un numero.'; +$lng['error']['maxloginattemptsiswrong'] = '"Numero Massimo Tentativi Login" deve essere un numero.'; +$lng['error']['deactivatetimiswrong'] = '"Durata Disattivamento" deve essere un numero.'; +$lng['error']['accountprefixiswrong'] = '&quopt;Prefisso Utente" incorretto.'; +$lng['error']['mysqlprefixiswrong'] = '&quopt;Prefisso SQL" incorretto.'; +$lng['error']['ftpprefixiswrong'] = '&quopt;Prefisso FTP" incorretto.'; +$lng['error']['ipiswrong'] = '"Indirizzo IP" incorretto. È permesso solo un indirizzo IP valido.'; +$lng['error']['vmailuidiswrong'] = '"UID Email" incorretto. È permessa solo una UID numerica.'; +$lng['error']['vmailgidiswrong'] = '"GID Email" incorretto. È permessa solo una GID numerica.'; +$lng['error']['adminmailiswrong'] = '"Mittente" incorretto. È permesso solo un indirizzo Email valido.'; +$lng['error']['pagingiswrong'] = 'Valore degli "Elementi da visualizzare per pagina" incorretto. Sono permessi solo numeri.'; +$lng['error']['phpmyadminiswrong'] = 'Il link a phpMyAdmin è invalido.'; +$lng['error']['webmailiswrong'] = 'Il link alla WebMail è invalido.'; +$lng['error']['webftpiswrong'] = 'Il link al WebFTP è invalido.'; +$lng['domains']['hasaliasdomains'] = 'Ha domini alias'; +$lng['serversettings']['defaultip']['title'] = 'IP/Porta default'; +$lng['serversettings']['defaultip']['description'] = 'Qual\'è la combinazione IP/Porta default?'; +$lng['domains']['statstics'] = 'Statistiche d\'utilizzo'; +$lng['panel']['ascending'] = 'ascendente'; +$lng['panel']['decending'] = 'discendente'; +$lng['panel']['search'] = 'Cerca'; +$lng['panel']['used'] = 'utilizzato'; +$lng['panel']['translator'] = 'Traduttore'; +$lng['error']['stringformaterror'] = 'Il valore per il campo "%s" non è nel formato atteso.'; + +// Translated by marone42@googlemail.com on 03/15/2007 (see https://trac.syscp.org/ticket/126#comment:21) + +$lng['admin']['serversoftware'] = 'Serversoftware'; +$lng['admin']['phpversion'] = 'Versione PHP'; +$lng['admin']['phpmemorylimit'] = 'PHP-Memory-Limit'; +$lng['admin']['mysqlserverversion'] = 'Versione MySQL Server'; +$lng['admin']['mysqlclientversion'] = 'Version MySQL Client'; +$lng['admin']['webserverinterface'] = 'Interfaccia Webserver'; +$lng['domains']['isassigneddomain'] = 'È dominio assegnato'; +$lng['serversettings']['phpappendopenbasedir']['title'] = 'Percoso da aggiungere a OpenBasedir'; +$lng['serversettings']['phpappendopenbasedir']['description'] = 'Questi percorsi (separati da colonne) verranno aggiunti allo statement OpenBasedir in ognuno vhost-container.'; + +?> \ No newline at end of file diff --git a/lng/phpmailer.lang-en.php b/lng/phpmailer.lang-en.php new file mode 100644 index 0000000000..9acb468e9a --- /dev/null +++ b/lng/phpmailer.lang-en.php @@ -0,0 +1,22 @@ + diff --git a/lng/portugues.lng.php b/lng/portugues.lng.php new file mode 100644 index 0000000000..580dbf1cba --- /dev/null +++ b/lng/portugues.lng.php @@ -0,0 +1,1215 @@ + + * @author Thiago Goncalves de Castro + * @author Rafael Andrade + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Language + * @version $Id: portugues.lng.php 2724 2009-06-07 14:18:02Z flo $ + */ + +/** + * Global + */ + +$lng['translator'] = 'Ricardo Luiz Costa, Rafael Andrade, Thiago Goncalves de Castro'; +$lng['panel']['edit'] = 'Editar'; +$lng['panel']['delete'] = 'Deletar'; +$lng['panel']['create'] = 'Criar'; +$lng['panel']['save'] = 'Salvar'; +$lng['panel']['yes'] = 'Sim'; +$lng['panel']['no'] = 'Não'; +$lng['panel']['emptyfornochanges'] = 'Sair sem salvar'; +$lng['panel']['emptyfordefault'] = 'Restaurar padrão'; +$lng['panel']['path'] = 'Caminho'; +$lng['panel']['toggle'] = 'Toggle'; +$lng['panel']['next'] = 'Próximo'; +$lng['panel']['dirsmissing'] = 'Directório não disponível ou ilegível'; + +/** + * Login + */ + +$lng['login']['username'] = 'Usuário'; +$lng['login']['password'] = 'Senha'; +$lng['login']['language'] = 'Idioma'; +$lng['login']['login'] = 'Login'; +$lng['login']['logout'] = 'Sair'; +$lng['login']['profile_lng'] = 'Idioma padrão'; + +/** + * Customer + */ + +$lng['customer']['documentroot'] = 'Diretorio home'; +$lng['customer']['name'] = 'Sobrenome'; +$lng['customer']['firstname'] = 'Primeiro nome'; +$lng['customer']['company'] = 'Empresa'; +$lng['customer']['street'] = 'Endereço'; +$lng['customer']['zipcode'] = 'Cep'; +$lng['customer']['city'] = 'Cidade'; +$lng['customer']['phone'] = 'Telefone'; +$lng['customer']['fax'] = 'Fax'; +$lng['customer']['email'] = 'E-mail'; +$lng['customer']['customernumber'] = 'Cliente ID'; +$lng['customer']['diskspace'] = 'Espaço de disco (MB)'; +$lng['customer']['traffic'] = 'Tráfego (GB)'; +$lng['customer']['mysqls'] = 'Bancos de dados-MySQL'; +$lng['customer']['emails'] = 'Endereços de e-mail'; +$lng['customer']['accounts'] = 'Contas de e-mail'; +$lng['customer']['forwarders'] = 'Redirecionamentos de e-mail'; +$lng['customer']['ftps'] = 'Contas de FTP'; +$lng['customer']['subdomains'] = 'Sub-Dominio(s)'; +$lng['customer']['domains'] = 'Dominio(s)'; +$lng['customer']['unlimited'] = 'ilimitados'; + +/** + * Customermenue + */ + +$lng['menue']['main']['main'] = 'Principal'; +$lng['menue']['main']['changepassword'] = 'Trocar senha'; +$lng['menue']['main']['changelanguage'] = 'Trocar idioma'; +$lng['menue']['email']['email'] = 'e-mail'; +$lng['menue']['email']['emails'] = 'Endereços'; +$lng['menue']['email']['webmail'] = 'WebMail'; +$lng['menue']['mysql']['mysql'] = 'MySQL'; +$lng['menue']['mysql']['databases'] = 'Banco de dados'; +$lng['menue']['mysql']['phpmyadmin'] = 'phpMyAdmin'; +$lng['menue']['domains']['domains'] = 'Dominios'; +$lng['menue']['domains']['settings'] = 'Configurações'; +$lng['menue']['ftp']['ftp'] = 'FTP'; +$lng['menue']['ftp']['accounts'] = 'Contas'; +$lng['menue']['ftp']['webftp'] = 'WebFTP'; +$lng['menue']['extras']['extras'] = 'Extras'; +$lng['menue']['extras']['directoryprotection'] = 'Diretorio protegido'; +$lng['menue']['extras']['pathoptions'] = 'opções de caminhos'; + +/** + * Index + */ + +$lng['index']['customerdetails'] = 'Detalhes dos Clientes'; +$lng['index']['accountdetails'] = 'Detalhes das Contas'; + +/** + * Change Password + */ + +$lng['changepassword']['old_password'] = 'Senha atual'; +$lng['changepassword']['new_password'] = 'Nova senha'; +$lng['changepassword']['new_password_confirm'] = 'Repita a nova senha'; +$lng['changepassword']['new_password_ifnotempty'] = 'Nova senha (em branco = não alterar)'; +$lng['changepassword']['also_change_ftp'] = ' trocar tambem a senha da conta principal de FTP'; + +/** + * Domains + */ + +$lng['domains']['description'] = 'Aqui voce pode criar(sub-)dominios e alterar seu destino.
    O sistema irá levar algum tempo para aplicar as novas configurações depois de salvas.'; +$lng['domains']['domainsettings'] = 'Configurar Dominio'; +$lng['domains']['domainname'] = 'Nome do dominio'; +$lng['domains']['subdomain_add'] = 'Criar Sub-dominio'; +$lng['domains']['subdomain_edit'] = 'Editar (sub)dominio'; +$lng['domains']['wildcarddomain'] = 'Criar um wildcarddomain?'; +$lng['domains']['aliasdomain'] = 'Aliás para o dominio'; +$lng['domains']['noaliasdomain'] = 'Não dominio do aliás'; + +/** + * eMails + */ + +$lng['emails']['description'] = 'Aqui voce pode criar e alterer seus e-mails.
    Uma conta é como uma caixa de correio na frente de sua casa. Quando alguem envia para voce um e-mail, ele é colocado nesta conta.

    Para baixar seus e-mails use as seguintes configurações no seu propraga de e-mails favorito: (Os dados em italico devem ser substituidos pelo equivalente da conta que voce criou!)
    Hostname: Nome de seu dominio
    Usuário: Nome da conta / Endereço de e-mail
    Senha: a senha que voce escolheu'; +$lng['emails']['emailaddress'] = 'Endereços de e-mail'; +$lng['emails']['emails_add'] = 'Criar e-mail'; +$lng['emails']['emails_edit'] = 'Editar e-mail'; +$lng['emails']['catchall'] = 'Pega tudo'; +$lng['emails']['iscatchall'] = 'Definir como endereço pega tudo?'; +$lng['emails']['account'] = 'Conta'; +$lng['emails']['account_add'] = 'Criar conta'; +$lng['emails']['account_delete'] = 'Excluir conta'; +$lng['emails']['from'] = 'Origem'; +$lng['emails']['to'] = 'Destino'; +$lng['emails']['forwarders'] = 'Redirecionamentos'; +$lng['emails']['forwarder_add'] = 'Criar redirecionamento'; + +/** + * FTP + */ + +$lng['ftp']['description'] = 'Aqui voce pode criar e alterar suas contas de FTP.
    As alterações são instantâneas e podem ser utilizadas imediatamente depois de salvas.'; +$lng['ftp']['account_add'] = 'Criar conta'; + +/** + * MySQL + */ + +$lng['mysql']['description'] = 'Aqui voce pode criar e alterar seus bancos de dados MySQL.
    As alterações são instantâneas e podem ser utilizadas imediatamente depois de salvas.
    No menu do lado esquerdo voce pode encontrar a ferramenta phpMyAdmin e com ela facilmente administrar seus bancos de dados.

    Para usar seu banco de dados com scripts em PHP use as seguintes configurações: (Os dados em italico devem ser substituidos pelo equivalente do banco de dados que voce criou!)
    Hostname:
    Usuario: Nome do banco de dadose
    Senha: a senha que voce escolheu
    Banco de dados: Nome do banco de dados'; +$lng['mysql']['databasename'] = 'Usuario / Nome do banco de dados'; +$lng['mysql']['databasedescription'] = 'Descrição do banco de dados'; +$lng['mysql']['database_create'] = 'Criar banco de dados'; + +/** + * Extras + */ + +$lng['extras']['description'] = 'Aqui voce pode adicoionar alguns recursos extras, como por exemplo um diretório protegido.
    O sistema ira precisar de algum tempo para aplicar suas alterações depois de salvas.'; +$lng['extras']['directoryprotection_add'] = 'Adicionar diretório pretogido'; +$lng['extras']['view_directory'] = 'Mostrar conteúdo do diretório'; +$lng['extras']['pathoptions_add'] = 'Adicionar opções de caminho'; +$lng['extras']['directory_browsing'] = 'Pesquizar conteúdo de diretório'; +$lng['extras']['pathoptions_edit'] = 'Esitar opções de caminhos'; +$lng['extras']['error404path'] = '404'; +$lng['extras']['error403path'] = '403'; +$lng['extras']['error500path'] = '500'; +$lng['extras']['error401path'] = '401'; +$lng['extras']['errordocument404path'] = 'URL para página de erro 404'; +$lng['extras']['errordocument403path'] = 'URL para página de erro 403'; +$lng['extras']['errordocument500path'] = 'URL para página de erro 500'; +$lng['extras']['errordocument401path'] = 'URL para página de erro 401'; + +/** + * Errors + */ + +$lng['error']['error'] = 'Erro'; +$lng['error']['directorymustexist'] = 'O diretório %s deve existir. Por favor crie ele primeiro com seu programa de FTP.'; +$lng['error']['filemustexist'] = 'O arquivo %s deve existir.'; +$lng['error']['allresourcesused'] = 'Voce já usou todos os seus recursos.'; +$lng['error']['domains_cantdeletemaindomain'] = 'Voce não pode deletar um dominio que esta sendo usado como email-domain.'; +$lng['error']['domains_canteditdomain'] = 'Voce não pode editar este dominio. Ele foi desabilitado pelo administrador.'; +$lng['error']['domains_cantdeletedomainwithemail'] = 'Voce não pode deletar um dominio que é usado como email-domain. Delete todos as contas de e-mail primeiro.'; +$lng['error']['firstdeleteallsubdomains'] = 'Voce deve deletar todos subdominios antes de poder criar um wildcard domain.'; +$lng['error']['youhavealreadyacatchallforthisdomain'] = 'Voce já definiu uma conta pega tudo para este dominio.'; +$lng['error']['ftp_cantdeletemainaccount'] = 'Voce não pode deletar a conta principal de FTP'; +$lng['error']['login'] = 'O usuário ou senha digitados, não estão corretos. Por favor tente novamente!'; +$lng['error']['login_blocked'] = 'Esta conta está suspensa por exceder as tentativas de login permitidas.
    Por favor tente novamente em ' . $settings['login']['deactivatetime'] . ' segundos.'; +$lng['error']['notallreqfieldsorerrors'] = 'Voce não preencheu todos os campos ou preencheu algum campo incorretamente.'; +$lng['error']['oldpasswordnotcorrect'] = 'A senha antiga não confere.'; +$lng['error']['youcantallocatemorethanyouhave'] = 'Voce não pode alocar mais recursos do que voce mesmo possui.'; +$lng['error']['mustbeurl'] = 'Voce não digitou uma URL válida (ex. http://seudominio.com/erro404.htm)'; +$lng['error']['invalidpath'] = 'Optou por um URL não válido (eventuais problemas na lista do directório)'; +$lng['error']['stringisempty'] = 'Faltando informação no campo'; +$lng['error']['stringiswrong'] = 'Erro na informação do campo'; +$lng['error']['myloginname'] = '\'' . $lng['login']['username'] . '\''; +$lng['error']['mypassword'] = '\'' . $lng['login']['password'] . '\''; +$lng['error']['oldpassword'] = '\'' . $lng['changepassword']['old_password'] . '\''; +$lng['error']['newpassword'] = '\'' . $lng['changepassword']['new_password'] . '\''; +$lng['error']['newpasswordconfirm'] = '\'' . $lng['changepassword']['new_password_confirm'] . '\''; +$lng['error']['newpasswordconfirmerror'] = 'A nova senha e a confirmação não conferem'; +$lng['error']['myname'] = '\'' . $lng['customer']['name'] . '\''; +$lng['error']['myfirstname'] = '\'' . $lng['customer']['firstname'] . '\''; +$lng['error']['emailadd'] = '\'' . $lng['customer']['email'] . '\''; +$lng['error']['mydomain'] = '\'Dominio\''; +$lng['error']['mydocumentroot'] = '\'Documento principal\''; +$lng['error']['loginnameexists'] = 'Login %s já existe'; +$lng['error']['emailiswrong'] = 'E-mail %s contem caracteres inválidos ou está incompleto'; +$lng['error']['loginnameiswrong'] = 'Login %s contem caracteres inválidos'; +$lng['error']['userpathcombinationdupe'] = 'Usuario e caminho já existem'; +$lng['error']['patherror'] = 'Erro geral! o caminho não pode ficar em branco'; +$lng['error']['errordocpathdupe'] = 'Opção de caminho %s já existe'; +$lng['error']['adduserfirst'] = 'Por favor crie um cliente primeiro'; +$lng['error']['domainalreadyexists'] = 'O dominio %s já está apontado para outro cliente'; +$lng['error']['nolanguageselect'] = 'Nenhum idioma selecionado.'; +$lng['error']['nosubjectcreate'] = 'Voce deve definir um nome para este e-mail template.'; +$lng['error']['nomailbodycreate'] = 'Voce deve definir o texto para este e-mail template.'; +$lng['error']['templatenotfound'] = 'Template não encontrado.'; +$lng['error']['alltemplatesdefined'] = 'Voce não pode definir mais templates, todos idiomas já suportados.'; +$lng['error']['wwwnotallowed'] = 'www não é permitido como nome de subdominio.'; +$lng['error']['subdomainiswrong'] = 'O subdominio %s contém caracteres inválidos.'; +$lng['error']['domaincantbeempty'] = 'O nome do dominio não pode estar vazio.'; +$lng['error']['domainexistalready'] = 'O dominio %s já existe.'; +$lng['error']['domainisaliasorothercustomer'] = 'O domínio-alias escolhido é ele próprio um domínio-alias ou este pertence a um outro cliente.'; +$lng['error']['emailexistalready'] = 'O E-mail %s já existe.'; +$lng['error']['maindomainnonexist'] = 'O dominio principal %s não existe.'; +$lng['error']['destinationnonexist'] = 'Por favor crie seu redirecionamento no campo \'Destino\'.'; +$lng['error']['destinationalreadyexistasmail'] = 'O redirecionamento %s já existe como uma conta de e-mail.'; +$lng['error']['destinationalreadyexist'] = 'Voce já definiu um redirecionamento para %s .'; +$lng['error']['destinationiswrong'] = 'O redirecionamento %s contem caracteres inválidos ou incompletos.'; +$lng['error']['domainname'] = $lng['domains']['domainname']; + +/** + * Questions + */ + +$lng['question']['question'] = 'Pergunta de segurança'; +$lng['question']['admin_customer_reallydelete'] = 'Voce realmente deseja deletar o cliente %s? Este comando não poderá ser cancelado!'; +$lng['question']['admin_domain_reallydelete'] = 'Voce realmente deseja deletar o dominio %s?'; +$lng['question']['admin_domain_reallydisablesecuritysetting'] = 'Voce realmente deseja desativar estas configurações de segurança (OpenBasedir e/ou SafeMode)?'; +$lng['question']['admin_admin_reallydelete'] = 'Voce realmente deseja deletar o administrador %s? Todos clientes e dominios serão realocados para o administrador principal.'; +$lng['question']['admin_template_reallydelete'] = 'Voce realmente deseja deletar o template \'%s\'?'; +$lng['question']['domains_reallydelete'] = 'Voce realmente deseja deletar o dominio %s?'; +$lng['question']['email_reallydelete'] = 'Voce realmente deseja deletar o e-mail %s?'; +$lng['question']['email_reallydelete_account'] = 'Voce realmente deseja deletar a conta de e-mail %s?'; +$lng['question']['email_reallydelete_forwarder'] = 'Voce realmente deseja deletar o redirecionamento %s?'; +$lng['question']['extras_reallydelete'] = 'Voce realmente deseja deletar a proteção do diretório %s?'; +$lng['question']['extras_reallydelete_pathoptions'] = 'Voce realmente deseja deletar o caminho %s?'; +$lng['question']['ftp_reallydelete'] = 'Voce realmente deseja deletar a conta de FTP %s?'; +$lng['question']['mysql_reallydelete'] = 'Voce realmente deseja deletar o banco de dados %s? Este comando não poderá ser cancelado!'; +$lng['question']['admin_configs_reallyrebuild'] = 'Está certo que quer deixar reconfigurar os ficheiros de configuração de Apache e Bind?'; + +/** + * Mails + */ + +$lng['mails']['pop_success']['mailbody'] = 'Olá,\n\n sua conta de e-mail {EMAIL}\n foi criada com sucesso.\n\nEsta é uma mensagem automática\neMail, por favor não responda!\n\nAtenciosamente, Equipe de desenvolvimento do SysCP'; +$lng['mails']['pop_success']['subject'] = 'Conta de e-mail criada com sucesso!'; +$lng['mails']['createcustomer']['mailbody'] = 'Olá {FIRSTNAME} {NAME},\n\nseguem os detalhes de sua nova conta de e-mail:\n\nUsuario: {USERNAME}\nSenha: {PASSWORD}\n\nObrigado,\nEquipe de desenvolvimento do SysCP'; +$lng['mails']['createcustomer']['subject'] = 'Informações da conta'; + +/** + * Admin + */ + +$lng['admin']['overview'] = 'Visão geral'; +$lng['admin']['ressourcedetails'] = 'Recursos usados'; +$lng['admin']['systemdetails'] = 'Detalhes do sistema'; +$lng['admin']['syscpdetails'] = 'Detalhes do SysCP'; +$lng['admin']['installedversion'] = 'Versão instalada'; +$lng['admin']['latestversion'] = 'Ultima Versão'; +$lng['admin']['lookfornewversion']['clickhere'] = 'procurar pela internet'; +$lng['admin']['lookfornewversion']['error'] = 'Erro de leitura'; +$lng['admin']['resources'] = 'Recursos'; +$lng['admin']['customer'] = 'Cliente'; +$lng['admin']['customers'] = 'Clientes'; +$lng['admin']['customer_add'] = 'Criar cliente'; +$lng['admin']['customer_edit'] = 'Editar cliente'; +$lng['admin']['domains'] = 'Dominios'; +$lng['admin']['domain_add'] = 'Criar dominio'; +$lng['admin']['domain_edit'] = 'Editar dominio'; +$lng['admin']['subdomainforemail'] = 'Subdominio como "emaildomains"'; +$lng['admin']['admin'] = 'Administrador'; +$lng['admin']['admins'] = 'Administradores'; +$lng['admin']['admin_add'] = 'Criar administrador'; +$lng['admin']['admin_edit'] = 'Editar administrador'; +$lng['admin']['customers_see_all'] = 'Mostrar todos os clientes'; +$lng['admin']['domains_see_all'] = 'Mostrar todos os dominios'; +$lng['admin']['change_serversettings'] = 'Alterar configuraççes do servidor?'; +$lng['admin']['server'] = 'Servidor'; +$lng['admin']['serversettings'] = 'Configuraççes'; +$lng['admin']['rebuildconf'] = 'Escrever de novo os configs'; +$lng['admin']['stdsubdomain'] = 'Subdominio padrão'; +$lng['admin']['stdsubdomain_add'] = 'Criar Subdominio padrão'; +$lng['admin']['deactivated'] = 'Desativado'; +$lng['admin']['deactivated_user'] = 'Desativar usuário'; +$lng['admin']['sendpassword'] = 'Enviar senha'; +$lng['admin']['ownvhostsettings'] = 'Own vHost-Settings'; +$lng['admin']['configfiles']['serverconfiguration'] = 'Configurações'; +$lng['admin']['configfiles']['files'] = 'Configfiles: Por favor altere os seguintes arquivos ou crie eles com
    o seguinte conteúdo se ele não existir.
    Por favor observe: A senha do MySQL não foi alterada por razões de segurança.
    Por favor substitua "MYSQL_PASSWORD" por uma sua. Se voce esqueceu a senha do MySQL
    voce pode verificar em "lib/userdata.inc.php".'; +$lng['admin']['configfiles']['commands'] = 'Commands: Por favor execute as seguintes comandos no shell.'; +$lng['admin']['configfiles']['restart'] = 'Restart: Por favor execute as seguintes comandos no shell para carregar aas novas configurações.'; +$lng['admin']['templates']['templates'] = 'Templates'; +$lng['admin']['templates']['template_add'] = 'Adicionar template'; +$lng['admin']['templates']['template_edit'] = 'Editar template'; +$lng['admin']['templates']['action'] = 'Ação'; +$lng['admin']['templates']['email'] = 'E-Mail'; +$lng['admin']['templates']['subject'] = 'Assunto'; +$lng['admin']['templates']['mailbody'] = 'Mensagem'; +$lng['admin']['templates']['createcustomer'] = 'E-mail de boas-vindas para novos clientes'; +$lng['admin']['templates']['pop_success'] = 'E-mail de boas-vindas para nova conta de e-mail'; +$lng['admin']['templates']['template_replace_vars'] = 'Variaveis para serem substituidas no template:'; +$lng['admin']['templates']['FIRSTNAME'] = 'Altere para o primeiro nome do cliente.'; +$lng['admin']['templates']['NAME'] = 'Altere para o nome do cliente.'; +$lng['admin']['templates']['USERNAME'] = 'Altere para nome da conta do cliente.'; +$lng['admin']['templates']['PASSWORD'] = 'Altere com a senha da conta do cliente.'; +$lng['admin']['templates']['EMAIL'] = 'Altere com os dados do servidor POP3/IMAP.'; + +/** + * Serversettings + */ + +$lng['serversettings']['session_timeout']['title'] = 'Tempo esgotado'; +$lng['serversettings']['session_timeout']['description'] = 'Quanto tempo o usuario deve estar inativo para ser desconectado (segundos)?'; +$lng['serversettings']['accountprefix']['title'] = 'Prefixo do cliente'; +$lng['serversettings']['accountprefix']['description'] = 'Qual o prefixo "customeraccounts" deve ter?'; +$lng['serversettings']['mysqlprefix']['title'] = 'SQL Prefixo'; +$lng['serversettings']['mysqlprefix']['description'] = 'Qual prefixo as contas mysql devem ter?'; +$lng['serversettings']['ftpprefix']['title'] = 'FTP Prefixo'; +$lng['serversettings']['ftpprefix']['description'] = 'Qual prefixo as contas de FTP devem ter?'; +$lng['serversettings']['documentroot_prefix']['title'] = 'Diretório de documentação'; +$lng['serversettings']['documentroot_prefix']['description'] = 'Aonde os documentos dever ser gravados?'; +$lng['serversettings']['logfiles_directory']['title'] = 'Diretório de LOG'; +$lng['serversettings']['logfiles_directory']['description'] = 'Aonde os arquivos de log dever ser gravados?'; +$lng['serversettings']['ipaddress']['title'] = 'Endereços de IP'; +$lng['serversettings']['ipaddress']['description'] = 'Quais os Endereços IP deste servidor?'; +$lng['serversettings']['hostname']['title'] = 'Hostname'; +$lng['serversettings']['hostname']['description'] = 'Qual o Hostname deste servidor?'; +$lng['serversettings']['apachereload_command']['title'] = 'Comando de reiniciar o Apache'; +$lng['serversettings']['apachereload_command']['description'] = 'Qual o comando para reiniciar o apache?'; +$lng['serversettings']['bindconf_directory']['title'] = 'Diretório de configuração do Bind'; +$lng['serversettings']['bindconf_directory']['description'] = 'Aonde estão os arquivos de configuração do bind?'; +$lng['serversettings']['bindreload_command']['title'] = 'Comando de reiniciar o Bind'; +$lng['serversettings']['bindreload_command']['description'] = 'Qual o comando para reiniciar o bind?'; +$lng['serversettings']['binddefaultzone']['title'] = 'Bind default zone'; +$lng['serversettings']['binddefaultzone']['description'] = 'Qual o nome da default zone?'; +$lng['serversettings']['vmail_uid']['title'] = 'Mails-Uid'; +$lng['serversettings']['vmail_uid']['description'] = 'Qual UserID os e-mails devem ter?'; +$lng['serversettings']['vmail_gid']['title'] = 'Mails-Gid'; +$lng['serversettings']['vmail_gid']['description'] = 'Qual GroupID os e-mails devem ter?'; +$lng['serversettings']['vmail_homedir']['title'] = 'Mails-Homedir'; +$lng['serversettings']['vmail_homedir']['description'] = 'Aonde os e-mails devem ser gravados?'; +$lng['serversettings']['adminmail']['title'] = 'Remetente'; +$lng['serversettings']['adminmail']['description'] = 'Qual o remetente dos e-mails enviados pelo painel?'; +$lng['serversettings']['phpmyadmin_url']['title'] = 'phpMyAdmin URL'; +$lng['serversettings']['phpmyadmin_url']['description'] = 'Qual a URL do phpMyAdmin? (deve iniciar com http://)'; +$lng['serversettings']['webmail_url']['title'] = 'WebMail URL'; +$lng['serversettings']['webmail_url']['description'] = 'Qual a URL do WebMail? (deve iniciar com http://)'; +$lng['serversettings']['webftp_url']['title'] = 'WebFTP URL'; +$lng['serversettings']['webftp_url']['description'] = 'Qual a URL do WebFTP? (deve iniciar com http://)'; +$lng['serversettings']['language']['description'] = 'Qual o idioma padrão do servidor?'; +$lng['serversettings']['maxloginattempts']['title'] = 'Tentativas maximas de Login'; +$lng['serversettings']['maxloginattempts']['description'] = 'Tentativas maximas de Login para a conta ser desativada.'; +$lng['serversettings']['deactivatetime']['title'] = 'Tempo que a conta deve permanecer desativada'; +$lng['serversettings']['deactivatetime']['description'] = 'Tempo (sec.) qua a conta permanece desativada depois de muitas tentativas de login.'; +$lng['serversettings']['pathedit']['title'] = 'File-Método de entrada'; +$lng['serversettings']['pathedit']['description'] = 'A escolha do file tem que ser feita através do Dropdown-Menu ou pode ser feita manualmente?'; + +/** + * ADDED BETWEEN 1.2.12 and 1.2.13 + */ + +$lng['admin']['cronlastrun'] = 'Ultimo Agendamento'; +$lng['serversettings']['paging']['title'] = 'Entradas por pagina'; +$lng['serversettings']['paging']['description'] = 'Quantas entradas devem ser mostradas por pagina? (0 = desabilitar paginas)'; +$lng['error']['ipstillhasdomains'] = 'O IP/Porta que voce quer deletar ainda possui dominios associados e eles, por favor altere o IP/Porta destes dominios antes de deletá-los.'; +$lng['error']['cantdeletedefaultip'] = 'Voce não pode deletar o IP/Porta padrão do revendedor, por favor defina outro IP/Porta como padrão antes deletar o IP/Porta desejado'; +$lng['error']['cantdeletesystemip'] = 'Voce não pode deletar o IP do sistema, nem criar uma nova combinação IP/Porta para o sistema ou trocar o IP do sistema.'; +$lng['error']['myipaddress'] = '\'IP\''; +$lng['error']['myport'] = '\'Porta\''; +$lng['error']['myipdefault'] = 'Voce precisa selecionar o IP/Porta que será padrão.'; +$lng['error']['myipnotdouble'] = 'Esta combinação IP/Porta já existe.'; +$lng['question']['admin_ip_reallydelete'] = 'Voce realmente deseja deletar este endereço IP?'; +$lng['admin']['ipsandports']['ipsandports'] = 'IPs e Portas'; +$lng['admin']['ipsandports']['add'] = 'Adicionar IP/Porta'; +$lng['admin']['ipsandports']['edit'] = 'Editar IP/Porta'; +$lng['admin']['ipsandports']['ipandport'] = 'IP/Porta'; +$lng['admin']['ipsandports']['ip'] = 'IP'; +$lng['admin']['ipsandports']['port'] = 'Porta'; +$lng['error']['cantchangesystemip'] = 'Você não pode mudar o último sistema IP, para criar uma outra combinação nova de IP/Port para o sistema IP ou para mudar o sistema IP'; +$lng['question']['admin_domain_reallydocrootoutofcustomerroot'] = 'É você certo, você quer a raiz do original para este domínio, não estando dentro do customerroot do cliente?'; +$lng['error']['loginnameissystemaccount'] = 'Você não pode criar os clientes que são similares aos systemaccounts. Incorpore por favor um outro accountname.'; +$lng['domain']['docroot'] = 'trajeto da linha acima de'; +$lng['domain']['homedir'] = 'diretório da casa'; +$lng['admin']['valuemandatory'] = 'Este valor é imperativo.'; +$lng['admin']['valuemandatorycompany'] = 'Qualquer um "nome" e "nome" o "companhia" deve ser enchido.'; +$lng['admin']['phpenabled'] = 'PHP Habilitado'; +$lng['admin']['webserver'] = 'Servidor Web'; +$lng['serversettings']['nameservers']['title'] = 'Servidores DNS'; +$lng['serversettings']['mxservers']['title'] = 'Servidores de Email'; +$lng['serversettings']['mxservers']['description'] = 'Uma lista separada por vírgulas que contém o numero de prioridade e o hostname separados por um espaço (por exemplo: \'mx.example.com 10 \'), contendo os servidores mx.'; +$lng['error']['admin_domain_emailsystemhostname'] = 'Desculpe. Você não pode usar o hostname do servidor como domínio de email'; +$lng['admin']['memorylimitdisabled'] = 'Desabilitado'; +$lng['domain']['openbasedirpath'] = 'Caminho do OpenBaseDir'; +$lng['menue']['main']['username'] = 'Logado como'; +$lng['panel']['urloverridespath'] = 'URL (Caminho Completo)'; +$lng['panel']['pathorurl'] = 'Caminho ou URL'; +$lng['error']['sessiontimeoutiswrong'] = 'Apenas numeros "Timeout da sessão" permitido.'; +$lng['error']['maxloginattemptsiswrong'] = 'Apenas numero "Tentativa maxima de Login" permitido.'; +$lng['error']['deactivatetimiswrong'] = 'Apenas numero "Desativar Tempo" permitido.'; +$lng['error']['accountprefixiswrong'] = 'O "Prefixo" está errado.'; +$lng['error']['mysqlprefixiswrong'] = 'O "Prefixo SQL" está errado.'; +$lng['error']['ftpprefixiswrong'] = 'O "Prefixo FTP" está errado.'; +$lng['error']['ipiswrong'] = 'O "Endereço-IP" está errado. Apenas um Endereço-IP válido é permitido.'; +$lng['error']['vmailuidiswrong'] = 'O "UID do E-mail" Está errado. Só é permitido um número de ID.'; +$lng['error']['vmailgidiswrong'] = 'O "GID do E-mail" Está errado. Só é permitido um número de ID.'; +$lng['error']['adminmailiswrong'] = 'O "Endereço de Envio" está errado. Apenas um endereço de e-mail válido é permitido.'; +$lng['error']['pagingiswrong'] = 'O "Entradas por páginas"-value está errado. Somente caracteres númericos são permitidos.'; +$lng['error']['phpmyadminiswrong'] = 'O caminho para o phpMyAmin não é válido'; +$lng['error']['webmailiswrong'] = 'O caminho para o Webmail não é válido'; +$lng['error']['webftpiswrong'] = 'O caminho para o WebFTP não é válido'; +$lng['domains']['hasaliasdomains'] = 'Possui alinhas de domínio(s)'; +$lng['serversettings']['defaultip']['title'] = 'IP/Porta Padrão'; +$lng['serversettings']['defaultip']['description'] = 'Qual é a IP/Porta Padrão?'; +$lng['domains']['statstics'] = 'Estatísticas de Uso'; +$lng['panel']['ascending'] = 'Crescente'; +$lng['panel']['decending'] = 'Decrescente'; +$lng['panel']['search'] = 'Procurar'; +$lng['panel']['used'] = 'Usado'; +$lng['panel']['translator'] = 'Tradutor'; +$lng['error']['stringformaterror'] = 'O valor par ao campo "%s" não esta no formato correto.'; +$lng['admin']['serversoftware'] = 'Servidor de Software'; +$lng['admin']['phpversion'] = 'Versão do PHP'; +$lng['admin']['phpmemorylimit'] = 'Memória Limite do PHP'; +$lng['admin']['mysqlserverversion'] = 'Versão do MySQL Server'; +$lng['admin']['mysqlclientversion'] = 'Versão do MySQL Client'; +$lng['admin']['webserverinterface'] = 'Interface do Servidor Web'; +$lng['domains']['isassigneddomain'] = 'É um domínio assinado'; +$lng['serversettings']['phpappendopenbasedir']['title'] = 'Caminho para adicionar OpenBasedir'; +$lng['serversettings']['phpappendopenbasedir']['description'] = 'Estes caminhos (separados por dois pontos) serão acrescentados ao OpenBasedir em cada vhost.'; +$lng['error']['youcantdeleteyourself'] = 'Você não pode apagar você mesmo por motivos de segurança'; +$lng['error']['youcanteditallfieldsofyourself'] = 'Nota: Você não pode editar todos os campos de sua própria conta por motivos de segurança'; +$lng['serversettings']['natsorting']['title'] = 'Usar classificação natural na visualização'; +$lng['serversettings']['natsorting']['description'] = 'Ordenar listas como: web1 -> web2 -> web11 ao invéz de web1 -> web11 -> web2.'; +$lng['serversettings']['deactivateddocroot']['title'] = 'Docroots desativado para usuários'; +$lng['serversettings']['deactivateddocroot']['description'] = 'Quando um usuário estiver desativado, esse caminho é usado como seu docroot. Deixe em branco para não criar um vhost a todos.'; +$lng['panel']['reset'] = 'Descartar Mudanças'; +$lng['admin']['accountsettings'] = 'Configurações de Conta'; +$lng['admin']['panelsettings'] = 'Painel de Controle'; +$lng['admin']['systemsettings'] = 'Configurações do Sistema'; +$lng['admin']['webserversettings'] = 'Configurações do WebServer'; +$lng['admin']['mailserversettings'] = 'Configurações do Servidor de Email'; +$lng['admin']['nameserversettings'] = 'Configurações dos Servidores de Nomes'; +$lng['admin']['updatecounters'] = 'Recalcular utilização de recursos'; +$lng['question']['admin_counters_reallyupdate'] = 'Voce deseja recalcular os recursos utilizados?'; +$lng['panel']['pathDescription'] = 'Se o diretório não existir, será criado automaticamente'; +$lng['mails']['trafficninetypercent']['mailbody'] = 'Querido {NAME},\n\nVocê usou {TRAFFICUSED} MB do seu disponível {TRAFFIC} MB de tráfego.\nisto é mais que 90%.\n\nHonestamente, Equipe SysCP'; +$lng['mails']['trafficninetypercent']['subject'] = 'Atingindo o seu limite de tráfego'; +$lng['admin']['templates']['trafficninetypercent'] = 'Email de notificação para clientes quando atingirem 90% do uso do tráfego'; +$lng['admin']['templates']['TRAFFIC'] = 'Substituído com o tráfego, o que foi atribuído ao cliente.'; +$lng['admin']['templates']['TRAFFICUSED'] = 'Substituído com o tráfego, que foi esgotado pela cliente.'; +$lng['admin']['subcanemaildomain']['never'] = 'Nunca'; +$lng['admin']['subcanemaildomain']['choosableno'] = 'Escolhe, default não'; +$lng['admin']['subcanemaildomain']['choosableyes'] = 'Escolher, default sim'; +$lng['admin']['subcanemaildomain']['always'] = 'Sempre'; +$lng['changepassword']['also_change_webalizer'] = 'Troca a senha das estatísticas do webalizer'; +$lng['serversettings']['mailpwcleartext']['title'] = 'Salva as senhas de usuários sempre criptografia no banco de dados'; +$lng['serversettings']['mailpwcleartext']['description'] = 'Se você selecionar sim, todas as senhas serão guardadas descriptografadas (Poderá ser lido por todos com acesso ao banco de dados ) na tabela mail_users-table. Somente ative essa opção se você realmente precise!'; +$lng['serversettings']['mailpwcleartext']['removelink'] = 'Clique aqui para limpar todas as senhas não criptografadas da tabela
    Você realmente deseja limpar todas as senhas não encriptadas a partir da tabela mail_users? Isto não pode ser revertido!'; +$lng['admin']['configfiles']['overview'] = 'Visão Geral'; +$lng['admin']['configfiles']['wizard'] = 'Assistente'; +$lng['admin']['configfiles']['distribution'] = 'Distribuição'; +$lng['admin']['configfiles']['service'] = 'Serviço'; +$lng['admin']['configfiles']['daemon'] = 'Daemon'; +$lng['admin']['configfiles']['http'] = 'Servidor Web (HTTP)'; +$lng['admin']['configfiles']['dns'] = 'Servidor de Nomes (DNS)'; +$lng['admin']['configfiles']['mail'] = 'Servidor de Emails (POP3/IMAP)'; +$lng['admin']['configfiles']['smtp'] = 'Servidor de Emails (SMTP)'; +$lng['admin']['configfiles']['ftp'] = 'Servidor FTP'; +$lng['admin']['configfiles']['etc'] = 'Outros (Sistema)'; +$lng['admin']['configfiles']['choosedistribution'] = 'Escolha uma distribuição'; +$lng['admin']['configfiles']['chooseservice'] = 'Escolha um serviço'; +$lng['admin']['configfiles']['choosedaemon'] = 'Escolha um daemon'; +$lng['admin']['trafficlastrun'] = 'Cálculo do Último Tráfego'; +$lng['serversettings']['ftpdomain']['title'] = 'Contas FTP @domínio'; +$lng['serversettings']['ftpdomain']['description'] = 'Clientes podem criar contas de FTP user@domíniodocliente?'; +$lng['panel']['back'] = 'Volta'; +$lng['serversettings']['mod_log_sql']['title'] = 'Temporariamente salva os logs no banco de dados'; +$lng['serversettings']['mod_fcgid']['title'] = 'Incluir PHP via mod_fcgid/suexec'; +$lng['serversettings']['mod_fcgid']['description'] = 'Use mod_fcgid/suexec/libnss_mysql to run PHP with the corresponding useraccount.
    This needs a special Apache configuration. All following options are only valid if the module is enabled.'; +$lng['serversettings']['sendalternativemail']['title'] = 'Utilize endereço de e-mail alternativo'; +$lng['serversettings']['sendalternativemail']['description'] = 'Enviar e-mail a senha para um endereço diferente durante uma criação de conta de e-mail'; +$lng['emails']['alternative_emailaddress'] = 'Endereço de E-mail alternativo'; +$lng['mails']['pop_success_alternative']['mailbody'] = 'Oi,\n\nSua conta de email {EMAIL}\nfoi configurada corretamente.\nSua senha é{PASSWORD}.\n\nEmail criado automaticamente\n, Por favor não responda!\n\nCumprimentos, Equipe SysCP.'; +$lng['mails']['pop_success_alternative']['subject'] = 'Conta de email criada com sucesso'; +$lng['admin']['templates']['pop_success_alternative'] = 'Bem-vindo para novas contas e-mail enviado ao endereço alternativo'; +$lng['admin']['templates']['EMAIL_PASSWORD'] = 'Substituído a senha da conta POP3/IMAP.'; +$lng['error']['documentrootexists'] = 'O Diretório "%s" já existe para este usuario. Por favor remova-o e depois tente novamente.'; +$lng['serversettings']['apacheconf_vhost']['title'] = 'Arquivo/Diretório de configurações do Apache Vhost'; +$lng['serversettings']['apacheconf_vhost']['description'] = 'Onde as configuração de Vhost devem ser guardadas? Você pode especificar um arquivo (todos os vhosts em um arquivo) ou diretório (cada vhost com seu próprio arquivo) aqui.'; +$lng['serversettings']['apacheconf_diroptions']['title'] = 'Configuração de diretório do Apache Arquivo/Nome do Diretório.'; +$lng['serversettings']['apacheconf_diroptions']['description'] = 'Quando as opções de configuração de diretório deve ser armazenada? Você poderia especificar um arquivo (todas as opções em um arquivo) ou diretório ( cada opção no seu próprio arquivo).'; +$lng['serversettings']['apacheconf_htpasswddir']['title'] = 'Apache htpasswd dirname'; +$lng['serversettings']['apacheconf_htpasswddir']['description'] = 'Onde deve ser o diretório de arquivos htpasswd?'; +$lng['error']['formtokencompromised'] = 'O Pedido parece estar correto. Por motivos de segurança você está desconectado.'; +$lng['serversettings']['mysql_access_host']['title'] = 'Hosts de Acesso MySQL'; +$lng['serversettings']['mysql_access_host']['description'] = 'Uma lista separada por vírgulas de hosts a partir do qual os utilizadores devem ter a possibilidade de conectar-se ao MySQL-Server.'; +$lng['admin']['ipsandports']['create_listen_statement'] = 'Criar instrução de escuta'; +$lng['admin']['ipsandports']['create_namevirtualhost_statement'] = 'Criar instrução de NameVirtualHost'; +$lng['admin']['ipsandports']['create_vhostcontainer'] = 'Criar vHost-Container'; +$lng['admin']['ipsandports']['create_vhostcontainer_servername_statement'] = 'Criar instrução de ServerName no vHost-Container'; +$lng['admin']['webalizersettings'] = 'Configurações do Webalizer'; +$lng['admin']['webalizer']['normal'] = 'Normal'; +$lng['admin']['webalizer']['quiet'] = 'Quieto'; +$lng['admin']['webalizer']['veryquiet'] = 'Sem Saída'; +$lng['serversettings']['webalizer_quiet']['title'] = 'Saida do Webalizer'; +$lng['serversettings']['webalizer_quiet']['description'] = 'Modo verbose do webalizer'; +$lng['ticket']['admin_email'] = 'root@localhost'; +$lng['ticket']['noreply_email'] = 'tickets@syscp'; +$lng['admin']['ticketsystem'] = 'Tickets de Suporte'; +$lng['menue']['ticket']['ticket'] = 'Tickets'; +$lng['menue']['ticket']['categories'] = 'Cotegorias de Suporte'; +$lng['menue']['ticket']['archive'] = 'Arquivo de Tickets'; +$lng['ticket']['description'] = 'Aqui você pode fazer perguntas ao administrador responsável'; +$lng['ticket']['ticket_new'] = 'Abrir um novo ticket'; +$lng['ticket']['ticket_reply'] = 'Responder um ticket'; +$lng['ticket']['ticket_reopen'] = 'Re-abrir um ticket'; +$lng['ticket']['ticket_newcateory'] = 'Recriar uma categoria'; +$lng['ticket']['ticket_editcateory'] = 'Editar uma categoria'; +$lng['ticket']['ticket_view'] = 'Ver Ticket'; +$lng['ticket']['ticketcount'] = 'Tickets'; +$lng['ticket']['ticket_answers'] = 'Respostas'; +$lng['ticket']['lastchange'] = 'Última troca'; +$lng['ticket']['subject'] = 'Assunto'; +$lng['ticket']['status'] = 'Status'; +$lng['ticket']['lastreplier'] = 'Último que respondeu'; +$lng['ticket']['priority'] = 'Prioridade'; +$lng['ticket']['low'] = 'Baixa'; +$lng['ticket']['normal'] = 'Normal'; +$lng['ticket']['high'] = 'Alta'; +$lng['ticket']['unf_low'] = 'Baixa'; +$lng['ticket']['unf_normal'] = 'Normal'; +$lng['ticket']['unf_high'] = 'Alta'; +$lng['ticket']['lastchange_from'] = 'De data (dd.mm.aaaa)'; +$lng['ticket']['lastchange_to'] = 'Até data (dd.mm.aaaa)'; +$lng['ticket']['category'] = 'Categoria'; +$lng['ticket']['no_cat'] = 'Nenhuma'; +$lng['ticket']['message'] = 'Mensagem'; +$lng['ticket']['show'] = 'Visualizar'; +$lng['ticket']['answer'] = 'Responder um ticket'; +$lng['ticket']['close'] = 'Fechar'; +$lng['ticket']['reopen'] = 'Re-abrir'; +$lng['ticket']['archive'] = 'Arquivo'; +$lng['ticket']['ticket_delete'] = 'Deletar Ticket'; +$lng['ticket']['lastarchived'] = 'Tickets recém arquivados'; +$lng['ticket']['archivedtime'] = 'Arquivado'; +$lng['ticket']['open'] = 'Aberto'; +$lng['ticket']['wait_reply'] = 'Esperando resposta'; +$lng['ticket']['replied'] = 'Respondido'; +$lng['ticket']['closed'] = 'Fechado'; +$lng['ticket']['staff'] = 'Equipe'; +$lng['ticket']['customer'] = 'Cliente'; +$lng['ticket']['old_tickets'] = 'Ticket de mensagens'; +$lng['ticket']['search'] = 'Procurar arquivo'; +$lng['ticket']['nocustomer'] = 'Sem escolha'; +$lng['ticket']['archivesearch'] = 'Arquivar resultados de busca'; +$lng['ticket']['noresults'] = 'Nenhum ticket encontrado'; +$lng['ticket']['notmorethanxopentickets'] = 'Devido a proteção anti-spam não se pode ter mais de %s bilhetes abertos'; +$lng['ticket']['supportstatus'] = 'Status de Suporte'; +$lng['ticket']['supportavailable'] = 'Nossos engenheiros de suporte estão disponíveis e prontos a ajudar.'; +$lng['ticket']['supportnotavailable'] = 'Nossos engenheiros de suporte não estão actualmente disponíveis'; +$lng['admin']['templates']['ticket'] = 'Emails de notificação para tickets de suporte'; +$lng['admin']['templates']['SUBJECT'] = 'Substituído por um assunto de ticket de suporte'; +$lng['admin']['templates']['new_ticket_for_customer'] = 'Informação do Cliente de que de que o Ticket foi gerado.'; +$lng['admin']['templates']['new_ticket_by_customer'] = 'Notificação do Admin para um ticket aberto por um cliente'; +$lng['admin']['templates']['new_reply_ticket_by_customer'] = 'Notificação do Admin para um ticket respondido por um cliente'; +$lng['admin']['templates']['new_ticket_by_staff'] = 'Notificação de cliente para um ticket aberto pela administração'; +$lng['admin']['templates']['new_reply_ticket_by_staff'] = 'Notificação do cliente para um ticket respondido pela administração'; +$lng['mails']['new_ticket_for_customer']['subject'] = 'Seu ticket de Suporte foi Enviado'; +$lng['mails']['new_ticket_by_customer']['subject'] = 'Novo pedido de Suporte'; +$lng['mails']['new_reply_ticket_by_customer']['mailbody'] = 'Oi admin,\n\no ticket de suporte "{SUBJECT}" foi respondido para o cliente.\n\nPor favor logue para abrir o ticket.\n\Obrigado,\nequipe SysCP'; +$lng['mails']['new_reply_ticket_by_customer']['subject'] = 'Nova resposta para um ticket de supote'; +$lng['mails']['new_ticket_by_staff']['subject'] = 'Novo ticket enviado'; +$lng['mails']['new_reply_ticket_by_staff']['mailbody'] = 'Oi {FIRSTNAME} {NAME},\n\o ticket de suporte com o assunto "{SUBJECT}" foi respondido pelos seus administradores.\n\nPor favor logue para abrir esse ticket.\n\nObrigado,\nequipe SysCP'; +$lng['mails']['new_reply_ticket_by_staff']['subject'] = 'Nova resposta para um ticket de supote'; +$lng['question']['ticket_reallyclose'] = 'Você deseja fechar o ticket"%s"?'; +$lng['question']['ticket_reallydelete'] = 'Você deseja apagar o ticket"%s"?'; +$lng['question']['ticket_reallydeletecat'] = 'Você deseja deletar a categoria "%s"?'; +$lng['question']['ticket_reallyarchive'] = 'Você deseja mover o ticket "%s" para o arquivo?'; +$lng['error']['mysubject'] = '\'' . $lng['ticket']['subject'] . '\''; +$lng['error']['mymessage'] = '\'' . $lng['ticket']['message'] . '\''; +$lng['error']['mycategory'] = '\'' . $lng['ticket']['category'] . '\''; +$lng['error']['nomoreticketsavailable'] = 'Você já utilizou todos seus tickets disponíveis. Por favor contacte seu administrador'; +$lng['error']['nocustomerforticket'] = 'Não pode criar Tickets sem Clientes'; +$lng['error']['categoryhastickets'] = 'A categoria ainda tem tikets na mesma.
    Por favor elimine os bilhetes para eliminar a categoria'; +$lng['error']['notmorethanxopentickets'] = $lng['ticket']['notmorethanxopentickets']; +$lng['admin']['ticketsettings'] = 'Configurações de Ticket de Suporte'; +$lng['admin']['archivelastrun'] = 'Último arquivamento de ticket'; +$lng['serversettings']['ticket']['noreply_email']['title'] = 'Não responder endereço de email'; +$lng['serversettings']['ticket']['noreply_email']['description'] = 'O endereço de envio para tickets de suporte, normalmente é no-reply@domain.com'; +$lng['serversettings']['ticket']['worktime_begin']['title'] = 'Iniciado tempo de suporte (hh:mm)'; +$lng['serversettings']['ticket']['worktime_begin']['description'] = 'Início quando o suporte estiver disponível'; +$lng['serversettings']['ticket']['worktime_end']['title'] = 'Fim do tempo de suporte (hh:mm)'; +$lng['serversettings']['ticket']['worktime_end']['description'] = 'Fim do tempo quando o suporte estiver disponível'; +$lng['serversettings']['ticket']['worktime_sat'] = 'Suporte disponível nos sábados?'; +$lng['serversettings']['ticket']['worktime_sun'] = 'Suporte disponível nos domingos?'; +$lng['serversettings']['ticket']['worktime_all']['title'] = 'Sem tempo limite para suporte'; +$lng['serversettings']['ticket']['worktime_all']['description'] = 'Se "Sim" para opção para iniciar e finalizar vai ser substituída'; +$lng['serversettings']['ticket']['archiving_days'] = 'Depois de quantoas dias tickets fechado são arquivados?'; +$lng['customer']['tickets'] = 'Tickets de Suporte'; +$lng['admin']['domain_nocustomeraddingavailable'] = 'Não adicionar um domínio corretamente. Você primeiro precisa adicionar um cliente.'; +$lng['serversettings']['ticket']['enable'] = 'Ativar tickets de sistema'; +$lng['serversettings']['ticket']['concurrentlyopen'] = 'Quantos tickes poderam ser abertos ao mesmo tempo?'; +$lng['error']['norepymailiswrong'] = 'O "Endereço (Noreply)" está errado. Somente um endereço válido é aceito.'; +$lng['error']['tadminmailiswrong'] = 'O "Endereço de admin " está errado. Somente um endereço válido é aceito.'; +$lng['ticket']['awaitingticketreply'] = 'Você tem %s tickes de suporte não respondido(s)'; +$lng['serversettings']['ticket']['noreply_name'] = 'E-mail do remetente do Ticket'; +$lng['serversettings']['mod_fcgid']['configdir']['title'] = 'Diretório de configuração'; +$lng['serversettings']['mod_fcgid']['configdir']['description'] = 'Aonde todos os arquivos de configuração do fcgid vão ser guardados? Se você não utiliza um binário compilado, está é uma situação normal, deve estar dentro de /var/www/'; +$lng['serversettings']['mod_fcgid']['tmpdir']['title'] = 'Diretório Temporário'; +$lng['serversettings']['ticket']['reset_cycle']['title'] = 'Resetar ciclo de tickers usados'; +$lng['serversettings']['ticket']['reset_cycle']['description'] = 'Resetar tickets usados por clientes'; +$lng['admin']['tickets']['daily'] = 'Diariamente'; +$lng['admin']['tickets']['weekly'] = 'Semanalmente'; +$lng['admin']['tickets']['monthly'] = 'Mensalmente'; +$lng['admin']['tickets']['yearly'] = 'Anualmente'; +$lng['error']['ticketresetcycleiswrong'] = 'O ciclo de resetes de ticket pode ser "diário", "semanal", "mensal" or "anual".'; +$lng['menue']['traffic']['traffic'] = 'Tráfego'; +$lng['menue']['traffic']['current'] = 'Mês corrente'; +$lng['traffic']['month'] = "Mês"; +$lng['traffic']['day'] = "Diariamente"; +$lng['traffic']['months'][1] = "Janeiro"; +$lng['traffic']['months'][2] = "Fevereiro"; +$lng['traffic']['months'][3] = "Março"; +$lng['traffic']['months'][4] = "Abril"; +$lng['traffic']['months'][5] = "Maio"; +$lng['traffic']['months'][6] = "Junho"; +$lng['traffic']['months'][7] = "Julho"; +$lng['traffic']['months'][8] = "Agosto"; +$lng['traffic']['months'][9] = "Setembro"; +$lng['traffic']['months'][10] = "Outubro"; +$lng['traffic']['months'][11] = "Novembro"; +$lng['traffic']['months'][12] = "Dezembro"; +$lng['traffic']['mb'] = "Tráfego (MB)"; +$lng['traffic']['distribution'] = 'FTP | HTTP | E-Mail'; +$lng['traffic']['sumhttp'] = 'Resumo Tráfego de HTTP em'; +$lng['traffic']['sumftp'] = 'Resumo Tráfego de FTP em'; +$lng['traffic']['summail'] = 'Resumo Tráfego de HTTP em'; +$lng['serversettings']['no_robots']['title'] = 'Aceitar robôs de procura na index de seu SysCP'; +$lng['admin']['loggersettings'] = 'Configurações de Logs'; +$lng['serversettings']['logger']['enable'] = 'Habilitar/Desabilitar Logs'; +$lng['serversettings']['logger']['severity'] = 'Nível de Logs'; +$lng['admin']['logger']['normal'] = 'normal'; +$lng['admin']['logger']['paranoid'] = 'paranóico'; +$lng['serversettings']['logger']['types']['title'] = 'Tipos de Log(s)'; +$lng['serversettings']['logger']['types']['description'] = 'Especificar tipos de logs separados por vírgula.
    Tipos de lógs disponíveis: syslog, file, mysql'; +$lng['serversettings']['logger']['logfile'] = 'Caminho do Arquivo de Log incluindo nome de arquivo'; +$lng['error']['logerror'] = 'Log-Erro: %s'; +$lng['serversettings']['logger']['logcron'] = 'Logar tarefas do cron'; +$lng['question']['logger_reallytruncate'] = 'Você realmente deseja dividir a tabela "%s"?'; +$lng['admin']['loggersystem'] = 'Systema-Logging'; +$lng['menue']['logger']['logger'] = 'Systema-Logging'; +$lng['logger']['date'] = 'Data'; +$lng['logger']['type'] = 'Tipo'; +$lng['logger']['action'] = 'Ação'; +$lng['logger']['user'] = 'Usuário'; +$lng['logger']['truncate'] = 'Log Vazio'; +$lng['serversettings']['ssl']['use_ssl'] = 'Usar SSL'; +$lng['serversettings']['ssl']['ssl_cert_file'] = 'Aonde estão localizados os certificados'; +$lng['serversettings']['ssl']['openssl_cnf'] = 'Padrão para criar o arquivo de certificado'; +$lng['panel']['reseller'] = 'Revenda'; +$lng['panel']['admin'] = 'Administrador'; +$lng['panel']['customer'] = 'Cliente(s)'; +$lng['error']['nomessagetosend'] = 'Você não entrou com uma mensagem'; +$lng['error']['noreceipientsgiven'] = 'Você não especificou um destinatário'; +$lng['admin']['emaildomain'] = 'Domínio de Email'; +$lng['admin']['email_only'] = 'Somente Email?'; +$lng['admin']['wwwserveralias'] = 'Adicionar um "www." ServerAlias'; +$lng['admin']['ipsandports']['enable_ssl'] = 'Esta é uma porta SSL?'; +$lng['admin']['ipsandports']['ssl_cert_file'] = 'Caminho para o certificado SSL'; +$lng['panel']['send'] = 'Enviar'; +$lng['admin']['subject'] = 'Assunto'; +$lng['admin']['receipient'] = 'Destinatário'; +$lng['admin']['message'] = 'Escrever uma mensagem'; +$lng['admin']['text'] = 'Mensagem'; +$lng['menu']['message'] = 'Mensagens'; +$lng['error']['errorsendingmail'] = 'A mensagem para "%s" falhou'; +$lng['error']['cannotreaddir'] = 'Não é possível ler o diretório "%s"'; +$lng['message']['success'] = 'Mensagens enviadas para %s destinatários com sucesso'; +$lng['message']['noreceipients'] = 'Email não enviado porque não tem destinatário no banco de dados'; +$lng['admin']['sslsettings'] = 'Configuração de SSL'; +$lng['cronjobs']['notyetrun'] = 'Ainda não está rodando'; +$lng['install']['servername_should_be_fqdn'] = 'O nome do servidor deve ser a FQDN e não um endereço de IP'; +$lng['serversettings']['default_vhostconf']['title'] = 'Configuração de Vhost padrão'; +$lng['serversettings']['default_vhostconf']['description'] = 'O conteúdo deste campo será incluído a cada novo vhost criado. Atenção: O código será checado para algum erro. Se contiver erros, o apache pode não iniciar mais'; +$lng['emails']['quota'] = 'Quota'; +$lng['emails']['noquota'] = 'Sem quota'; +$lng['emails']['updatequota'] = 'Atualizar'; +$lng['serversettings']['mail_quota']['title'] = 'Quota de Email'; +$lng['serversettings']['mail_quota']['description'] = 'Quota default para novas caixas criadas'; +$lng['serversettings']['mail_quota_enabled']['title'] = 'Usar quota para clientes'; +$lng['serversettings']['mail_quota_enabled']['description'] = 'Ative para usar cotas em caixas de email. Padrão é Não visto que requer uma configuração especial.'; +$lng['serversettings']['mail_quota_enabled']['removelink'] = 'Clique aqui para limpar todas as quotas para as contas de email.'; +$lng['question']['admin_quotas_reallywipe'] = 'Você realmente deseja limpar todas as quotas na tabela mail_users? Isto não pode ser revertido'; +$lng['error']['vmailquotawrong'] = 'A tamanho da quota deve ser entre 1 e 999'; +$lng['customer']['email_quota'] = 'E-mail Quota'; +$lng['customer']['email_imap'] = 'E-mail IMAP'; +$lng['customer']['email_pop3'] = 'E-mail POP3'; +$lng['customer']['mail_quota'] = 'Quota de Email'; +$lng['error']['invalidip'] = 'Endereço de IP Inválido: %s'; +$lng['serversettings']['decimal_places'] = 'Número de casas decimais no tráfego / espaço de paginas web'; +$lng['admin']['dkimsettings'] = 'Configurações de Chave de Domínios'; +$lng['dkim']['dkim_prefix']['title'] = 'Prefixo'; +$lng['dkim']['dkim_prefix']['description'] = 'Por favor, especifique o caminho para o os arquivos DKIM RSA, bem como para os arquivos de configuração para o plugin Milter'; +$lng['dkim']['dkim_domains']['title'] = 'Nome de arquivo de domínios'; +$lng['dkim']['dkim_domains']['description'] = 'Nome do Arquivo dos Domínios do DKIM, parâmetro especificado na configuração do dkim-Milter'; +$lng['dkim']['dkim_dkimkeys']['title'] = 'Nome de arquivo de chaves'; +$lng['dkim']['dkim_dkimkeys']['description'] = 'Nome do ArquivoDKIM KeyList do parâmetro especificado na configuração dkim-Milter'; +$lng['dkim']['dkimrestart_command']['title'] = 'Comando para reiniciar o Milter'; +$lng['dkim']['dkimrestart_command']['description'] = 'Por favor especifique um comando para reiniciar o DKIM Milter'; +$lng['admin']['caneditphpsettings'] = 'Pode alterar as configurações PHP relacionadas com o domínio?'; +$lng['admin']['allips'] = 'Todos os IPs'; +$lng['panel']['nosslipsavailable'] = 'Não existem atualmente IP SSL / Porta para este servidor.'; +$lng['ticket']['by'] = 'Por'; +$lng['dkim']['use_dkim']['title'] = 'Ativar suporte para DKIM?'; +$lng['dkim']['use_dkim']['description'] = 'Você deseja usar o sistema de chaves de domínio (DKIM) ?'; +$lng['error']['invalidmysqlhost'] = 'Endereço de servidor MySQL inválido: %s'; +$lng['error']['cannotuseawstatsandwebalizeratonetime'] = 'Você não pode ativar Webalizer e Awstats ao mesmo tempo, por favor, escolha uma delas'; +$lng['serversettings']['webalizer_enabled'] = 'Ativar estatísticas webalizer'; +$lng['serversettings']['awstats_enabled'] = 'Ativar estatísticas awstats'; +$lng['admin']['awstatssettings'] = 'Configurações Awtats'; +$lng['serversettings']['awstats_domain_file']['title'] = 'Awstats diretório de arquivos do dominio'; +$lng['serversettings']['awstats_model_file']['title'] = 'Modelo de arquivo Awstats'; +$lng['admin']['domain_dns_settings'] = 'Configurações de DNS'; +$lng['dns']['destinationip'] = 'Domínio IP'; +$lng['dns']['standardip'] = 'IP padrão do servidor'; +$lng['dns']['a_record'] = 'Gravar-A(Opcional IPV6)'; +$lng['dns']['cname_record'] = 'Gravar-CNAME'; +$lng['dns']['mxrecords'] = 'Definir entradas MX'; +$lng['dns']['standardmx'] = 'Servidor MX padrão'; +$lng['dns']['mxconfig'] = 'Registros MX personalizados'; +$lng['dns']['priority10'] = 'Prioridade 10'; +$lng['dns']['priority20'] = 'Prioridade 20'; +$lng['dns']['txtrecords'] = 'Difinir entradas TXT'; +$lng['dns']['txtexample'] = 'Exemplo (Entrada-SPF):
    v=spf1 ip4:xxx.xxx.xx.0/23 -all'; +$lng['serversettings']['selfdns']['title'] = 'Configurações DNS-Domiio personalizadas'; +$lng['serversettings']['selfdnscustomer']['title'] = 'Aceita clientes para editar configurações de DNS'; +$lng['admin']['activated'] = 'Ativado'; +$lng['admin']['statisticsettings'] = 'Configurações de Estatísticas'; +$lng['admin']['or'] = 'ou'; +$lng['serversettings']['unix_names']['title'] = 'Usar nomes compatíveis com UNIX'; +$lng['serversettings']['unix_names']['description'] = 'Aceita voce usar - and _ em nomes de usuários se Noestiver marcado'; +$lng['error']['cannotwritetologfile'] = 'Não pode abrir arquivo de log %s para escrita'; +$lng['admin']['sysload'] = 'Carga do Sistema'; +$lng['admin']['noloadavailable'] = 'Não disponível'; +$lng['admin']['nouptimeavailable'] = 'Não disponível'; +$lng['panel']['backtooverview'] = 'Voltar para Visão Geral'; +$lng['admin']['nosubject'] = '(Sem Assunto)'; +$lng['admin']['configfiles']['statistics'] = 'Estatísticas'; +$lng['login']['forgotpwd'] = 'Perdeu sua senha?'; +$lng['login']['presend'] = 'Resetar senha'; +$lng['login']['email'] = 'Endereço de E-mail'; +$lng['login']['remind'] = 'Resetar minha senha'; +$lng['login']['usernotfound'] = 'Úsuario não encontrado'; +$lng['pwdreminder']['subject'] = 'SysCP - Reset de Senha'; +$lng['pwdreminder']['body'] = 'Oi %s,\n\nsua senha do syscp foi resetada!\nA nova senha é: %p\n\nObrigado,\nequipe SysCP'; +$lng['pwdreminder']['success'] = 'Redefinição de senha com sucesso.
    Você agora deve receber um e-mail com sua nova senha.'; +$lng['serversettings']['allow_password_reset']['title'] = 'Aceita reset de senha por clientes'; +$lng['pwdreminder']['notallowed'] = 'Reset de senhas está desativado'; +$lng['serversettings']['awstats_path']['title'] = 'Caminho para pasta awstats cgi-bin'; +$lng['serversettings']['awstats_path']['description'] = 'Exemplo: /usr/share/webapps/awstats/6.1/webroot/cgi-bin/'; +$lng['serversettings']['awstats_updateall_command']['title'] = 'Caminho para "awstats_updateall.pl"'; +$lng['serversettings']['awstats_updateall_command']['description'] = 'Exemplo: /usr/bin/awstats_updateall.pl'; +$lng['customer']['title'] = 'Título'; +$lng['customer']['country'] = 'País'; +$lng['panel']['dateformat'] = 'AAAA-MM-DD'; +$lng['panel']['dateformat_function'] = 'A-m-d'; +$lng['panel']['timeformat_function'] = 'H:i:S'; +$lng['panel']['default'] = 'Padrão'; +$lng['panel']['never'] = 'Nunca'; +$lng['panel']['active'] = 'Ativo'; +$lng['panel']['please_choose'] = 'Por favor escolha'; +$lng['panel']['intervalfee_type']['y'] = 'Anos'; +$lng['panel']['intervalfee_type']['m'] = 'Meses'; +$lng['panel']['intervalfee_type']['d'] = 'Dias'; +$lng['panel']['intervalfee_type_one']['y'] = 'Ano'; +$lng['panel']['intervalfee_type_one']['m'] = 'Mes'; +$lng['panel']['intervalfee_type_one']['d'] = 'Dia'; +$lng['panel']['service_still_active'] = 'Serviço ainda ativo'; +$lng['panel']['allow_modifications'] = 'Aceita alteraçoes'; +$lng['domains']['add_date'] = 'Adicionado no SysCP'; +$lng['domains']['registration_date'] = 'Adicionado no Registro'; +$lng['domains']['topleveldomain'] = 'Top-Level-Domain'; +$lng['admin']['accountdata'] = 'Data da Conta'; +$lng['admin']['contactdata'] = 'Data de Contato'; +$lng['admin']['servicedata'] = 'Data de Serviço'; +$lng['admin']['billingdata'] = 'Data de Faturamento'; +$lng['admin']['invoicedata'] = 'Data da Fatura'; +$lng['customer']['taxid'] = 'ID de Taxa'; +$lng['customer']['calc_tax'] = 'Calcular Taxa'; +$lng['customer']['create_contract'] = 'Criar contrato'; +$lng['customer']['contract_date'] = 'Data de contrato'; +$lng['customer']['contract_number'] = 'Descrição/Número de contrato'; +$lng['customer']['additional_service_description'] = 'Descrição adicional de serviço'; +$lng['customer']['contract_details'] = 'Detalhes do contrato'; +$lng['customer']['included_domains'] = 'Domínios Incluídos'; +$lng['customer']['additional_traffic'] = 'Tráfego Adicional'; +$lng['customer']['additional_diskspace'] = 'Espaco Web Adicional'; +$lng['customer']['term_of_payment'] = 'Termo de Pagamento (dias)'; +$lng['customer']['payment_every'] = 'Pagamento todo'; +$lng['customer']['payment_method'] = 'Método de Pagamento'; +$lng['admin']['customer_categories_once'] = 'Incluir configurações de taxas de clientes'; +$lng['admin']['customer_categories_period'] = 'Incluir intervalo de tavas de clientes'; +$lng['customer']['bankaccount_holder'] = 'Proprietário da conta'; +$lng['customer']['bankaccount_number'] = 'Número da conta'; +$lng['customer']['bankaccount_blz'] = 'Número da agência'; +$lng['customer']['bankaccount_bank'] = 'Nome do banco'; +$lng['service']['quantity'] = 'Quantidade'; +$lng['service']['interval_fee'] = 'Pausa de TAXA'; +$lng['service']['interval_length'] = 'Pausa de Tempo'; +$lng['service']['interval_payment'] = 'Pausa de Pagamento'; +$lng['service']['interval_payment_prepaid'] = 'Pré Pago'; +$lng['service']['interval_payment_postpaid'] = 'Pós Pago'; +$lng['service']['setup_fee'] = 'Configurar Taxa'; +$lng['service']['active'] = 'Ativa Serviço'; +$lng['service']['start_date'] = 'Activado desde'; +$lng['service']['end_date'] = 'Inativo desde'; +$lng['service']['lastinvoiced_date'] = 'Última fatura'; +$lng['service']['valid_from'] = 'Válido de'; +$lng['service']['valid_to'] = 'Válido para'; +$lng['invoice']['invoicenumbertemplate'] = 'H-{ano}/{número}'; +$lng['invoice']['sender'] = ''; +$lng['invoice']['invoice'] = 'Fatura'; +$lng['invoice']['cancellation'] = 'Fatura Cancelada'; +$lng['invoice']['reminder'] = 'Relembrar'; +$lng['invoice']['preview'] = 'Visualizar'; +$lng['invoice']['dateheader'] = 'Cidade, %s'; +$lng['invoice']['number'] = 'Número de fatura'; +$lng['invoice']['contract_number'] = 'Número de contrato'; +$lng['invoice']['contract_details'] = 'Detalhes de contrato'; +$lng['invoice']['contract_details_template'] = 'pacotes de hosting de acordo com o contrato de %s com %s MB espaço web, %s ' . chr(128) . ' por %s GB de espaço adicional, %s GB tráfego, %s ' . chr(128) . ' por %s GB espaço adicional; %s domínios incluidos; pagamento por intervalo %s %s.'; +$lng['invoice']['period'] = 'Período de faturamento'; +$lng['invoice']['header'][0] = 'Pos'; +$lng['invoice']['header'][1] = 'Descrição'; +$lng['invoice']['header'][2] = 'Período'; +$lng['invoice']['header'][3] = 'Net [' . chr(128) . ']'; +$lng['invoice']['header'][4] = 'Tax [' . chr(128) . ']'; +$lng['invoice']['header'][5] = '%'; +$lng['invoice']['header'][6] = 'Total [' . chr(128) . ']'; +$lng['invoice']['subtotal'] = 'Subtotal'; +$lng['invoice']['tax'] = 'Taxa (%s%%)'; +$lng['invoice']['credit_note'] = 'Nota de crédito'; +$lng['invoice']['total'] = 'Total'; +$lng['invoice']['payment_methods'][0] = 'Rechnungsbetrag zahlbar innerhalb von %s Tagen.' . "\n" . 'Da uns noch keine Lastschrift-Einzugsermächtigung von Ihnen vorliegt, bitten wir Sie die Rechnung per Überweisung auf unser Konto zu begleichen. Falls auch Sie am Lastschriftverfahren teilnehmen möchten, füllen Sie bitte das angefügte Formular aus und senden Sie es per Post an uns zurück.'; +$lng['invoice']['payment_methods'][1] = 'The invoiceamount will be charged in the next days of your account at %s, Customernumer %s, Bank Code %s via direct debit.'; +$lng['invoice']['tax_text']['line'] = 'VAT-IdNr. %s: %s' . "\n"; +$lng['invoice']['tax_text']['client'] = 'do cliente'; +$lng['invoice']['state'] = 'Estado'; +$lng['invoice']['states'][CONST_BILLING_INVOICESTATE_INVOICED] = 'Faturado'; +$lng['invoice']['states'][CONST_BILLING_INVOICESTATE_SENT] = 'Enviado'; +$lng['invoice']['states'][CONST_BILLING_INVOICESTATE_PAID] = 'Pago'; +$lng['invoice']['states'][CONST_BILLING_INVOICESTATE_CANCELLED_NO_REINVOICE] = 'Cancelado (Sem Refaturar)'; +$lng['invoice']['states'][CONST_BILLING_INVOICESTATE_CANCELLED_REINVOICE_WITHOUT_CREDIT_NOTE] = 'Cancelado (Refaturado, sem notas de crédito)'; +$lng['invoice']['states'][CONST_BILLING_INVOICESTATE_CANCELLED_REINVOICE_WITH_CREDIT_NOTE] = 'Cancelado (Refaturado, com notas de crédito)'; +$lng['invoice']['states'][CONST_BILLING_INVOICESTATE_CANCELLED_REINVOICED] = 'Cancelado (Fefaturado)'; +$lng['invoice']['state_change'] = 'Último Estado Alterado'; +$lng['invoice']['change_state'] = 'Trocar estado de fatura'; +$lng['invoice']['total_fee'] = 'w/o tax'; +$lng['invoice']['total_fee_taxed'] = 'Total'; +$lng['invoice']['fix'] = 'Corrigir Fatura'; +$lng['invoice']['pdf'] = 'Criar PDF'; +$lng['invoice']['create_reminder'] = 'Criar lembrete'; +$lng['invoice']['changelog'] = 'Log de alterações'; +$lng['invoice']['deleted_line'] = 'A linha foi apagada'; +$lng['invoice']['original_value'] = 'Valor Original'; +$lng['invoice']['page_footer'] = 'Página %s de %s'; +$lng['billing']['billing'] = 'Faturamento'; +$lng['billing']['invoices'] = 'Faturas'; +$lng['billing']['invoices_admin'] = 'Faturas (Admins)'; +$lng['billing']['openinvoices'] = 'Faturas Abertas'; +$lng['billing']['openinvoices_admin'] = 'Faturas Abertas (Admins)'; +$lng['billing']['cacheinvoicefees'] = 'Atualizar lista'; +$lng['billing']['invoice'] = 'Faturas'; +$lng['billing']['invoice_date'] = 'Data de fatura'; +$lng['billing']['invoice_fee'] = 'Pagamento de fatura'; +$lng['billing']['preview'] = 'Visualizar'; +$lng['billing']['caption'] = 'Título'; +$lng['billing']['number'] = 'Número de Fatura'; +$lng['billing']['caption_setup'] = 'Título para taxa'; +$lng['billing']['caption_interval'] = 'Título para intervalo de taxa'; +$lng['billing']['template'] = 'Modelo'; +$lng['billing']['interval'] = 'Intervalo'; +$lng['billing']['other'] = 'Outros Serviços'; +$lng['billing']['other_add'] = 'Adicionar Outro Serviço'; +$lng['billing']['other_edit'] = 'Editar Outro Serviço'; +$lng['billing']['taxclassesnrates'] = 'Classes e Níveis de taxa'; +$lng['billing']['taxclass'] = 'Classe de Taxa'; +$lng['billing']['taxrate'] = 'Nivel de Taxa'; +$lng['billing']['taxrate_add'] = 'Adicionar Taxa'; +$lng['billing']['taxrate_edit'] = 'Editar Taxa'; +$lng['billing']['domains_templates'] = 'Modelos de Domínios'; +$lng['billing']['domains_templates_add'] = 'Adicionar modelo de domínio'; +$lng['billing']['domains_templates_edit'] = 'Editar modelo de domínio'; +$lng['billing']['other_templates'] = 'Outros modelos de serviços'; +$lng['billing']['other_templates_add'] = 'Adicionar outro modelo de serviço'; +$lng['billing']['other_templates_edit'] = 'Editar outro modelo de serviço'; +$lng['billing']['categories']['hosting_caption'] = 'Hospedagem'; +$lng['billing']['categories']['hosting_rowcaption_setup'] = 'Contrato de Hospedagem - Configurar Pagamento'; +$lng['billing']['categories']['hosting_rowcaption_interval'] = 'Contrato de Hospedagem'; +$lng['billing']['categories']['hosting_rowcaption_setup_withloginname'] = 'Contrato de Hospedagem ({loginname}) - Configuração de Taxa'; +$lng['billing']['categories']['hosting_rowcaption_interval_withloginname'] = 'Contrato de Hospedagem ({loginname})'; +$lng['billing']['categories']['domains_caption'] = 'Domínios'; +$lng['billing']['categories']['domains_rowcaption_setup'] = 'Domínio {domain} - Configuração de Taxa'; +$lng['billing']['categories']['domains_rowcaption_interval'] = 'Domínio {domain}'; +$lng['billing']['categories']['traffic_caption'] = 'Tráfego'; +$lng['billing']['categories']['traffic_rowcaption_setup'] = $lng['billing']['categories']['traffic_rowcaption_interval'] = 'Tráfego Usado: {traffic_total}/{traffic_included} GB'; +$lng['billing']['categories']['traffic_rowcaption_setup_unlimited'] = $lng['billing']['categories']['traffic_rowcaption_interval_unlimited'] = 'Tráfego Usado: {traffic_total}/' . $lng['customer']['unlimited'] . ' GB'; +$lng['billing']['categories']['other_caption'] = 'Outro'; +$lng['billing']['categories']['other_rowcaption_setup'] = $lng['billing']['categories']['other_rowcaption_interval'] = 'Outro'; +$lng['billing']['categories']['diskspace_caption'] = 'Espaço Web'; +$lng['billing']['categories']['diskspace_rowcaption_interval'] = 'Espaço WEB usado: {diskspace_total}/{diskspace_included} GB'; +$lng['billing']['categories']['diskspace_rowcaption_interval_unlimited'] = 'Espaço Web usado: {diskspace_total}/' . $lng['customer']['unlimited'] . ' GB'; +$lng['question']['billing_invoice_row_reallydelete'] = 'Você realmente deseja excluir este item da fatura?'; +$lng['question']['billing_invoice_row_reallyreset'] = 'Você realmente deseja cancelar todas as modificações feitas nesta fatura?'; +$lng['question']['billing_invoice_row_reallyreset_key'] = 'Você realmente deseja desfazer as alterações feitas nesta linha?'; +$lng['question']['billing_domains_template_reallydelete'] = 'Voce deseja deletar o template %s'; +$lng['question']['billing_other_template_reallydelete'] = 'Voce deseja deletar o template %s'; +$lng['question']['billing_other_service_reallydelete'] = 'Voce deseja deletar este serviço?'; +$lng['question']['billing_taxrate_reallydelete'] = 'Você realmente deseja excluir esta taxrate?'; +$lng['serversettings']['allow_password_reset']['description'] = 'Os clientes podem redefinir sua senha e serão enviadas para seu endereço de e-mail'; +$lng['serversettings']['allow_password_reset_admin']['title'] = 'Ativa reset de senhas pelos administradores'; +$lng['serversettings']['allow_password_reset_admin']['description'] = 'Admins / Revendedor pode redefinir sua senha e a nova senha será enviada para seu endereço de e-mail'; +$lng['admin']['edit_billingdata'] = 'Pode editar data de faturamento'; +$lng['error']['service_still_active'] = 'Serviço continua ativo.'; +$lng['admin']['billingsettings'] = 'Configurações de faturamento'; +$lng['serversettings']['billing']['activate_billing']['title'] = 'Ativar faturamento'; +$lng['serversettings']['billing']['activate_billing']['description'] = 'Aqui você pode ativar / desativar o sistema de faturamento a nível global.'; +$lng['serversettings']['billing']['highlight_inactive']['title'] = 'Inativos destaque de faturamentos'; +$lng['serversettings']['billing']['highlight_inactive']['description'] = 'Caso as linhas, cujo faturamento não estiver ativo, será destacada?'; +$lng['serversettings']['billing']['invoicenumber_count']['title'] = 'Numero da Fatura Atual'; +$lng['serversettings']['billing']['invoicenumber_count']['description'] = 'Este é o número fixo de faturas. Mudanças podem resultar em problemas com o contador de faturas.'; +$lng['emails']['quota_type']['byte'] = 'B'; +$lng['emails']['quota_type']['kilobyte'] = 'KB'; +$lng['emails']['quota_type']['megabyte'] = 'MB'; +$lng['emails']['quota_type']['gigabyte'] = 'GB'; +$lng['emails']['quota_type']['terabyte'] = 'TB'; +$lng['emails']['quota_type']['petabyte'] = 'PB'; +$lng['panel']['not_supported'] = 'Não suportado em:'; +$lng['menue']['email']['autoresponder'] = 'Auto-Responder'; +$lng['autoresponder']['active'] = 'Ativar'; +$lng['autoresponder']['autoresponder_add'] = 'Adicionar Auto-Responder'; +$lng['autoresponder']['autoresponder_edit'] = 'Edita Auto-Responder'; +$lng['autoresponder']['autoresponder_new'] = 'Criar novo Auto-Responder'; +$lng['autoresponder']['subject'] = 'Assunto'; +$lng['autoresponder']['message'] = 'Mensagem'; +$lng['autoresponder']['account'] = 'Aconta'; +$lng['autoresponder']['sender'] = 'Remetente'; +$lng['question']['autoresponderdelete'] = 'Você deseja apagar o auto-responder?'; +$lng['error']['noemailaccount'] = 'Pode haver duas razões pelas quais você não pode criar uma nova resposta automática: Você precisará de pelo menos um e-mail para criar um novo utilitário de resposta automática. Em segundo lugar, pode ser possível que todas as contas já tenham uma resposta automática configuradas'; +$lng['error']['missingfields'] = 'Nem todos os campos necessários estavam no campo.'; +$lng['error']['accountnotexisting'] = 'Esta conta não existe.'; +$lng['error']['autoresponderalreadyexists'] = 'Já existe um auto-responder configurado para esta conta.'; +$lng['error']['invalidautoresponder'] = 'Esta determinada está inválida.'; +$lng['serversettings']['autoresponder_active']['title'] = 'Usar módulo de auto-responder'; +$lng['serversettings']['autoresponder_active']['description'] = 'Você deseja utilizar o módulo do auto-responder? Uma tarefa extra no cron deve ser configurada.'; +$lng['invoice']['active'] = 'Fatura ativa'; +$lng['admin']['security_settings'] = 'Opções de Segurança'; +$lng['admin']['know_what_youre_doing'] = 'Somente altere, se você sabe o que está fazendo'; +$lng['admin']['show_version_login']['title'] = 'Mostrar versão do SysCP no login'; +$lng['admin']['show_version_login']['description'] = 'Mostar a versão do SysCP no rodapé da página de login'; +$lng['admin']['show_version_footer']['title'] = 'Mostar versão do SysCP no rodapé'; +$lng['admin']['show_version_footer']['description'] = 'Mostar a versão do SysCP no rodapé do resto das páginas'; +$lng['admin']['syscp_graphic']['title'] = 'Cabeçalho gráfico do SyCP'; +$lng['admin']['syscp_graphic']['description'] = 'Quais gráficos devem aparece no topor'; +$lng['menue']['phpsettings']['maintitle'] = 'Configurações do PHP'; +$lng['admin']['phpsettings']['title'] = 'Configurações do PHP'; +$lng['admin']['phpsettings']['description'] = 'Descrição'; +$lng['admin']['phpsettings']['actions'] = 'Ações'; +$lng['admin']['phpsettings']['activedomains'] = 'Em uso pelo(s) domínio(s)'; +$lng['admin']['phpsettings']['notused'] = 'Configuração não está em uso'; +$lng['admin']['misc'] = 'Variados'; +$lng['admin']['phpsettings']['editsettings'] = 'Alterar Configuração do PHP'; +$lng['admin']['phpsettings']['addsettings'] = 'Criar novas configurações do PHP'; +$lng['admin']['phpsettings']['viewsettings'] = 'Visualizar Configuração do PHP'; +$lng['admin']['phpsettings']['phpinisettings'] = 'Configurações do php.ini'; +$lng['error']['nopermissionsorinvalidid'] = 'Você não tem permissões suficientes para alterar essa configuração ou um ID inválido foi dado.'; +$lng['panel']['view'] = 'Visualizar'; +$lng['question']['phpsetting_reallydelete'] = 'Você realmente deseja apagar esta configuração? Todos os domínios que atualmente utilizam esta configuração serão alterada para a configuração padrão.'; +$lng['admin']['phpsettings']['addnew'] = 'Criar novas configurações'; +$lng['error']['phpsettingidwrong'] = 'Não existe uma configuração de PHP para este ID'; +$lng['error']['descriptioninvalid'] = 'A descrição é muito curta, muito longa ou contem carácters ilegais'; +$lng['error']['info'] = 'Iinformações'; +$lng['admin']['phpconfig']['template_replace_vars'] = 'As variáveis que serão substituídas nas Configurações'; +$lng['admin']['phpconfig']['safe_mode'] = 'Vai ser substituído pelas configurações seguras deste domínios.'; +$lng['admin']['phpconfig']['pear_dir'] = 'Serão substituídos com a definição global para o diretório pear.'; +$lng['admin']['phpconfig']['open_basedir'] = 'Serão substituídos com a definição do domínio open_basedir.'; +$lng['admin']['phpconfig']['tmp_dir'] = 'Substituído com o diretório temporário do domínio.'; +$lng['admin']['phpconfig']['open_basedir_global'] = 'Serão substituídos com o valor global do caminho que será anexado ao open_basedir.'; +$lng['admin']['phpconfig']['customer_email'] = 'Serão substituídos com o endereço de e-mail do cliente que é dono desse domínio.'; +$lng['admin']['phpconfig']['admin_email'] = 'Serão substituídos por e-mail do administrador quem possui esse domínio.'; +$lng['admin']['phpconfig']['domain'] = 'Serão substituídos com o domínio.'; +$lng['admin']['phpconfig']['customer'] = 'Será substituída pelo nome do login do cliente que é dono desse domínio.'; +$lng['admin']['phpconfig']['admin'] = 'Será substituída pelo nome de login do administrador que possui esse domínio.'; +$lng['login']['backtologin'] = 'Voltar ao Login'; +$lng['serversettings']['mod_fcgid']['starter']['title'] = 'Processos por domínio'; +$lng['serversettings']['mod_fcgid']['starter']['description'] = 'Quantos processos devem ser iniciadas / permitidas por domínio? O valor 0 é recomendado. O PHP irá então gerir a quantidade de processos.'; +$lng['serversettings']['mod_fcgid']['wrapper']['title'] = 'Wrapper in Vhosts'; +$lng['serversettings']['mod_fcgid']['wrapper']['description'] = 'Como os wrapper vão ser incluídos nos vhosts'; +$lng['serversettings']['mod_fcgid']['tmpdir']['description'] = 'Aonde os arquivos temporários devem ser guardados'; +$lng['serversettings']['mod_fcgid']['peardir']['title'] = 'Diretórios globais do PEAR'; +$lng['serversettings']['mod_fcgid']['peardir']['description'] = 'Diretórios globais do PEAR que deverão ser substituídos em cada configuração php.ini? Diferentes diretórios devem ser separados por dois pontos.'; +$lng['admin']['templates']['index_html'] = 'Indice de arquivo recém-criado no diretório de cliente'; +$lng['admin']['templates']['SERVERNAME'] = 'Substitua pelo nome do servidor.'; +$lng['admin']['templates']['CUSTOMER'] = 'Substitua pelo login do cliente.'; +$lng['admin']['templates']['ADMIN'] = 'Substitua pelo login do admin.'; +$lng['admin']['templates']['CUSTOMER_EMAIL'] = 'Substitua pelo endereço de email do cliente.'; +$lng['admin']['templates']['ADMIN_EMAIL'] = 'Substitua pelo endereço de email do administrador.'; +$lng['admin']['templates']['filetemplates'] = 'Modelo de Arquivo'; +$lng['admin']['templates']['filecontent'] = 'Conteúdo do Arquivo'; +$lng['error']['filecontentnotset'] = 'O arquivo não pode ser vazio'; +$lng['serversettings']['index_file_extension']['description'] = 'Qual extensão deve ser utilizada para o índice no arquivo recém-criado no diretório do cliente? Esta extensão será utilizado, se você ou um de seus administradores criou o seu próprio índice no arquivo modelo.'; +$lng['serversettings']['index_file_extension']['title'] = 'Extensão do arquivo recém-criado no Ãndice do diretório do cliente.'; +$lng['error']['index_file_extension'] = 'A extensão do índice do arquivo deve ficar entre 1 e 6 caracteres. A prorrogação só pode conter caracteres como az, AZ e 0-9'; +$lng['admin']['expert_settings'] = 'Configurações Avançadas'; +$lng['admin']['mod_fcgid_starter']['title'] = 'Processos PHP para este domínio (vazio para usar valor padrão)'; +$lng['admin']['aps'] = 'APS Instalado'; +$lng['customer']['aps'] = 'Instalador do APS'; +$lng['aps']['scan'] = 'Procurar por novos pacotes'; +$lng['aps']['upload'] = 'Atualizar novos pacotes'; +$lng['aps']['managepackages'] = 'Gerenciar Pacotes'; +$lng['aps']['manageinstances'] = 'Gerenciar Estâncias'; +$lng['aps']['overview'] = 'Resumo de Pacote'; +$lng['aps']['status'] = 'Meus Pacotes'; +$lng['aps']['search'] = 'Procurar por Pacotes'; +$lng['aps']['upload_description'] = 'Por favor seleciona o instalador APS (zipfiles) para istalar no sistema'; +$lng['aps']['search_description'] = 'Nome, Descrição, Palavra Chave, Versão'; +$lng['aps']['detail'] = 'Mais informação'; +$lng['aps']['install'] = 'Pacote de Instalação'; +$lng['aps']['data'] = 'Data'; +$lng['aps']['version'] = 'Versão'; +$lng['aps']['homepage'] = 'Homepage'; +$lng['aps']['installed_size'] = 'Tamanho após instalação'; +$lng['aps']['categories'] = 'Categorias'; +$lng['aps']['languages'] = 'Línguas'; +$lng['aps']['long_description'] = 'Descrição Longa'; +$lng['aps']['configscript'] = 'Configuração de Script'; +$lng['aps']['changelog'] = 'Log de Alterações'; +$lng['aps']['license'] = 'Licença'; +$lng['aps']['license_link'] = 'Caminho para Licença'; +$lng['aps']['screenshots'] = 'Screenshots'; +$lng['aps']['back'] = 'Voltar para Visão Geral'; +$lng['aps']['install_wizard'] = 'Assistente de Instalação'; +$lng['aps']['wizard_error'] = 'Yocê preencheu com dados inválidos. Por favor corrija você mesmo para continuar a instalação'; +$lng['aps']['basic_settings'] = 'Configurações Básicas'; +$lng['aps']['application_location'] = 'Local de Instalação'; +$lng['aps']['application_location_description'] = 'Local aonde a aplicação vai ser instalada'; +$lng['aps']['no_domains'] = 'Domínios não encontrados'; +$lng['aps']['database_password'] = 'Senha de Banco de Dados'; +$lng['aps']['database_password_description'] = 'Senha que deve ser utilizada para novos bancos de dados'; +$lng['aps']['license_agreement'] = 'Contrato'; +$lng['aps']['cancel_install'] = 'Cancelar Instalação'; +$lng['aps']['notazipfile'] = 'O arquivo de upload não é um arquivo .zip'; +$lng['aps']['filetoobig'] = 'O arquivo é muito grande'; +$lng['aps']['filenotcomplete'] = 'O arquivo não foi enviado corretamente'; +$lng['aps']['phperror'] = 'Ocorreu um erro interno no PHP. O código de erro é #'; +$lng['aps']['moveproblem'] = 'O script falhou em fazer o upload dos arquivos para diretório de destino. Por favor tenha certeza de que as permissões estão setadas corretamente.'; +$lng['aps']['uploaderrors'] = 'Erros de Arquivo %s
      %s
    '; +$lng['aps']['nospecialchars'] = 'Sarácters especiais não são aceitos nos termos de pesquisa'; +$lng['aps']['noitemsfound'] = 'Nenhum pacote foi encontrado'; +$lng['aps']['nopackagesinstalled'] = 'Você não tem nenhum pacote instalado.'; +$lng['aps']['instance_install'] = 'Pendência de Instalação de Pacote'; +$lng['aps']['instance_task_active'] = 'Instalação está em execução neste momento'; +$lng['aps']['instance_success'] = 'Pacote está instalado corretamente'; +$lng['aps']['instance_error'] = 'Pacote não está instalado corretamente, erros ocorreram durante a instalação'; +$lng['aps']['instance_uninstall'] = 'Pendência de Desinstalação de Pacotes'; +$lng['aps']['unknown_status'] = 'Erro, valor desconhecido'; +$lng['aps']['currentstatus'] = 'Status Atual'; +$lng['aps']['activetasks'] = 'Status de Tarejas'; +$lng['aps']['task_install'] = 'Instalação pendente'; +$lng['aps']['task_remove'] = 'Desinstação pendente'; +$lng['aps']['task_reconfigure'] = 'Reconfiguração Pendente'; +$lng['aps']['task_upgrade'] = 'Atualizar pendência'; +$lng['aps']['no_task'] = 'Sem tarefas pendentes'; +$lng['aps']['applicationlinks'] = 'Links de Aplicações'; +$lng['aps']['mainsite'] = 'Site Principal'; +$lng['aps']['uninstall'] = 'Desinstalar Pacote'; +$lng['aps']['reconfigure'] = 'Alterar configurações'; +$lng['aps']['erroronnewinstance'] = 'Este pacote não pode ser instalado.

    Por favor volte a visualização de pacotes e comece uma nova instalação.'; +$lng['aps']['successonnewinstance'] = '%s vai ser instalado agora.

    Volte para "Meus Pacotes" e espere a instalação acabar. Isto pode demorar alguns minutos.'; +$lng['aps']['php_misc_handler'] = 'PHP - Não tem suporte para outras extensões além de .php .'; +$lng['aps']['php_misc_directoryhandler'] = 'PHP - Não tem suporte para diretórios.'; +$lng['aps']['asp_net'] = 'ASP.NET - Pacote não suportado'; +$lng['aps']['cgi'] = 'CGI - Pacote não suportado'; +$lng['aps']['php_extension'] = 'Extensão PHP "%s" missing'; +$lng['aps']['php_function'] = 'Função PHP "%s" missing'; +$lng['aps']['php_configuration'] = 'Configuração de PHP atual "%s" não suportado pelo pacote'; +$lng['aps']['php_configuration_post_max_size'] = 'Configuração do PHP - "post_max_size" valor muito baixo'; +$lng['aps']['php_configuration_memory_limit'] = 'Configuração do PHP - "memory_limit" valor muito baixo'; +$lng['aps']['php_configuration_max_execution_time'] = 'Configuração do PHP - "max_execution_time" valor muito baixo'; +$lng['aps']['php_general_old'] = 'PHP - Geral - Versão do PHP Muito Antiga'; +$lng['aps']['php_general_new'] = 'PHP - Geral - Versão do PHP Muito Nova'; +$lng['aps']['db_mysql_support'] = 'Base de Dados - Este pacote precisa outra base de dados do que MySQL'; +$lng['aps']['db_mysql_version'] = 'Base de Dados - Servidor MySQL é muito antigo'; +$lng['aps']['webserver_module'] = 'Servidor Web - Módulo "%s" não encontrado'; +$lng['aps']['misc_configscript'] = 'Misc - A linguagem de configuração do script não é suportadaützt.'; +$lng['aps']['misc_version_already_installed'] = 'A mesma versão do pacote já está instalada.'; +$lng['aps']['misc_version_already_installed'] = 'Mesma versão de pacote instalado.'; +$lng['aps']['misc_only_newer_versions'] = 'Por razões de segurança somente pacotes instalados podem ser reinstalados e atualizados.'; +$lng['aps']['erroronscan'] = 'Erros para %s
      %s
    '; +$lng['aps']['invalidzipfile'] = 'Erros para %s
    • Este não é um pacote valido de APS compactado!
    '; +$lng['aps']['successpackageupdate'] = '%s Pacote atualizado com sucesso'; +$lng['aps']['successpackageinstall'] = '%s Novo pacote instalado com sucesso'; +$lng['aps']['class_zip_missing'] = 'SimpleXML Class, funções exec ou funções ZIP podem estar perdidas ou desabilitadas! Para futuras informações sobre este problema procure no manual sobre este módulo'; +$lng['aps']['dir_permissions'] = 'O PHP/Servidor Web tem que estar apto em escrever nos diretórios /var/www/syscp/temp/ e /var/www/syscp/packages/'; +$lng['aps']['initerror'] = 'Foi encontrado erros neste módulo:
      %s
    Corrija o problema, ou o módulo não poderá ser usado!'; +$lng['aps']['iderror'] = 'ID incorretamente especificado'; +$lng['aps']['nopacketsforinstallation'] = 'Nenhum para para instalar'; +$lng['aps']['nopackagestoinstall'] = 'Nenhum pacote para visualizar ou instalar'; +$lng['aps']['nodomains'] = 'Seleciona um domínio da lisa. Se não tiver nenhum, o pacote não pode ser instalado'; +$lng['aps']['wrongpath'] = 'Either this path contains invalid characters or there is another application installed already.'; +$lng['aps']['dbpassword'] = 'Especifique uma senha com um mínimo de 8 carácters'; +$lng['aps']['error_text'] = 'Especifique um texto sem carácters especiais'; +$lng['aps']['error_email'] = 'Especifique um endereço de e-mail válido'; +$lng['aps']['error_domain'] = 'Especifique uma URL válida como http://www.exemplo.com/'; +$lng['aps']['error_integer'] = 'Especifique um valor númerico (Formato-Integer)'; +$lng['aps']['error_float'] = 'Especifique um valor númerico (Formato-Float)'; +$lng['aps']['error_password'] = 'Especifique uma senha'; +$lng['aps']['error_license'] = 'Yes, I have the license and will abide by its terms.'; +$lng['aps']['error_licensenoaccept'] = 'Você deve aceitar a licença de instalação desta aplicação'; +$lng['aps']['stopinstall'] = 'Cancelar Instalação'; +$lng['aps']['installstopped'] = 'A instalação deste pacote foi cancelada com sucesso'; +$lng['aps']['installstoperror'] = 'A instalação não pode ser abortada porque a instalação já foi iniciada. Se você deseja remover o pacote, primeiro esperer instalar, depois remova-o em "Meus Pacotes".'; +$lng['aps']['waitfortask'] = 'Não tem opções para selecionar. Espere o final de todas as tarefas para terminar'; +$lng['aps']['removetaskexisting'] = 'Existe uma tarefa para desinstação.

    Por favor volte para "Meus Pacotes" e espere terminar.'; +$lng['aps']['packagewillberemoved'] = 'O pacote vai ser desinstalado agora.

    Por favor volte para "Meus Pacotes" e espere terminar.'; +$lng['question']['reallywanttoremove'] = 'Você realmente deseja desinstalar este pacote?

    Todo conteúdo de banco de dados e arquivo irá ser apagado. Tenha certeza que você tem o backup para uso futuro!

    '; +$lng['aps']['searchoneresult'] = '%s pacote achado'; +$lng['aps']['searchmultiresult'] = '%s pacotes achados'; +$lng['question']['reallywanttostop'] = 'Você deseja cancelar a instalação deste pacote?'; +$lng['aps']['packagenameandversion'] = 'Nome do Pacote & Versão'; +$lng['aps']['package_locked'] = 'Destrava'; +$lng['aps']['package_enabled'] = 'Trava'; +$lng['aps']['lock'] = 'Trava'; +$lng['aps']['unlock'] = 'Destrava'; +$lng['aps']['remove'] = 'Remover'; +$lng['aps']['allpackages'] = 'Todos os pacotes'; +$lng['question']['reallyremovepackages'] = 'Do you really want to delete this packages?

    Packages with dependencies can only be remove if the corresponding Instances have been removed!

    '; +$lng['aps']['nopackagesinsystem'] = 'There were no packages installed in the system which could be managed.'; +$lng['aps']['packagenameandstatus'] = 'Nome do Pacote & Status'; +$lng['aps']['activate_aps']['title'] = 'A\'tiva instalados APS'; +$lng['aps']['activate_aps']['description'] = 'Aqui o instalador do APS pode ser ativado ou desativado globalmente'; +$lng['aps']['packages_per_page']['title'] = 'Pacotes por página'; +$lng['aps']['packages_per_page']['description'] = 'Quantos pacotes devem aparecer por página para os clientes '; +$lng['aps']['upload_fields']['title'] = 'Upload de campos por página'; +$lng['aps']['upload_fields']['description'] = 'Quantos campos devem aparecer por página para a instalação de novos pacotes no sistema?'; +$lng['aps']['exceptions']['title'] = 'Exceção para validação de pacote'; +$lng['aps']['exceptions']['description'] = 'Some packages need special configuration parameters or modules. The Installer cannot always determine if this options/extensions are available. For this reason you can now define exceptions that packages can be installed in the system. Do only select options which match your real configuration setup. For further information about this problem look into the handbook for this module.'; +$lng['aps']['settings_php_extensions'] = 'Extensões do PHP'; +$lng['aps']['settings_php_configuration'] = 'Configuração do PHP'; +$lng['aps']['settings_webserver_modules'] = 'Módulos do Webserver'; +$lng['aps']['settings_webserver_misc'] = 'Servidor Web Variados'; +$lng['aps']['specialoptions'] = 'Opções Especiais'; +$lng['aps']['removeunused'] = 'Remover pacotes não usados'; +$lng['aps']['enablenewest'] = 'Ativa nova versão de pacote, tranca outras'; +$lng['aps']['installations'] = 'Instalações'; +$lng['aps']['statistics'] = 'Estatísticas'; +$lng['aps']['numerofpackagesinstalled'] = '%s pacotes instalados'; +$lng['aps']['numerofpackagesenabled'] = '%s pacotes ativos'; +$lng['aps']['numerofpackageslocked'] = '%s Pacotes Trancados'; +$lng['aps']['numerofinstances'] = '%s Instalação de todos
    '; +$lng['question']['reallydoaction'] = 'Do you really want to execute the selected actions?

    Data which can be lost by continuing, cannot be restored later.

    '; +$lng['aps']['linktolicense'] = 'Caminho para Licença'; +$lng['aps']['initerror_customer'] = 'Existe um problema com esta extensão do SysCP. Contate seu administrador para maiores informações.'; +$lng['aps']['numerofinstancessuccess'] = '%s instalações executadas'; +$lng['aps']['numerofinstanceserror'] = '%s instalações falhadas'; +$lng['aps']['numerofinstancesaction'] = '%s planejou instalações/desinstalações'; +$lng['aps']['downloadallpackages'] = 'Fazer download de todos os pacotes da distribuição do servidor'; +$lng['aps']['updateallpackages'] = 'Atualizar todos os pacote pela distribuição do servidor'; +$lng['aps']['downloadtaskexists'] = 'Existe downloads em andamento. Por favor espere terminar.'; +$lng['aps']['downloadtaskinserted'] = 'Uma tarefa de download de fotos os pacotes foi criada. Esta tarefa pode demorar alguns minutos.'; +$lng['aps']['updatetaskexists'] = 'Existe uma atualização em andamento. Por favor espere esta atualização terminar.'; +$lng['aps']['updatetaskinserted'] = 'Uma tarefa para a atualização de todos os pacotes foi criado. Esta tarefa pode demorar alguns minutos.'; +$lng['aps']['canmanagepackages'] = 'Pode gerenciar pacotes APS'; +$lng['aps']['numberofapspackages'] = 'Quantia de instalações APS'; +$lng['aps']['allpackagesused'] = 'Erro

    Você já atingiu o número máximo de instalação de apliçações APS'; +$lng['aps']['noinstancesexisting'] = 'Não existem estâncias para administrar.'; +$lng['error']['customerdoesntexist'] = 'O cliente que você escolheu não existe'; +$lng['error']['admindoesntexist'] = 'O administrador que você escolheu não existe'; +$lng['serversettings']['system_realtime_port']['title'] = 'Porta para SysCP em tempo real'; +$lng['serversettings']['system_realtime_port']['description'] = 'SysCP connects to this port at localhost everytime a new cron task is scheduled. If value is 0 (zero), this feature ist deactivated.
    See also: Make SysCP work in realtime (SysCP Wiki)'; +$lng['serversettings']['session_allow_multiple_login']['title'] = 'AAtiva login múltiplo'; +$lng['serversettings']['session_allow_multiple_login']['description'] = 'Se ativado um usuário pode ter múltiplos logins'; +$lng['serversettings']['panel_allow_domain_change_admin']['title'] = 'Ativa mover domínios entre admins'; +$lng['serversettings']['panel_allow_domain_change_admin']['description'] = 'If activated you can change the admin of a domain at domainsettings.
    Attention: If a customer isn\'t assigned to the same admin as the domain, the admin can see every other domain of that customer!'; +$lng['serversettings']['panel_allow_domain_change_customer']['title'] = 'Ativa mover domínios entre clientes'; +$lng['serversettings']['panel_allow_domain_change_customer']['description'] = 'Se ativado você pode trocar o cliente de um domínio para administração de outro.
    Attention: SysCP não troca nenhum caminho. Isto pode fazer com que domínios parem de funcionar'; +$lng['domains']['associated_with_domain'] = 'Associado'; +$lng['domains']['aliasdomains'] = 'Encaminhamento de domínios'; +$lng['error']['ipportdoesntexist'] = 'A combinação de IP/Porta que você escolheu não existe'; +$lng['admin']['phpserversettings'] = 'Configuração do PHP'; +$lng['admin']['phpsettings']['binary'] = 'Binário do PHP'; +$lng['admin']['phpsettings']['file_extensions'] = 'Extensões de arquivos'; +$lng['admin']['phpsettings']['file_extensions_note'] = '(Sem pontos, separados por espaços)'; +$lng['admin']['mod_fcgid_maxrequests']['title'] = 'Máximo de requisições php para este domínio (vazio para valor default)'; +$lng['serversettings']['mod_fcgid']['maxrequests']['title'] = 'Máximo de solicitações por Domínio'; +$lng['serversettings']['mod_fcgid']['maxrequests']['description'] = 'Quantas solicitações serão aceitas por domínio?'; + +?> diff --git a/lng/russian.lng.php b/lng/russian.lng.php new file mode 100644 index 0000000000..551aa37abd --- /dev/null +++ b/lng/russian.lng.php @@ -0,0 +1,1405 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Language + * @version $Id: russian.lng.php 2692 2009-03-27 18:04:47Z flo $ + */ + +/** + * Global + */ + +$lng['translator'] = 'Konstantin Samofejew (Константин Самофеев)'; +$lng['panel']['edit'] = 'редактировать'; + +// bearbeiten + +$lng['panel']['delete'] = 'удалить'; + +// loeschen + +$lng['panel']['create'] = 'создать'; + +// anlegen + +$lng['panel']['save'] = 'Сохранить'; + +// Speichern + +$lng['panel']['yes'] = 'Да'; + +// Ja + +$lng['panel']['no'] = 'Нет'; + +// Nein + +$lng['panel']['emptyfornochanges'] = 'оставить пустым, если без изменений'; + +// leer fuer keine Aenderung + +$lng['panel']['emptyfordefault'] = 'оставить пустым для стандартного значения'; + +// leer fuer Standardeinstellung + +$lng['panel']['path'] = 'Путь'; + +// Pfad + +$lng['panel']['toggle'] = 'Переключить'; + +// Umschalten + +$lng['panel']['next'] = 'дальше'; + +// weiter + +$lng['panel']['dirsmissing'] = 'Каталоги (директории) не существуют или не читаемы'; + +// Verzeichnisse nicht verfuegbar oder lesbar + +/** + * Login + */ + +$lng['login']['username'] = 'Пользователь'; + +// Benutzername + +$lng['login']['password'] = 'Пароль'; + +// Passwort + +$lng['login']['language'] = 'Язык'; + +// Sprache + +$lng['login']['login'] = 'Войти'; + +// Anmelden + +$lng['login']['logout'] = 'Выйти'; + +// Abmelden + +$lng['login']['profile_lng'] = 'Язык профиля'; + +// Profilsprache + +/** + * Customer + */ + +$lng['customer']['documentroot'] = 'Домашний каталог (директория)'; + +// Heimverzeichnis + +$lng['customer']['name'] = 'Фамилия'; + +// Name + +$lng['customer']['firstname'] = 'Имя'; + +// Vorname + +$lng['customer']['company'] = 'Фирма'; + +// Firma + +$lng['customer']['street'] = 'Улица, дом, квартира'; + +// Strasse, Haus, App. + +$lng['customer']['zipcode'] = 'Почтовый индекс'; + +// PLZ + +$lng['customer']['city'] = 'Город'; + +// Ort + +$lng['customer']['phone'] = 'Телефон'; + +// Telephon + +$lng['customer']['fax'] = 'Факс'; + +// Fax + +$lng['customer']['email'] = 'eMail'; + +// eMail + +$lng['customer']['customernumber'] = 'Номер клиента'; + +// KundenNummer + +$lng['customer']['diskspace'] = 'Объём под Web (MB)'; + +// Webspace (MB) + +$lng['customer']['traffic'] = 'Трафик (GB)'; + +// Traffic (GB) + +$lng['customer']['mysqls'] = 'Базы данных MySQL'; + +// MySQL-Datenbanken + +$lng['customer']['emails'] = 'Адреса eMail'; + +// eMail-Adressen + +$lng['customer']['accounts'] = 'Аккаунты eMail'; + +// eMail-Konten + +$lng['customer']['forwarders'] = 'Пересылки eMail (forwarder)'; + +// eMail-Weiterleitungen + +$lng['customer']['ftps'] = 'Аккаунты FTP'; + +// FTP-Accounts + +$lng['customer']['subdomains'] = 'Поддомены'; + +// Sub-Domain(s) + +$lng['customer']['domains'] = 'Домены'; + +// Domain(s) + +$lng['customer']['unlimited'] = 'без ограничений'; + +// unendlich + +/** + * Customermenue + */ + +$lng['menue']['main']['main'] = 'Общие настройки'; + +// Allgemein + +$lng['menue']['main']['changepassword'] = 'Изменить пароль'; + +// Passwort aendern + +$lng['menue']['main']['changelanguage'] = 'Изменить язык'; + +// Sprache aendern + +$lng['menue']['email']['email'] = 'eMail'; + +// eMail + +$lng['menue']['email']['emails'] = 'Адреса'; + +// Adressen + +$lng['menue']['email']['webmail'] = 'WebMail'; + +// WebMail + +$lng['menue']['mysql']['mysql'] = 'MySQL'; + +// MySQL + +$lng['menue']['mysql']['databases'] = 'Базы данных'; + +// Datenbanken + +$lng['menue']['mysql']['phpmyadmin'] = 'phpMyAdmin'; + +// phpMyAdmin + +$lng['menue']['domains']['domains'] = 'Домены'; + +// Domains + +$lng['menue']['domains']['settings'] = 'Настройки'; + +// Einstellungen + +$lng['menue']['ftp']['ftp'] = 'FTP'; + +// FTP + +$lng['menue']['ftp']['accounts'] = 'Аккаунты'; + +// Accounts + +$lng['menue']['ftp']['webftp'] = 'WebFTP'; + +// WebFTP + +$lng['menue']['extras']['extras'] = 'Разное'; + +// Extras + +$lng['menue']['extras']['directoryprotection'] = 'Защита каталогов (директорий)'; + +// Verzeichnisschutz + +$lng['menue']['extras']['pathoptions'] = 'Настройки путей'; + +// Pfadoptionen + +/** + * Index + */ + +$lng['index']['customerdetails'] = 'Данные клиентов'; + +// Kundendaten + +$lng['index']['accountdetails'] = 'Данные аккаунтов'; + +// Accountdaten + +/** + * Change Password + */ + +$lng['changepassword']['old_password'] = 'Старый пароль'; + +// Altes Passwort + +$lng['changepassword']['new_password'] = 'Новый пароль'; + +// Neues Passwort + +$lng['changepassword']['new_password_confirm'] = 'Новый пароль (повторить)'; + +// Neues Passwort (bestaetigen) + +$lng['changepassword']['new_password_ifnotempty'] = 'Новый пароль (оставить пустым, чтобы не менять)'; + +// Neues Passwort (leer = nicht aendern) + +$lng['changepassword']['also_change_ftp'] = ' Также изменить пароль и для основного аккаунта FTP'; + +// Auch Passwort vom Haupt-FTP-Zugang aendern + +/** + * Domains + */ + +$lng['domains']['description'] = 'Здесь Вы можете создавать поддомены и менять пути к ним.
    После каждого изменения системе необходимо немного времени, чтобы загрузить обновлённые настройки.'; + +// Hier koennen Sie (Sub-)Domains erstellen und deren Pfade aendern.
    Nach jeder Aenderung braucht das System etwas Zeit um die Konfiguration neu einzulesen. + +$lng['domains']['domainsettings'] = 'Настройки домена'; + +// Domaineinstellungen + +$lng['domains']['domainname'] = 'Имя домена'; + +// Domainname + +$lng['domains']['subdomain_add'] = 'Создать поддомен'; + +// Subdomain anlegen + +$lng['domains']['subdomain_edit'] = 'Обработать (под)домен'; + +// (Sub-)Domain bearbeiten + +$lng['domains']['wildcarddomain'] = 'Занести как уайлдкард-домен? (Wildcard)'; + +// Als Wildcarddomain eintragen? + +$lng['domains']['aliasdomain'] = 'Алиас для домена'; + +// Alias fuer Domain + +$lng['domains']['noaliasdomain'] = 'Не алиас-домен'; + +// Keine Aliasdomain + +/** + * eMails + */ + +$lng['emails']['description'] = 'Здесь Вы можете настроить Ваши email-адреса.
    Аккаунт - это как обычный почтовый ящик. Если Вам кто-то напишет электронное письмо (email), оно попадёт в этот ящик.

    Данные для Вашей почтовй программы: (Текст с наклоном замените на Ваши данные!)
    Сервер: имя домена
    Имя пользователя: имя аккаунта или email-адрес
    Пароль: выбранный Вами пароль'; + +// Hier koennen Sie Ihre eMail Adressen einrichten.
    Ein Konto ist wie Ihr Briefkasten vor der Haustuere. Wenn jemand eine email an Sie schreibt, dann wird diese in dieses Konto gelegt.

    Die Zugangsdaten von Ihrem Mailprogramm sind wie folgt: (Die Angaben in kursiver Schrift sind durch die jeweiligen Eintraege zu ersetzen!)
    Hostname: Domainname
    Benutzername: Kontoname / eMail-Adresse
    Passwort: das gewaehlte Passwort + +$lng['emails']['emailaddress'] = 'eMail-адрес'; + +// eMail-Adresse + +$lng['emails']['emails_add'] = 'создать eMail-адрес'; + +// eMail-Adresse anlegen + +$lng['emails']['emails_edit'] = 'изменить eMail-адрес'; + +//eMail-Adresse aendern + +$lng['emails']['catchall'] = 'С функцией "лови всё" (catchall)'; + +// Catchall + +$lng['emails']['iscatchall'] = 'Сделать catchall-адресом?'; + +// Als catchall-Adresse definieren? + +$lng['emails']['account'] = 'Аккаунт'; + +// Konto + +$lng['emails']['account_add'] = 'Создать аккаунт'; + +// Konto anlegen + +$lng['emails']['account_delete'] = 'Удалить аккаунт'; + +// Konto loeschen + +$lng['emails']['from'] = 'От'; + +// Von + +$lng['emails']['to'] = 'Куда'; + +// Nach + +$lng['emails']['forwarders'] = 'Пересылка'; + +// Weiterleitungen + +$lng['emails']['forwarder_add'] = 'Добавить пересылку'; + +// Weiterleitung hinzufuegen + +/** + * FTP + */ + +$lng['ftp']['description'] = 'Здесь Вы можете создать дополнительные FTP-аккаунты.
    FTP-аккаунты активны сразу после сохранения изменений.'; + +// Hier koennen Sie zusaetzliche FTP-Accounts einrichten.
    Die Aenderungen sind sofort wirksam und die FTP-Accounts sofort benutzbar. + +$lng['ftp']['account_add'] = 'Создать аккаунт'; + +// Account anlegen + +/** + * MySQL + */ + +$lng['mysql']['databasename'] = 'Имя пользователя / базы данных'; + +// Benutzer-/Datenbankname + +$lng['mysql']['databasedescription'] = 'Описание базы данных'; + +// Datenbankbezeichnung + +$lng['mysql']['database_create'] = 'Создать базу данных'; + +// Datenbank anlegen + +/** + * Extras + */ + +$lng['extras']['description'] = 'Здесь Вы можете сделать дополнительные настройки, например защиту каталога (директории).
    После каждого изменения системе необходимо немного времени, чтобы загрузить обновлённые настройки.'; + +// Hier koennen Sie zusaetzliche Extras einrichten, wie zum Beispiel Verzeichnisschutz.
    Die Aenderungen sind erst nach einer bestimmten Zeit wirksam. + +$lng['extras']['directoryprotection_add'] = 'Создать защиту каталога'; + +// Verzeichnisschutz anlegen + +$lng['extras']['view_directory'] = 'Показать каталог'; + +// Verzeichnis anzeigen + +$lng['extras']['pathoptions_add'] = 'Добавить настройки пути'; + +// Pfadoptionen hinzufuegen + +$lng['extras']['directory_browsing'] = 'Показать содержимое каталога'; + +// Verzeichnisinhalt anzeigen + +$lng['extras']['pathoptions_edit'] = 'Изменить настройки пути'; +$lng['extras']['error404path'] = '404'; + +// 404 + +$lng['extras']['error403path'] = '403'; + +// 403 + +$lng['extras']['error500path'] = '500'; + +// 500 + +$lng['extras']['error401path'] = '401'; + +// 401 + +$lng['extras']['errordocument404path'] = 'URL к документу ошибки 404'; + +// URL zum Fehlerdokument 404 + +$lng['extras']['errordocument403path'] = 'URL к документу ошибки 403'; + +// URL zum Fehlerdokument 403 + +$lng['extras']['errordocument500path'] = 'URL к документу ошибки 500'; + +// URL zum Fehlerdokument 500 + +$lng['extras']['errordocument401path'] = 'URL к документу ошибки 401'; + +// URL zum Fehlerdokument 401 + +/** + * Errors + */ + +$lng['error']['error'] = 'Сообщение о ошибке'; + +// Fehlermeldung + +$lng['error']['directorymustexist'] = 'Файл %s должен существовать.'; + +// Das Verzeichnis %s muss existieren. Legen Sie es bitte mit Ihrem FTP-Programm an. + +$lng['error']['filemustexist'] = 'Файл %s должен существовать.'; + +// Die Datei %s muss existieren. + +$lng['error']['allresourcesused'] = 'Вы уже израсходовали все ресурсы, находящиеся в Вашем распоряжении.'; + +// Sie haben bereits alle Ihnen zur Verfuegung stehenden Ressourcen verbraucht. + +$lng['error']['domains_cantdeletemaindomain'] = 'Вы не можете удалить домен, занесённый как eMail-домен.'; + +// Sie koennen keine Domain, die als eMail-Domain verwendet wird loeschen. + +$lng['error']['domains_canteditdomain'] = 'Обработка этого домена запрещена админом.'; + +// Sie koennen diese Domain nicht bearbeiten. Dies wurde durch den Admin verweigert + +$lng['error']['domains_cantdeletedomainwithemail'] = 'Вы не можете удалить домен, который ещё используется как eMail-домен. Удалите сначала все eMail-адреса этого домена.'; + +// Sie koennen keine Domain loeschen die noch als eMail-Domain verwendet wird. Loeschen Sie zuerst alle eMail-Adressen dieser Domain. + +$lng['error']['firstdeleteallsubdomains'] = 'Прежде чем создать уайлдкард-домен (wildcard), Вам необходимо удалить все поддомены.'; + +// Sie muessen erst alle Subdomains loeschen, bevor Sie eine Wildcarddomain anlegen koennen. + +$lng['error']['youhavealreadyacatchallforthisdomain'] = 'Вы уже прописали один адрес как "лови всё" (catchall) для этого домена.'; + +// Sie haben bereits eine Adresse als Catchall fuer diese Domain definiert. + +$lng['error']['ftp_cantdeletemainaccount'] = 'Вы не можете удалить Ваш основной аккаунт.'; + +// Sie koennen Ihren Hauptaccount nicht loeschen. + +$lng['error']['login'] = 'Указанные имя пользователя или пароль не верны.'; + +// Der angegebene Benutzername/Passwort ist falsch. + +$lng['error']['login_blocked'] = 'Из-за многочисленных ошибочных попыток логина аккаунт временно закрыт.
    Пожалуйста попробуйте через ' . $settings['login']['deactivatetime'] . ' секунд ещё раз.'; + +// Dieser Account wurde aufgrund zu vieler Fehlversuche vorruebergehend geschlossen.
    Bitte versuchen Sie es in '.$settings['login']['deactivatetime'].' Sekunden erneut. + +$lng['error']['notallreqfieldsorerrors'] = 'Вы заполнили не все поля или минимум одно поле неправильно.'; + +// Sie haben nicht alle Felder oder ein Feld mit fehlerhaften Angaben ausgefuellt. + +$lng['error']['oldpasswordnotcorrect'] = 'Старый пароль не верен.'; + +// Das alte Passwort ist nicht korrekt. + +$lng['error']['youcantallocatemorethanyouhave'] = 'Вы не можете раздавать больше ресурсов, чем у Вас ещё есть.'; + +// Sie koennen nicht mehr Ressourcen verteilen als Sie noch frei haben. + +$lng['error']['mustbeurl'] = 'Вы должны указать полный адрес URL (например http://something.com/error404.htm)'; + +// Sie muessen eine vollstaendige URL angeben (z.B. http://irgendwas.de/error404.htm) + +$lng['error']['invalidpath'] = 'Вы указали не действительный адрес URL.'; + +// Sie haben keine gueltige URL ausgewaehlt (Evtl. Probleme beim Verzeichnislisting?) + +$lng['error']['stringisempty'] = 'Отсутствующие данные в поле'; + +// Fehlende Eingabe im Feld + +$lng['error']['stringiswrong'] = 'Неправильные данные в поле'; + +// Falsche Eingabe im Feld + +$lng['error']['myloginname'] = '\'' . $lng['login']['username'] . '\''; +$lng['error']['mypassword'] = '\'' . $lng['login']['password'] . '\''; +$lng['error']['oldpassword'] = '\'' . $lng['changepassword']['old_password'] . '\''; +$lng['error']['newpassword'] = '\'' . $lng['changepassword']['new_password'] . '\''; +$lng['error']['newpasswordconfirm'] = '\'' . $lng['changepassword']['new_password_confirm'] . '\''; +$lng['error']['newpasswordconfirmerror'] = 'Новый пароль и повторённый новый пароль отличаются.'; + +// Das neue Passwort und die Bestaetigung sind nicht identisch. + +$lng['error']['myname'] = '\'' . $lng['customer']['name'] . '\''; +$lng['error']['myfirstname'] = '\'' . $lng['customer']['firstname'] . '\''; +$lng['error']['emailadd'] = '\'' . $lng['customer']['email'] . '\''; +$lng['error']['mydomain'] = '\'Домен\''; + +// \'Domain\' + +$lng['error']['mydocumentroot'] = '\'Корень документа\''; + +// \'Documentroot\' + +$lng['error']['loginnameexists'] = 'Имя %s уже существует.'; + +// Login-Name %s existiert bereits. + +$lng['error']['emailiswrong'] = 'eMail-адрес %s содержит запрещённые символы или является не полным.'; + +// eMail-Adresse %s beinhaltet ungueltige Zeichen oder ist nicht vollstaendig. + +$lng['error']['loginnameiswrong'] = 'Имя %s содержит запрещённые символы.'; + +// Login-Name %s beinhaltet ungueltige Zeichen. + +$lng['error']['userpathcombinationdupe'] = 'Комбинация из имени пользователя и пути уже существует.'; + +// Kombination aus Benutzername und Pfad existiert bereits. + +$lng['error']['patherror'] = 'Общая ошибка! Путь не может быть пустым.'; + +// allgemeiner Fehler! Pfad darf nicht leer sein. + +$lng['error']['errordocpathdupe'] = 'Настройка для пути %s уже существует.'; + +// Option fuer Pfad %s existiert bereits. + +$lng['error']['adduserfirst'] = 'Сначала необходимо создать клиента.'; + +// Sie muessen zuerst einen Kunden anlegen. + +$lng['error']['domainalreadyexists'] = 'Домен %s уже в распоряжении другого клиента.'; + +// Die Domain %s wurde bereits einem Kunden zugeordnet. + +$lng['error']['nolanguageselect'] = 'Язык не выбран.'; + +// Keine Sprache ausgewaehlt. + +$lng['error']['nosubjectcreate'] = 'Вам нужно указать тему.'; + +// Sie muessen einen Betreff angeben. + +$lng['error']['nomailbodycreate'] = 'Вам нужно набрать текст сообщения.'; + +// Sie muessen einen Mail-Text eingeben. + +$lng['error']['templatenotfound'] = 'Шаблон не найден.'; + +// Template wurde nicht gefunden. + +$lng['error']['alltemplatesdefined'] = 'Вы не можете создавать шаблоны, потому-что во всех языках шаблоны уже существуют.'; + +// Sie koennen keine weiteren Templates anlegen, da bereits alle Sprachen mit Templates versorgt sind. + +$lng['error']['wwwnotallowed'] = 'Ваш поддомен не может носить имя www.'; + +// Ihre Subdomain darf nicht www heissen. + +$lng['error']['subdomainiswrong'] = 'Поддомен %s содержит недействительные символы.'; + +// Die Subdomain %s beinhaltet ungueltige Zeichen. + +$lng['error']['domaincantbeempty'] = 'Имя домена не может быть пустым.'; + +// Der Domain-Name darf nicht leer sein. + +$lng['error']['domainexistalready'] = 'Домен %s уже существует.'; + +// Die Domain %s existiert bereits. + +$lng['error']['domainisaliasorothercustomer'] = 'Выбранный алиас-домен или сам является алиас-доменом, или принадлежит другому клиенту.'; + +// Die ausgewaehlte Aliasdomain ist entweder selber eine Aliasdomain oder gehoet zu einem anderen Kunden. + +$lng['error']['emailexistalready'] = 'eMail-адрес %s уже существует.'; + +// Die eMail-Adresse %s existiert bereits. + +$lng['error']['maindomainnonexist'] = 'Основной домен %s не существует.'; + +// Die Haupt-Domain %s existiert nicht. + +$lng['error']['destinationnonexist'] = 'Занесите адрес для пересылки в поле \'Куда\'.'; + +// Bitte geben Sie Ihre Weiterleitungsadresse im Feld \'Nach\' ein. + +$lng['error']['destinationalreadyexistasmail'] = 'Пересылка на %s уже существует как активный eMail-адрес.'; + +// Die Weiterleitung zu %s exisitiert bereits als aktive eMail-Adresse. + +$lng['error']['destinationalreadyexist'] = 'Пересылка на %s уже существует.'; + +// Es gibt bereits eine Weiterleitung nach %s . + +$lng['error']['destinationiswrong'] = 'Адрес для пересылки %s содержит недействительные символы или является неполным.'; + +// Die Weiterleitungsadresse-Adresse %s beinhaltet ungueltige Zeichen oder ist nicht vollstaendig. + +$lng['error']['domainname'] = $lng['domains']['domainname']; + +/** + * Questions + */ + +$lng['question']['question'] = 'Вопрос о выполнении'; + +// Sicherheitsabfrage + +$lng['question']['admin_customer_reallydelete'] = 'Вы уверены, что хотите удалить клиента %s?
    ВНИМАНИЕ! Удалённые данные не смогут быть позже восстановлены! После этого шага Вам ещё будет необходимо от руки удалить данные из файловой системы.'; + +// Wollen Sie den Kunden %s wirklich loeschen?
    ACHTUNG! Alle Daten gehen unwiederruflich verloren! Nach dem Vorgang muessen Sie die Daten aus dem Dateisystem noch manuell entfernen. + +$lng['question']['admin_domain_reallydelete'] = 'Вы уверены, что хотите удалить домен %s?'; + +// Wollen Sie die Domain %s wirklich loeschen? + +$lng['question']['admin_domain_reallydisablesecuritysetting'] = 'Вы уверены, что хотите отключить эти важные для безопасности настройки (OpenBasedir и/или SafeMode)?'; + +// ollen Sie diese wichtigen Sicherheitseinstellungen (OpenBasedir und/oder SafeMode) wirklich deaktivieren? + +$lng['question']['admin_admin_reallydelete'] = 'Вы уверены, что хотите удалить админа %s?
    Все клиенты и домены будут переданы главному админу.'; + +// Wollen Sie den Admin %s wirklich loeschen?
    Alle Kunden und Domains werden dem Hauptadmin zugeteilt. + +$lng['question']['admin_template_reallydelete'] = 'Вы уверены, что хотите удалить шаблон %s?'; + +// Wollen Sie die Vorlage \'%s\' wirklich loeschen? + +$lng['question']['domains_reallydelete'] = 'Вы уверены, что хотите удалить домен %s?'; + +// Wollen Sie die Domain %s wirklich loeschen? + +$lng['question']['email_reallydelete'] = 'Вы уверены, что хотите удалить eMail-адрес %s?'; + +// Wollen Sie die eMail-Adresse %s wirklich loeschen? + +$lng['question']['email_reallydelete_account'] = 'Вы уверены, что хотите удалить аккаунт %s?'; + +// Wollen Sie das Konto von %s wirklich loeschen? + +$lng['question']['email_reallydelete_forwarder'] = 'Вы уверены, что хотите удалить пересылку %s?'; + +// Wollen Sie die Weiterleitung %s wirklich loeschen? + +$lng['question']['extras_reallydelete'] = 'Вы уверены, что хотите удалить защиту каталога (директории) для %s?'; + +// Wollen Sie den Verzeichnisschutz fuer %s wirklich loeschen? + +$lng['question']['extras_reallydelete_pathoptions'] = 'Вы уверены, что хотите удалить настройки для пути %s?'; + +// Wollen Sie die Optionen fuer den Pfad %s wirklich loeschen? + +$lng['question']['ftp_reallydelete'] = 'Вы уверены, что хотите удалить FTP-аккаунт %s?'; + +// Wollen Sie den FTP-Account %s wirklich loeschen? + +$lng['question']['mysql_reallydelete'] = 'Вы уверены, что хотите удалить базу данных %s?
    ВНИМАНИЕ! Все данные будут безвозвратно потеряны!'; + +// Wollen Sie die Datenbank %s wirklich loeschen?
    ACHTUNG! Alle Daten gehen unwiederruflich verloren! + +$lng['question']['admin_configs_reallyrebuild'] = 'Вы уверены, что хотите заново создать Ваши файлы настройки для Apache и Bind?'; + +// Wollen Sie wirklich Ihre Apache und Bind Konfigurationsdateien neu erstellen lassen? + +/** + * Mails + */ + +$lng['mails']['pop_success']['mailbody'] = 'Здравствуйте!\n\nВаш eMail-аккаунт {USERNAME}\nготов к пользованию.\n\nЭто автоматически созданное сообщение,\nпожалуйста не отвечайте на него.\n\nАдминистрация'; + +// Hallo,\n\nihr eMail-Konto {USERNAME}\nwurde erfolgreich eingerichtet.\n\nDies ist eine automatisch generierte\neMail, bitte antworten Sie nicht auf\ndiese Mitteilung.\n\nIhr SysCP-Team + +$lng['mails']['pop_success']['subject'] = 'eMail-аккаунт готов к пользованию'; + +// eMail-Konto erfolgreich eingerichtet + +$lng['mails']['createcustomer']['mailbody'] = 'Здравствуйте, {FIRSTNAME} {NAME}!\n\nДанные Вашего аккаунта:\n\nИмя пользователя: {USERNAME}\nПароль: {PASSWORD}\n\nЭто автоматически созданное сообщение,\nпожалуйста не отвечайте на него.\n\nС уважением,\nАдминистрация'; + +// Hallo {FIRSTNAME} {NAME},\n\nhier ihre Accountinformationen:\n\nBenutzername: {USERNAME}\nPassword: {PASSWORD}\n\nVielen Dank,\nIhr SysCP-Team + +$lng['mails']['createcustomer']['subject'] = 'Данные к аккаунту'; + +// Accountinformationen + +/** + * Admin + */ + +$lng['admin']['overview'] = 'Обзор'; + +// uebersicht + +$lng['admin']['ressourcedetails'] = 'Использованные ресурсы'; + +// Verbrauchte Ressourcen + +$lng['admin']['systemdetails'] = 'Подробности системы'; + +// Systemdetails + +$lng['admin']['syscpdetails'] = 'Подробности SysCP'; + +// SysCP-Details + +$lng['admin']['installedversion'] = 'Установленная версия'; + +// Installierte Version + +$lng['admin']['latestversion'] = 'Последняя версия'; + +// Neueste Version + +$lng['admin']['lookfornewversion']['clickhere'] = 'Запросить через веб-сервис'; + +// per Webservice abfragen + +$lng['admin']['lookfornewversion']['error'] = 'Ошибка при запросе'; + +// Fehler beim Auslesen + +$lng['admin']['resources'] = 'Ресурсы'; + +// Ressourcen + +$lng['admin']['customer'] = 'Клиент'; + +// Kunde + +$lng['admin']['customers'] = 'Клиенты'; + +// Kunden + +$lng['admin']['customer_add'] = 'Добавить клиента'; + +// Kunden anlegen + +$lng['admin']['customer_edit'] = 'Изменить данные клиента'; + +// Kunden bearbeiten + +$lng['admin']['domains'] = 'Домены'; + +// Domains + +$lng['admin']['domain_add'] = 'Добавить домен'; + +// Domain anlegen + +$lng['admin']['domain_edit'] = 'Изменить домен'; + +// Domain bearbeiten + +$lng['admin']['subdomainforemail'] = 'Поддомены в качестве eMail-доменов'; + +// Subdomains als E-Mail-Domains + +$lng['admin']['admin'] = 'Админ'; + +// Admin + +$lng['admin']['admins'] = 'Админы'; + +// Admins + +$lng['admin']['admin_add'] = 'Добавить админа'; + +// Admin anlegen + +$lng['admin']['admin_edit'] = 'Изменить данные админа'; + +// Admin bearbeiten + +$lng['admin']['customers_see_all'] = 'Может видеть всех клиентов?'; + +// Kann alle Kunden sehen? + +$lng['admin']['domains_see_all'] = 'Может видеть все домены?'; + +// Kann alle Domains sehen? + +$lng['admin']['change_serversettings'] = 'Может менять настройки сервера?'; + +// Kann Servereinstellungen bearbeiten? + +$lng['admin']['server'] = 'Сервер'; + +// Server + +$lng['admin']['serversettings'] = 'Настройки сервера'; + +// Einstellungen + +$lng['admin']['rebuildconf'] = 'Заново создать настройки'; + +// Configs neuschreiben + +$lng['admin']['stdsubdomain'] = 'Поддомен по умолчанию'; + +// Standardsubdomain + +$lng['admin']['stdsubdomain_add'] = 'Добавить поддомен по умолчанию'; + +// Standardsubdomain anlegen + +$lng['admin']['deactivated'] = 'Доступ закрыт'; + +// Gesperrt + +$lng['admin']['deactivated_user'] = 'Закрыть доступ пользователю'; + +// Benutzer sperren + +$lng['admin']['sendpassword'] = 'Послать пароль'; + +// Passwort zusenden + +$lng['admin']['ownvhostsettings'] = 'Собственные vHost-настройки'; + +// Eigene vHost-Einstellungen + +$lng['admin']['configfiles']['serverconfiguration'] = 'Настройки служб'; + +// Konfiguration + +$lng['admin']['configfiles']['files'] = 'Файлы настроек: Пожалуйста измените соответствующие файлы настроек
    или добавьте новые, если они не существуют, со следующим содержимым.
    Обратите внимание: MySQL-пароль не был заменён из соображений безопасности.
    Пожалуйста замените вручную "MYSQL_PASSWORD" на соответствующий пароль.
    Если Вы его не помните, посмотрите в файле "lib/userdata.inc.php".'; + +// Konfigurationsdateien: Bitte aendern Sie die entsprechenden Konfigurationsdateien
    oder legen sie mit dem folgenden Inhalt neu an, falls sie nicht existieren.
    Bitte beachten Sie: Das MySQL-Passwort wurde aus Sicherheitsgruenden nicht ersetzt.
    Bitte ersetzen Sie "MYSQL_PASSWORD" manuell durch das entsprechende Passwort.
    Falls Sie es vergessen haben sollten, finden Sie es in der Datei "lib/userdata.inc.php". + +$lng['admin']['configfiles']['commands'] = 'Команды: Пожалуйста выполните следующие команды в shell.'; + +// Kommandos: Bitte fuehren Sie die folgenden Kommandos in einer Shell aus. + +$lng['admin']['configfiles']['restart'] = 'Перезагрузка: Пожалуйста выполните следующие команды в shell для
    перезагрузки файлов настроек.'; + +// Neustart: Bitte fuehren Sie die folgenden Kommandos zum Neuladen
    der Konfigurationsdateuen in einer Shell aus. + +$lng['admin']['templates']['templates'] = 'Шаблоны'; + +// Vorlagen + +$lng['admin']['templates']['template_add'] = 'Добавить шаблон'; + +// Vorlage hinzufuegen + +$lng['admin']['templates']['template_edit'] = 'Изменить шаблон'; + +// Vorlage bearbeiten + +$lng['admin']['templates']['action'] = 'Операция'; + +// Aktion + +$lng['admin']['templates']['email'] = 'E-Mail'; + +// E-Mail + +$lng['admin']['templates']['subject'] = 'Тема'; + +// Betreff + +$lng['admin']['templates']['mailbody'] = 'Текст сообщения'; + +// Mailtext + +$lng['admin']['templates']['createcustomer'] = 'Приветствие нового клиента'; + +// Willkommensmail fuer neue Kunden + +$lng['admin']['templates']['pop_success'] = 'Приветствие для новых eMail-аккаунтов'; + +// Willkommensmail fuer neue E-Mail Konten + +$lng['admin']['templates']['template_replace_vars'] = 'Переменные, которые будут заменены в шаблонах:'; + +// Variablen die in den Vorlagen ersetzt werden: + +$lng['admin']['templates']['FIRSTNAME'] = 'Будет заменено именем клиента.'; + +// Wird mit dem Vornamen des Kunden ersetzt. + +$lng['admin']['templates']['NAME'] = 'Будет заменено фамилией клиента.'; + +// Wird mit dem Namen des Kunden ersetzt. + +$lng['admin']['templates']['USERNAME'] = 'Будет заменено именем пользователя нового аккаунта.'; + +// Wird mit dem Benutzernamen des neuen Kundenaccounts ersetzt. + +$lng['admin']['templates']['PASSWORD'] = 'Будет заменено паролем нового аккаунта.'; + +// Wird mit dem Passwort des neuen Kundenaccounts ersetzt. + +$lng['admin']['templates']['EMAIL'] = 'Будет заменено адресом нового POP3/IMAP-аккаунта.'; + +// Wird mit der Adresse des neuen POP3/IMAP Kontos ersetzt. + +/** + * Serversettings + */ + +$lng['serversettings']['session_timeout']['title'] = 'Срок действия сессии'; + +// Session Timeout + +$lng['serversettings']['session_timeout']['description'] = 'Как долго пользовать должен быть не активен, чтобы сессия стала недействительной? (в секундах)'; + +// Wie lange muss ein Benutzer inaktiv sein, damit die Session ungueltig wird? (Sekunden) + +$lng['serversettings']['accountprefix']['title'] = 'Приставка клиента'; + +// Kundenprefix + +$lng['serversettings']['accountprefix']['description'] = 'Какая приставка должна быть у аккаунтов клиентов?'; + +// Welchen Prefix sollen die Kundenaccounts haben? + +$lng['serversettings']['mysqlprefix']['title'] = 'Приставка для SQL'; + +// SQL-Prefix + +$lng['serversettings']['mysqlprefix']['description'] = 'Какая приставка должна быть у MySQL-аккаунтов?'; + +// Welchen Prefix sollen die MySQL-Accounts haben? + +$lng['serversettings']['ftpprefix']['title'] = 'Приставка для FTP'; + +// FTP-Prefix + +$lng['serversettings']['ftpprefix']['description'] = 'Какая приставка должна быть у FTP-аккаунтов?'; + +// Welchen Prefix sollen die FTP-Accounts haben? + +$lng['serversettings']['documentroot_prefix']['title'] = 'Каталог (директория) для документов'; + +// Documentdirectory + +$lng['serversettings']['documentroot_prefix']['description'] = 'Куда помещать данные клиентов?'; + +// Wo sollen alle Kunden liegen? + +$lng['serversettings']['logfiles_directory']['title'] = 'Каталог (директория) для протоколов'; + +//Logfilesdirectory + +$lng['serversettings']['logfiles_directory']['description'] = 'Куда помещать все протоколы (лог-файлы)?'; + +// Wo sollen alle Logfiles liegen? + +$lng['serversettings']['ipaddress']['title'] = 'IP-адрес'; + +// IP-Adresse + +$lng['serversettings']['ipaddress']['description'] = 'Какой у сервера адрес IP?'; + +// Welche IP-Adresse hat der Server? + +$lng['serversettings']['hostname']['title'] = 'Имя хоста'; + +// Hostname + +$lng['serversettings']['hostname']['description'] = 'Какое у сервера имя хоста (hostname)?'; + +// Welchen Hostname hat der Server? + +$lng['serversettings']['apachereload_command']['title'] = 'Команда для перезагрузки Apache'; + +// Apache-Reload-Command + +$lng['serversettings']['apachereload_command']['description'] = 'Как называется скрипт для перезагрузки Apache?'; + +// Wie heisst das Skript zum reloaden des Apache? + +$lng['serversettings']['bindconf_directory']['title'] = 'Каталог (директория) для настрек Bind'; + +// Bind-Config-Directory + +$lng['serversettings']['bindconf_directory']['description'] = 'Где находятся файлы настроек Bind?'; + +// Wo liegen die Bind-Konfigdateien? + +$lng['serversettings']['bindreload_command']['title'] = 'Команда для перезагрузки Bind'; + +// Bind-Reload-Command + +$lng['serversettings']['bindreload_command']['description'] = 'Как называется скрипт для перезагрузки Bind?'; + +// Wie heisst das Skript zum reloaden des Bind? + +$lng['serversettings']['binddefaultzone']['title'] = 'Зона по умолчанию для Bind'; + +// Bind-Default-Zone + +$lng['serversettings']['binddefaultzone']['description'] = 'Как называется стандартная зона для всех доменов?'; + +// Wie heisst die Default-Zone fuer alle Domains? + +$lng['serversettings']['vmail_uid']['title'] = 'Mail-Uid'; + +// Mails-Uid + +$lng['serversettings']['vmail_uid']['description'] = 'Какую UID должна использовать почтовая служба?'; + +// Welche UID sollen die Mails haben? + +$lng['serversettings']['vmail_gid']['title'] = 'Mail-Gid'; + +// Mails-Gid + +$lng['serversettings']['vmail_gid']['description'] = 'Какую GID должна использовать почтовая служба?'; + +// Welche GID sollen die Mails haben? + +$lng['serversettings']['vmail_homedir']['title'] = 'Каталог почтовой службы'; + +// Mails-Homedir + +$lng['serversettings']['vmail_homedir']['description'] = 'Где должна храниться электронная почта (eMail)?'; + +// Wo sollen die Mails liegen? + +$lng['serversettings']['adminmail']['title'] = 'Адрес отправителя'; + +// Absenderadresse + +$lng['serversettings']['adminmail']['description'] = 'Каким должен быть адрес отправителя для писем от системы?'; + +// Wie ist die Absenderadresse fuer eMails aus dem Panel? + +$lng['serversettings']['phpmyadmin_url']['title'] = 'phpMyAdmin-URL'; + +// phpMyAdmin-URL + +$lng['serversettings']['phpmyadmin_url']['description'] = 'Где находится phpMyAdmin? (начинается с http://)'; + +// Wo liegt der phpMyAdmin? (muss mit http:// beginnen) + +$lng['serversettings']['webmail_url']['title'] = 'WebMail-URL'; + +// WebMail-URL + +$lng['serversettings']['webmail_url']['description'] = 'Где находится WebMail? (начинается с http://)'; + +// Wo liegt das WebMail? (muss mit http:// beginnen) + +$lng['serversettings']['webftp_url']['title'] = 'WebFTP-URL'; + +// WebFTP-URL + +$lng['serversettings']['webftp_url']['description'] = 'Где находится WebFTP? (начинается с http://)'; + +// Wo liegt das WebFTP? (muss mit http:// beginnen) + +$lng['serversettings']['language']['description'] = 'Какой язык является языком по умолчанию?'; + +// Welche Sprache ist ihre Standardsprache? + +$lng['serversettings']['maxloginattempts']['title'] = 'Макс. попыток входа'; + +// Max Loginversuche + +$lng['serversettings']['maxloginattempts']['description'] = 'Максимальное количество попыток входа до отключения аккаунта.'; + +// Maximale Anzahl an Loginversuchen bis der Account deaktiviert wird. + +$lng['serversettings']['deactivatetime']['title'] = 'Время отключения'; + +// Laenge der Deaktivierung + +$lng['serversettings']['deactivatetime']['description'] = 'Время (в сек.), на которое отключается аккаунт.'; + +// Zeitraum (in sek.) fuer den der Account deaktiviert ist. + +$lng['serversettings']['pathedit']['title'] = 'Способ ввода пути'; + +// Pfad-Eingabemethode + +$lng['serversettings']['pathedit']['description'] = 'Выбирать путь в меню, или набирать вручную?'; + +// Soll ein Pfad via Dropdown-Menue ausgewaehlt oder manuell eingegeben werden koennen. + +/** + * CHANGED BETWEEN 1.2.12 and 1.2.13 + */ + +$lng['mysql']['description'] = 'Здесь вы можете создавать и удалять базы данных MySQL.
    Базы данных готовы к пользованию сразу после сохранения изменений.
    В меню Вы найдёте ссылку на phpMyAdmin, которым вы можете обрабатывать базы данных.

    Данные для доступа из скриптов PHP: (Текст с наклоном замените соответствующими записями!)
    Имя хоста:
    Имя пользователя: имя базы данных
    Пароль: выбранный пароль
    База данных: Имя базы данных'; + +// Hier koennen Sie MySQL-Datenbanken anlegen und loeschen.
    Die aenderungen werden sofort wirksam und die Datenbanken sofort benutzbar.
    Im Menue finden Sie einen Link zum phpMyAdmin, mit dem Sie Ihre Datenbankeninhalte einfach bearbeiten koennen.

    Die Zugangsdaten von php-Skripten sind wie folgt: (Die Angaben in kursiver Schrift sind durch die jeweiligen Eintraege zu ersetzen!)
    Hostname:
    Benutzername: Datenbankname
    Passwort: das gewaehlte Passwort
    Datenbank: Datenbankname + +/** + * ADDED BETWEEN 1.2.12 and 1.2.13 + */ + +$lng['admin']['cronlastrun'] = 'Последний крон (cron)'; + +// Last Cron + +$lng['serversettings']['paging']['title'] = 'Кол-во записей на страницу'; + +// Eintraege pro Seite + +$lng['serversettings']['paging']['description'] = 'Сколько записей показывать на одной странице? (0 = отключить разбивание на страницы)'; + +// Wieviele Eintraege sollen auf einer Seite gezeigt werden? (0 = Paging deaktivieren) + +$lng['error']['ipstillhasdomains'] = 'Комбинация IP и порта, которую вы хотите удалить, ещё прописана для минимум одного домена. Пожалуйста измените у доменов комбинацию IP и порта на другую, чтобы можно было удалить эту.'; + +// Die IP/Port Kombination, die Sie loeschen wollen ist noch bei einer oder mehreren Domains eingetragen. Bitte aendern sie die Domains vorher auf eine andere IP/Port Kombination um diese loeschen zu koennen. + +$lng['error']['cantdeletedefaultip'] = 'Вы не можете удалить стандартную для посредников комбинацию IP и порта. Пожулуйста установите другую комбинацию IP и порта как "по умолчанию", чтобы можно было удалить эту..'; + +// Sie koennen die Standard IP/Port Kombination fuer Reseller nicht loeschen. Bitte setzen Sie eine andere IP/Port Kombination als Standard um diese loeschen zu koennen. + +$lng['error']['cantdeletesystemip'] = 'Вы не можете удалить последний адрес IP в системе. Создайте новую комбинацию IP и порта для системного IP или измените IP системы.'; + +// Sie koennen die letzte System IP nicht loeschen. Entweder legen Sie eine neue IP/Port Kombination als Systemeinstellung an oder aendern die System IP. + +$lng['error']['myipaddress'] = '\'IP\''; +$lng['error']['myport'] = '\'порт\''; + +// \'Port\' + +$lng['error']['myipdefault'] = 'Вам необходимо быврать комбинацию IP и порта, которая станет стандартной комбинацией по умолчанию.'; + +// Sie muessen eine IP/Port Kombination auswaehlen, die den Standard defninieren soll. + +$lng['error']['myipnotdouble'] = 'Эта комбинация IP и порта уже существует.'; + +// Diese Kombination aus IP und Post existiert bereits. + +$lng['question']['admin_ip_reallydelete'] = 'Вы уверены, что хотите удалить IP %s?'; + +// Wollen Sie wirklich die IP %s loeschen? + +$lng['admin']['ipsandports']['ipsandports'] = 'IP-адреса и порты'; + +// IPs und Ports + +$lng['admin']['ipsandports']['add'] = 'Добавить комбинацию IP/порт'; + +// IP/Port hinzufuegen + +$lng['admin']['ipsandports']['edit'] = 'Редактировать комбинацию IP/порт'; + +// IP/Port bearbeiten + +$lng['admin']['ipsandports']['ipandport'] = 'IP/порт'; + +// IP/Port + +$lng['admin']['ipsandports']['ip'] = 'IP'; + +// IP + +$lng['admin']['ipsandports']['port'] = 'Порт'; + +// Port + +/** + * ADDED BETWEEN 1.2.13 and 1.2.14 + */ + +$lng['panel']['translator'] = 'Переводчик'; + +// Uebersetzer + +$lng['error']['cantchangesystemip'] = 'Вы не можете удалить последний системный адрес IP. Создайте новую комбинацию IP/порт в качестве системного адреса IP или измените существующий системный адрес IP.'; + +// Sie koennen die letzte System IP nicht loeschen. Entweder legen Sie noch eine neue IP/Port Kombination als Systemeinstellung an oder aendern die System IP. + +$lng['question']['admin_domain_reallydocrootoutofcustomerroot'] = 'Вы уверены, что DocumentRoot этого домена должен находиться вне домашнего каталога (директории) клиента?'; + +// Sind Sie sicher, dass der DocumentRoot dieser Domain ausserhalb des Heimatverzeichnisses des Kunden liegen soll? + +$lng['admin']['memorylimitdisabled'] = 'Отключено'; + +// Deaktiviert + +$lng['error']['loginnameissystemaccount'] = 'Вы не можете создать аккаунт, похожий на системный. Выберите пожалуйста другое имя для аккаунта.'; + +// Sie können keinen Account anlegen, welcher wie ein Systemaccount aussieht. Bitte wählen Sie einen anderen Accountnamen. + +$lng['domain']['openbasedirpath'] = 'Путь OpenBasedir'; + +// OpenBasedir-Pfad + +$lng['domain']['docroot'] = 'Выше указанный путь'; + +// Oben eingegebener Pfad + +$lng['domain']['homedir'] = 'Домашний каталог'; + +// Heimverzeichnis + +$lng['admin']['valuemandatory'] = 'Это поле обязательно для заполнения'; + +// Dieses Feld muss ausgefuellt werden + +$lng['admin']['valuemandatorycompany'] = 'Необходимо заполнить поля "Фамилия" и "Имя" или "Фирма"'; + +// Entweder "Name" und "Vorname" oder "Firma" muss ausgefuellt werden + +$lng['menue']['main']['username'] = 'В системе как: '; + +// Angemeldet als: + +$lng['panel']['urloverridespath'] = 'URL (переписывет путь)'; + +// URL (ueberschreibt Pfad) + +$lng['panel']['pathorurl'] = 'Путь или URL'; + +// Pfad oder URL + +$lng['error']['sessiontimeoutiswrong'] = '"Срок действия сессии" должно являться числовым значением.'; + +// "Session-Timeout" muss ein numerischer Wert sein. + +$lng['error']['maxloginattemptsiswrong'] = '"Макс. попыток входа" должно являться числовым значением.'; + +// "Maximale Loginversuche" muss ein numerischer Wert sein. + +$lng['error']['deactivatetimiswrong'] = '"Время отключения" должно являться числовым значением.'; + +// "Laenge der Deaktivierung" muss numerisch sein. + +$lng['error']['accountprefixiswrong'] = 'Неправильная "приставка клиента".'; + +// Das "Kundenprefix" ist falsch. + +$lng['error']['mysqlprefixiswrong'] = 'Неправильная "Приставка для SQL".'; + +// Das "SQL-Prefix" ist falsch. + +$lng['error']['ftpprefixiswrong'] = 'Неправильная "Приставка для FTP".'; + +// Das "FTP-Prefix" ist falsch. + +$lng['error']['ipiswrong'] = 'Неправильный "IP-адрес". Разрешён только действительный адрес IP.'; + +// Die "IP-Adresse" ist falsch. Es ist nur eine gueltige IP-Adresse erlaubt. + +$lng['error']['vmailuidiswrong'] = '"Mails-UID" должно являться числовым значением.'; + +// Die "Mails-UID" ist falsch. Nur eine numerische UID ist erlaubt. + +$lng['error']['vmailgidiswrong'] = 'Die "Mails-GID" должно являться числовым значением.'; + +// Die "Mails-GID" ist falsch. Nur eine numerische GID ist erlaubt. + +$lng['error']['adminmailiswrong'] = 'Неправильный "Адрес отправителя". Разрешён только действительный E-Mail-адрес'; + +// Die "Absenderadresse" ist fehlerhaft. Es ist nur eine gueltige E-Mail-Adresse erlaubt + +$lng['error']['pagingiswrong'] = 'Настройка "Кол-во записей на страницу" должна иметь числовое значение.'; + +// Die "Eintraege pro Seite"-Einstellung ist falsch. Nur numerische Zeichen sind erlaubt. + +$lng['error']['phpmyadminiswrong'] = '"phpMyAdmin-URL" не является действительным URL.'; + +// Die "phpMyAdmin-URL" ist keine gültige URL. + +$lng['error']['webmailiswrong'] = '"WebMail-URL" не является действительным URL.'; + +// Die "WebMail-URL" ist keine gueltige URL. + +$lng['error']['webftpiswrong'] = '"WebFTP-URL" не является действительным URL.'; + +// Die "WebFTP-URL" ist keine gueltige URL. + +$lng['domains']['hasaliasdomains'] = 'Имеет alias-домен(ы)'; + +// Hat Aliasdomain(s) + +$lng['serversettings']['defaultip']['title'] = 'IP/порт по умолчанию'; + +// Standard IP/Port + +$lng['serversettings']['defaultip']['description'] = 'Какая комбинация IP/порт должна быть использована по умолчанию?'; + +// Welche IP/Port-Kombination soll standardmaessig verwendet werden? + +$lng['domains']['statstics'] = 'Статистика'; + +// Statistiken + +$lng['panel']['ascending'] = 'по возрастанию'; + +// aufsteigend + +$lng['panel']['decending'] = 'по убыванию'; + +// absteigend + +$lng['panel']['search'] = 'Поиск'; + +// Suche + +$lng['panel']['used'] = 'в пользовании'; + +// benutzt + +$lng['error']['stringformaterror'] = 'Значение поля "%s" не соответствует ожидаемому формату.'; + +// Der Wert des Feldes "%s" ist nicht im erwarteten Format. + +/** + * ADDED BETWEEN 1.2.14 and 1.2.15 + */ + +$lng['admin']['serversoftware'] = 'Программное обеспечение сервера'; + +// Serversoftware + +$lng['admin']['phpversion'] = 'Версия PHP'; + +// PHP-Version + +$lng['admin']['phpmemorylimit'] = 'Ограничение памяти для PHP'; + +// PHP-Memory-Limit + +$lng['admin']['mysqlserverversion'] = 'Версия сервера MySQL'; + +// MySQL Server Version + +$lng['admin']['mysqlclientversion'] = 'Версия клиента MySQL'; + +// MySQL Client Version + +$lng['admin']['webserverinterface'] = 'Интерфейс вебсервера'; + +// Webserver Interface + + + +?> \ No newline at end of file diff --git a/lng/slovak.lng.php b/lng/slovak.lng.php new file mode 100644 index 0000000000..8f1c252fcd --- /dev/null +++ b/lng/slovak.lng.php @@ -0,0 +1,464 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Language + * @version $Id: slovak.lng.php 2692 2009-03-27 18:04:47Z flo $ + */ + +/** + * Global + */ + +$lng['translator'] = 'Drakeman'; +$lng['panel']['edit'] = 'Upravi»'; +$lng['panel']['delete'] = 'Zmaza»'; +$lng['panel']['create'] = 'Vytvori»'; +$lng['panel']['save'] = 'Ulo¾i»'; +$lng['panel']['yes'] = 'Áno'; +$lng['panel']['no'] = 'Nie'; +$lng['panel']['emptyfornochanges'] = 'Ak políèko nevyplníte, ostane bez zmien'; +$lng['panel']['emptyfordefault'] = 'Ak políèko nevyplníte, ostane nastavené ako predvolené'; +$lng['panel']['path'] = 'Cesta'; +$lng['panel']['toggle'] = 'Prepnú»'; +$lng['panel']['next'] = 'Ïal¹ie'; +$lng['panel']['dirsmissing'] = 'Nepodarilo sa nájs» uvedený adresár!'; + +/** + * Login + */ + +$lng['login']['username'] = 'U¾ívateµské meno'; +$lng['login']['password'] = 'Heslo'; +$lng['login']['language'] = 'Jazyk'; +$lng['login']['login'] = 'Prihlási»'; +$lng['login']['logout'] = 'Odlási»'; +$lng['login']['profile_lng'] = 'Jazyk profilu'; + +/** + * Customer + */ + +$lng['customer']['documentroot'] = 'Domovský adresár (root)'; +$lng['customer']['name'] = 'Priezvisko'; +$lng['customer']['firstname'] = 'Meno'; +$lng['customer']['company'] = 'Spoloènos»'; +$lng['customer']['street'] = 'Ulica'; +$lng['customer']['zipcode'] = 'PSÈ'; +$lng['customer']['city'] = 'Mesto'; +$lng['customer']['phone'] = 'Tel.'; +$lng['customer']['fax'] = 'Fax'; +$lng['customer']['email'] = 'E-mail'; +$lng['customer']['customernumber'] = 'ID klienta'; +$lng['customer']['diskspace'] = 'Diskový priestor (MB)'; +$lng['customer']['traffic'] = 'Traffic/prenos (GB)'; +$lng['customer']['mysqls'] = 'MySQL-Databázy'; +$lng['customer']['emails'] = 'E-mailové adresy'; +$lng['customer']['accounts'] = 'E-mailové úèty'; +$lng['customer']['forwarders'] = 'E-mailové presmerovania'; +$lng['customer']['ftps'] = 'FTP-úèty'; +$lng['customer']['subdomains'] = 'SubDoména(y)'; +$lng['customer']['domains'] = 'Doména(y)'; +$lng['customer']['unlimited'] = 'Neobmedzené'; + +/** + * Customermenue + */ + +$lng['menue']['main']['main'] = 'Hlavné menu'; +$lng['menue']['main']['changepassword'] = 'Zmeni» heslo'; +$lng['menue']['main']['changelanguage'] = 'Zmeni» jazyk'; +$lng['menue']['email']['email'] = 'E-mail'; +$lng['menue']['email']['emails'] = 'Adresy'; +$lng['menue']['email']['webmail'] = 'WebMail'; +$lng['menue']['mysql']['mysql'] = 'MySQL'; +$lng['menue']['mysql']['databases'] = 'Databázy'; +$lng['menue']['mysql']['phpmyadmin'] = 'phpMyAdmin'; +$lng['menue']['domains']['domains'] = 'Domény'; +$lng['menue']['domains']['settings'] = 'Nastavenia'; +$lng['menue']['ftp']['ftp'] = 'FTP'; +$lng['menue']['ftp']['accounts'] = 'Úèty'; +$lng['menue']['ftp']['webftp'] = 'WebFTP'; +$lng['menue']['extras']['extras'] = '©peciálne'; +$lng['menue']['extras']['directoryprotection'] = 'Ochrana adresárov'; +$lng['menue']['extras']['pathoptions'] = 'Mo¾nosti cesty'; + +/** + * Index + */ + +$lng['index']['customerdetails'] = 'Detaily klienta'; +$lng['index']['accountdetails'] = 'Detaily úètu'; + +/** + * Change Password + */ + +$lng['changepassword']['old_password'] = 'Staré heslo'; +$lng['changepassword']['new_password'] = 'Nové heslo'; +$lng['changepassword']['new_password_confirm'] = 'Potvrïte nové heslo'; +$lng['changepassword']['new_password_ifnotempty'] = 'Nové heslo (prázdne = bez zmeny)'; +$lng['changepassword']['also_change_ftp'] = ' Tie¾ zmeni» heslo FTP úètu'; + +/** + * Domains + */ + +$lng['domains']['description'] = 'Tu mô¾ete nastavi» a vytvori» subdomény a zmeni» ich cestu k adresáru, kde majú smerova».
    Systém bude potrebova» niekoµko málo minút na uskutoènenie zmien (pribli¾ne 5 min).'; +$lng['domains']['domainsettings'] = 'Nastavenia domény'; +$lng['domains']['domainname'] = 'Názov domény'; +$lng['domains']['subdomain_add'] = 'Vytvori» subdoménu'; +$lng['domains']['subdomain_edit'] = 'Upravi» subdoménu'; +$lng['domains']['wildcarddomain'] = 'Vytvori» doménu ako wildcarddomain
    (v¹etky subdomény smerujú do root adresára hlavnej domény)?'; +$lng['domains']['aliasdomain'] = 'Alias pre doménu'; +$lng['domains']['noaliasdomain'] = '®iaden alias pre doménu'; + +/** + * E-mails + */ + +$lng['emails']['description'] = 'Tu mô¾ete vytvori» a zmeni» Va¹e E-mailové adresy.
    E-mail úèet je ako Va¹a po¹tová schránka v dome. Ak Vám niekto po¹le E-mail, bude vlo¾ený do Vá¹ho úètu.

    Pre stiahnutie Va¹ích E-mailov pou¾ite do Vá¹ho mailového programu nasledujúce nastavenia: (Informácie oznaèené lomeným písmom, musia by» zmenené na Va¹e prístupové údaje!)
    Názov hosta: Názov domény
    U¾ívateµské meno: Názov úètu / E-mailová adresa
    Heslo: heslo, ktoré ste si zvolili'; +$lng['emails']['emailaddress'] = 'E-mailová adresa'; +$lng['emails']['emails_add'] = 'Vytvori» E-mailovú adresu'; +$lng['emails']['emails_edit'] = 'Upravi» E-mailovú adresu'; +$lng['emails']['catchall'] = 'Doménový kô¹'; +$lng['emails']['iscatchall'] = 'Definova» ako doménový kô¹?'; +$lng['emails']['account'] = 'Úèet'; +$lng['emails']['account_add'] = 'Vytvori» úèet'; +$lng['emails']['account_delete'] = 'Vymaza» úèet'; +$lng['emails']['from'] = 'Zdroj'; +$lng['emails']['to'] = 'Cieµ'; +$lng['emails']['forwarders'] = 'Presmerovania'; +$lng['emails']['forwarder_add'] = 'Vytvori» presmerovanie'; + +/** + * FTP + */ + +$lng['ftp']['description'] = 'Tu mô¾ete vytvori» a zmeni» Va¹e FTP úèty.
    Zmeny sú okam¾ité a úèty mô¾ete pou¾íva» ihneï.'; +$lng['ftp']['account_add'] = 'Vytvori» FTP úèet'; + +/** + * MySQL + */ + +$lng['mysql']['databasename'] = 'U¾ívateµ/Názov databázy'; +$lng['mysql']['databasedescription'] = 'Popis databázy'; +$lng['mysql']['database_create'] = 'Vytvori» databázu'; + +/** + * Extras + */ + +$lng['extras']['description'] = 'Tu mô¾ete pridáva» ïaµ¹ie doplnky, napríklad ochranu súborov.
    Systém bude potrebova» niekoµko málo minút na uskutoènenie zmien (pribli¾ne 5 min).'; +$lng['extras']['directoryprotection_add'] = 'Prida» ochranu adresára'; +$lng['extras']['view_directory'] = 'Zobrazi» obsah adresára'; +$lng['extras']['pathoptions_add'] = 'Prida» mo¾nosti cesty'; +$lng['extras']['directory_browsing'] = 'Prezeranie obsahu adresáru'; +$lng['extras']['pathoptions_edit'] = 'Upravi» mo¾nosti cesty'; +$lng['extras']['error404path'] = '404'; +$lng['extras']['error403path'] = '403'; +$lng['extras']['error500path'] = '500'; +$lng['extras']['error401path'] = '401'; +$lng['extras']['errordocument404path'] = 'URL pre Chybový Dokument 404'; +$lng['extras']['errordocument403path'] = 'URL pre Chybový Dokument 403'; +$lng['extras']['errordocument500path'] = 'URL pre Chybový Dokument 500'; +$lng['extras']['errordocument401path'] = 'URL pre Chybový Dokument 401'; + +/** + * Errors + */ + +$lng['error']['error'] = 'Chyba'; +$lng['error']['directorymustexist'] = 'Adresár %s musí existova». Prosím, vytvorte ho pou¾itím FTP klienta.'; +$lng['error']['filemustexist'] = 'Súbor %s musí existova».'; +$lng['error']['allresourcesused'] = 'U¾ ste pou¾ili v¹etky Va¹e zdroje (mo¾nosti).'; +$lng['error']['domains_cantdeletemaindomain'] = 'Nemô¾ete vymaza» doménu, ktorá sa pou¾íva ako E-mailová doména.'; +$lng['error']['domains_canteditdomain'] = 'Nemô¾ete upravi» túto doménu. Bola zablokovaná admininistrátorom.'; +$lng['error']['domains_cantdeletedomainwithemail'] = 'Nemô¾ete vymaza» doménu, ktorá sa pou¾íva ako E-mailová doména. Najskôr zma¾te v¹etky E-mailové adresy.'; +$lng['error']['firstdeleteallsubdomains'] = 'Pred vytvorením wildcard domény najskôr musíte vymaza» v¹etky subdomény.'; +$lng['error']['youhavealreadyacatchallforthisdomain'] = 'Pre túto doménu ste u¾ doménový kô¹ nadefinovali.'; +$lng['error']['ftp_cantdeletemainaccount'] = 'Nemô¾ete vymaza» Vá¹ hlavný FTP úèet'; +$lng['error']['login'] = 'U¾ívateµské meno alebo heslo, ktoré ste zadali je nesprávne. Prosím, skúste znovu!'; +$lng['error']['login_blocked'] = 'Tento úèet bol suspendovaný z dôvodu veµkého mno¾sta chybových prihlasení.
    Prosím, skúste znovu za ' . $settings['login']['deactivatetime'] . ' sekúnd.'; +$lng['error']['notallreqfieldsorerrors'] = 'Nevyplnili ste v¹etky polia, alebo sú niektoré nesprávne.'; +$lng['error']['oldpasswordnotcorrect'] = 'Stará heslo nie je správne.'; +$lng['error']['youcantallocatemorethanyouhave'] = 'Nemô¾ete vymedzi» viac prostiedkov ako sú povolené pre Vás.'; +$lng['error']['mustbeurl'] = 'Nezadali ste správu alebo kompletnú URL (napr. http://vasa_domena.tlk/error404.htm)'; +$lng['error']['invalidpath'] = 'Nevybrali ste správu URL (mo¾no je problém so zoznamom adresárov)'; +$lng['error']['stringisempty'] = 'Chýbajúce vstupné pole'; +$lng['error']['stringiswrong'] = 'Nesprávne vstupné pole'; +$lng['error']['myloginname'] = '\'' . $lng['login']['username'] . '\''; +$lng['error']['mypassword'] = '\'' . $lng['login']['password'] . '\''; +$lng['error']['oldpassword'] = '\'' . $lng['changepassword']['old_password'] . '\''; +$lng['error']['newpassword'] = '\'' . $lng['changepassword']['new_password'] . '\''; +$lng['error']['newpasswordconfirm'] = '\'' . $lng['changepassword']['new_password_confirm'] . '\''; +$lng['error']['newpasswordconfirmerror'] = 'Nové a potvrdzujúce heslo sa nezhodujú'; +$lng['error']['myname'] = '\'' . $lng['customer']['name'] . '\''; +$lng['error']['myfirstname'] = '\'' . $lng['customer']['firstname'] . '\''; +$lng['error']['emailadd'] = '\'' . $lng['customer']['email'] . '\''; +$lng['error']['mydomain'] = '\'Domain\''; +$lng['error']['mydocumentroot'] = '\'Documentroot\''; +$lng['error']['loginnameexists'] = 'Prihlasovacie meno %s u¾ existuje'; +$lng['error']['emailiswrong'] = 'E-mailová adresa obsahuje %s obsahuje neplatné znaky, alebo je nekompletná'; +$lng['error']['loginnameiswrong'] = 'Prihlasovacie meno %s obsahuje neplatné znaky'; +$lng['error']['userpathcombinationdupe'] = 'Kombinácia u¾ívateµského mena a cesty u¾ existuje'; +$lng['error']['patherror'] = 'V¹eobecná chyba! Cesta nemô¾e by» prázdna'; +$lng['error']['errordocpathdupe'] = 'Mo¾nos» pre cestu %s u¾ existuje'; +$lng['error']['adduserfirst'] = 'Prosím, najskor vytvorte u¾ívateµa'; +$lng['error']['domainalreadyexists'] = 'Doména %s je u¾ priradená u¾ívateµovi'; +$lng['error']['nolanguageselect'] = 'Nebol vybraný jazyk.'; +$lng['error']['nosubjectcreate'] = 'Pre túto E-mailovú ¹ablónu musíte zadefinova» tému.'; +$lng['error']['nomailbodycreate'] = 'Pre túto E-mailovú ¹ablónu musíte zadefinova» text E-mailu.'; +$lng['error']['templatenotfound'] = '©ablóna nebola nájdená.'; +$lng['error']['alltemplatesdefined'] = 'Nemô¾ete definova» viac ¹ablón. V¹etky jazyky sú u¾ podporované.'; +$lng['error']['wwwnotallowed'] = 'www nie je povolené pre subdomény.'; +$lng['error']['subdomainiswrong'] = 'Subdoména obsahuje %s neplatné znaky.'; +$lng['error']['domaincantbeempty'] = 'Názov domény nemô¾e by» prázdny.'; +$lng['error']['domainexistalready'] = 'Doména %s u¾ existuje.'; +$lng['error']['domainisaliasorothercustomer'] = 'Zvolený alias domény je buï sám doménový alias alebo patrí inému klientovi.'; +$lng['error']['emailexistalready'] = 'E-maolová adresa %s u¾ existuje.'; +$lng['error']['maindomainnonexist'] = 'Hlavná doména %s neexistuje.'; +$lng['error']['destinationnonexist'] = 'Prosím, vytvorte Va¹e presmerovanie v polièku \'Cieµ\'.'; +$lng['error']['destinationalreadyexistasmail'] = 'Presmerovanie na %s u¾ existuje s aktívnou E-mail adresou.'; +$lng['error']['destinationalreadyexist'] = 'U¾ ste definovali presmerovanie na %s .'; +$lng['error']['destinationiswrong'] = 'Presmerovanie %s obsahuje neplatný(é) znak(y) alebo je nekompletné.'; +$lng['error']['domainname'] = $lng['domains']['domainname']; + +/** + * Questions + */ + +$lng['question']['question'] = 'Otázky bezpeènosti'; +$lng['question']['admin_customer_reallydelete'] = 'Naozaj chcete zmaza» klienta %s? Nemo¾no vráti» spä»!'; +$lng['question']['admin_domain_reallydelete'] = 'Naozaj chcete zmaza» doménu %s?'; +$lng['question']['admin_domain_reallydisablesecuritysetting'] = 'Naozaj chcete deaktivova» tieto bezbeènostné nastavenias (OpenBasedir a/alebo SafeMode)?'; +$lng['question']['admin_admin_reallydelete'] = 'Naozaj chcete zmaza» admina %s? Ka¾dý klient a doména bude preradená hlavnému administrátorovi.'; +$lng['question']['admin_template_reallydelete'] = 'Naozaj chcete zmaza» ¹ablónu \'%s\'?'; +$lng['question']['domains_reallydelete'] = 'Naozaj chcete zmaza» doménu %s?'; +$lng['question']['email_reallydelete'] = 'Naozaj chcete zmaza» E-mailovú adresu %s?'; +$lng['question']['email_reallydelete_account'] = 'Naozaj chcete zmaza» E-mailový úèet %s?'; +$lng['question']['email_reallydelete_forwarder'] = 'Naozaj chcete zmaza» presmerovanie %s?'; +$lng['question']['extras_reallydelete'] = 'Naozaj chcete zmaza» ochranu adresára pre %s?'; +$lng['question']['extras_reallydelete_pathoptions'] = 'Naozaj chcete zmaza» cestu mo¾ností pre %s?'; +$lng['question']['ftp_reallydelete'] = 'Naozaj chcete zmaza» FTP úèet %s?'; +$lng['question']['mysql_reallydelete'] = 'Naozaj chcete zmaza» databázu %s? Nemo¾no vráti» spä»!'; +$lng['question']['admin_configs_reallyrebuild'] = 'Naozaj chcete pretvori» Va¹e apache a bind (DNS) konfikuraèné súbory?'; + +/** + * Mails + */ + +$lng['mails']['pop_success']['mailbody'] = 'Dobrý deò,\n\nVá¹ E-mail úèet {EMAIL}\nbol úspe¹ne zalo¾ený.\n\nToto je automaticky generovaný E-mail.\n Prosím, neodpovedajte naò!\n\nS pozdravom, Va¹ webhostingový partner Iga s.r.o.'; +$lng['mails']['pop_success']['subject'] = 'E-mailový úèet bol úspe¹ne zalo¾ený'; +$lng['mails']['createcustomer']['mailbody'] = 'Dobrý deò {FIRSTNAME} {NAME},\n\ntu sú Va¹e informácie o úète:\n\nPrihlasovacie meno: {USERNAME}\nHeslo: {PASSWORD}\n\nÏakujeme,\n Iga s.r.o'; +$lng['mails']['createcustomer']['subject'] = 'Informácie o úète'; + +/** + * Admin + */ + +$lng['admin']['overview'] = 'Prehµad'; +$lng['admin']['ressourcedetails'] = 'Pou¾ité prostriedky'; +$lng['admin']['systemdetails'] = 'Systémové údaje'; +$lng['admin']['syscpdetails'] = 'SysCP údaje'; +$lng['admin']['installedversion'] = 'In¹talovaná verzia'; +$lng['admin']['latestversion'] = 'Najnov¹ia verzia'; +$lng['admin']['lookfornewversion']['clickhere'] = 'Vyhµadáva» pomocou webovej slo¾by'; +$lng['admin']['lookfornewversion']['error'] = 'Chyba poèas èítania'; +$lng['admin']['resources'] = 'Prostriedky'; +$lng['admin']['customer'] = 'Klient'; +$lng['admin']['customers'] = 'Klienti'; +$lng['admin']['customer_add'] = 'Vytvori» klienta'; +$lng['admin']['customer_edit'] = 'Upravi» klienta'; +$lng['admin']['domains'] = 'Domény'; +$lng['admin']['domain_add'] = 'Vytvori» doménu'; +$lng['admin']['domain_edit'] = 'Upravi» doménu'; +$lng['admin']['subdomainforemail'] = 'Subdomény ako E-mailové domény'; +$lng['admin']['admin'] = 'Administrátor'; +$lng['admin']['admins'] = 'Administrátori'; +$lng['admin']['admin_add'] = 'Vytvori» administrátora'; +$lng['admin']['admin_edit'] = 'Upravi» administrátora'; +$lng['admin']['customers_see_all'] = 'Mô¾e vidie» v¹etkých klientov?'; +$lng['admin']['domains_see_all'] = 'Mô¾e vidie» v¹etky domény?'; +$lng['admin']['change_serversettings'] = 'Mô¾e meni» nastavenia servra?'; +$lng['admin']['server'] = 'Server'; +$lng['admin']['serversettings'] = 'Nastavenia'; +$lng['admin']['rebuildconf'] = 'Pretvori» konfikuraèné súbory'; +$lng['admin']['stdsubdomain'] = '©tandardné subdomény'; +$lng['admin']['stdsubdomain_add'] = 'Vytvori» ¹tandardnú subdoménu'; +$lng['admin']['deactivated'] = 'Deaktivové'; +$lng['admin']['deactivated_user'] = 'Dektivova» u¾ívateµa'; +$lng['admin']['sendpassword'] = 'Zasla» heslo'; +$lng['admin']['ownvhostsettings'] = 'Vlastné vHost-Nastavenia'; +$lng['admin']['configfiles']['serverconfiguration'] = 'Nastavenia'; +$lng['admin']['configfiles']['files'] = 'Konfiguraèné súbory: Prosím, zmeòte nasledovné súbory alebo ak neexistujú,
    vytvorte v nich nasledujúci obsah.
    V¹imnite si: MySQL heslo nemô¾e by» z bezpeènostných dôvodov zmenené.
    Prosím nahraïte "MYSQL_PASSWORD" Va¹ím vlastným. Ak ste zabudli Va¹e MySQL heslo,
    nájdete ho v "lib/userdata.inc.php".'; +$lng['admin']['configfiles']['commands'] = 'Príkazy: Prosím vykonajte nasledovné príkazy v príkazovom riadku.'; +$lng['admin']['configfiles']['restart'] = 'Re¹tart: Prosím vykonajte následovné príkazy v príkazovom riadku v presnom poradí, aby sa naèítali nové nastavenia.'; +$lng['admin']['templates']['templates'] = '©ablóny'; +$lng['admin']['templates']['template_add'] = 'Prida» ¹ablónu'; +$lng['admin']['templates']['template_edit'] = 'Upravi» ¹ablónu'; +$lng['admin']['templates']['action'] = 'Akcia'; +$lng['admin']['templates']['email'] = 'E-Mail'; +$lng['admin']['templates']['subject'] = 'Predmet'; +$lng['admin']['templates']['mailbody'] = 'Telo správy'; +$lng['admin']['templates']['createcustomer'] = 'Uvítací E-mail pre nového klienta'; +$lng['admin']['templates']['pop_success'] = 'Uvítací E-mail pre nov» E-mailový úèet'; +$lng['admin']['templates']['template_replace_vars'] = 'Premenné nahradzované v ¹ablónach:'; +$lng['admin']['templates']['FIRSTNAME'] = 'Nahradi» krstným menom klienta.'; +$lng['admin']['templates']['NAME'] = 'Nahradi» menom klienta.'; +$lng['admin']['templates']['USERNAME'] = 'Nahradi» menom úètu klienta.'; +$lng['admin']['templates']['PASSWORD'] = 'Nahradi» heslom úètu klienta.'; +$lng['admin']['templates']['EMAIL'] = 'Nahradi» adresou POP3/IMAP úètu.'; + +/** + * Serversettings + */ + +$lng['serversettings']['session_timeout']['title'] = 'Èasový limit sedenia'; +$lng['serversettings']['session_timeout']['description'] = 'Ako dlho má by» u¾ívateµ neaktívny predtým, ako sa pripojenie stane neplatným (v sekundách)?'; +$lng['serversettings']['accountprefix']['title'] = 'Prefix klienta'; +$lng['serversettings']['accountprefix']['description'] = 'Aký prefix mô¾u ma» klientské úèty?'; +$lng['serversettings']['mysqlprefix']['title'] = 'SQL Prefix'; +$lng['serversettings']['mysqlprefix']['description'] = 'Aký prefix majú ma» mySQL úèty?'; +$lng['serversettings']['ftpprefix']['title'] = 'FTP Prefix'; +$lng['serversettings']['ftpprefix']['description'] = 'Aký prefix majú ma» FTP úèty?'; +$lng['serversettings']['documentroot_prefix']['title'] = 'Adresár dokumentov'; +$lng['serversettings']['documentroot_prefix']['description'] = 'Kde majú by» ukladané v¹etky dáta?'; +$lng['serversettings']['logfiles_directory']['title'] = 'Adresár súborov s logmi'; +$lng['serversettings']['logfiles_directory']['description'] = 'Kde majú by» ukladané v¹etky log súbory?'; +$lng['serversettings']['ipaddress']['title'] = 'IP-Addresy'; +$lng['serversettings']['ipaddress']['description'] = 'Aká je IP adresa tohto servera?'; +$lng['serversettings']['hostname']['title'] = 'Názov hosta'; +$lng['serversettings']['hostname']['description'] = 'Aký je názov hosta tohto servera?'; +$lng['serversettings']['apachereload_command']['title'] = 'Príkaz na pretvorenie (reload) Apache'; +$lng['serversettings']['apachereload_command']['description'] = 'Aký je príkaz na pretvorenie (reload) Apache?'; +$lng['serversettings']['bindconf_directory']['title'] = 'Adresár konfigurácie bind (DNS)'; +$lng['serversettings']['bindconf_directory']['description'] = 'Kde sa nachádzajú konfiguraèné súbory pre bind (DNS)?'; +$lng['serversettings']['bindreload_command']['title'] = 'Príkaz na pretvorenie (reload) bind'; +$lng['serversettings']['bindreload_command']['description'] = 'Aký je príkaz na pretvorenie (reload) bind (DNS)?'; +$lng['serversettings']['binddefaultzone']['title'] = 'Predvolená zóna bind (DNS)'; +$lng['serversettings']['binddefaultzone']['description'] = 'Aký je názov predvolenej zóny?'; +$lng['serversettings']['vmail_uid']['title'] = 'Uid E-mailov (Mails-Uid)'; +$lng['serversettings']['vmail_uid']['description'] = 'Ktoré ID u¾ívateµa mô¾u ma» E-mail?'; +$lng['serversettings']['vmail_gid']['title'] = 'Mails-Gid'; +$lng['serversettings']['vmail_gid']['description'] = 'Ktoré ID skupiny mô¾u ma» E-mail?'; +$lng['serversettings']['vmail_homedir']['title'] = 'Domovský adresár pre E-maily'; +$lng['serversettings']['vmail_homedir']['description'] = 'Kde majú by» ukladané v¹etky E-maily?'; +$lng['serversettings']['adminmail']['title'] = 'Odosielateµ'; +$lng['serversettings']['adminmail']['description'] = 'Aká je adresa odosielateµa pre E-maily odoslané z panela?'; +$lng['serversettings']['phpmyadmin_url']['title'] = 'URL pre phpMyAdmin'; +$lng['serversettings']['phpmyadmin_url']['description'] = 'Aká je URL pre phpMyAdmin? (musí zaèína» s http://)'; +$lng['serversettings']['webmail_url']['title'] = 'URL pre WebMail'; +$lng['serversettings']['webmail_url']['description'] = 'Aká je URL pre WebMail? (musí zaèína» s http://)'; +$lng['serversettings']['webftp_url']['title'] = 'URL pre WebFTP'; +$lng['serversettings']['webftp_url']['description'] = 'Aká je URL WebFTP? (musí zaèína» s http://)'; +$lng['serversettings']['language']['description'] = 'Aký je ¹tandardný jazyk servera?'; +$lng['serversettings']['maxloginattempts']['title'] = 'Maximálny poèet pokusov o prihlásenia'; +$lng['serversettings']['maxloginattempts']['description'] = 'Maximálny poèet pokusov o prihlásenia po ktorých bude úèet deaktivovaný.'; +$lng['serversettings']['deactivatetime']['title'] = 'Dátum/èas deaktivácie'; +$lng['serversettings']['deactivatetime']['description'] = 'Èas v sekundách, za ktorý sa úèet deaktivuje po mno¾stve pokusov o prihlásenie.'; +$lng['serversettings']['pathedit']['title'] = 'Zadajte názov vstupu'; +$lng['serversettings']['pathedit']['description'] = 'Mô¾e by» cest zvolená z vyskakovacieho menu alebo zadaná do pola?'; + +/** + * CHANGED BETWEEN 1.2.12 and 1.2.13 + */ + +$lng['mysql']['description'] = 'Tu mô¾ete vytvára» a meni» Va¹e MySQL databázy.
    Zmeny sú okam¾ité a úèty mô¾ete pou¾íva» ihneï.
    Na µavej strane sa nachádza menu, v ktorom je nástroj phpMyAdmin, cez ktorý mô¾ete rýchlo a jednoducho spravova» Va¹e databázy.

    Pre pou¾itie Va¹ích databáz vo Va¹ích PHP skriptoch pou¾ite nasledujúce nastavenia: (Informácie oznaèené lomeným písmom, musia by» zmenené na Va¹e prístupové údaje!)
    Názov hosta: localhost
    U¾ívateµské meno: Názov_databázy
    Heslo: heslo, ktoré ste si zvolili
    Databáza: Názov_databázy'; + +/** + * ADDED BETWEEN 1.2.12 and 1.2.13 + */ + +$lng['admin']['cronlastrun'] = 'Posledný Cron'; +$lng['serversettings']['paging']['title'] = 'Záznamov na stránku'; +$lng['serversettings']['paging']['description'] = 'Koµko záznamov bude zobrazených na jednej stránke? (0 = zakázané stránkovanie)'; +$lng['error']['ipstillhasdomains'] = 'IP/Port kombinácia ktorú chcete zmaza» má stále priradené domenény. Pred zmazaním tejto IP/Port kombinácie prosím znovu priraïte tieto k ostatným IP/Port kombináciam.'; +$lng['error']['cantdeletedefaultip'] = 'Nemô¾ete zmaza» predvolenú reseller IP/Port kombináciu. Pred zmazaním tejto IP/Port kombinácie prosím vytvorte inú predvolenú IP/Port kombináciu pre resellerov.'; +$lng['error']['cantdeletesystemip'] = 'Nemô¾ete zmaza» poslednú IP systému, ani vytvori» ïaµ¹iu novú IP/Port kombináciu pre IP systém alebo zmeni» systémovú IP.'; +$lng['error']['myipaddress'] = '\'IP\''; +$lng['error']['myport'] = '\'Port\''; +$lng['error']['myipdefault'] = 'Musíte vybra» kombináciu IP/Port ktorá sa stane predvolenou.'; +$lng['error']['myipnotdouble'] = 'Táto kombinácia IP/Port u¾ existuje.'; +$lng['question']['admin_ip_reallydelete'] = 'Naozaj chcete zmaza» IP adresu %s?'; +$lng['admin']['ipsandports']['ipsandports'] = 'IP a Port(y)'; +$lng['admin']['ipsandports']['add'] = 'Prida» IP/Port'; +$lng['admin']['ipsandports']['edit'] = 'Upravi»t IP/Port'; +$lng['admin']['ipsandports']['ipandport'] = 'IP/Port'; +$lng['admin']['ipsandports']['ip'] = 'IP'; +$lng['admin']['ipsandports']['port'] = 'Port'; + +// ADDED IN 1.2.13-rc3 + +$lng['error']['cantchangesystemip'] = 'Nemô¾ete zmeni» poslednú IP systému, ani vytvori» ïaµ¹iu novú IP/Port kombináciu pre IP systém alebo zmeni» systémovú IP.'; +$lng['question']['admin_domain_reallydocrootoutofcustomerroot'] = 'Are you sure, you want the document root for this domain, not being within the customerroot of the customer?'; + +// ADDED IN 1.2.14-rc1 + +$lng['admin']['memorylimitdisabled'] = 'Zakázaný'; +$lng['domain']['openbasedirpath'] = 'OpenBasedir cesta'; +$lng['domain']['docroot'] = 'Cesta z pola vy¹¹ie'; +$lng['domain']['homedir'] = 'Domovský adresár'; +$lng['admin']['valuemandatory'] = 'Táto hodnota je povinná'; +$lng['admin']['valuemandatorycompany'] = 'Oboje "meno" a "priezvisko" alebo "spoloènos»" musia by» vyplnené'; +$lng['menue']['main']['username'] = 'Prihlásený ako: '; +$lng['panel']['urloverridespath'] = 'URL (nadradená cesta)'; +$lng['panel']['pathorurl'] = 'Cesta alebo URL'; +$lng['error']['sessiontimeoutiswrong'] = 'Je povolený len èíselný "èasový limit sedenia".'; +$lng['error']['maxloginattemptsiswrong'] = 'Je povolený len èíselný "maximálny poèet prihlásení".'; +$lng['error']['deactivatetimiswrong'] = 'Je povolený len èíselný "èas deaktivácie".'; +$lng['error']['accountprefixiswrong'] = '"Prefix klienta" je nesprávny.'; +$lng['error']['mysqlprefixiswrong'] = '"SQL prefix" je nesprávny.'; +$lng['error']['ftpprefixiswrong'] = '"FTP prefix" je nesprávny.'; +$lng['error']['ipiswrong'] = '"IP-Adresa" je nesprávna. Je povolená len platná IP-adresa.'; +$lng['error']['vmailuidiswrong'] = '"Mails-uid" je nesprávne. Je povolené len èíselné UID.'; +$lng['error']['vmailgidiswrong'] = '"Mails-gid" je nesprávne. Je povolené len èíselné GID.'; +$lng['error']['adminmailiswrong'] = '"Adresa odosielateµa" je nesprávna. Je povolená len platná E-mail-adresa.'; +$lng['error']['pagingiswrong'] = 'Hodnota "záznamov na stránku" je neplatná. Sú povolené len èíselné znaky.'; +$lng['error']['phpmyadminiswrong'] = 'phpMyAdmin odkaz nie je platným odkazov.'; +$lng['error']['webmailiswrong'] = 'WebMail odkaz nie je platým odkazom.'; +$lng['error']['webftpiswrong'] = 'WebFTP odkaz nie je platým odkazom.'; +$lng['domains']['hasaliasdomains'] = 'Má alias domény(én)'; +$lng['serversettings']['defaultip']['title'] = 'Predvolený IP/Port'; +$lng['serversettings']['defaultip']['description'] = 'Èo je predvolená IP/Port kombinácia?'; +$lng['domains']['statstics'] = 'Pou¾i» ¹tatistiky'; +$lng['panel']['ascending'] = 'Vzostupne'; +$lng['panel']['decending'] = 'Zostupne'; +$lng['panel']['search'] = 'Vyhµada»'; +$lng['panel']['used'] = 'pou¾ité'; + +// ADDED IN 1.2.14-rc3 + +$lng['panel']['translator'] = 'Prekladaè'; + +// ADDED IN 1.2.14-rc4 + +$lng['error']['stringformaterror'] = 'Hodnota pre pole "%s" nie je v oèakávanom formáte.'; + +// ADDED IN 1.2.15-rc1 + +$lng['admin']['serversoftware'] = 'Server software'; +$lng['admin']['phpversion'] = 'PHP verzia'; +$lng['admin']['phpmemorylimit'] = 'PHP Memory Limit'; +$lng['admin']['mysqlserverversion'] = 'MySQL Server verzia'; +$lng['admin']['mysqlclientversion'] = 'MySQL Client verzia'; +$lng['admin']['webserverinterface'] = 'Webserver rozhranie'; +$lng['domains']['isassigneddomain'] = 'Je priradenou doménou'; +$lng['serversettings']['phpappendopenbasedir']['title'] = 'Cesty na pripojenie k OpenBasedir'; +$lng['serversettings']['phpappendopenbasedir']['description'] = 'Tieto cesty (oddelené dvojbodkou) budú pridané do OpenBasedir príkazu (statement) v ka¾dom vhost-zázobníku (container).'; + +// CHANGED IN 1.2.15-rc1 + +$lng['error']['loginnameissystemaccount'] = 'Nemô¾ete vytvori» úèet, ktorý je podobný systémovému úètu (napríklad zaènite s "%s"). Prosím, zadajte iný názov úètu.'; + +?> diff --git a/lng/spanish.lng.php b/lng/spanish.lng.php new file mode 100644 index 0000000000..a17c3481f4 --- /dev/null +++ b/lng/spanish.lng.php @@ -0,0 +1,447 @@ + + * @author Ron Brand + * @author Sandra Aders + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Language + * @version $Id: spanish.lng.php 2692 2009-03-27 18:04:47Z flo $ + */ + +/** + * Global + */ + +$lng['translator'] = 'Carlo Pedro Woedl, Ron Brand, Sandra Aders'; +$lng['panel']['edit'] = 'modificar'; +$lng['panel']['delete'] = 'borar'; +$lng['panel']['create'] = 'crear'; +$lng['panel']['save'] = 'almacenar'; +$lng['panel']['yes'] = 'si'; +$lng['panel']['no'] = 'no'; +$lng['panel']['emptyfornochanges'] = 'vacío si no hay cambios'; +$lng['panel']['emptyfordefault'] = 'vacia para los valores por defecto'; +$lng['panel']['path'] = 'camino'; +$lng['panel']['toggle'] = 'cambio'; +$lng['panel']['next'] = 'continuar'; +$lng['panel']['dirsmissing'] = 'Los registros no están disponibles o no son leíbles.'; + +/** + * Login + */ + +$lng['login']['username'] = 'Nombre del usuario'; +$lng['login']['password'] = 'contraseña'; +$lng['login']['language'] = 'Lengua'; +$lng['login']['login'] = 'Registrarse'; +$lng['login']['logout'] = 'Finalizar sesión'; +$lng['login']['profile_lng'] = 'Lenguaje del perfil'; + +/** + * Customer + */ + +$lng['customer']['documentroot'] = 'Hogar'; +$lng['customer']['name'] = 'Apellido'; +$lng['customer']['firstname'] = 'Nombre'; +$lng['customer']['company'] = 'Razón social'; +$lng['customer']['street'] = 'Dirección'; +$lng['customer']['zipcode'] = 'Codigo Postal/Población'; +$lng['customer']['city'] = 'Ciudad'; +$lng['customer']['phone'] = 'Teléfono'; +$lng['customer']['fax'] = 'Telefax'; +$lng['customer']['email'] = 'Email'; +$lng['customer']['customernumber'] = 'Numero de Cliente'; +$lng['customer']['diskspace'] = 'Espacio de web (MB)'; +$lng['customer']['traffic'] = 'Trafico (GB)'; +$lng['customer']['mysqls'] = 'MySQL-Base de datos'; +$lng['customer']['emails'] = 'Direcciones e-mail'; +$lng['customer']['accounts'] = 'Cuentas e-mail'; +$lng['customer']['forwarders'] = 'e-mail de reenvío'; +$lng['customer']['ftps'] = 'FTP-Cuentas'; +$lng['customer']['subdomains'] = 'Subdominios'; +$lng['customer']['domains'] = 'Dominios'; +$lng['customer']['unlimited'] = 'infinito'; + +/** + * Customermenue + */ + +$lng['menue']['main']['main'] = 'Universal'; +$lng['menue']['main']['changepassword'] = 'Cambiar contraseña'; +$lng['menue']['main']['changelanguage'] = 'Cambiar Idioma'; +$lng['menue']['email']['email'] = 'eMail'; +$lng['menue']['email']['emails'] = 'Direcciones'; +$lng['menue']['email']['webmail'] = 'Sistema Webmail'; +$lng['menue']['mysql']['mysql'] = 'MySQL'; +$lng['menue']['mysql']['databases'] = 'Base de datos'; +$lng['menue']['mysql']['phpmyadmin'] = 'phpMyAdmin'; +$lng['menue']['domains']['domains'] = 'Dominios'; +$lng['menue']['domains']['settings'] = 'Configuraciones'; +$lng['menue']['ftp']['ftp'] = 'FTP'; +$lng['menue']['ftp']['accounts'] = 'Cuentas'; +$lng['menue']['ftp']['webftp'] = 'WebFTP'; +$lng['menue']['extras']['directoryprotection'] = 'directorio de protección'; +$lng['menue']['extras']['pathoptions'] = 'Opciones del camino'; + +/** + * Index + */ + +$lng['index']['customerdetails'] = 'Datos de Clientes'; +$lng['index']['accountdetails'] = 'Datos Cuentas'; + +/** + * Change Password + */ + +$lng['changepassword']['old_password'] = 'Contraseña anterior'; +$lng['changepassword']['new_password'] = 'Contraseña nueva'; +$lng['changepassword']['new_password_confirm'] = 'Contraseña (Repetir)'; +$lng['changepassword']['new_password_ifnotempty'] = 'Contraseña nueva (libre=sin cambio)'; +$lng['changepassword']['also_change_ftp'] = 'tambien cambiar la Contraseña del FTP'; + +/** + * Domains + */ + +$lng['domains']['description'] = 'Aquí usted puede crear dominios (secundarios) y cambiar sus caminos.
    El sistema necesitará un cierto tiempo para aplicar las nuevas configuraciones después de cada cambio.'; +$lng['domains']['domainsettings'] = 'Configuraciones del dominio'; +$lng['domains']['domainname'] = 'Nombre del dominio'; +$lng['domains']['subdomain_add'] = 'Crear el secundario-dominio'; +$lng['domains']['subdomain_edit'] = 'Corrija el dominio (secundario)'; +$lng['domains']['wildcarddomain'] = '¿Crear como comodÃn-dominio?'; +$lng['domains']['aliasdomain'] = 'Alias para dominio'; +$lng['domains']['noaliasdomain'] = 'No es un alias de dominio'; + +/** + * eMails + */ + +$lng['emails']['description'] = 'Aqui puede Usted crear su propia direccion e-mail.
    Una Cuenta es como un Buzon en la Puerta de la Casa . Cuando alguien le escribe una email , esta aparece en su cuenta.

    Para descargar sus email utilice las configuraciones siguientes en su email-programa: (Los datos en letra kursiva seran sustituidas por las asignadas!)
    nombre del Host: Nombre del Domain
    Nombre del Usuario: Cuenta / Direccion e-mail
    Clave: Clave Elegida'; +$lng['emails']['emailaddress'] = 'Direccion e-mail'; +$lng['emails']['emails_add'] = 'Crear Direccion e-mail'; +$lng['emails']['emails_edit'] = 'Cambiar Direccion e-mail'; +$lng['emails']['catchall'] = 'Catchall'; +$lng['emails']['iscatchall'] = 'Definir como Direccion Catchall'; +$lng['emails']['account'] = 'Cuenta '; +$lng['emails']['account_add'] = 'Crear Cuenta'; +$lng['emails']['account_delete'] = 'Borar Cuenta'; +$lng['emails']['from'] = 'Fuente'; +$lng['emails']['to'] = 'Destinación'; +$lng['emails']['forwarders'] = 'Reenviar'; +$lng['emails']['forwarder_add'] = 'agregar reenvio'; + +/** + * FTP + */ + +$lng['ftp']['description'] = 'Aqui puede Usted crear FTP-Cuentas adicionales.
    Los cambios se actualizan de inmediato y Usted puede Usar los FTP-Cuentas.'; +$lng['ftp']['account_add'] = 'Crear Cuenta'; + +/** + * MySQL + */ + +$lng['mysql']['description'] = 'Aqui se puede crear/cancelar la MySQL Base de Datos.
    Los Cambios se actualizan de inmediato y la Base de Datos se puede usar enseguida.
    En el menú usted encuentra el phpMyAdmin de la herramienta con el cual usted puede administrar fácilmente su base de datos.

    Para utilizar sus bases de datos en sus propias php-escrituras utilice las configuraciones siguientes: (Los datos en letra cursiva seran sustituidas por las asignadas!)
    Nombre del Host:
    Nombre del Usuario: nombre de la base de datos
    Clave: contraseña elegida
    Base de datos: Nombre de la base de datos'; +$lng['mysql']['databasename'] = 'Nombre -/Base de Datos'; +$lng['mysql']['databasedescription'] = 'Indentificador de la Base de Datos'; +$lng['mysql']['database_create'] = 'Abrir base de Datos'; + +/** + * Extras + */ + +$lng['extras']['description'] = 'Aqui se pueden crear Extras , por Eje.protector de Directorio.
    Los cambios son despues de cierto tiempo aplicables.'; +$lng['extras']['directoryprotection_add'] = 'Crear Protección de Directorio'; +$lng['extras']['view_directory'] = 'Mostrar directorio'; +$lng['extras']['pathoptions_add'] = 'agregue las opciones del camino'; +$lng['extras']['directory_browsing'] = 'Mostrar contenido del Directorio'; +$lng['extras']['error404path'] = '404'; +$lng['extras']['error403path'] = '403'; +$lng['extras']['error500path'] = '500'; +$lng['extras']['error401path'] = '401'; +$lng['extras']['errordocument404path'] = 'URL para errorDocumento 404'; +$lng['extras']['errordocument403path'] = 'URL para errorDocumento 403'; +$lng['extras']['errordocument500path'] = 'URL para errorDocumento 500'; +$lng['extras']['errordocument401path'] = 'URL para errorDocumento 401'; + +/** + * Errors + */ + +$lng['error']['error'] = 'Error'; +$lng['error']['directorymustexist'] = 'El Directorio %s tiene que Existir. Crearlo por Favor a traves del FTP-Programa.'; +$lng['error']['filemustexist'] = 'El archivo %s debe existir'; +$lng['error']['allresourcesused'] = 'Usted ha usado todos los recursos a su disposicion.'; +$lng['error']['domains_cantdeletemaindomain'] = 'Usted no puede Borar un Domain el cual esta siendo usado como e-mail Domain.'; +$lng['error']['domains_canteditdomain'] = 'Usted no puede trabajar con este Domain . Debido a que el Admin se lo niega.'; +$lng['error']['domains_cantdeletedomainwithemail'] = 'Usted no puede Borar un Domain el cual esta siendo usado como e-mail Domain , Borre primero todos las Direcciones e-mail de este dominio.'; +$lng['error']['firstdeleteallsubdomains'] = 'Usted debe primero borar todos los Subdomains, antes de Usted crear un dominio del comodÃn.'; +$lng['error']['youhavealreadyacatchallforthisdomain'] = 'Usted acaba de definer una Direccion como Catchall para este dominio.'; +$lng['error']['ftp_cantdeletemainaccount'] = 'Usted no puede suprimir su cuenta principal del ftp'; +$lng['error']['login'] = 'El Nombre de Usuario/Clave esta Errado. Por favor intento otra vez!'; +$lng['error']['login_blocked'] = 'Esta cuenta fue cerrada transitoriamente debido a demasiados intentos falsos.
    Por favor intente otra vez en ' . $settings['login']['deactivatetime'] . ' segundos.'; +$lng['error']['notallreqfieldsorerrors'] = 'Usted no ha llenado todos los espacios asignados o ha colocado un dato Erroneo.'; +$lng['error']['oldpasswordnotcorrect'] = 'La Clave Vieja no es correcta.'; +$lng['error']['youcantallocatemorethanyouhave'] = 'Usted no puede afectar un aparato más recursos que los que usted posee.'; +$lng['error']['mustbeurl'] = 'Usted tiene que dar una completa direccion URL(por ejemplo: http://algo.de/error404.htm)'; +$lng['error']['invalidpath'] = 'No ha seleccionado una URL válida (¿probablemente problemas con el listado de registros?)'; +$lng['error']['stringisempty'] = 'Falta un dato'; +$lng['error']['stringiswrong'] = 'Dato falso'; +$lng['error']['myloginname'] = '\'' . $lng['login']['username'] . '\''; +$lng['error']['mypassword'] = '\'' . $lng['login']['password'] . '\''; +$lng['error']['oldpassword'] = '\'' . $lng['changepassword']['old_password'] . '\''; +$lng['error']['newpassword'] = '\'' . $lng['changepassword']['new_password'] . '\''; +$lng['error']['newpasswordconfirm'] = '\'' . $lng['changepassword']['new_password_confirm'] . '\''; +$lng['error']['newpasswordconfirmerror'] = 'La Clave Nueva a la Confirmacion de Clave no Coinciden'; +$lng['error']['myname'] = '\'' . $lng['customer']['name'] . '\''; +$lng['error']['myfirstname'] = '\'' . $lng['customer']['firstname'] . '\''; +$lng['error']['emailadd'] = '\'' . $lng['customer']['email'] . '\''; +$lng['error']['mydomain'] = '\'dominio\''; +$lng['error']['mydocumentroot'] = '\'Documentroot\''; +$lng['error']['loginnameexists'] = 'Conexión-Nombre %s existe ya'; +$lng['error']['emailiswrong'] = 'Email address %s contiene caracteres inválidos o es incompleta'; +$lng['error']['loginnameiswrong'] = 'Conexión-Nombre %s contiene caracteres inválidos'; +$lng['error']['userpathcombinationdupe'] = 'combinación del nombre del usuario y del camino existe ya'; +$lng['error']['patherror'] = '¡Error general! el camino no puede estar vacÃo'; +$lng['error']['errordocpathdupe'] = 'Opción para el camino %s existe ya'; +$lng['error']['adduserfirst'] = 'Usted debe primero crear un Cliente'; +$lng['error']['domainalreadyexists'] = 'El dominio %s se ha asignado ya a un cliente'; +$lng['error']['nolanguageselect'] = 'Asigne un Idioma.'; +$lng['error']['nosubjectcreate'] = 'Usted debe de asignar un asunto.'; +$lng['error']['nomailbodycreate'] = 'Usted debe de Agregar Texto al Mail.'; +$lng['error']['templatenotfound'] = 'Modelo no encontrado.'; +$lng['error']['alltemplatesdefined'] = 'Usted no puede definir más modelos, todos los lenguajes se utilizan ya.'; +$lng['error']['wwwnotallowed'] = 'www no se permite como nombre para los secundario-dominios.'; +$lng['error']['subdomainiswrong'] = 'El dominio-secundario %s contiene caracteres inválidos.'; +$lng['error']['domaincantbeempty'] = 'El nombre del dominio-Apellido no puede estar Vacio.'; +$lng['error']['domainexistalready'] = 'El dominio %s existe ya.'; +$lng['error']['domainisaliasorothercustomer'] = 'El alias de dominio seleccionado es un propio alias de dominio o pertenece a otro cliente.'; +$lng['error']['emailexistalready'] = 'El email address %s existe ya.'; +$lng['error']['maindomainnonexist'] = 'El dominio-principal %s no existe.'; +$lng['error']['destinationnonexist'] = 'Crear por favor su email-expedición en \'Destinación\'.'; +$lng['error']['destinationalreadyexistasmail'] = 'La direccion Secundaria %s ya existe como Direccion e-mail activa.'; +$lng['error']['destinationalreadyexist'] = 'Ya existe una Direccion Secundaria para %s .'; +$lng['error']['destinationiswrong'] = 'La Direccion Secundaria %s contiene simbolos invalidos o esta incompleta.'; +$lng['error']['domainname'] = $lng['domains']['domainname']; + +/** + * Questions + */ + +$lng['question']['question'] = 'Pregunta de seguridad'; +$lng['question']['admin_customer_reallydelete'] = '¿Usted realmente desea suprimir el %s del cliente? ATENCIÒN!todos los datos se perderán definitivamente, deberá borar los datos manualmente del sistema!'; +$lng['question']['admin_domain_reallydelete'] = '¿Usted realmente desea suprimir el dominio %s?'; +$lng['question']['admin_domain_reallydisablesecuritysetting'] = '¿Usted realmente desea desactivar estas configuraciones de seguridad (OpenBasedir y/o SafeMode)?'; +$lng['question']['admin_admin_reallydelete'] = '¿Usted realmente desea suprimir al administrador %s? todos los clientes y dominios serán reasignados al administrador principal.'; +$lng['question']['admin_template_reallydelete'] = 'desea usted realmente suprimir el modelo \'%s\'?'; +$lng['question']['domains_reallydelete'] = '¿desea Usted realmente suprimir el dominio %s?'; +$lng['question']['email_reallydelete'] = '¿Usted realmente desea suprimir el email address %s?'; +$lng['question']['email_reallydelete_account'] = '¿Usted realmente desea suprimir la cuenta de email %s?'; +$lng['question']['email_reallydelete_forwarder'] = '¿Usted realmente desea suprimir el reenvío de email %s?'; +$lng['question']['extras_reallydelete'] = '¿Usted realmente desea suprimir la protección del directorio %s?'; +$lng['question']['extras_reallydelete_pathoptions'] = '¿Usted realmente desea suprimir las opciones del camino para el %s?'; +$lng['question']['ftp_reallydelete'] = '¿Usted realmente desea suprimir la cuenta %s del ftp?'; +$lng['question']['mysql_reallydelete'] = '¿Usted realmente desea suprimir la base de datos %s?ATENCIÒN! todos los datos se perderán definitivamente'; +$lng['question']['admin_configs_reallyrebuild'] = '¿Realmente desea elaborar de nuevo sus archivos de configuración de Apache y Bind? '; + +/** + * Mails + */ + +$lng['mails']['pop_success']['mailbody'] = 'Hola,\n\nsu cuenta del correo {EMAIL}\nfue instalada con éxito .\n\nEsto es un email automáticamente creado,\n\nno conteste por favor!\n\nSinceramente suyo, el SysCP-Equipo'; +$lng['mails']['pop_success']['subject'] = 'cuenta del email instalada con éxito'; +$lng['mails']['createcustomer']['mailbody'] = 'Hola {FIRSTNAME} {NAME},\n\naquà está su información de la cuenta:\n\nNombre del usuario: {USERNAME}\nContraseña: {PASSWORD}\n\nGracias,\nel SysCP-Equipo'; +$lng['mails']['createcustomer']['subject'] = 'Información de la cuenta'; + +/** + * Admin + */ + +$lng['admin']['overview'] = 'Descripción'; +$lng['admin']['ressourcedetails'] = 'Recursos usados'; +$lng['admin']['systemdetails'] = 'Detalles del sistema'; +$lng['admin']['syscpdetails'] = 'Detalles de SysCP'; +$lng['admin']['installedversion'] = 'Versión instalada'; +$lng['admin']['latestversion'] = 'La última versión'; +$lng['admin']['lookfornewversion']['clickhere'] = 'búsqueda via Web-servicio'; +$lng['admin']['lookfornewversion']['error'] = 'Error de lectura'; +$lng['admin']['resources'] = 'Recursos'; +$lng['admin']['customer'] = 'Cliente'; +$lng['admin']['customers'] = 'Clientes'; +$lng['admin']['customer_add'] = 'Crear un cliente nuevo'; +$lng['admin']['customer_edit'] = 'Corrija a un cliente'; +$lng['admin']['domains'] = 'Dominios'; +$lng['admin']['domain_add'] = 'Crear el dominio'; +$lng['admin']['domain_edit'] = 'Corrija el dominio'; +$lng['admin']['subdomainforemail'] = 'dominio-secundario como dominio de email'; +$lng['admin']['admin'] = 'Administrador'; +$lng['admin']['admins'] = 'Administradores'; +$lng['admin']['admin_add'] = 'Crear un admininstrator'; +$lng['admin']['admin_edit'] = 'corrija el admininstrator'; +$lng['admin']['customers_see_all'] = '¿Puede ver a todos los clientes?'; +$lng['admin']['domains_see_all'] = '¿Puede ver todos los dominios?'; +$lng['admin']['change_serversettings'] = '¿Puede cambiar configuraciones del servidor?'; +$lng['admin']['server'] = 'Servidor'; +$lng['admin']['serversettings'] = 'Configuraciones'; +$lng['admin']['rebuildconf'] = 'Reescribir las configuraciones'; +$lng['admin']['stdsubdomain'] = 'dominio-secundario estándar'; +$lng['admin']['stdsubdomain_add'] = 'Crear el subdomain estándar'; +$lng['admin']['deactivated'] = 'Desactivado'; +$lng['admin']['deactivated_user'] = 'Desactive a utilizador'; +$lng['admin']['sendpassword'] = 'EnvÃe la contraseña'; +$lng['admin']['ownvhostsettings'] = 'vHost-Configuraciones propias'; +$lng['admin']['configfiles']['serverconfiguration'] = 'Configuración'; +$lng['admin']['configfiles']['files'] = 'Configfiles: Cambie por favor los ficheros siguientes
    o créelos con el contenido siguiente si no existen.
    Por favor note: La MySQL-contraseña no se ha substituido por razones de seguridad.
    Substituya por favor "MYSQL_PASSWORD"manualmente por la propia. Si usted se olvidó de su MySQL-contraseña
    usted la encontrará en el "lib/userdata.inc.php".'; +$lng['admin']['configfiles']['commands'] = 'Commands: Ejecute por favor los comandos siguientes en un shell.'; +$lng['admin']['configfiles']['restart'] = 'Relanzar: Ejecute por favor los comandos siguientes en un shell para recargar la nueva configuración.'; +$lng['admin']['templates']['templates'] = 'Modelos'; +$lng['admin']['templates']['template_add'] = 'Agregue el modelo'; +$lng['admin']['templates']['template_edit'] = 'Corrija el modelo'; +$lng['admin']['templates']['action'] = 'Acción'; +$lng['admin']['templates']['email'] = 'E-Mail'; +$lng['admin']['templates']['subject'] = 'asunto'; +$lng['admin']['templates']['mailbody'] = 'email-texto'; +$lng['admin']['templates']['createcustomer'] = 'email de Bienvenida para los nuevos clientes'; +$lng['admin']['templates']['pop_success'] = 'email de Bienvenida para las nuevas cuentas del email'; +$lng['admin']['templates']['template_replace_vars'] = 'Variables que se substituirán en el modelo:'; +$lng['admin']['templates']['FIRSTNAME'] = 'Substituido por el nombre de los clientes.'; +$lng['admin']['templates']['NAME'] = 'Substituido por el Apellido de los clientes.'; +$lng['admin']['templates']['USERNAME'] = 'Substituido por el username de la cuenta de clientes.'; +$lng['admin']['templates']['PASSWORD'] = 'Substituido por la contraseña de la cuenta de clientes.'; +$lng['admin']['templates']['EMAIL'] = 'Substituido por la direccion de la cuenta de POP3/del IMAP.'; + +/** + * Serversettings + */ + +$lng['serversettings']['session_timeout']['title'] = 'Descanso de la sesión'; +$lng['serversettings']['session_timeout']['description'] = '¿Cuanto tiempo un utilizador tiene que estar inactivo antes de que una sesión consiga quedar inválida (segundos)?'; +$lng['serversettings']['accountprefix']['title'] = 'Cliente-prefijo'; +$lng['serversettings']['accountprefix']['description'] = '¿Qué prefijo deben las cuentas de cliente tener??'; +$lng['serversettings']['mysqlprefix']['title'] = 'Prefijo del SQL'; +$lng['serversettings']['mysqlprefix']['description'] = '¿Qué prefijo deben tener las cuentas del mysql?'; +$lng['serversettings']['ftpprefix']['title'] = 'Prefijo del ftp'; +$lng['serversettings']['ftpprefix']['description'] = 'Qué prefijo deben tener las cuentas del ftp?'; +$lng['serversettings']['documentroot_prefix']['title'] = 'Directorio de documento'; +$lng['serversettings']['documentroot_prefix']['description'] = '¿Dónde deben quedar todos los clientes?'; +$lng['serversettings']['logfiles_directory']['title'] = 'Directorio de los ficheros de diario'; +$lng['serversettings']['logfiles_directory']['description'] = '¿Dónde deben todos los ficheros de diario ser salvados?'; +$lng['serversettings']['ipaddress']['title'] = 'IP address'; +$lng['serversettings']['ipaddress']['description'] = '¿Cuál es el IP address de este servidor?'; +$lng['serversettings']['hostname']['title'] = 'Hostname'; +$lng['serversettings']['hostname']['description'] = '¿Cuál es el hostname de este servidor?'; +$lng['serversettings']['apachereload_command']['title'] = 'Comando de la recarga de Apache'; +$lng['serversettings']['apachereload_command']['description'] = '¿Cuál es el comando de la recarga de Apache?'; +$lng['serversettings']['bindconf_directory']['title'] = 'Directorio de la configuración de Bind'; +$lng['serversettings']['bindconf_directory']['description'] = '¿Dónde está la configuración del Bind?'; +$lng['serversettings']['bindreload_command']['title'] = 'Comando de la recarga de Bindmm'; +$lng['serversettings']['bindreload_command']['description'] = '¿Cuál es el comando de la recarga de Bind?'; +$lng['serversettings']['binddefaultzone']['title'] = 'Zona del valor por defecto de Bind'; +$lng['serversettings']['binddefaultzone']['description'] = '¿Cuál es el nombre de la zona del valor por defecto?'; +$lng['serversettings']['vmail_uid']['title'] = 'eMail-Uid'; +$lng['serversettings']['vmail_uid']['description'] = '¿Qué UserID deben tener los email?'; +$lng['serversettings']['vmail_gid']['title'] = 'eMail-Gid'; +$lng['serversettings']['vmail_gid']['description'] = '¿Qué identificación del grupo deben tener los email?'; +$lng['serversettings']['vmail_homedir']['title'] = 'Hogar-directorio de los email'; +$lng['serversettings']['vmail_homedir']['description'] = '¿Dónde deben quedar todos los email?'; +$lng['serversettings']['adminmail']['title'] = 'Remitente'; +$lng['serversettings']['adminmail']['description'] = '¿Qué remitente-tratan para los email se envÃa del panel?'; +$lng['serversettings']['phpmyadmin_url']['title'] = 'phpMyAdmin URL'; +$lng['serversettings']['phpmyadmin_url']['description'] = '¿Cuál es el URL al phpMyAdmin? (tienen que comenzar con http://)'; +$lng['serversettings']['webmail_url']['title'] = 'WebMail URL'; +$lng['serversettings']['webmail_url']['description'] = '¿Cuál es el URL a WebMail? (tienen que comenzar con http://)'; +$lng['serversettings']['webftp_url']['title'] = 'WebFTP URL'; +$lng['serversettings']['webftp_url']['description'] = '¿Cuál es el URL a WebFTP?? (tienen que comenzar con http://)'; +$lng['serversettings']['language']['description'] = 'Cuál es su lenguaje estándar del servidor?'; +$lng['serversettings']['maxloginattempts']['title'] = 'Tentativas máximas de registro'; +$lng['serversettings']['maxloginattempts']['description'] = 'Las tentativas máximas de registro después de lo cual la cuenta se desactiva.'; +$lng['serversettings']['deactivatetime']['title'] = 'tiempo de la desactivación'; +$lng['serversettings']['deactivatetime']['description'] = 'tiempo (en segundos) para el cual la cuenta está desactivada.'; +$lng['serversettings']['pathedit']['title'] = 'Método de introducción de datos del trayecto '; +$lng['serversettings']['pathedit']['description'] = 'Prefiere seleccionar un trayecto a través de un menú-dropdown o introducirlo manualmente.'; + +/** + * ADDED BETWEEN 1.2.12 and 1.2.13 + */ + +$lng['admin']['cronlastrun'] = 'Último Cron'; +$lng['serversettings']['paging']['title'] = 'Entradas por página'; +$lng['serversettings']['paging']['description'] = '¿Cuantas entradas deben ser mostradas en una página? (0=desactivar paginación)'; +$lng['error']['ipstillhasdomains'] = 'La combinación IP/Puerto que Usted quiere eliminar todavía tiene dominios asignados, por favor vuelva a reasignar estas combinaciones IP/Puerto antes de eliminar esta combinación IP/Puerto.'; +$lng['error']['cantdeletedefaultip'] = 'Usted no puede eliminar la combinación IP/Puerto del distribuidor predeterminada, por favor crea otra combinación IP/Puerto predeterminada para distribuidores antes de eliminar esta combinación IP/Puerto.'; +$lng['error']['cantdeletesystemip'] = 'No puede eliminar la IP del sistema, crea una nueva combinación IP/Puerto para el sistema IP o cambia the sistema IP.'; +$lng['error']['myipaddress'] = '\'IP\''; +$lng['error']['myport'] = '\'Port\''; +$lng['error']['myipdefault'] = 'Debe seleccionar una combinación IP/Puerto que se convierta de manera predeterminado.'; +$lng['error']['myipnotdouble'] = 'Esta combinación IP/Puerto ya existe.'; +$lng['question']['admin_ip_reallydelete'] = '¿Realmente quiere eliminar esta dirección IP %s?'; +$lng['admin']['ipsandports']['ipsandports'] = 'IPs y Puertos'; +$lng['admin']['ipsandports']['add'] = 'Añadir IP/Puerto'; +$lng['admin']['ipsandports']['edit'] = 'Editar IP/Puerto'; +$lng['admin']['ipsandports']['ipandport'] = 'IP/Puerto'; +$lng['admin']['ipsandports']['ip'] = 'IP'; +$lng['admin']['ipsandports']['port'] = 'Puerto'; + +// ADDED IN 1.2.13-rc3 + +$lng['error']['cantchangesystemip'] = 'No puede cambiar el último IP de sistema, cree una nueva combinación de IP/Puerto para la IP de sistema o cambie la IP de sistema.'; +$lng['question']['admin_domain_reallydocrootoutofcustomerroot'] = '¿Está seguro de que quiere la raíz de documento para este dominio, ya que no se encuentra dentro de la raíz cliente del cliente?'; + +// ADDED IN 1.2.14-rc1 + +$lng['admin']['memorylimitdisabled'] = 'Desactivado'; +$lng['error']['loginnameissystemaccount'] = 'No puede crear cuentas parecidas a cuentas de sistema. Por favor, introduzca otro nombre de cuenta.'; +$lng['domain']['docroot'] = 'Path del campo de arriba'; +$lng['domain']['homedir'] = 'Hogar-directorio'; +$lng['admin']['valuemandatory'] = 'Este valor es obligatorio'; +$lng['admin']['valuemandatorycompany'] = 'Hay que rellenar ó "apellido" y "nombre" ó "empresa"'; +$lng['panel']['pathorurl'] = 'Path ó URL'; +$lng['error']['sessiontimeoutiswrong'] = 'Sólo están permitidos "descansos de la sesión" numéricos'; +$lng['error']['maxloginattemptsiswrong'] = 'Sólo están permitidos "intentos máximas de registro" numéricos'; +$lng['error']['deactivatetimiswrong'] = 'Sólo está permitido un "tiempo de desactivación" numérico'; +$lng['error']['accountprefixiswrong'] = 'El prefijo de cliente está mal.'; +$lng['error']['mysqlprefixiswrong'] = 'El prefijo del SQL está mal.'; +$lng['error']['ftpprefixiswrong'] = 'El prefijo del FTP está mal.'; +$lng['error']['ipiswrong'] = 'La dirección IP está mal. Sólo se permiten direcciones IP válidas.'; +$lng['error']['vmailuidiswrong'] = 'El eMail-Uid está mal. Sólo se permiten UIDs numéricos.'; +$lng['error']['vmailgidiswrong'] = 'El eMail-Gid está mal. Sólo se permiten GIDs numéricos.'; +$lng['error']['adminmailiswrong'] = 'La dirección del remitente está mal. Sólo se permiten direcciones de correo electrónico válidas.'; +$lng['error']['pagingiswrong'] = 'Las entradas por página están mal. Sólo se permiten caracteres numéricos.'; +$lng['error']['phpmyadminiswrong'] = 'La URL de phpMyAdmin no es una URL válida.'; +$lng['error']['webmailiswrong'] = 'La URL de WebMail no es una URL válida.'; +$lng['error']['webftpiswrong'] = 'La URL de WebFTP no es una URL válida.'; + +// ADDED IN 1.2.15-rc1 + +$lng['admin']['serversoftware'] = 'Software del servidor'; +$lng['admin']['phpversion'] = 'Versión PHP'; +$lng['admin']['phpmemorylimit'] = 'Limite memoria PHP'; +$lng['admin']['mysqlserverversion'] = 'Versión servidor MySQL'; +$lng['admin']['mysqlclientversion'] = 'Versión cliente MySQL'; +$lng['admin']['webserverinterface'] = 'Interface servidor de red'; +$lng['menue']['extras']['extras'] = 'Extras'; +$lng['extras']['pathoptions_edit'] = 'editar opciones de ruta/directorio'; +$lng['domain']['openbasedirpath'] = 'Directorio OpenBasedir'; +$lng['menue']['main']['username'] = 'Ingreso como: '; +$lng['serversettings']['defaultip']['title'] = 'IP/Puerto por defecto'; +$lng['serversettings']['defaultip']['description'] = '¿Cuál es la combinación de IP y Puerto por defecto?'; +$lng['domains']['statstics'] = 'Estadisticas de uso'; +$lng['panel']['ascending'] = 'ascendiente'; +$lng['panel']['decending'] = 'descendiente'; +$lng['panel']['search'] = 'Buscar'; +$lng['panel']['used'] = 'usado'; +$lng['panel']['translator'] = 'Traductor'; +$lng['error']['stringformaterror'] = 'El valor para la fila "%s" no esta dentro de los formatos esperados.'; + +?> \ No newline at end of file diff --git a/lng/swedish.lng.php b/lng/swedish.lng.php new file mode 100644 index 0000000000..0cc66e1bd7 --- /dev/null +++ b/lng/swedish.lng.php @@ -0,0 +1,740 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Language + * @version $Id: swedish.lng.php 2724 2009-06-07 14:18:02Z flo $ + */ + +/** + * Global + */ + +$lng['translator'] = 'Staffan Starberg'; +$lng['panel']['edit'] = 'Ändra'; +$lng['panel']['delete'] = 'Radera'; +$lng['panel']['create'] = 'Skapa'; +$lng['panel']['save'] = 'Spara'; +$lng['panel']['yes'] = 'Ja'; +$lng['panel']['no'] = 'Nej'; +$lng['panel']['emptyfornochanges'] = 'Tomt fält = ingen ändring'; +$lng['panel']['emptyfordefault'] = 'Förvalt värde används om fältet lämnas tommt'; +$lng['panel']['path'] = 'Sökväg (Path)'; +$lng['panel']['toggle'] = 'Växla (Toggle)'; +$lng['panel']['next'] = 'nästa'; +$lng['panel']['dirsmissing'] = 'Kan inte hitta eller läsa katalogen!'; + +/** + * Login + */ + +$lng['login']['username'] = 'Användarnamn'; +$lng['login']['password'] = 'Lösenord'; +$lng['login']['language'] = 'Språk'; +$lng['login']['login'] = 'Logga in'; +$lng['login']['logout'] = 'Logga ut'; +$lng['login']['profile_lng'] = 'Profilspråk'; + +/** + * Customer + */ + +$lng['customer']['documentroot'] = 'Hemkatalog'; +$lng['customer']['name'] = 'Efternamn'; +$lng['customer']['firstname'] = 'Förnamn'; +$lng['customer']['company'] = 'Företag'; +$lng['customer']['street'] = 'Postadress'; +$lng['customer']['zipcode'] = 'Postnummer'; +$lng['customer']['city'] = 'Postort'; +$lng['customer']['phone'] = 'Telefon'; +$lng['customer']['fax'] = 'Fax'; +$lng['customer']['email'] = 'E-post'; +$lng['customer']['customernumber'] = 'Kundnummer'; +$lng['customer']['diskspace'] = 'Webb (MB)'; +$lng['customer']['traffic'] = 'Trafik (GB)'; +$lng['customer']['mysqls'] = 'SQL_DBas'; +$lng['customer']['emails'] = 'E-post_adresser'; +$lng['customer']['accounts'] = 'E-post_konton'; +$lng['customer']['forwarders'] = 'E-post_skicka_vidare'; +$lng['customer']['ftps'] = 'FTP_Kto'; +$lng['customer']['subdomains'] = 'Sub-Domäner'; +$lng['customer']['domains'] = 'Domäner'; +$lng['customer']['unlimited'] = 'Obegränsad'; + +/** + * Customermenue + */ + +$lng['menue']['main']['main'] = 'Huvudsidan'; +$lng['menue']['main']['changepassword'] = 'Ändra lösenord'; +$lng['menue']['main']['changelanguage'] = 'Ändra språk'; +$lng['menue']['email']['email'] = 'E-post'; +$lng['menue']['email']['emails'] = 'E-post'; +$lng['menue']['email']['webmail'] = 'WebMail'; +$lng['menue']['mysql']['mysql'] = 'MySQL'; +$lng['menue']['mysql']['databases'] = 'Databaser'; +$lng['menue']['mysql']['phpmyadmin'] = 'phpMyAdmin'; +$lng['menue']['domains']['domains'] = 'Domäner'; +$lng['menue']['domains']['settings'] = 'Inställningar'; +$lng['menue']['ftp']['ftp'] = 'FTP'; +$lng['menue']['ftp']['accounts'] = 'Konton'; +$lng['menue']['ftp']['webftp'] = 'WebFTP'; +$lng['menue']['extras']['extras'] = 'Extras'; +$lng['menue']['extras']['directoryprotection'] = 'Katalog säkerhet'; +$lng['menue']['extras']['pathoptions'] = 'Inställningar sökväg'; + +/** + * Index + */ + +$lng['index']['customerdetails'] = 'Kunddetaljer'; +$lng['index']['accountdetails'] = 'Kontodetaljer'; + +/** + * Change Password + */ + +$lng['changepassword']['old_password'] = 'Gammalt lösenord'; +$lng['changepassword']['new_password'] = 'Nytt lösenord'; +$lng['changepassword']['new_password_confirm'] = 'Nytt lösenord (verifiera)'; +$lng['changepassword']['new_password_ifnotempty'] = 'Nytt lösenord (Tomt fältet = inga ändringar)'; +$lng['changepassword']['also_change_ftp'] = ' Ändra även lösenord för huvud FTP kontot'; + +/** + * Domains + */ + +$lng['domains']['description'] = 'Här kan du skapa (sub-)domäner och ändra i dem.
    Systemet behöver dock lite tid på sig att genomföra ändringarna.'; +$lng['domains']['domainsettings'] = 'Domäninställningar'; +$lng['domains']['domainname'] = 'Domännamn'; +$lng['domains']['subdomain_add'] = '[Skapa en ny subdomän]'; +$lng['domains']['subdomain_edit'] = 'Ändra (sub)domän'; +$lng['domains']['wildcarddomain'] = 'Skapa som ospecificerad domän (Create as wildcarddomain?)'; +$lng['domains']['aliasdomain'] = 'Alias for domän'; +$lng['domains']['noaliasdomain'] = '(inget alias)'; + +/** + * E-mails + */ + +$lng['emails']['description'] = 'Här kan du skapa eller ändra dina E-postadresser.
    Ett konto är som en brevlåda utanför huset. Om någon skickar dig E-post kommer det att hamna i din brevlåda (ditt konto).

    För att hämta din E-post så skall du använda följande inställningar i ditt E-postprogram: (Text i kursiv stil italics måste ändras till det som motsvaras av det du knappade in tidigare!)
    Servernamn (Hostname): Domännamn (Domainname)
    Användarnamn (Username): Konto namn (Account name) / E-postadress
    Lösenord (Password): lösenordet som du valde'; +$lng['emails']['emailaddress'] = 'E-postadress'; +$lng['emails']['emails_add'] = '[Skapa en E-postadress]'; +$lng['emails']['emails_edit'] = 'Ändra E-postadressen'; +$lng['emails']['catchall'] = 'Maildump'; +$lng['emails']['iscatchall'] = 'Skapa en maildump?'; +$lng['emails']['account'] = 'Konto'; +$lng['emails']['account_add'] = 'Skapa konto'; +$lng['emails']['account_delete'] = 'Radera konto'; +$lng['emails']['from'] = 'Från'; +$lng['emails']['to'] = 'Till'; +$lng['emails']['forwarders'] = 'Skicka vidare:'; +$lng['emails']['forwarder_add'] = '[Skapa ny "skicka vidare"]'; + +/** + * FTP + */ + +$lng['ftp']['description'] = 'Här kan du skapa eller änra i dina FTP konton.
    Ändringen genomförs omedelbart så man kan använda det nya/ändrade kontot direkt.'; +$lng['ftp']['account_add'] = '[Skapa ett nytt FTP konto]'; + +/** + * MySQL + */ + +$lng['mysql']['databasename'] = 'Användare/databasnamn'; +$lng['mysql']['databasedescription'] = 'Beskrivning av databasen'; +$lng['mysql']['database_create'] = '[Skapa en ny databas]'; + +/** + * Extras + */ + +$lng['extras']['description'] = 'Här kan du ändra övriga saker såsom katalogskydd mm.
    Systemet behöver dock lite tid på sig att genomföra ändringarna.'; +$lng['extras']['directoryprotection_add'] = '[Skapa ett nytt katalogskydd]'; +$lng['extras']['view_directory'] = 'Visa kataloginnehåll'; +$lng['extras']['pathoptions_add'] = '[Skapa ny regel för sökvägar]'; +$lng['extras']['directory_browsing'] = 'Visning av katalogstruktur'; +$lng['extras']['pathoptions_edit'] = 'Ändra sökvägsinställningar'; +$lng['extras']['error404path'] = '404'; +$lng['extras']['error403path'] = '403'; +$lng['extras']['error500path'] = '500'; +$lng['extras']['error401path'] = '401'; +$lng['extras']['errordocument404path'] = 'URL to ErrorDocument 404'; +$lng['extras']['errordocument403path'] = 'URL to ErrorDocument 403'; +$lng['extras']['errordocument500path'] = 'URL to ErrorDocument 500'; +$lng['extras']['errordocument401path'] = 'URL to ErrorDocument 401'; + +/** + * Errors + */ + +$lng['error']['error'] = 'Följande fel har uppstått'; +$lng['error']['directorymustexist'] = 'Katalogen %s måste finnas. Skapa den med ditt FTP program.'; +$lng['error']['filemustexist'] = 'Filen %s måste existera.'; +$lng['error']['allresourcesused'] = 'Du har redan skapt så många konton som du har tillstånd till.'; +$lng['error']['domains_cantdeletemaindomain'] = 'Du kan inte radera en domän som användes för E-post.'; +$lng['error']['domains_canteditdomain'] = 'Endast administratörer kan ändra denna domän.'; +$lng['error']['domains_cantdeletedomainwithemail'] = 'Du kan inte radera en domän som användes för E-post. Radera alla E-postadresser först'; +$lng['error']['firstdeleteallsubdomains'] = 'Du måste radera alla sub-domäner innan du kan skapa en maildump (wildcard domain).'; +$lng['error']['youhavealreadyacatchallforthisdomain'] = 'Du har redan skapat en maildump för denna domän.'; +$lng['error']['ftp_cantdeletemainaccount'] = 'Det går inte att radera huvud FTP kontot för domänen'; +$lng['error']['login'] = 'Användarnamnet eller lösenordet var felaktigt, försök igen!'; +$lng['error']['login_blocked'] = 'Kontot har blivit avstängt på grund av för många felaktiga inloggningsförsök.
    Försök igen om ' . $settings['login']['deactivatetime'] . ' sekunder.'; +$lng['error']['notallreqfieldsorerrors'] = 'Du har inte fyllt i alla fält eller så har du skrivit in något som inte accepteras.'; +$lng['error']['oldpasswordnotcorrect'] = 'Det gamla lösenordet är fel.'; +$lng['error']['youcantallocatemorethanyouhave'] = 'Du kan inte skapa fler resurser än du äger själv (You cannot allocate more resources than you own for yourself).'; +$lng['error']['mustbeurl'] = 'Du har inte skrivit in en korrekt url (e.g. http://somedomain.com/error404.htm)'; +$lng['error']['invalidpath'] = 'Du har inte valt en korrekt url (Kanske har du lagt till en katalogsäkerhet så att katalogerna inte kan visas?)'; +$lng['error']['stringisempty'] = 'Du måste skriva in något i fältet'; +$lng['error']['stringiswrong'] = 'Fel inatningsfält'; +$lng['error']['myloginname'] = '\'' . $lng['login']['username'] . '\''; +$lng['error']['mypassword'] = '\'' . $lng['login']['password'] . '\''; +$lng['error']['oldpassword'] = '\'' . $lng['changepassword']['old_password'] . '\''; +$lng['error']['newpassword'] = '\'' . $lng['changepassword']['new_password'] . '\''; +$lng['error']['newpasswordconfirm'] = '\'' . $lng['changepassword']['new_password_confirm'] . '\''; +$lng['error']['newpasswordconfirmerror'] = 'New password and confirmation does not match'; +$lng['error']['myname'] = '\'' . $lng['customer']['name'] . '\''; +$lng['error']['myfirstname'] = '\'' . $lng['customer']['firstname'] . '\''; +$lng['error']['emailadd'] = '\'' . $lng['customer']['email'] . '\''; +$lng['error']['mydomain'] = '\'Domain\''; +$lng['error']['mydocumentroot'] = '\'Documentroot\''; +$lng['error']['loginnameexists'] = 'Login-Name %s är upptaget'; +$lng['error']['emailiswrong'] = 'E-post-Adressen "%s" innehåller ogiltiga tecken eller så är den inte komplett'; +$lng['error']['loginnameiswrong'] = 'Login-Namnet %s innehåller ogiltiga tecken'; +$lng['error']['userpathcombinationdupe'] = 'Användarnamnet och sökvägen tillsammans finns redan'; +$lng['error']['patherror'] = 'Generellt Fel! sökvägen till katalogen kan inte vara tom'; +$lng['error']['errordocpathdupe'] = 'Option för sökvägen %s finns redan'; +$lng['error']['adduserfirst'] = 'Skapa användaren först'; +$lng['error']['domainalreadyexists'] = 'Domänen %s ägs redan av en kund'; +$lng['error']['nolanguageselect'] = 'Inget språk är valt.'; +$lng['error']['nosubjectcreate'] = 'Du måste ha ett rubrik för denna E-postmall.'; +$lng['error']['nomailbodycreate'] = 'Du måste ha skrivit in en E-post text för denna mall.'; +$lng['error']['templatenotfound'] = 'E-postmallen hittades inte.'; +$lng['error']['alltemplatesdefined'] = 'Du kan inte skapa flera mallar, alla språk finns redan.'; +$lng['error']['wwwnotallowed'] = 'www är inte tillåtet att använda för subdomäner.'; +$lng['error']['subdomainiswrong'] = 'Subdomänen %s innehåller ogiltiga tecken.'; +$lng['error']['domaincantbeempty'] = 'Fältet för domännamn får inte vara tommt.'; +$lng['error']['domainexistalready'] = 'Domänen %s finns redan.'; +$lng['error']['domainisaliasorothercustomer'] = 'Den valda domänen är antingen en aliasdomän eller så ägs den redan av en annan kund.'; +$lng['error']['emailexistalready'] = 'E-postadressen %s finns redan.'; +$lng['error']['maindomainnonexist'] = 'Huvuddomänen %s finns inte.'; +$lng['error']['destinationnonexist'] = 'Skapa en forwarder i fältet \'Destination\'.'; +$lng['error']['destinationalreadyexistasmail'] = 'Denna forwarder %s, finns redan som aktiv E-postadress.'; +$lng['error']['destinationalreadyexist'] = 'Du har redan skapat en forwarder till %s .'; +$lng['error']['destinationiswrong'] = 'Denna forwarder: %s innehåller ogiltiga tecken eller så är den inte komplett adress.'; +$lng['error']['domainname'] = $lng['domains']['domainname']; + +/** + * Questions + */ + +$lng['question']['question'] = 'Säkerhetsfråga'; +$lng['question']['admin_customer_reallydelete'] = 'Är du säker på att du vill radera kunden %s? Om du väljer att radera går det inte att ångra sig efteråt!'; +$lng['question']['admin_domain_reallydelete'] = 'Är du riktigt säker på att du vill radera domänen %s?'; +$lng['question']['admin_domain_reallydisablesecuritysetting'] = 'Är du riktigt säker på att du vill avaktivera säkerhetsinställningarna (OpenBasedir and/or SafeMode)?'; +$lng['question']['admin_admin_reallydelete'] = 'Är du riktigt säker på att du vill radera adminkontot %s? Alla kunder och domäner kommer att flyttas till ditt konto istället.'; +$lng['question']['admin_template_reallydelete'] = 'Är du riktigt säker på att du vill radera mallen \'%s\'?'; +$lng['question']['domains_reallydelete'] = 'Är du riktigt säker på att du vill radera domänen %s?'; +$lng['question']['email_reallydelete'] = 'Är du riktigt säker på att du vill radera E-postadressen %s?'; +$lng['question']['email_reallydelete_account'] = 'Är du riktigt säker på att du vill radera E-postkontot %s?'; +$lng['question']['email_reallydelete_forwarder'] = 'Är du riktigt säker på att du vill radera forwardern till %s?'; +$lng['question']['extras_reallydelete'] = 'Är du riktigt säker på att du vill radera katalogsäkerheten (directory protection) för %s?'; +$lng['question']['extras_reallydelete_pathoptions'] = 'Är du riktigt säker på att du vill radera katalogalternativen (path options) för %s?'; +$lng['question']['ftp_reallydelete'] = 'Är du riktigt säker på att du vill radera FTP kontot %s?'; +$lng['question']['mysql_reallydelete'] = 'Är du riktigt säker på att du vill radera databasen %s? Om du väljer att radera går det inte att ångra sig efteråt!'; +$lng['question']['admin_configs_reallyrebuild'] = 'Är du riktigt säker på att du vill skapa nya konfigurationsfiler för apache och bind?'; + +/** + * Mails + */ + +$lng['mails']['pop_success']['mailbody'] = 'Hej,\n\nDitt E-postkonto {EMAIL}\nhar nu skapats.\n\nDetta är ett automatgenererat E-post meddelande\n, Det går därför inte att svara på detta meddelande!\n'; +$lng['mails']['pop_success']['subject'] = 'E-postkontot är nu skapat'; +$lng['mails']['createcustomer']['mailbody'] = 'Hej {FIRSTNAME} {NAME},\n\nHär kommer kontoinformationen för ditt konto:\n\nAnvändarnamn (Username): {USERNAME}\nLösenord (Password): {PASSWORD}\n\n'; +$lng['mails']['createcustomer']['subject'] = 'Kontoinformation'; + +/** + * Admin + */ + +$lng['admin']['overview'] = 'Översikt'; +$lng['admin']['ressourcedetails'] = 'Använda resurser'; +$lng['admin']['systemdetails'] = 'System Detaljer'; +$lng['admin']['syscpdetails'] = 'SysCP Detaljer'; +$lng['admin']['installedversion'] = 'Installerad version av SysCP'; +$lng['admin']['latestversion'] = 'Senaste version av SysCP'; +$lng['admin']['lookfornewversion']['clickhere'] = '[Sök senaste verison av SysCP via Internet]'; +$lng['admin']['lookfornewversion']['error'] = 'Fel vid läsning, kontrollera uppkopplingen mot SysCP'; +$lng['admin']['resources'] = 'Resurser'; +$lng['admin']['customer'] = 'Kunder'; +$lng['admin']['customers'] = 'Kunder'; +$lng['admin']['customer_add'] = '[Skapa en ny kund]'; +$lng['admin']['customer_edit'] = 'Ändra ny kund'; +$lng['admin']['domains'] = 'Domäner'; +$lng['admin']['domain_add'] = '[Skapa en ny domän]'; +$lng['admin']['domain_edit'] = 'Tillåt ändring av domänen'; +$lng['admin']['subdomainforemail'] = 'Sub-domän som E-postdomän (Subdomains as emaildomains)'; +$lng['admin']['admin'] = 'Admin'; +$lng['admin']['admins'] = 'Admins'; +$lng['admin']['admin_add'] = '[Skapa en ny admin]'; +$lng['admin']['admin_edit'] = 'Ändra admin'; +$lng['admin']['customers_see_all'] = 'Kan se alla kunder?'; +$lng['admin']['domains_see_all'] = 'Kan se alla domäner?'; +$lng['admin']['change_serversettings'] = 'Kan ändra serverinställningar?'; +$lng['admin']['server'] = 'Server'; +$lng['admin']['serversettings'] = 'Inställningar'; +$lng['admin']['rebuildconf'] = 'Uppdatera konfig filer'; +$lng['admin']['stdsubdomain'] = 'Standard subdomän'; +$lng['admin']['stdsubdomain_add'] = '[Skapa en ny standard subdomän]'; +$lng['admin']['phpenabled'] = 'PHP påslagen'; +$lng['admin']['deactivated'] = 'Inaktiv'; +$lng['admin']['deactivated_user'] = 'Avaktivera användare'; +$lng['admin']['sendpassword'] = 'Skicka lösenord'; +$lng['admin']['ownvhostsettings'] = 'Egna vHost-Inställningar'; +$lng['admin']['configfiles']['serverconfiguration'] = 'Konfiguration'; +$lng['admin']['configfiles']['files'] = 'Konfigurationsfiler: Ändra eller skapa följande filer med
    följande innehåll om de inte finns redan.
    Notera: MySQL-lösenordet har inte ändrats på grund av säkerhetsskäl.
    Du måste själv ändra lösenordet "MYSQL_PASSWORD" på egen hand. Om du glömt bort ditt MySQL-password
    så kan du hitta det här "lib/userdata.inc.php".'; +$lng['admin']['configfiles']['commands'] = 'Kommandon: Kör följande kommandon i ett terminalfönster.'; +$lng['admin']['configfiles']['restart'] = 'Omstart: Kör följande kommandon i ett terminalfönster för att ladda in den nya konfigurationen.'; +$lng['admin']['templates']['templates'] = 'Mallar'; +$lng['admin']['templates']['template_add'] = '[Lägg till en ny mall]'; +$lng['admin']['templates']['template_edit'] = 'Ändra en befintlig mall'; +$lng['admin']['templates']['action'] = 'Action'; +$lng['admin']['templates']['email'] = 'E-Post'; +$lng['admin']['templates']['subject'] = 'Rubrik (subjekt)'; +$lng['admin']['templates']['mailbody'] = 'E-Postinnehåll (Mail body)'; +$lng['admin']['templates']['createcustomer'] = 'E-Post till nya kunder (Välkommen)'; +$lng['admin']['templates']['pop_success'] = 'E-Post för nya konton (Välkommen)'; +$lng['admin']['templates']['template_replace_vars'] = 'Variabler som kan ändras i mallen:'; +$lng['admin']['templates']['FIRSTNAME'] = 'Ändra till kundens förnamn.'; +$lng['admin']['templates']['NAME'] = 'Ändra till kundens efternamn.'; +$lng['admin']['templates']['USERNAME'] = 'Ändra till kundens kontonamns användarnamn.'; +$lng['admin']['templates']['PASSWORD'] = 'Ändra till kundens kontonamns lösenord.'; +$lng['admin']['templates']['EMAIL'] = 'Ändra till adressen för POP3/IMAP kontot.'; + +/** + * Serversettings + */ + +$lng['serversettings']['session_timeout']['title'] = 'Sessionen har avslutats för att den tog för lång tid att utföra (session Timeout)'; +$lng['serversettings']['session_timeout']['description'] = 'Tiden (i sekunder) som användaren får vara inaktiv innan han måste logga in igen är (seconds)?'; +$lng['serversettings']['accountprefix']['title'] = 'Kund ID (Customer prefix)'; +$lng['serversettings']['accountprefix']['description'] = 'Vilket prefix skall användas till ett kundkonto?'; +$lng['serversettings']['mysqlprefix']['title'] = 'SQL ID (SQL Prefix)'; +$lng['serversettings']['mysqlprefix']['description'] = 'Vilket prefix skall användas till mysql?'; +$lng['serversettings']['ftpprefix']['title'] = 'FTP ID (FTP Prefix)'; +$lng['serversettings']['ftpprefix']['description'] = 'Vilket prefix skall användas till ftp?'; +$lng['serversettings']['documentroot_prefix']['title'] = 'Hemkatalog'; +$lng['serversettings']['documentroot_prefix']['description'] = 'Vilken sökväg skall det vara till hemkatalogen?'; +$lng['serversettings']['logfiles_directory']['title'] = 'Loggfilernas hemkatalog (Logfiles directory)'; +$lng['serversettings']['logfiles_directory']['description'] = 'Vilken sökväg skall det vara till loggfilernas hemkatalog?'; +$lng['serversettings']['ipaddress']['title'] = 'IP-Adress'; +$lng['serversettings']['ipaddress']['description'] = 'Vilken IP-adress har denna server?'; +$lng['serversettings']['hostname']['title'] = 'Datornamn (Hostname)'; +$lng['serversettings']['hostname']['description'] = 'Villket Datornamn (Hostname) har denna server?'; +$lng['serversettings']['apachereload_command']['title'] = 'Ladda om Apache kommandot (Apache reload)'; +$lng['serversettings']['apachereload_command']['description'] = 'Ange sökvägen till programmet som laddar om Apache (reload apache) konfigurationsfiler?'; +$lng['serversettings']['bindconf_directory']['title'] = 'Bind konfigurationskatalog (Bind config directory)'; +$lng['serversettings']['bindconf_directory']['description'] = 'Vilken sökväg skall det vara till bind:s konfigurationsfiler?'; +$lng['serversettings']['bindreload_command']['title'] = 'Ange sökvägen till programmet som laddar om Bind (reload bind) konfigurationsfiler?'; +$lng['serversettings']['bindreload_command']['description'] = 'Ange sökvägen till programmet som laddar om Bind (reload bind) konfigurationsfiler?'; +$lng['serversettings']['binddefaultzone']['title'] = 'Bind standard zone'; +$lng['serversettings']['binddefaultzone']['description'] = 'Vad är namnet på standard zonen?'; +$lng['serversettings']['vmail_uid']['title'] = 'Mails-UID'; +$lng['serversettings']['vmail_uid']['description'] = 'Vilket användarID (UserID) ska E-posten ha?'; +$lng['serversettings']['vmail_gid']['title'] = 'Mails-GID'; +$lng['serversettings']['vmail_gid']['description'] = 'Vilket gruppID (GroupID) ska E-posten ha?'; +$lng['serversettings']['vmail_homedir']['title'] = 'E-post hemkatalog'; +$lng['serversettings']['vmail_homedir']['description'] = 'I vilken katalog skall E-posten sparas?'; +$lng['serversettings']['adminmail']['title'] = 'Avsändare'; +$lng['serversettings']['adminmail']['description'] = 'Vilken avsändaradress skall E-post från admin panelen ha?'; +$lng['serversettings']['phpmyadmin_url']['title'] = 'phpMyAdmin URL'; +$lng['serversettings']['phpmyadmin_url']['description'] = 'Vilken URL är det till phpMyAdmin? (Måste börja med http(s)://)'; +$lng['serversettings']['webmail_url']['title'] = 'WebMail URL'; +$lng['serversettings']['webmail_url']['description'] = 'Vilken URL är det till WebMail? (Måste börja med http(s)://)'; +$lng['serversettings']['webftp_url']['title'] = 'WebFTP URL'; +$lng['serversettings']['webftp_url']['description'] = 'Vilken URL är det till WebFTP? (Måste börja med http(s)://)'; +$lng['serversettings']['language']['description'] = 'Vilket språk skall användas som standardspråk?'; +$lng['serversettings']['maxloginattempts']['title'] = 'Max antal Login försök'; +$lng['serversettings']['maxloginattempts']['description'] = 'Maximalt antal inloggningsförsök innan kontot stängs av.'; +$lng['serversettings']['deactivatetime']['title'] = 'Avstängningstid'; +$lng['serversettings']['deactivatetime']['description'] = 'Tid (sec.) som kontot stängs av efter för många felaktiga försök.'; +$lng['serversettings']['pathedit']['title'] = 'Typ av (path input)'; +$lng['serversettings']['pathedit']['description'] = 'Skall en sökväg väljas i en rullist eller matas in för hand?'; +$lng['serversettings']['nameservers']['title'] = 'Nameservers'; +$lng['serversettings']['nameservers']['description'] = 'En kommaseparerad lista med namnet (hostname) på alla DNS:er. Den första blir den första som söks (primary).'; +$lng['serversettings']['mxservers']['title'] = 'MX servers'; +$lng['serversettings']['mxservers']['description'] = 'En kommaseparerad lista med nummer och namn separerade men mellanslag (ex. \'10 mx.example.com\') innehåller mx servrarna.'; + +/** + * CHANGED BETWEEN 1.2.12 and 1.2.13 + */ + +$lng['mysql']['description'] = 'Här ändras eller skapas MySQL-Databaser.
    Ändringen sker omedelbart och databasen kan användas direkt.
    I menyn på vänster sida finns verktyget phpMyAdmin med vilket man enkelt kan ändra i sin databas.

    För att använda databasen i dina egna php-scripts använd följande inställningar: (Data med kursiv stil italics måste ändras till det du matat in!)
    Servernamn (Hostname):
    Användarnamn (Username): Databsnamn (Databasename)
    Lösenord (Password): Lösenordet som du har valt
    Databas (Database): Databasnamn (Databasename)'; + +/** + * ADDED BETWEEN 1.2.12 and 1.2.13 + */ + +$lng['admin']['cronlastrun'] = 'Konfigurerinsfilerna skapades sist'; +$lng['serversettings']['paging']['title'] = 'Antal rader per sida'; +$lng['serversettings']['paging']['description'] = 'Hur många rader skall det vara på en sida? (0 = Stäng av sidbrytning)'; +$lng['error']['ipstillhasdomains'] = 'IP/Port kombinationen som du vill radera har fortfarande domäner anslutna till sig, Flytta dessa till någon annan IP/Port kombination innan du raderar denna IP/Port kombination.'; +$lng['error']['cantdeletedefaultip'] = 'Det går inte att ta bort den förvalda återförsäljarens IP/Port kombination, Välj en annan IP/Port kombination som förval för återförsäljare innan du raderar denna IP/Port kombination.'; +$lng['error']['cantdeletesystemip'] = 'Det går inte att radera den sista system IP:n, Antingen skapar man en ny IP/Port kombination för system IP eller så ändrar man system IP:n.'; +$lng['error']['myipaddress'] = '\'IP\''; +$lng['error']['myport'] = '\'Port\''; +$lng['error']['myipdefault'] = 'Man måste välja en IP/Port kombination som skall bli standardvärdet.'; +$lng['error']['myipnotdouble'] = 'Denna IP/Port kombination finns redan.'; +$lng['question']['admin_ip_reallydelete'] = 'Är du säker på att du vill radera IP addressen %s?'; +$lng['admin']['ipsandports']['ipsandports'] = 'IPs and Ports'; +$lng['admin']['ipsandports']['add'] = '[Lägg till IP/Port]'; +$lng['admin']['ipsandports']['edit'] = 'Ändra IP/Port'; +$lng['admin']['ipsandports']['ipandport'] = 'IP/Port'; +$lng['admin']['ipsandports']['ip'] = 'IP'; +$lng['admin']['ipsandports']['port'] = 'Port'; + +// ADDED IN 1.2.13-rc3 + +$lng['error']['cantchangesystemip'] = 'Man kan inte ändra den senaste system IP-adressen. Skapa en helt ny IP/Port kombination för system IP:n eller ändra system IP-adressen.'; +$lng['question']['admin_domain_reallydocrootoutofcustomerroot'] = 'Dokumentkatalogen för denna domän inte kommer att ligga under kundkatalogen, är du säker på att du vill ändra detta?'; + +// ADDED IN 1.2.14-rc1 + +$lng['admin']['memorylimitdisabled'] = 'Avstängd'; +$lng['domain']['openbasedirpath'] = 'OpenBasedir-path'; +$lng['domain']['docroot'] = 'Sökvägen från ovanstående fält'; +$lng['domain']['homedir'] = 'Hemkatalog'; +$lng['admin']['valuemandatory'] = 'Denna ruta måste fyllas i'; +$lng['admin']['valuemandatorycompany'] = 'Fyll i "förnamn" och "efternamn" eller "företagsnamn"'; +$lng['menue']['main']['username'] = 'Inloggad som: '; +$lng['panel']['urloverridespath'] = 'URL (skriver över sökvägen)'; +$lng['panel']['pathorurl'] = 'Sökväg eller URL'; +$lng['error']['sessiontimeoutiswrong'] = 'Bara siffror "Session Timeout" är tillåtna.'; +$lng['error']['maxloginattemptsiswrong'] = 'Bara siffror "Max Login Attempts" är tillåtna.'; +$lng['error']['deactivatetimiswrong'] = 'Bara siffror "Deactivate Time" är tillåtna.'; +$lng['error']['accountprefixiswrong'] = 'Det här "Customerprefix" är fel.'; +$lng['error']['mysqlprefixiswrong'] = 'Det här "SQL Prefix" är fel.'; +$lng['error']['ftpprefixiswrong'] = 'Det här "FTP Prefix" är fel.'; +$lng['error']['ipiswrong'] = 'Den här "IP-Address" är fel. Endast en giltig IP-adress är tillåten.'; +$lng['error']['vmailuidiswrong'] = 'Den här "Mails-uid" är fel. Endast numerisk UID är tillåtenis allowed.'; +$lng['error']['vmailgidiswrong'] = 'Den här "Mails-gid" är fel. Endast numerisk GID är tillåtenis allowed.'; +$lng['error']['adminmailiswrong'] = 'Den här "Sender-address" är fel. Endast en giltig E-postadress är tillåten.'; +$lng['error']['pagingiswrong'] = 'Den här "Entries per Page"-värdet är fel. Endast siffror är tillåtna.'; +$lng['error']['phpmyadminiswrong'] = 'Den här phpMyAdmin-link är inte en giltig länk.'; +$lng['error']['webmailiswrong'] = 'Den här WebMail-link är inte en giltig länk.'; +$lng['error']['webftpiswrong'] = 'Den här WebFTP-link är inte en giltig länk.'; +$lng['domains']['hasaliasdomains'] = 'Domänen har redan alias'; +$lng['serversettings']['defaultip']['title'] = 'Förvald IP/Port'; +$lng['serversettings']['defaultip']['description'] = 'Vilken är den förvalda IP/Port kombinationen?'; +$lng['domains']['statstics'] = 'Användarstatistik'; +$lng['panel']['ascending'] = 'Stigande'; +$lng['panel']['decending'] = 'Fallande'; +$lng['panel']['search'] = 'Sök'; +$lng['panel']['used'] = 'använd'; + +// ADDED IN 1.2.14-rc3 + +$lng['panel']['translator'] = 'Översättare'; + +// ADDED IN 1.2.14-rc4 + +$lng['error']['stringformaterror'] = 'Värdet för fältet "%s" har inte rätt format.'; + +// ADDED IN 1.2.15-rc1 + +$lng['admin']['serversoftware'] = 'Webserver version'; +$lng['admin']['phpversion'] = 'PHP-Version'; +$lng['admin']['phpmemorylimit'] = 'PHP-Minnesgräns'; +$lng['admin']['mysqlserverversion'] = 'MySQL Server Version'; +$lng['admin']['mysqlclientversion'] = 'MySQL Klient Version'; +$lng['admin']['webserverinterface'] = 'Webserver Interface'; +$lng['domains']['isassigneddomain'] = 'Tilldelad domän '; +$lng['serversettings']['phpappendopenbasedir']['title'] = 'Sökväg att lägga till OpenBasedir'; +$lng['serversettings']['phpappendopenbasedir']['description'] = 'Dessa sökvägar (separerade med kolon) kommer att läggas till OpenBasedir-statement i alla vhost-container.'; + +// CHANGED IN 1.2.15-rc1 + +$lng['error']['loginnameissystemaccount'] = 'Det går inte att skapa ett konto som liknar ett systemkonto (Om det till exempel börjar med "%s"). Vlj ett annat kontonamn.'; +$lng['error']['youcantdeleteyourself'] = 'Av säkerhetsskäl går inte att redera ditt eget konto.'; +$lng['error']['youcanteditallfieldsofyourself'] = 'Notera: Av säkerhetsskäl går det inte att ändra ditt eget konto.'; + +// ADDED IN 1.2.16-svn1 + +$lng['serversettings']['natsorting']['title'] = 'Använd mänsklig sortertering i listvisning'; +$lng['serversettings']['natsorting']['description'] = 'Sorterar listan så här web1 -> web2 -> web11 istället för web1 -> web11 -> web2.'; + +// ADDED IN 1.2.16-svn2 + +$lng['serversettings']['deactivateddocroot']['title'] = 'Dokumentroot för avstängda användare'; +$lng['serversettings']['deactivateddocroot']['description'] = 'När en användare är avstängd kommer denna sökväg att användas som dokumentroot. Lämna fältet tommt om du inte vill skapa någon vhost.'; + +// ADDED IN 1.2.16-svn4 + +$lng['panel']['reset'] = 'Avbryt ändringarna'; +$lng['admin']['accountsettings'] = 'Kontoinställningar'; +$lng['admin']['panelsettings'] = 'Panelinställningar'; +$lng['admin']['systemsettings'] = 'Systeminställningar'; +$lng['admin']['webserversettings'] = 'Webserverinställningar'; +$lng['admin']['mailserversettings'] = 'E-postserverinställningar'; +$lng['admin']['nameserversettings'] = 'Namnserverinställningar'; +$lng['admin']['updatecounters'] = 'Uppdatera status'; +$lng['question']['admin_counters_reallyupdate'] = 'Vill du uppdatera alla statusberäkningar för kunder och admins?'; +$lng['panel']['pathDescription'] = 'Katalogen kommer att skapas om den inte redan finns.'; + +// ADDED IN 1.2.16-svn6 + +$lng['mails']['trafficninetypercent']['mailbody'] = 'Varning {NAME},\n\nDu har nu använt {TRAFFICUSED} MB av ditt tillgängliga {TRAFFIC} MB för trafik.\nDetta är mer än 90%.\n\nHälsningar, SysCP team'; +$lng['mails']['trafficninetypercent']['subject'] = 'Du är på väg att nå din tillåtna trafikgräns'; +$lng['admin']['templates']['trafficninetypercent'] = 'Meddelande till kund när mer än nittio procent av trafiken utnyttjas'; +$lng['admin']['templates']['TRAFFIC'] = 'Ersatt med trafikbegrnsningen som var tilldelad till kunden.'; +$lng['admin']['templates']['TRAFFICUSED'] = 'Ersatt med trafikbegrnsningen som var överskriden av kunden.'; + +// ADDED IN 1.2.16-svn7 + +$lng['admin']['subcanemaildomain']['never'] = 'Aldrig'; +$lng['admin']['subcanemaildomain']['choosableno'] = 'Valbar, standardvärdet är Nej'; +$lng['admin']['subcanemaildomain']['choosableyes'] = 'Valbar, standardvärdet är Ja'; +$lng['admin']['subcanemaildomain']['always'] = 'Alltid'; +$lng['changepassword']['also_change_webalizer'] = ' Ändra även lösenord för webalizer statistik'; + +// ADDED IN 1.2.16-svn8 + +$lng['serversettings']['mailpwcleartext']['title'] = 'Spara även lösenord till E-postkonton okrypterade i databassen'; +$lng['serversettings']['mailpwcleartext']['description'] = 'Om du valt Ja så kommer alla lösenord att sparas okrypterade (klartext, fullt läsbara för alla som har rättigheter till databasen) i tabellen mail_users-table. Aktivera detta endast om du är säker på vad du gör!'; +$lng['serversettings']['mailpwcleartext']['removelink'] = 'Klicka här för att radera alla okrypterade lösenord från tabellen.'; +$lng['question']['admin_cleartextmailpws_reallywipe'] = 'Är du säker på att du vill radera alla okrupterade lösenord från tabellen mail_users? Du kan INTE ändra dig efteråt!'; +$lng['admin']['configfiles']['overview'] = 'Översikt'; +$lng['admin']['configfiles']['wizard'] = 'Guide'; +$lng['admin']['configfiles']['distribution'] = 'Distribution'; +$lng['admin']['configfiles']['service'] = 'Service'; +$lng['admin']['configfiles']['daemon'] = 'Daemon'; +$lng['admin']['configfiles']['http'] = 'Webserver (HTTP)'; +$lng['admin']['configfiles']['dns'] = 'Namnserver (DNS)'; +$lng['admin']['configfiles']['mail'] = 'E-postserver (POP3/IMAP)'; +$lng['admin']['configfiles']['smtp'] = 'E-postserver (SMTP)'; +$lng['admin']['configfiles']['ftp'] = 'FTP-Server'; +$lng['admin']['configfiles']['etc'] = 'Others (System)'; +$lng['admin']['configfiles']['choosedistribution'] = '-- Choose a distribution --'; +$lng['admin']['configfiles']['chooseservice'] = '-- Choose a service --'; +$lng['admin']['configfiles']['choosedaemon'] = '-- Choose a daemon --'; +$lng['admin']['trafficlastrun'] = 'Senaste trafikberäkningen gjordes'; + +// ADDED IN 1.2.16-svn10 + +$lng['serversettings']['ftpdomain']['title'] = 'FTP konton @domain'; +$lng['serversettings']['ftpdomain']['description'] = 'Kunder kan skapa Ftp accounts user@customerdomain?'; +$lng['panel']['back'] = 'Tillbaka'; + +// ADDED IN 1.2.16-svn12 + +$lng['serversettings']['mod_log_sql']['title'] = 'Tillfälligt spara loggfiler i databasen'; +$lng['serversettings']['mod_log_sql']['description'] = 'Använd mod_log_sql för att spara webfrågor tillfälligt
    Detta behöver en special apache-configuration!'; +$lng['serversettings']['mod_fcgid']['title'] = 'Inkludera PHP via mod_fcgid/suexec'; +$lng['serversettings']['mod_fcgid']['description'] = 'Använd mod_fcgid/suexec/libnss_mysql för att köra PHP med tillhörande användarkonto.
    Denna inställning behöver en speciell apache-konfiguration!'; +$lng['serversettings']['sendalternativemail']['title'] = 'Använd en alternativ E-postadress'; +$lng['serversettings']['sendalternativemail']['description'] = 'Skicka lösenord med E-post till adressen under email-account-creation'; +$lng['emails']['alternative_emailaddress'] = 'Alternative e-mail-address'; +$lng['mails']['pop_success_alternative']['mailbody'] = 'Hej,\n\nditt E-postkonto {EMAIL}\nhar ny skapats.\nDitt lösenord är {PASSWORD}.\n\nDetta är ett automatgenererat E-postmeddelande som det INTE går att svara på!\n\nLycka till önskar, SysCP'; +$lng['mails']['pop_success_alternative']['subject'] = 'E-postkontot är nu skapat'; +$lng['admin']['templates']['pop_success_alternative'] = 'Välkommstmeddelande för nya E-post konton som skickas till den alternativa adressen'; +$lng['admin']['templates']['EMAIL_PASSWORD'] = 'Ersatt med POP3/IMAP kontots lösenord.'; + +// ADDED IN 1.2.16-svn13 + +$lng['error']['documentrootexists'] = 'Katalogen "%s" finns redan hos den här kunden. Radera detta först innan kunden skapas igen.'; + +// ADDED IN 1.2.16-svn14 + +$lng['serversettings']['apacheconf_vhost']['title'] = 'Apache vhost konfiguration fil/katalognamn'; +$lng['serversettings']['apacheconf_vhost']['description'] = 'Var skall vhost konfigurationen sparas? Det går att specificera alla vhost i en fil eller en katalog där alla filerna ligger (varje vhost i sin egen fil).'; +$lng['serversettings']['apacheconf_diroptions']['title'] = 'Apache diroptions konfiguration fil/katalognamn'; +$lng['serversettings']['apacheconf_diroptions']['description'] = 'Var skall diroptions konfigurationen sparas? Det går att specificera alla diroptions i en fil eller en katalog där alla filerna ligger (varje diroptions i sin egen fil).'; +$lng['serversettings']['apacheconf_htpasswddir']['title'] = 'Apache htpasswd katalognamn'; +$lng['serversettings']['apacheconf_htpasswddir']['description'] = 'Var skall htpasswd konfigurationen för katalogsäkerheten?'; + +// ADDED IN 1.2.16-svn15 + +$lng['error']['formtokencompromised'] = 'Den säkra anslutningen till SysCP har avslutats och du har av säkerhetsskäl automatiskt loggats ur.'; +$lng['serversettings']['mysql_access_host']['title'] = 'MySQL-Access-Hosts'; +$lng['serversettings']['mysql_access_host']['description'] = 'En kommaseparerad lista med datornamn som tillåts att kontakta MySQL servern.'; + +// ADDED IN 1.2.18-svn1 + +$lng['admin']['ipsandports']['create_listen_statement'] = 'Skapa "Listen statement"'; +$lng['admin']['ipsandports']['create_namevirtualhost_statement'] = 'Skapa NameVirtualHost statement'; +$lng['admin']['ipsandports']['create_vhostcontainer'] = 'Skapa vHost-Container'; +$lng['admin']['ipsandports']['create_vhostcontainer_servername_statement'] = 'Skapa ServerName statement i vHost-Container'; + +// ADDED IN 1.2.18-svn2 + +$lng['admin']['webalizersettings'] = 'Webalizer inställningar'; +$lng['admin']['webalizer']['normal'] = 'Normal'; +$lng['admin']['webalizer']['quiet'] = 'Tyst'; +$lng['admin']['webalizer']['veryquiet'] = 'Väldigt tyst'; +$lng['serversettings']['webalizer_quiet']['title'] = 'Webalizer output'; +$lng['serversettings']['webalizer_quiet']['description'] = 'Verbosity of the webalizer-program'; + +// ADDED IN 1.2.18-svn3 + +$lng['ticket']['admin_email'] = 'root@localhost'; +$lng['ticket']['noreply_email'] = 'tickets@syscp'; +$lng['admin']['ticketsystem'] = 'Support'; +$lng['menue']['ticket']['ticket'] = 'Supportärenden'; +$lng['menue']['ticket']['categories'] = 'Kategorier'; +$lng['menue']['ticket']['archive'] = 'Arkivet'; +$lng['ticket']['description'] = 'Skriv en beskrivning av ärendet här!'; +$lng['ticket']['ticket_new'] = '[Skapa ett nytt ärende]'; +$lng['ticket']['ticket_reply'] = 'Svara ärende'; +$lng['ticket']['ticket_reopen'] = 'Återöppna ärende'; +$lng['ticket']['ticket_newcateory'] = '[Skapa ny kategori]'; +$lng['ticket']['ticket_editcateory'] = 'Ändra kategori'; +$lng['ticket']['ticket_view'] = 'View ticketcourse'; +$lng['ticket']['ticketcount'] = 'Ärendenummer'; +$lng['ticket']['ticket_answers'] = 'Svar'; +$lng['ticket']['lastchange'] = 'Senaste ändring'; +$lng['ticket']['subject'] = 'Rubrik'; +$lng['ticket']['status'] = 'Status'; +$lng['ticket']['lastreplier'] = 'Ägare'; +$lng['ticket']['priority'] = 'Prioritet'; +$lng['ticket']['low'] = 'Låg'; +$lng['ticket']['normal'] = 'Normal'; +$lng['ticket']['high'] = 'Hög'; +$lng['ticket']['unf_low'] = 'Låg'; +$lng['ticket']['unf_normal'] = 'Normal'; +$lng['ticket']['unf_high'] = 'Hög'; +$lng['ticket']['lastchange'] = 'Ändrad'; +$lng['ticket']['lastchange_from'] = 'Från datum (dd.mm.yyyy)'; +$lng['ticket']['lastchange_to'] = 'Till datum (dd.mm.yyyy)'; +$lng['ticket']['category'] = 'Kategori'; +$lng['ticket']['no_cat'] = 'None'; +$lng['ticket']['message'] = 'Meddeland'; +$lng['ticket']['show'] = 'Visa'; +$lng['ticket']['answer'] = 'Svara'; +$lng['ticket']['close'] = 'Stäng'; +$lng['ticket']['reopen'] = 'Öppna igen'; +$lng['ticket']['archive'] = 'Arkivera'; +$lng['ticket']['ticket_delete'] = 'Radera ett ärende'; +$lng['ticket']['lastarchived'] = 'Recently archived tickets'; +$lng['ticket']['archivedtime'] = 'Arkiverad'; +$lng['ticket']['open'] = 'Öppnad'; +$lng['ticket']['wait_reply'] = 'Väntar på svar'; +$lng['ticket']['replied'] = 'Besvarad'; +$lng['ticket']['closed'] = 'Stängd'; +$lng['ticket']['staff'] = 'Staff'; +$lng['ticket']['customer'] = 'Kund'; +$lng['ticket']['old_tickets'] = 'Ärende meddelanden'; +$lng['ticket']['search'] = 'Sök i arkivet'; +$lng['ticket']['nocustomer'] = 'Inget val'; +$lng['ticket']['archivesearch'] = 'Arkiv sökresultat'; +$lng['ticket']['noresults'] = 'Inget ärende funnet'; +$lng['ticket']['notmorethanxopentickets'] = 'På grund av spamhanteringen kan du inte ha mer än %s öppna ärenden'; +$lng['ticket']['supportstatus'] = 'Support-Status'; +$lng['ticket']['supportavailable'] = 'Våra supporttekniker tar nu gärna emot era supportärenden.'; +$lng['ticket']['supportnotavailable'] = 'Våra supporttekniker är inte tillgängliga just nu.'; +$lng['admin']['templates']['ticket'] = 'Informations E-post för supportärenden'; +$lng['admin']['templates']['SUBJECT'] = 'Ersatt med supportärendet rubrik'; +$lng['admin']['templates']['new_ticket_for_customer'] = 'Kundinformation som ärendet har skickat'; +$lng['admin']['templates']['new_ticket_by_customer'] = 'Admininformation för ett ärende öppnat av kund'; +$lng['admin']['templates']['new_reply_ticket_by_customer'] = 'Admininformation för ett svar från kund'; +$lng['admin']['templates']['new_ticket_by_staff'] = 'Kundinformation för ett ärende öppnat av ledningen'; +$lng['admin']['templates']['new_reply_ticket_by_staff'] = 'Kundinformation för ett ärende besvarat av ledningen'; +$lng['mails']['new_ticket_for_customer']['mailbody'] = 'Hej {FIRSTNAME} {NAME},\n\nDitt supportärende med rubriken "{SUBJECT}" har skickats till supporten.\n\nVi meddelar dig när ditt ärende har blivit besvarat.\n\nMed vänliga hälsningar,\n SysCP'; +$lng['mails']['new_ticket_for_customer']['subject'] = 'Ditt supportärende har nu skickats'; +$lng['mails']['new_ticket_by_customer']['mailbody'] = 'Hej admin,\n\nEtt nytt supportärende med rubriken "{SUBJECT}" har nu skapats.\n\nVänligen logga in för att öppna ärendet.\n\nMed vänliga hälsningar,\n SysCP'; +$lng['mails']['new_ticket_by_customer']['subject'] = 'Nytt supportärende skapat'; +$lng['mails']['new_reply_ticket_by_customer']['mailbody'] = 'Hej admin,\n\nDitt supportärende "{SUBJECT}" har blivit besvarat an en kund.\n\nVänligen logga in för att öppna ärendet.\n\nMed vänliga hälsningar,\n SysCP'; +$lng['mails']['new_reply_ticket_by_customer']['subject'] = 'Nytt svar för supportärendet'; +$lng['mails']['new_ticket_by_staff']['mailbody'] = 'Hej {FIRSTNAME} {NAME},\n\nEtt nytt supportärende har öppnats med rubriken "{SUBJECT}".\n\nVänligen logga in för att öppna ärendet.\n\nMed vänliga hälsningar,\n SysCP'; +$lng['mails']['new_ticket_by_staff']['subject'] = 'Nytt supportärede behandlat'; +$lng['mails']['new_reply_ticket_by_staff']['mailbody'] = 'Hej {FIRSTNAME} {NAME},\n\nSupportärendet med rubriken "{SUBJECT}" har besvarats av vår personal.\n\nVänligen logga in för att öppna ärendet.\n\nMed vänliga hälsningar,\n SysCP'; +$lng['mails']['new_reply_ticket_by_staff']['subject'] = 'Svar på ert supportärende'; +$lng['question']['ticket_reallyclose'] = 'Är du säker på att du vill stänga supportärendet "%s"?'; +$lng['question']['ticket_reallydelete'] = 'Är du säker på att du vill radera supportärendet "%s"?'; +$lng['question']['ticket_reallydeletecat'] = 'Är du säker på att du vill radera kategorin "%s"?'; +$lng['question']['ticket_reallyarchive'] = 'Är du säker på att du vill flytta supportärendet "%s" till arkivet?'; +$lng['error']['mysubject'] = '\'' . $lng['ticket']['subject'] . '\''; +$lng['error']['mymessage'] = '\'' . $lng['ticket']['message'] . '\''; +$lng['error']['mycategory'] = '\'' . $lng['ticket']['category'] . '\''; +$lng['error']['nomoreticketsavailable'] = 'Du har redan använt alla supportärenden som du fått tilldelade. Kontakta administratören om du behöver fler.'; +$lng['error']['nocustomerforticket'] = 'Det går inte att skapa ett supportärende utan kunder'; +$lng['error']['categoryhastickets'] = 'Denna kategori har fortfarande supportärenden.
    Du måste radera dessa ärenden innan du kan radera denna kategori'; +$lng['error']['notmorethanxopentickets'] = $lng['ticket']['notmorethanxopentickets']; +$lng['admin']['ticketsettings'] = 'Supportärende inställningar'; +$lng['admin']['archivelastrun'] = 'Sista supportärende som arkiverats'; +$lng['serversettings']['ticket']['noreply_email']['title'] = 'Svara-Inte E-post adress'; +$lng['serversettings']['ticket']['noreply_email']['description'] = 'Avsändaradressen för support-ticket, exempel: inget-svar@syscp.se'; +$lng['serversettings']['ticket']['worktime_begin']['title'] = 'Start av support-tid (hh:mm)'; +$lng['serversettings']['ticket']['worktime_begin']['description'] = 'Start-tid, när supporten är tillgänglig'; +$lng['serversettings']['ticket']['worktime_end']['title'] = 'Slut på support-tid (hh:mm)'; +$lng['serversettings']['ticket']['worktime_end']['description'] = 'Slut-tid, när supporten inte längre är tillgänglig'; +$lng['serversettings']['ticket']['worktime_sat'] = 'Supporten har öppet på lördagar?'; +$lng['serversettings']['ticket']['worktime_sun'] = 'Supporten har öppet på söndagar?'; +$lng['serversettings']['ticket']['worktime_all']['title'] = 'Supporten är tillgänglig dygnet runt'; +$lng['serversettings']['ticket']['worktime_all']['description'] = 'Om du väljer "Ja" så kommer start och stopp tiderna att skrivas över'; +$lng['serversettings']['ticket']['archiving_days'] = 'Efter hur många dagar skall stängda tickets arkiveras?'; +$lng['customer']['tickets'] = 'Support ärenden'; + +// ADDED IN 1.2.18-svn4 + +$lng['admin']['domain_nocustomeraddingavailable'] = 'Det går inte att skapa en ny domän innan det finns mins en upplagd kund.'; +$lng['serversettings']['ticket']['enable'] = 'Tillåt användninga av ticketsystemet'; +$lng['serversettings']['ticket']['concurrentlyopen'] = 'Maximalt antal tickets som kan öppnas samtidigt?'; +$lng['error']['norepymailiswrong'] = 'Den här adressen "Noreply-address" är felaktig. Bara giltiga E-post adresser är tillåtna.'; +$lng['error']['tadminmailiswrong'] = 'Den här adressen "Ticketadmin-address" är felaktig. Bara giltiga E-post adresser är tillåtna.'; +$lng['ticket']['awaitingticketreply'] = 'Du har %s obesvarade support-ticket(s)'; + +// ADDED IN 1.2.18-svn5 + +$lng['serversettings']['ticket']['noreply_name'] = 'Supportärendes namn på E-postadressen'; + +// ADDED IN 1.2.19-svn1 + +$lng['serversettings']['mod_fcgid']['configdir']['title'] = 'FCGI konfigurationskatalog'; +$lng['serversettings']['mod_fcgid']['configdir']['description'] = 'I vilken katalog skall alla fcgi-konfigurationfiler lagras?'; +$lng['serversettings']['mod_fcgid']['tmpdir']['title'] = 'FCGI temporärkatalog'; + +// ADDED IN 1.2.19-svn3 + +$lng['serversettings']['ticket']['reset_cycle']['title'] = 'Återställ cykeln för använda supportärenden'; +$lng['serversettings']['ticket']['reset_cycle']['description'] = 'Återställ kundens räknare för använda supportärenden. Vald cykel = 0'; +$lng['admin']['tickets']['daily'] = 'Dagligen'; +$lng['admin']['tickets']['weekly'] = 'Varje vecka'; +$lng['admin']['tickets']['monthly'] = 'Varje månad'; +$lng['admin']['tickets']['yearly'] = 'Varje år'; +$lng['error']['ticketresetcycleiswrong'] = 'Cykeln för återställning av supportärenden måste vara "Dagligen", "Varje vecka", "varje månad" or "varje år".'; + +// ADDED IN 1.2.19-svn4 + +$lng['menue']['traffic']['traffic'] = 'Trafik'; +$lng['menue']['traffic']['current'] = 'Nuvarande månad'; +$lng['traffic']['month'] = "Månad"; +$lng['traffic']['day'] = "Dag"; +$lng['traffic']['months'][1] = "Januari"; +$lng['traffic']['months'][2] = "Februari"; +$lng['traffic']['months'][3] = "Mars"; +$lng['traffic']['months'][4] = "April"; +$lng['traffic']['months'][5] = "Maj"; +$lng['traffic']['months'][6] = "Juni"; +$lng['traffic']['months'][7] = "Juli"; +$lng['traffic']['months'][8] = "Augusti"; +$lng['traffic']['months'][9] = "September"; +$lng['traffic']['months'][10] = "Oktober"; +$lng['traffic']['months'][11] = "November"; +$lng['traffic']['months'][12] = "December"; +$lng['traffic']['mb'] = "Trafik (MB)"; +$lng['traffic']['distribution'] = 'FTP | HTTP | Mail'; +$lng['traffic']['sumhttp'] = 'Summa HTTP-Trafik i'; +$lng['traffic']['sumftp'] = 'Summa FTP-Trafik i'; +$lng['traffic']['summail'] = 'Summa E-posttrafik i'; + +?> \ No newline at end of file diff --git a/lng/zh-cn.lng.php b/lng/zh-cn.lng.php new file mode 100644 index 0000000000..a209c9960a --- /dev/null +++ b/lng/zh-cn.lng.php @@ -0,0 +1,456 @@ + + * @author Wang Changyi + * @author Patrick Brueckner + * @author Yuan Yang + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Language + * @version $Id: zh-cn.lng.php 2692 2009-03-27 18:04:47Z flo $ + */ + +/** + * Global + */ + +$lng['translator'] = 'Jackie Zhang, Wang Changyi, Yuan Yang'; +$lng['panel']['edit'] = '编辑'; +$lng['panel']['delete'] = '删除'; +$lng['panel']['create'] = '创建'; +$lng['panel']['save'] = '保存'; +$lng['panel']['yes'] = '是'; +$lng['panel']['no'] = '否'; +$lng['panel']['emptyfornochanges'] = '无改变清空'; +$lng['panel']['emptyfordefault'] = '默认值清空'; +$lng['panel']['path'] = '路径'; +$lng['panel']['toggle'] = '触发器'; +$lng['panel']['next'] = '下一个'; +$lng['panel']['dirsmissing'] = '目录不可添加或者不可读'; + +/** + * Login + */ + +$lng['login']['username'] = '用户名'; +$lng['login']['password'] = '密码'; +$lng['login']['language'] = '语言'; +$lng['login']['login'] = '登陆'; +$lng['login']['logout'] = '登出'; +$lng['login']['profile_lng'] = '用户标准语言'; + +/** + * Customer + */ + +$lng['customer']['documentroot'] = '根目录'; +$lng['customer']['name'] = '姓'; +$lng['customer']['firstname'] = '名'; +$lng['customer']['company'] = '公司'; +$lng['customer']['street'] = '街道'; +$lng['customer']['zipcode'] = '邮政编码'; +$lng['customer']['city'] = '城市'; +$lng['customer']['phone'] = '电话'; +$lng['customer']['fax'] = '传真'; +$lng['customer']['email'] = '电子邮件'; +$lng['customer']['customernumber'] = '顾客号'; +$lng['customer']['diskspace'] = '磁盘空间(MB)'; +$lng['customer']['traffic'] = '流量(GB)'; +$lng['customer']['mysqls'] = 'MySQL数据库'; +$lng['customer']['emails'] = '电子邮件地址'; +$lng['customer']['accounts'] = '电子邮件帐户'; +$lng['customer']['forwarders'] = '电子邮件转发'; +$lng['customer']['ftps'] = 'FTP文件格式'; +$lng['customer']['subdomains'] = '子域'; +$lng['customer']['domains'] = '域'; +$lng['customer']['unlimited'] = '无限的'; + +/** + * Customermenue + */ + +$lng['menue']['main']['main'] = '主要的'; +$lng['menue']['main']['changepassword'] = '更改密码'; +$lng['menue']['main']['changelanguage'] = '语言转换'; +$lng['menue']['email']['email'] = '电子邮件'; +$lng['menue']['email']['emails'] = '地址'; +$lng['menue']['email']['webmail'] = '网络邮件'; +$lng['menue']['mysql']['mysql'] = 'MySQL'; +$lng['menue']['mysql']['databases'] = '数据库'; +$lng['menue']['mysql']['phpmyadmin'] = 'phpMyAdmin'; +$lng['menue']['domains']['domains'] = '域'; +$lng['menue']['domains']['settings'] = '设置'; +$lng['menue']['ftp']['ftp'] = 'FTP'; +$lng['menue']['ftp']['accounts'] = '账户'; +$lng['menue']['ftp']['webftp'] = '网络FTP地址'; +$lng['menue']['extras']['extras'] = '专用'; +$lng['menue']['extras']['directoryprotection'] = '目录保护'; +$lng['menue']['extras']['pathoptions'] = '路径选择'; + +/** + * Index + */ + +$lng['index']['customerdetails'] = '用户数据'; +$lng['index']['accountdetails'] = '账户数据'; + +/** + * Change Password + */ + +$lng['changepassword']['old_password'] = '旧密码'; +$lng['changepassword']['new_password'] = '新密码'; +$lng['changepassword']['new_password_confirm'] = '新密码(确认)'; +$lng['changepassword']['new_password_ifnotempty'] = $lng['changepassword']['new_password'] . '(' . $lng['panel']['emptyfornochanges'] . ')'; +$lng['changepassword']['also_change_ftp'] = '改变主FTP入口的密码'; + +/** + * Domains + */ + +$lng['domains']['description'] = '这里您可以设置域以及更改路径
    在每次更改后系统需要一些时间重新读取设置'; +$lng['domains']['domainsettings'] = '域设置'; +$lng['domains']['domainname'] = '域名'; +$lng['domains']['subdomain_add'] = '添加子域'; +$lng['domains']['subdomain_edit'] = '编辑子域'; +$lng['domains']['wildcarddomain'] = '做为原始域登记'; +$lng['domains']['aliasdomain'] = '域别名'; +$lng['domains']['noaliasdomain'] = '无域别名'; + +/** + * eMails + */ + +$lng['emails']['description'] = '这里您可以创建您的电子邮件地址
    POP账户如同您门前的邮箱,每当有人给您写电子邮件,电子邮件便会被放置在POP账户中

    您邮件程序的进入数据如下所示:斜体字的说明会被每次的登记而替代
    主机名域名
    用户名):账户名/电子邮件地址
    密码:被选密码'; +$lng['emails']['emailaddress'] = '电子邮件地址'; +$lng['emails']['emails_add'] = '创建电子邮件地址'; +$lng['emails']['emails_edit'] = '编辑电子邮件地址'; +$lng['emails']['catchall'] = '电邮户口'; +$lng['emails']['iscatchall'] = '设置成电邮户口?'; +$lng['emails']['account'] = '帐户'; +$lng['emails']['account_add'] = '创建帐户'; +$lng['emails']['account_delete'] = '删除帐户'; +$lng['emails']['from'] = '从'; +$lng['emails']['to'] = '到'; +$lng['emails']['forwarders'] = '代运人'; +$lng['emails']['forwarder_add'] = '创建代运人'; + +/** + * FTP + */ + +$lng['ftp']['description'] = '这里您可以创建额外的FTP账户
    更改立刻生效并且FTP账户立刻可以使用'; +$lng['ftp']['account_add'] = '添加账户'; + +/** + * MySQL + */ + +$lng['mysql']['description'] = '这里您可以添加和删除MySQL数据库
    更改立刻生效并且数据库立刻可以使用
    在菜单中您可以找到去往phpMyAdmin的链接,在此您可以轻松编辑您数据库中的内容

    php原文件的进入数据如下所示:斜体字的说明会被每次的登记而替代
    主机名:
    用户名:数据库名
    密码:被选密码
    数据库:数据库名'; +$lng['mysql']['databasename'] = '用户名/数据库名'; +$lng['mysql']['databasedescription'] = '数据库描述'; +$lng['mysql']['database_create'] = '创建数据库'; + +/** + * Extras + */ + +$lng['extras']['description'] = '这里您可以创建额外的专用,譬如目录保护
    更改在一定时间后才生效'; +$lng['extras']['directoryprotection_add'] = '添加目录保护'; +$lng['extras']['view_directory'] = '显示记录'; +$lng['extras']['pathoptions_add'] = '配置路径'; +$lng['extras']['directory_browsing'] = '显示记录内容'; +$lng['extras']['pathoptions_edit'] = '路径设置处理'; +$lng['extras']['error404path'] = '404'; +$lng['extras']['error403path'] = '403'; +$lng['extras']['error500path'] = '500'; +$lng['extras']['error401path'] = '401'; +$lng['extras']['errordocument404path'] = '错误文件404路径'; +$lng['extras']['errordocument403path'] = '错误文件403路径'; +$lng['extras']['errordocument500path'] = '错误文件500路径'; +$lng['extras']['errordocument401path'] = '错误文件401路径'; + +/** + * Errors + */ + +$lng['error']['error'] = '错误报告'; +$lng['error']['directorymustexist'] = '目录%s必须存在.请创建您的FTP客户'; +$lng['error']['filemustexist'] = '文件%s必须存在.'; +$lng['error']['allresourcesused'] = '您已经使用了所有的资源'; +$lng['error']['domains_cantdeletemaindomain'] = '您不能删除已经作为电邮域使用过的域'; +$lng['error']['domains_canteditdomain'] = '您不能编辑这个域名,它已经被版主废除'; +$lng['error']['domains_cantdeletedomainwithemail'] = '您不能删除电子邮件域名,请首先删除所有的电子邮件地址'; +$lng['error']['firstdeleteallsubdomains'] = '在您创建一个新的原始域之前,必须先删除所有的子域。'; +$lng['error']['youhavealreadyacatchallforthisdomain'] = '您已经为这项域名设置了一个电邮户口'; +$lng['error']['ftp_cantdeletemainaccount'] = '您不能删除您的主账户'; +$lng['error']['login'] = '被输入的用户名/密码错误'; +$lng['error']['login_blocked'] = '由于多次错误的尝试这个账户将被关闭!
    请您在' . $settings['login']['deactivatetime'] . '秒后重新尝试。'; +$lng['error']['notallreqfieldsorerrors'] = '您没有填写所有的文本栏或者有一个文本栏被错误填写'; +$lng['error']['oldpasswordnotcorrect'] = '旧密码不正确'; +$lng['error']['youcantallocatemorethanyouhave'] = '您不能分配比您现有的更多的资源。'; +$lng['error']['mustbeurl'] = '您没有输入有效或者完整的url(例如http://somedomain.com/error404.htm)'; +$lng['error']['invalidpath'] = '您没有选择有效的URL地址(可能是目录列表的问题)'; +$lng['error']['stringisempty'] = '缺少区域内的输入'; +$lng['error']['stringiswrong'] = '区域内输入错误'; +$lng['error']['myloginname'] = '\'' . $lng['login']['username'] . '\''; +$lng['error']['mypassword'] = '\'' . $lng['login']['password'] . '\''; +$lng['error']['oldpassword'] = '\'' . $lng['changepassword']['old_password'] . '\''; +$lng['error']['newpassword'] = '\'' . $lng['changepassword']['new_password'] . '\''; +$lng['error']['newpasswordconfirm'] = '\'' . $lng['changepassword']['new_password_confirm'] . '\''; +$lng['error']['newpasswordconfirmerror'] = '新密码和新密码确定不匹配'; +$lng['error']['myname'] = '\'' . $lng['customer']['name'] . '\''; +$lng['error']['myfirstname'] = '\'' . $lng['customer']['firstname'] . '\''; +$lng['error']['emailadd'] = '\'' . $lng['customer']['email'] . '\''; +$lng['error']['mydomain'] = '\'域名\''; +$lng['error']['mydocumentroot'] = '\'文件来源\''; +$lng['error']['loginnameexists'] = '登陆名%s已经存在'; +$lng['error']['emailiswrong'] = '电子邮件地址 %s 包含了无效的字符或者不完整'; +$lng['error']['loginnameiswrong'] = '电子邮件地址 %s 包含了无效的字符'; +$lng['error']['userpathcombinationdupe'] = '用户名和路径已经存在'; +$lng['error']['patherror'] = '常规错误! 路径不能空着'; +$lng['error']['errordocpathdupe'] = '路径选项%s已经存在'; +$lng['error']['adduserfirst'] = '请首先建立一个客户'; +$lng['error']['domainalreadyexists'] = '域名%s已经指派给了客户'; +$lng['error']['nolanguageselect'] = '没有选择语言'; +$lng['error']['nosubjectcreate'] = '您必须为邮件模板定义一个主题'; +$lng['error']['nomailbodycreate'] = '您必须为邮件模板定义邮件正文'; +$lng['error']['templatenotfound'] = '模板没有找到'; +$lng['error']['alltemplatesdefined'] = '您不能定义更多的模板,已经支持所有的语言'; +$lng['error']['wwwnotallowed'] = 'www不能作为子域名名称'; +$lng['error']['subdomainiswrong'] = '子域名%s包含了无效的字符'; +$lng['error']['domaincantbeempty'] = '域名不能空着'; +$lng['error']['domainexistalready'] = '域名%s已经存在'; +$lng['error']['domainisaliasorothercustomer'] = '|所选域别名可自身为别名域 或属于另一客户.'; +$lng['error']['emailexistalready'] = '电子邮件地址%s已经存在'; +$lng['error']['maindomainnonexist'] = '主域名%s不存在'; +$lng['error']['destinationnonexist'] = '请在区域内建立你的代运人\'目的地\''; +$lng['error']['destinationalreadyexistasmail'] = '到%s的代运人已经作为一个电子邮件地址存在'; +$lng['error']['destinationalreadyexist'] = '你已经定义了到%s的代运人'; +$lng['error']['destinationiswrong'] = '代运人%s包含了无效的字符或者不完整'; +$lng['error']['domainname'] = $lng['domains']['domainname']; + +/** + * Questions + */ + +$lng['question']['question'] = '安全问题'; +$lng['question']['admin_customer_reallydelete'] = '您真的想要删除这个客户吗%s?
    注意!所有的数据将不可挽回的丢失!在操作后您必须还要用手把数据从数据系统中删除'; +$lng['question']['admin_domain_reallydelete'] = '您真的想删除域%s吗?'; +$lng['question']['admin_domain_reallydisablesecuritysetting'] = '您真的想关闭这些重要的安全设置吗?'; +$lng['question']['admin_admin_reallydelete'] = '您真的要删除主要管理员%s?所有的客户和域可都是由它分配的!'; +$lng['question']['admin_template_reallydelete'] = '您真的想删除\'%s\'模板吗?'; +$lng['question']['domains_reallydelete'] = '您真的想删除域%s吗?'; +$lng['question']['email_reallydelete'] = '您真的想删除电子邮件%s吗?'; +$lng['question']['email_reallydelete_account'] = '您真的想删除电子邮件帐户%s吗?'; +$lng['question']['email_reallydelete_forwarder'] = '您真的想删除代运人%s吗?'; +$lng['question']['extras_reallydelete'] = '您真的想删除目录保护%s吗?'; +$lng['question']['extras_reallydelete_pathoptions'] = '您真的想删除这个路径的配置%s吗?'; +$lng['question']['ftp_reallydelete'] = '您真的想删FTP账户%s吗?'; +$lng['question']['mysql_reallydelete'] = '您真的想删除数据库%s吗?注意!所有的数据将不可挽回的丢失!'; +$lng['question']['admin_configs_reallyrebuild'] = '您真的想新建Apache和Bind配置文件吗?'; + +/** + * Mails + */ + +$lng['mails']['pop_success']['mailbody'] = '你好以被成功创建这是一个自动生成的这是一个自动生成的邮件,请不用答复这个通知您的服务小组'; +$lng['mails']['pop_success']['subject'] = 'POP3账户成功被创建'; +$lng['mails']['createcustomer']['mailbody'] = '您好{FIRSTNAME} {NAME},\n\n这里是您的账户信息:\n\n用户名: {USERNAME}\n密码: {PASSWORD}\n\n非常感谢,您的服务小组'; +$lng['mails']['createcustomer']['subject'] = '账户信息'; + +/** + * Admin + */ + +$lng['admin']['overview'] = '概要'; +$lng['admin']['ressourcedetails'] = '被使用的资源'; +$lng['admin']['systemdetails'] = '系统详情'; +$lng['admin']['syscpdetails'] = 'SysCP-详情'; +$lng['admin']['installedversion'] = '安装版本'; +$lng['admin']['latestversion'] = '最新版本'; +$lng['admin']['lookfornewversion']['clickhere'] = '通过网络服务询问'; +$lng['admin']['lookfornewversion']['error'] = '在挑选上出现错误'; +$lng['admin']['resources'] = '资源'; +$lng['admin']['customer'] = '客户'; +$lng['admin']['customers'] = '客户群'; +$lng['admin']['customer_add'] = '添加客户群'; +$lng['admin']['customer_edit'] = '编辑客户群'; +$lng['admin']['domains'] = '组域'; +$lng['admin']['domain_add'] = '添加域'; +$lng['admin']['domain_edit'] = '编辑域'; +$lng['admin']['subdomainforemail'] = '副域名作为电子邮件域名'; +$lng['admin']['admin'] = '主管'; +$lng['admin']['admins'] = '管理'; +$lng['admin']['admin_add'] = '加入新的主管'; +$lng['admin']['admin_edit'] = '对主管进行编辑'; +$lng['admin']['customers_see_all'] = '所有的客户都能看到吗?'; +$lng['admin']['domains_see_all'] = '所有的域都能看到吗?'; +$lng['admin']['change_serversettings'] = '服务设置能被修改吗?'; +$lng['admin']['server'] = '服务器'; +$lng['admin']['serversettings'] = '设置'; +$lng['admin']['rebuildconf'] = '配置新建'; +$lng['admin']['stdsubdomain'] = '默认子域'; +$lng['admin']['stdsubdomain_add'] = '添加默认子域'; +$lng['admin']['deactivated'] = '被禁止'; +$lng['admin']['deactivated_user'] = '封锁用户'; +$lng['admin']['sendpassword'] = '寄出密码'; +$lng['admin']['configfiles']['serverconfiguration'] = '配置'; +$lng['admin']['ownvhostsettings'] = '自己的主机设置(vHost)'; +$lng['admin']['configfiles']['files'] = '编辑数据:请您更改成相符的编辑数据。
    如果它们不存在,就请您输入下面的内容。
    请您注意:由于保密原因,MySQL的密码将不被替换。)
    请您通过手动的方式替换MySQL的密码。
    如果您忘记了密码,您可以在`lib/userdata.inc.php`找到。'; +$lng['admin']['configfiles']['commands'] = '命令:请您在一页内输出以下的命令。'; +$lng['admin']['configfiles']['restart'] = '重新开始:请您输出以下命令以便重新装载。编辑数据应不超过一页'; +$lng['admin']['templates']['templates'] = '模板'; +$lng['admin']['templates']['template_add'] = '添加模板'; +$lng['admin']['templates']['template_edit'] = '编辑模板'; +$lng['admin']['templates']['action'] = '动作'; +$lng['admin']['templates']['email'] = '电子邮件'; +$lng['admin']['templates']['subject'] = '主题'; +$lng['admin']['templates']['mailbody'] = '邮件内容'; +$lng['admin']['templates']['createcustomer'] = '对新客户的欢迎函'; +$lng['admin']['templates']['pop_success'] = '对新邮件帐户的欢迎函'; +$lng['admin']['templates']['template_replace_vars'] = '模板中的替换变量:'; +$lng['admin']['templates']['FIRSTNAME'] = '更换客户名'; +$lng['admin']['templates']['NAME'] = '更换客户姓'; +$lng['admin']['templates']['USERNAME'] = '更换客户帐户用户名'; +$lng['admin']['templates']['PASSWORD'] = '更换客户帐户密码'; +$lng['admin']['templates']['EMAIL'] = '更换 POP3/IMAP 帐户地址'; + +/** + * Serversettings + */ + +$lng['serversettings']['session_timeout']['title'] = '对话超时'; +$lng['serversettings']['session_timeout']['description'] = '用户多长时间必须呈现冻结状态,与此同时对话也变为无效'; +$lng['serversettings']['accountprefix']['title'] = '客户前缀'; +$lng['serversettings']['accountprefix']['description'] = '客户账户应该有哪种前缀?'; +$lng['serversettings']['mysqlprefix']['title'] = 'MySQL-前缀'; +$lng['serversettings']['mysqlprefix']['description'] = 'MySQL 账户应该有哪些前缀?'; +$lng['serversettings']['ftpprefix']['title'] = 'FTP前缀'; +$lng['serversettings']['ftpprefix']['description'] = 'FTP账户应该有哪些前缀?'; +$lng['serversettings']['documentroot_prefix']['title'] = '文档目录'; +$lng['serversettings']['documentroot_prefix']['description'] = '所有的客户应位于哪里?'; +$lng['serversettings']['logfiles_directory']['title'] = '登陆文件目录'; +$lng['serversettings']['logfiles_directory']['description'] = '所有的登陆文件应位于哪里'; +$lng['serversettings']['ipaddress']['title'] = 'IP地址'; +$lng['serversettings']['ipaddress']['description'] = '这个服务器IP地址是什么?'; +$lng['serversettings']['hostname']['title'] = '主机名'; +$lng['serversettings']['hostname']['description'] = '这个服务器的主机名是什么?'; +$lng['serversettings']['apachereload_command']['title'] = '阿帕奇重新读取命令'; +$lng['serversettings']['apachereload_command']['description'] = '被读取的阿帕奇文稿叫什么名字'; +$lng['serversettings']['bindconf_directory']['title'] = '连接配置目录'; +$lng['serversettings']['bindconf_directory']['description'] = '连接配置数据位于哪里?'; +$lng['serversettings']['bindreload_command']['title'] = '连接-重新读取命令'; +$lng['serversettings']['bindreload_command']['description'] = '连接的重置文本叫作什么'; +$lng['serversettings']['binddefaultzone']['title'] = '连接-默认区域'; +$lng['serversettings']['binddefaultzone']['description'] = '所有域的默认区域叫作什么?'; +$lng['serversettings']['vmail_uid']['title'] = '邮件UID'; +$lng['serversettings']['vmail_uid']['description'] = '邮件应该有哪些UID'; +$lng['serversettings']['vmail_gid']['title'] = '邮件Gid'; +$lng['serversettings']['vmail_gid']['description'] = '邮件应该有哪些Gid?'; +$lng['serversettings']['vmail_homedir']['title'] = '邮件地址目录'; +$lng['serversettings']['vmail_homedir']['description'] = '邮件应该位于哪里?'; +$lng['serversettings']['adminmail']['title'] = '发信人地址'; +$lng['serversettings']['adminmail']['description'] = '来自调查对象的邮件发信人地址是什么?'; +$lng['serversettings']['phpmyadmin_url']['title'] = 'phpMyAdmin地址'; +$lng['serversettings']['phpmyadmin_url']['description'] = 'phpMyAdmin位于哪里?'; +$lng['serversettings']['webmail_url']['title'] = '网络邮件的URL'; +$lng['serversettings']['webmail_url']['description'] = '网络邮件放在哪里?'; +$lng['serversettings']['webftp_url']['title'] = '网络FTP的URL'; +$lng['serversettings']['webftp_url']['description'] = '网络FTP放在哪里?'; +$lng['serversettings']['language']['description'] = '您的标准语言是什么语?'; +$lng['serversettings']['maxloginattempts']['title'] = '最多登陆次数'; +$lng['serversettings']['maxloginattempts']['description'] = '最多登陆次数直到帐户失效'; +$lng['serversettings']['deactivatetime']['title'] = '帐户失效时间'; +$lng['serversettings']['deactivatetime']['description'] = '帐户失效时间(以秒计算)'; +$lng['serversettings']['pathedit']['title'] = '路径输入方法'; +$lng['serversettings']['pathedit']['description'] = '路径是通过下拉菜单选择,还是自行输入?'; + +/** + * ADDED BETWEEN 1.2.12 and 1.2.13 + */ + +$lng['admin']['cronlastrun'] = '定时执行程序的最后一次执行'; +$lng['serversettings']['paging']['title'] = '每页进入次数'; +$lng['serversettings']['paging']['description'] = '一页上应该显示多少次 进入?(0 =无效分页)'; +$lng['error']['ipstillhasdomains'] = '你想要删除的IP/ 端口连接仍然占有分 配给他的域,在删除此IP/端口连接之前,请把这些域分配给其他IP/端口连接.'; +$lng['error']['cantdeletedefaultip'] = '你不能删除默认的分销商IP/端口连 接, 请在删除这个IP/端口连接前为分销商另设置默认IP/端口连接.'; +$lng['error']['cantdeletesystemip'] = '你不能删除系统IP, 你可以为系统IP 另生成一个新的IP/端口连接, 或者改变系统IP.'; +$lng['error']['myipaddress'] = '\'IP\''; +$lng['error']['myport'] = '\'端口\''; +$lng['error']['myipdefault'] = '你需要选择一个IP/端口连接并设为默认值.'; +$lng['error']['myipnotdouble'] = '这一IP/端口连接已存在.'; +$lng['question']['admin_ip_reallydelete'] = '你真的决定删除IP地址 %s?'; +$lng['admin']['ipsandports']['ipsandports'] = '多个IP和端口'; +$lng['admin']['ipsandports']['add'] = '添加IP/端口'; +$lng['admin']['ipsandports']['edit'] = '编辑IP/端口'; +$lng['admin']['ipsandports']['ipandport'] = 'IP/端口'; +$lng['admin']['ipsandports']['ip'] = 'IP'; +$lng['admin']['ipsandports']['port'] = '端口'; + +// ADDED IN 1.2.13-rc3 + +$lng['error']['cantchangesystemip'] = '你不能改变最近用过的系统IP,要么生成一个新的IP/端口组合, 要么改变系统IP.'; +$lng['question']['admin_domain_reallydocrootoutofcustomerroot'] = '你确定你想要这个域的文件源生成于客户的客户根目录之外?'; + +// ADDED IN 1.2.14-rc1 + +$lng['admin']['memorylimitdisabled'] = '关闭'; +$lng['error']['loginnameissystemaccount'] = '你不能生成与系统帐号相似的帐户. 请另输入一个帐户名'; +$lng['domain']['openbasedirpath'] = '公开基址目录路径'; +$lng['domain']['docroot'] = '来自上一信息组的路径'; +$lng['domain']['homedir'] = '家目录'; +$lng['admin']['valuemandatory'] = '此值为强制性的'; +$lng['admin']['valuemandatorycompany'] = '"姓"与"名"或者"公司名"为必填项'; +$lng['menue']['main']['username'] = '以: 登录 '; +$lng['panel']['urloverridespath'] = 'URL (覆盖路径)'; +$lng['panel']['pathorurl'] = '路径或URL'; +$lng['error']['sessiontimeoutiswrong'] = '只容许数字的"对话超时".'; +$lng['error']['maxloginattemptsiswrong'] = '只容许数字的"登录尝试最大值".'; +$lng['error']['deactivatetimiswrong'] = '只容许数字的"停用时间".'; +$lng['error']['accountprefixiswrong'] = '"客户前缀"错误.'; +$lng['error']['mysqlprefixiswrong'] = '"SQL前缀"错误.'; +$lng['error']['ftpprefixiswrong'] = '"FTP前缀"错误.'; +$lng['error']['ipiswrong'] = '"IP地址"错误. 只容许有效的IP地址.'; +$lng['error']['vmailuidiswrong'] = '"Mails-uid"错误. 只容许数字的UID.'; +$lng['error']['vmailgidiswrong'] = '"Mails-gid"错误. 只容许数字的GID.'; +$lng['error']['adminmailiswrong'] = '"寄件人地址"错误. 只容许有效的Email地址.'; +$lng['error']['pagingiswrong'] = '"每页记录"值错误. 只容许数字符号.'; +$lng['error']['phpmyadminiswrong'] = 'phpmyadmin-链接不是一个有效链接.'; +$lng['error']['webmailiswrong'] = 'WebMail-链接不是一个有效链接.'; +$lng['error']['webftpiswrong'] = 'WebFTP-链接不是一个有效链接.'; +$lng['domains']['hasaliasdomains'] = '有别名域'; +$lng['serversettings']['defaultip']['title'] = '默认IP/端口'; +$lng['serversettings']['defaultip']['description'] = '默认的IP/端口组合是什么?'; +$lng['domains']['statstics'] = '使用统计'; +$lng['panel']['ascending'] = '向上的'; +$lng['panel']['decending'] = '向下的'; +$lng['panel']['search'] = '搜寻'; +$lng['panel']['used'] = '已用'; + +// ADDED IN 1.2.14-rc3 + +$lng['panel']['translator'] = '翻译者'; + +// ADDED IN 1.2.14-rc4 + +$lng['error']['stringformaterror'] = '信息组"%s"值不是期望格式'; + +// ADDED in 1.2.15-svn1 + +$lng['admin']['serversoftware'] = '服务器软件'; +$lng['admin']['phpversion'] = 'php版本'; +$lng['admin']['phpmemorylimit'] = 'php内存限制'; +$lng['admin']['mysqlserverversion'] = 'mysql服务器版本'; +$lng['admin']['mysqlclientversion'] = 'mysql客户端版本'; +$lng['admin']['webserverinterface'] = '网页服务器接口'; + +?> diff --git a/packages/.keep b/packages/.keep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/scripts/cron_apsinstaller.php b/scripts/cron_apsinstaller.php new file mode 100644 index 0000000000..c1961f5a93 --- /dev/null +++ b/scripts/cron_apsinstaller.php @@ -0,0 +1,27 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Cron + * @version $Id: cron_apsinstaller.php 2724 2009-06-07 14:18:02Z flo $ + * @todo + */ + +$needrootdb = true; +require (dirname(__FILE__) . '/../lib/cron_init.php'); +$Aps = new ApsInstaller($settings, $db, $db_root); +$Aps->InstallHandler(); +require (dirname(__FILE__) . '/../lib/cron_shutdown.php'); + +?> \ No newline at end of file diff --git a/scripts/cron_apsupdater.php b/scripts/cron_apsupdater.php new file mode 100644 index 0000000000..55afd3534d --- /dev/null +++ b/scripts/cron_apsupdater.php @@ -0,0 +1,27 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package Cron + * @version $Id: cron_apsupdater.php 2724 2009-06-07 14:18:02Z flo $ + * @todo + */ + +$needrootdb = false; +require (dirname(__FILE__) . '/../lib/cron_init.php'); +$Aps = new ApsUpdater($db); +$Aps->UpdateHandler(); +require (dirname(__FILE__) . '/../lib/cron_shutdown.php'); + +?> \ No newline at end of file diff --git a/scripts/cron_autoresponder.php b/scripts/cron_autoresponder.php new file mode 100644 index 0000000000..f268797b16 --- /dev/null +++ b/scripts/cron_autoresponder.php @@ -0,0 +1,229 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package System + * @version $Id: cron_autoresponder.php 2724 2009-06-07 14:18:02Z flo $ + * @todo skip mail parsing after x bytes for large mails + * implement start and end date for autoresponder mails + */ + +$needrootdb = false; +require (dirname(__FILE__) . '/../lib/cron_init.php'); +$mail = new PHPMailer(); + +//dont do anything when module is disabled + +if((int)$settings['autoresponder']['autoresponder_active'] == 0) +{ + include ($pathtophpfiles . '/lib/cron_shutdown.php'); + return; +} + +//only send autoresponder to mails which were delivered since last run + +if((int)$settings['autoresponder']['last_autoresponder_run'] == 0) +{ + //mails from last 5 minutes, otherwise all mails will be parsed -> mailbomb prevention + + $cycle = 300; +} +else +{ + $cycle = time() - (int)$settings['autoresponder']['last_autoresponder_run']; + + //prevent mailbombs when cycle is bigger than two days + + if($cycle > (2 * 60 * 60 * 24))$cycle = (60 * 60 * 24); +} + +$db->query("UPDATE `" . TABLE_PANEL_SETTINGS . "` SET `value` = '" . (int)time() . "' WHERE `settinggroup` = 'autoresponder' AND `varname` = 'last_autoresponder_run'"); + +/* +//can be used for later usage if autoresponders should be only active in a defined period + +//This query has to disable every autoresponder entry which ended in the past +$db->query("UPDATE `autoresponder` SET `enabled` = 0 WHERE `to` < CURDATE()"); + +//This query has to activate every autoresponder entry which starts today +$db->query("UPDATE `autoresponder` SET `enabled` = 1 WHERE `from` = CURDATE()"); +*/ +//getting all mailboxes where autoresponders are active and configured + +$result = $db->query("SELECT * FROM `" . TABLE_MAIL_AUTORESPONDER . "` INNER JOIN `" . TABLE_MAIL_USERS . "` ON `" . TABLE_MAIL_AUTORESPONDER . "`.`email` = `" . TABLE_MAIL_USERS . "`.`email` WHERE `enabled` = 1"); + +if($db->num_rows($result) > 0) +{ + while($row = $db->fetch_array($result)) + { + $path = $row['homedir'] . $row['maildir'] . "new/"; + $files = scandir($path); + foreach($files as $entry) + { + if($entry == '.' + || $entry == '..')continue; + + if(time() - filemtime($path . $entry) - $cycle <= 0) + { + $content = file($path . $entry); + + //error reading mail contents + + if(count($content) == 0) + { + $cronlog->logAction(LOG_ERROR, LOG_WARNING, "Unable to read mail from maildir: " . $entry); + continue; + } + + $match = array(); + $from = ''; + $to = ''; + $sender = ''; + $spam = false; + foreach($content as $line) + { + // header ends on first empty line, skip rest of mail + + if(strlen(rtrim($line)) == 0) + { + break; + } + + //fetching from field + + if(!strlen($from) + && preg_match("/^From:(.+)<(.*)>$/", $line, $match)) + { + $from = $match[2]; + } + elseif(!strlen($from) + && preg_match("/^From:\s+(.*@.*)$/", $line, $match)) + { + $from = $match[1]; + } + + //fetching to field + + if(!strlen($to) + && preg_match("/^To:(.+)<(.*)>$/", $line, $match)) + { + $to = $match[2]; + } + elseif(!strlen($to) + && preg_match("/To:\s+(.*@.*)$/", $line, $match)) + { + $to = $match[1]; + } + + //fetching sender field + + if(!strlen($to) + && preg_match("/^Sender:(.+)<(.*)>$/", $line, $match)) + { + $sender = $match[2]; + } + elseif(!strlen($to) + && preg_match("/Sender:\s+(.*@.*)$/", $line, $match)) + { + $sender = $match[1]; + } + + //check for amavis/spamassassin spam headers + + if(preg_match("/^X-Spam-Status: (Yes|No)(.*)$/", $line, $match)) + { + if($match[1] == 'Yes')$spam = true; + } + + //check for precedence header + if(preg_match("/^Precedence: (bulk|list|junk)(.*)$/", $line, $match)) + { + // use the spam flag to skip reply + $spam = true; + } + } + + //skip mail when marked as spam + + if($spam == true)continue; + + //error while parsing mail + + if($to == '' + || $from == '') + { + $cronlog->logAction(LOG_ERROR, LOG_WARNING, "No valid headers found in mail to parse: " . $entry); + continue; + } + + //important! prevent mailbombs when mail comes from a maildaemon/mailrobot + //robot/daemon mails must go to Sender: field in envelope header + //refers to "Das Postfix-Buch" / RFC 2822 + + if($sender != '')$from = $sender; + + //make message valid to email format + + $message = str_replace("\r\n", "\n", $row['message']); + + //check if mail is already an answer + + $fullcontent = implode("", $content); + + if(strstr($fullcontent, $message)) + { + continue; + } + + //send mail with mailer class + + $mail->From = $to; + $mail->FromName = $to; + $mail->Subject = $row['subject']; + $mail->Body = html_entity_decode($message); + $mail->AddAddress($from, $from); + $mail->AddCustomHeader('Precedence: bulk'); + + if(!$mail->Send()) + { + if($mail->ErrorInfo != '') + { + $mailerr_msg = $mail->ErrorInfo; + } + else + { + $mailerr_msg = $from; + } + + $cronlog->logAction(LOG_ERROR, LOG_WARNING, "Error sending autoresponder mail: " . $mailerr_msg); + } + + $mail->ClearAddresses(); + } + } + } +} + +/** + * STARTING CRONSCRIPT FOOTER + */ + +include ($pathtophpfiles . '/lib/cron_shutdown.php'); + +/** + * END CRONSCRIPT FOOTER + */ + +?> diff --git a/scripts/cron_legacy.php b/scripts/cron_legacy.php new file mode 100644 index 0000000000..6b132fea1d --- /dev/null +++ b/scripts/cron_legacy.php @@ -0,0 +1,81 @@ + + * @author Martin Burchert + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package System + * @version $Id: cron_legacy.php 2692 2009-03-27 18:04:47Z flo $ + */ + +/** + * STARTING REDUNDANT CODE, WHICH IS SOME KINDA HEADER FOR EVERY CRON SCRIPT. + * When using this "header" you have to change $lockFilename for your needs. + * Don't forget to also copy the footer which closes database connections + * and the lockfile! (Note: This "header" also establishes a mysql-root- + * connection, if you don't need it, see for the header in cron_tasks.php) + */ + +$needrootdb = true; +include (dirname(__FILE__) . '/../lib/cron_init.php'); + +/** + * END REDUNDANT CODE (CRONSCRIPT "HEADER") + */ + +/** + * Check if table exists, otherwise create it + */ + +$tables = getTables($db); + +if(!isset($tables[TABLE_PANEL_CRONSCRIPT]) + || !is_array($tables[TABLE_PANEL_CRONSCRIPT])) +{ + $db->query('CREATE TABLE `' . TABLE_PANEL_CRONSCRIPT . '` ( `id` int(11) unsigned NOT NULL auto_increment, `file` varchar(255) NOT NULL default \'\', PRIMARY KEY (`id`) ) TYPE=MyISAM ; '); +} + +/** + * Backend Wrapper + */ + +$query = 'SELECT * FROM `' . TABLE_PANEL_CRONSCRIPT . '` '; +$cronFileIncludeResult = $db->query($query); + +while($cronFileIncludeRow = $db->fetch_array($cronFileIncludeResult)) +{ + $cronFileIncludeFullPath = makeSecurePath($pathtophpfiles . '/scripts/' . $cronFileIncludeRow['file']); + + if(fileowner($cronFileIncludeFullPath) == fileowner($pathtophpfiles . '/scripts/' . $filename) + && filegroup($cronFileIncludeFullPath) == filegroup($pathtophpfiles . '/scripts/' . $filename)) + { + fwrite($debugHandler, 'Processing ...' . $cronFileIncludeFullPath . "\n"); + include_once $cronFileIncludeFullPath; + fwrite($debugHandler, 'Processing done!' . "\n"); + } + else + { + fwrite($debugHandler, 'WARNING! uid and/or gid of "' . $cronFileIncludeFullPath . '" and "' . $pathtophpfiles . '/scripts/' . $filename . '" don\'t match! Execution aborted!' . "\n"); + $keepLockFile = true; + } +} + +/** + * STARTING CRONSCRIPT FOOTER + */ + +include ($pathtophpfiles . '/lib/cron_shutdown.php'); + +/** + * END CRONSCRIPT FOOTER + */ + +?> \ No newline at end of file diff --git a/scripts/cron_lighttp.htaccess.php b/scripts/cron_lighttp.htaccess.php new file mode 100644 index 0000000000..caa07727dc --- /dev/null +++ b/scripts/cron_lighttp.htaccess.php @@ -0,0 +1,182 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package System + * @version $Id: cron_lighttp.htaccess.php 2692 2009-03-27 18:04:47Z flo $ + */ + +/** + * STARTING REDUNDANT CODE, WHICH IS SOME KINDA HEADER FOR EVERY CRON SCRIPT. + * When using this "header" you have to change $lockFilename for your needs. + * Don't forget to also copy the footer which closes database connections + * and the lockfile! + */ + +include (dirname(__FILE__) . '/../lib/cron_init.php'); + +/** + * END REDUNDANT CODE (CRONSCRIPT "HEADER") + */ + +/** + * LOOK INTO EVERY CUSTOMER DIR TO SEE IF THERE ARE ANY .HTACCESS FILE TO "TRANSLATE" + */ + +if($settings['system']['webserver'] == 'lighttpd') +{ + fwrite($debugHandler, ' cron_lighttp.htaccess: Searching for .htaccess files to translate' . "\n"); + $lpath = makeCorrectDir(strrchr($settings['system']['apacheconf_vhost'], '/')); + $htaccessfh = @fopen($lpath . 'syscp-htaccess.conf', 'w'); + + if($htaccessfh !== false) + { + read_directory($settings['system']['documentroot_prefix'], 25, $htaccessfh); + } + else + { + fwrite($debugHandler, ' ERROR: Cannot open file ' . $lpath . 'syscp-htaccess.conf' . "\n"); + } +} +else +{ + fwrite($debugHandler, ' cron_lighttp.htaccess: You don\'t use Lighttpd, you do not have to run this cronscript!' . "\n"); +} + +/** + * STARTING CRONSCRIPT FOOTER + */ + +include ($pathtophpfiles . '/lib/cron_shutdown.php'); + +/** + * END CRONSCRIPT FOOTER + */ + +/** + * FUNCTIONS + */ + +function read_directory($dir1 = null, $min_depth = 25, $htaccessfh = null) +{ + global $htaccessfh; + + if(!is_string($dir1)) + { + return false; + } + + $depth = explode("/", $dir1); + $current_depth = sizeof($depth); + + if($current_depth < $min_depth) + { + $min_depth = $current_depth; + } + + $dir = $dir1; + $dh = opendir($dir); + + while($file = readdir($dh)) + { + if(($file != ".") + && ($file != "..")) + { + $file = $dir . "/" . $file; + for ($i = 0;$i <= ($current_depth - $min_depth);$i++) + + // $file is sub-directory + + if($ddh = @opendir($file)) + { + read_directory($file); + } + else + { + if(strtolower($file) == '.htaccess') + { + parseHtaccess($file); + } + } + } + } + + closedir($dh); + return true; +} + +function parseHtaccess($file = null) +{ + global $debugHandler, $htaccessfh; + $htacc = @file_get_contents($file); + + if($htacc != "") + { + $htlines = array(); + $htlines = explode("\n", $htacc); + $userhasrewrites = false; + $userrewrites = array(); + $rule = array(); + foreach($htlines as $htl) + { + if(preg_match('/^RewriteEngine\ on$/si', $htl) !== null) + { + $userhasrewrites = true; + } + elseif(preg_match('/^RewriteRule\ +\^(.*)\$\(.*)$/si', $htl, $rule) !== null) + { + $regex = isset($rule[0]) ? $rule[0] : ''; + $relativeuri = isset($rule[1]) ? $rule[1] : ''; + + if($regex != '' + && $relativeuri != '') + { + $userrewrites[]['regex'] = $regex; + $userrewrites[]['relativeuri'] = $relativeuri; + } + } + } + + if($userhasrewrites) + { + fwrite($htaccessfh, '$PHYSICAL["path"] == "' . dirname($file) . '" {' . "\n"); + fwrite($htaccessfh, ' url.rewrite-once = (' . "\n"); + $count = 1; + $max = count($userrewrites); + foreach($userrewrites as $usrrw) + { + fwrite($htaccessfh, ' "^' . $usrrw['regex'] . '$" => "' . $usrrw['relativeuri'] . '"'); + + if($count < $max) + { + fwrite($htaccessfh, ',' . "\n"); + } + else + { + fwrite($htaccessfh, "\n"); + } + + $count++; + } + + fwrite($htaccessfh, ' )' . "\n"); + fwrite($htaccessfh, '}' . "\n"); + } + } + else + { + fwrite($debugHandler, ' WARNING: file ' . $file . ' seems to be empty or there was an error' . "\n"); + return; + } +} + +?> diff --git a/scripts/cron_tasks.inc.dns.10.bind.php b/scripts/cron_tasks.inc.dns.10.bind.php new file mode 100644 index 0000000000..a8288390b4 --- /dev/null +++ b/scripts/cron_tasks.inc.dns.10.bind.php @@ -0,0 +1,337 @@ + + * @author Martin Burchert + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package System + * @version $Id: cron_tasks.inc.dns.10.bind.php 2692 2009-03-27 18:04:47Z flo $ + */ + +/* + * This script creates the php.ini's used by mod_suPHP+php-cgi + */ + +if(@php_sapi_name() != 'cli' + && @php_sapi_name() != 'cgi' + && @php_sapi_name() != 'cgi-fcgi') +{ + die('This script only works in the shell.'); +} + +class bind +{ + public $db = false; + public $logger = false; + public $debugHandler = false; + public $settings = array(); + public $nameservers = array(); + public $mxservers = array(); + + public function __construct($db, $logger, $debugHandler, $settings) + { + $this->db = $db; + $this->logger = $logger; + $this->debugHandler = $debugHandler; + $this->settings = $settings; + + if($this->settings['system']['nameservers'] != '') + { + $nameservers = explode(',', $this->settings['system']['nameservers']); + foreach($nameservers as $nameserver) + { + $nameserver_ip = gethostbyname(trim($nameserver)); + + if(substr($nameserver, -1, 1) != '.') + { + $nameserver.= '.'; + } + + $this->nameservers[] = array( + 'hostname' => trim($nameserver), + 'ip' => trim($nameserver_ip) + ); + } + } + + if($this->settings['system']['mxservers'] != '') + { + $mxservers = explode(',', $this->settings['system']['mxservers']); + foreach($mxservers as $mxserver) + { + if(substr($mxserver, -1, 1) != '.') + { + $mxserver.= '.'; + } + + $this->mxservers[] = $mxserver; + } + } + } + + public function writeConfigs() + { + fwrite($this->debugHandler, ' cron_tasks: Task4 started - Rebuilding syscp_bind.conf' . "\n"); + $this->logger->logAction(CRON_ACTION, LOG_INFO, 'Task4 started - Rebuilding syscp_bind.conf'); + + if(!file_exists(makeCorrectDir($this->settings['system']['bindconf_directory'] . '/domains/'))) + { + $this->logger->logAction(CRON_ACTION, LOG_NOTICE, 'mkdir ' . escapeshellarg(makeCorrectDir($this->settings['system']['bindconf_directory'] . '/domains/'))); + safe_exec('mkdir ' . escapeshellarg(makeCorrectDir($this->settings['system']['bindconf_directory'] . '/domains/'))); + } + + $known_filenames = array(); + + $bindconf_file = '# ' . $this->settings['system']['bindconf_directory'] . 'syscp_bind.conf' . "\n" . '# Created ' . date('d.m.Y H:i') . "\n" . '# Do NOT manually edit this file, all changes will be deleted after the next domain change at the panel.' . "\n" . "\n"; + $result_domains = $this->db->query("SELECT `d`.`id`, `d`.`domain`, `d`.`iswildcarddomain`, `d`.`customerid`, `d`.`zonefile`, `d`.`bindserial`, `d`.`dkim`, `d`.`dkim_id`, `d`.`dkim_pubkey`, `ip`.`ip`, `c`.`loginname`, `c`.`guid` FROM `" . TABLE_PANEL_DOMAINS . "` `d` LEFT JOIN `" . TABLE_PANEL_CUSTOMERS . "` `c` USING(`customerid`) LEFT JOIN `" . TABLE_PANEL_IPSANDPORTS . "` AS `ip` ON(`d`.`ipandport`=`ip`.`id`) WHERE `d`.`isbinddomain` = '1' ORDER BY `d`.`domain` ASC"); + + while($domain = $this->db->fetch_array($result_domains)) + { + fwrite($this->debugHandler, ' cron_tasks: Task4 - Writing ' . $domain['id'] . '::' . $domain['domain'] . "\n"); + $this->logger->logAction(CRON_ACTION, LOG_INFO, 'Writing ' . $domain['id'] . '::' . $domain['domain']); + + if($domain['zonefile'] == '') + { + $zonefile = $this->generateZone($domain); + $domain['zonefile'] = 'domains/' . $domain['domain'] . '.zone'; + $zonefile_name = makeCorrectFile($this->settings['system']['bindconf_directory'] . '/' . $domain['zonefile']); + $known_filenames[] = basename($zonefile_name); + $zonefile_handler = fopen($zonefile_name, 'w'); + fwrite($zonefile_handler, $zonefile); + fclose($zonefile_handler); + fwrite($this->debugHandler, ' cron_tasks: Task4 - `' . $zonefile_name . '` zone written' . "\n"); + } + + $bindconf_file.= '# Domain ID: ' . $domain['id'] . ' - CustomerID: ' . $domain['customerid'] . ' - CustomerLogin: ' . $domain['loginname'] . "\n"; + $bindconf_file.= 'zone "' . $domain['domain'] . '" in {' . "\n"; + $bindconf_file.= ' type master;' . "\n"; + $bindconf_file.= ' file "' . makeCorrectFile($this->settings['system']['bindconf_directory'] . '/' . $domain['zonefile']) . '";' . "\n"; + $bindconf_file.= ' allow-query { any; };' . "\n"; + + if(count($this->nameservers) > 0) + { + $bindconf_file.= ' allow-transfer {' . "\n"; + for ($i = 0;$i < count($this->nameservers);$i++) + { + $bindconf_file.= ' ' . $this->nameservers[$i]['ip'] . ';' . "\n"; + } + + $bindconf_file.= ' };' . "\n"; + } + + $bindconf_file.= '};' . "\n"; + $bindconf_file.= "\n"; + } + + $bindconf_file_handler = fopen(makeCorrectFile($this->settings['system']['bindconf_directory'] . '/syscp_bind.conf'), 'w'); + fwrite($bindconf_file_handler, $bindconf_file); + fclose($bindconf_file_handler); + fwrite($this->debugHandler, ' cron_tasks: Task4 - syscp_bind.conf written' . "\n"); + $this->logger->logAction(CRON_ACTION, LOG_INFO, 'syscp_bind.conf written'); + safe_exec($this->settings['system']['bindreload_command']); + fwrite($this->debugHandler, ' cron_tasks: Task4 - Bind9 reloaded' . "\n"); + $this->logger->logAction(CRON_ACTION, LOG_INFO, 'Bind9 reloaded'); + $domains_dir = makeCorrectDir($this->settings['system']['bindconf_directory'] . '/domains/'); + + if(file_exists($domains_dir) + && is_dir($domains_dir)) + { + $domain_file_dirhandle = opendir($domains_dir); + + while(false !== ($domain_filename = readdir($domain_file_dirhandle))) + { + if($domain_filename != '.' + && $domain_filename != '..' + && !in_array($domain_filename, $known_filenames) + && file_exists(makeCorrectFile($domains_dir . '/' . $domain_filename))) + { + fwrite($this->debugHandler, ' cron_tasks: Task4 - unlinking ' . $domain_filename . "\n"); + $this->logger->logAction(CRON_ACTION, LOG_WARNING, 'Deleting ' . $domain_filename); + unlink(makeCorrectFile($domains_dir . '/' . $domain_filename)); + } + } + } + } + + protected function generateZone($domain) + { + if(filter_var($domain['ip'], FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)) + { + $ip_a_record = 'A ' . $domain['ip']; + } + elseif(filter_var($domain['ip'], FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) + { + $ip_a_record = 'AAAA ' . $domain['ip']; + } + else + { + return ''; + } + + $date = date('Ymd'); + $bindserial = (preg_match('/^' . $date . '/', $domain['bindserial']) ? $domain['bindserial'] + 1 : $date . '00'); + $this->db->query('UPDATE `' . TABLE_PANEL_DOMAINS . '` SET `bindserial`=\'' . $bindserial . '\' WHERE `id`=\'' . $domain['id'] . '\''); + $zonefile = '$TTL 1W' . "\n"; + + if(count($this->nameservers) == 0) + { + $zonefile.= '@ IN SOA ns ' . str_replace('@', '.', $this->settings['panel']['adminmail']) . '. (' . "\n"; + } + else + { + $zonefile.= '@ IN SOA ' . $this->nameservers[0]['hostname'] . ' ' . str_replace('@', '.', $this->settings['panel']['adminmail']) . '. (' . "\n"; + } + + $zonefile.= ' ' . $bindserial . ' ; serial' . "\n" . ' 8H ; refresh' . "\n" . ' 2H ; retry' . "\n" . ' 1W ; expiry' . "\n" . ' 11h) ; minimum' . "\n"; + + if(count($this->nameservers) == 0) + { + $zonefile.= '@ IN NS ns' . "\n" . 'ns IN ' . $ip_a_record . "\n"; + } + else + { + foreach($this->nameservers as $nameserver) + { + $zonefile.= '@ IN NS ' . trim($nameserver['hostname']) . "\n"; + } + } + + if(count($this->mxservers) == 0) + { + $zonefile.= '@ IN MX 10 mail' . "\n" . 'mail IN ' . $ip_a_record . "\n"; + } + else + { + foreach($this->mxservers as $mxserver) + { + $zonefile.= '@ IN MX ' . trim($mxserver) . "\n"; + } + } + + $zonefile.= '@ IN TXT "v=spf1 a mx -all"' . "\n"; + + if($this->settings['dkim']['use_dkim'] == '1' + && $domain['dkim'] == '1' + && $domain['dkim_pubkey'] != '') + { + $zonefile.= 'dkim_' . $domain['dkim_id'] . '._domainkey IN TXT "v=DKIM1; k=rsa; p=' . trim(preg_replace('/-----BEGIN PUBLIC KEY-----(.+)-----END PUBLIC KEY-----/s', '$1', str_replace("\n", '', $domain['dkim_pubkey']))) . '"' . "\n"; + } + + $nssubdomains = $this->db->query('SELECT `domain` FROM `' . TABLE_PANEL_DOMAINS . '` WHERE `isbinddomain`=\'1\' AND `domain` LIKE \'%.' . $domain['domain'] . '\''); + + while($nssubdomain = $this->db->fetch_array($nssubdomains)) + { + if(preg_match('/^[^\.]+\.' . preg_quote($domain['domain'], '/') . '/', $nssubdomain['domain'])) + { + $nssubdomain = str_replace('.' . $domain['domain'], '', $nssubdomain['domain']); + + if(count($this->nameservers) == 0) + { + $zonefile.= $nssubdomain . ' IN NS ns.' . $nssubdomain . "\n"; + } + else + { + foreach($this->nameservers as $nameserver) + { + $zonefile.= $nssubdomain . ' IN NS ' . trim($nameserver['hostname']) . "\n"; + } + } + } + } + + $zonefile.= '@ IN ' . $ip_a_record . "\n"; + $zonefile.= 'www IN ' . $ip_a_record . "\n"; + + if($domain['iswildcarddomain'] == '1') + { + $zonefile.= '* IN ' . $ip_a_record . "\n"; + } + + $subdomains = $this->db->query('SELECT `d`.`domain`, `ip`.`ip` AS `ip` FROM `' . TABLE_PANEL_DOMAINS . '` `d`, `' . TABLE_PANEL_IPSANDPORTS . '` `ip` WHERE `parentdomainid`=\'' . $domain['id'] . '\' AND `d`.`ipandport`=`ip`.`id`'); + + while($subdomain = $this->db->fetch_array($subdomains)) + { + $zonefile.= str_replace('.' . $domain['domain'], '', $subdomain['domain']) . ' IN A ' . $subdomain['ip'] . "\n"; + } + + return $zonefile; + } + + public function writeDKIMconfigs() + { + if($this->settings['dkim']['use_dkim'] == '1') + { + if(!file_exists(makeCorrectDir($this->settings['dkim']['dkim_prefix']))) + { + $this->logger->logAction(CRON_ACTION, LOG_NOTICE, 'mkdir -p ' . escapeshellarg(makeCorrectDir($this->settings['dkim']['dkim_prefix']))); + safe_exec('mkdir -p ' . escapeshellarg(makeCorrectDir($this->settings['dkim']['dkim_prefix']))); + } + + $dkimdomains = ''; + $dkimkeys = ''; + $result_domains = $this->db->query("SELECT `id`, `domain`, `dkim`, `dkim_id`, `dkim_pubkey`, `dkim_privkey` FROM `" . TABLE_PANEL_DOMAINS . "` WHERE `dkim` = '1' ORDER BY `id` ASC"); + + while($domain = $this->db->fetch_array($result_domains)) + { + $privkey_filename = makeCorrectFile($this->settings['dkim']['dkim_prefix'] . '/dkim_' . $domain['dkim_id'] . '.private'); + $pubkey_filename = makeCorrectFile($this->settings['dkim']['dkim_prefix'] . '/dkim_' . $domain['dkim_id'] . '.public'); + + if($domain['dkim_privkey'] == '' + || $domain['dkim_pubkey'] == '') + { + $max_dkim_id = $this->db->query_first("SELECT MAX(`dkim_id`) as `max_dkim_id` FROM `" . TABLE_PANEL_DOMAINS . "`"); + $domain['dkim_id'] = (int)$max_dkim_id['max_dkim_id'] + 1; + $privkey_filename = makeCorrectFile($this->settings['dkim']['dkim_prefix'] . '/dkim_' . $domain['dkim_id'] . '.private'); + safe_exec('openssl genrsa -out ' . escapeshellcmd($privkey_filename) . ' 1024'); + $domain['dkim_privkey'] = file_get_contents($privkey_filename); + safe_exec("chmod 0640 " . escapeshellcmd($privkey_filename)); + $pubkey_filename = makeCorrectFile($this->settings['dkim']['dkim_prefix'] . '/dkim_' . $domain['dkim_id'] . '.public'); + safe_exec('openssl rsa -in ' . escapeshellcmd($privkey_filename) . ' -pubout -outform pem -out ' . escapeshellcmd($pubkey_filename)); + $domain['dkim_pubkey'] = file_get_contents($pubkey_filename); + safe_exec("chmod 0664 " . escapeshellcmd($pubkey_filename)); + $this->db->query("UPDATE `" . TABLE_PANEL_DOMAINS . "` SET `dkim_id` = '" . $domain['dkim_id'] . "', `dkim_privkey` = '" . $domain['dkim_privkey'] . "', `dkim_pubkey` = '" . $domain['dkim_pubkey'] . "' WHERE `id` = '" . $domain['id'] . "'"); + } + + if(!file_exists($privkey_filename) + && $domain['dkim_privkey'] != '') + { + $privkey_file_handler = fopen($privkey_filename, "w"); + fwrite($privkey_file_handler, $domain['dkim_privkey']); + fclose($privkey_file_handler); + safe_exec("chmod 0640 " . escapeshellcmd($privkey_filename)); + } + + if(!file_exists($pubkey_filename) + && $domain['dkim_pubkey'] != '') + { + $pubkey_file_handler = fopen($pubkey_filename, "w"); + fwrite($pubkey_file_handler, $domain['dkim_pubkey']); + fclose($pubkey_file_handler); + safe_exec("chmod 0664 " . escapeshellcmd($pubkey_filename)); + } + + $dkimdomains.= $domain['domain'] . "\n"; + $dkimkeys.= "*@" . $domain['domain'] . ":" . $domain['domain'] . ":" . $privkey_filename . "\n"; + } + + $dkimdomains_filename = makeCorrectFile($this->settings['dkim']['dkim_prefix'] . '/' . $this->settings['dkim']['dkim_domains']); + $dkimdomains_file_handler = fopen($dkimdomains_filename, "w"); + fwrite($dkimdomains_file_handler, $dkimdomains); + fclose($dkimdomains_file_handler); + $dkimkeys_filename = makeCorrectFile($this->settings['dkim']['dkim_prefix'] . '/' . $this->settings['dkim']['dkim_dkimkeys']); + $dkimkeys_file_handler = fopen($dkimkeys_filename, "w"); + fwrite($dkimkeys_file_handler, $dkimkeys); + fclose($dkimkeys_file_handler); + } + } +} + +?> \ No newline at end of file diff --git a/scripts/cron_tasks.inc.http.10.apache.php b/scripts/cron_tasks.inc.http.10.apache.php new file mode 100644 index 0000000000..95505cd4ae --- /dev/null +++ b/scripts/cron_tasks.inc.http.10.apache.php @@ -0,0 +1,953 @@ + + * @author Martin Burchert + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package System + * @version $Id: cron_tasks.inc.http.10.apache.php 2714 2009-04-17 10:02:03Z flo $ + */ + +if(@php_sapi_name() != 'cli' + && @php_sapi_name() != 'cgi' + && @php_sapi_name() != 'cgi-fcgi') +{ + die('This script only works in the shell.'); +} + +class apache +{ + protected $db = false; + protected $logger = false; + protected $debugHandler = false; + protected $settings = array(); + protected $known_vhostfilenames = array(); + protected $known_diroptionsfilenames = array(); + protected $known_htpasswdsfilenames = array(); + protected $virtualhosts_data = array(); + protected $diroptions_data = array(); + protected $htpasswds_data = array(); + + public function __construct($db, $logger, $debugHandler, $settings) + { + $this->db = $db; + $this->logger = $logger; + $this->debugHandler = $debugHandler; + $this->settings = $settings; + } + + /* + * We compose the namevirtualhost entries + */ + + public function reload() + { + fwrite($this->debugHandler, ' apache::reload: reloading apache' . "\n"); + $this->logger->logAction(CRON_ACTION, LOG_INFO, 'reloading apache'); + safe_exec($this->settings['system']['apachereload_command']); + } + + public function createIpPort() + { + $result_ipsandports = $this->db->query("SELECT * FROM `" . TABLE_PANEL_IPSANDPORTS . "` ORDER BY `ip` ASC, `port` ASC"); + + while($row_ipsandports = $this->db->fetch_array($result_ipsandports)) + { + if(filter_var($row_ipsandports['ip'], FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) + { + $ipport = '[' . $row_ipsandports['ip'] . ']:' . $row_ipsandports['port']; + } + else + { + $ipport = $row_ipsandports['ip'] . ':' . $row_ipsandports['port']; + } + + fwrite($this->debugHandler, ' apache::createIpPort: creating ip/port settings for ' . $ipport . "\n"); + $this->logger->logAction(CRON_ACTION, LOG_INFO, 'creating ip/port settings for ' . $ipport); + $vhosts_filename = makeCorrectFile($this->settings['system']['apacheconf_vhost'] . '/10_syscp_ipandport_' . trim(str_replace(':', '.', $row_ipsandports['ip']), '.') . '.' . $row_ipsandports['port'] . '.conf'); + + if(!isset($this->virtualhosts_data[$vhosts_filename])) + { + $this->virtualhosts_data[$vhosts_filename] = ''; + } + + if($row_ipsandports['listen_statement'] == '1') + { + $this->virtualhosts_data[$vhosts_filename].= 'Listen ' . $ipport . "\n"; + $this->logger->logAction(CRON_ACTION, LOG_DEBUG, $ipport . ' :: inserted listen-statement'); + } + + if($row_ipsandports['namevirtualhost_statement'] == '1') + { + $this->virtualhosts_data[$vhosts_filename].= 'NameVirtualHost ' . $ipport . "\n"; + $this->logger->logAction(CRON_ACTION, LOG_DEBUG, $ipport . ' :: inserted namevirtualhost-statement'); + } + + if($row_ipsandports['vhostcontainer'] == '1') + { + $this->virtualhosts_data[$vhosts_filename].= '' . "\n"; + + if($row_ipsandports['vhostcontainer_servername_statement'] == '1') + { + $this->virtualhosts_data[$vhosts_filename].= ' ServerName ' . $this->settings['system']['hostname'] . "\n"; + } + + if($row_ipsandports['specialsettings'] != '') + { + $this->virtualhosts_data[$vhosts_filename].= $row_ipsandports['specialsettings'] . "\n"; + } + + if($row_ipsandports['ssl'] == '1' && $this->settings['system']['use_ssl'] == '1') + { + if($row_ipsandports['ssl_cert_file'] == '') + { + $row_ipsandports['ssl_cert_file'] = $this->settings['system']['ssl_cert_file']; + } + + if($row_ipsandports['ssl_key_file'] == '') + { + $row_ipsandports['ssl_key_file'] = $this->settings['system']['ssl_key_file']; + } + + if($row_ipsandports['ssl_ca_file'] == '') + { + $row_ipsandports['ssl_ca_file'] = $this->settings['system']['ssl_ca_file']; + } + + if($row_ipsandports['ssl_cert_file'] != '') + { + $this->virtualhosts_data[$vhosts_filename].= ' SSLEngine On' . "\n"; + $this->virtualhosts_data[$vhosts_filename].= ' SSLCertificateFile ' . makeCorrectFile($row_ipsandports['ssl_cert_file']) . "\n"; + + if($row_ipsandports['ssl_key_file'] != '') + { + $this->virtualhosts_data[$vhosts_filename].= ' SSLCertificateKeyFile ' . makeCorrectFile($row_ipsandports['ssl_key_file']) . "\n"; + } + + if($row_ipsandports['ssl_ca_file'] != '') + { + $this->virtualhosts_data[$vhosts_filename].= ' SSLCACertificateFile ' . makeCorrectFile($row_ipsandports['ssl_ca_file']) . "\n"; + } + } + } + + $this->virtualhosts_data[$vhosts_filename].= '' . "\n"; + $this->logger->logAction(CRON_ACTION, LOG_DEBUG, $ipport . ' :: inserted vhostcontainer'); + } + + unset($vhosts_filename); + } + } + + /* + * We put together the needed php options in the virtualhost entries + */ + + protected function composePhpOptions($domain) + { + $php_options_text = ''; + + if($domain['phpenabled'] == '1') + { + // This vHost has PHP enabled and we are using the regular mod_php + + if($domain['openbasedir'] == '1') + { + if($this->settings['system']['phpappendopenbasedir'] != '') + { + $_phpappendopenbasedir = ':' . $this->settings['system']['phpappendopenbasedir']; + } + else + { + $_phpappendopenbasedir = ''; + } + + if($domain['openbasedir_path'] == '1') + { + $php_options_text.= ' php_admin_value open_basedir "' . $domain['customerroot'] . $_phpappendopenbasedir . "\"\n"; + } + else + { + $php_options_text.= ' php_admin_value open_basedir "' . $domain['documentroot'] . $_phpappendopenbasedir . "\"\n"; + } + } + + if($domain['safemode'] == '0') + { + $php_options_text.= ' php_admin_flag safe_mode Off ' . "\n"; + } + else + { + $php_options_text.= ' php_admin_flag safe_mode On ' . "\n"; + } + } + else + { + $php_options_text.= ' # PHP is disabled for this vHost' . "\n"; + $php_options_text.= ' php_flag engine off' . "\n"; + } + + return $php_options_text; + } + + /* + * We collect all servernames and Aliases + */ + + protected function getServerNames($domain) + { + $servernames_text = ''; + $servernames_text.= ' ServerName ' . $domain['domain'] . "\n"; + + if($domain['iswildcarddomain'] == '1') + { + $server_alias = '*.' . $domain['domain']; + } + else + { + if($domain['wwwserveralias'] == '1') + { + $server_alias = 'www.' . $domain['domain']; + } + else + { + $server_alias = ''; + } + } + + $alias_domains = $this->db->query('SELECT `domain`, `iswildcarddomain`, `wwwserveralias` FROM `' . TABLE_PANEL_DOMAINS . '` WHERE `aliasdomain`=\'' . $domain['id'] . '\''); + + while(($alias_domain = $this->db->fetch_array($alias_domains)) !== false) + { + $server_alias.= ' ' . $alias_domain['domain']; + + if($alias_domain['iswildcarddomain'] == '1') + { + $server_alias.= ' *.' . $alias_domain['domain']; + } + else + { + if($alias_domain['wwwserveralias'] == '1') + { + $server_alias.= ' www.' . $alias_domain['domain']; + } + } + } + + if(trim($server_alias) != '') + { + $servernames_text.= ' ServerAlias ' . $server_alias . "\n"; + } + + $servernames_text.= ' ServerAdmin ' . $domain['email'] . "\n"; + return $servernames_text; + } + + /* + * Let's get the webroot + */ + + protected function getWebroot($domain) + { + $webroot_text = ''; + $domain['customerroot'] = makeCorrectDir($domain['customerroot']); + $domain['documentroot'] = makeCorrectDir($domain['documentroot']); + + if($domain['deactivated'] == '1' + && $this->settings['system']['deactivateddocroot'] != '') + { + $webroot_text.= ' # Using docroot for deactivated users...' . "\n"; + $webroot_text.= ' DocumentRoot "' . $this->settings['system']['deactivateddocroot'] . "\"\n"; + } + else + { + $webroot_text.= ' DocumentRoot "' . $domain['documentroot'] . "\"\n"; + } + + return $webroot_text; + } + + /* + * Lets set the text part for the stats software + */ + + protected function getStats($domain) + { + $stats_text = ''; + + if($domain['speciallogfile'] == '1' + && $this->settings['system']['mod_log_sql'] != '1') + { + if($domain['parentdomainid'] == '0') + { + $stats_text.= ' Alias /webalizer "' . makeCorrectFile($domain['customerroot'] . '/webalizer/' . $domain['domain']) . '"' . "\n"; + + if($this->settings['system']['awstats_enabled'] == '1') + { + $stats_text.= createAWStatsVhost($domain['domain']); + } + } + else + { + $stats_text.= ' Alias /webalizer "' . makeCorrectFile($domain['customerroot'] . '/webalizer/' . $domain['parentdomain']) . '"' . "\n"; + + if($this->settings['system']['awstats_enabled'] == '1') + { + $stats_text.= createAWStatsVhost($domain['parentdomain']); + } + } + } + else + { + if($domain['customerroot'] != $domain['documentroot']) + { + $stats_text.= ' Alias /webalizer "' . makeCorrectFile($domain['customerroot'] . '/webalizer') . '"' . "\n"; + } + + if($this->settings['system']['awstats_enabled'] == '1') + { + $stats_text.= createAWStatsVhost($domain['domain']); + } + } + + return $stats_text; + } + + /* + * Lets set the logfiles + */ + + protected function getLogfiles($domain) + { + $logfiles_text = ''; + + if($domain['speciallogfile'] == '1' + && $this->settings['system']['mod_log_sql'] != '1') + { + if($domain['parentdomainid'] == '0') + { + $speciallogfile = '-' . $domain['domain']; + } + else + { + $speciallogfile = '-' . $domain['parentdomain']; + } + } + else + { + $speciallogfile = ''; + } + + if($this->settings['system']['mod_log_sql'] == '1') + { + // We are using mod_log_sql (http://www.outoforder.cc/projects/apache/mod_log_sql/) + // TODO: See how we are able emulate the error_log + + $logfiles_text.= ' LogSQLTransferLogTable access_log' . "\n"; + } + else + { + // The normal access/error - logging is enabled + + $logfiles_text.= ' ErrorLog "' . $this->settings['system']['logfiles_directory'] . $domain['loginname'] . $speciallogfile . '-error.log' . "\"\n"; + $logfiles_text.= ' CustomLog "' . $this->settings['system']['logfiles_directory'] . $domain['loginname'] . $speciallogfile . '-access.log" combined' . "\n"; + } + + if($this->settings['system']['awstats_enabled'] == '1') + { + // prepare the aliases for stats config files + + $server_alias = ''; + $alias_domains = $this->db->query('SELECT `domain`, `iswildcarddomain`, `wwwserveralias` FROM `' . TABLE_PANEL_DOMAINS . '` WHERE `aliasdomain`=\'' . $domain['id'] . '\''); + + while(($alias_domain = $this->db->fetch_array($alias_domains)) !== false) + { + $server_alias.= ' ' . $alias_domain['domain'] . ' '; + + if($alias_domain['iswildcarddomain'] == '1') + { + $server_alias.= '*.' . $domain['domain']; + } + else + { + if($alias_domain['wwwserveralias'] == '1') + { + $server_alias.= 'www.' . $alias_domain['domain']; + } + else + { + $server_alias.= ''; + } + } + } + + if($domain['iswildcarddomain'] == '1') + { + $alias = '*.' . $domain['domain']; + } + else + { + if($domain['wwwserveralias'] == '1') + { + $alias = 'www.' . $domain['domain']; + } + else + { + $alias = ''; + } + } + + // After inserting the AWStats information, be sure to build the awstats conf file as well + + createAWStatsConf($this->settings['system']['logfiles_directory'] . $domain['loginname'] . $speciallogfile . '-access.log', $domain['domain'], $alias . $server_alias); + } + + return $logfiles_text; + } + + /* + * Get the filename for the virtualhost + */ + + protected function getVhostFilename($domain, $ssl_vhost = false) + { + if($ssl_vhost === true) + { + $vhost_filename = makeCorrectFile($this->settings['system']['apacheconf_vhost'] . '/20_syscp_ssl_vhost_' . $domain['domain'] . '.conf'); + } + else + { + $vhost_filename = makeCorrectFile($this->settings['system']['apacheconf_vhost'] . '/20_syscp_normal_vhost_' . $domain['domain'] . '.conf'); + } + + return $vhost_filename; + } + + /* + * We compose the virtualhost entry for one domain + */ + + protected function getVhostContent($domain, $ssl_vhost = false) + { + if($ssl_vhost === true + && $domain['ssl'] != '1') + { + return ''; + } + + if($ssl_vhost === true + && $domain['ssl'] == '1') + { + $query = "SELECT * FROM " . TABLE_PANEL_IPSANDPORTS . " WHERE `id`='" . $domain['ssl_ipandport'] . "'"; + } + else + { + $query = "SELECT * FROM " . TABLE_PANEL_IPSANDPORTS . " WHERE `id`='" . $domain['ipandport'] . "'"; + } + + $ipandport = $this->db->query_first($query); + $domain['ip'] = $ipandport['ip']; + $domain['port'] = $ipandport['port']; + $domain['ssl_cert_file'] = $ipandport['ssl_cert_file']; + $domain['ssl_key_file'] = $ipandport['ssl_key_file']; + $domain['ssl_ca_file'] = $ipandport['ssl_ca_file']; + + if(filter_var($domain['ip'], FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) + { + $ipport = '[' . $domain['ip'] . ']:' . $domain['port']; + } + else + { + $ipport = $domain['ip'] . ':' . $domain['port']; + } + + $vhost_content = '' . "\n"; + $vhost_content.= $this->getServerNames($domain); + + if($ssl_vhost == false + && $domain['ssl'] == '1' + && $domain['ssl_redirect'] == '1') + { + $domain['documentroot'] = 'https://' . $domain['domain'] . '/'; + } + + if(preg_match('/^https?\:\/\//', $domain['documentroot'])) + { + $vhost_content.= ' Redirect / ' . $domain['documentroot'] . "\n"; + } + else + { + if($ssl_vhost === true + && $domain['ssl'] == '1' + && $this->settings['system']['use_ssl'] == '1') + { + if($domain['ssl_cert_file'] == '') + { + $domain['ssl_cert_file'] = $this->settings['system']['ssl_cert_file']; + } + + if($domain['ssl_key_file'] == '') + { + $domain['ssl_key_file'] = $this->settings['system']['ssl_key_file']; + } + + if($domain['ssl_ca_file'] == '') + { + $domain['ssl_ca_file'] = $this->settings['system']['ssl_ca_file']; + } + + if($domain['ssl_cert_file'] != '') + { + $vhost_content.= ' SSLEngine On' . "\n"; + $vhost_content.= ' SSLCertificateFile ' . makeCorrectFile($domain['ssl_cert_file']) . "\n"; + + if($domain['ssl_key_file'] != '') + { + $vhost_content.= ' SSLCertificateKeyFile ' . makeCorrectFile($domain['ssl_key_file']) . "\n"; + } + + if($domain['ssl_ca_file'] != '') + { + $vhost_content.= ' SSLCACertificateFile ' . makeCorrectFile($domain['ssl_ca_file']) . "\n"; + } + } + } + + mkDirWithCorrectOwnership($domain['customerroot'], $domain['documentroot'], $domain['guid'], $domain['guid']); + $vhost_content.= $this->getWebroot($domain); + $vhost_content.= $this->composePhpOptions($domain); + $vhost_content.= $this->getStats($domain); + $vhost_content.= $this->getLogfiles($domain); + } + + if($domain['specialsettings'] != '') + { + $vhost_content.= $domain['specialsettings'] . "\n"; + } + + if($ipandport['default_vhostconf_domain'] != '') + { + $vhost_content.= $ipandport['default_vhostconf_domain'] . "\n"; + } + + if($this->settings['system']['default_vhostconf'] != '') + { + $vhost_content.= $this->settings['system']['default_vhostconf'] . "\n"; + } + + $vhost_content.= '' . "\n"; + return $vhost_content; + } + + /* + * We compose the virtualhost entries for the domains + */ + + public function createVirtualHosts() + { + $result_domains = $this->db->query("SELECT `d`.`id`, `d`.`domain`, `d`.`customerid`, `d`.`documentroot`, `d`.`ssl`, " . "`d`.`parentdomainid`, `d`.`ipandport`, `d`.`ssl_ipandport`, `d`.`ssl_redirect`, " . "`d`.`isemaildomain`, `d`.`iswildcarddomain`, `d`.`wwwserveralias`, `d`.`openbasedir`, `d`.`openbasedir_path`, " . "`d`.`safemode`, `d`.`speciallogfile`, `d`.`specialsettings`, `pd`.`domain` AS `parentdomain`, `c`.`loginname`, `d`.`phpsettingid`, `c`.`adminid`, " . "`c`.`guid`, `c`.`email`, `c`.`documentroot` AS `customerroot`, `c`.`deactivated`, `c`.`phpenabled` AS `phpenabled`, `d`.`mod_fcgid_starter`, `d`.`mod_fcgid_maxrequests` " . "FROM `" . TABLE_PANEL_DOMAINS . "` `d` LEFT JOIN `" . TABLE_PANEL_CUSTOMERS . "` `c` USING(`customerid`) " . "LEFT JOIN `" . TABLE_PANEL_DOMAINS . "` `pd` ON (`pd`.`id` = `d`.`parentdomainid`) " . "WHERE `d`.`aliasdomain` IS NULL ORDER BY `d`.`iswildcarddomain`, `d`.`domain` ASC"); + + while($domain = $this->db->fetch_array($result_domains)) + { + fwrite($this->debugHandler, ' apache::createVirtualHosts: creating vhost container for domain ' . $domain['id'] . ', customer ' . $domain['loginname'] . "\n"); + $this->logger->logAction(CRON_ACTION, LOG_INFO, 'creating vhost container for domain ' . $domain['id'] . ', customer ' . $domain['loginname']); + $vhosts_filename = $this->getVhostFilename($domain); + + // Apply header + + $this->virtualhosts_data[$vhosts_filename] = '# Domain ID: ' . $domain['id'] . ' - CustomerID: ' . $domain['customerid'] . ' - CustomerLogin: ' . $domain['loginname'] . "\n"; + + if($domain['deactivated'] != '1' + || $this->settings['system']['deactivateddocroot'] != '') + { + $this->virtualhosts_data[$vhosts_filename].= $this->getVhostContent($domain); + + if($domain['ssl'] == '1') + { + // Adding ssl stuff if enabled + + $vhosts_filename_ssl = $this->getVhostFilename($domain, true); + $this->virtualhosts_data[$vhosts_filename_ssl] = '# Domain ID: ' . $domain['id'] . ' (SSL) - CustomerID: ' . $domain['customerid'] . ' - CustomerLogin: ' . $domain['loginname'] . "\n"; + $this->virtualhosts_data[$vhosts_filename_ssl].= $this->getVhostContent($domain, true); + } + } + else + { + $this->virtualhosts_data[$vhosts_filename].= '# Customer deactivated and a docroot for deactivated users hasn\'t been set.' . "\n"; + } + } + } + + /* + * We compose the diroption entries for the paths + */ + + public function createFileDirOptions() + { + $result = $this->db->query('SELECT `htac`.*, `c`.`guid`, `c`.`documentroot` AS `customerroot` FROM `' . TABLE_PANEL_HTACCESS . '` `htac` LEFT JOIN `' . TABLE_PANEL_CUSTOMERS . '` `c` USING (`customerid`) ORDER BY `htac`.`path`'); + $diroptions = array(); + + while($row_diroptions = $this->db->fetch_array($result)) + { + if($row_diroptions['customerid'] != 0 + && isset($row_diroptions['customerroot']) + && $row_diroptions['customerroot'] != '') + { + $diroptions[$row_diroptions['path']] = $row_diroptions; + $diroptions[$row_diroptions['path']]['htpasswds'] = array(); + } + } + + $result = $this->db->query('SELECT `htpw`.*, `c`.`guid`, `c`.`documentroot` AS `customerroot` FROM `' . TABLE_PANEL_HTPASSWDS . '` `htpw` LEFT JOIN `' . TABLE_PANEL_CUSTOMERS . '` `c` USING (`customerid`) ORDER BY `htpw`.`path`, `htpw`.`username`'); + + while($row_htpasswds = $this->db->fetch_array($result)) + { + if($row_htpasswds['customerid'] != 0 + && isset($row_htpasswds['customerroot']) + && $row_htpasswds['customerroot'] != '') + { + if(!isset($diroptions[$row_htpasswds['path']]) || !is_array($diroptions[$row_htpasswds['path']])) + { + $diroptions[$row_htpasswds['path']] = array(); + } + + $diroptions[$row_htpasswds['path']]['path'] = $row_htpasswds['path']; + $diroptions[$row_htpasswds['path']]['guid'] = $row_htpasswds['guid']; + $diroptions[$row_htpasswds['path']]['customerroot'] = $row_htpasswds['customerroot']; + $diroptions[$row_htpasswds['path']]['customerid'] = $row_htpasswds['customerid']; + $diroptions[$row_htpasswds['path']]['htpasswds'][] = $row_htpasswds; + } + } + + foreach($diroptions as $row_diroptions) + { + $row_diroptions['path'] = makeCorrectDir($row_diroptions['path']); + mkDirWithCorrectOwnership($row_diroptions['customerroot'], $row_diroptions['path'], $row_diroptions['guid'], $row_diroptions['guid']); + $diroptions_filename = makeCorrectFile($this->settings['system']['apacheconf_diroptions'] . '/40_syscp_diroption_' . md5($row_diroptions['path']) . '.conf'); + + if(!isset($this->diroptions_data[$diroptions_filename])) + { + $this->diroptions_data[$diroptions_filename] = ''; + } + + if(is_dir($row_diroptions['path'])) + { + $this->diroptions_data[$diroptions_filename].= '' . "\n"; + + if(isset($row_diroptions['options_indexes']) + && $row_diroptions['options_indexes'] == '1') + { + $this->diroptions_data[$diroptions_filename].= ' Options +Indexes' . "\n"; + fwrite($this->debugHandler, ' cron_tasks: Task3 - Setting Options +Indexes' . "\n"); + } + + if(isset($row_diroptions['options_indexes']) + && $row_diroptions['options_indexes'] == '0') + { + $this->diroptions_data[$diroptions_filename].= ' Options -Indexes' . "\n"; + fwrite($this->debugHandler, ' cron_tasks: Task3 - Setting Options -Indexes' . "\n"); + } + + if(isset($row_diroptions['error404path']) + && $row_diroptions['error404path'] != '') + { + $this->diroptions_data[$diroptions_filename].= ' ErrorDocument 404 ' . $row_diroptions['error404path'] . "\n"; + } + + if(isset($row_diroptions['error403path']) + && $row_diroptions['error403path'] != '') + { + $this->diroptions_data[$diroptions_filename].= ' ErrorDocument 403 ' . $row_diroptions['error403path'] . "\n"; + } + + if(isset($row_diroptions['error500path']) + && $row_diroptions['error500path'] != '') + { + $this->diroptions_data[$diroptions_filename].= ' ErrorDocument 500 ' . $row_diroptions['error500path'] . "\n"; + } + + if(count($row_diroptions['htpasswds']) > 0) + { + $htpasswd_filename = makeCorrectFile($this->settings['system']['apacheconf_htpasswddir'] . '/' . $row_diroptions['customerid'] . '-' . md5($row_diroptions['path']) . '.htpasswd'); + + if(!isset($this->htpasswds_data[$htpasswd_filename])) + { + $this->htpasswds_data[$htpasswd_filename] = ''; + } + + foreach($row_diroptions['htpasswds'] as $row_htpasswd) + { + $this->htpasswds_data[$htpasswd_filename].= $row_htpasswd['username'] . ':' . $row_htpasswd['password'] . "\n"; + } + + $this->diroptions_data[$diroptions_filename].= ' AuthType Basic' . "\n"; + $this->diroptions_data[$diroptions_filename].= ' AuthName "Restricted Area"' . "\n"; + $this->diroptions_data[$diroptions_filename].= ' AuthUserFile ' . $htpasswd_filename . "\n"; + $this->diroptions_data[$diroptions_filename].= ' require valid-user' . "\n"; + } + + $this->diroptions_data[$diroptions_filename].= '' . "\n"; + } + } + } + + /* + * We write the configs + */ + + public function writeConfigs() + { + // Write diroptions + + fwrite($this->debugHandler, ' apache::writeConfigs: rebuilding ' . $this->settings['system']['apacheconf_diroptions'] . "\n"); + $this->logger->logAction(CRON_ACTION, LOG_INFO, "rebuilding " . $this->settings['system']['apacheconf_diroptions']); + + if(count($this->diroptions_data) > 0) + { + if(!isConfigDir($this->settings['system']['apacheconf_diroptions'])) + { + // Save one big file + + $diroptions_file = ''; + + foreach($this->diroptions_data as $diroptions_filename => $diroptions_content) + { + $diroptions_file.= $diroptions_content . "\n\n"; + } + + $diroptions_filename = $this->settings['system']['apacheconf_diroptions']; + + // Apply header + + $diroptions_file = '# ' . basename($diroptions_filename) . "\n" . '# Created ' . date('d.m.Y H:i') . "\n" . '# Do NOT manually edit this file, all changes will be deleted after the next domain change at the panel.' . "\n" . "\n" . $diroptions_file; + $diroptions_file_handler = fopen($diroptions_filename, 'w'); + fwrite($diroptions_file_handler, $diroptions_file); + fclose($diroptions_file_handler); + } + else + { + if(!file_exists($this->settings['system']['apacheconf_diroptions'])) + { + fwrite($this->debugHandler, ' apache::writeConfigs: mkdir ' . escapeshellarg(makeCorrectDir($this->settings['system']['apacheconf_diroptions'])) . "\n"); + $this->logger->logAction(CRON_ACTION, LOG_NOTICE, 'mkdir ' . escapeshellarg(makeCorrectDir($this->settings['system']['apacheconf_diroptions']))); + safe_exec('mkdir ' . escapeshellarg(makeCorrectDir($this->settings['system']['apacheconf_diroptions']))); + } + + // Write a single file for every diroption + + foreach($this->diroptions_data as $diroptions_filename => $diroptions_file) + { + $this->known_diroptionsfilenames[] = basename($diroptions_filename); + + // Apply header + + $diroptions_file = '# ' . basename($diroptions_filename) . "\n" . '# Created ' . date('d.m.Y H:i') . "\n" . '# Do NOT manually edit this file, all changes will be deleted after the next domain change at the panel.' . "\n" . "\n" . $diroptions_file; + $diroptions_file_handler = fopen($diroptions_filename, 'w'); + fwrite($diroptions_file_handler, $diroptions_file); + fclose($diroptions_file_handler); + } + + $this->wipeOutOldDiroptionConfigs(); + } + } + + // Write htpasswds + + fwrite($this->debugHandler, ' apache::writeConfigs: rebuilding ' . $this->settings['system']['apacheconf_htpasswddir'] . "\n"); + $this->logger->logAction(CRON_ACTION, LOG_INFO, "rebuilding " . $this->settings['system']['apacheconf_htpasswddir']); + + if(count($this->htpasswds_data) > 0) + { + if(!file_exists($this->settings['system']['apacheconf_htpasswddir'])) + { + $umask = umask(); + umask(0000); + mkdir($this->settings['system']['apacheconf_htpasswddir'], 0751); + umask($umask); + } + elseif(!is_dir($this->settings['system']['apacheconf_htpasswddir'])) + { + fwrite($this->debugHandler, ' cron_tasks: WARNING!!! ' . $this->settings['system']['apacheconf_htpasswddir'] . ' is not a directory. htpasswd directory protection is disabled!!!' . "\n"); + echo 'WARNING!!! ' . $this->settings['system']['apacheconf_htpasswddir'] . ' is not a directory. htpasswd directory protection is disabled!!!'; + $this->logger->logAction(CRON_ACTION, LOG_WARNING, 'WARNING!!! ' . $this->settings['system']['apacheconf_htpasswddir'] . ' is not a directory. htpasswd directory protection is disabled!!!'); + } + + if(is_dir($this->settings['system']['apacheconf_htpasswddir'])) + { + foreach($this->htpasswds_data as $htpasswd_filename => $htpasswd_file) + { + $this->known_htpasswdsfilenames[] = basename($htpasswd_filename); + $htpasswd_file_handler = fopen($htpasswd_filename, 'w'); + fwrite($htpasswd_file_handler, $htpasswd_file); + fclose($htpasswd_file_handler); + } + + $this->wipeOutOldHtpasswdConfigs(); + } + } + + // Write virtualhosts + + fwrite($this->debugHandler, ' apache::writeConfigs: rebuilding ' . $this->settings['system']['apacheconf_vhost'] . "\n"); + $this->logger->logAction(CRON_ACTION, LOG_INFO, "rebuilding " . $this->settings['system']['apacheconf_vhost']); + + if(count($this->virtualhosts_data) > 0) + { + if(!isConfigDir($this->settings['system']['apacheconf_vhost'])) + { + // Save one big file + + $vhosts_file = ''; + + foreach($this->virtualhosts_data as $vhosts_filename => $vhost_content) + { + $vhosts_file.= $vhost_content . "\n\n"; + } + + // Include diroptions file in case it exists + + if(file_exists($this->settings['system']['apacheconf_diroptions'])) + { + $vhosts_file.= "\n" . 'Include ' . $this->settings['system']['apacheconf_diroptions'] . "\n\n"; + } + + $vhosts_filename = $this->settings['system']['apacheconf_vhost']; + + // Apply header + + $vhosts_file = '# ' . basename($vhosts_filename) . "\n" . '# Created ' . date('d.m.Y H:i') . "\n" . '# Do NOT manually edit this file, all changes will be deleted after the next domain change at the panel.' . "\n" . "\n" . $vhosts_file; + $vhosts_file_handler = fopen($vhosts_filename, 'w'); + fwrite($vhosts_file_handler, $vhosts_file); + fclose($vhosts_file_handler); + } + else + { + if(!file_exists($this->settings['system']['apacheconf_vhost'])) + { + fwrite($this->debugHandler, ' apache::writeConfigs: mkdir ' . escapeshellarg(makeCorrectDir($this->settings['system']['apacheconf_vhost'])) . "\n"); + $this->logger->logAction(CRON_ACTION, LOG_NOTICE, 'mkdir ' . escapeshellarg(makeCorrectDir($this->settings['system']['apacheconf_vhost']))); + safe_exec('mkdir ' . escapeshellarg(makeCorrectDir($this->settings['system']['apacheconf_vhost']))); + } + + // Write a single file for every vhost + + foreach($this->virtualhosts_data as $vhosts_filename => $vhosts_file) + { + $this->known_vhostfilenames[] = basename($vhosts_filename); + + // Apply header + + $vhosts_file = '# ' . basename($vhosts_filename) . "\n" . '# Created ' . date('d.m.Y H:i') . "\n" . '# Do NOT manually edit this file, all changes will be deleted after the next domain change at the panel.' . "\n" . "\n" . $vhosts_file; + $vhosts_file_handler = fopen($vhosts_filename, 'w'); + fwrite($vhosts_file_handler, $vhosts_file); + fclose($vhosts_file_handler); + } + + $this->wipeOutOldVhostConfigs(); + } + } + } + + /* + * We remove old vhost config files + */ + + protected function wipeOutOldVhostConfigs() + { + fwrite($this->debugHandler, ' apache::wipeOutOldVhostConfigs: cleaning ' . $this->settings['system']['apacheconf_vhost'] . "\n"); + $this->logger->logAction(CRON_ACTION, LOG_INFO, "cleaning " . $this->settings['system']['apacheconf_vhost']); + + if(isConfigDir($this->settings['system']['apacheconf_vhost']) + && file_exists($this->settings['system']['apacheconf_vhost']) + && is_dir($this->settings['system']['apacheconf_vhost'])) + { + $vhost_file_dirhandle = opendir($this->settings['system']['apacheconf_vhost']); + + while(false !== ($vhost_filename = readdir($vhost_file_dirhandle))) + { + if($vhost_filename != '.' + && $vhost_filename != '..' + && !in_array($vhost_filename, $this->known_vhostfilenames) + && preg_match('/^(10|20|30)_syscp_(ipandport|normal_vhost|wildcard_vhost|ssl_vhost)_(.+)\.conf$/', $vhost_filename) + && file_exists(makeCorrectFile($this->settings['system']['apacheconf_vhost'] . '/' . $vhost_filename))) + { + fwrite($this->debugHandler, ' apache::wipeOutOldVhostConfigs: unlinking ' . $vhost_filename . "\n"); + $this->logger->logAction(CRON_ACTION, LOG_NOTICE, 'unlinking ' . $vhost_filename); + unlink(makeCorrectFile($this->settings['system']['apacheconf_vhost'] . '/' . $vhost_filename)); + } + } + } + } + + /* + * We remove old diroptions config files + */ + + protected function wipeOutOldDiroptionConfigs() + { + fwrite($this->debugHandler, ' apache::wipeOutOldDiroptionConfigs: cleaning ' . $this->settings['system']['apacheconf_diroptions'] . "\n"); + $this->logger->logAction(CRON_ACTION, LOG_INFO, "cleaning " . $this->settings['system']['apacheconf_diroptions']); + + if(isConfigDir($this->settings['system']['apacheconf_diroptions']) + && file_exists($this->settings['system']['apacheconf_diroptions']) + && is_dir($this->settings['system']['apacheconf_diroptions'])) + { + $diroptions_file_dirhandle = opendir($this->settings['system']['apacheconf_diroptions']); + + while(false !== ($diroptions_filename = readdir($diroptions_file_dirhandle))) + { + if($diroptions_filename != '.' + && $diroptions_filename != '..' + && !in_array($diroptions_filename, $this->known_diroptionsfilenames) + && preg_match('/^40_syscp_diroption_(.+)\.conf$/', $diroptions_filename) + && file_exists(makeCorrectFile($this->settings['system']['apacheconf_diroptions'] . '/' . $diroptions_filename))) + { + fwrite($this->debugHandler, ' apache::wipeOutOldDiroptionConfigs: unlinking ' . $diroptions_filename . "\n"); + $this->logger->logAction(CRON_ACTION, LOG_NOTICE, 'unlinking ' . $diroptions_filename); + unlink(makeCorrectFile($this->settings['system']['apacheconf_diroptions'] . '/' . $diroptions_filename)); + } + } + } + } + + /* + * We remove old htpasswd config files + */ + + protected function wipeOutOldHtpasswdConfigs() + { + fwrite($this->debugHandler, ' apache::wipeOutOldHtpasswdConfigs: cleaning ' . $this->settings['system']['apacheconf_htpasswddir'] . "\n"); + $this->logger->logAction(CRON_ACTION, LOG_INFO, "cleaning " . $this->settings['system']['apacheconf_htpasswddir']); + + if(isConfigDir($this->settings['system']['apacheconf_htpasswddir']) + && file_exists($this->settings['system']['apacheconf_htpasswddir']) + && is_dir($this->settings['system']['apacheconf_htpasswddir'])) + { + $htpasswds_file_dirhandle = opendir($this->settings['system']['apacheconf_htpasswddir']); + + while(false !== ($htpasswd_filename = readdir($htpasswds_file_dirhandle))) + { + if($htpasswd_filename != '.' + && $htpasswd_filename != '..' + && !in_array($htpasswd_filename, $this->known_htpasswdsfilenames) + && file_exists(makeCorrectFile($this->settings['system']['apacheconf_htpasswddir'] . '/' . $htpasswd_filename))) + { + fwrite($this->debugHandler, ' apache::wipeOutOldHtpasswdConfigs: unlinking ' . $htpasswd_filename . "\n"); + $this->logger->logAction(CRON_ACTION, LOG_NOTICE, 'unlinking ' . $htpasswd_filename); + unlink(makeCorrectFile($this->settings['system']['apacheconf_htpasswddir'] . '/' . $htpasswd_filename)); + } + } + } + } +} + +?> diff --git a/scripts/cron_tasks.inc.http.15.apache_fcgid.php b/scripts/cron_tasks.inc.http.15.apache_fcgid.php new file mode 100644 index 0000000000..221abfdd08 --- /dev/null +++ b/scripts/cron_tasks.inc.http.15.apache_fcgid.php @@ -0,0 +1,258 @@ + + * @author Luca Longinotti + * @author Michael Kaufmann + * @author Sven Skrabal + * @author Florian Lippert + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package System + * @version $Id: cron_tasks.inc.http.15.apache_fcgid.php 2714 2009-04-17 10:02:03Z flo $ + */ + +if(@php_sapi_name() != 'cli' + && @php_sapi_name() != 'cgi' + && @php_sapi_name() != 'cgi-fcgi') +{ + die('This script only works in the shell.'); +} + +class apache_fcgid extends apache +{ + private $php_configs_cache = array(); + private $admin_cache = array(); + + /* + * We put together the needed php options in the virtualhost entries + */ + + protected function composePhpOptions($domain) + { + $php_options_text = ''; + + if($domain['phpenabled'] == '1') + { + // This vHost has PHP enabled and we are using mod_fcgid + //create basic variables for config + + $configdir = makeCorrectDir($this->settings['system']['mod_fcgid_configdir'] . '/' . $domain['loginname'] . '/' . $domain['domain'] . '/'); + $starter_filename = makeCorrectFile($configdir . '/php-fcgi-starter'); + $phpini_filename = makeCorrectFile($configdir . '/php.ini'); + $tmpdir = makeCorrectDir($this->settings['system']['mod_fcgid_tmpdir'] . '/' . $domain['loginname'] . '/'); + + // create config dir if necessary + + if(!is_dir($configdir)) + { + safe_exec('mkdir -p ' . escapeshellarg($configdir)); + safe_exec('chown ' . $domain['guid'] . ':' . $domain['guid'] . ' ' . escapeshellarg($configdir)); + } + + // create tmp dir if necessary + + if(!is_dir($tmpdir)) + { + safe_exec('mkdir -p ' . escapeshellarg($tmpdir)); + safe_exec('chown -R ' . $domain['guid'] . ':' . $domain['guid'] . ' ' . escapeshellarg($tmpdir)); + safe_exec('chmod 0750 ' . escapeshellarg($tmpdir)); + } + + // Load php config + + $phpconfig = $this->getPhpConfig((int)$domain['phpsettingid']); + + if((int)$this->settings['system']['mod_fcgid_wrapper'] == 0) + { + $php_options_text.= ' SuexecUserGroup "' . $domain['loginname'] . '" "' . $domain['loginname'] . '"' . "\n"; + $php_options_text.= ' ScriptAlias /php/ ' . $configdir . "\n"; + } + else + { + $php_options_text.= ' SuexecUserGroup "' . $domain['loginname'] . '" "' . $domain['loginname'] . '"' . "\n"; + $php_options_text.= ' ' . "\n"; + $file_extensions = explode(' ', $phpconfig['file_extensions']); + $php_options_text.= ' AddHandler fcgid-script .' . implode(' .', $file_extensions) . "\n"; + foreach($file_extensions as $file_extension) + { + $php_options_text.= ' FCGIWrapper ' . $starter_filename . ' .' . $file_extension . "\n"; + } + + $php_options_text.= ' Options +ExecCGI' . "\n"; + $php_options_text.= ' ' . "\n"; + } + + // create starter + + $starter_file = "#!/bin/sh\n\n"; + $starter_file.= "#\n"; + $starter_file.= "# starter created/changed on " . date("Y.m.d H:i:s") . " for domain '" . $domain['domain'] . "' with id #" . $domain['id'] . " from php template '" . $phpconfig['description'] . "' with id #" . $phpconfig['id'] . "\n"; + $starter_file.= "# Do not change anything in this file, it will be overwritten by the SysCP Cronjob!\n"; + $starter_file.= "#\n\n"; + $starter_file.= "PHPRC=" . escapeshellarg($configdir) . "\n"; + $starter_file.= "export PHPRC\n"; + + // set number of processes for one domain + + if((int)$domain['mod_fcgid_starter'] != - 1) + { + $starter_file.= "PHP_FCGI_CHILDREN=" . (int)$domain['mod_fcgid_starter'] . "\n"; + } + else + { + if((int)$phpconfig['mod_fcgid_starter'] != - 1) + { + $starter_file.= "PHP_FCGI_CHILDREN=" . (int)$phpconfig['mod_fcgid_starter'] . "\n"; + } + else + { + $starter_file.= "PHP_FCGI_CHILDREN=" . (int)$this->settings['system']['mod_fcgid_starter'] . "\n"; + } + } + + $starter_file.= "export PHP_FCGI_CHILDREN\n"; + + // set number of maximum requests for one domain + + if((int)$domain['mod_fcgid_maxrequests'] != - 1) + { + $starter_file.= "PHP_FCGI_MAX_REQUESTS=" . (int)$domain['mod_fcgid_maxrequests'] . "\n"; + } + else + { + if((int)$phpconfig['mod_fcgid_maxrequests'] != - 1) + { + $starter_file.= "PHP_FCGI_MAX_REQUESTS=" . (int)$phpconfig['mod_fcgid_maxrequests'] . "\n"; + } + else + { + $starter_file.= "PHP_FCGI_MAX_REQUESTS=" . (int)$this->settings['system']['mod_fcgid_maxrequests'] . "\n"; + } + } + + $starter_file.= "export PHP_FCGI_MAX_REQUESTS\n"; + + // Set Binary + + $starter_file.= "exec " . $phpconfig['binary'] . " -c " . escapeshellarg($configdir) . "\n"; + + //remove +i attibute, so starter can be overwritten + + if(file_exists($starter_filename)) + { + safe_exec('chattr -i ' . escapeshellarg($starter_filename)); + } + + $starter_file_handler = fopen($starter_filename, 'w'); + fwrite($starter_file_handler, $starter_file); + fclose($starter_file_handler); + safe_exec('chmod 750 ' . escapeshellarg($starter_filename)); + safe_exec('chown ' . $domain['guid'] . ':' . $domain['guid'] . ' ' . escapeshellarg($starter_filename)); + safe_exec('chattr +i ' . escapeshellarg($starter_filename)); + + // define the php.ini + + $openbasedir = ''; + + if($domain['openbasedir'] == '1') + { + if($domain['openbasedir_path'] == '0') + { + $openbasedir = $domain['documentroot'] . ':' . $tmpdir . ':' . $this->settings['system']['mod_fcgid_peardir'] . ':' . $this->settings['system']['phpappendopenbasedir']; + } + else + { + $openbasedir = $domain['customerroot'] . ':' . $tmpdir . ':' . $this->settings['system']['mod_fcgid_peardir'] . ':' . $this->settings['system']['phpappendopenbasedir']; + } + + $openbasedir = explode(':', $openbasedir); + foreach($openbasedir as $number => $path) + { + $openbasedir[$number] = makeCorrectDir($path); + } + + $openbasedir = implode(':', $openbasedir); + } + else + { + $openbasedir = 'none'; + } + + $admin = $this->getAdminData($domain['adminid']); + $php_ini_variables = array( + 'SAFE_MODE' => ($domain['safemode'] == '0' ? 'Off' : 'On'), + 'PEAR_DIR' => $this->settings['system']['mod_fcgid_peardir'], + 'OPEN_BASEDIR' => $openbasedir, + 'OPEN_BASEDIR_GLOBAL' => $this->settings['system']['phpappendopenbasedir'], + 'TMP_DIR' => $tmpdir, + 'CUSTOMER_EMAIL' => $domain['email'], + 'ADMIN_EMAIL' => $admin['email'], + 'DOMAIN' => $domain['domain'], + 'CUSTOMER' => $domain['loginname'], + 'ADMIN' => $admin['loginname'] + ); + + //insert a small header for the file + + $phpini_file = ";\n"; + $phpini_file.= "; php.ini created/changed on " . date("Y.m.d H:i:s") . " for domain '" . $domain['domain'] . "' with id #" . $domain['id'] . " from php template '" . $phpconfig['description'] . "' with id #" . $phpconfig['id'] . "\n"; + $phpini_file.= "; Do not change anything in this file, it will be overwritten by the SysCP Cronjob!\n"; + $phpini_file.= ";\n\n"; + $phpini_file.= replace_variables($phpconfig['phpsettings'], $php_ini_variables); + $phpini_file = str_replace('"none"', 'none', $phpini_file); + $phpini_file = preg_replace('/\"+/', '"', $phpini_file); + $phpini_file_handler = fopen($phpini_filename, 'w'); + fwrite($phpini_file_handler, $phpini_file); + fclose($phpini_file_handler); + safe_exec('chown root:0 ' . escapeshellarg($phpini_filename)); + safe_exec('chmod 0644 ' . escapeshellarg($phpini_filename)); + } + else + { + $php_options_text.= ' # PHP is disabled for this vHost' . "\n"; + } + + return $php_options_text; + } + + private function getPhpConfig($php_config_id) + { + $php_config_id = intval($php_config_id); + + // If domain has no config, we will use the default one. + + if($php_config_id == 0) + { + $php_config_id = 1; + } + + if(!isset($this->php_configs_cache[$php_config_id])) + { + $this->php_configs_cache[$php_config_id] = $this->db->query_first("SELECT * FROM `" . TABLE_PANEL_PHPCONFIGS . "` WHERE `id` = " . (int)$php_config_id); + } + + return $this->php_configs_cache[$php_config_id]; + } + + private function getAdminData($adminid) + { + $adminid = intval($adminid); + + if(!isset($this->admin_cache[$adminid])) + { + $this->admin_cache[$adminid] = $this->db->query_first("SELECT `email`, `loginname` FROM `" . TABLE_PANEL_ADMINS . "` WHERE `adminid` = " . (int)$adminid); + } + + return $this->admin_cache[$adminid]; + } +} + +?> \ No newline at end of file diff --git a/scripts/cron_tasks.inc.http.20.lighttpd.php b/scripts/cron_tasks.inc.http.20.lighttpd.php new file mode 100644 index 0000000000..2bff8ccb2b --- /dev/null +++ b/scripts/cron_tasks.inc.http.20.lighttpd.php @@ -0,0 +1,569 @@ + + * @author Martin Burchert + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package System + * @version $Id: cron_tasks.inc.http.20.lighttpd.php 2715 2009-04-28 14:24:46Z flo $ + */ + +/* + * This script creates the php.ini's used by mod_suPHP+php-cgi + */ + +if(@php_sapi_name() != 'cli' + && @php_sapi_name() != 'cgi' + && @php_sapi_name() != 'cgi-fcgi') +{ + die('This script only works in the shell.'); +} + +class lighttpd +{ + private $db = false; + private $logger = false; + private $debugHandler = false; + private $settings = array(); + + // protected + + public $needed_htpasswds = array(); + public $auth_backend_loaded = false; + public $htpasswd_files = array(); + public $mod_accesslog_loaded = "0"; + protected $lighttpd_data = array(); + + function __construct($db, $logger, $debugHandler, $settings) + { + $this->db = $db; + $this->logger = $logger; + $this->debugHandler = $debugHandler; + $this->settings = $settings; + } + + public function reload() + { + fwrite($this->debugHandler, ' lighttpd::reload: reloading lighttpd' . "\n"); + $this->logger->logAction(CRON_ACTION, LOG_INFO, 'reloading apache'); + safe_exec($this->settings['system']['apachereload_command']); + } + + public function createIpPort() + { + $query = "SELECT `id`, `ip`, `port`, `listen_statement`, `namevirtualhost_statement`, `vhostcontainer`, " . " `vhostcontainer_servername_statement`, `specialsettings`, `ssl`, `ssl_cert_file` " . " FROM `" . TABLE_PANEL_IPSANDPORTS . "` ORDER BY `ip` ASC, `port` ASC"; + $result_ipsandports = $this->db->query($query); + + while($row_ipsandports = $this->db->fetch_array($result_ipsandports)) + { + if(filter_var($row_ipsandports['ip'], FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) + { + $ip = '[' . $row_ipsandports['ip'] . ']'; + $port = $row_ipsandports['port']; + } + else + { + $ip = $row_ipsandports['ip']; + $port = $row_ipsandports['port']; + } + + fwrite($this->debugHandler, ' lighttpd::createIpPort: creating ip/port settings for ' . $ip . ":" . $port . "\n"); + $this->logger->logAction(CRON_ACTION, LOG_INFO, 'creating ip/port settings for ' . $ip . ":" . $port); + $vhost_filename = makeCorrectFile($this->settings['system']['apacheconf_vhost'] . '/10_syscp_ipandport_' . trim(str_replace(':', '.', $row_ipsandports['ip']), '.') . '.' . $row_ipsandports['port'] . '.conf'); + $this->lighttpd_data[$vhost_filename].= '$SERVER["socket"] == "' . $ip . ':' . $port . '" {' . "\n"; + + if($row_ipsandports['listen_statement'] == '1') + { + $this->lighttpd_data[$vhost_filename].= 'server.port = ' . $port . "\n"; + $this->lighttpd_data[$vhost_filename].= 'server.bind = "' . $ip . '"' . "\n"; + } + + if($row_ipsandports['ssl'] == '1') + { + $this->lighttpd_data[$vhost_filename].= 'ssl.engine = "enable"' . "\n"; + $this->lighttpd_data[$vhost_filename].= 'ssl.pemfile = "' . $row_ipsandports['ssl_cert_file'] . '"' . "\n"; + } + + $this->createLighttpdHosts($row_ipsandports['ip'], $row_ipsandports['port'], $row_ipsandports['ssl'], $vhost_filename); + $this->lighttpd_data[$vhost_filename].= $this->needed_htpasswds[$row_ipsandports['id']] . "\n"; + $this->lighttpd_data[$vhost_filename].= '}' . "\n"; + } + } + + protected function create_htaccess($domain) + { + $needed_htpasswds = array(); + $htpasswd_query = "SELECT * FROM " . TABLE_PANEL_HTPASSWDS . " WHERE `path` LIKE '" . $domain['documentroot'] . "%'"; + $result_htpasswds = $this->db->query($htpasswd_query); + + while($row_htpasswds = $this->db->fetch_array($result_htpasswds)) + { + $filename = $row_htpasswds['customerid'] . '-' . md5($row_htpasswds['path']) . '.htpasswd'; + + if(!in_array($row_htpasswds['path'], $needed_htpasswds)) + { + if(empty($needed_htpasswds)) + { + $auth_backend_loaded[$domain['ipandport']] = 'yes'; + + if(!$this->auth_backend_loaded) + { + $htaccess_text.= ' auth.backend = "htpasswd"' . "\n"; + } + + $htaccess_text.= ' auth.backend.htpasswd.userfile = "' . makeCorrectFile($this->settings['system']['apacheconf_htpasswddir'] . '/' . $filename) . '"' . "\n"; + $htaccess_text.= ' auth.require = ( ' . "\n"; + } + else + { + $htaccess_text.= ' ,' . "\n"; + } + + if(!strstr($this->needed_htpasswds[$filename], $row_htpasswds['username'] . ':' . $row_htpasswds['password'])) + { + $this->needed_htpasswds[$filename].= $row_htpasswds['username'] . ':' . $row_htpasswds['password'] . "\n"; + } + + $needed_htpasswds[] = $row_htpasswds['path']; + $htaccess_path = substr($row_htpasswds['path'], strlen($domain['documentroot']) - 1); + $htaccess_text.= ' "' . makeCorrectDir($htaccess_path) . '" =>' . "\n"; + $htaccess_text.= ' (' . "\n"; + $htaccess_text.= ' "method" => "basic",' . "\n"; + $htaccess_text.= ' "realm" => "Restricted Area",' . "\n"; + $htaccess_text.= ' "require" => "user=' . $row_htpasswds[username] . '"' . "\n"; + $htaccess_text.= ' )' . "\n"; + } + } + + if(strlen(trim($htaccess_text)) > 0) + { + $htaccess_text.= ' )' . "\n"; + } + + return $htaccess_text; + } + + function createVirtualHosts() + { + } + + function createFileDirOptions() + { + } + + protected function createLighttpdHosts($ip, $port, $ssl, $vhost_filename) + { + $query = "SELECT * FROM " . TABLE_PANEL_IPSANDPORTS . " WHERE `ip`='" . $ip . "' AND `port`='" . $port . "'"; + $ipandport = $this->db->query_first($query); + + if($ssl == '0') + { + $query2 = "SELECT `d`.`id`, `d`.`domain`, `d`.`customerid`, `d`.`documentroot`, `d`.`ssl`, " . "`d`.`parentdomainid`, `d`.`ipandport`, `d`.`ssl_ipandport`, `d`.`ssl_redirect`, " . "`d`.`isemaildomain`, `d`.`iswildcarddomain`, `d`.`wwwserveralias`, `d`.`openbasedir`, `d`.`openbasedir_path`, " . "`d`.`safemode`, `d`.`speciallogfile`, `d`.`specialsettings`, `pd`.`domain` AS `parentdomain`, `c`.`loginname`, " . "`c`.`guid`, `c`.`email`, `c`.`documentroot` AS `customerroot`, `c`.`deactivated`, `c`.`phpenabled` AS `phpenabled` " . "FROM `" . TABLE_PANEL_DOMAINS . "` `d` LEFT JOIN `" . TABLE_PANEL_CUSTOMERS . "` `c` USING(`customerid`) " . "LEFT JOIN `" . TABLE_PANEL_DOMAINS . "` `pd` ON (`pd`.`id` = `d`.`parentdomainid`) " . "WHERE `d`.`ipandport`='" . $ipandport['id'] . "' " . "ORDER BY `d`.`iswildcarddomain`, `d`.`domain` ASC"; + } + else + { + $query2.= "SELECT `d`.`id`, `d`.`domain`, `d`.`customerid`, `d`.`documentroot`, `d`.`ssl`, " . "`d`.`parentdomainid`, `d`.`ipandport`, `d`.`ssl_ipandport`, `d`.`ssl_redirect`, " . "`d`.`isemaildomain`, `d`.`iswildcarddomain`, `d`.`wwwserveralias`, `d`.`openbasedir`, `d`.`openbasedir_path`, " . "`d`.`safemode`, `d`.`speciallogfile`, `d`.`specialsettings`, `pd`.`domain` AS `parentdomain`, `c`.`loginname`, " . "`c`.`guid`, `c`.`email`, `c`.`documentroot` AS `customerroot`, `c`.`deactivated`, `c`.`phpenabled` AS `phpenabled` " . "FROM `" . TABLE_PANEL_DOMAINS . "` `d` LEFT JOIN `" . TABLE_PANEL_CUSTOMERS . "` `c` USING(`customerid`) " . "LEFT JOIN `" . TABLE_PANEL_DOMAINS . "` `pd` ON (`pd`.`id` = `d`.`parentdomainid`) " . "WHERE `d`.`ssl_ipandport`='" . $ipandport['id'] . "' " . "ORDER BY `d`.`iswildcarddomain`, `d`.`domain` ASC"; + } + + $result_domains = $this->db->query($query2); + + while($domain = $this->db->fetch_array($result_domains)) + { + $query = "SELECT * FROM " . TABLE_PANEL_IPSANDPORTS . " WHERE `id`='" . $domain['ipandport'] . "'"; + $ipandport = $this->db->query_first($query); + $domain['ip'] = $ipandport['ip']; + $domain['port'] = $ipandport['port']; + $domain['ssl_cert_file'] = $ipandport['ssl_cert_file']; + + if(!empty($this->lighttpd_data[$vhost_filename])) + { + if($ssl == '1') + { + $ssl_vhost = true; + } + else + { + $ssl_vhost = false; + } + + $this->lighttpd_data[$vhost_filename].= $this->getVhostContent($domain, $ssl_vhost); + } + } + } + + protected function getVhostContent($domain, $ssl_vhost = false) + { + if($ssl_vhost === true + && $domain['ssl'] != '1') + { + return ''; + } + + if($ssl_vhost === true + && $domain['ssl'] == '1') + { + $query = "SELECT * FROM " . TABLE_PANEL_IPSANDPORTS . " WHERE `id`='" . $domain['ssl_ipandport'] . "'"; + } + else + { + $query = "SELECT * FROM " . TABLE_PANEL_IPSANDPORTS . " WHERE `id`='" . $domain['ipandport'] . "'"; + } + + $ipandport = $this->db->query_first($query); + $domain['ip'] = $ipandport['ip']; + $domain['port'] = $ipandport['port']; + $domain['ssl_cert_file'] = $ipandport['ssl_cert_file']; + + if(filter_var($domain['ip'], FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) + { + $ipport = '[' . $domain['ip'] . ']:' . $domain['port']; + } + else + { + $ipport = $domain['ip'] . ':' . $domain['port']; + } + + $vhost_content.= $this->getServerNames($domain) . " {\n"; + $vhost_content.= $this->getWebroot($domain, $ssl_vhost); + $vhost_content.= $this->create_htaccess($domain); + $vhost_content.= $this->create_pathOptions($domain); + $vhost_content.= $this->getLogFiles($domain); + $vhost_content.= '}' . "\n"; + return $vhost_content; + } + + protected function getLogFiles($domain) + { + $logfiles_text = ''; + + if($this->settings['system']['mod_log_sql'] == 1) + { + // We are using mod_log_sql (http://www.outoforder.cc/projects/apache/mod_log_sql/) + // TODO: See how we are able emulate the error_log + } + else + { + // The normal access/error - logging is enabled + + $filename = $this->settings['system']['logfiles_directory'] . $domain['loginname'] . $speciallogfile . '-error.log'; + + if(!is_file($filename)) + { + $ourFileHandle = fopen($filename, 'w') or die("can't open file"); + fclose($ourFileHandle); + } + + chown($filename, $this->settings[system]['httpuser']); + chgrp($filename, $this->settings[system]['httpgroup']); + + //access log + + $filename = $this->settings['system']['logfiles_directory'] . $domain['loginname'] . $speciallogfile . '-access.log'; + + if(!is_file($filename)) + { + $ourFileHandle = fopen($filename, 'w') or die("can't open file"); + fclose($ourFileHandle); + } + + $logfiles_text.= ' accesslog.filename = "' . $filename . '"' . "\n"; + chown($filename, $this->settings[system]['httpuser']); + chgrp($filename, $this->settings[system]['httpgroup']); + } + + return $logfiles_text; + } + + protected function create_pathOptions($domain) + { + $query = "SELECT * FROM " . TABLE_PANEL_HTACCESS . " WHERE `path` LIKE '" . $domain['documentroot'] . "%'"; + $result = $this->db->query($query); + + while($row = $this->db->fetch_array($result)) + { + if(!empty($row['error404path'])) + { + $error_string.= ' server.error-handler-404 = "' . makeCorrectFile($row['documentroot'] . '/' . $row['error404path']) . '"' . "\n"; + } + + if($row['options_indexes'] != '0') + { + $path = makeCorrectDir(substr($row['path'], strlen($domain['documentroot']) - 1)); + + // We need to remove the last slash, otherwise the regex wouldn't work + + $path = substr($path, 0, -1); + $error_string.= '$HTTP["url"] =~ "^' . $path . '($|/)" {' . "\n"; + $error_string.= "\t" . 'dir-listing.activate = "enable"' . "\n"; + $error_string.= '}' . "\n"; + } + } + + return $error_string; + } + + protected function getDirOptions($domain) + { + $query = "SELECT * FROM " . TABLE_PANEL_HTPASSWDS . " WHERE `customerid`='" . $domain[customerid] . "'"; + $result = $this->db->query($query); + + while($row_htpasswds = $this->db->fetch_array($result)) + { + if($auth_backend_loaded[$domain['ipandport']] != 'yes' + && $auth_backend_loaded[$domain['ssl_ipandport']] != 'yes') + { + $filename = $domain['customerid'] . '.htpasswd'; + + if($this->auth_backend_loaded[$domain['ipandport']] != 'yes') + { + $auth_backend_loaded[$domain['ipandport']] = 'yes'; + $diroption_text.= 'auth.backend = "htpasswd"' . "\n"; + $diroption_text.= 'auth.backend.htpasswd.userfile = "' . makeCorrectFile($this->settings['system']['apacheconf_htpasswddir'] . '/' . $filename) . '"' . "\n"; + $this->needed_htpasswds[$filename] = $row_htpasswds['username'] . ':' . $row_htpasswds['password'] . "\n"; + $diroption_text.= 'auth.require = ( ' . "\n"; + $previous_domain_id = '1'; + } + elseif($this->auth_backend_loaded[$domain['ssl_ipandport']] != 'yes') + { + $auth_backend_loaded[$domain['ssl_ipandport']] = 'yes'; + $diroption_text.= 'auth.backend= "htpasswd"' . "\n"; + $diroption_text.= 'auth.backend.htpasswd.userfile = "' . makeCorrectFile($this->settings['system']['apacheconf_htpasswddir'] . '/' . $filename) . '"' . "\n"; + $this->needed_htpasswds[$filename] = $row_htpasswds['username'] . ':' . $row_htpasswds['password'] . "\n"; + $diroption_text.= 'auth.require = ( ' . "\n"; + $previous_domain_id = '1'; + } + } + + $diroption_text.= '"' . $row_htpasswds['path'] . '" =>' . "\n"; + $diroption_text.= '(' . "\n"; + $diroption_text.= ' "method" => "basic",' . "\n"; + $diroption_text.= ' "realm" => "Restricted Area",' . "\n"; + $diroption_text.= ' "require" => "user=' . $row_htpasswds['username'] . '"' . "\n"; + $diroption_text.= ')' . "\n"; + + if($this->auth_backend_loaded[$domain['ssl_ipandport']] == 'yes') + { + $this->needed_htpasswds[$domain['ssl_ipandport']].= $diroption_text; + } + + if($this->auth_backend_loaded[$domain['ipandport']] != 'yes') + { + $this->needed_htpasswds[$domain['ipandport']].= $diroption_text; + } + } + + return ' auth.backend.htpasswd.userfile = "' . makeCorrectFile($this->settings['system']['apacheconf_htpasswddir'] . '/' . $filename) . '"' . "\n"; + } + + protected function getServerNames($domain) + { + $server_string = array(); + $domain_name = ereg_replace('\.', '\.', $domain['domain']); + + if($domain['iswildcarddomain'] == '1') + { + $server_string[] = '(^|\.)' . $domain_name . '$'; + } + else + { + if($domain['wwwserveralias'] == '1') + { + $server_string[] = '^(www\.|)' . $domain_name . '$'; + } + else + { + } + } + + $alias_domains = $this->db->query('SELECT `domain`, `iswildcarddomain`, `wwwserveralias` FROM `' . TABLE_PANEL_DOMAINS . '` WHERE `aliasdomain`=\'' . $domain['id'] . '\''); + + while(($alias_domain = $this->db->fetch_array($alias_domains)) !== false) + { + $alias_domain_name = ereg_replace('\.', '\.', $alias_domain['domain']); + + if($alias_domain['iswildcarddomain'] == '1') + { + $server_string[] = '(^|\.)' . $alias_domain_name . '$'; + } + else + { + if($alias_domain['wwwserveralias'] == '1') + { + $server_string[] = '^(www.)?' . $alias_domain_name; + } + else + { + $server_string[] = $alias_domain_name; + } + } + } + + for ($i = 0;$i < sizeof($server_string);$i++) + { + $data = $server_string[$i]; + + if(sizeof($server_string) > 1) + { + if($i == 0) + { + $servernames_text = '(' . $data . '|'; + } + elseif(sizeof($server_string) - 1 == $i) + { + $servernames_text.= $data . ')'; + } + else + { + $servernames_text.= $data . '|'; + } + } + else + { + $servernames_text = $data; + } + } + + unset($data); + $servernames_text = '$HTTP["host"] =~ "' . $servernames_text . '"'; + return $servernames_text; + } + + protected function getWebroot($domain, $ssl) + { + $webroot_text = ''; + + if($domain['deactivated'] == '1' + && $this->settings['system']['deactivateddocroot'] != '') + { + $webroot_text.= ' # Using docroot for deactivated users...' . "\n"; + $webroot_text.= ' server.document-root = "' . $this->settings['system']['deactivateddocroot'] . "\"\n"; + } + else + { + if($ssl === false + && $domain['ssl_redirect'] == '1') + { + $webroot_text.= ' url.redirect = ( "^/(.*)" => "https://' . $domain['domain'] . '/$1" )' . "\n"; + } + elseif(preg_match("#^https?://#i", $domain['documentroot'])) + { + $webroot_text.= ' url.redirect = ( "^/(.*)" => "' . $domain['documentroot'] . '/$1" )' . "\n"; + } + else + { + $webroot_text.= ' server.document-root = "' . makeCorrectDir($domain['documentroot']) . "\"\n"; + } + } + + return $webroot_text; + } + + public function writeConfigs() + { + fwrite($this->debugHandler, ' lighttpd::writeConfigs: rebuilding ' . $this->settings['system']['apacheconf_vhost'] . "\n"); + $this->logger->logAction(CRON_ACTION, LOG_INFO, "rebuilding " . $this->settings['system']['apacheconf_vhost']); + + if(!isConfigDir($this->settings['system']['apacheconf_vhost'])) + { + // Save one big file + + foreach($this->lighttpd_data as $vhosts_filename => $vhost_content) + { + $vhosts_file.= $vhost_content . "\n\n"; + } + + $vhosts_filename = $this->settings['system']['apacheconf_vhost']; + + // Apply header + + $vhosts_file = '# ' . basename($vhosts_filename) . "\n" . '# Created ' . date('d.m.Y H:i') . "\n" . '# Do NOT manually edit this file, all changes will be deleted after the next domain change at the panel.' . "\n" . "\n" . $vhosts_file; + $vhosts_file_handler = fopen($vhosts_filename, 'w'); + fwrite($vhosts_file_handler, $vhosts_file); + fclose($vhosts_file_handler); + } + else + { + if(!file_exists($this->settings['system']['apacheconf_vhost'])) + { + fwrite($this->debugHandler, ' lighttpd::writeConfigs: mkdir ' . escapeshellarg(makeCorrectDir($this->settings['system']['apacheconf_vhost'])) . "\n"); + $this->logger->logAction(CRON_ACTION, LOG_NOTICE, 'mkdir ' . escapeshellarg(makeCorrectDir($this->settings['system']['apacheconf_vhost']))); + safe_exec('mkdir ' . escapeshellarg(makeCorrectDir($this->settings['system']['apacheconf_vhost']))); + } + + // Write a single file for every vhost + + foreach($this->lighttpd_data as $vhosts_filename => $vhosts_file) + { + $this->known_filenames[] = basename($vhosts_filename); + + // Apply header + + $vhosts_file = '# ' . basename($vhosts_filename) . "\n" . '# Created ' . date('d.m.Y H:i') . "\n" . '# Do NOT manually edit this file, all changes will be deleted after the next domain change at the panel.' . "\n" . "\n" . $vhosts_file; + + if(!empty($vhosts_filename)) + { + $vhosts_file_handler = fopen($vhosts_filename, 'w'); + fwrite($vhosts_file_handler, $vhosts_file); + fclose($vhosts_file_handler); + } + } + + $this->wipeOutOldConfigs(); + } + + // Write the diroptions + + if(isConfigDir($this->settings['system']['apacheconf_htpasswddir'])) + { + foreach($this->needed_htpasswds as $key => $data) + { + if(!is_dir($this->settings['system']['apacheconf_htpasswddir'])) + { + mkdir($this->settings['system']['apacheconf_htpasswddir']); + } + + $filename = $this->settings['system']['apacheconf_htpasswddir'] . '/' . $key; + $htpasswd_handler = fopen($filename, 'w'); + fwrite($htpasswd_handler, $data); + fclose($htpasswd_handler); + } + } + } + + private function wipeOutOldConfigs() + { + fwrite($this->debugHandler, ' apache::wipeOutOldConfigs: cleaning ' . $this->settings['system']['apacheconf_vhost'] . "\n"); + $this->logger->logAction(CRON_ACTION, LOG_INFO, "cleaning " . $this->settings['system']['apacheconf_vhost']); + + if(isConfigDir($this->settings['system']['apacheconf_vhost']) + && file_exists($this->settings['system']['apacheconf_vhost']) + && is_dir($this->settings['system']['apacheconf_vhost'])) + { + $vhost_file_dirhandle = opendir($this->settings['system']['apacheconf_vhost']); + + while(false !== ($vhost_filename = readdir($vhost_file_dirhandle))) + { + if($vhost_filename != '.' + && $vhost_filename != '..' + && !in_array($vhost_filename, $this->known_filenames) + && preg_match('/^(10|20|30)_syscp_ipandport_(.+)\.conf$/', $vhost_filename) + && file_exists(makeCorrectFile($this->settings['system']['apacheconf_vhost'] . '/' . $vhost_filename))) + { + fwrite($this->debugHandler, ' apache::wipeOutOldConfigs: unlinking ' . $vhost_filename . "\n"); + $this->logger->logAction(CRON_ACTION, LOG_NOTICE, 'unlinking ' . $vhost_filename); + unlink(makeCorrectFile($this->settings['system']['apacheconf_vhost'] . '/' . $vhost_filename)); + } + } + } + } +} + +?> diff --git a/scripts/cron_tasks.php b/scripts/cron_tasks.php new file mode 100644 index 0000000000..b096b1bded --- /dev/null +++ b/scripts/cron_tasks.php @@ -0,0 +1,204 @@ + + * @author Martin Burchert + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package System + * @version $Id: cron_tasks.php 2692 2009-03-27 18:04:47Z flo $ + */ + +/** + * STARTING REDUNDANT CODE, WHICH IS SOME KINDA HEADER FOR EVERY CRON SCRIPT. + * When using this "header" you have to change $lockFilename for your needs. + * Don't forget to also copy the footer which closes database connections + * and the lockfile! + */ + +include (dirname(__FILE__) . '/../lib/cron_init.php'); + +/** + * END REDUNDANT CODE (CRONSCRIPT "HEADER") + */ + +/** + * LOOK INTO TASKS TABLE TO SEE IF THERE ARE ANY UNDONE JOBS + */ + +fwrite($debugHandler, ' cron_tasks: Searching for tasks to do' . "\n"); +$cronlog->logAction(CRON_ACTION, LOG_INFO, "Searching for tasks to do"); +$result_tasks = $db->query("SELECT `id`, `type`, `data` FROM `" . TABLE_PANEL_TASKS . "` ORDER BY `id` ASC"); +$resultIDs = array(); + +while($row = $db->fetch_array($result_tasks)) +{ + $resultIDs[] = $row['id']; + + if($row['data'] != '') + { + $row['data'] = unserialize($row['data']); + } + + /** + * TYPE=1 MEANS TO REBUILD APACHE VHOSTS.CONF + */ + + if($row['type'] == '1') + { + if(!isset($webserver)) + { + if($settings['system']['webserver'] == "apache2") + { + if($settings['system']['mod_fcgid'] == 1) + { + $webserver = new apache_fcgid($db, $cronlog, $debugHandler, $settings); + } + else + { + $webserver = new apache($db, $cronlog, $debugHandler, $settings); + } + } + elseif($settings['system']['webserver'] == "lighttpd") + { + $webserver = new lighttpd($db, $cronlog, $debugHandler, $settings); + } + } + + if(isset($webserver)) + { + $webserver->createIpPort(); + $webserver->createVirtualHosts(); + $webserver->createFileDirOptions(); + $webserver->writeConfigs(); + $webserver->reload(); + } + else + { + echo "Please check you Webserver settings\n"; + } + } + + /** + * TYPE=2 MEANS TO CREATE A NEW HOME AND CHOWN + */ + elseif ($row['type'] == '2') + { + fwrite($debugHandler, ' cron_tasks: Task2 started - create new home' . "\n"); + $cronlog->logAction(CRON_ACTION, LOG_INFO, 'Task2 started - create new home'); + + if(is_array($row['data'])) + { + $cronlog->logAction(CRON_ACTION, LOG_NOTICE, 'Running: mkdir -p ' . escapeshellarg($settings['system']['documentroot_prefix'] . $row['data']['loginname'] . '/webalizer')); + safe_exec('mkdir -p ' . escapeshellarg($settings['system']['documentroot_prefix'] . $row['data']['loginname'] . '/webalizer')); + $cronlog->logAction(CRON_ACTION, LOG_NOTICE, 'Running: mkdir -p ' . escapeshellarg($settings['system']['vmail_homedir'] . $row['data']['loginname'])); + safe_exec('mkdir -p ' . escapeshellarg($settings['system']['vmail_homedir'] . $row['data']['loginname'])); + + //check if admin of customer has added template for new customer directories + + $result = $db->query("SELECT `t`.`value`, `c`.`email` AS `customer_email`, `a`.`email` AS `admin_email`, `c`.`loginname` AS `customer_login`, `a`.`loginname` AS `admin_login` FROM `" . TABLE_PANEL_CUSTOMERS . "` AS `c` INNER JOIN `" . TABLE_PANEL_ADMINS . "` AS `a` ON `c`.`adminid` = `a`.`adminid` INNER JOIN `" . TABLE_PANEL_TEMPLATES . "` AS `t` ON `a`.`adminid` = `t`.`adminid` WHERE `varname` = 'index_html' AND `c`.`loginname` = '" . $db->escape($row['data']['loginname']) . "'"); + + if($db->num_rows($result) > 0) + { + $template = $db->fetch_array($result); + $replace_arr = array( + 'SERVERNAME' => $settings['system']['hostname'], + 'CUSTOMER' => $template['customer_login'], + 'ADMIN' => $template['admin_login'], + 'CUSTOMER_EMAIL' => $template['customer_email'], + 'ADMIN_EMAIL' => $template['admin_email'] + ); + $htmlcontent = replace_variables($template['value'], $replace_arr); + $indexhtmlpath = $settings['system']['documentroot_prefix'] . $row['data']['loginname'] . '/index.' . $settings['system']['index_file_extension']; + $index_html_handler = fopen($indexhtmlpath, 'w'); + fwrite($index_html_handler, $htmlcontent); + fclose($index_html_handler); + $cronlog->logAction(CRON_ACTION, LOG_NOTICE, 'Creating \'index.' . $settings['system']['index_file_extension'] . '\' for Customer \'' . $template['customer_login'] . '\' based on template in directory ' . escapeshellarg($indexhtmlpath)); + } + else + { + $cronlog->logAction(CRON_ACTION, LOG_NOTICE, 'Running: cp -a ' . $pathtophpfiles . '/templates/misc/standardcustomer/* ' . escapeshellarg($settings['system']['documentroot_prefix'] . $row['data']['loginname'] . '/')); + safe_exec('cp -a ' . $pathtophpfiles . '/templates/misc/standardcustomer/* ' . escapeshellarg($settings['system']['documentroot_prefix'] . $row['data']['loginname'] . '/')); + } + + $cronlog->logAction(CRON_ACTION, LOG_NOTICE, 'Running: chown -R ' . (int)$row['data']['uid'] . ':' . (int)$row['data']['gid'] . ' ' . escapeshellarg($settings['system']['documentroot_prefix'] . $row['data']['loginname'])); + safe_exec('chown -R ' . (int)$row['data']['uid'] . ':' . (int)$row['data']['gid'] . ' ' . escapeshellarg($settings['system']['documentroot_prefix'] . $row['data']['loginname'])); + $cronlog->logAction(CRON_ACTION, LOG_NOTICE, 'Running: chown -R ' . (int)$settings['system']['vmail_uid'] . ':' . (int)$settings['system']['vmail_gid'] . ' ' . escapeshellarg($settings['system']['vmail_homedir'] . $row['data']['loginname'])); + safe_exec('chown -R ' . (int)$settings['system']['vmail_uid'] . ':' . (int)$settings['system']['vmail_gid'] . ' ' . escapeshellarg($settings['system']['vmail_homedir'] . $row['data']['loginname'])); + } + } + + /** + * TYPE=3 MEANS TO DO NOTHING + */ + elseif ($row['type'] == '3') + { + } + + /** + * TYPE=4 MEANS THAT SOMETHING IN THE BIND CONFIG HAS CHANGED. REBUILD syscp_bind.conf + */ + elseif ($row['type'] == '4') + { + if(!isset($nameserver)) + { + $nameserver = new bind($db, $cronlog, $debugHandler, $settings); + } + + if($settings['dkim']['use_dkim'] == '1') + { + $nameserver->writeDKIMconfigs(); + } + + $nameserver->writeConfigs(); + } + + /** + * TYPE=5 MEANS THAT A NEW FTP-ACCOUNT HAS BEEN CREATED, CREATE THE DIRECTORY + */ + elseif ($row['type'] == '5') + { + $cronlog->logAction(CRON_ACTION, LOG_INFO, 'Creating new FTP-home'); + $result_directories = $db->query('SELECT `f`.`homedir`, `f`.`uid`, `f`.`gid`, `c`.`documentroot` AS `customerroot` FROM `' . TABLE_FTP_USERS . '` `f` LEFT JOIN `' . TABLE_PANEL_CUSTOMERS . '` `c` USING (`customerid`) '); + + while($directory = $db->fetch_array($result_directories)) + { + mkDirWithCorrectOwnership($directory['customerroot'], $directory['homedir'], $directory['uid'], $directory['gid']); + } + } +} + +if($db->num_rows($result_tasks) != 0) +{ + $where = array(); + foreach($resultIDs as $id) + { + $where[] = '`id`=\'' . (int)$id . '\''; + } + + $where = implode($where, ' OR '); + $db->query('DELETE FROM `' . TABLE_PANEL_TASKS . '` WHERE ' . $where); + unset($resultIDs); + unset($where); +} + +$db->query('UPDATE `' . TABLE_PANEL_SETTINGS . '` SET `value` = UNIX_TIMESTAMP() WHERE `settinggroup` = \'system\' AND `varname` = \'last_tasks_run\' '); + +/** + * STARTING CRONSCRIPT FOOTER + */ + +include ($pathtophpfiles . '/lib/cron_shutdown.php'); + +/** + * END CRONSCRIPT FOOTER + */ + +?> diff --git a/scripts/cron_ticketarchive.php b/scripts/cron_ticketarchive.php new file mode 100644 index 0000000000..9b94d127be --- /dev/null +++ b/scripts/cron_ticketarchive.php @@ -0,0 +1,80 @@ + + * @license http://www.gnu.org/licenses/gpl.txt + * @package Panel + * @version CVS: $Id: cron_ticketarchive.php 2724 2009-06-07 14:18:02Z flo $ + * @link http://www.nutime.de/ + * @since File available since Release 1.2.18 + */ + +/** + * STARTING REDUNDANT CODE, WHICH IS SOME KINDA HEADER FOR EVERY CRON SCRIPT. + * When using this "header" you have to change $lockFilename for your needs. + * Don't forget to also copy the footer which closes database connections + * and the lockfile! (Note: This "header" also establishes a mysql-root- + * connection, if you don't need it, see for the header in cron_tasks.php) + */ + +$needrootdb = false; +include (dirname(__FILE__) . '/../lib/cron_init.php'); + +/** + * END REDUNDANT CODE (CRONSCRIPT "HEADER") + */ + +/** + * ARCHIVING CLOSED TICKETS + */ + +fwrite($debugHandler, 'Ticket-archiving run started...' . "\n"); +$result_tickets = $db->query("SELECT `id`, `lastchange`, `subject` FROM `" . TABLE_PANEL_TICKETS . "` + WHERE `status` = '3' AND `answerto` = '0';"); +$archiving_count = 0; + +while($row_ticket = $db->fetch_array($result_tickets)) +{ + $lastchange = $row_ticket['lastchange']; + $now = time(); + $days = (int)(($now - $lastchange) / 86400); + + if($days >= $settings['ticket']['archiving_days']) + { + fwrite($debugHandler, 'archiving ticket "' . $row_ticket['subject'] . '" (ID #' . $row_ticket['id'] . ')' . "\n"); + $mainticket = ticket::getInstanceOf($userinfo, $db, $settings, (int)$row_ticket['id']); + $mainticket->Set('lastchange', $now, true, true); + $mainticket->Set('lastreplier', '1', true, true); + $mainticket->Set('status', '3', true, true); + $mainticket->Update(); + $mainticket->Archive(); + $archiving_count++; + } +} + +fwrite($debugHandler, 'Archived ' . $archiving_count . ' tickets' . "\n"); +$db->query('UPDATE `' . TABLE_PANEL_SETTINGS . '` SET `value` = UNIX_TIMESTAMP() WHERE `settinggroup` = \'system\' AND `varname` = \'last_archive_run\' '); + +/** + * STARTING CRONSCRIPT FOOTER + */ + +include ($pathtophpfiles . '/lib/cron_shutdown.php'); + +/** + * END CRONSCRIPT FOOTER + */ + +?> \ No newline at end of file diff --git a/scripts/cron_traffic.inc.functions.php b/scripts/cron_traffic.inc.functions.php new file mode 100644 index 0000000000..e53805725d --- /dev/null +++ b/scripts/cron_traffic.inc.functions.php @@ -0,0 +1,231 @@ + + * @author Florian Aders + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package System + * @version $Id: cron_traffic.inc.functions.php 2692 2009-03-27 18:04:47Z flo $ + */ + +/** + * Function which make webalizer statistics and returns used traffic since last run + * + * @param string Name of logfile + * @param string Place where stats should be build + * @param string Caption for webalizer output + * @return int Used traffic + * @author Florian Lippert + */ + +function callWebalizerGetTraffic($logfile, $outputdir, $caption, $usersdomainlist) +{ + global $settings; + $returnval = 0; + + if(file_exists($settings['system']['logfiles_directory'] . $logfile . '-access.log')) + { + $domainargs = ''; + foreach($usersdomainlist as $domainid => $domain) + { + $domainargs.= ' -r ' . escapeshellarg($domain); + } + + $outputdir = makeCorrectDir($outputdir); + + if(!file_exists($outputdir)) + { + safe_exec('mkdir -p ' . escapeshellarg($outputdir)); + } + + if(file_exists($outputdir . 'webalizer.hist.1')) + { + unlink($outputdir . 'webalizer.hist.1'); + } + + if(file_exists($outputdir . 'webalizer.hist') + && !file_exists($outputdir . 'webalizer.hist.1')) + { + safe_exec('cp ' . escapeshellarg($outputdir . 'webalizer.hist') . ' ' . escapeshellarg($outputdir . 'webalizer.hist.1')); + } + + $verbosity = ''; + + if($settings['system']['webalizer_quiet'] == '1') + { + $verbosity = '-q'; + } + elseif($settings['system']['webalizer_quiet'] == '2') + { + $verbosity = '-Q'; + } + + safe_exec('webalizer ' . $verbosity . ' -p -o ' . escapeshellarg($outputdir) . ' -n ' . escapeshellarg($caption) . $domainargs . ' ' . escapeshellarg($settings['system']['logfiles_directory'] . $logfile . '-access.log')); + + /** + * Format of webalizer.hist-files: + * Month: $webalizer_hist_row['0'] + * Year: $webalizer_hist_row['1'] + * KB: $webalizer_hist_row['5'] + */ + + $httptraffic = array(); + $webalizer_hist = @file_get_contents($outputdir . 'webalizer.hist'); + $webalizer_hist_rows = explode("\n", $webalizer_hist); + foreach($webalizer_hist_rows as $webalizer_hist_row) + { + if($webalizer_hist_row != '') + { + $webalizer_hist_row = explode(' ', $webalizer_hist_row); + + if(isset($webalizer_hist_row['0']) + && isset($webalizer_hist_row['1']) + && isset($webalizer_hist_row['5'])) + { + $month = intval($webalizer_hist_row['0']); + $year = intval($webalizer_hist_row['1']); + $traffic = floatval($webalizer_hist_row['5']); + + if(!isset($httptraffic[$year])) + { + $httptraffic[$year] = array(); + } + + $httptraffic[$year][$month] = $traffic; + } + } + } + + reset($httptraffic); + $httptrafficlast = array(); + $webalizer_lasthist = @file_get_contents($outputdir . 'webalizer.hist.1'); + $webalizer_lasthist_rows = explode("\n", $webalizer_lasthist); + foreach($webalizer_lasthist_rows as $webalizer_lasthist_row) + { + if($webalizer_lasthist_row != '') + { + $webalizer_lasthist_row = explode(' ', $webalizer_lasthist_row); + + if(isset($webalizer_lasthist_row['0']) + && isset($webalizer_lasthist_row['1']) + && isset($webalizer_lasthist_row['5'])) + { + $month = intval($webalizer_lasthist_row['0']); + $year = intval($webalizer_lasthist_row['1']); + $traffic = floatval($webalizer_lasthist_row['5']); + + if(!isset($httptrafficlast[$year])) + { + $httptrafficlast[$year] = array(); + } + + $httptrafficlast[$year][$month] = $traffic; + } + } + } + + reset($httptrafficlast); + foreach($httptraffic as $year => $months) + { + foreach($months as $month => $traffic) + { + if(!isset($httptrafficlast[$year][$month])) + { + $returnval+= $traffic; + } + elseif($httptrafficlast[$year][$month] < $httptraffic[$year][$month]) + { + $returnval+= ($httptraffic[$year][$month] - $httptrafficlast[$year][$month]); + } + } + } + } + + return floatval($returnval); +} + +/** + * This function saves the logfile written by mod_log_sql + * into a logfile webalizer can parse + * + * @param string $domain The "speciallogfile" - domain(s) + * @param string $loginname The loginname of the customer + * @return bool + * + * @author Florian Aders + */ + +function safeSQLLogfile($domains, $loginname) +{ + global $db, $settings; + $sql = "SELECT * FROM access_log "; + $where = "WHERE virtual_host = "; + + if(!is_array($domains)) + { + // If it isn't an array, it's a speciallogfile-domain + + $logname = $settings['system']['logfiles_directory'] . $loginname . '-' . $domains . '-access.log'; + $where.= "'$domains' OR virtual_host = 'www.$domains'"; + } + else + { + // If we have an array, these are all domains aggregated into a single logfile + + if(count($domains) == 0) + { + // If the $omains-array is empty, this customer has only speciallogfile- + // domains, so just return, all logfiles are already written to disk + + return true; + } + + $logname = $settings['system']['logfiles_directory'] . $loginname . '-access.log'; + + // Build the "WHERE" - part of the sql-query + + foreach($domains as $domain) + { + // A domain may be reached with or without the "www" in front. + + $where.= "'$domain' OR virtual_host = 'www.$domain' OR virtual_host = "; + } + + $where = substr($where, 0, -19); + } + + // We want clean, ordered logfiles + + $sql.= $where . " ORDER BY time_stamp;"; + $logs = $db->query($sql); + + // Don't overwrite the logfile - append the new stuff + + file_put_contents($logname, "", FILE_APPEND); + + while($logline = $db->fetch_array($logs)) + { + // Create a "CustomLog" - line + + $writelog = $logline['remote_host'] . " " . $logline['virtual_host'] . " " . $logline['remote_user'] . " "; + $writelog.= date("[d/M/Y:H:i:s O]", $logline['time_stamp']); + $writelog.= " \"" . $logline['request_method'] . " " . $logline['request_uri'] . " " . $logline['request_protocol'] . "\" "; + $writelog.= $logline['status']; + $writelog.= " " . $logline['bytes_sent'] . " \"" . $logline['referer'] . "\" \"" . $logline['agent'] . "\"\n"; + file_put_contents($logname, $writelog, FILE_APPEND); + } + + // Remove the just written stuff + + $db->query("DELETE FROM access_log " . $where); + return true; +} + diff --git a/scripts/cron_traffic.php b/scripts/cron_traffic.php new file mode 100644 index 0000000000..a162c3f65f --- /dev/null +++ b/scripts/cron_traffic.php @@ -0,0 +1,400 @@ + + * @author Martin Burchert + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package System + * @version $Id: cron_traffic.php 2739 2009-11-06 14:46:30Z flo $ + */ + +/** + * STARTING REDUNDANT CODE, WHICH IS SOME KINDA HEADER FOR EVERY CRON SCRIPT. + * When using this "header" you have to change $lockFilename for your needs. + * Don't forget to also copy the footer which closes database connections + * and the lockfile! (Note: This "header" also establishes a mysql-root- + * connection, if you don't need it, see for the header in cron_tasks.php) + */ + +$needrootdb = true; +include (dirname(__FILE__) . '/../lib/cron_init.php'); + +/** + * END REDUNDANT CODE (CRONSCRIPT "HEADER") + */ + +/** + * TRAFFIC AND DISKUSAGE MESSURE + */ + +fwrite($debugHandler, 'Traffic run started...' . "\n"); +$admin_traffic = array(); +$domainlist = array(); +$speciallogfile_domainlist = array(); +$result_domainlist = $db->query("SELECT `id`, `domain`, `customerid`, `parentdomainid`, `speciallogfile` FROM `" . TABLE_PANEL_DOMAINS . "` ;"); + +while($row_domainlist = $db->fetch_array($result_domainlist)) +{ + if(!isset($domainlist[$row_domainlist['customerid']])) + { + $domainlist[$row_domainlist['customerid']] = array(); + } + + $domainlist[$row_domainlist['customerid']][$row_domainlist['id']] = $row_domainlist['domain']; + + if($row_domainlist['parentdomainid'] == '0' + && $row_domainlist['speciallogfile'] == '1') + { + if(!isset($speciallogfile_domainlist[$row_domainlist['customerid']])) + { + $speciallogfile_domainlist[$row_domainlist['customerid']] = array(); + } + + $speciallogfile_domainlist[$row_domainlist['customerid']][$row_domainlist['id']] = $row_domainlist['domain']; + } +} + +$mysqlusage_all = array(); +$databases = $db->query("SELECT * FROM " . TABLE_PANEL_DATABASES . " ORDER BY `dbserver`"); +$db_root = new db($sql_root[0]['host'], $sql_root[0]['user'], $sql_root[0]['password'], ''); +unset($db_root->password); +$last_dbserver = 0; + +$databases_list = array(); +$databases_list_result = $db_root->query("show databases"); +while($databases_list_row = $db->fetch_array($databases_list_result)) +{ + $databases_list[] = strtolower($databases_list_row['Database']); +} + +while($row_database = $db->fetch_array($databases)) +{ + if($last_dbserver != $row_database['dbserver']) + { + $db_root->close(); + $db_root = new db($sql_root[$row_database['dbserver']]['host'], $sql_root[$row_database['dbserver']]['user'], $sql_root[$row_database['dbserver']]['password'], ''); + unset($db_root->password); + $last_dbserver = $row_database['dbserver']; + + $database_list = array(); + $databases_list_result = $db_root->query("show databases"); + while($databases_list_row = $db->fetch_array($databases_list_result)) + { + $databases_list[] = strtolower($databases_list_row['Database']); + } + } + + if(in_array(strtolower($row_database['databasename']), $databases_list)) + { + $mysql_usage_result = $db_root->query("SHOW TABLE STATUS FROM `" . $db_root->escape($row_database['databasename']) . "`"); + + while($mysql_usage_row = $db_root->fetch_array($mysql_usage_result)) + { + if(!isset($mysqlusage_all[$row_database['customerid']])) + { + $mysqlusage_all[$row_database['customerid']] = 0; + } + $mysqlusage_all[$row_database['customerid']] += floatval($mysql_usage_row['Data_length'] + $mysql_usage_row['Index_length']); + } + } + else + { + echo "Seems like the database " . $row_database['databasename'] . " had been removed manually.\n"; + } +} + +$db_root->close(); + + +$result = $db->query("SELECT * FROM `" . TABLE_PANEL_CUSTOMERS . "` ORDER BY `customerid` ASC"); + +while($row = $db->fetch_array($result)) +{ + /** + * HTTP-Traffic + */ + + fwrite($debugHandler, 'http traffic for ' . $row['loginname'] . ' started...' . "\n"); + $httptraffic = 0; + + if(isset($domainlist[$row['customerid']]) + && is_array($domainlist[$row['customerid']]) + && count($domainlist[$row['customerid']]) != 0) + { + // Examining which caption to use for default webalizer stats... + + if($row['standardsubdomain'] != '0') + { + // ... of course we'd prefer to use the standardsubdomain ... + + $caption = $domainlist[$row['customerid']][$row['standardsubdomain']]; + } + else + { + // ... but if there is no standardsubdomain, we have to use the loginname ... + + $caption = $row['loginname']; + + // ... which results in non-usable links to files in the stats, so lets have a look if we find a domain which is not speciallogfiledomain + + foreach($domainlist[$row['customerid']] as $domainid => $domain) + { + if(!isset($speciallogfile_domainlist[$row['customerid']]) + || !isset($speciallogfile_domainlist[$row['customerid']][$domainid])) + { + $caption = $domain; + break; + } + } + } + + $httptraffic = 0; + reset($domainlist[$row['customerid']]); + + if(isset($speciallogfile_domainlist[$row['customerid']]) + && is_array($speciallogfile_domainlist[$row['customerid']]) + && count($speciallogfile_domainlist[$row['customerid']]) != 0) + { + reset($speciallogfile_domainlist[$row['customerid']]); + foreach($speciallogfile_domainlist[$row['customerid']] as $domainid => $domain) + { + if($settings['system']['mod_log_sql'] == 1) + { + safeSQLLogfile($domain, $row['loginname']); + + // Remove this domain from the domainlist - it's already analysed + // and doesn't need to be selected twice + + unset($domainlist[$row['customerid']][$domainid]); + } + + $httptraffic+= floatval(callWebalizerGetTraffic($row['loginname'] . '-' . $domain, $row['documentroot'] . '/webalizer/' . $domain . '/', $domain, $domainlist[$row['customerid']])); + } + } + + reset($domainlist[$row['customerid']]); + + if($settings['system']['mod_log_sql'] == 1) + { + safeSQLLogfile($domainlist[$row['customerid']], $row['loginname']); + } + + $httptraffic+= floatval(callWebalizerGetTraffic($row['loginname'], $row['documentroot'] . '/webalizer/', $caption, $domainlist[$row['customerid']])); + } + + /** + * Webalizer might run for some time, so we'd better check if our database is still present + */ + + if(empty($db->link_id) + || $db->link_id === false) + { + fwrite($debugHandler, 'Database-connection seems to be down, trying to reconnect' . "\n"); + + // just in case + + $db->close(); + require_once ($pathtophpfiles . '/lib/userdata.inc.php'); + $db = new db($sql['host'], $sql['user'], $sql['password'], $sql['db']); + + if($db->link_id == 0) + { + fclose($debugHandler); + unlink($lockfile); + $cronlog->logAction(CRON_ACTION, LOG_ERR, 'Database-connection crashed during traffic-cronjob, could not reconnect!'); + die('SysCP can\'t connect to mysqlserver. Exiting...'); + } + + fwrite($debugHandler, 'Database-connection re-established' . "\n"); + unset($sql); + unset($db->password); + $cronlog->logAction(CRON_ACTION, LOG_WARNING, 'Database-connection crashed during traffic-cronjob, reconnected!'); + } + + /** + * FTP-Traffic + */ + + fwrite($debugHandler, 'ftp traffic for ' . $row['loginname'] . ' started...' . "\n"); + $ftptraffic = $db->query_first("SELECT SUM(`up_bytes`) AS `up_bytes_sum`, SUM(`down_bytes`) AS `down_bytes_sum` FROM `" . TABLE_FTP_USERS . "` WHERE `customerid`='" . (int)$row['customerid'] . "'"); + + if(!is_array($ftptraffic)) + { + $ftptraffic = array( + 'up_bytes_sum' => 0, + 'down_bytes_sum' => 0 + ); + } + + $db->query("UPDATE `" . TABLE_FTP_USERS . "` SET `up_bytes`='0', `down_bytes`='0' WHERE `customerid`='" . (int)$row['customerid'] . "'"); + + /** + * Mail-Traffic + */ + + $mailtraffic = 0; + + /** + * Total Traffic + */ + + fwrite($debugHandler, 'total traffic for ' . $row['loginname'] . ' started' . "\n"); + $current_traffic = array(); + $current_traffic['http'] = floatval($httptraffic); + $current_traffic['ftp_up'] = floatval(($ftptraffic['up_bytes_sum'] / 1024)); + $current_traffic['ftp_down'] = floatval(($ftptraffic['down_bytes_sum'] / 1024)); + $current_traffic['mail'] = floatval($mailtraffic); + $current_traffic['all'] = $current_traffic['http'] + $current_traffic['ftp_up'] + $current_traffic['ftp_down'] + $current_traffic['mail']; + $db->query("INSERT INTO `" . TABLE_PANEL_TRAFFIC . "` (`customerid`, `year`, `month`, `day`, `stamp`, `http`, `ftp_up`, `ftp_down`, `mail`) VALUES('" . (int)$row['customerid'] . "', '" . date('Y') . "', '" . date('m') . "', '" . date('d') . "', '" . time() . "', '" . (float)$current_traffic['http'] . "', '" . (float)$current_traffic['ftp_up'] . "', '" . (float)$current_traffic['ftp_down'] . "', '" . (float)$current_traffic['mail'] . "')"); + $sum_month_traffic = $db->query_first("SELECT SUM(`http`) AS `http`, SUM(`ftp_up`) AS `ftp_up`, SUM(`ftp_down`) AS `ftp_down`, SUM(`mail`) AS `mail` FROM `" . TABLE_PANEL_TRAFFIC . "` WHERE `year`='" . date('Y') . "' AND `month`='" . date('m') . "' AND `customerid`='" . (int)$row['customerid'] . "'"); + $sum_month_traffic['all'] = $sum_month_traffic['http'] + $sum_month_traffic['ftp_up'] + $sum_month_traffic['ftp_down'] + $sum_month_traffic['mail']; + + if(!isset($admin_traffic[$row['adminid']]) + || !is_array($admin_traffic[$row['adminid']])) + { + $admin_traffic[$row['adminid']]['http'] = 0; + $admin_traffic[$row['adminid']]['ftp_up'] = 0; + $admin_traffic[$row['adminid']]['ftp_down'] = 0; + $admin_traffic[$row['adminid']]['mail'] = 0; + $admin_traffic[$row['adminid']]['all'] = 0; + $admin_traffic[$row['adminid']]['sum_month'] = 0; + } + + $admin_traffic[$row['adminid']]['http']+= $current_traffic['http']; + $admin_traffic[$row['adminid']]['ftp_up']+= $current_traffic['ftp_up']; + $admin_traffic[$row['adminid']]['ftp_down']+= $current_traffic['ftp_down']; + $admin_traffic[$row['adminid']]['mail']+= $current_traffic['mail']; + $admin_traffic[$row['adminid']]['all']+= $current_traffic['all']; + $admin_traffic[$row['adminid']]['sum_month']+= $sum_month_traffic['all']; + + /** + * WebSpace-Usage + */ + + fwrite($debugHandler, 'calculating webspace usage for ' . $row['loginname'] . "\n"); + $webspaceusage = 0; + + if(file_exists($row['documentroot']) && is_dir($row['documentroot'])) + { + $back = safe_exec('du -s ' . escapeshellarg($row['documentroot']) . ''); + foreach($back as $backrow) + { + $webspaceusage = explode(' ', $backrow); + } + + $webspaceusage = floatval($webspaceusage['0']); + unset($back); + } + else + { + fwrite($debugHandler, 'documentroot ' . $row['documentroot'] . ' does not exist' . "\n"); + } + + /** + * MailSpace-Usage + */ + + fwrite($debugHandler, 'calculating mailspace usage for ' . $row['loginname'] . "\n"); + $emailusage = 0; + + $maildir = makeCorrectDir($settings['system']['vmail_homedir'] . $row['loginname']); + if(file_exists($maildir) && is_dir($maildir)) + { + $back = safe_exec('du -s ' . escapeshellarg($maildir) . ''); + foreach($back as $backrow) + { + $emailusage = explode(' ', $backrow); + } + + $emailusage = floatval($emailusage['0']); + unset($back); + } + else + { + fwrite($debugHandler, 'maildir ' . $maildir . ' does not exist' . "\n"); + } + + /** + * MySQLSpace-Usage + */ + + fwrite($debugHandler, 'calculating mysqlspace usage for ' . $row['loginname'] . "\n"); + $mysqlusage = 0; + + if(isset($mysqlusage_all[$row['customerid']])) + { + $mysqlusage = floatval($mysqlusage_all[$row['customerid']] / 1024); + } + + $current_diskspace = array(); + $current_diskspace['webspace'] = floatval($webspaceusage); + $current_diskspace['mail'] = floatval($emailusage); + $current_diskspace['mysql'] = floatval($mysqlusage); + $current_diskspace['all'] = $current_diskspace['webspace'] + $current_diskspace['mail'] + $current_diskspace['mysql']; + $db->query("INSERT INTO `" . TABLE_PANEL_DISKSPACE . "` (`customerid`, `year`, `month`, `day`, `stamp`, `webspace`, `mail`, `mysql`) VALUES('" . (int)$row['customerid'] . "', '" . date('Y') . "', '" . date('m') . "', '" . date('d') . "', '" . time() . "', '" . (float)$current_diskspace['webspace'] . "', '" . (float)$current_diskspace['mail'] . "', '" . (float)$current_diskspace['mysql'] . "')"); + + if(!isset($admin_diskspace[$row['adminid']]) + || !is_array($admin_diskspace[$row['adminid']])) + { + $admin_diskspace[$row['adminid']] = array(); + $admin_diskspace[$row['adminid']]['webspace'] = 0; + $admin_diskspace[$row['adminid']]['mail'] = 0; + $admin_diskspace[$row['adminid']]['mysql'] = 0; + $admin_diskspace[$row['adminid']]['all'] = 0; + } + + $admin_diskspace[$row['adminid']]['webspace']+= $current_diskspace['webspace']; + $admin_diskspace[$row['adminid']]['mail']+= $current_diskspace['mail']; + $admin_diskspace[$row['adminid']]['mysql']+= $current_diskspace['mysql']; + $admin_diskspace[$row['adminid']]['all']+= $current_diskspace['all']; + + /** + * Total Usage + */ + + $diskusage = floatval($webspaceusage + $emailusage + $mysqlusage); + $db->query("UPDATE `" . TABLE_PANEL_CUSTOMERS . "` SET `diskspace_used`='" . (float)$current_diskspace['all'] . "', `traffic_used`='" . (float)$sum_month_traffic['all'] . "' WHERE `customerid`='" . (int)$row['customerid'] . "'"); +} + +/** + * Admin Usage + */ + +$result = $db->query("SELECT `adminid` FROM `" . TABLE_PANEL_ADMINS . "` ORDER BY `adminid` ASC"); + +while($row = $db->fetch_array($result)) +{ + if(isset($admin_traffic[$row['adminid']])) + { + $db->query("INSERT INTO `" . TABLE_PANEL_TRAFFIC_ADMINS . "` (`adminid`, `year`, `month`, `day`, `stamp`, `http`, `ftp_up`, `ftp_down`, `mail`) VALUES('" . (int)$row['adminid'] . "', '" . date('Y') . "', '" . date('m') . "', '" . date('d') . "', '" . time() . "', '" . (float)$admin_traffic[$row['adminid']]['http'] . "', '" . (float)$admin_traffic[$row['adminid']]['ftp_up'] . "', '" . (float)$admin_traffic[$row['adminid']]['ftp_down'] . "', '" . (float)$admin_traffic[$row['adminid']]['mail'] . "')"); + $db->query("UPDATE `" . TABLE_PANEL_ADMINS . "` SET `traffic_used`='" . (float)$admin_traffic[$row['adminid']]['sum_month'] . "' WHERE `adminid`='" . (float)$row['adminid'] . "'"); + } + + if(isset($admin_diskspace[$row['adminid']])) + { + $db->query("INSERT INTO `" . TABLE_PANEL_DISKSPACE_ADMINS . "` (`adminid`, `year`, `month`, `day`, `stamp`, `webspace`, `mail`, `mysql`) VALUES('" . (int)$row['adminid'] . "', '" . date('Y') . "', '" . date('m') . "', '" . date('d') . "', '" . time() . "', '" . (float)$admin_diskspace[$row['adminid']]['webspace'] . "', '" . (float)$admin_diskspace[$row['adminid']]['mail'] . "', '" . (float)$admin_diskspace[$row['adminid']]['mysql'] . "')"); + $db->query("UPDATE `" . TABLE_PANEL_ADMINS . "` SET `diskspace_used`='" . (float)$admin_diskspace[$row['adminid']]['all'] . "' WHERE `adminid`='" . (float)$row['adminid'] . "'"); + } +} + +$db->query('UPDATE `' . TABLE_PANEL_SETTINGS . '` SET `value` = UNIX_TIMESTAMP() WHERE `settinggroup` = \'system\' AND `varname` = \'last_traffic_run\' '); + +/** + * STARTING CRONSCRIPT FOOTER + */ + +include ($pathtophpfiles . '/lib/cron_shutdown.php'); + +/** + * END CRONSCRIPT FOOTER + */ + +?> diff --git a/scripts/cron_traffic_report.php b/scripts/cron_traffic_report.php new file mode 100644 index 0000000000..365c6ccd64 --- /dev/null +++ b/scripts/cron_traffic_report.php @@ -0,0 +1,240 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package System + * @version $Id: cron_traffic_report.php 2692 2009-03-27 18:04:47Z flo $ + */ + +/** + * STARTING REDUNDANT CODE, WHICH IS SOME KINDA HEADER FOR EVERY CRON SCRIPT. + * When using this "header" you have to change $lockFilename for your needs. + * Don't forget to also copy the footer which closes database connections + * and the lockfile! + */ + +include (dirname(__FILE__) . '/../lib/cron_init.php'); + +/** + * END REDUNDANT CODE (CRONSCRIPT "HEADER") + */ + +fwrite($debugHandler, 'Trafficreport run started...' . "\n"); +$yesterday = time() - (60 * 60 * 24); + +/** + * Initialize the mailingsystem + */ + +require (dirname(__FILE__) . '/../lib/class.phpmailer.php'); +$mail = new PHPMailer(); +$mail->From = $settings['panel']['adminmail']; + +// Warn the customers at 90% traffic-usage + +$result = $db->query("SELECT `c`.`customerid`, `c`.`adminid`, `c`.`name`, `c`.`firstname`, `c`.`traffic`, + `c`.`email`, `c`.`def_language`, `a`.`name` AS `adminname`, `a`.`email` AS `adminmail`, + (SELECT SUM(`t`.`http` + `t`.`ftp_up` + `t`.`ftp_down` + `t`.`mail`) + FROM `" . TABLE_PANEL_TRAFFIC . "` `t` + WHERE `t`.`customerid` = `c`.`customerid` AND `t`.`year` = '" . (int)date("Y", $yesterday) . "' + AND `t`.`month` = '" . date("m", $yesterday) . "') as `traffic_used` + FROM `" . TABLE_PANEL_CUSTOMERS . "` AS `c` + LEFT JOIN `" . TABLE_PANEL_ADMINS . "` AS `a` ON `a`.`adminid` = `c`.`adminid` + WHERE `c`.`reportsent` = '0'"); + +while($row = $db->fetch_array($result)) +{ + if(isset($row['traffic']) + && $row['traffic'] > 0 + && $row['traffic_used'] != NULL + && (($row['traffic_used'] * 100) / $row['traffic']) >= 90) + { + $replace_arr = array( + 'NAME' => $row['name'], + 'TRAFFIC' => $row['traffic'], + 'TRAFFICUSED' => $row['traffic_used'] + ); + $lngfile = $db->query_first("SELECT `file` FROM `" . TABLE_PANEL_LANGUAGE . "` + WHERE `language` ='" . $row['def_language'] . "'"); + + if($lngfile !== NULL) + { + $langfile = $lngfile['file']; + } + else + { + $lngfile = $db->query_first("SELECT `file` FROM `" . TABLE_PANEL_LANGUAGE . "` + WHERE `language` ='" . $settings['panel']['standardlanguage'] . "'"); + $langfile = $lngfile['file']; + } + + include_once makeCorrectFile($pathtophpfiles . '/' . $langfile); + + // Get mail templates from database; the ones from 'admin' are fetched for fallback + + $result2 = $db->query_first("SELECT `value` FROM `" . TABLE_PANEL_TEMPLATES . "` + WHERE `adminid`='" . (int)$row['adminid'] . "' + AND `language`='" . $db->escape($row['def_language']) . "' + AND `templategroup`='mails' + AND `varname`='trafficninetypercent_subject'"); + $mail_subject = html_entity_decode(replace_variables((($result2['value'] != '') ? $result2['value'] : $lng['mails']['trafficninetypercent']['subject']), $replace_arr)); + $result2 = $db->query_first("SELECT `value` FROM `" . TABLE_PANEL_TEMPLATES . "` + WHERE `adminid`='" . (int)$row['adminid'] . "' + AND `language`='" . $db->escape($row['def_language']) . "' + AND `templategroup`='mails' + AND `varname`='trafficninetypercent_mailbody'"); + $mail_body = html_entity_decode(replace_variables((($result2['value'] != '') ? $result2['value'] : $lng['mails']['trafficninetypercent']['mailbody']), $replace_arr)); + $mail->From = $row['adminmail']; + $mail->FromName = $row['adminname']; + $mail->Subject = $mail_subject; + $mail->Body = $mail_body; + $mail->AddAddress($row['email'], $row['firstname'] . ' ' . $row['name']); + + if(!$mail->Send()) + { + $cronlog->logAction(CRON_ACTION, LOG_ERR, "Error sending mail: " . $mail->ErrorInfo); + standard_error('errorsendingmail', $row["email"]); + } + + $mail->ClearAddresses(); + $db->query('UPDATE `' . TABLE_PANEL_CUSTOMERS . '` SET `reportsent`=\'1\' + WHERE `customerid`=\'' . (int)$row['customerid'] . '\''); + } +} + +// Warn the admins at 90% traffic-usage + +$result = $db->query("SELECT `a`.*, + (SELECT SUM(`t`.`http` + `t`.`ftp_up` + `t`.`ftp_down` + `t`.`mail`) + FROM `" . TABLE_PANEL_TRAFFIC_ADMINS . "` `t` + WHERE `t`.`adminid` = `a`.`adminid` AND `t`.`year` = '" . (int)date("Y", $yesterday) . "' + AND `t`.`month` = '" . date("m", $yesterday) . "') as `traffic_used_total` + FROM `" . TABLE_PANEL_ADMINS . "` `a` WHERE `a`.`reportsent` = '0'"); + +while($row = $db->fetch_array($result)) +{ + if(isset($row['traffic']) + && $row['traffic'] > 0 + && (($row['traffic_used_total'] * 100) / $row['traffic']) >= 90) + { + $replace_arr = array( + 'NAME' => $row['name'], + 'TRAFFIC' => $row['traffic'], + 'TRAFFICUSED' => $row['traffic_used_total'] + ); + $lngfile = $db->query_first("SELECT `file` FROM `" . TABLE_PANEL_LANGUAGE . "` + WHERE `language` ='" . $row['def_language'] . "'"); + + if($lngfile !== NULL) + { + $langfile = $lngfile['file']; + } + else + { + $lngfile = $db->query_first("SELECT `file` FROM `" . TABLE_PANEL_LANGUAGE . "` + WHERE `language` ='" . $settings['panel']['standardlanguage'] . "'"); + $langfile = $lngfile['file']; + } + + include_once makeCorrectFile($pathtophpfiles . '/' . $langfile); + + // Get mail templates from database; the ones from 'admin' are fetched for fallback + + $result2 = $db->query_first("SELECT `value` FROM `" . TABLE_PANEL_TEMPLATES . "` + WHERE `adminid`='" . (int)$row['adminid'] . "' + AND `language`='" . $db->escape($row['def_language']) . "' + AND `templategroup`='mails' + AND `varname`='trafficninetypercent_subject'"); + $mail_subject = html_entity_decode(replace_variables((($result2['value'] != '') ? $result2['value'] : $lng['mails']['trafficninetypercent']['subject']), $replace_arr)); + $result2 = $db->query_first("SELECT `value` FROM `" . TABLE_PANEL_TEMPLATES . "` + WHERE `adminid`='" . (int)$row['adminid'] . "' + AND `language`='" . $db->escape($row['def_language']) . "' + AND `templategroup`='mails' + AND `varname`='trafficninetypercent_mailbody'"); + $mail_body = html_entity_decode(replace_variables((($result2['value'] != '') ? $result2['value'] : $lng['mails']['trafficninetypercent']['mailbody']), $replace_arr)); + $mail->From = $row['email']; + $mail->FromName = $row['firstname'] . " " . $row['name']; + $mail->Subject = $mail_subject; + $mail->Body = $mail_body; + $mail->AddAddress($row['email'], $row['name']); + + if(!$mail->Send()) + { + $cronlog->logAction(CRON_ACTION, LOG_ERR, "Error sending mail: " . $mail->ErrorInfo); + standard_error('errorsendingmail', $row["email"]); + } + + $mail->ClearAddresses(); + $db->query("UPDATE `" . TABLE_PANEL_ADMINS . "` SET `reportsent`='1' + WHERE `customerid`='" . (int)$row['adminid'] . "'"); + } + + // Another month, let's build our report + + if(date('d') == '01') + { + $mail_subject = 'Trafficreport ' . date("m/y", $yesterday) . ' for ' . $row['name']; + $mail_body = 'Trafficreport ' . date("m/y", $yesterday) . ' for ' . $row['name'] . "\n"; + $mail_body.= '---------------------------------------------' . "\n"; + $mail_body.= 'Loginname Traffic used (Percent) | Traffic available' . "\n"; + $customers = $db->query("SELECT `c`.*, + (SELECT SUM(`t`.`http` + `t`.`ftp_up` + `t`.`ftp_down` + `t`.`mail`) + FROM `" . TABLE_PANEL_TRAFFIC . "` `t` + WHERE `t`.`customerid` = `c`.`customerid` AND `t`.`year` = '" . (int)date("Y", $yesterday) . "' + AND `t`.`month` = '" . date("m", $yesterday) . "') as `traffic_used_total` + FROM `" . TABLE_PANEL_CUSTOMERS . "` `c` WHERE `c`.`adminid` = '" . $row['adminid'] . "'"); + + while($customer = $db->fetch_array($customers)) + { + $mail_body.= sprintf('%-15s', $customer['loginname']) . ' ' . sprintf('%-12d', $customer['traffic_used_total']) . ' (' . sprintf('%00.3f%%', (($customer['traffic_used_total'] * 100) / $customer['traffic'])) . ') ' . $customer['traffic'] . "\n"; + } + + $mail_body.= '---------------------------------------------' . "\n"; + $mail_body.= sprintf('%-15s', $row['loginname']) . ' ' . sprintf('%-12d', $row['traffic_used_total']) . ' (' . sprintf('%00.3f%%', (($row['traffic_used_total'] * 100) / $row['traffic'])) . ') ' . $row['traffic'] . "\n"; + $mail->From = $row['email']; + $mail->FromName = $row['name']; + $mail->Subject = $mail_subject; + $mail->Body = $mail_body; + $mail->AddAddress($row['email'], $row['name']); + + if(!$mail->Send()) + { + $cronlog->logAction(CRON_ACTION, LOG_ERR, "Error sending mail: " . $mail->ErrorInfo); + standard_error('errorsendingmail', $row["email"]); + } + + $mail->ClearAddresses(); + } +} + +// Another month, reset the reportstatus + +if(date('d') == '01') +{ + $db->query('UPDATE `' . TABLE_PANEL_CUSTOMERS . '` SET `reportsent` = \'0\';'); + $db->query('UPDATE `' . TABLE_PANEL_ADMINS . '` SET `reportsent` = \'0\';'); +} + +$db->query('UPDATE `' . TABLE_PANEL_SETTINGS . '` SET `value` = UNIX_TIMESTAMP() + WHERE `settinggroup` = \'system\' AND `varname` = \'last_traffic_report_run\' '); + +/** + * STARTING CRONSCRIPT FOOTER + */ + +include ($pathtophpfiles . '/lib/cron_shutdown.php'); + +/** + * END CRONSCRIPT FOOTER + */ + +?> diff --git a/scripts/cron_used_tickets_reset.php b/scripts/cron_used_tickets_reset.php new file mode 100644 index 0000000000..f8ae1ff255 --- /dev/null +++ b/scripts/cron_used_tickets_reset.php @@ -0,0 +1,66 @@ + + * @license http://www.gnu.org/licenses/gpl.txt + * @package Panel + * @version CVS: $Id: cron_used_tickets_reset.php 2244 2008-10-06 11:01:18Z EleRas $ + * @link http://www.nutime.de/ + * @since File available since Release 1.2.20 + */ + +/** + * STARTING REDUNDANT CODE, WHICH IS SOME KINDA HEADER FOR EVERY CRON SCRIPT. + * When using this "header" you have to change $lockFilename for your needs. + * Don't forget to also copy the footer which closes database connections + * and the lockfile! (Note: This "header" also establishes a mysql-root- + * connection, if you don't need it, see for the header in cron_tasks.php) + */ + +$needrootdb = false; +include (dirname(__FILE__) . '/../lib/cron_init.php'); + +/** + * END REDUNDANT CODE (CRONSCRIPT "HEADER") + */ + +/** + * RESET USED TICKETS COUNTER + */ + +fwrite($debugHandler, 'Used tickets reset run started...' . "\n"); +$now = time(); +$cycle = $settings['ticket']['reset_cycle']; + +if($cycle == '0' + || ($cycle == '1' && (date("j", $now) == '1' || date("j", $now) == '7' || date("j", $now) == '14' || date("j", $now) == '21')) + || ($cycle == '2' && date("j", $now) == '1') + || ($cycle == '3' && date("dm", $now) == '0101')) +{ + fwrite($debugHandler, 'Resetting customers used ticket counter' . "\n"); + $db->query("UPDATE `" . TABLE_PANEL_CUSTOMERS . "` SET `tickets_used` = '0'"); +} + +/** + * STARTING CRONSCRIPT FOOTER + */ + +include ($pathtophpfiles . '/lib/cron_shutdown.php'); + +/** + * END CRONSCRIPT FOOTER + */ + +?> \ No newline at end of file diff --git a/scripts/install_configs.php b/scripts/install_configs.php new file mode 100644 index 0000000000..8906a3331e --- /dev/null +++ b/scripts/install_configs.php @@ -0,0 +1,140 @@ + + * @license GPLv2 http://files.syscp.org/misc/COPYING.txt + * @package System + * @version $Id: install_configs.php 2698 2009-04-13 20:25:59Z flo $ + */ + +/** + * STARTING REDUNDANT CODE, WHICH IS SOME KINDA HEADER FOR EVERY CRON SCRIPT. + * When using this "header" you have to change $lockFilename for your needs. + * Don't forget to also copy the footer which closes database connections + * and the lockfile! + */ + +include (dirname(__FILE__) . '/../lib/cron_init.php'); + +/** + * END REDUNDANT CODE (CRONSCRIPT "HEADER") + */ + +require ($pathtophpfiles . '/lib/configfiles_index.inc.php'); +require ($pathtophpfiles . '/lib/userdata.inc.php'); + +$replace_arr = Array( + '' => $sql['user'], + '' => $sql['password'], + '' => $sql['db'], + '' => $sql['host'], + '' => $settings['system']['hostname'], + '' => $settings['system']['ipaddress'], + '' => $settings['system']['nameservers'], + '' => $settings['system']['vmail_homedir'], + '' => $settings['system']['vmail_uid'], + '' => $settings['system']['vmail_gid'], + '' => $settings['system']['awstats_path'], + '' => ($settings['system']['use_ssl'] == '1') ? 'imaps pop3s' : '' +); + +$cli_params = $_SERVER['argv']; +unset($cli_params[0]); + +if(isset($cli_params[1]) && $cli_params[1] != '' && isset($configfiles[$cli_params[1]])) +{ + $distribution = $cli_params[1]; + unset($cli_params[1]); +} +else +{ + echo 'No valid distribution specified!' . "\n"; +} + +foreach($cli_params as $cli_param) +{ + list($service, $daemon) = explode('=', $cli_param); + echo $service . ' ' . $daemon; + if(isset($configfiles[$distribution]['services'][$service]) && isset($configfiles[$distribution]['services'][$service]['daemons'][$daemon])) + { + foreach($configfiles[$distribution]['services'][$service]['daemons'][$daemon] as $action => $value) + { + if(substr($action, 0, 8) == 'commands') + { + if(is_array($value)) + { + echo '=== COMMANDS BEGIN ===' . "\n"; + foreach($value as $command) + { + echo '-- running ' . $command . "\n"; + if(in_array('reallydoit', $cli_params)) + { + passthru($command); + } + } + echo '==== COMMANDS END ====' . "\n"; + } + } + elseif(substr($action, 0, 5) == 'files') + { + if(is_array($value)) + { + echo '=== FILES BEGIN ===' . "\n"; + while(list($filename, $realname) = each($value)) + { + $file_content = file_get_contents('./templates/misc/configfiles/' . $distribution . '/' . $daemon . '/' . $filename); + $file_content = strtr($file_content, $replace_arr); + echo '-- filename: ' . $realname . "\n"; + echo '-- filecontent:' . "\n" . '---' . "\n"; + echo $file_content; + echo '---' . "\n"; + if(in_array('reallydoit', $cli_params)) + { + if(file_exists($realname)) + { + exec('mv ' . escapeshellarg($realname) . ' ' . escapeshellarg($realname) . '.orig'); + } + file_put_contents($realname, $file_content); + } + } + echo '==== FILES END ====' . "\n"; + } + } + } + + if(isset($configfiles[$distribution]['services'][$service]['daemons'][$daemon]['restart']) + && is_array($configfiles[$distribution]['services'][$service]['daemons'][$daemon]['restart'])) + { + echo '=== RESTART BEGIN ===' . "\n"; + foreach($configfiles[$distribution]['services'][$service]['daemons'][$daemon]['restart'] as $command) + { + echo '-- running ' . $command . "\n"; + if(in_array('reallydoit', $cli_params)) + { + passthru($command); + } + } + echo '==== RESTART END ====' . "\n"; + } + } +} + +/** + * STARTING CRONSCRIPT FOOTER + */ + +include ($pathtophpfiles . '/lib/cron_shutdown.php'); + +/** + * END CRONSCRIPT FOOTER + */ + +?> \ No newline at end of file diff --git a/temp/.keep b/temp/.keep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/templates/admin/admins/admins.tpl b/templates/admin/admins/admins.tpl new file mode 100644 index 0000000000..17eee97b86 --- /dev/null +++ b/templates/admin/admins/admins.tpl @@ -0,0 +1,35 @@ +$header +
    + + + + + + + + + + + + + + + + + + + + $admins + + + + + + + + +
     {$lng['admin']['admins']}{$searchcode}
    {$lng['login']['username']}
    {$arrowcode['loginname']}
    {$lng['customer']['name']}
    {$arrowcode['name']}
    {$lng['admin']['customers']}
    {$lng['admin']['domains']}
    {$lng['customer']['diskspace']}
    {$lng['customer']['traffic']}
    {$lng['customer']['mysqls']}
    {$lng['customer']['ftps']}
    {$lng['customer']['tickets']}{$lng['customer']['emails']}
    {$lng['customer']['subdomains']}
    {$lng['customer']['accounts']}
    {$lng['customer']['forwarders']}
    {$lng['admin']['deactivated']}
    {$arrowcode['deactivated']}
    {$pagingcode}
    {$lng['admin']['admin_add']}
    +
    +
    +
    +$footer \ No newline at end of file diff --git a/templates/admin/admins/admins_add.tpl b/templates/admin/admins/admins_add.tpl new file mode 100644 index 0000000000..cca333510a --- /dev/null +++ b/templates/admin/admins/admins_add.tpl @@ -0,0 +1,141 @@ +$header +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
     {$lng['admin']['admin_add']}
    +  {$lng['admin']['accountdata']} + + +
    {$lng['login']['username']}: *
    {$lng['login']['password']}: *
    {$lng['login']['language']}:
    +  {$lng['admin']['contactdata']} + + +
    {$lng['customer']['name']}: **
    {$lng['customer']['email']}: *
    +  {$lng['admin']['servicedata']} + + +
    {$lng['serversettings']['ipaddress']['title']}:
    {$lng['admin']['change_serversettings']}$change_serversettings
    {$lng['admin']['customers']}: * {$customers_ul}
    {$lng['admin']['customers_see_all']}$customers_see_all
    {$lng['admin']['domains']}: * {$domains_ul}
    {$lng['admin']['domains_see_all']}$domains_see_all
    {$lng['admin']['caneditphpsettings']}$caneditphpsettings
    {$lng['customer']['diskspace']}: * {$diskspace_ul}
    {$lng['customer']['traffic']}: * {$traffic_ul}
    {$lng['customer']['subdomains']}: * {$subdomains_ul}
    {$lng['customer']['emails']}: * {$emails_ul}
    {$lng['customer']['accounts']}: * {$email_accounts_ul}
    {$lng['customer']['forwarders']}: * {$email_forwarders_ul}
    {$lng['customer']['email_quota']}: * {$email_quota_ul}
    {$lng['customer']['ftps']}: * {$ftps_ul}
    {$lng['customer']['tickets']}: * {$tickets_ul}
    {$lng['customer']['mysqls']}: * {$mysqls_ul}
    {$lng['aps']['canmanagepackages']}:$can_manage_aps_packages
    {$lng['aps']['numberofapspackages']}: {$number_of_aps_packages_ul}
    +
    +
    +
    +$footer \ No newline at end of file diff --git a/templates/admin/admins/admins_admin.tpl b/templates/admin/admins/admins_admin.tpl new file mode 100644 index 0000000000..536620f7b3 --- /dev/null +++ b/templates/admin/admins/admins_admin.tpl @@ -0,0 +1,12 @@ + + {$row['loginname']}{$row['loginname']} + {$row['name']} + {$row['customers_used']}/{$row['customers']}
    {$row['domains_used']}/{$row['domains']} + {$row['diskspace_used']}/{$row['diskspace']} (MB)
    {$row['traffic_used']}/{$row['traffic']} (GB) + {$row['mysqls_used']}/{$row['mysqls']}
    {$row['ftps_used']}/{$row['ftps']} + {$row['tickets_used']}/{$row['tickets']} + {$row['emails_used']}/{$row['emails']}
    {$row['subdomains_used']}/{$row['subdomains']} + {$row['email_accounts_used']}/{$row['email_accounts']}
    {$row['email_forwarders_used']}/{$row['email_forwarders']} + {$lng['panel']['yes']}{$lng['panel']['no']} + {$lng['panel']['edit']}
    {$lng['panel']['delete']} + diff --git a/templates/admin/admins/admins_edit.tpl b/templates/admin/admins/admins_edit.tpl new file mode 100644 index 0000000000..7eebeeef3c --- /dev/null +++ b/templates/admin/admins/admins_edit.tpl @@ -0,0 +1,169 @@ +$header +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
     {$lng['admin']['admin_edit']}
    +  {$lng['admin']['accountdata']} + + +
    {$lng['login']['username']}:{$result['loginname']}
    {$lng['error']['youcanteditallfieldsofyourself']}
    {$lng['admin']['deactivated_user']}?$deactivated
    {$lng['login']['password']} ({$lng['panel']['emptyfornochanges']}):
    {$lng['login']['language']}:
    +  {$lng['admin']['contactdata']} + + +
    {$lng['customer']['name']}: **
    {$lng['customer']['email']}: *
    {$lng['error']['youcanteditallfieldsofyourself']}
    +  {$lng['admin']['servicedata']} + + +
    {$lng['serversettings']['ipaddress']['title']}:
    {$lng['admin']['change_serversettings']}$change_serversettings
    {$lng['admin']['customers']}: * {$customers_ul}
    {$lng['admin']['customers_see_all']}$customers_see_all
    {$lng['admin']['domains']}: * {$domains_ul}
    {$lng['admin']['domains_see_all']}$domains_see_all
    {$lng['admin']['caneditphpsettings']}$caneditphpsettings
    {$lng['customer']['diskspace']}: * {$diskspace_ul}
    {$lng['customer']['traffic']}: * {$traffic_ul}
    {$lng['customer']['subdomains']}: * {$subdomains_ul}
    {$lng['customer']['emails']}: * {$emails_ul}
    {$lng['customer']['accounts']}: * {$email_accounts_ul}
    {$lng['customer']['forwarders']}: * {$email_forwarders_ul}
    {$lng['customer']['email_quota']}: * {$email_quota_ul}
    {$lng['customer']['ftps']}: * {$ftps_ul}
    {$lng['customer']['tickets']}: * {$tickets_ul}
    {$lng['customer']['mysqls']}: * {$mysqls_ul}
    {$lng['aps']['canmanagepackages']}:$can_manage_aps_packages
    {$lng['aps']['numberofapspackages']}: {$number_of_aps_packages_ul}
    +
    +
    + + + + + + + +
    *: {$lng['admin']['valuemandatory']}
    **: {$lng['admin']['valuemandatorycompany']}
    +
    +
    +$footer \ No newline at end of file diff --git a/templates/admin/aps/askyesno.tpl b/templates/admin/aps/askyesno.tpl new file mode 100644 index 0000000000..b5eea538a8 --- /dev/null +++ b/templates/admin/aps/askyesno.tpl @@ -0,0 +1,23 @@ + + + + + +
    + $Message +
    + + + + + $Ids +
    +
    +
    + + + +
    +
    +
    +
    diff --git a/templates/admin/aps/footer.tpl b/templates/admin/aps/footer.tpl new file mode 100644 index 0000000000..56ab96556e --- /dev/null +++ b/templates/admin/aps/footer.tpl @@ -0,0 +1 @@ +$footer diff --git a/templates/admin/aps/header.tpl b/templates/admin/aps/header.tpl new file mode 100644 index 0000000000..074878ca6f --- /dev/null +++ b/templates/admin/aps/header.tpl @@ -0,0 +1 @@ +$header diff --git a/templates/admin/aps/infobox.tpl b/templates/admin/aps/infobox.tpl new file mode 100644 index 0000000000..d8474350bf --- /dev/null +++ b/templates/admin/aps/infobox.tpl @@ -0,0 +1,7 @@ + + + + + +
    $Message
    +
    diff --git a/templates/admin/aps/manage_instances.tpl b/templates/admin/aps/manage_instances.tpl new file mode 100644 index 0000000000..56ea041983 --- /dev/null +++ b/templates/admin/aps/manage_instances.tpl @@ -0,0 +1,51 @@ + + + + + + + + +
     {$lng['aps']['specialoptions']}
    {$lng['aps']['statistics']}$Statistics
    +
    +
    + + + + + + + + + + + + + + + + + $InstancesInstall + + + + $InstancesTaskActive + + + + $InstancesSuccess + + + + $InstancesError + + + + $InstancesUninstall + + + +
     {$lng['aps']['manageinstances']}
    {$lng['aps']['packagenameandstatus']}{$lng['aps']['stopinstall']}{$lng['aps']['uninstall']}
    {$lng['aps']['instance_install']}
    {$lng['aps']['instance_task_active']}
    {$lng['aps']['instance_success']}
    {$lng['aps']['instance_error']}
    {$lng['aps']['instance_uninstall']}
     
    +
    +
    +
    diff --git a/templates/admin/aps/manage_instances_error.tpl b/templates/admin/aps/manage_instances_error.tpl new file mode 100644 index 0000000000..ab67b909c6 --- /dev/null +++ b/templates/admin/aps/manage_instances_error.tpl @@ -0,0 +1,5 @@ + + {$Row3['name']}, {$Row3['firstname']} | {$Row3['company']} ({$Row3['loginname']}) + + $Remove + \ No newline at end of file diff --git a/templates/admin/aps/manage_instances_install.tpl b/templates/admin/aps/manage_instances_install.tpl new file mode 100644 index 0000000000..ec97c6d58d --- /dev/null +++ b/templates/admin/aps/manage_instances_install.tpl @@ -0,0 +1,5 @@ + + {$Row3['name']}, {$Row3['firstname']} | {$Row3['company']} ({$Row3['loginname']}) + $Stop + + \ No newline at end of file diff --git a/templates/admin/aps/manage_instances_package.tpl b/templates/admin/aps/manage_instances_package.tpl new file mode 100644 index 0000000000..19d3c66737 --- /dev/null +++ b/templates/admin/aps/manage_instances_package.tpl @@ -0,0 +1,3 @@ + + {$Row['Name']} {$Row['Version']} (Release {$Row['Release']}) + \ No newline at end of file diff --git a/templates/admin/aps/manage_instances_success.tpl b/templates/admin/aps/manage_instances_success.tpl new file mode 100644 index 0000000000..ab67b909c6 --- /dev/null +++ b/templates/admin/aps/manage_instances_success.tpl @@ -0,0 +1,5 @@ + + {$Row3['name']}, {$Row3['firstname']} | {$Row3['company']} ({$Row3['loginname']}) + + $Remove + \ No newline at end of file diff --git a/templates/admin/aps/manage_instances_taskactive.tpl b/templates/admin/aps/manage_instances_taskactive.tpl new file mode 100644 index 0000000000..238f47586f --- /dev/null +++ b/templates/admin/aps/manage_instances_taskactive.tpl @@ -0,0 +1,3 @@ + + {$Row3['name']}, {$Row3['firstname']} | {$Row3['company']} ({$Row3['loginname']}) + \ No newline at end of file diff --git a/templates/admin/aps/manage_instances_uninstall.tpl b/templates/admin/aps/manage_instances_uninstall.tpl new file mode 100644 index 0000000000..238f47586f --- /dev/null +++ b/templates/admin/aps/manage_instances_uninstall.tpl @@ -0,0 +1,3 @@ + + {$Row3['name']}, {$Row3['firstname']} | {$Row3['company']} ({$Row3['loginname']}) + \ No newline at end of file diff --git a/templates/admin/aps/manage_packages.tpl b/templates/admin/aps/manage_packages.tpl new file mode 100644 index 0000000000..def274d370 --- /dev/null +++ b/templates/admin/aps/manage_packages.tpl @@ -0,0 +1,76 @@ + + + + + + + + + + + + +
     {$lng['aps']['specialoptions']}
    {$lng['admin']['phpsettings']['actions']} +
    + + + + + +
    +
    + + + + + +
    +
    +
    +
    + + + + + +
    +
    + + + + + +
    +
    {$lng['aps']['statistics']}$Statistics
    +
    +
    + + + + + + + + + + + + + + + + + $Packages + + + + + + + + + +
     {$lng['aps']['managepackages']}
    {$lng['aps']['packagenameandversion']}{$lng['ticket']['status']}{$lng['aps']['installations']}{$lng['aps']['lock']}{$lng['aps']['unlock']}{$lng['aps']['remove']}
    {$lng['aps']['allpackages']}
     
    +
    +
    +
    diff --git a/templates/admin/aps/manage_packages_detail.tpl b/templates/admin/aps/manage_packages_detail.tpl new file mode 100644 index 0000000000..639fc395c4 --- /dev/null +++ b/templates/admin/aps/manage_packages_detail.tpl @@ -0,0 +1,8 @@ + + {$Row2['Version']} (Release {$Row2['Release']}) + {$lng['aps']['package_locked']}{$lng['aps']['package_enabled']} + {$Installations} + $Lock + $Unlock + $Remove + diff --git a/templates/admin/aps/manage_packages_download.tpl b/templates/admin/aps/manage_packages_download.tpl new file mode 100644 index 0000000000..741b23da88 --- /dev/null +++ b/templates/admin/aps/manage_packages_download.tpl @@ -0,0 +1,19 @@ + + + + + + + + +
     {$lng['aps']['specialoptions']}
    {$lng['admin']['phpsettings']['actions']} +
    + + + + + +
    +
    +
    +
    \ No newline at end of file diff --git a/templates/admin/aps/manage_packages_row.tpl b/templates/admin/aps/manage_packages_row.tpl new file mode 100644 index 0000000000..2c29f2eab5 --- /dev/null +++ b/templates/admin/aps/manage_packages_row.tpl @@ -0,0 +1,3 @@ + + {$Row['Name']} + diff --git a/templates/admin/aps/upload.tpl b/templates/admin/aps/upload.tpl new file mode 100644 index 0000000000..d77e6a0588 --- /dev/null +++ b/templates/admin/aps/upload.tpl @@ -0,0 +1,19 @@ +
    + + + + + + + + + + + + + + + + +
     {$lng['aps']['upload']}
    {$lng['aps']['upload_description']} http://www.apsstandard.org/

    $Output
    +
    \ No newline at end of file diff --git a/templates/admin/configfiles/choose.tpl b/templates/admin/configfiles/choose.tpl new file mode 100644 index 0000000000..26cfe2375c --- /dev/null +++ b/templates/admin/configfiles/choose.tpl @@ -0,0 +1,10 @@ +$header + + + + + $distributions +
     {$lng['admin']['configfiles']['serverconfiguration']} [{$lng['admin']['configfiles']['wizard']}]
    +
    +
    +$footer \ No newline at end of file diff --git a/templates/admin/configfiles/choose_daemon.tpl b/templates/admin/configfiles/choose_daemon.tpl new file mode 100644 index 0000000000..2a496790ea --- /dev/null +++ b/templates/admin/configfiles/choose_daemon.tpl @@ -0,0 +1,2 @@ +   » {$daemon_details['label']} +
    \ No newline at end of file diff --git a/templates/admin/configfiles/choose_distribution.tpl b/templates/admin/configfiles/choose_distribution.tpl new file mode 100644 index 0000000000..f6e4c8e733 --- /dev/null +++ b/templates/admin/configfiles/choose_distribution.tpl @@ -0,0 +1,12 @@ + + + + + + + + + +
    » {$distribution_details['label']}
    $services
    + + \ No newline at end of file diff --git a/templates/admin/configfiles/choose_service.tpl b/templates/admin/configfiles/choose_service.tpl new file mode 100644 index 0000000000..cce9d3787e --- /dev/null +++ b/templates/admin/configfiles/choose_service.tpl @@ -0,0 +1,3 @@ + » {$service_details['label']} +
    +$daemons \ No newline at end of file diff --git a/templates/admin/configfiles/configfiles.tpl b/templates/admin/configfiles/configfiles.tpl new file mode 100644 index 0000000000..f30109a7b3 --- /dev/null +++ b/templates/admin/configfiles/configfiles.tpl @@ -0,0 +1,15 @@ +$header + + + + + {$configpage} + + + + + +
     {$configfiles[$distribution]['label']} » {$configfiles[$distribution]['services'][$service]['label']} » {$configfiles[$distribution]['services'][$service]['daemons'][$daemon]['label']} [{$lng['panel']['back']}]
    {$lng['admin']['configfiles']['restart']}

    +
    +
    +$footer \ No newline at end of file diff --git a/templates/admin/configfiles/configfiles_commands.tpl b/templates/admin/configfiles/configfiles_commands.tpl new file mode 100644 index 0000000000..c49929b2bf --- /dev/null +++ b/templates/admin/configfiles/configfiles_commands.tpl @@ -0,0 +1,3 @@ + + {$lng['admin']['configfiles']['commands']}

    + \ No newline at end of file diff --git a/templates/admin/configfiles/configfiles_file.tpl b/templates/admin/configfiles/configfiles_file.tpl new file mode 100644 index 0000000000..f0489e10c8 --- /dev/null +++ b/templates/admin/configfiles/configfiles_file.tpl @@ -0,0 +1 @@ +

    $realname:

    diff --git a/templates/admin/configfiles/configfiles_files.tpl b/templates/admin/configfiles/configfiles_files.tpl new file mode 100644 index 0000000000..ad720fc5be --- /dev/null +++ b/templates/admin/configfiles/configfiles_files.tpl @@ -0,0 +1,3 @@ + + {$lng['admin']['configfiles']['files']}
    {$files} + \ No newline at end of file diff --git a/templates/admin/configfiles/wizard.tpl b/templates/admin/configfiles/wizard.tpl new file mode 100644 index 0000000000..59b8f265e4 --- /dev/null +++ b/templates/admin/configfiles/wizard.tpl @@ -0,0 +1,28 @@ +$header +
    + + + + + + + + + + + + + + + + + + + + + +
     {$lng['admin']['configfiles']['serverconfiguration']} [{$lng['admin']['configfiles']['overview']}]
    {$lng['admin']['configfiles']['distribution']}:{$configfiles[$distribution]['label']}
    {$lng['admin']['configfiles']['service']}:{$configfiles[$distribution]['services'][$service]['label']}
    {$lng['admin']['configfiles']['daemon']}:
    +
    +
    +
    +$footer \ No newline at end of file diff --git a/templates/admin/customers/customers.tpl b/templates/admin/customers/customers.tpl new file mode 100644 index 0000000000..d454e9bef5 --- /dev/null +++ b/templates/admin/customers/customers.tpl @@ -0,0 +1,43 @@ +$header +
    + + + + + + + + + + + + + + + + + + + + + + + + + + $customers + + + + + + + + + + +
     {$lng['admin']['customers']}{$searchcode}
    {$lng['admin']['customer_add']}
    {$lng['login']['username']}
    {$arrowcode['c.loginname']}
    {$lng['admin']['admin']}
    {$arrowcode['a.loginname']}
    {$lng['customer']['name']}  {$arrowcode['c.name']}
    {$lng['customer']['firstname']}  {$arrowcode['c.firstname']}
    {$lng['customer']['domains']}{$lng['customer']['tickets']}{$lng['customer']['diskspace']}
    {$lng['customer']['traffic']}
    {$lng['customer']['mysqls']}
    {$lng['customer']['ftps']}
    {$lng['customer']['emails']}
    {$lng['customer']['subdomains']}
    {$lng['customer']['accounts']}
    {$lng['customer']['forwarders']}
    {$lng['admin']['deactivated']}
    {$lng['invoice']['active']}
    {$pagingcode}
    {$lng['admin']['customer_add']}
    +
    +
    +
    +$footer diff --git a/templates/admin/customers/customers_add.tpl b/templates/admin/customers/customers_add.tpl new file mode 100644 index 0000000000..ff0cd898a7 --- /dev/null +++ b/templates/admin/customers/customers_add.tpl @@ -0,0 +1,175 @@ +$header +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
     {$lng['admin']['customer_add']}
    +  {$lng['admin']['accountdata']} + + +
    {$lng['login']['username']}:
    {$lng['admin']['stdsubdomain_add']}?$createstdsubdomain
    {$lng['login']['password']}:
    {$lng['admin']['sendpassword']}?$sendpassword
    {$lng['login']['language']}:
    +  {$lng['admin']['contactdata']} + + +
    {$lng['customer']['name']}: **
    {$lng['customer']['firstname']}: **
    {$lng['customer']['company']}: **
    {$lng['customer']['street']}:
    {$lng['customer']['zipcode']}:
    {$lng['customer']['city']}:
    {$lng['customer']['phone']}:
    {$lng['customer']['fax']}:
    {$lng['customer']['email']}: *
    {$lng['customer']['customernumber']}:
    +  {$lng['admin']['servicedata']} + + +
    {$lng['customer']['diskspace']}: * {$diskspace_ul}
    {$lng['customer']['traffic']}: * {$traffic_ul}
    {$lng['customer']['subdomains']}: * {$subdomains_ul}
    {$lng['customer']['emails']}: * {$emails_ul}
    {$lng['customer']['accounts']}: * {$email_accounts_ul}
    {$lng['customer']['forwarders']}: * {$email_forwarders_ul}
    {$lng['customer']['email_quota']}: * {$diskspace_ul}
    {$lng['customer']['email_imap']}: *$email_imap
    {$lng['customer']['email_pop3']}: *$email_pop3
    {$lng['customer']['ftps']}: * {$ftps_ul}
    {$lng['customer']['tickets']}: * {$tickets_ul}
    {$lng['customer']['mysqls']}: * {$mysqls_ul}
    {$lng['admin']['phpenabled']}?$phpenabled
    {$lng['aps']['numberofapspackages']}: {$number_of_aps_packages_ul}
    + +
    +
    +
    + + + + + + + +
    *: {$lng['admin']['valuemandatory']}
    **: {$lng['admin']['valuemandatorycompany']}
    +
    +
    +$footer diff --git a/templates/admin/customers/customers_customer.tpl b/templates/admin/customers/customers_customer.tpl new file mode 100644 index 0000000000..fa6355491a --- /dev/null +++ b/templates/admin/customers/customers_customer.tpl @@ -0,0 +1,17 @@ + + {$row['loginname']} + {$row['adminname']} + {$row['name']}
    {$row['firstname']}
    {$row['company']} + {$row['domains']}{$row['domains']} + style="color:red" style="color:green">{$row['tickets_used']}/{$row['tickets']} + + style="color:red" style="color:green">{$row['diskspace_used']}/{$row['diskspace']} (MB) +
    + style="color:red" style="color:green">{$row['traffic_used']}/{$row['traffic']} (GB) + + {$row['mysqls_used']}/{$row['mysqls']}
    {$row['ftps_used']}/{$row['ftps']} + {$row['emails_used']}/{$row['emails']}
    {$row['subdomains_used']}/{$row['subdomains']} + {$row['email_accounts_used']}/{$row['email_accounts']}
    {$row['email_forwarders_used']}/{$row['email_forwarders']} + {$lng['panel']['yes']}{$lng['panel']['no']}
    {$lng['panel']['yes']}{$lng['panel']['no']} + {$lng['panel']['edit']} {$lng['panel']['delete']}
    {$lng['customer']['create_contract']}
    + diff --git a/templates/admin/customers/customers_edit.tpl b/templates/admin/customers/customers_edit.tpl new file mode 100644 index 0000000000..18378f7782 --- /dev/null +++ b/templates/admin/customers/customers_edit.tpl @@ -0,0 +1,181 @@ +$header +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
     {$lng['admin']['customer_edit']}
    +  {$lng['admin']['accountdata']} + + +
    {$lng['login']['username']}:{$result['loginname']}
    {$lng['customer']['documentroot']}:{$result['documentroot']}
    {$lng['admin']['stdsubdomain_add']}?
    ({$result['loginname']}.{$settings['system']['hostname']})
    $createstdsubdomain
    {$lng['admin']['deactivated_user']}?$deactivated
    {$lng['login']['password']} ({$lng['panel']['emptyfornochanges']}):
    {$lng['login']['language']}:
    +  {$lng['admin']['contactdata']} + + +
    {$lng['customer']['name']}: **
    {$lng['customer']['firstname']}: **
    {$lng['customer']['company']}: **
    {$lng['customer']['street']}:
    {$lng['customer']['zipcode']}:
    {$lng['customer']['city']}:
    {$lng['customer']['phone']}:
    {$lng['customer']['fax']}:
    {$lng['customer']['email']}: *
    {$lng['customer']['customernumber']}:
    +  {$lng['admin']['servicedata']} + + +
    {$lng['customer']['diskspace']}: * {$diskspace_ul}
    {$lng['customer']['traffic']}: * {$traffic_ul}
    {$lng['customer']['subdomains']}: * {$subdomains_ul}
    {$lng['customer']['emails']}: * {$emails_ul}
    {$lng['customer']['accounts']}: * {$email_accounts_ul}
    {$lng['customer']['forwarders']}: * {$email_forwarders_ul}
    {$lng['customer']['email_quota']} ({$lng['panel']['megabyte']}): * {$email_quota_ul}
    {$lng['customer']['email_imap']}: *$email_imap
    {$lng['customer']['email_pop3']}: *$email_pop3
    {$lng['customer']['ftps']}: * {$ftps_ul}
    {$lng['customer']['tickets']}: * {$tickets_ul}
    {$lng['customer']['mysqls']}: * {$mysqls_ul}
    {$lng['admin']['phpenabled']}?$phpenabled
    {$lng['aps']['numberofapspackages']}: {$number_of_aps_packages_ul}
    + +
    +
    +
    + + + + + + + +
    *: {$lng['admin']['valuemandatory']}
    **: {$lng['admin']['valuemandatorycompany']}
    +
    +
    +$footer diff --git a/templates/admin/domains/domains.tpl b/templates/admin/domains/domains.tpl new file mode 100644 index 0000000000..13e00a45ea --- /dev/null +++ b/templates/admin/domains/domains.tpl @@ -0,0 +1,41 @@ +$header +
    + + + + + + + + + + + + + + + + + + + $domains + + + + + + + + + + + + + + + +
     {$lng['admin']['domains']}{$searchcode}
    {$lng['admin']['domain_add']}
    {$lng['domains']['domainname']}  {$arrowcode['d.domain']}{$lng['admin']['ipsandports']['ip']}  {$arrowcode['ip.ip']} : {$lng['admin']['ipsandports']['port']}  {$arrowcode['ip.port']}{$lng['admin']['customer']}  {$arrowcode['c.loginname']}
    {$pagingcode}
    {$lng['admin']['domain_add']}
    {$lng['admin']['domain_nocustomeraddingavailable']}
    +
    +
    +
    +$footer \ No newline at end of file diff --git a/templates/admin/domains/domains_add.tpl b/templates/admin/domains/domains_add.tpl new file mode 100644 index 0000000000..b44ad24a0c --- /dev/null +++ b/templates/admin/domains/domains_add.tpl @@ -0,0 +1,186 @@ +$header +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
     {$lng['admin']['domain_add']}
    +  {$lng['domains']['domainsettings']} + + +
    Domain:
    {$lng['admin']['customer']}:
    {$lng['admin']['admin']}:
    {$lng['domains']['aliasdomain']}:
    {$lng['admin']['domain_edit']}:$caneditdomain
    {$lng['domains']['add_date']}: ({$lng['panel']['dateformat']}){$add_date}
    {$lng['domains']['registration_date']}: ({$lng['panel']['dateformat']})
    +  {$lng['admin']['webserversettings']} + + +
    DocumentRoot:
    ({$lng['panel']['emptyfordefault']})
    IP/Port:
    SSL:$ssl
    SSL Redirect:$ssl_redirect
    SSL IP/Port:
    {$lng['panel']['nosslipsavailable']}
    {$lng['admin']['wwwserveralias']}:$wwwserveralias
    Speciallogfile:$speciallogfile
    {$lng['admin']['ownvhostsettings']}:
    {$lng['serversettings']['default_vhostconf']['description']}
    +  {$lng['admin']['phpserversettings']} + + +
    OpenBasedir:$openbasedir
    Safemode:$safemode
    {$lng['admin']['phpsettings']['title']}
    {$lng['admin']['mod_fcgid_starter']['title']}
    {$lng['admin']['mod_fcgid_maxrequests']['title']}
    +  {$lng['admin']['nameserversettings']} + + +
    Nameserver:$isbinddomain
    Zonefile:
    ({$lng['panel']['emptyfordefault']})
    +  {$lng['admin']['mailserversettings']} + + +
    {$lng['admin']['emaildomain']}:$isemaildomain
    {$lng['admin']['email_only']}:$email_only
    {$lng['admin']['subdomainforemail']}:
    DomainKeys:$dkim
    + +
    +
    +
    +
    +$footer \ No newline at end of file diff --git a/templates/admin/domains/domains_domain.tpl b/templates/admin/domains/domains_domain.tpl new file mode 100644 index 0000000000..7183a753a2 --- /dev/null +++ b/templates/admin/domains/domains_domain.tpl @@ -0,0 +1,7 @@ + + {$row['domain']} ({$lng['admin']['stdsubdomain']}) + {$row['ipandport']} + {$row['customername']} ({$row['loginname']}) + {$lng['panel']['edit']} + {$lng['panel']['delete']}{$lng['domains']['hasaliasdomains']}{$lng['panel']['service_still_active']} + diff --git a/templates/admin/domains/domains_edit.tpl b/templates/admin/domains/domains_edit.tpl new file mode 100644 index 0000000000..d8fd2bf16b --- /dev/null +++ b/templates/admin/domains/domains_edit.tpl @@ -0,0 +1,194 @@ +$header +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
     {$lng['admin']['domain_edit']}
    +  {$lng['domains']['domainsettings']} + + +
    Domain:{$result['domain']}
    {$lng['admin']['customer']}:{$result['customername']}
    {$lng['admin']['admin']}:{$result['adminname']}
    {$lng['domains']['aliasdomain']}:
    {$lng['domains']['associated_with_domain']}:{$subdomains} {$lng['customer']['subdomains']}, {$alias_check} {$lng['domains']['aliasdomains']}, {$emails} {$lng['customer']['emails']}, {$email_accounts} {$lng['customer']['accounts']}, {$email_forwarders} {$lng['customer']['forwarders']}
    {$lng['admin']['domain_edit']}:$caneditdomain
    {$lng['domains']['add_date']}: ({$lng['panel']['dateformat']}){$result['add_date']}
    {$lng['domains']['registration_date']}: ({$lng['panel']['dateformat']})
    +  {$lng['admin']['webserversettings']} + + +
    DocumentRoot:
    ({$lng['panel']['emptyfordefault']})
    IP/Port:
    SSL:$ssl
    SSL Redirect:$ssl_redirect
    SSL IP/Port:
    {$lng['panel']['nosslipsavailable']}
    {$lng['admin']['wwwserveralias']}:$wwwserveralias
    Speciallogfile:$speciallogfile
    {$lng['admin']['ownvhostsettings']}:
    {$lng['serversettings']['default_vhostconf']['description']}
    +  {$lng['admin']['phpserversettings']} + + +
    OpenBasedir:$openbasedir
    Safemode:$safemode
    {$lng['admin']['phpsettings']['title']}
    {$lng['admin']['mod_fcgid_starter']['title']}
    {$lng['admin']['mod_fcgid_maxrequests']['title']}
    +  {$lng['admin']['nameserversettings']} + + +
    Nameserver:$isbinddomain
    Zonefile:
    ({$lng['panel']['emptyfordefault']})
    +  {$lng['admin']['mailserversettings']} + + +
    {$lng['admin']['emaildomain']}:$isemaildomain
    {$lng['admin']['email_only']}:$email_only
    {$lng['admin']['subdomainforemail']}:
    DomainKeys:$dkim
    + +
    +
    +
    +
    +$footer \ No newline at end of file diff --git a/templates/admin/index/change_language.tpl b/templates/admin/index/change_language.tpl new file mode 100644 index 0000000000..429686a1d8 --- /dev/null +++ b/templates/admin/index/change_language.tpl @@ -0,0 +1,23 @@ +$header +
    + + + + + + + + + + + + + + + + +
     {$lng['menue']['main']['changelanguage']}
    {$lng['login']['language']}
    +
    +
    +
    +$footer \ No newline at end of file diff --git a/templates/admin/index/change_password.tpl b/templates/admin/index/change_password.tpl new file mode 100644 index 0000000000..441d55c61c --- /dev/null +++ b/templates/admin/index/change_password.tpl @@ -0,0 +1,31 @@ +$header +
    + + + + + + + + + + + + + + + + + + + + + + + + +
     {$lng['menue']['main']['changepassword']}
    {$lng['changepassword']['old_password']}
    {$lng['changepassword']['new_password']}
    {$lng['changepassword']['new_password_confirm']}
    +
    +
    +
    +$footer \ No newline at end of file diff --git a/templates/admin/index/index.tpl b/templates/admin/index/index.tpl new file mode 100644 index 0000000000..2f1927d797 --- /dev/null +++ b/templates/admin/index/index.tpl @@ -0,0 +1,154 @@ +$header + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
     {$lng['admin']['ressourcedetails']}
    {$lng['admin']['customers']}:{$overview['number_customers']} ({$userinfo['customers']})
    {$lng['customer']['domains']}:{$overview['number_domains']} ({$userinfo['domains']})
    {$lng['customer']['subdomains']}:{$overview['subdomains_used']} ({$userinfo['subdomains_used']}/{$userinfo['subdomains']})
    {$lng['customer']['diskspace']}:{$overview['diskspace_used']} ({$userinfo['diskspace_used']}/{$userinfo['diskspace']})
    {$lng['customer']['traffic']}:{$overview['traffic_used']} ({$userinfo['traffic_used']}/{$userinfo['traffic']})
    {$lng['customer']['mysqls']}:{$overview['mysqls_used']} ({$userinfo['mysqls_used']}/{$userinfo['mysqls']})
    {$lng['customer']['emails']}:{$overview['emails_used']} ({$userinfo['emails_used']}/{$userinfo['emails']})
    {$lng['customer']['accounts']}:{$overview['email_accounts_used']} ({$userinfo['email_accounts_used']}/{$userinfo['email_accounts']})
    {$lng['customer']['forwarders']}:{$overview['email_forwarders_used']} ({$userinfo['email_forwarders_used']}/{$userinfo['email_forwarders']})
    {$lng['customer']['email_quota']}:{$overview['email_quota_used']} ({$userinfo['email_quota_used']}/{$userinfo['email_quota']})
    {$lng['aps']['numberofapspackages']}:{$overview['aps_packages_used']} ({$userinfo['aps_packages_used']}/{$userinfo['aps_packages']})
    {$lng['customer']['ftps']}:{$overview['ftps_used']} ({$userinfo['ftps_used']}/{$userinfo['ftps']})
    {$lng['customer']['tickets']}:{$overview['tickets_used']} ({$userinfo['tickets_used']}/{$userinfo['tickets']})
    {$lng['customer']['ftps']}:{$overview['ftps_used']} ({$userinfo['ftps_used']}/{$userinfo['ftps']})
    {$awaitingtickets_text}
     {$lng['admin']['systemdetails']}
    {$lng['admin']['serversoftware']}:{$_SERVER['SERVER_SOFTWARE']}
    {$lng['admin']['phpversion']}:$phpversion
    {$lng['admin']['phpmemorylimit']}:$phpmemorylimit
    {$lng['admin']['mysqlserverversion']}:$mysqlserverversion
    {$lng['admin']['mysqlclientversion']}:$mysqlclientversion
    {$lng['admin']['webserverinterface']}:$webserverinterface
    {$lng['admin']['sysload']}:$load
    Kernel:$kernel
    Uptime:$uptime
     {$lng['admin']['syscpdetails']}
    {$lng['admin']['cronlastrun']}:$cronlastrun
    {$lng['admin']['trafficlastrun']}:$trafficlastrun
    {$lng['admin']['archivelastrun']}:$archivelastrun
    {$lng['admin']['installedversion']}:{$version} ({$dbversion})
    {$lng['admin']['latestversion']}:$lookfornewversion_lable
    $lookfornewversion_addinfo
     {$lng['admin']['thankyou']}
    {$lng['admin']['contributors']}:
    Florian Lippert, Tim Zielosko, Martin Burchert, Ron Brand, Michael Duergner, Wolfgang Ziegler, Patrick Brueckner, Florian Aders, Luca Longinotti, Manuel Bernhardt, Janky Jay, Thomas Peterhans, Benjamin Börngen-Schmidt, Philipp Haefelfinger, Michael Kaufmannk, Sven Skrabal
    +
    +
    +$footer \ No newline at end of file diff --git a/templates/admin/ipsandports/ipsandports.tpl b/templates/admin/ipsandports/ipsandports.tpl new file mode 100644 index 0000000000..8368e0e9e8 --- /dev/null +++ b/templates/admin/ipsandports/ipsandports.tpl @@ -0,0 +1,33 @@ +$header +
    + + + + + + + + + + + + + + + + + + $ipsandports + + + + + + + + +
     {$lng['admin']['ipsandports']['ipsandports']}{$searchcode}
    {$lng['admin']['ipsandports']['ip']}  {$arrowcode['ip']} : {$lng['admin']['ipsandports']['port']}  {$arrowcode['port']}ListenNameVirtualHostvHost-ContainerSpecialsettingsServerNameSSL
    {$pagingcode}
    {$lng['admin']['ipsandports']['add']}
    +
    +
    +
    +$footer diff --git a/templates/admin/ipsandports/ipsandports_add.tpl b/templates/admin/ipsandports/ipsandports_add.tpl new file mode 100644 index 0000000000..5023df39aa --- /dev/null +++ b/templates/admin/ipsandports/ipsandports_add.tpl @@ -0,0 +1,109 @@ +$header +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
     {$lng['admin']['ipsandports']['add']}
    +  {$lng['admin']['ipsandports']['ipandport']} + + +
    {$lng['admin']['ipsandports']['ip']}:
    {$lng['admin']['ipsandports']['port']}:
    +  {$lng['admin']['ipsandports']['webserverdefaultconfig']} + + +
    {$lng['admin']['ipsandports']['create_listen_statement']}:$listen_statement
    {$lng['admin']['ipsandports']['create_namevirtualhost_statement']}: +
    {$lng['panel']['not_supported']}lighttpd
    +
    $namevirtualhost_statement
    {$lng['admin']['ipsandports']['create_vhostcontainer']}: +
    {$lng['panel']['not_supported']}lighttpd
    +
    $vhostcontainer
    {$lng['admin']['ownvhostsettings']}:
    {$lng['serversettings']['default_vhostconf']['description']} +
    {$lng['panel']['not_supported']}lighttpd
    +
    {$lng['admin']['ipsandports']['create_vhostcontainer_servername_statement']}: +
    {$lng['panel']['not_supported']}lighttpd
    +
    $vhostcontainer_servername_statement
    +  {$lng['admin']['ipsandports']['webserverdomainconfig']} + + +
    {$lng['admin']['ipsandports']['default_vhostconf_domain']}:
    {$lng['serversettings']['default_vhostconf']['description']} +
    {$lng['panel']['not_supported']}lighttpd
    +
    +  {$lng['admin']['ipsandports']['webserverssldomainconfig']} + + +
    {$lng['admin']['ipsandports']['enable_ssl']}$enable_ssl
    {$lng['admin']['ipsandports']['ssl_cert_file']}:
    {$lng['admin']['ipsandports']['ssl_key_file']}:
    {$lng['admin']['ipsandports']['ssl_ca_file']}:
    +
    +
    +
    +$footer diff --git a/templates/admin/ipsandports/ipsandports_edit.tpl b/templates/admin/ipsandports/ipsandports_edit.tpl new file mode 100644 index 0000000000..620b1dabee --- /dev/null +++ b/templates/admin/ipsandports/ipsandports_edit.tpl @@ -0,0 +1,110 @@ +$header +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
     {$lng['admin']['ipsandports']['edit']}
    +  {$lng['admin']['ipsandports']['ipandport']} + + +
    {$lng['admin']['ipsandports']['ip']}:
    {$lng['admin']['ipsandports']['port']}:
    +  {$lng['admin']['ipsandports']['webserverdefaultconfig']} + + +
    {$lng['admin']['ipsandports']['create_listen_statement']}:$listen_statement
    {$lng['admin']['ipsandports']['create_namevirtualhost_statement']}: +
    {$lng['panel']['not_supported']}lighttpd
    +
    $namevirtualhost_statement
    {$lng['admin']['ipsandports']['create_vhostcontainer']}: +
    {$lng['panel']['not_supported']}lighttpd
    +
    $vhostcontainer
    {$lng['admin']['ownvhostsettings']}:
    {$lng['serversettings']['default_vhostconf']['description']} +
    {$lng['panel']['not_supported']}lighttpd
    +
    {$lng['admin']['ipsandports']['create_vhostcontainer_servername_statement']}: +
    {$lng['panel']['not_supported']}lighttpd
    +
    $vhostcontainer_servername_statement
    +  {$lng['admin']['ipsandports']['webserverdomainconfig']} + + +
    {$lng['admin']['ipsandports']['default_vhostconf_domain']}:
    {$lng['serversettings']['default_vhostconf']['description']} +
    {$lng['panel']['not_supported']}lighttpd
    +
    +  {$lng['admin']['ipsandports']['webserverssldomainconfig']} + + +
    {$lng['admin']['ipsandports']['enable_ssl']}$enable_ssl
    {$lng['admin']['ipsandports']['ssl_cert_file']}:
    {$lng['admin']['ipsandports']['ssl_key_file']}:
    {$lng['admin']['ipsandports']['ssl_ca_file']}:
    +
    +
    +
    +$footer diff --git a/templates/admin/ipsandports/ipsandports_ipandport.tpl b/templates/admin/ipsandports/ipsandports_ipandport.tpl new file mode 100644 index 0000000000..5bb1d77d97 --- /dev/null +++ b/templates/admin/ipsandports/ipsandports_ipandport.tpl @@ -0,0 +1,11 @@ + + {$row['ip']}:{$row['port']} + {$lng['panel']['yes']}{$lng['panel']['no']} + {$lng['panel']['yes']}{$lng['panel']['no']} + {$lng['panel']['yes']}{$lng['panel']['no']} + {$lng['panel']['yes']}{$lng['panel']['no']} + {$lng['panel']['yes']}{$lng['panel']['no']} + {$lng['panel']['yes']}{$lng['panel']['no']} + {$lng['panel']['edit']} + {$lng['panel']['delete']} + diff --git a/templates/admin/logger/logger.tpl b/templates/admin/logger/logger.tpl new file mode 100644 index 0000000000..b4e4f43cea --- /dev/null +++ b/templates/admin/logger/logger.tpl @@ -0,0 +1,30 @@ +$header +
    + + + + + + + + + + + + + + + + + + + + $log + + + +
     {$lng['menue']['logger']['logger']}{$searchcode}
    {$lng['logger']['truncate']}
    {$lng['logger']['date']}  {$arrowcode['date']}{$lng['logger']['type']}  {$arrowcode['type']}{$lng['logger']['user']}  {$arrowcode['user']}
    {$lng['logger']['truncate']}
    +
    +
    +
    +$footer \ No newline at end of file diff --git a/templates/admin/logger/logger_action.tpl b/templates/admin/logger/logger_action.tpl new file mode 100644 index 0000000000..0d073f0ca8 --- /dev/null +++ b/templates/admin/logger/logger_action.tpl @@ -0,0 +1,3 @@ + + {$row['action']} + \ No newline at end of file diff --git a/templates/admin/logger/logger_log.tpl b/templates/admin/logger/logger_log.tpl new file mode 100644 index 0000000000..737bd34d87 --- /dev/null +++ b/templates/admin/logger/logger_log.tpl @@ -0,0 +1,6 @@ + + {$row['date']} + {$row['type']} + {$row['user']} + {$row['text']} + diff --git a/templates/admin/message/message.tpl b/templates/admin/message/message.tpl new file mode 100644 index 0000000000..9f5d42ad09 --- /dev/null +++ b/templates/admin/message/message.tpl @@ -0,0 +1,39 @@ +$header +
    + + + + + + + + +
     {$successmessage}
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + +
     {$lng['admin']['message']}
    {$lng['admin']['receipient']}
    {$lng['admin']['subject']}
    {$lng['admin']['text']}
    +
    +
    +
    +$footer + diff --git a/templates/admin/phpconfig/overview.tpl b/templates/admin/phpconfig/overview.tpl new file mode 100644 index 0000000000..faa9dabb8c --- /dev/null +++ b/templates/admin/phpconfig/overview.tpl @@ -0,0 +1,21 @@ +$header + + + + + + + + + + + + + $tablecontent + + + +
     {$lng['menue']['phpsettings']['maintitle']} 
    {$lng['admin']['phpsettings']['description']}{$lng['admin']['phpsettings']['activedomains']}{$lng['admin']['phpsettings']['binary']}{$lng['admin']['phpsettings']['file_extensions']}{$lng['admin']['phpsettings']['actions']}
    {$lng['admin']['phpsettings']['addnew']}
    +
    +
    +$footer \ No newline at end of file diff --git a/templates/admin/phpconfig/overview_add.tpl b/templates/admin/phpconfig/overview_add.tpl new file mode 100644 index 0000000000..9a6ca274db --- /dev/null +++ b/templates/admin/phpconfig/overview_add.tpl @@ -0,0 +1,89 @@ +$header +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
     {$lng['admin']['phpsettings']['addsettings']}
    {$lng['admin']['phpsettings']['description']}
    {$lng['admin']['phpsettings']['binary']}
    {$lng['admin']['phpsettings']['file_extensions']}
    {$lng['admin']['phpsettings']['file_extensions_note']}
    {$lng['admin']['mod_fcgid_starter']['title']}
    {$lng['admin']['mod_fcgid_maxrequests']['title']}
    {$lng['admin']['phpsettings']['phpinisettings']}
     
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      {$lng['admin']['phpconfig']['template_replace_vars']}
    {SAFE_MODE}{$lng['admin']['phpconfig']['safe_mode']}
    {PEAR_DIR}{$lng['admin']['phpconfig']['pear_dir']}
    {OPEN_BASEDIR}{$lng['admin']['phpconfig']['open_basedir']}
    {OPEN_BASEDIR_GLOBAL}{$lng['admin']['phpconfig']['open_basedir_global']}
    {TMP_DIR}{$lng['admin']['phpconfig']['tmp_dir']}
    {CUSTOMER_EMAIL}{$lng['admin']['phpconfig']['customer_email']}
    {ADMIN_EMAIL}{$lng['admin']['phpconfig']['admin_email']}
    {DOMAIN}{$lng['admin']['phpconfig']['domain']}
    {CUSTOMER}{$lng['admin']['phpconfig']['customer']}
    {ADMIN}{$lng['admin']['phpconfig']['admin']}
    +
    +
    +$footer \ No newline at end of file diff --git a/templates/admin/phpconfig/overview_edit.tpl b/templates/admin/phpconfig/overview_edit.tpl new file mode 100644 index 0000000000..458109f244 --- /dev/null +++ b/templates/admin/phpconfig/overview_edit.tpl @@ -0,0 +1,90 @@ +$header +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
     {$lng['admin']['phpsettings']['editsettings']}
    {$lng['admin']['phpsettings']['description']}
    {$lng['admin']['phpsettings']['binary']}
    {$lng['admin']['phpsettings']['file_extensions']}
    {$lng['admin']['phpsettings']['file_extensions_note']}
    {$lng['admin']['mod_fcgid_starter']['title']}
    {$lng['admin']['mod_fcgid_maxrequests']['title']}
    {$lng['admin']['phpsettings']['phpinisettings']}
     
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      {$lng['admin']['phpconfig']['template_replace_vars']}
    {SAFE_MODE}{$lng['admin']['phpconfig']['safe_mode']}
    {PEAR_DIR}{$lng['admin']['phpconfig']['pear_dir']}
    {OPEN_BASEDIR}{$lng['admin']['phpconfig']['open_basedir']}
    {OPEN_BASEDIR_GLOBAL}{$lng['admin']['phpconfig']['open_basedir_global']}
    {TMP_DIR}{$lng['admin']['phpconfig']['tmp_dir']}
    {CUSTOMER_EMAIL}{$lng['admin']['phpconfig']['customer_email']}
    {ADMIN_EMAIL}{$lng['admin']['phpconfig']['admin_email']}
    {DOMAIN}{$lng['admin']['phpconfig']['domain']}
    {CUSTOMER}{$lng['admin']['phpconfig']['customer']}
    {ADMIN}{$lng['admin']['phpconfig']['admin']}
    +
    +
    +$footer \ No newline at end of file diff --git a/templates/admin/phpconfig/overview_overview.tpl b/templates/admin/phpconfig/overview_overview.tpl new file mode 100644 index 0000000000..61a2b79e06 --- /dev/null +++ b/templates/admin/phpconfig/overview_overview.tpl @@ -0,0 +1,10 @@ + + {$row['description']} + {$domains} + {$row['binary']} + {$row['file_extensions']} + + {$lng['panel']['edit']}
    + {$lng['panel']['delete']}
    + + \ No newline at end of file diff --git a/templates/admin/settings/settings.tpl b/templates/admin/settings/settings.tpl new file mode 100644 index 0000000000..4807e50b99 --- /dev/null +++ b/templates/admin/settings/settings.tpl @@ -0,0 +1,21 @@ +$header +
    + + + + + + + + + $fields + + + +
     {$lng['admin']['serversettings']}
    + +
    +
    +
    +
    +$footer \ No newline at end of file diff --git a/templates/admin/settings/settings_group.tpl b/templates/admin/settings/settings_group.tpl new file mode 100644 index 0000000000..fe3ed97eb7 --- /dev/null +++ b/templates/admin/settings/settings_group.tpl @@ -0,0 +1,8 @@ + + +  {$groupdetails['title']} + + + + + diff --git a/templates/admin/settings/updatecounters.tpl b/templates/admin/settings/updatecounters.tpl new file mode 100644 index 0000000000..fcbec792ea --- /dev/null +++ b/templates/admin/settings/updatecounters.tpl @@ -0,0 +1,18 @@ +$header + + + + +{$customers} + + + +{$admins} +
    +  {$lng['admin']['updatecounters']}: {$lng['admin']['customers']} +
    +  {$lng['admin']['updatecounters']}: {$lng['admin']['admins']} +
    +
    +
    +$footer diff --git a/templates/admin/settings/updatecounters_row_admin.tpl b/templates/admin/settings/updatecounters_row_admin.tpl new file mode 100644 index 0000000000..ba41545354 --- /dev/null +++ b/templates/admin/settings/updatecounters_row_admin.tpl @@ -0,0 +1,61 @@ + + + {$admin['loginname']}{$admin['loginname']}: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    {$lng['admin']['customers']}:style="color:green"style="color:red">{$admin['customers_used']} -> {$admin['customers_used_new']}
    {$lng['customer']['domains']}:style="color:green"style="color:red">{$admin['domains_used']} -> {$admin['domains_used_new']}
    {$lng['customer']['subdomains']}:style="color:green"style="color:red">{$admin['subdomains_used']} -> {$admin['subdomains_used_new']}
    {$lng['customer']['diskspace']}:style="color:green"style="color:red">{$admin['diskspace_used']} -> {$admin['diskspace_used_new']}
    {$lng['customer']['traffic']}:style="color:green"style="color:red">{$admin['traffic_used']} -> {$admin['traffic_used_new']}
    {$lng['customer']['mysqls']}:style="color:green"style="color:red">{$admin['mysqls_used']} -> {$admin['mysqls_used_new']}
    {$lng['customer']['emails']}:style="color:green"style="color:red">{$admin['emails_used']} -> {$admin['emails_used_new']}
    {$lng['customer']['accounts']}:style="color:green"style="color:red">{$admin['email_accounts_used']} -> {$admin['email_accounts_used_new']}
    {$lng['customer']['forwarders']}:style="color:green"style="color:red">{$admin['email_forwarders_used']} -> {$admin['email_forwarders_used_new']}
    {$lng['customer']['email_quota']}:style="color:green"style="color:red">{$admin['email_quota_used']} -> {$admin['email_quota_used_new']}
    {$lng['customer']['ftps']}:style="color:green"style="color:red">{$admin['ftps_used']} -> {$admin['ftps_used_new']}
    {$lng['customer']['tickets']}:style="color:green"style="color:red">{$admin['tickets_used']} -> {$admin['tickets_used_new']}
    + + diff --git a/templates/admin/settings/updatecounters_row_customer.tpl b/templates/admin/settings/updatecounters_row_customer.tpl new file mode 100644 index 0000000000..88d12a35d0 --- /dev/null +++ b/templates/admin/settings/updatecounters_row_customer.tpl @@ -0,0 +1,45 @@ + + + {$customer['name']}, {$customer['firstname']} | {$customer['company']} ({$customer['loginname']}): + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    {$lng['customer']['subdomains']}:style="color:green"style="color:red">{$customer['tickets_used']} -> {$customer['tickets_used_new']}
    {$lng['customer']['mysqls']}:style="color:green"style="color:red">{$customer['mysqls_used']} -> {$customer['mysqls_used_new']}
    {$lng['customer']['emails']}:style="color:green"style="color:red">{$customer['emails_used']} -> {$customer['emails_used_new']}
    {$lng['customer']['accounts']}:style="color:green"style="color:red">{$customer['email_accounts_used']} -> {$customer['email_accounts_used_new']}
    {$lng['customer']['forwarders']}:style="color:green"style="color:red">{$customer['email_forwarders_used']} -> {$customer['email_forwarders_used_new']}
    {$lng['customer']['email_quota']}:style="color:green"style="color:red">{$customer['email_quota_used']} -> {$customer['email_quota_used_new']}
    {$lng['customer']['ftps']}:style="color:green"style="color:red">{$customer['ftps_used']} -> {$customer['ftps_used_new']}
    {$lng['customer']['tickets']}:style="color:green"style="color:red">{$customer['tickets_used']} -> {$customer['tickets_used_new']}
    + + diff --git a/templates/admin/templates/filetemplates_add.tpl b/templates/admin/templates/filetemplates_add.tpl new file mode 100644 index 0000000000..3bfa542aec --- /dev/null +++ b/templates/admin/templates/filetemplates_add.tpl @@ -0,0 +1,55 @@ +$header +
    + + + + + + + + + + + + + + + + + + +
     {$lng['admin']['templates']['template_add']}
    {$lng['admin']['templates']['action']}
    {$lng['admin']['templates']['filecontent']}
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      {$lng['admin']['templates']['template_replace_vars']}
    {$lng['admin']['templates']['index_html']}
    {SERVERNAME}:{$lng['admin']['templates']['SERVERNAME']}
    {CUSTOMER}:{$lng['admin']['templates']['CUSTOMER']}
    {ADMIN}:{$lng['admin']['templates']['ADMIN']}
    {CUSTOMER_EMAIL}:{$lng['admin']['templates']['CUSTOMER_EMAIL']}
    {ADMIN_EMAIL}:{$lng['admin']['templates']['ADMIN_EMAIL']}
    +
    +
    +
    +$footer \ No newline at end of file diff --git a/templates/admin/templates/filetemplates_edit.tpl b/templates/admin/templates/filetemplates_edit.tpl new file mode 100644 index 0000000000..b83a8de694 --- /dev/null +++ b/templates/admin/templates/filetemplates_edit.tpl @@ -0,0 +1,56 @@ +$header +
    + + + + + + + + + + + + + + + + + + + +
     {$lng['admin']['templates']['template_add']}
    {$lng['admin']['templates']['action']}{$lng['admin']['templates'][$row['varname']]}
    {$lng['admin']['templates']['filecontent']}
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      {$lng['admin']['templates']['template_replace_vars']}
    {$lng['admin']['templates']['index_html']}
    {SERVERNAME}:{$lng['admin']['templates']['SERVERNAME']}
    {CUSTOMER}:{$lng['admin']['templates']['CUSTOMER']}
    {ADMIN}:{$lng['admin']['templates']['ADMIN']}
    {CUSTOMER_EMAIL}:{$lng['admin']['templates']['CUSTOMER_EMAIL']}
    {ADMIN_EMAIL}:{$lng['admin']['templates']['ADMIN_EMAIL']}
    +
    +
    +
    +$footer \ No newline at end of file diff --git a/templates/admin/templates/templates.tpl b/templates/admin/templates/templates.tpl new file mode 100644 index 0000000000..006eb9cf0c --- /dev/null +++ b/templates/admin/templates/templates.tpl @@ -0,0 +1,37 @@ +$header + + + + + + + + + + $templates + + + + + +
     {$lng['admin']['templates']['templates']}
    {$lng['login']['language']}{$lng['admin']['templates']['action']} 
    {$lng['admin']['templates']['template_add']}
    +
    + + + + + + + + + + $filetemplates + + + + + +
     {$lng['admin']['templates']['filetemplates']}
    {$lng['admin']['templates']['action']}  
    {$lng['admin']['templates']['template_add']}
    +
    +
    +$footer \ No newline at end of file diff --git a/templates/admin/templates/templates_add_1.tpl b/templates/admin/templates/templates_add_1.tpl new file mode 100644 index 0000000000..f74748c81c --- /dev/null +++ b/templates/admin/templates/templates_add_1.tpl @@ -0,0 +1,21 @@ +$header +
    + + + + + + + + + + + + + + +
     {$lng['admin']['templates']['template_add']}
    {$lng['login']['language']}:
    +
    +
    +
    +$footer \ No newline at end of file diff --git a/templates/admin/templates/templates_add_2.tpl b/templates/admin/templates/templates_add_2.tpl new file mode 100644 index 0000000000..94f1441868 --- /dev/null +++ b/templates/admin/templates/templates_add_2.tpl @@ -0,0 +1,105 @@ +$header +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
     {$lng['admin']['templates']['template_add']}
    {$lng['login']['language']}$language
    {$lng['admin']['templates']['action']}
    {$lng['admin']['templates']['subject']}
    {$lng['admin']['templates']['mailbody']}
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      {$lng['admin']['templates']['template_replace_vars']}
    {$lng['admin']['templates']['createcustomer']}
    {FIRSTNAME}:{$lng['admin']['templates']['FIRSTNAME']}
    {NAME}:{$lng['admin']['templates']['NAME']}
    {USERNAME}:{$lng['admin']['templates']['USERNAME']}
    {PASSWORD}:{$lng['admin']['templates']['PASSWORD']}
    {$lng['admin']['templates']['pop_success']}
    {EMAIL}:{$lng['admin']['templates']['EMAIL']}
    {$lng['admin']['templates']['pop_success_alternative']}
    {EMAIL}:{$lng['admin']['templates']['EMAIL']}
    {PASSWORD}:{$lng['admin']['templates']['EMAIL_PASSWORD']}
    {$lng['admin']['templates']['trafficninetypercent']}
    {TRAFFIC}:{$lng['admin']['templates']['TRAFFIC']}
    {TRAFFICUSED}:{$lng['admin']['templates']['TRAFFICUSED']}
    {$lng['admin']['templates']['ticket']}
    {SUBJECT}:{$lng['admin']['templates']['SUBJECT']}
    {FIRSTNAME}:{$lng['admin']['templates']['FIRSTNAME']}
    {NAME}:{$lng['admin']['templates']['NAME']}
    +
    +
    +
    +$footer \ No newline at end of file diff --git a/templates/admin/templates/templates_edit.tpl b/templates/admin/templates/templates_edit.tpl new file mode 100644 index 0000000000..ae5cd61efe --- /dev/null +++ b/templates/admin/templates/templates_edit.tpl @@ -0,0 +1,107 @@ +$header +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
     {$lng['admin']['templates']['template_edit']}
    {$lng['login']['language']}{$result['language']}
    {$lng['admin']['templates']['action']}$template
    {$lng['admin']['templates']['subject']}
    {$lng['admin']['templates']['mailbody']}
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      {$lng['admin']['templates']['template_replace_vars']}
    {$lng['admin']['templates']['createcustomer']}
    {FIRSTNAME}:{$lng['admin']['templates']['FIRSTNAME']}
    {NAME}:{$lng['admin']['templates']['NAME']}
    {USERNAME}:{$lng['admin']['templates']['USERNAME']}
    {PASSWORD}:{$lng['admin']['templates']['PASSWORD']}
    {$lng['admin']['templates']['pop_success']}
    {EMAIL}:{$lng['admin']['templates']['EMAIL']}
    {$lng['admin']['templates']['pop_success_alternative']}
    {EMAIL}:{$lng['admin']['templates']['EMAIL']}
    {PASSWORD}:{$lng['admin']['templates']['EMAIL_PASSWORD']}
    {$lng['admin']['templates']['trafficninetypercent']}
    {TRAFFIC}:{$lng['admin']['templates']['TRAFFIC']}
    {TRAFFICUSED}:{$lng['admin']['templates']['TRAFFICUSED']}
    {$lng['admin']['templates']['ticket']}
    {SUBJECT}:{$lng['admin']['templates']['SUBJECT']}
    {FIRSTNAME}:{$lng['admin']['templates']['FIRSTNAME']}
    {NAME}:{$lng['admin']['templates']['NAME']}
    +
    +
    +
    +$footer \ No newline at end of file diff --git a/templates/admin/templates/templates_filetemplate.tpl b/templates/admin/templates/templates_filetemplate.tpl new file mode 100644 index 0000000000..a48eb6ab95 --- /dev/null +++ b/templates/admin/templates/templates_filetemplate.tpl @@ -0,0 +1,5 @@ + + {$lng['admin']['templates'][$row['varname']]} + {$lng['panel']['delete']} + {$lng['panel']['edit']} + diff --git a/templates/admin/templates/templates_template.tpl b/templates/admin/templates/templates_template.tpl new file mode 100644 index 0000000000..c99dd19240 --- /dev/null +++ b/templates/admin/templates/templates_template.tpl @@ -0,0 +1,6 @@ + + {$language} + {$template} + {$lng['panel']['delete']} + {$lng['panel']['edit']} + diff --git a/templates/admin/ticket/archive.tpl b/templates/admin/ticket/archive.tpl new file mode 100644 index 0000000000..2bea9cd7ed --- /dev/null +++ b/templates/admin/ticket/archive.tpl @@ -0,0 +1,63 @@ +$header +
    + + + + + + + + + + + + + + + + + $tickets +
     {$lng['ticket']['lastarchived']} 
    {$lng['ticket']['archivedtime']}{$lng['ticket']['ticket_answers']}{$lng['ticket']['subject']}{$lng['ticket']['lastreplier']}{$lng['ticket']['priority']}
    +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
     {$lng['ticket']['search']}
    {$lng['ticket']['subject']}:
    {$lng['ticket']['priority']}:{$priorities_options}
    {$lng['ticket']['category']}:{$category_options}
    {$lng['ticket']['lastchange']}:{$lng['ticket']['lastchange_from']}

    {$lng['ticket']['lastchange_to']}
    {$lng['ticket']['message']}:
    {$lng['ticket']['customer']}:
    +
    +$footer \ No newline at end of file diff --git a/templates/admin/ticket/archived_tickets.tpl b/templates/admin/ticket/archived_tickets.tpl new file mode 100644 index 0000000000..04f44f4191 --- /dev/null +++ b/templates/admin/ticket/archived_tickets.tpl @@ -0,0 +1,10 @@ + + {$ticket['lastchange']} + {$ticket['ticket_answers']} + {$ticket['subject']} + {$ticket['lastreplier']} + {$ticket['priority']} + + {$lng['ticket']['show']} + + diff --git a/templates/admin/ticket/archivesearch.tpl b/templates/admin/ticket/archivesearch.tpl new file mode 100644 index 0000000000..26e6ccf1b8 --- /dev/null +++ b/templates/admin/ticket/archivesearch.tpl @@ -0,0 +1,31 @@ +$header +
    + + + + + + + + + + + + + + + + + + $tickets + + + + + + +
     {$lng['ticket']['archivesearch']} 
    {$lng['ticket']['archivedtime']}{$lng['ticket']['ticket_answers']}{$lng['ticket']['subject']}{$lng['ticket']['lastreplier']}{$lng['ticket']['priority']}
    {$lng['ticket']['noresults']}
    +
    +
    +
    +$footer \ No newline at end of file diff --git a/templates/admin/ticket/categories.tpl b/templates/admin/ticket/categories.tpl new file mode 100644 index 0000000000..0d4cf31775 --- /dev/null +++ b/templates/admin/ticket/categories.tpl @@ -0,0 +1,34 @@ +$header +
    + + + + + + + + + + + + + + + + + + + $ticketcategories + + + + + + + + +
     {$lng['menue']['ticket']['categories']}{$searchcode}
    {$lng['ticket']['ticket_newcateory']}
    {$lng['ticket']['category']}  {$arrowcode['name']}{$lng['ticket']['ticketcount']}  {$arrowcode['ticketcount']}
    {$pagingcode}
    {$lng['ticket']['ticket_newcateory']}
    +
    +
    +
    +$footer \ No newline at end of file diff --git a/templates/admin/ticket/tickets.tpl b/templates/admin/ticket/tickets.tpl new file mode 100644 index 0000000000..d1a7ef0a35 --- /dev/null +++ b/templates/admin/ticket/tickets.tpl @@ -0,0 +1,40 @@ +$header +
    + + + + + + + + + + + + + + + + + + + + + + + $tickets + + + + + + + + + + +
     {$lng['menue']['ticket']['ticket']}{$searchcode}
    {$lng['ticket']['ticket_new']}
    {$lng['ticket']['lastchange']}  {$arrowcode['lastchange']}{$lng['ticket']['ticket_answers']}  {$arrowcode['ticket_answers']}{$lng['ticket']['subject']}  {$arrowcode['subject']}{$lng['ticket']['status']}  {$arrowcode['status']}{$lng['ticket']['lastreplier']}  {$arrowcode['lastreplier']}{$lng['ticket']['priority']}  {$arrowcode['priority']}
    {$pagingcode}
    {$lng['ticket']['ticket_new']}
    +
    +
    +
    +$footer \ No newline at end of file diff --git a/templates/admin/ticket/tickets_categories.tpl b/templates/admin/ticket/tickets_categories.tpl new file mode 100644 index 0000000000..7b45404886 --- /dev/null +++ b/templates/admin/ticket/tickets_categories.tpl @@ -0,0 +1,10 @@ + + {$row['name']} + {$row['ticketcount']} ({$row['ticketcountnotclosed']} {$lng['ticket']['open']} | {$closedtickets_count} {$lng['ticket']['closed']}) + + {$lng['panel']['edit']} + + + {$lng['panel']['delete']} + + diff --git a/templates/admin/ticket/tickets_customer.tpl b/templates/admin/ticket/tickets_customer.tpl new file mode 100644 index 0000000000..63c0293f7e --- /dev/null +++ b/templates/admin/ticket/tickets_customer.tpl @@ -0,0 +1,3 @@ + + {$customer} + diff --git a/templates/admin/ticket/tickets_editcategory.tpl b/templates/admin/ticket/tickets_editcategory.tpl new file mode 100644 index 0000000000..d70ee7eaf1 --- /dev/null +++ b/templates/admin/ticket/tickets_editcategory.tpl @@ -0,0 +1,22 @@ +$header +
    + + + + + + + + + + + + + + + +
     {$lng['ticket']['ticket_editcateory']}
    {$lng['ticket']['category']}:
    +
    +
    +
    +$footer \ No newline at end of file diff --git a/templates/admin/ticket/tickets_new.tpl b/templates/admin/ticket/tickets_new.tpl new file mode 100644 index 0000000000..49d1ca9414 --- /dev/null +++ b/templates/admin/ticket/tickets_new.tpl @@ -0,0 +1,39 @@ +$header +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
     {$lng['ticket']['ticket_new']}
    {$lng['ticket']['customer']}:
    {$lng['ticket']['subject']}:
    {$lng['ticket']['priority']}:
    {$lng['ticket']['category']}:
    {$lng['ticket']['message']}:
    +
    +
    +
    +$footer \ No newline at end of file diff --git a/templates/admin/ticket/tickets_newcategory.tpl b/templates/admin/ticket/tickets_newcategory.tpl new file mode 100644 index 0000000000..9cd17b4889 --- /dev/null +++ b/templates/admin/ticket/tickets_newcategory.tpl @@ -0,0 +1,21 @@ +$header +
    + + + + + + + + + + + + + + +
     {$lng['ticket']['ticket_newcateory']}
    {$lng['ticket']['category']}:
    +
    +
    +
    +$footer \ No newline at end of file diff --git a/templates/admin/ticket/tickets_reply.tpl b/templates/admin/ticket/tickets_reply.tpl new file mode 100644 index 0000000000..35f724df7b --- /dev/null +++ b/templates/admin/ticket/tickets_reply.tpl @@ -0,0 +1,51 @@ +$header +
    + + + + + + $ticket_replies + + + + + + + + + + + + + + + + + + + + + + + + + + + +
     {$lng['ticket']['ticket_reply']}
    {$lng['ticket']['subject']}:
    {$lng['ticket']['priority']}:
    {$lng['ticket']['category']}:{$row['name']}
    {$lng['ticket']['message']}:
    +
    + + + + + + + + +
     {$lng['ticket']['ticket_reopen']}
    {$lng['ticket']['ticket_reopen']}
    +
    +
    +
    +
    +$footer \ No newline at end of file diff --git a/templates/admin/ticket/tickets_tickets.tpl b/templates/admin/ticket/tickets_tickets.tpl new file mode 100644 index 0000000000..2825aa831a --- /dev/null +++ b/templates/admin/ticket/tickets_tickets.tpl @@ -0,0 +1,28 @@ + + {$row['lastchange']} + {$row['ticket_answers']} + {$row['subject']} + {$row['status']} + {$row['lastreplier']} + {$row['priority']} + + + {$lng['ticket']['show']} + {$lng['ticket']['answer']} + + + + + {$lng['ticket']['close']} + + + {$lng['ticket']['reopen']} + + + + {$lng['ticket']['archive']} + + + {$lng['panel']['delete']} + + diff --git a/templates/admin/ticket/tickets_tickets_list.tpl b/templates/admin/ticket/tickets_tickets_list.tpl new file mode 100644 index 0000000000..a7b6597910 --- /dev/null +++ b/templates/admin/ticket/tickets_tickets_list.tpl @@ -0,0 +1,11 @@ + + + + + + + + + + +
      {$lastchange} {$lng['ticket']['by']} {$by}
    {$subject}
    {$message}
    diff --git a/templates/admin/ticket/tickets_tickets_main.tpl b/templates/admin/ticket/tickets_tickets_main.tpl new file mode 100644 index 0000000000..5be972d535 --- /dev/null +++ b/templates/admin/ticket/tickets_tickets_main.tpl @@ -0,0 +1,11 @@ + + + + + + + + + + +
      {$lastchange} {$lng['ticket']['by']} {$by} ({$status})
    {$subject}
    {$message}
    \ No newline at end of file diff --git a/templates/admin/ticket/tickets_view.tpl b/templates/admin/ticket/tickets_view.tpl new file mode 100644 index 0000000000..ac07dd5f90 --- /dev/null +++ b/templates/admin/ticket/tickets_view.tpl @@ -0,0 +1,17 @@ +$header + + + + + + + +
     {$lng['ticket']['ticket_delete']}
    {$lng['panel']['delete']}
    +
    +
    + + $ticket_replies + +
    +
    +$footer \ No newline at end of file diff --git a/templates/customer/aps/askyesno.tpl b/templates/customer/aps/askyesno.tpl new file mode 100644 index 0000000000..651e7388a0 --- /dev/null +++ b/templates/customer/aps/askyesno.tpl @@ -0,0 +1,23 @@ + + + + + +
    + $Message +
    + + + + + $Ids +
    +
    +
    + + + +
    +
    +
    +
    diff --git a/templates/customer/aps/data.tpl b/templates/customer/aps/data.tpl new file mode 100644 index 0000000000..09219b23af --- /dev/null +++ b/templates/customer/aps/data.tpl @@ -0,0 +1,9 @@ + + + $Groupname + + + + $Fieldname + $Fieldvalue + diff --git a/templates/customer/aps/footer.tpl b/templates/customer/aps/footer.tpl new file mode 100644 index 0000000000..56ab96556e --- /dev/null +++ b/templates/customer/aps/footer.tpl @@ -0,0 +1 @@ +$footer diff --git a/templates/customer/aps/header.tpl b/templates/customer/aps/header.tpl new file mode 100644 index 0000000000..074878ca6f --- /dev/null +++ b/templates/customer/aps/header.tpl @@ -0,0 +1 @@ +$header diff --git a/templates/customer/aps/infobox.tpl b/templates/customer/aps/infobox.tpl new file mode 100644 index 0000000000..d8474350bf --- /dev/null +++ b/templates/customer/aps/infobox.tpl @@ -0,0 +1,7 @@ + + + + + +
    $Message
    +
    diff --git a/templates/customer/aps/installer.tpl b/templates/customer/aps/installer.tpl new file mode 100644 index 0000000000..ba32658be7 --- /dev/null +++ b/templates/customer/aps/installer.tpl @@ -0,0 +1,27 @@ +
    + + + + + + + + + + + + + + + $Data + + + +
     {$Xml->name}
    {$lng['aps']['install_wizard']} + +
    {$lng['aps']['wizard_error']}
    +
    +
    {$Xml->name} Icon
    + +
    +
    \ No newline at end of file diff --git a/templates/customer/aps/package.tpl b/templates/customer/aps/package.tpl new file mode 100644 index 0000000000..c718e1d394 --- /dev/null +++ b/templates/customer/aps/package.tpl @@ -0,0 +1,53 @@ + + + + + + + + + + + + $Data + + + +
     {$Xml->name}
    $Summary{$Xml->name} Icon
    {$lng['aps']['data']}
    + +
    + + + + + +
    +
    + +
    + + + + +
    +
    + +
    + + + + + +
    +
    + +
    + + + + + +
    +
    +
    +
    diff --git a/templates/customer/aps/package_status.tpl b/templates/customer/aps/package_status.tpl new file mode 100644 index 0000000000..d4b93403c6 --- /dev/null +++ b/templates/customer/aps/package_status.tpl @@ -0,0 +1,48 @@ + + + + + + + + + + + + $Data + + + +
     {$Xml->name}
    $Summary{$Xml->name} Icon
    {$lng['aps']['data']}
    + +
    + + + + + +
    +
    + +
    + + + + + +
    +
    + +
    + + + + + +
    +
    + + {$lng['aps']['waitfortask']} + +
    +
    \ No newline at end of file diff --git a/templates/customer/aps/search.tpl b/templates/customer/aps/search.tpl new file mode 100644 index 0000000000..c7257276b8 --- /dev/null +++ b/templates/customer/aps/search.tpl @@ -0,0 +1,18 @@ +
    + + + + + + + + + + + + + + +
     {$lng['aps']['search']}
    {$lng['aps']['search_description']}
    +
    +
    \ No newline at end of file diff --git a/templates/customer/domains/domainlist.tpl b/templates/customer/domains/domainlist.tpl new file mode 100644 index 0000000000..6518ec285f --- /dev/null +++ b/templates/customer/domains/domainlist.tpl @@ -0,0 +1,35 @@ +$header +
    + + + + + + + + + + + + + + + + + + $domains + + + + + + + + + + +
     {$lng['domains']['domainsettings']}{$searchcode}
    {$lng['domains']['subdomain_add']}
    {$lng['domains']['domainname']}  {$arrowcode['d.domain']}{$lng['panel']['path']}  {$arrowcode['d.documentroot']}
    {$pagingcode}
    {$lng['domains']['subdomain_add']}
    +
    +
    +
    +$footer \ No newline at end of file diff --git a/templates/customer/domains/domains.tpl b/templates/customer/domains/domains.tpl new file mode 100644 index 0000000000..85eb93ca4a --- /dev/null +++ b/templates/customer/domains/domains.tpl @@ -0,0 +1,12 @@ +$header + + + + + + + +
     {$lng['menue']['domains']['domains']}
    {$lng['domains']['description']}
    +
    +
    +$footer \ No newline at end of file diff --git a/templates/customer/domains/domains_add.tpl b/templates/customer/domains/domains_add.tpl new file mode 100644 index 0000000000..536db39568 --- /dev/null +++ b/templates/customer/domains/domains_add.tpl @@ -0,0 +1,50 @@ +$header +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
     {$lng['domains']['subdomain_add']}
    {$lng['domains']['domainname']}: .
    {$lng['domains']['aliasdomain']}:
    + {$lng['panel']['pathorurl']}:
    + {$lng['panel']['pathDescription']} +
    {$pathSelect}
    {$lng['panel']['path']}:{$pathSelect}
    {$lng['panel']['urloverridespath']}:
    SSL Redirect:$ssl_redirect
    {$lng['domain']['openbasedirpath']}:
    +
    +
    +
    +$footer \ No newline at end of file diff --git a/templates/customer/domains/domains_delimiter.tpl b/templates/customer/domains/domains_delimiter.tpl new file mode 100644 index 0000000000..6f3f6c8578 --- /dev/null +++ b/templates/customer/domains/domains_delimiter.tpl @@ -0,0 +1,3 @@ + +     {$row['domain']} [{$lng['domains']['statstics']}] + \ No newline at end of file diff --git a/templates/customer/domains/domains_domain.tpl b/templates/customer/domains/domains_domain.tpl new file mode 100644 index 0000000000..16f62e001e --- /dev/null +++ b/templates/customer/domains/domains_domain.tpl @@ -0,0 +1,6 @@ + + {$row['domain']} + {$row['documentroot']}{$lng['domains']['aliasdomain']} {$row['aliasdomain']} + {$lng['panel']['edit']} + {$lng['panel']['delete']}{$lng['domains']['isassigneddomain']}{$lng['domains']['hasaliasdomains']} + diff --git a/templates/customer/domains/domains_edit.tpl b/templates/customer/domains/domains_edit.tpl new file mode 100644 index 0000000000..4106902556 --- /dev/null +++ b/templates/customer/domains/domains_edit.tpl @@ -0,0 +1,59 @@ +$header +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
     {$lng['domains']['subdomain_edit']}
    {$lng['domains']['domainname']}:{$result['domain']}
    {$lng['domains']['aliasdomain']}:
    + {$lng['panel']['pathorurl']}:
    + {$lng['panel']['pathDescription']} +
    {$pathSelect}
    {$lng['panel']['path']}:{$pathSelect}
    {$lng['panel']['urloverridespath']}:
    {$lng['domains']['wildcarddomain']}$iswildcarddomain
    Emaildomain:$isemaildomain
    SSL Redirect:$ssl_redirect
    {$lng['domain']['openbasedirpath']}:
    +
    +
    +
    +$footer diff --git a/templates/customer/email/account_add.tpl b/templates/customer/email/account_add.tpl new file mode 100644 index 0000000000..8dcd034ad0 --- /dev/null +++ b/templates/customer/email/account_add.tpl @@ -0,0 +1,38 @@ +$header +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
     {$lng['emails']['account_add']}
    {$lng['emails']['emailaddress']}:{$result['email_full']}
    {$lng['login']['password']}:
    {$lng['emails']['quota']} ({$lng['panel']['megabyte']}):
    {$lng['emails']['alternative_emailaddress']}:
    +
    +
    +
    +$footer \ No newline at end of file diff --git a/templates/customer/email/account_changepw.tpl b/templates/customer/email/account_changepw.tpl new file mode 100644 index 0000000000..238fc9f7c2 --- /dev/null +++ b/templates/customer/email/account_changepw.tpl @@ -0,0 +1,26 @@ +$header +
    + + + + + + + + + + + + + + + + + + + +
     {$lng['menue']['main']['changepassword']}
    {$lng['emails']['emailaddress']}:{$result['email_full']}
    {$lng['login']['password']}:
    +
    +
    +
    +$footer \ No newline at end of file diff --git a/templates/customer/email/account_changequota.tpl b/templates/customer/email/account_changequota.tpl new file mode 100644 index 0000000000..1918aebd45 --- /dev/null +++ b/templates/customer/email/account_changequota.tpl @@ -0,0 +1,26 @@ +$header +
    + + + + + + + + + + + + + + + + + + + +
     {$lng['emails']['quota_edit']}
    {$lng['emails']['emailaddress']}:{$result['email_full']}
    {$lng['emails']['quota']} ({$lng['panel']['megabyte']}):
    +
    +
    +
    +$footer \ No newline at end of file diff --git a/templates/customer/email/autoresponder.tpl b/templates/customer/email/autoresponder.tpl new file mode 100644 index 0000000000..804b7930db --- /dev/null +++ b/templates/customer/email/autoresponder.tpl @@ -0,0 +1,19 @@ +$header + + + + + + + + + + + $autoresponder + + + +
     {$lng['menue']['email']['autoresponder']}
    {$lng['emails']['emailaddress']}{$lng['autoresponder']['active']}  
    {$lng['autoresponder']['autoresponder_add']}
    +
    +
    +$footer \ No newline at end of file diff --git a/templates/customer/email/autoresponder_add.tpl b/templates/customer/email/autoresponder_add.tpl new file mode 100644 index 0000000000..3e65e8d0e0 --- /dev/null +++ b/templates/customer/email/autoresponder_add.tpl @@ -0,0 +1,34 @@ +$header +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + +
     {$lng['autoresponder']['autoresponder_new']}
    {$lng['autoresponder']['account']}:
    {$lng['autoresponder']['active']}:
    {$lng['autoresponder']['subject']}:
    {$lng['autoresponder']['message']}:
    +
    +
    +
    +$footer \ No newline at end of file diff --git a/templates/customer/email/autoresponder_autoresponder.tpl b/templates/customer/email/autoresponder_autoresponder.tpl new file mode 100644 index 0000000000..5af542b43a --- /dev/null +++ b/templates/customer/email/autoresponder_autoresponder.tpl @@ -0,0 +1,6 @@ + + {$row['email']} + {$lng['panel']['yes']}{$lng['panel']['no']} + {$lng['panel']['edit']} + {$lng['panel']['delete']} + \ No newline at end of file diff --git a/templates/customer/email/autoresponder_edit.tpl b/templates/customer/email/autoresponder_edit.tpl new file mode 100644 index 0000000000..376652736c --- /dev/null +++ b/templates/customer/email/autoresponder_edit.tpl @@ -0,0 +1,35 @@ +$header +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
     {$lng['autoresponder']['autoresponder_edit']}
    {$lng['autoresponder']['account']}:{$email}
    {$lng['autoresponder']['active']}:
    {$lng['autoresponder']['subject']}:
    {$lng['autoresponder']['message']}:
    +
    +
    +
    +$footer \ No newline at end of file diff --git a/templates/customer/email/email.tpl b/templates/customer/email/email.tpl new file mode 100644 index 0000000000..1c1fb632c1 --- /dev/null +++ b/templates/customer/email/email.tpl @@ -0,0 +1,12 @@ +$header + + + + + + + +
     {$lng['menue']['email']['email']}
    {$lng['emails']['description']}
    +
    +
    +$footer \ No newline at end of file diff --git a/templates/customer/email/emails.tpl b/templates/customer/email/emails.tpl new file mode 100644 index 0000000000..28deffc490 --- /dev/null +++ b/templates/customer/email/emails.tpl @@ -0,0 +1,38 @@ +$header +
    + + + + + + + + + + + + + + + + + + + + + $accounts + + + + + + + + + + +
     {$lng['menue']['email']['emails']}{$searchcode}
    {$lng['emails']['emails_add']}
    {$lng['emails']['emailaddress']}  {$arrowcode['m.email_full']}{$lng['emails']['forwarders']}  {$arrowcode['m.destination']}{$lng['emails']['account']}{$lng['emails']['catchall']}{$lng['emails']['quota']}
    {$pagingcode}
    {$lng['emails']['emails_add']}
    +
    +
    +
    +$footer \ No newline at end of file diff --git a/templates/customer/email/emails_add.tpl b/templates/customer/email/emails_add.tpl new file mode 100644 index 0000000000..c07a05505d --- /dev/null +++ b/templates/customer/email/emails_add.tpl @@ -0,0 +1,25 @@ +$header +
    + + + + + + + + + + + + + + + + + + +
     {$lng['emails']['emails_add']}
    {$lng['emails']['emailaddress']}: @
    {$lng['emails']['iscatchall']}$iscatchall
    +
    +
    +
    +$footer \ No newline at end of file diff --git a/templates/customer/email/emails_domain.tpl b/templates/customer/email/emails_domain.tpl new file mode 100644 index 0000000000..b8a431be3c --- /dev/null +++ b/templates/customer/email/emails_domain.tpl @@ -0,0 +1,3 @@ + +     {$domainname} + \ No newline at end of file diff --git a/templates/customer/email/emails_edit.tpl b/templates/customer/email/emails_edit.tpl new file mode 100644 index 0000000000..201066fa22 --- /dev/null +++ b/templates/customer/email/emails_edit.tpl @@ -0,0 +1,46 @@ +$header + + + + + + + + + + + + + + + + + + + + + + + + + + +
     {$lng['emails']['emails_edit']}
    {$lng['emails']['emailaddress']}:{$result['email_full']}
    {$lng['emails']['account']}: + + {$lng['panel']['yes']} [{$lng['menue']['main']['changepassword']}] [{$lng['emails']['account_delete']}] + + + {$lng['panel']['no']} [{$lng['emails']['account_add']}] + +
    {$lng['customer']['email_quota']}:{$result['quota']} {$lng['panel']['megabyte']} [{$lng['emails']['quota_edit']}]
    {$lng['emails']['catchall']}: + + {$lng['panel']['yes']} + + + {$lng['panel']['no']} + + [{$lng['panel']['toggle']}] +
    {$lng['emails']['forwarders']} ({$forwarders_count}):$forwarders{$lng['emails']['forwarder_add']}
    +
    +
    +$footer \ No newline at end of file diff --git a/templates/customer/email/emails_edit_forwarder.tpl b/templates/customer/email/emails_edit_forwarder.tpl new file mode 100644 index 0000000000..7e5fe545de --- /dev/null +++ b/templates/customer/email/emails_edit_forwarder.tpl @@ -0,0 +1,2 @@ +$destination [{$lng['panel']['delete']}] +
    \ No newline at end of file diff --git a/templates/customer/email/emails_email.tpl b/templates/customer/email/emails_email.tpl new file mode 100644 index 0000000000..e16d4cf69b --- /dev/null +++ b/templates/customer/email/emails_email.tpl @@ -0,0 +1,9 @@ + + {$row['email_full']} +  {$row['destination']} + {$lng['panel']['yes']}{$lng['panel']['no']} + {$lng['panel']['yes']}{$lng['panel']['no']} + {$lng['emails']['noquota']}{$row['quota']} MB + {$lng['panel']['edit']} + {$lng['panel']['delete']} + diff --git a/templates/customer/email/forwarder_add.tpl b/templates/customer/email/forwarder_add.tpl new file mode 100644 index 0000000000..18f368c851 --- /dev/null +++ b/templates/customer/email/forwarder_add.tpl @@ -0,0 +1,26 @@ +$header +
    + + + + + + + + + + + + + + + + + + + +
     {$lng['emails']['forwarder_add']}
    {$lng['emails']['from']}:{$result['email_full']}
    {$lng['emails']['to']}:
    +
    +
    +
    +$footer \ No newline at end of file diff --git a/templates/customer/extras/extras.tpl b/templates/customer/extras/extras.tpl new file mode 100644 index 0000000000..c884b26b3c --- /dev/null +++ b/templates/customer/extras/extras.tpl @@ -0,0 +1,12 @@ +$header + + + + + + + +
     {$lng['menue']['extras']['extras']}
    {$lng['extras']['description']}
    +
    +
    +$footer \ No newline at end of file diff --git a/templates/customer/extras/htaccess.tpl b/templates/customer/extras/htaccess.tpl new file mode 100644 index 0000000000..bd36e11951 --- /dev/null +++ b/templates/customer/extras/htaccess.tpl @@ -0,0 +1,31 @@ +$header +
    + + + + + + + + + + + + + + + + $htaccess + + + + + + + + +
     {$lng['menue']['extras']['pathoptions']}{$searchcode}
    {$lng['panel']['path']}  {$arrowcode['path']}{$lng['extras']['view_directory']}  {$arrowcode['options_indexes']}{$lng['extras']['error404path']}  {$arrowcode['error404path']}{$lng['extras']['error403path']}  {$arrowcode['error403path']}{$lng['extras']['error500path']}  {$arrowcode['error500path']}
    {$pagingcode}
    {$lng['extras']['pathoptions_add']}
    +
    +
    +
    +$footer \ No newline at end of file diff --git a/templates/customer/extras/htaccess_add.tpl b/templates/customer/extras/htaccess_add.tpl new file mode 100644 index 0000000000..96df19802b --- /dev/null +++ b/templates/customer/extras/htaccess_add.tpl @@ -0,0 +1,44 @@ +$header +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
     {$lng['extras']['pathoptions_add']}
    + {$lng['panel']['path']}:
    + {$lng['panel']['pathDescription']} +
    {$pathSelect}
    {$lng['extras']['directory_browsing']}:$options_indexes
    {$lng['extras']['errordocument404path']}:
    {$lng['panel']['emptyfordefault']}
    {$lng['extras']['errordocument403path']}:
    {$lng['panel']['emptyfordefault']} +
    {$lng['panel']['not_supported']}lighttpd
    +
    {$lng['extras']['errordocument500path']}:
    {$lng['panel']['emptyfordefault']} +
    {$lng['panel']['not_supported']}lighttpd
    +
    +
    +
    +
    +$footer diff --git a/templates/customer/extras/htaccess_edit.tpl b/templates/customer/extras/htaccess_edit.tpl new file mode 100644 index 0000000000..ffba397e59 --- /dev/null +++ b/templates/customer/extras/htaccess_edit.tpl @@ -0,0 +1,42 @@ +$header +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
     {$lng['extras']['pathoptions_edit']}
    {$lng['panel']['path']}:{$result['path']}
    {$lng['extras']['directory_browsing']}:$options_indexes
    {$lng['extras']['errordocument404path']}:
    {$lng['panel']['emptyfordefault']}
    {$lng['extras']['errordocument403path']}:
    {$lng['panel']['emptyfordefault']} +
    {$lng['panel']['not_supported']}lighttpd
    +
    {$lng['extras']['errordocument500path']}:
    {$lng['panel']['emptyfordefault']} +
    {$lng['panel']['not_supported']}lighttpd
    +
    +
    +
    +
    +$footer diff --git a/templates/customer/extras/htaccess_htaccess.tpl b/templates/customer/extras/htaccess_htaccess.tpl new file mode 100644 index 0000000000..6446cf75b2 --- /dev/null +++ b/templates/customer/extras/htaccess_htaccess.tpl @@ -0,0 +1,9 @@ + + {$row['path']} + {$row['options_indexes']} + {$row['error404path']} + {$row['error403path']} + {$row['error500path']} + {$lng['panel']['edit']} + {$lng['panel']['delete']} + diff --git a/templates/customer/extras/htpasswds.tpl b/templates/customer/extras/htpasswds.tpl new file mode 100644 index 0000000000..0b80be8c09 --- /dev/null +++ b/templates/customer/extras/htpasswds.tpl @@ -0,0 +1,28 @@ +$header +
    + + + + + + + + + + + + + $htpasswds + + + + + + + + +
     {$lng['menue']['extras']['directoryprotection']}{$searchcode}
    {$lng['login']['username']}  {$arrowcode['username']}{$lng['panel']['path']}  {$arrowcode['path']}
    {$pagingcode}
    {$lng['extras']['directoryprotection_add']}
    +
    +
    +
    +$footer \ No newline at end of file diff --git a/templates/customer/extras/htpasswds_add.tpl b/templates/customer/extras/htpasswds_add.tpl new file mode 100644 index 0000000000..fa72c646dc --- /dev/null +++ b/templates/customer/extras/htpasswds_add.tpl @@ -0,0 +1,32 @@ +$header +
    + + + + + + + + + + + + + + + + + + + + + + +
     {$lng['extras']['directoryprotection_add']}
    + {$lng['panel']['path']}:
    + {$lng['panel']['pathDescription']} +
    {$pathSelect}
    {$lng['login']['username']}:
    {$lng['login']['password']}:
    +
    +
    +
    +$footer \ No newline at end of file diff --git a/templates/customer/extras/htpasswds_edit.tpl b/templates/customer/extras/htpasswds_edit.tpl new file mode 100644 index 0000000000..6d6bfe69a7 --- /dev/null +++ b/templates/customer/extras/htpasswds_edit.tpl @@ -0,0 +1,30 @@ +$header +
    + + + + + + + + + + + + + + + + + + + + + + + +
     {$lng['menue']['main']['changepassword']}
    {$lng['panel']['path']}:{$result['path']}
    {$lng['login']['username']}:{$result['username']}
    {$lng['login']['password']}:
    +
    +
    +
    +$footer \ No newline at end of file diff --git a/templates/customer/extras/htpasswds_htpasswd.tpl b/templates/customer/extras/htpasswds_htpasswd.tpl new file mode 100644 index 0000000000..215de35883 --- /dev/null +++ b/templates/customer/extras/htpasswds_htpasswd.tpl @@ -0,0 +1,6 @@ + + {$row['username']} + {$row['path']} + {$lng['menue']['main']['changepassword']} + {$lng['panel']['delete']} + diff --git a/templates/customer/ftp/accounts.tpl b/templates/customer/ftp/accounts.tpl new file mode 100644 index 0000000000..1304714656 --- /dev/null +++ b/templates/customer/ftp/accounts.tpl @@ -0,0 +1,36 @@ +$header +
    + + + + + + + + + + + + + + + + + + + $accounts + + + + + + + + + + +
     {$lng['menue']['ftp']['accounts']}{$searchcode}
    {$lng['ftp']['account_add']}
    {$lng['login']['username']}  {$arrowcode['username']}{$lng['panel']['path']}  {$arrowcode['homedir']}
    {$pagingcode}
    {$lng['ftp']['account_add']}
    +
    +
    +
    +$footer \ No newline at end of file diff --git a/templates/customer/ftp/accounts_account.tpl b/templates/customer/ftp/accounts_account.tpl new file mode 100644 index 0000000000..6f78174c90 --- /dev/null +++ b/templates/customer/ftp/accounts_account.tpl @@ -0,0 +1,6 @@ + + {$row['username']} + {$row['documentroot']} + {$lng['menue']['main']['changepassword']} + {$lng['panel']['delete']} + diff --git a/templates/customer/ftp/accounts_add.tpl b/templates/customer/ftp/accounts_add.tpl new file mode 100644 index 0000000000..bcea32f4da --- /dev/null +++ b/templates/customer/ftp/accounts_add.tpl @@ -0,0 +1,35 @@ +$header +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
     {$lng['ftp']['account_add']}
    {$lng['login']['username']}:
    {$lng['domains']['domainname']}:
    {$lng['panel']['path']}:
    {$lng['panel']['pathDescription']}
    {$pathSelect}
    {$lng['login']['password']}:
    +
    +
    +
    +$footer diff --git a/templates/customer/ftp/accounts_edit.tpl b/templates/customer/ftp/accounts_edit.tpl new file mode 100644 index 0000000000..6172958397 --- /dev/null +++ b/templates/customer/ftp/accounts_edit.tpl @@ -0,0 +1,26 @@ +$header +
    + + + + + + + + + + + + + + + + + + + +
     {$lng['menue']['main']['changepassword']}
    {$lng['login']['username']}:{$result['username']}
    {$lng['login']['password']}:
    +
    +
    +
    +$footer \ No newline at end of file diff --git a/templates/customer/ftp/ftp.tpl b/templates/customer/ftp/ftp.tpl new file mode 100644 index 0000000000..ff0bd0fcaa --- /dev/null +++ b/templates/customer/ftp/ftp.tpl @@ -0,0 +1,12 @@ +$header + + + + + + + +
     {$lng['menue']['ftp']['ftp']}
    {$lng['ftp']['description']}
    +
    +
    +$footer \ No newline at end of file diff --git a/templates/customer/index/change_language.tpl b/templates/customer/index/change_language.tpl new file mode 100644 index 0000000000..429686a1d8 --- /dev/null +++ b/templates/customer/index/change_language.tpl @@ -0,0 +1,23 @@ +$header +
    + + + + + + + + + + + + + + + + +
     {$lng['menue']['main']['changelanguage']}
    {$lng['login']['language']}
    +
    +
    +
    +$footer \ No newline at end of file diff --git a/templates/customer/index/change_password.tpl b/templates/customer/index/change_password.tpl new file mode 100644 index 0000000000..4313dd68a5 --- /dev/null +++ b/templates/customer/index/change_password.tpl @@ -0,0 +1,37 @@ +$header +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
     {$lng['menue']['main']['changepassword']}
    {$lng['changepassword']['old_password']}:
    {$lng['changepassword']['new_password']}:
    {$lng['changepassword']['new_password_confirm']}:
    {$lng['changepassword']['also_change_ftp']}
    {$lng['changepassword']['also_change_webalizer']}
    +
    +
    +
    +$footer \ No newline at end of file diff --git a/templates/customer/index/index.tpl b/templates/customer/index/index.tpl new file mode 100644 index 0000000000..f5997ee0f8 --- /dev/null +++ b/templates/customer/index/index.tpl @@ -0,0 +1,99 @@ +$header + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
     {$lng['index']['customerdetails']}
    {$lng['customer']['name']}:{$userinfo['firstname']} {$userinfo['name']}
    {$lng['customer']['company']}:{$userinfo['company']}
    {$lng['customer']['street']}:{$userinfo['street']}
    {$lng['customer']['zipcode']}/{$lng['customer']['city']}:{$userinfo['zipcode']} {$userinfo['city']}
    {$lng['customer']['email']}:{$userinfo['email']}
    {$lng['customer']['customernumber']}:{$userinfo['customernumber']}
     {$lng['index']['accountdetails']}
    {$lng['login']['username']}:{$userinfo['loginname']}
    {$lng['customer']['domains']}:$domains
    {$lng['customer']['subdomains']}:{$userinfo['subdomains_used']} ({$userinfo['subdomains']})
    {$lng['customer']['diskspace']}:{$userinfo['diskspace_used']} ({$userinfo['diskspace']})
    {$lng['customer']['traffic']} ($month):{$userinfo['traffic_used']} ({$userinfo['traffic']})
    {$lng['customer']['emails']}:{$userinfo['emails_used']} ({$userinfo['emails']})
    {$lng['customer']['accounts']}:{$userinfo['email_accounts_used']} ({$userinfo['email_accounts']})
    {$lng['customer']['forwarders']}:{$userinfo['email_forwarders_used']} ({$userinfo['email_forwarders']})
    {$lng['customer']['email_quota']} ({$lng['panel']['megabyte']}):{$userinfo['email_quota_used']} ({$userinfo['email_quota']})
    {$lng['customer']['mysqls']}:{$userinfo['mysqls_used']} ({$userinfo['mysqls']})
    {$lng['customer']['ftps']}:{$userinfo['ftps_used']} ({$userinfo['ftps']})
    {$lng['aps']['numberofapspackages']}:{$userinfo['aps_packages_used']} ({$userinfo['aps_packages']})
    {$lng['customer']['tickets']}:{$userinfo['tickets_used']} ({$userinfo['tickets']})
    {$awaitingtickets_text}
    +
    +
    +$footer \ No newline at end of file diff --git a/templates/customer/mysql/mysql.tpl b/templates/customer/mysql/mysql.tpl new file mode 100644 index 0000000000..356eee9a8d --- /dev/null +++ b/templates/customer/mysql/mysql.tpl @@ -0,0 +1,12 @@ +$header + + + + + + + +
     {$lng['menue']['mysql']['mysql']}
    {$lng['mysql']['description']}
    +
    +
    +$footer \ No newline at end of file diff --git a/templates/customer/mysql/mysqls.tpl b/templates/customer/mysql/mysqls.tpl new file mode 100644 index 0000000000..68d0856567 --- /dev/null +++ b/templates/customer/mysql/mysqls.tpl @@ -0,0 +1,36 @@ +$header +
    + + + + + + + + + + + + + + + + + + + $mysqls + + + + + + + + + + +
     {$lng['menue']['mysql']['databases']}{$searchcode}
    {$lng['mysql']['database_create']}
    {$lng['mysql']['databasename']}  {$arrowcode['databasename']}{$lng['mysql']['databasedescription']}  {$arrowcode['description']}{$lng['mysql']['mysql_server']}
    {$pagingcode}
    {$lng['mysql']['database_create']}
    +
    +
    +
    +$footer \ No newline at end of file diff --git a/templates/customer/mysql/mysqls_add.tpl b/templates/customer/mysql/mysqls_add.tpl new file mode 100644 index 0000000000..61bd632830 --- /dev/null +++ b/templates/customer/mysql/mysqls_add.tpl @@ -0,0 +1,31 @@ +$header +
    + + + + + + + + + + + + + + + + + + + + + + + + +
     {$lng['mysql']['database_create']}
    {$lng['mysql']['databasedescription']}:
    {$lng['mysql']['mysql_server']}:
    {$lng['login']['password']}:
    +
    +
    +
    +$footer \ No newline at end of file diff --git a/templates/customer/mysql/mysqls_database.tpl b/templates/customer/mysql/mysqls_database.tpl new file mode 100644 index 0000000000..073e3d6ef5 --- /dev/null +++ b/templates/customer/mysql/mysqls_database.tpl @@ -0,0 +1,7 @@ + + {$row['databasename']} + {$row['description']} + {$sql_root[$row['dbserver']]['caption']} + {$lng['panel']['edit']} + {$lng['panel']['delete']} + diff --git a/templates/customer/mysql/mysqls_edit.tpl b/templates/customer/mysql/mysqls_edit.tpl new file mode 100644 index 0000000000..aab89d3af6 --- /dev/null +++ b/templates/customer/mysql/mysqls_edit.tpl @@ -0,0 +1,36 @@ +$header +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
     {$lng['menue']['main']['changepassword']}
    {$lng['mysql']['databasename']}:{$result['databasename']}
    {$lng['mysql']['databasedescription']}:
    {$lng['mysql']['mysql_server']}:{$sql_root[$result['dbserver']]['caption']}
    {$lng['changepassword']['new_password_ifnotempty']}:
    +
    +
    +
    +$footer \ No newline at end of file diff --git a/templates/customer/ticket/ticket.tpl b/templates/customer/ticket/ticket.tpl new file mode 100644 index 0000000000..976ebbb9d2 --- /dev/null +++ b/templates/customer/ticket/ticket.tpl @@ -0,0 +1,12 @@ +$header + + + + + + + +
     {$lng['menue']['ticket']['ticket']}
    {$lng['ticket']['description']}
    +
    +
    +$footer \ No newline at end of file diff --git a/templates/customer/ticket/tickets.tpl b/templates/customer/ticket/tickets.tpl new file mode 100644 index 0000000000..977805a379 --- /dev/null +++ b/templates/customer/ticket/tickets.tpl @@ -0,0 +1,58 @@ +$header +
    + + + + + + + + + + + +
     {$lng['ticket']['supportstatus']} 
    + + {$lng['ticket']['supportavailable']} + + + {$lng['ticket']['supportnotavailable']} + +
    +
    +
    + + + + + + + + + + + + + + + + + + + + $tickets + + + + + + + + + + +
     {$lng['menue']['ticket']['ticket']}{$searchcode}
    {$lng['ticket']['ticket_new']}
    {$lng['ticket']['lastchange']}  {$arrowcode['lastchange']}{$lng['ticket']['ticket_answers']}  {$arrowcode['ticket_answers']}{$lng['ticket']['subject']}  {$arrowcode['subject']}{$lng['ticket']['status']}  {$arrowcode['status']}{$lng['ticket']['lastreplier']}  {$arrowcode['lastreplier']}{$lng['ticket']['priority']}  {$arrowcode['priority']}
    {$pagingcode}
    {$lng['ticket']['ticket_new']}
    +
    +
    +
    +$footer \ No newline at end of file diff --git a/templates/customer/ticket/tickets_new.tpl b/templates/customer/ticket/tickets_new.tpl new file mode 100644 index 0000000000..5282e42501 --- /dev/null +++ b/templates/customer/ticket/tickets_new.tpl @@ -0,0 +1,35 @@ +$header +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
     {$lng['ticket']['ticket_new']}
    {$lng['ticket']['subject']}:
    {$lng['ticket']['priority']}:
    {$lng['ticket']['category']}:
    {$lng['ticket']['message']}:
    +
    +
    +
    +$footer \ No newline at end of file diff --git a/templates/customer/ticket/tickets_reply.tpl b/templates/customer/ticket/tickets_reply.tpl new file mode 100644 index 0000000000..f9e52cbd0f --- /dev/null +++ b/templates/customer/ticket/tickets_reply.tpl @@ -0,0 +1,51 @@ +$header +
    + + + + + + $ticket_replies + + + + + + + + + + + + + + + + + + + + + + + + + + + +
     {$lng['ticket']['ticket_reply']}
    {$lng['ticket']['subject']}:
    {$lng['ticket']['priority']}:
    {$lng['ticket']['category']}:{$row['name']}
    {$lng['ticket']['message']}:
    +
    + + + + + + + + +
     {$lng['ticket']['ticket_reopen']}
    {$lng['ticket']['ticket_reopen']}
    +
    +
    +
    +
    +$footer \ No newline at end of file diff --git a/templates/customer/ticket/tickets_tickets.tpl b/templates/customer/ticket/tickets_tickets.tpl new file mode 100644 index 0000000000..1a07cfe2fa --- /dev/null +++ b/templates/customer/ticket/tickets_tickets.tpl @@ -0,0 +1,22 @@ + + {$row['lastchange']} + {$row['ticket_answers']} + {$row['subject']} + {$row['status']} + {$row['lastreplier']} + {$row['priority']} + + + {$lng['ticket']['show']} + {$lng['ticket']['answer']} + + + + + {$lng['ticket']['close']} + + + {$lng['ticket']['reopen']} + + + diff --git a/templates/customer/ticket/tickets_tickets_list.tpl b/templates/customer/ticket/tickets_tickets_list.tpl new file mode 100644 index 0000000000..e8e1627f95 --- /dev/null +++ b/templates/customer/ticket/tickets_tickets_list.tpl @@ -0,0 +1,11 @@ + + + + + + + + + + +
      {$lastchange} von {$by}
    {$subject}
    {$message}
    \ No newline at end of file diff --git a/templates/customer/ticket/tickets_tickets_main.tpl b/templates/customer/ticket/tickets_tickets_main.tpl new file mode 100644 index 0000000000..31be3f32d2 --- /dev/null +++ b/templates/customer/ticket/tickets_tickets_main.tpl @@ -0,0 +1,11 @@ + + + + + + + + + + +
      {$lastchange} von {$by} ({$status})
    {$subject}
    {$message}
    \ No newline at end of file diff --git a/templates/customer/traffic/traffic.tpl b/templates/customer/traffic/traffic.tpl new file mode 100644 index 0000000000..f3070aea20 --- /dev/null +++ b/templates/customer/traffic/traffic.tpl @@ -0,0 +1,30 @@ +$header + + + + + + + + + + + + + $traffic +
     {$lng['menue']['traffic']['traffic']}
    + + + + + + + + + + + +
    {$lng['traffic']['sumftp']} GB{$lng['traffic']['sumhttp']} GB{$lng['traffic']['summail']} GB
    {$traffic_complete['ftp']}
    {$traffic_complete['http']}
    {$traffic_complete['mail']}
    +
    {$lng['traffic']['month']}{$lng['traffic']['distribution']}{$lng['customer']['traffic']}
    +$footer + diff --git a/templates/customer/traffic/traffic_details.tpl b/templates/customer/traffic/traffic_details.tpl new file mode 100644 index 0000000000..912d3f3437 --- /dev/null +++ b/templates/customer/traffic/traffic_details.tpl @@ -0,0 +1,30 @@ +$header + + + + + + + + + + + + + $traffic +
     {$lng['menue']['traffic']['traffic']} $show
    + + + + + + + + + + + +
    {$lng['traffic']['sumftp']} MB{$lng['traffic']['sumhttp']} MB{$lng['traffic']['summail']} MB
    {$traffic_complete['ftp']}
    {$traffic_complete['http']}
    {$traffic_complete['mail']}
    +
    {$lng['traffic']['day']}{$lng['traffic']['distribution']}{$lng['traffic']['mb']}
    +$footer + diff --git a/templates/customer/traffic/traffic_month.tpl b/templates/customer/traffic/traffic_month.tpl new file mode 100644 index 0000000000..1b8086cc3a --- /dev/null +++ b/templates/customer/traffic/traffic_month.tpl @@ -0,0 +1,5 @@ + + {$traf['day']}.   +

    + {$traf['byte']} + diff --git a/templates/customer/traffic/traffic_traffic.tpl b/templates/customer/traffic/traffic_traffic.tpl new file mode 100644 index 0000000000..a02092b91b --- /dev/null +++ b/templates/customer/traffic/traffic_traffic.tpl @@ -0,0 +1,7 @@ + + + {$traf['monthname']} + + {$traf['ftptext']}
    {$traf['httptext']}
    {$traf['mailtext']} + {$traf['byte']} + diff --git a/templates/footer.tpl b/templates/footer.tpl new file mode 100644 index 0000000000..9762ede70a --- /dev/null +++ b/templates/footer.tpl @@ -0,0 +1,21 @@ + + + + + + + +
    + + diff --git a/templates/formfields/bool.tpl b/templates/formfields/bool.tpl new file mode 100644 index 0000000000..a77415bd4c --- /dev/null +++ b/templates/formfields/bool.tpl @@ -0,0 +1,4 @@ + + {$label} + checked="checked" /> + diff --git a/templates/formfields/hidden.tpl b/templates/formfields/hidden.tpl new file mode 100644 index 0000000000..726c90a24d --- /dev/null +++ b/templates/formfields/hidden.tpl @@ -0,0 +1,4 @@ + + {$label} + {$fielddata['value']} + diff --git a/templates/formfields/label.tpl b/templates/formfields/label.tpl new file mode 100644 index 0000000000..9c9e55a4e3 --- /dev/null +++ b/templates/formfields/label.tpl @@ -0,0 +1,3 @@ + + $label + diff --git a/templates/formfields/option.tpl b/templates/formfields/option.tpl new file mode 100644 index 0000000000..8e2ece24fc --- /dev/null +++ b/templates/formfields/option.tpl @@ -0,0 +1,4 @@ + + valign="top">{$label} + + diff --git a/templates/formfields/string.tpl b/templates/formfields/string.tpl new file mode 100644 index 0000000000..43c169f3a6 --- /dev/null +++ b/templates/formfields/string.tpl @@ -0,0 +1,4 @@ + + {$label} + + diff --git a/templates/formfields/text.tpl b/templates/formfields/text.tpl new file mode 100644 index 0000000000..c9bce8dd84 --- /dev/null +++ b/templates/formfields/text.tpl @@ -0,0 +1,4 @@ + + {$label} + + diff --git a/templates/header.tpl b/templates/header.tpl new file mode 100644 index 0000000000..78c2c99c57 --- /dev/null +++ b/templates/header.tpl @@ -0,0 +1,39 @@ + + + + + + + + + + <if isset($userinfo['loginname']) && $userinfo['loginname'] != ''>{$userinfo['loginname']} - </if>SysCP + + onload="document.loginform.loginname.focus()"> + + + + + + + +
     
    + + + + + +
    $navigation
      + + + +
    +
    diff --git a/templates/login/fpwd.tpl b/templates/login/fpwd.tpl new file mode 100644 index 0000000000..d77af1978d --- /dev/null +++ b/templates/login/fpwd.tpl @@ -0,0 +1,44 @@ +$header +
    +
    + + + + + + + + + + +
      {$lng['error']['error']}/{$lng['error']['info']}
    $message
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + +
     SysCP - {$lng['login']['presend']}
    {$lng['login']['username']}:
    {$lng['login']['email']}:
    {$lng['login']['backtologin']}
    +
    +
    +
    +
    +
    +$footer \ No newline at end of file diff --git a/templates/login/login.tpl b/templates/login/login.tpl new file mode 100644 index 0000000000..357207415e --- /dev/null +++ b/templates/login/login.tpl @@ -0,0 +1,47 @@ +$header +
    +
    + + + + + + + + + +
      {$lng['error']['error']}/{$lng['error']['info']}
    $message
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + +
     SysCP - Login
    {$lng['login']['username']}:
    {$lng['login']['password']}:
    {$lng['login']['language']}:
    {$lng['login']['forgotpwd']}
    +
    +
    +
    +
    +$footer diff --git a/templates/main.css b/templates/main.css new file mode 100644 index 0000000000..100fa0db8e --- /dev/null +++ b/templates/main.css @@ -0,0 +1,438 @@ +body { + color : #000000; + font-family : Verdana, Arial, Helvetica, sans-serif; + font-size : 12px; +} + +.header { + background-image : url( '../images/header_r.gif' ); + background-repeat : repeat-x; +} + +.footer { + text-align : center; + border-color : #EBECF5; + border-style : solid; + border-width : 1px; + border-right : none; + border-left : none; + background : url('../images/footer.gif') repeat-y #FFFFFF; +} + +a,a:visited,a:active { + color : #000000; + text-decoration : underline; +} + +a:hover { + color : #F89826; + text-decoration : none; +} + +input { + color : black; + text-decoration : none; + font-family : Verdana, Arial, Helvetica, sans-serif; + font-size : 12px; + font-weight : bold; + border : 1px solid #ABC9E8; + background-color : #C6DEFF; +} + +input.text { + color : black; + text-decoration : none; + font-family : Verdana, Arial, Helvetica, sans-serif; + font-size : 12px; + font-weight : bold; + border : 1px solid #ABC9E8; + background-color : #C6DEFF; + width : 95%; +} + +input.textul { + color : black; + text-decoration : none; + font-family : Verdana, Arial, Helvetica, sans-serif; + font-size : 12px; + font-weight : bold; + border : 1px solid #ABC9E8; + background-color : #C6DEFF; + width : 55%; +} + +select,textarea { + color : black; + text-decoration : none; + font-family : Verdana, Arial, Helvetica, sans-serif; + font-size : 12px; + font-weight : bold; + border : 1px solid #B7B7B7; + background-color : #C6DEFF; +} + +input.bottom { + color : black; + text-decoration : none; + font-family : Verdana, Arial, Helvetica, sans-serif; + font-size : 12px; + font-weight : bold; + border : 1px solid #000000; + background-color : #C6DEFF; +} + +.title { + background-color : #ABC9E8; + border-color : #B7B7B7; + border-style : solid; + border-width : 1px; + border-top : none; + text-align : left; +} + +.line_shadow { + background-image : url( '../images/shadow.gif' ); + background-repeat : repeat-y; + background-position : top left; +} + +.section { + height : 25px; + background-image : url( '../images/section.gif' ); +} + +.subsection { + padding-top : 8px; + background-image : url( '../images/subsection.gif' ); +} + +.endsection { + height : 10px; + background-image : url( '../images/endsection.gif' ); + background-position : bottom; +} + +.maintable { + width : 90%; +} + +.maintable_60 { + width : 60%; +} + +.maintable_40 { + width : 40%; +} + +.maintitle { + width : 90%; + background-color : #ABC9E8; + border-color : #000000; + border-style : solid; + border-width : 1px; + text-align : left; + font-size : 1.3em; +} + +.main_field_name { + width : 50%; + background-color : #EBECF5; + border-color : #B7B7B7; + border-style : solid; + border-width : 1px; + text-align : left; +} + +.main_field_confirm { + width : 84%; + background-color : #EBECF5; + border-color : #B7B7B7; + border-style : solid; + border-width : 1px; + text-align : right; +} + +.field_name { + background-color : #EBECF5; + border-color : #B7B7B7; + border-style : solid; + border-width : 1px; + text-align : left; + border-top : none; + border-left : none; +} + +.field_name_foggy { /*nomecampo*/ + color : #555; + text-decoration : line-through; + background-color : #EBECF5; + border-color : #B7B7B7; + border-style : solid; + border-width : 1px; + text-align : left; + border-top : none; + border-left : none; +} + +.field_name_red { /*nomecampo*/ + background-color : #FFA0A0; + border-color : #B7B7B7; + border-style : solid; + border-width : 1px; + text-align : left; + border-top : none; + border-left : none; +} + +.field_name_nobordersmall { + background-color : #EBECF5; + border-color : #B7B7B7; + border-style : solid; + border-width : 1px; + text-align : left; + border-top : none; + border-bottom : none; +} + +.field_name_center { + background-color : #EBECF5; + border-color : #B7B7B7; + border-style : solid; + border-width : 1px; + text-align : center; + border-top : none; +} + +.field_name_center_noborder { + height : 30px; + background-color : #EBECF5; + border-color : #B7B7B7; + border-style : solid; + border-width : 1px; + text-align : center; + border-top : none; + border-right : none; +} + +.field_name_border_left { + background-color : #EBECF5; + border-color : #B7B7B7; + border-style : solid; + border-width : 1px; + text-align : left; + border-top : none; +} + +.field_name_border_left_foggy { /*nomecampo_bordosx*/ + color : #555; + text-decoration : line-through; + background-color : #EBECF5; + border-color : #B7B7B7; + border-style : solid; + border-width : 1px; + text-align : left; + border-top : none; +} + +.field_name_border_left_red { /*nomecampo_bordosx*/ + background-color : #FFA0A0; + border-color : #B7B7B7; + border-style : solid; + border-width : 1px; + text-align : left; + border-top : none; +} + +.field_name_search { + background-color : #EBECF5; + border-color : #B7B7B7; + border-style : solid; + border-width : 1px; + border-top : none; + border-left : none; + text-align : right; +} + +.main_field_display_red { /*install_campodisplay*/ + width : 6%; + background-color : #FFA0A0; + border-color : #B7B7B7; + border-style : solid; + border-width : 1px; +} + +.main_field_display { + width : 50%; + background-color : #C6DEFF; + border-color : #B7B7B7; + border-style : solid; + border-width : 1px; +} + +.main_field_display_small { + width : 25%; + background-color : #C6DEFF; + border-color : #B7B7B7; + border-style : solid; + border-width : 1px; +} + +.field_display { + background-color : #C6DEFF; + border-color : #B7B7B7; + border-style : solid; + border-width : 1px; + border-top : none; + border-left : none; +} + +.field_display_search { + background-color : #C6DEFF; + border-color : #B7B7B7; + border-style : solid; + border-width : 1px; + border-top : none; + border-left : none; + text-align : right; +} + +.field_display_border_left { + background-color : #C6DEFF; + border-color : #B7B7B7; + border-style : solid; + border-width : 1px; + border-top : none; +} + +.field_display_nobordersmall { + background-color : #C6DEFF; + border-color : #B7B7B7; + border-style : solid; + border-width : 1px; + border-top : none; + border-left : none; + border-bottom : none; +} + +select.dropdown_noborder { + color : black; + text-decoration : none; + font-family : Verdana, Arial, Helvetica, sans-serif; + font-size : 12px; + font-weight : bold; + border : 0px solid #B7B7B7; + background-color : #C6DEFF; +} + +textarea.textarea_noborder { + color : black; + text-decoration : none; + font-family : Verdana, Arial, Helvetica, sans-serif; + font-size : 12px; + font-weight : bold; + border : 0px solid #B7B7B7; + background-color : #C6DEFF; +} + +textarea.textarea_border { + width : 95%; + color : black; + text-decoration : none; + font-family : Verdana, Arial, Helvetica, sans-serif; + font-size : 12px; + font-weight : bold; + border : 1px solid #B7B7B7; + background-color : #C6DEFF; +} + +.maintitle_search_left { + background-color : #ABC9E8; + border-color : #000000; + border-style : solid; + border-width : 1px; + border-right-width : 0px; + text-align : left; + font-size : 1.3em; +} + +.maintitle_search_right { + background-color : #ABC9E8; + border-color : #000000; + border-style : solid; + border-width : 1px; + border-left-width : 0px; + text-align : right; +} + + +.maintitle_apply_left { + background-color : #ABC9E8; + border-color : #000000; + border-style : solid; + border-width : 1px; + text-align : left; +} + +.maintitle_apply_right { + background-color : #ABC9E8; + border-color : #000000; + border-style : solid; + border-width : 1px; + text-align : right; +} + +.ticket_high { + color : #ff0000; + font-weight : bold; +} + +.ticket_normal { + color : #ff9a38; + font-weight : bold; +} + +.ticket_low { + color : #5bc949; + font-weight : bold; +} + +TR { + background-color : #EBECF5; +} + +TR.RowOverSelected { + background-color : #FFFFFF; +} + +/* ADDED WITH APS INSTALLER */ + +.dataerror +{ + font-weight: bold; + color: #DD2222; + margin: 15px; + padding: 20px 20px 20px 60px; + background-color: #f1baba; + border: 1px solid #ce1d1d; + background-image: url('../images/error.png'); + background-repeat: no-repeat; + background-position: 15px 50%; +} + +.fielderror +{ + font-weight: bold; + color: #DD2222; + background-color: #f1baba; + border: 1px solid #DD2222; + padding: 8px; + margin: 8px 0 8px 0; +} + +.pageitem +{ + padding: 6px; + border: 1px solid #666666; + margin-right: 3px; + background-color: #C6DEFF; +} diff --git a/templates/misc/configfiles/debian_etch/awstats/etc_apache_vhosts_05_awstats.conf b/templates/misc/configfiles/debian_etch/awstats/etc_apache_vhosts_05_awstats.conf new file mode 100644 index 0000000000..2c220e2f51 --- /dev/null +++ b/templates/misc/configfiles/debian_etch/awstats/etc_apache_vhosts_05_awstats.conf @@ -0,0 +1,14 @@ +ScriptAlias /awstats/ "/usr/lib/cgi-bin/" +ScriptAlias /awstats "/usr/lib/cgi-bin/awstats.pl" +ScriptAlias /awstats.pl "/usr/lib/cgi-bin/awstats.pl" +Alias /awstats-icon/ "/usr/share/awstats/icon/" + + + Options ExecCGI + AllowOverride None + + Order allow,deny + Allow from all + + + diff --git a/templates/misc/configfiles/debian_etch/awstats/etc_awstats_awstats.model.conf.syscp b/templates/misc/configfiles/debian_etch/awstats/etc_awstats_awstats.model.conf.syscp new file mode 100644 index 0000000000..0a979bfdaf --- /dev/null +++ b/templates/misc/configfiles/debian_etch/awstats/etc_awstats_awstats.model.conf.syscp @@ -0,0 +1,9 @@ +LogFile="{LOG_FILE}" +LogType=W +LogFormat = 1 +LogSeparator=" " +SiteDomain="{SITE_DOMAIN}" +HostAliases="{HOST_ALIASES}" + +# Include local configuration options identical for all virtual hosts +Include "/etc/awstats/awstats.conf.local" \ No newline at end of file diff --git a/templates/misc/configfiles/debian_etch/awstats/etc_awstats_awstats.model_log_sql.conf.syscp b/templates/misc/configfiles/debian_etch/awstats/etc_awstats_awstats.model_log_sql.conf.syscp new file mode 100644 index 0000000000..f8d795d73a --- /dev/null +++ b/templates/misc/configfiles/debian_etch/awstats/etc_awstats_awstats.model_log_sql.conf.syscp @@ -0,0 +1,9 @@ +LogFile="{LOG_FILE}" +LogType=W +LogFormat = "%host %virtualname %logname %time1 %methodurl %code %bytesd %refererquot %uaquot" +LogSeparator=" " +SiteDomain="{SITE_DOMAIN}" +HostAliases="{HOST_ALIASES}" + +# Include local configuration options identical for all virtual hosts +Include "/etc/awstats/awstats.conf.local" \ No newline at end of file diff --git a/templates/misc/configfiles/debian_etch/awstats/etc_cron.d_awstats b/templates/misc/configfiles/debian_etch/awstats/etc_cron.d_awstats new file mode 100644 index 0000000000..2ae06fa455 --- /dev/null +++ b/templates/misc/configfiles/debian_etch/awstats/etc_cron.d_awstats @@ -0,0 +1,6 @@ +# +# Set PATH, otherwise restart-scripts won't find start-stop-daemon +# +PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin + +*/10 * * * * www-data [ -x /usr/bin/awstats_updateall.pl ] && /usr/bin/awstats_updateall.pl now -awstatsprog=/usr/lib/cgi-bin/awstats.pl -configdir=/etc/awstats -excludeconf=awstats.model.conf.syscp,awstats.conf \ No newline at end of file diff --git a/templates/misc/configfiles/debian_etch/awstats/etc_cron.d_awstats_log_sql b/templates/misc/configfiles/debian_etch/awstats/etc_cron.d_awstats_log_sql new file mode 100644 index 0000000000..7b12f47d02 --- /dev/null +++ b/templates/misc/configfiles/debian_etch/awstats/etc_cron.d_awstats_log_sql @@ -0,0 +1,6 @@ +# +# Set PATH, otherwise restart-scripts won't find start-stop-daemon +# +PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin + +45 0 * * * www-data [ -x /usr/bin/awstats_updateall.pl ] && /usr/bin/awstats_updateall.pl now -awstatsprog=/usr/lib/cgi-bin/awstats.pl -configdir=/etc/awstats -excludeconf=awstats.model.conf.syscp,awstats.conf \ No newline at end of file diff --git a/templates/misc/configfiles/debian_etch/awstats/etc_lighttpd_syscp-awstats.conf b/templates/misc/configfiles/debian_etch/awstats/etc_lighttpd_syscp-awstats.conf new file mode 100644 index 0000000000..c5369bb318 --- /dev/null +++ b/templates/misc/configfiles/debian_etch/awstats/etc_lighttpd_syscp-awstats.conf @@ -0,0 +1,19 @@ +#alias.url += ( +# "/js/awstats_misc_tracker.js" => "/usr/share/awstats/wwwroot/js/awstats_misc_tracker.js" +#) + +$HTTP["url"] =~ "^/awstats" { + alias.url += ( + "/awstats/" => "", + "/awstats" => "awstats.pl", + "/awstats.pl" => "awstats.pl" +# "/awstatsicons/" => "/usr/share/awstats/wwwroot/icon/" + ) + + index-file.names = ( "awstatstotals.php" ) + + cgi.assign = ( + ".pl" => "/usr/bin/perl", + ".cgi" => "/usr/bin/perl" + ) +} \ No newline at end of file diff --git a/templates/misc/configfiles/debian_etch/courier/etc_courier_authdaemonrc b/templates/misc/configfiles/debian_etch/courier/etc_courier_authdaemonrc new file mode 100644 index 0000000000..f39d5e25cc --- /dev/null +++ b/templates/misc/configfiles/debian_etch/courier/etc_courier_authdaemonrc @@ -0,0 +1,68 @@ +##VERSION: $Id: authdaemonrc.in,v 1.8 2001/10/07 02:16:22 mrsam Exp $ +# +# Copyright 2000-2001 Double Precision, Inc. See COPYING for +# distribution information. +# +# authdaemonrc created from authdaemonrc.dist by sysconftool +# +# Do not alter lines that begin with ##, they are used when upgrading +# this configuration. +# +# This file configures authdaemond, the resident authentication daemon. +# +# Comments in this file are ignored. Although this file is intended to +# be sourced as a shell script, authdaemond parses it manually, so +# the acceptable syntax is a bit limited. Multiline variable contents, +# with the \ continuation character, are not allowed. Everything must +# fit on one line. Do not use any additional whitespace for indentation, +# or anything else. + +##NAME: authmodulelist:0 +# +# The authentication modules that are linked into authdaemond. The +# default list is installed. You may selectively disable modules simply +# by removing them from the following list. The available modules you +# can use are: authcustom authcram authuserdb authldap authmysql authpam + +authmodulelist="authmysql" + +##NAME: authmodulelistorig:1 +# +# This setting is used by Courier's webadmin module, and should be left +# alone + +authmodulelistorig="authcustom authcram authuserdb authldap authmysql authpam" + +##NAME: daemons:0 +# +# The number of daemon processes that are started. authdaemon is typically +# installed where authentication modules are relatively expensive: such +# as authldap, or authmysql, so it's better to have a number of them running. +# PLEASE NOTE: Some platforms may experience a problem if there's more than +# one daemon. Specifically, SystemV derived platforms that use TLI with +# socket emulation. I'm suspicious of TLI's ability to handle multiple +# processes accepting connections on the same filesystem domain socket. +# +# You may need to increase daemons if as your system load increases. Symptoms +# include sporadic authentication failures. If you start getting +# authentication failures, increase daemons. However, the default of 5 +# SHOULD be sufficient. Bumping up daemon count is only a short-term +# solution. The permanent solution is to add more resources: RAM, faster +# disks, faster CPUs... + +daemons=5 + +##NAME: version:0 +# +# When you have multiple versions of authdaemond.* installed, authdaemond +# just picks the first one it finds. Set "version" to override that. +# For example: version=authdaemond.plain + +version="" + +##NAME: authdaemonvar:0 +# +# authdaemonvar is here, but is not used directly by authdaemond. It's +# used by various configuration and build scripts, so don't touch it! + +authdaemonvar=/var/run/courier/authdaemon diff --git a/templates/misc/configfiles/debian_etch/courier/etc_courier_authmysqlrc b/templates/misc/configfiles/debian_etch/courier/etc_courier_authmysqlrc new file mode 100644 index 0000000000..04032976ab --- /dev/null +++ b/templates/misc/configfiles/debian_etch/courier/etc_courier_authmysqlrc @@ -0,0 +1,13 @@ +MYSQL_SERVER +MYSQL_USERNAME +MYSQL_PASSWORD +MYSQL_PORT 3306 +MYSQL_DATABASE +MYSQL_USER_TABLE mail_users +MYSQL_CRYPT_PWFIELD password_enc +MYSQL_UID_FIELD uid +MYSQL_GID_FIELD gid +MYSQL_LOGIN_FIELD username +MYSQL_HOME_FIELD homedir +MYSQL_MAILDIR_FIELD maildir +MYSQL_QUOTA_FIELD (quota*1024*1024) \ No newline at end of file diff --git a/templates/misc/configfiles/debian_etch/cron/etc_cron.d_syscp b/templates/misc/configfiles/debian_etch/cron/etc_cron.d_syscp new file mode 100644 index 0000000000..35984d3b9f --- /dev/null +++ b/templates/misc/configfiles/debian_etch/cron/etc_cron.d_syscp @@ -0,0 +1,14 @@ +# +# Set PATH, otherwise restart-scripts won't find start-stop-daemon +# +PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin +# +# Regular cron jobs for the syscp package +# +*/5 * * * * root /usr/bin/php5 -q /var/www/syscp/scripts/cron_tasks.php +0 0 * * * root /usr/bin/php5 -q /var/www/syscp/scripts/cron_traffic.php +30 0 * * * root /usr/bin/php5 -q /var/www/syscp/scripts/cron_ticketarchive.php +0 1 * * * root /usr/bin/php5 -q /var/www/syscp/scripts/cron_used_tickets_reset.php +*/5 * * * * root /usr/bin/php5 -q /var/www/syscp/scripts/cron_autoresponder.php +*/5 * * * * root /usr/bin/php5 -q /var/www/syscp/scripts/cron_apsinstaller.php +*/30 * * * * root /usr/bin/php5 -q /var/www/syscp/scripts/cron_apsupdater.php diff --git a/templates/misc/configfiles/debian_etch/dkim/dkim-filter.conf b/templates/misc/configfiles/debian_etch/dkim/dkim-filter.conf new file mode 100644 index 0000000000..86cdb1b662 --- /dev/null +++ b/templates/misc/configfiles/debian_etch/dkim/dkim-filter.conf @@ -0,0 +1,3 @@ +Syslog yes +Domain /etc/postfix/dkim/domains +KeyList /etc/postfix/dkim/dkim-keys.conf diff --git a/templates/misc/configfiles/debian_etch/dovecot/etc_dovecot_dovecot-sql.conf b/templates/misc/configfiles/debian_etch/dovecot/etc_dovecot_dovecot-sql.conf new file mode 100644 index 0000000000..4e392b7f79 --- /dev/null +++ b/templates/misc/configfiles/debian_etch/dovecot/etc_dovecot_dovecot-sql.conf @@ -0,0 +1,5 @@ +driver = mysql +connect = host= dbname= user= password= +default_pass_scheme = CRYPT +password_query = SELECT username AS user, password_enc AS password, CONCAT(homedir, maildir) AS userdb_home, uid AS userdb_uid, gid AS userdb_gid, CONCAT('maildir:storage=', (quota*1024)) as userdb_quota FROM mail_users WHERE username = '%u' OR email = '%u' +user_query = SELECT CONCAT(homedir, maildir) AS home, uid, gid, CONCAT('maildir:storage=', (quota*1024)) as quota FROM mail_users WHERE username = '%u' OR email = '%u' diff --git a/templates/misc/configfiles/debian_etch/dovecot/etc_dovecot_dovecot.conf b/templates/misc/configfiles/debian_etch/dovecot/etc_dovecot_dovecot.conf new file mode 100644 index 0000000000..c6051be386 --- /dev/null +++ b/templates/misc/configfiles/debian_etch/dovecot/etc_dovecot_dovecot.conf @@ -0,0 +1,72 @@ +base_dir = /var/run/dovecot +protocols = imap pop3 +listen = * +mail_access_groups = vmail +mail_debug = no +## Uncomment this line to allow Plaintext Logins from foreign IP if the Connection doesn't use TLS +disable_plaintext_auth = no + +### SSL Settings +### After setting this options, set disable_plaintext_auth to yes (see above) +### and add imaps pop3s to the protocols +#ssl_cert_file = /etc/ssl/server/.pem +#ssl_key_file = /etc/ssl/server/.key +## This is an example with CACerts class3 cert! +#ssl_ca_file = /path/to/cacert.class3.crt +#ssl_cipher_list = ALL:!LOW:!SSLv2 + +protocol imap { + mail_plugins = quota imap_quota +} + +protocol pop3 { + # Uncomment this line if you are migrating from Courier also see Migration from Courier + pop3_uidl_format = UID%u-%v + mail_plugins = quota + +} +protocol lda { + # postmaster is the one in charge of the mail system. MUST be set to a vailid address! + postmaster_address = + auth_socket_path = /var/run/dovecot/auth-master + mail_plugins = quota + sendmail_path = /usr/sbin/sendmail +} + +auth default { + mechanisms = plain login + passdb sql { + args = /etc/dovecot/dovecot-sql.conf + } + + userdb prefetch { + } + + userdb sql { + args = /etc/dovecot/dovecot-sql.conf + } + + user = vmail + socket listen { + # Postfix uses the client socket for SMTP Auth + client { + # Assuming the default Postfix $queue_directory setting + path = /var/spool/postfix/private/auth + mode = 0660 + # Assuming the default Postfix user and group + user = postfix + group = postfix + } + # Note that we're setting a master socket. SMTP AUTH for Postfix and Exim uses client sockets. + master { + path = /var/run/dovecot/auth-master + mode = 0660 + user = vmail + group = vmail + } + + } +} +plugin { + quota = maildir +} diff --git a/templates/misc/configfiles/debian_etch/exim4/etc_exim4_conf.d_acl_30_exim4-config_check_rcpt.rul b/templates/misc/configfiles/debian_etch/exim4/etc_exim4_conf.d_acl_30_exim4-config_check_rcpt.rul new file mode 100644 index 0000000000..eb6d643fa1 --- /dev/null +++ b/templates/misc/configfiles/debian_etch/exim4/etc_exim4_conf.d_acl_30_exim4-config_check_rcpt.rul @@ -0,0 +1,125 @@ +### acl/30_exim4-config_check_rcpt +################################# + +acl_check_rcpt: + accept + hosts = : + + warn + hosts = +relay_from_hosts + control = submission/sender_retain + + .ifdef CHECK_RCPT_LOCAL_LOCALPARTS + deny + domains = +local_domains:+syscp_domain + local_parts = CHECK_RCPT_LOCAL_LOCALPARTS + message = restricted characters in address + .endif + + .ifdef CHECK_RCPT_REMOTE_LOCALPARTS + deny + domains = !+local_domains + local_parts = CHECK_RCPT_REMOTE_LOCALPARTS + message = restricted characters in address + .endif + + accept + .ifndef CHECK_RCPT_POSTMASTER + local_parts = postmaster + .else + local_parts = CHECK_RCPT_POSTMASTER + .endif + domains = +local_domains:+syscp_domain + + deny + message = sender envelope address $sender_address is locally blacklisted here. If you think this is wrong, get in touch with postmaster + !acl = acl_local_deny_exceptions + senders = ${if exists{CONFDIR/local_sender_blacklist}\ + {CONFDIR/local_sender_blacklist}\ + {}} + + deny + message = sender IP address $sender_host_address is locally blacklisted here. If you think this is wrong, get in touch with postmaster + !acl = acl_local_deny_exceptions + hosts = ${if exists{CONFDIR/local_host_blacklist}\ + {CONFDIR/local_host_blacklist}\ + {}} + + .ifdef CHECK_RCPT_VERIFY_SENDER + deny + message = Sender verification failed + !acl = acl_local_deny_exceptions + !verify = sender + .endif + + deny + !acl = acl_local_deny_exceptions + senders = ${if exists{CONFDIR/local_sender_callout}\ + {CONFDIR/local_sender_callout}\ + {}} + !verify = sender/callout + + deny + !acl = acl_local_deny_exceptions + recipients = ${if exists{CONFDIR/local_rcpt_callout}\ + {CONFDIR/local_rcpt_callout}\ + {}} + !verify = recipient/callout + + .ifdef CHECK_RCPT_REVERSE_DNS + warn + message = X-Host-Lookup-Failed: Reverse DNS lookup failed for $sender_host_address (${if eq{$host_lookup_failed}{1}{failed}{deferred}}) + condition = ${if and{{def:sender_host_address}{!def:sender_host_name}}\ + {yes}{no}} + .endif + + .ifdef CHECK_RCPT_IP_DNSBLS + warn + message = X-Warning: $sender_host_address is listed at $dnslist_domain ($dnslist_value: $dnslist_text) + log_message = $sender_host_address is listed at $dnslist_domain ($dnslist_value: $dnslist_text) + dnslists = CHECK_RCPT_IP_DNSBLS + .endif + + .ifdef CHECK_RCPT_DOMAIN_DNSBLS + warn + message = X-Warning: $sender_address_domain is listed at $dnslist_domain ($dnslist_value: $dnslist_text) + log_message = $sender_address_domain is listed at $dnslist_domain ($dnslist_value: $dnslist_text) + !senders = ${if exists{CONFDIR/local_domain_dnsbl_whitelist}\ + {CONFDIR/local_domain_dnsbl_whitelist}\ + {}} + dnslists = CHECK_RCPT_DOMAIN_DNSBLS/$sender_address_domain + .endif + + .ifdef CHECK_RCPT_LOCAL_ACL_FILE + .include CHECK_RCPT_LOCAL_ACL_FILE + .endif + + accept + domains = +local_domains:+syscp_domain + endpass + message = unknown user + verify = recipient + + accept + domains = +relay_to_domains + endpass + .ifdef CHECK_RCPT_GIVE_UNKNOWN_USER + message = ${if eq{$acl_verify_message}{Unrouteable address}{unknown user}{$acl_verify_message}} + .else + message = unrouteable address + .endif + verify = recipient + + ############ + # If control reaches this point, the domain is neither in +local_domains + # nor in +relay_to_domains. + ############ + + accept + hosts = +relay_from_hosts + + accept + authenticated = * + + deny + message = relay not permitted \ No newline at end of file diff --git a/templates/misc/configfiles/debian_etch/exim4/etc_exim4_conf.d_auth_30_syscp-config b/templates/misc/configfiles/debian_etch/exim4/etc_exim4_conf.d_auth_30_syscp-config new file mode 100644 index 0000000000..8f0ce5638e --- /dev/null +++ b/templates/misc/configfiles/debian_etch/exim4/etc_exim4_conf.d_auth_30_syscp-config @@ -0,0 +1,30 @@ +### auth/30_syscp-config +################################# + +plain_server: + driver = plaintext + public_name = PLAIN + server_condition = "${if and { \ + {!eq{$2}{}} \ + {!eq{$3}{}} \ + {crypteq{$3}{${lookup mysql{SYSCP_AUTH_PLAIN}{$value}fail}}} \ + } {yes}{no}}" + server_set_id = $2 + server_prompts = : +# .ifndef AUTH_SERVER_ALLOW_NOTLS_PASSWORDS +# server_advertise_condition = ${if eq{$tls_cipher}{}{}{*}} +# .endif + +login_server: + driver = plaintext + public_name = LOGIN + server_prompts = "Username:: : Password::" + server_condition = "${if and { \ + {!eq{$1}{}} \ + {!eq{$2}{}} \ + {crypteq{$2}{${lookup mysql{SYSCP_AUTH_LOGIN}{$value}fail}}} \ + } {yes}{no}}" + server_set_id = $1 +# .ifndef AUTH_SERVER_ALLOW_NOTLS_PASSWORDS +# server_advertise_condition = ${if eq{$tls_cipher}{}{}{*}} +# .endif \ No newline at end of file diff --git a/templates/misc/configfiles/debian_etch/exim4/etc_exim4_conf.d_main_10_syscp-config_options b/templates/misc/configfiles/debian_etch/exim4/etc_exim4_conf.d_main_10_syscp-config_options new file mode 100644 index 0000000000..9ddde2c5d4 --- /dev/null +++ b/templates/misc/configfiles/debian_etch/exim4/etc_exim4_conf.d_main_10_syscp-config_options @@ -0,0 +1,20 @@ +hide mysql_servers = /// + +SYSCP_LOCAL_DOMAIN = SELECT domain FROM panel_domains WHERE domain = '${quote_mysql:$domain}' AND isemaildomain = '1' + +SYSCP_MAILALIAS = SELECT REPLACE(destination,' ',',') FROM mail_virtual WHERE \ + (( email = '${quote_mysql:$local_part}@${quote_mysql:$domain}' ) \ + OR ( email = '@${quote_mysql:$domain}' AND iscatchall > 0 )) \ + AND destination <> '' AND destination <> ' ' ORDER BY iscatchall ASC LIMIT 1 + +SYSCP_MAILUSER = SELECT CONCAT(homedir,maildir) FROM mail_users WHERE \ + email = '${quote_mysql:$local_part}@${quote_mysql:$domain}' AND postfix = 'y' + +SYSCP_PARENT_DOMAIN = SELECT parent.domain FROM `panel_domains` AS parent INNER JOIN panel_domains AS alias \ + ON alias.domain = '${quote_mysql:$domain}' AND parent.id = alias.aliasdomain + +SYSCP_AUTH_PLAIN = SELECT password_enc FROM mail_users WHERE username = '${quote_mysql:$2}' + +SYSCP_AUTH_LOGIN = SELECT password_enc FROM mail_users WHERE username = '${quote_mysql:$1}' + +domainlist syscp_domain = mysql;SYSCP_LOCAL_DOMAIN \ No newline at end of file diff --git a/templates/misc/configfiles/debian_etch/exim4/etc_exim4_conf.d_router_180_syscp-config b/templates/misc/configfiles/debian_etch/exim4/etc_exim4_conf.d_router_180_syscp-config new file mode 100644 index 0000000000..c3168c79ce --- /dev/null +++ b/templates/misc/configfiles/debian_etch/exim4/etc_exim4_conf.d_router_180_syscp-config @@ -0,0 +1,12 @@ +syscp_mailalias: + debug_print = "R: syscp_mailalias for $local_part@$domain" + driver = redirect + domains = +syscp_domain + data = ${lookup mysql {SYSCP_MAILALIAS}{$value}fail} + +syscp_mailuser: + debug_print = "R: syscp_mailuser for $local_part@$domain" + driver = redirect + domains = +syscp_domain + data = ${lookup mysql {SYSCP_MAILUSER}{$value}fail} + directory_transport = maildir_syscp \ No newline at end of file diff --git a/templates/misc/configfiles/debian_etch/exim4/etc_exim4_conf.d_transport_30_syscp-config b/templates/misc/configfiles/debian_etch/exim4/etc_exim4_conf.d_transport_30_syscp-config new file mode 100644 index 0000000000..75602a3943 --- /dev/null +++ b/templates/misc/configfiles/debian_etch/exim4/etc_exim4_conf.d_transport_30_syscp-config @@ -0,0 +1,13 @@ +maildir_syscp: + debug_print = "T: maildir_syscp for $local_part@$domain" + driver = appendfile + create_directory + delivery_date_add + envelope_to_add + return_path_add + maildir_format + directory_mode = 0770 + mode = 0660 + mode_fail_narrower = false + user = 2000 + group = 2000 \ No newline at end of file diff --git a/templates/misc/configfiles/debian_etch/libnss/etc_nss-mysql-root.conf b/templates/misc/configfiles/debian_etch/libnss/etc_nss-mysql-root.conf new file mode 100644 index 0000000000..305499f39a --- /dev/null +++ b/templates/misc/configfiles/debian_etch/libnss/etc_nss-mysql-root.conf @@ -0,0 +1,16 @@ +conf.version = 2; +shadow.host = inet::3306; +shadow.database = ; +shadow.db_user = ; +shadow.db_password = ; +shadow.table = ftp_users u; +shadow.where_clause = ; +shadow.userid_column = u.id; +shadow.user_column = u.username; +shadow.password_column = u.password; +shadow.lastchange_column = UNIX_TIMESTAMP()-10; +shadow.min_column = 1; +shadow.max_column = 2; +shadow.warn_column = 7; +shadow.inact_column = -1; +shadow.expire_column = -1; diff --git a/templates/misc/configfiles/debian_etch/libnss/etc_nss-mysql.conf b/templates/misc/configfiles/debian_etch/libnss/etc_nss-mysql.conf new file mode 100644 index 0000000000..54461bb88c --- /dev/null +++ b/templates/misc/configfiles/debian_etch/libnss/etc_nss-mysql.conf @@ -0,0 +1,24 @@ +conf.version = 2; +users.host = inet::3306; +users.database = ; +users.db_user = ; +users.db_password = ; +users.table = ftp_users u; +users.where_clause =; +users.user_column = u.username; +users.password_column = u.password; +users.userid_column = u.id; +users.uid_column = u.uid; +users.gid_column = u.gid; +users.realname_column = u.username; +users.homedir_column = u.homedir; +users.shell_column = u.shell; +groups.group_info_table = ftp_groups g; +groups.where_clause = ; +groups.group_name_column = g.groupname; +groups.groupid_column = g.id; +groups.gid_column = g.gid; +groups.password_column = "x"; +groups.members_table = ftp_groups ug; +groups.member_userid_column = ug.customerid; +groups.member_groupid_column = ug.id; diff --git a/templates/misc/configfiles/debian_etch/libnss/etc_nsswitch.conf b/templates/misc/configfiles/debian_etch/libnss/etc_nsswitch.conf new file mode 100644 index 0000000000..7401ef2599 --- /dev/null +++ b/templates/misc/configfiles/debian_etch/libnss/etc_nsswitch.conf @@ -0,0 +1,6 @@ +# Make sure that `passwd`, `group` and `shadow` have mysql in their lines +# You should place mysql at the end, so that it is queried after the other mechanisams +# +passwd: compat mysql +group: compat mysql +shadow: compat mysql diff --git a/templates/misc/configfiles/debian_etch/lighttpd/etc_lighttpd.conf b/templates/misc/configfiles/debian_etch/lighttpd/etc_lighttpd.conf new file mode 100644 index 0000000000..b69f0435da --- /dev/null +++ b/templates/misc/configfiles/debian_etch/lighttpd/etc_lighttpd.conf @@ -0,0 +1,60 @@ +############################################################################### +# Default lighttpd.conf for SysCP. +############################################################################### +var.basedir = "/var/www" +var.logdir = "/var/log/lighttpd" +var.statedir = "/var/lib/lighttpd" + +server.modules = ( + "mod_rewrite", + "mod_redirect", + "mod_alias", + "mod_access", + "mod_auth", + "mod_fastcgi", + "mod_accesslog" +) + +server.username = "www-data" +server.groupname = "www-data" +server.document-root = var.basedir +server.pid-file = "/var/run/lighttpd.pid" +accesslog.filename = var.logdir + "/access.log" +server.errorlog = var.logdir + "/error.log" + +server.indexfiles = ("index.php", "index.html", + "index.htm", "default.htm") + +server.name = "" +server.port = 80 +server.bind = "" +url.access-deny = ("~", ".inc") + +fastcgi.server = ( +".php" => ( + "localhost" => ( + "socket" => "/var/kunden/tmp/lighttpd-fcgi-sock-lighttpd", + "broken-scriptfilename" => "enable", + "bin-path" => "/usr/bin/php5-cgi", + "min-procs" => 1, + "max-procs" => 1, + "max-load-per-proc" => 4, + "idle-timeout" => 60, + "bin-environment" => ( + "UID" => "www-data", + "GID" => "www-data", + "PHP_FCGI_CHILDREN" => "0", + "PHP_FCGI_MAX_REQUESTS" => "10000" + ), + "bin-copy-environment" => ( "" ) + ) + ) +) + +#### external configuration files +## mimetype mapping +include_shell "/usr/share/lighttpd/create-mime.assign.pl" + +## load enabled configuration files, +## read /etc/lighttpd/conf-available/README first +include_shell "/usr/share/lighttpd/include-conf-enabled.pl" \ No newline at end of file diff --git a/templates/misc/configfiles/debian_etch/postfix/etc_postfix_main.cf b/templates/misc/configfiles/debian_etch/postfix/etc_postfix_main.cf new file mode 100644 index 0000000000..d163c7061c --- /dev/null +++ b/templates/misc/configfiles/debian_etch/postfix/etc_postfix_main.cf @@ -0,0 +1,92 @@ +# Postfix programs paths settings +command_directory = /usr/sbin +daemon_directory = /usr/lib/postfix +program_directory = /usr/lib/postfix +sendmail_path = /usr/sbin/sendmail + +## General Postfix configuration +# should be the default domain from your provider eg. "server100.provider.tld" +mydomain = + +# should be different from $mydomain eg. "mail.$mydomain" +myhostname = + +mydestination = $myhostname, + $mydomain, + localhost.$myhostname, + localhost.$mydomain, + localhost +mynetworks = 127.0.0.0/8 +inet_interfaces = all +append_dot_mydomain = no +biff = no + +# Postfix performance settings +default_destination_concurrency_limit = 20 +local_destination_concurrency_limit = 2 + +# SMTPD Settings +smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU) +smtpd_helo_required = yes +smtpd_recipient_restrictions = permit_mynetworks, + permit_sasl_authenticated, + reject_unauth_destination, + reject_unauth_pipelining, + reject_non_fqdn_recipient +smtpd_sender_restrictions = permit_mynetworks, + permit_sasl_authenticated, + reject_unknown_hostname, + reject_unknown_recipient_domain, + reject_unknown_sender_domain +smtpd_client_restrictions = permit_mynetworks, + permit_sasl_authenticated, + reject_unknown_client +# Maximum size of Message in bytes (50MB) +message_size_limit = 52428800 + +## SASL Auth Settings +smtpd_sasl_auth_enable = yes +smtpd_sasl_local_domain = $myhostname +smtpd_sasl_security_options = noanonymous +broken_sasl_auth_clients = yes +## Dovecot Settings for deliver, SASL Auth and virtual transport +## uncomment those line to use Dovecot +#mailbox_command = /usr/lib/dovecot/deliver +#virtual_transport = dovecot +#dovecot_destination_recipient_limit = 1 + +# Virtual delivery settings +virtual_mailbox_base = +virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual_mailbox_maps.cf +virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual_mailbox_domains.cf +virtual_alias_maps = mysql:/etc/postfix/mysql-virtual_alias_maps.cf +virtual_uid_maps = static: +virtual_gid_maps = static: + +# Local delivery settings +local_transport = local +alias_database = hash:/etc/aliases +alias_maps = $alias_database + +# Default Mailbox size, is set to 0 which means unlimited! +mailbox_size_limit = 0 + +### TLS settings +### +## TLS for outgoing mails from the server to another server +#smtp_use_tls = yes +#smtp_tls_note_starttls_offer = yes +## TLS for email client +#smtpd_tls_cert_file = /etc/ssl/server/.pem +#smtpd_tls_key_file = /etc/ssl/server/.pem +#smtpd_tls_CAfile = /etc/ssl/cacert.class3.crt # Just an example for CACert.org +#smtpd_tls_auth_only = no +#smtpd_tls_loglevel = 1 +#smtpd_tls_received_header = yes +#smtpd_tls_session_cache_timeout = 3600s +#tls_random_source = dev:/dev/urandom + +debugger_command = + PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin + ddd $daemon_directory/$process_name $process_id & sleep 5 + diff --git a/templates/misc/configfiles/debian_etch/postfix/etc_postfix_master.cf b/templates/misc/configfiles/debian_etch/postfix/etc_postfix_master.cf new file mode 100644 index 0000000000..678bb9cd43 --- /dev/null +++ b/templates/misc/configfiles/debian_etch/postfix/etc_postfix_master.cf @@ -0,0 +1,4 @@ +# Add this lines to be able to use dovecot as delivery agent +# Dovecot LDA +dovecot unix - n n - - pipe + flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -d ${recipient} diff --git a/templates/misc/configfiles/debian_etch/postfix/etc_postfix_mysql-virtual_alias_maps.cf b/templates/misc/configfiles/debian_etch/postfix/etc_postfix_mysql-virtual_alias_maps.cf new file mode 100644 index 0000000000..b0f3180b03 --- /dev/null +++ b/templates/misc/configfiles/debian_etch/postfix/etc_postfix_mysql-virtual_alias_maps.cf @@ -0,0 +1,8 @@ +user = +password = +dbname = +table = mail_virtual +select_field = destination +where_field = email +additional_conditions = and destination <> '' and destination <> ' ' +hosts = diff --git a/templates/misc/configfiles/debian_etch/postfix/etc_postfix_mysql-virtual_mailbox_domains.cf b/templates/misc/configfiles/debian_etch/postfix/etc_postfix_mysql-virtual_mailbox_domains.cf new file mode 100644 index 0000000000..97cb27aad6 --- /dev/null +++ b/templates/misc/configfiles/debian_etch/postfix/etc_postfix_mysql-virtual_mailbox_domains.cf @@ -0,0 +1,8 @@ +user = +password = +dbname = +table = panel_domains +select_field = domain +where_field = domain +additional_conditions = and isemaildomain = '1' +hosts = diff --git a/templates/misc/configfiles/debian_etch/postfix/etc_postfix_mysql-virtual_mailbox_maps.cf b/templates/misc/configfiles/debian_etch/postfix/etc_postfix_mysql-virtual_mailbox_maps.cf new file mode 100644 index 0000000000..173da91649 --- /dev/null +++ b/templates/misc/configfiles/debian_etch/postfix/etc_postfix_mysql-virtual_mailbox_maps.cf @@ -0,0 +1,7 @@ +user = +password = +dbname = +table = mail_users +select_field = maildir +where_field = email +hosts = diff --git a/templates/misc/configfiles/debian_etch/postfix/etc_postfix_sasl_smtpd.conf b/templates/misc/configfiles/debian_etch/postfix/etc_postfix_sasl_smtpd.conf new file mode 100644 index 0000000000..c07483dc74 --- /dev/null +++ b/templates/misc/configfiles/debian_etch/postfix/etc_postfix_sasl_smtpd.conf @@ -0,0 +1,11 @@ +pwcheck_method: auxprop +auxprop_plugin: sql +allowanonymouslogin: no +allowplaintext: yes +mech_list: plain login cram-md5 digest-md5 +sql_engine: mysql +sql_hostnames: +sql_user: +sql_passwd: +sql_database: +sql_select: SELECT password FROM mail_users WHERE username='%u@%r' OR email='%u@%r' \ No newline at end of file diff --git a/templates/misc/configfiles/debian_etch/powerdns/etc_powerdns_pdns-syscp.conf b/templates/misc/configfiles/debian_etch/powerdns/etc_powerdns_pdns-syscp.conf new file mode 100644 index 0000000000..ca2d022802 --- /dev/null +++ b/templates/misc/configfiles/debian_etch/powerdns/etc_powerdns_pdns-syscp.conf @@ -0,0 +1,7 @@ +allow-axfr-ips= +#local-ipv6=YOUR_IPv6_(if_any) +bind-config=/etc/bind/named.conf +bind-check-interval=180 +log-dns-details=yes +local-address=,127.0.0.1 + diff --git a/templates/misc/configfiles/debian_etch/powerdns/etc_powerdns_pdns.conf b/templates/misc/configfiles/debian_etch/powerdns/etc_powerdns_pdns.conf new file mode 100644 index 0000000000..c3eef80d2f --- /dev/null +++ b/templates/misc/configfiles/debian_etch/powerdns/etc_powerdns_pdns.conf @@ -0,0 +1,17 @@ +allow-recursion=127.0.0.1 +config-dir=/etc/powerdns +daemon=yes +guardian=yes +launch=bind +lazy-recursion=yes +local-port=53 +master=yes +module-dir=/usr/lib/powerdns +setgid=pdns +setuid=pdns +socket-dir=/var/run +version-string=powerdns +bind-config=/etc/bind/named.conf +bind-check-interval=300 +include=/etc/powerdns/pdns_syscp.conf + diff --git a/templates/misc/configfiles/debian_etch/proftpd/etc_proftpd_modules.conf b/templates/misc/configfiles/debian_etch/proftpd/etc_proftpd_modules.conf new file mode 100644 index 0000000000..52523eba81 --- /dev/null +++ b/templates/misc/configfiles/debian_etch/proftpd/etc_proftpd_modules.conf @@ -0,0 +1,34 @@ +# +# This file is used to manage DSO modules and features. +# + +# This is the directory where DSO modules resides + +ModulePath /usr/lib/proftpd + +# Allow only user root to load and unload modules, but allow everyone +# to see which modules have been loaded + +ModuleControlsACLs insmod,rmmod allow user root +ModuleControlsACLs lsmod allow user * + +#LoadModule mod_ctrls_admin.c +LoadModule mod_tls.c +LoadModule mod_sql.c +#LoadModule mod_ldap.c +LoadModule mod_sql_mysql.c +#LoadModule mod_sql_postgres.c +#LoadModule mod_quotatab.c +#LoadModule mod_quotatab_file.c +#LoadModule mod_quotatab_ldap.c +#LoadModule mod_quotatab_sql.c +#LoadModule mod_radius.c +LoadModule mod_wrap.c +LoadModule mod_rewrite.c + +# keep this module the last one +LoadModule mod_ifsession.c + + + DelayEngine off + diff --git a/templates/misc/configfiles/debian_etch/proftpd/etc_proftpd_proftpd.conf b/templates/misc/configfiles/debian_etch/proftpd/etc_proftpd_proftpd.conf new file mode 100644 index 0000000000..2cbdec1ad0 --- /dev/null +++ b/templates/misc/configfiles/debian_etch/proftpd/etc_proftpd_proftpd.conf @@ -0,0 +1,64 @@ +Include /etc/proftpd/modules.conf + +ServerName " FTP Server" +ServerType standalone +DeferWelcome off + +MultilineRFC2228 on +DefaultServer on +ShowSymlinks on +AllowOverwrite on + +TimeoutNoTransfer 600 +TimeoutStalled 600 +TimeoutIdle 1200 + +DisplayLogin welcome.msg +DisplayFirstChdir .message +ListOptions "-l" + +DenyFilter \*.*/ + +Port 21 +MaxInstances 30 +UseIPv6 off + +TransferLog /var/log/proftpd/xferlog +SystemLog /var/log/proftpd/proftpd.log + +# make proftpd faster / do not perform ident and reverse dns lookup +UseReverseDNS off +IdentLookups off + +# Set the user and group that the server normally runs at. +User nobody +Group nogroup + + +# Umask 022 is a good standard umask to prevent new files and dirs +# (second parm) from being group and world writable. + Umask 022 022 +# Normally, we want files to be overwriteable. + AllowOverwrite on + + +DefaultRoot ~ +RequireValidShell off + +AuthOrder mod_sql.c + +SQLAuthTypes Crypt +SQLAuthenticate users* groups* +SQLConnectInfo @ +SQLUserInfo ftp_users username password uid gid homedir shell +SQLGroupInfo ftp_groups groupname gid members +SQLUserWhereClause "login_enabled = 'y'" + +SQLLog PASS login +SQLNamedQuery login UPDATE "last_login=now(), login_count=login_count+1 WHERE username='%u'" ftp_users + +SQLLog RETR download +SQLNamedQuery download UPDATE "down_count=down_count+1, down_bytes=down_bytes+%b WHERE username='%u'" ftp_users + +SQLLog STOR upload +SQLNamedQuery upload UPDATE "up_count=up_count+1, up_bytes=up_bytes+%b WHERE username='%u'" ftp_users diff --git a/templates/misc/configfiles/debian_etch/pure-ftpd/etc_default_pure-ftpd-common b/templates/misc/configfiles/debian_etch/pure-ftpd/etc_default_pure-ftpd-common new file mode 100644 index 0000000000..b26539047f --- /dev/null +++ b/templates/misc/configfiles/debian_etch/pure-ftpd/etc_default_pure-ftpd-common @@ -0,0 +1,5 @@ +STANDALONE_OR_INETD=standalone +VIRTUALCHROOT=false +UPLOADSCRIPT= +UPLOADUID= +UPLOADGID= diff --git a/templates/misc/configfiles/debian_etch/pure-ftpd/etc_pure-ftpd_conf_Bind b/templates/misc/configfiles/debian_etch/pure-ftpd/etc_pure-ftpd_conf_Bind new file mode 100644 index 0000000000..aabe6ec390 --- /dev/null +++ b/templates/misc/configfiles/debian_etch/pure-ftpd/etc_pure-ftpd_conf_Bind @@ -0,0 +1 @@ +21 diff --git a/templates/misc/configfiles/debian_etch/pure-ftpd/etc_pure-ftpd_conf_ChrootEveryone b/templates/misc/configfiles/debian_etch/pure-ftpd/etc_pure-ftpd_conf_ChrootEveryone new file mode 100644 index 0000000000..7cfab5b05d --- /dev/null +++ b/templates/misc/configfiles/debian_etch/pure-ftpd/etc_pure-ftpd_conf_ChrootEveryone @@ -0,0 +1 @@ +yes diff --git a/templates/misc/configfiles/debian_etch/pure-ftpd/etc_pure-ftpd_conf_CustomerProof b/templates/misc/configfiles/debian_etch/pure-ftpd/etc_pure-ftpd_conf_CustomerProof new file mode 100644 index 0000000000..d00491fd7e --- /dev/null +++ b/templates/misc/configfiles/debian_etch/pure-ftpd/etc_pure-ftpd_conf_CustomerProof @@ -0,0 +1 @@ +1 diff --git a/templates/misc/configfiles/debian_etch/pure-ftpd/etc_pure-ftpd_conf_MaxIdleTime b/templates/misc/configfiles/debian_etch/pure-ftpd/etc_pure-ftpd_conf_MaxIdleTime new file mode 100644 index 0000000000..60d3b2f4a4 --- /dev/null +++ b/templates/misc/configfiles/debian_etch/pure-ftpd/etc_pure-ftpd_conf_MaxIdleTime @@ -0,0 +1 @@ +15 diff --git a/templates/misc/configfiles/debian_etch/pure-ftpd/etc_pure-ftpd_conf_MinUID b/templates/misc/configfiles/debian_etch/pure-ftpd/etc_pure-ftpd_conf_MinUID new file mode 100644 index 0000000000..83b33d238d --- /dev/null +++ b/templates/misc/configfiles/debian_etch/pure-ftpd/etc_pure-ftpd_conf_MinUID @@ -0,0 +1 @@ +1000 diff --git a/templates/misc/configfiles/debian_etch/pure-ftpd/etc_pure-ftpd_conf_MySQLConfigFile b/templates/misc/configfiles/debian_etch/pure-ftpd/etc_pure-ftpd_conf_MySQLConfigFile new file mode 100644 index 0000000000..be85bafe5d --- /dev/null +++ b/templates/misc/configfiles/debian_etch/pure-ftpd/etc_pure-ftpd_conf_MySQLConfigFile @@ -0,0 +1 @@ +/etc/pure-ftpd/db/mysql.conf diff --git a/templates/misc/configfiles/debian_etch/pure-ftpd/etc_pure-ftpd_conf_NoAnonymous b/templates/misc/configfiles/debian_etch/pure-ftpd/etc_pure-ftpd_conf_NoAnonymous new file mode 100644 index 0000000000..7cfab5b05d --- /dev/null +++ b/templates/misc/configfiles/debian_etch/pure-ftpd/etc_pure-ftpd_conf_NoAnonymous @@ -0,0 +1 @@ +yes diff --git a/templates/misc/configfiles/debian_etch/pure-ftpd/etc_pure-ftpd_conf_PAMAuthentication b/templates/misc/configfiles/debian_etch/pure-ftpd/etc_pure-ftpd_conf_PAMAuthentication new file mode 100644 index 0000000000..7ecb56eb3f --- /dev/null +++ b/templates/misc/configfiles/debian_etch/pure-ftpd/etc_pure-ftpd_conf_PAMAuthentication @@ -0,0 +1 @@ +no diff --git a/templates/misc/configfiles/debian_etch/pure-ftpd/etc_pure-ftpd_db_mysql.conf b/templates/misc/configfiles/debian_etch/pure-ftpd/etc_pure-ftpd_db_mysql.conf new file mode 100644 index 0000000000..c139a7f151 --- /dev/null +++ b/templates/misc/configfiles/debian_etch/pure-ftpd/etc_pure-ftpd_db_mysql.conf @@ -0,0 +1,10 @@ +MYSQLServer +MYSQLUser +MYSQLPassword +MYSQLDatabase +MYSQLCrypt any + +MYSQLGetPW SELECT password FROM ftp_users WHERE username="\L" AND login_enabled="y" +MYSQLGetUID SELECT uid FROM ftp_users WHERE username="\L" AND login_enabled="y" +MYSQLGetGID SELECT gid FROM ftp_users WHERE username="\L" AND login_enabled="y" +MYSQLGetDir SELECT homedir FROM ftp_users WHERE username="\L" AND login_enabled="y" diff --git a/templates/misc/configfiles/debian_etch/xinetd/etc_xinet.d_syscp b/templates/misc/configfiles/debian_etch/xinetd/etc_xinet.d_syscp new file mode 100644 index 0000000000..acb494c173 --- /dev/null +++ b/templates/misc/configfiles/debian_etch/xinetd/etc_xinet.d_syscp @@ -0,0 +1,11 @@ +service syscp +{ + id = syscp + socket_type = dgram + protocol = tcp + wait = no + user = root + server = /usr/bin/php + server_args = -q /var/www/syscp/scripts/cron_tasks.php + only_from = 127.0.0.1 +} diff --git a/templates/misc/configfiles/debian_lenny/awstats/etc_apache_vhosts_05_awstats.conf b/templates/misc/configfiles/debian_lenny/awstats/etc_apache_vhosts_05_awstats.conf new file mode 100644 index 0000000000..2c220e2f51 --- /dev/null +++ b/templates/misc/configfiles/debian_lenny/awstats/etc_apache_vhosts_05_awstats.conf @@ -0,0 +1,14 @@ +ScriptAlias /awstats/ "/usr/lib/cgi-bin/" +ScriptAlias /awstats "/usr/lib/cgi-bin/awstats.pl" +ScriptAlias /awstats.pl "/usr/lib/cgi-bin/awstats.pl" +Alias /awstats-icon/ "/usr/share/awstats/icon/" + + + Options ExecCGI + AllowOverride None + + Order allow,deny + Allow from all + + + diff --git a/templates/misc/configfiles/debian_lenny/awstats/etc_awstats_awstats.model.conf.syscp b/templates/misc/configfiles/debian_lenny/awstats/etc_awstats_awstats.model.conf.syscp new file mode 100644 index 0000000000..0a979bfdaf --- /dev/null +++ b/templates/misc/configfiles/debian_lenny/awstats/etc_awstats_awstats.model.conf.syscp @@ -0,0 +1,9 @@ +LogFile="{LOG_FILE}" +LogType=W +LogFormat = 1 +LogSeparator=" " +SiteDomain="{SITE_DOMAIN}" +HostAliases="{HOST_ALIASES}" + +# Include local configuration options identical for all virtual hosts +Include "/etc/awstats/awstats.conf.local" \ No newline at end of file diff --git a/templates/misc/configfiles/debian_lenny/awstats/etc_awstats_awstats.model_log_sql.conf.syscp b/templates/misc/configfiles/debian_lenny/awstats/etc_awstats_awstats.model_log_sql.conf.syscp new file mode 100644 index 0000000000..f8d795d73a --- /dev/null +++ b/templates/misc/configfiles/debian_lenny/awstats/etc_awstats_awstats.model_log_sql.conf.syscp @@ -0,0 +1,9 @@ +LogFile="{LOG_FILE}" +LogType=W +LogFormat = "%host %virtualname %logname %time1 %methodurl %code %bytesd %refererquot %uaquot" +LogSeparator=" " +SiteDomain="{SITE_DOMAIN}" +HostAliases="{HOST_ALIASES}" + +# Include local configuration options identical for all virtual hosts +Include "/etc/awstats/awstats.conf.local" \ No newline at end of file diff --git a/templates/misc/configfiles/debian_lenny/awstats/etc_cron.d_awstats b/templates/misc/configfiles/debian_lenny/awstats/etc_cron.d_awstats new file mode 100644 index 0000000000..2ae06fa455 --- /dev/null +++ b/templates/misc/configfiles/debian_lenny/awstats/etc_cron.d_awstats @@ -0,0 +1,6 @@ +# +# Set PATH, otherwise restart-scripts won't find start-stop-daemon +# +PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin + +*/10 * * * * www-data [ -x /usr/bin/awstats_updateall.pl ] && /usr/bin/awstats_updateall.pl now -awstatsprog=/usr/lib/cgi-bin/awstats.pl -configdir=/etc/awstats -excludeconf=awstats.model.conf.syscp,awstats.conf \ No newline at end of file diff --git a/templates/misc/configfiles/debian_lenny/awstats/etc_cron.d_awstats_log_sql b/templates/misc/configfiles/debian_lenny/awstats/etc_cron.d_awstats_log_sql new file mode 100644 index 0000000000..7b12f47d02 --- /dev/null +++ b/templates/misc/configfiles/debian_lenny/awstats/etc_cron.d_awstats_log_sql @@ -0,0 +1,6 @@ +# +# Set PATH, otherwise restart-scripts won't find start-stop-daemon +# +PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin + +45 0 * * * www-data [ -x /usr/bin/awstats_updateall.pl ] && /usr/bin/awstats_updateall.pl now -awstatsprog=/usr/lib/cgi-bin/awstats.pl -configdir=/etc/awstats -excludeconf=awstats.model.conf.syscp,awstats.conf \ No newline at end of file diff --git a/templates/misc/configfiles/debian_lenny/awstats/etc_lighttpd_syscp-awstats.conf b/templates/misc/configfiles/debian_lenny/awstats/etc_lighttpd_syscp-awstats.conf new file mode 100644 index 0000000000..c5369bb318 --- /dev/null +++ b/templates/misc/configfiles/debian_lenny/awstats/etc_lighttpd_syscp-awstats.conf @@ -0,0 +1,19 @@ +#alias.url += ( +# "/js/awstats_misc_tracker.js" => "/usr/share/awstats/wwwroot/js/awstats_misc_tracker.js" +#) + +$HTTP["url"] =~ "^/awstats" { + alias.url += ( + "/awstats/" => "", + "/awstats" => "awstats.pl", + "/awstats.pl" => "awstats.pl" +# "/awstatsicons/" => "/usr/share/awstats/wwwroot/icon/" + ) + + index-file.names = ( "awstatstotals.php" ) + + cgi.assign = ( + ".pl" => "/usr/bin/perl", + ".cgi" => "/usr/bin/perl" + ) +} \ No newline at end of file diff --git a/templates/misc/configfiles/debian_lenny/courier/etc_courier_authdaemonrc b/templates/misc/configfiles/debian_lenny/courier/etc_courier_authdaemonrc new file mode 100644 index 0000000000..29346e54c0 --- /dev/null +++ b/templates/misc/configfiles/debian_lenny/courier/etc_courier_authdaemonrc @@ -0,0 +1,68 @@ +##VERSION: $Id: authdaemonrc.in,v 1.8 2001/10/07 02:16:22 mrsam Exp $ +# +# Copyright 2000-2001 Double Precision, Inc. See COPYING for +# distribution information. +# +# authdaemonrc created from authdaemonrc.dist by sysconftool +# +# Do not alter lines that begin with ##, they are used when upgrading +# this configuration. +# +# This file configures authdaemond, the resident authentication daemon. +# +# Comments in this file are ignored. Although this file is intended to +# be sourced as a shell script, authdaemond parses it manually, so +# the acceptable syntax is a bit limited. Multiline variable contents, +# with the \ continuation character, are not allowed. Everything must +# fit on one line. Do not use any additional whitespace for indentation, +# or anything else. + +##NAME: authmodulelist:0 +# +# The authentication modules that are linked into authdaemond. The +# default list is installed. You may selectively disable modules simply +# by removing them from the following list. The available modules you +# can use are: authcustom authcram authuserdb authldap authmysql authpam + +authmodulelist="authmysql" + +##NAME: authmodulelistorig:1 +# +# This setting is used by Courier's webadmin module, and should be left +# alone + +authmodulelistorig="authcustom authcram authuserdb authldap authmysql authpam" + +##NAME: daemons:0 +# +# The number of daemon processes that are started. authdaemon is typically +# installed where authentication modules are relatively expensive: such +# as authldap, or authmysql, so it's better to have a number of them running. +# PLEASE NOTE: Some platforms may experience a problem if there's more than +# one daemon. Specifically, SystemV derived platforms that use TLI with +# socket emulation. I'm suspicious of TLI's ability to handle multiple +# processes accepting connections on the same filesystem domain socket. +# +# You may need to increase daemons if as your system load increases. Symptoms +# include sporadic authentication failures. If you start getting +# authentication failures, increase daemons. However, the default of 5 +# SHOULD be sufficient. Bumping up daemon count is only a short-term +# solution. The permanent solution is to add more resources: RAM, faster +# disks, faster CPUs... + +daemons=5 + +##NAME: version:0 +# +# When you have multiple versions of authdaemond.* installed, authdaemond +# just picks the first one it finds. Set "version" to override that. +# For example: version=authdaemond.plain + +version="" + +##NAME: authdaemonvar:0 +# +# authdaemonvar is here, but is not used directly by authdaemond. It's +# used by various configuration and build scripts, so don't touch it! + +authdaemonvar=/var/run/courier/authdaemon diff --git a/templates/misc/configfiles/debian_lenny/courier/etc_courier_authmysqlrc b/templates/misc/configfiles/debian_lenny/courier/etc_courier_authmysqlrc new file mode 100644 index 0000000000..6703bef4e8 --- /dev/null +++ b/templates/misc/configfiles/debian_lenny/courier/etc_courier_authmysqlrc @@ -0,0 +1,13 @@ +MYSQL_SERVER +MYSQL_USERNAME +MYSQL_PASSWORD +MYSQL_PORT 3306 +MYSQL_DATABASE +MYSQL_USER_TABLE mail_users +MYSQL_CRYPT_PWFIELD password_enc +MYSQL_UID_FIELD uid +MYSQL_GID_FIELD gid +MYSQL_LOGIN_FIELD username +MYSQL_HOME_FIELD homedir +MYSQL_MAILDIR_FIELD maildir +MYSQL_QUOTA_FIELD (quota*1024*1024) \ No newline at end of file diff --git a/templates/misc/configfiles/debian_lenny/cron/etc_cron.d_syscp b/templates/misc/configfiles/debian_lenny/cron/etc_cron.d_syscp new file mode 100644 index 0000000000..5ee811524c --- /dev/null +++ b/templates/misc/configfiles/debian_lenny/cron/etc_cron.d_syscp @@ -0,0 +1,14 @@ +# +# Set PATH, otherwise restart-scripts won't find start-stop-daemon +# +PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin +# +# Regular cron jobs for the syscp package +# +*/5 * * * * root /usr/bin/php5 -q /var/www/syscp/scripts/cron_tasks.php +0 0 * * * root /usr/bin/php5 -q /var/www/syscp/scripts/cron_traffic.php +30 0 * * * root /usr/bin/php5 -q /var/www/syscp/scripts/cron_ticketarchive.php +0 1 * * * root /usr/bin/php5 -q /var/www/syscp/scripts/cron_used_tickets_reset.php +*/5 * * * * root /usr/bin/php5 -q /var/www/syscp/scripts/cron_autoresponder.php +*/5 * * * * root /usr/bin/php5 -q /var/www/syscp/scripts/cron_apsinstaller.php +*/30 * * * * root /usr/bin/php5 -q /var/www/syscp/scripts/cron_apsupdater.php diff --git a/templates/misc/configfiles/debian_lenny/dkim/dkim-filter.conf b/templates/misc/configfiles/debian_lenny/dkim/dkim-filter.conf new file mode 100644 index 0000000000..86cdb1b662 --- /dev/null +++ b/templates/misc/configfiles/debian_lenny/dkim/dkim-filter.conf @@ -0,0 +1,3 @@ +Syslog yes +Domain /etc/postfix/dkim/domains +KeyList /etc/postfix/dkim/dkim-keys.conf diff --git a/templates/misc/configfiles/debian_lenny/dovecot/etc_dovecot_dovecot-sql.conf b/templates/misc/configfiles/debian_lenny/dovecot/etc_dovecot_dovecot-sql.conf new file mode 100644 index 0000000000..4e392b7f79 --- /dev/null +++ b/templates/misc/configfiles/debian_lenny/dovecot/etc_dovecot_dovecot-sql.conf @@ -0,0 +1,5 @@ +driver = mysql +connect = host= dbname= user= password= +default_pass_scheme = CRYPT +password_query = SELECT username AS user, password_enc AS password, CONCAT(homedir, maildir) AS userdb_home, uid AS userdb_uid, gid AS userdb_gid, CONCAT('maildir:storage=', (quota*1024)) as userdb_quota FROM mail_users WHERE username = '%u' OR email = '%u' +user_query = SELECT CONCAT(homedir, maildir) AS home, uid, gid, CONCAT('maildir:storage=', (quota*1024)) as quota FROM mail_users WHERE username = '%u' OR email = '%u' diff --git a/templates/misc/configfiles/debian_lenny/dovecot/etc_dovecot_dovecot.conf b/templates/misc/configfiles/debian_lenny/dovecot/etc_dovecot_dovecot.conf new file mode 100644 index 0000000000..c6051be386 --- /dev/null +++ b/templates/misc/configfiles/debian_lenny/dovecot/etc_dovecot_dovecot.conf @@ -0,0 +1,72 @@ +base_dir = /var/run/dovecot +protocols = imap pop3 +listen = * +mail_access_groups = vmail +mail_debug = no +## Uncomment this line to allow Plaintext Logins from foreign IP if the Connection doesn't use TLS +disable_plaintext_auth = no + +### SSL Settings +### After setting this options, set disable_plaintext_auth to yes (see above) +### and add imaps pop3s to the protocols +#ssl_cert_file = /etc/ssl/server/.pem +#ssl_key_file = /etc/ssl/server/.key +## This is an example with CACerts class3 cert! +#ssl_ca_file = /path/to/cacert.class3.crt +#ssl_cipher_list = ALL:!LOW:!SSLv2 + +protocol imap { + mail_plugins = quota imap_quota +} + +protocol pop3 { + # Uncomment this line if you are migrating from Courier also see Migration from Courier + pop3_uidl_format = UID%u-%v + mail_plugins = quota + +} +protocol lda { + # postmaster is the one in charge of the mail system. MUST be set to a vailid address! + postmaster_address = + auth_socket_path = /var/run/dovecot/auth-master + mail_plugins = quota + sendmail_path = /usr/sbin/sendmail +} + +auth default { + mechanisms = plain login + passdb sql { + args = /etc/dovecot/dovecot-sql.conf + } + + userdb prefetch { + } + + userdb sql { + args = /etc/dovecot/dovecot-sql.conf + } + + user = vmail + socket listen { + # Postfix uses the client socket for SMTP Auth + client { + # Assuming the default Postfix $queue_directory setting + path = /var/spool/postfix/private/auth + mode = 0660 + # Assuming the default Postfix user and group + user = postfix + group = postfix + } + # Note that we're setting a master socket. SMTP AUTH for Postfix and Exim uses client sockets. + master { + path = /var/run/dovecot/auth-master + mode = 0660 + user = vmail + group = vmail + } + + } +} +plugin { + quota = maildir +} diff --git a/templates/misc/configfiles/debian_lenny/exim4/etc_exim4_conf.d_acl_30_exim4-config_check_rcpt.rul b/templates/misc/configfiles/debian_lenny/exim4/etc_exim4_conf.d_acl_30_exim4-config_check_rcpt.rul new file mode 100644 index 0000000000..eb6d643fa1 --- /dev/null +++ b/templates/misc/configfiles/debian_lenny/exim4/etc_exim4_conf.d_acl_30_exim4-config_check_rcpt.rul @@ -0,0 +1,125 @@ +### acl/30_exim4-config_check_rcpt +################################# + +acl_check_rcpt: + accept + hosts = : + + warn + hosts = +relay_from_hosts + control = submission/sender_retain + + .ifdef CHECK_RCPT_LOCAL_LOCALPARTS + deny + domains = +local_domains:+syscp_domain + local_parts = CHECK_RCPT_LOCAL_LOCALPARTS + message = restricted characters in address + .endif + + .ifdef CHECK_RCPT_REMOTE_LOCALPARTS + deny + domains = !+local_domains + local_parts = CHECK_RCPT_REMOTE_LOCALPARTS + message = restricted characters in address + .endif + + accept + .ifndef CHECK_RCPT_POSTMASTER + local_parts = postmaster + .else + local_parts = CHECK_RCPT_POSTMASTER + .endif + domains = +local_domains:+syscp_domain + + deny + message = sender envelope address $sender_address is locally blacklisted here. If you think this is wrong, get in touch with postmaster + !acl = acl_local_deny_exceptions + senders = ${if exists{CONFDIR/local_sender_blacklist}\ + {CONFDIR/local_sender_blacklist}\ + {}} + + deny + message = sender IP address $sender_host_address is locally blacklisted here. If you think this is wrong, get in touch with postmaster + !acl = acl_local_deny_exceptions + hosts = ${if exists{CONFDIR/local_host_blacklist}\ + {CONFDIR/local_host_blacklist}\ + {}} + + .ifdef CHECK_RCPT_VERIFY_SENDER + deny + message = Sender verification failed + !acl = acl_local_deny_exceptions + !verify = sender + .endif + + deny + !acl = acl_local_deny_exceptions + senders = ${if exists{CONFDIR/local_sender_callout}\ + {CONFDIR/local_sender_callout}\ + {}} + !verify = sender/callout + + deny + !acl = acl_local_deny_exceptions + recipients = ${if exists{CONFDIR/local_rcpt_callout}\ + {CONFDIR/local_rcpt_callout}\ + {}} + !verify = recipient/callout + + .ifdef CHECK_RCPT_REVERSE_DNS + warn + message = X-Host-Lookup-Failed: Reverse DNS lookup failed for $sender_host_address (${if eq{$host_lookup_failed}{1}{failed}{deferred}}) + condition = ${if and{{def:sender_host_address}{!def:sender_host_name}}\ + {yes}{no}} + .endif + + .ifdef CHECK_RCPT_IP_DNSBLS + warn + message = X-Warning: $sender_host_address is listed at $dnslist_domain ($dnslist_value: $dnslist_text) + log_message = $sender_host_address is listed at $dnslist_domain ($dnslist_value: $dnslist_text) + dnslists = CHECK_RCPT_IP_DNSBLS + .endif + + .ifdef CHECK_RCPT_DOMAIN_DNSBLS + warn + message = X-Warning: $sender_address_domain is listed at $dnslist_domain ($dnslist_value: $dnslist_text) + log_message = $sender_address_domain is listed at $dnslist_domain ($dnslist_value: $dnslist_text) + !senders = ${if exists{CONFDIR/local_domain_dnsbl_whitelist}\ + {CONFDIR/local_domain_dnsbl_whitelist}\ + {}} + dnslists = CHECK_RCPT_DOMAIN_DNSBLS/$sender_address_domain + .endif + + .ifdef CHECK_RCPT_LOCAL_ACL_FILE + .include CHECK_RCPT_LOCAL_ACL_FILE + .endif + + accept + domains = +local_domains:+syscp_domain + endpass + message = unknown user + verify = recipient + + accept + domains = +relay_to_domains + endpass + .ifdef CHECK_RCPT_GIVE_UNKNOWN_USER + message = ${if eq{$acl_verify_message}{Unrouteable address}{unknown user}{$acl_verify_message}} + .else + message = unrouteable address + .endif + verify = recipient + + ############ + # If control reaches this point, the domain is neither in +local_domains + # nor in +relay_to_domains. + ############ + + accept + hosts = +relay_from_hosts + + accept + authenticated = * + + deny + message = relay not permitted \ No newline at end of file diff --git a/templates/misc/configfiles/debian_lenny/exim4/etc_exim4_conf.d_auth_30_syscp-config b/templates/misc/configfiles/debian_lenny/exim4/etc_exim4_conf.d_auth_30_syscp-config new file mode 100644 index 0000000000..8f0ce5638e --- /dev/null +++ b/templates/misc/configfiles/debian_lenny/exim4/etc_exim4_conf.d_auth_30_syscp-config @@ -0,0 +1,30 @@ +### auth/30_syscp-config +################################# + +plain_server: + driver = plaintext + public_name = PLAIN + server_condition = "${if and { \ + {!eq{$2}{}} \ + {!eq{$3}{}} \ + {crypteq{$3}{${lookup mysql{SYSCP_AUTH_PLAIN}{$value}fail}}} \ + } {yes}{no}}" + server_set_id = $2 + server_prompts = : +# .ifndef AUTH_SERVER_ALLOW_NOTLS_PASSWORDS +# server_advertise_condition = ${if eq{$tls_cipher}{}{}{*}} +# .endif + +login_server: + driver = plaintext + public_name = LOGIN + server_prompts = "Username:: : Password::" + server_condition = "${if and { \ + {!eq{$1}{}} \ + {!eq{$2}{}} \ + {crypteq{$2}{${lookup mysql{SYSCP_AUTH_LOGIN}{$value}fail}}} \ + } {yes}{no}}" + server_set_id = $1 +# .ifndef AUTH_SERVER_ALLOW_NOTLS_PASSWORDS +# server_advertise_condition = ${if eq{$tls_cipher}{}{}{*}} +# .endif \ No newline at end of file diff --git a/templates/misc/configfiles/debian_lenny/exim4/etc_exim4_conf.d_main_10_syscp-config_options b/templates/misc/configfiles/debian_lenny/exim4/etc_exim4_conf.d_main_10_syscp-config_options new file mode 100644 index 0000000000..9ddde2c5d4 --- /dev/null +++ b/templates/misc/configfiles/debian_lenny/exim4/etc_exim4_conf.d_main_10_syscp-config_options @@ -0,0 +1,20 @@ +hide mysql_servers = /// + +SYSCP_LOCAL_DOMAIN = SELECT domain FROM panel_domains WHERE domain = '${quote_mysql:$domain}' AND isemaildomain = '1' + +SYSCP_MAILALIAS = SELECT REPLACE(destination,' ',',') FROM mail_virtual WHERE \ + (( email = '${quote_mysql:$local_part}@${quote_mysql:$domain}' ) \ + OR ( email = '@${quote_mysql:$domain}' AND iscatchall > 0 )) \ + AND destination <> '' AND destination <> ' ' ORDER BY iscatchall ASC LIMIT 1 + +SYSCP_MAILUSER = SELECT CONCAT(homedir,maildir) FROM mail_users WHERE \ + email = '${quote_mysql:$local_part}@${quote_mysql:$domain}' AND postfix = 'y' + +SYSCP_PARENT_DOMAIN = SELECT parent.domain FROM `panel_domains` AS parent INNER JOIN panel_domains AS alias \ + ON alias.domain = '${quote_mysql:$domain}' AND parent.id = alias.aliasdomain + +SYSCP_AUTH_PLAIN = SELECT password_enc FROM mail_users WHERE username = '${quote_mysql:$2}' + +SYSCP_AUTH_LOGIN = SELECT password_enc FROM mail_users WHERE username = '${quote_mysql:$1}' + +domainlist syscp_domain = mysql;SYSCP_LOCAL_DOMAIN \ No newline at end of file diff --git a/templates/misc/configfiles/debian_lenny/exim4/etc_exim4_conf.d_router_180_syscp-config b/templates/misc/configfiles/debian_lenny/exim4/etc_exim4_conf.d_router_180_syscp-config new file mode 100644 index 0000000000..c3168c79ce --- /dev/null +++ b/templates/misc/configfiles/debian_lenny/exim4/etc_exim4_conf.d_router_180_syscp-config @@ -0,0 +1,12 @@ +syscp_mailalias: + debug_print = "R: syscp_mailalias for $local_part@$domain" + driver = redirect + domains = +syscp_domain + data = ${lookup mysql {SYSCP_MAILALIAS}{$value}fail} + +syscp_mailuser: + debug_print = "R: syscp_mailuser for $local_part@$domain" + driver = redirect + domains = +syscp_domain + data = ${lookup mysql {SYSCP_MAILUSER}{$value}fail} + directory_transport = maildir_syscp \ No newline at end of file diff --git a/templates/misc/configfiles/debian_lenny/exim4/etc_exim4_conf.d_transport_30_syscp-config b/templates/misc/configfiles/debian_lenny/exim4/etc_exim4_conf.d_transport_30_syscp-config new file mode 100644 index 0000000000..75602a3943 --- /dev/null +++ b/templates/misc/configfiles/debian_lenny/exim4/etc_exim4_conf.d_transport_30_syscp-config @@ -0,0 +1,13 @@ +maildir_syscp: + debug_print = "T: maildir_syscp for $local_part@$domain" + driver = appendfile + create_directory + delivery_date_add + envelope_to_add + return_path_add + maildir_format + directory_mode = 0770 + mode = 0660 + mode_fail_narrower = false + user = 2000 + group = 2000 \ No newline at end of file diff --git a/templates/misc/configfiles/debian_lenny/libnss/etc_nss-mysql-root.conf b/templates/misc/configfiles/debian_lenny/libnss/etc_nss-mysql-root.conf new file mode 100644 index 0000000000..305499f39a --- /dev/null +++ b/templates/misc/configfiles/debian_lenny/libnss/etc_nss-mysql-root.conf @@ -0,0 +1,16 @@ +conf.version = 2; +shadow.host = inet::3306; +shadow.database = ; +shadow.db_user = ; +shadow.db_password = ; +shadow.table = ftp_users u; +shadow.where_clause = ; +shadow.userid_column = u.id; +shadow.user_column = u.username; +shadow.password_column = u.password; +shadow.lastchange_column = UNIX_TIMESTAMP()-10; +shadow.min_column = 1; +shadow.max_column = 2; +shadow.warn_column = 7; +shadow.inact_column = -1; +shadow.expire_column = -1; diff --git a/templates/misc/configfiles/debian_lenny/libnss/etc_nss-mysql.conf b/templates/misc/configfiles/debian_lenny/libnss/etc_nss-mysql.conf new file mode 100644 index 0000000000..54461bb88c --- /dev/null +++ b/templates/misc/configfiles/debian_lenny/libnss/etc_nss-mysql.conf @@ -0,0 +1,24 @@ +conf.version = 2; +users.host = inet::3306; +users.database = ; +users.db_user = ; +users.db_password = ; +users.table = ftp_users u; +users.where_clause =; +users.user_column = u.username; +users.password_column = u.password; +users.userid_column = u.id; +users.uid_column = u.uid; +users.gid_column = u.gid; +users.realname_column = u.username; +users.homedir_column = u.homedir; +users.shell_column = u.shell; +groups.group_info_table = ftp_groups g; +groups.where_clause = ; +groups.group_name_column = g.groupname; +groups.groupid_column = g.id; +groups.gid_column = g.gid; +groups.password_column = "x"; +groups.members_table = ftp_groups ug; +groups.member_userid_column = ug.customerid; +groups.member_groupid_column = ug.id; diff --git a/templates/misc/configfiles/debian_lenny/libnss/etc_nsswitch.conf b/templates/misc/configfiles/debian_lenny/libnss/etc_nsswitch.conf new file mode 100644 index 0000000000..7401ef2599 --- /dev/null +++ b/templates/misc/configfiles/debian_lenny/libnss/etc_nsswitch.conf @@ -0,0 +1,6 @@ +# Make sure that `passwd`, `group` and `shadow` have mysql in their lines +# You should place mysql at the end, so that it is queried after the other mechanisams +# +passwd: compat mysql +group: compat mysql +shadow: compat mysql diff --git a/templates/misc/configfiles/debian_lenny/lighttpd/etc_lighttpd.conf b/templates/misc/configfiles/debian_lenny/lighttpd/etc_lighttpd.conf new file mode 100644 index 0000000000..b69f0435da --- /dev/null +++ b/templates/misc/configfiles/debian_lenny/lighttpd/etc_lighttpd.conf @@ -0,0 +1,60 @@ +############################################################################### +# Default lighttpd.conf for SysCP. +############################################################################### +var.basedir = "/var/www" +var.logdir = "/var/log/lighttpd" +var.statedir = "/var/lib/lighttpd" + +server.modules = ( + "mod_rewrite", + "mod_redirect", + "mod_alias", + "mod_access", + "mod_auth", + "mod_fastcgi", + "mod_accesslog" +) + +server.username = "www-data" +server.groupname = "www-data" +server.document-root = var.basedir +server.pid-file = "/var/run/lighttpd.pid" +accesslog.filename = var.logdir + "/access.log" +server.errorlog = var.logdir + "/error.log" + +server.indexfiles = ("index.php", "index.html", + "index.htm", "default.htm") + +server.name = "" +server.port = 80 +server.bind = "" +url.access-deny = ("~", ".inc") + +fastcgi.server = ( +".php" => ( + "localhost" => ( + "socket" => "/var/kunden/tmp/lighttpd-fcgi-sock-lighttpd", + "broken-scriptfilename" => "enable", + "bin-path" => "/usr/bin/php5-cgi", + "min-procs" => 1, + "max-procs" => 1, + "max-load-per-proc" => 4, + "idle-timeout" => 60, + "bin-environment" => ( + "UID" => "www-data", + "GID" => "www-data", + "PHP_FCGI_CHILDREN" => "0", + "PHP_FCGI_MAX_REQUESTS" => "10000" + ), + "bin-copy-environment" => ( "" ) + ) + ) +) + +#### external configuration files +## mimetype mapping +include_shell "/usr/share/lighttpd/create-mime.assign.pl" + +## load enabled configuration files, +## read /etc/lighttpd/conf-available/README first +include_shell "/usr/share/lighttpd/include-conf-enabled.pl" \ No newline at end of file diff --git a/templates/misc/configfiles/debian_lenny/postfix/etc_postfix_main.cf b/templates/misc/configfiles/debian_lenny/postfix/etc_postfix_main.cf new file mode 100644 index 0000000000..b41c12f5e0 --- /dev/null +++ b/templates/misc/configfiles/debian_lenny/postfix/etc_postfix_main.cf @@ -0,0 +1,92 @@ +# Postfix programs paths settings +command_directory = /usr/sbin +daemon_directory = /usr/lib/postfix +program_directory = /usr/lib/postfix +sendmail_path = /usr/sbin/sendmail + +## General Postfix configuration +# should be the default domain from your provider eg. "server100.provider.tld" +mydomain = + +# should be different from $mydomain eg. "mail.$mydomain" +myhostname = + +mydestination = $myhostname, + $mydomain, + localhost.$myhostname, + localhost.$mydomain, + localhost +mynetworks = 127.0.0.0/8 +inet_interfaces = all +append_dot_mydomain = no +biff = no + +# Postfix performance settings +default_destination_concurrency_limit = 20 +local_destination_concurrency_limit = 2 + +# SMTPD Settings +smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU) +smtpd_helo_required = yes +smtpd_recipient_restrictions = permit_mynetworks, + permit_sasl_authenticated, + reject_unauth_destination, + reject_unauth_pipelining, + reject_non_fqdn_recipient +smtpd_sender_restrictions = permit_mynetworks, + permit_sasl_authenticated, + reject_unknown_hostname, + reject_unknown_recipient_domain, + reject_unknown_sender_domain +smtpd_client_restrictions = permit_mynetworks, + permit_sasl_authenticated, + reject_unknown_client +# Maximum size of Message in bytes (50MB) +message_size_limit = 52428800 + +## SASL Auth Settings +smtpd_sasl_auth_enable = yes +smtpd_sasl_local_domain = $myhostname +smtpd_sasl_security_options = noanonymous +broken_sasl_auth_clients = yes +## Dovecot Settings for deliver, SASL Auth and virtual transport +## uncomment those line to use Dovecot +#mailbox_command = /usr/lib/dovecot/deliver +#virtual_transport = dovecot +#dovecot_destination_recipient_limit = 1 + +# Virtual delivery settings +virtual_mailbox_base = +virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual_mailbox_maps.cf +virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual_mailbox_domains.cf +virtual_alias_maps = mysql:/etc/postfix/mysql-virtual_alias_maps.cf +virtual_uid_maps = static: +virtual_gid_maps = static: + +# Local delivery settings +local_transport = local +alias_database = hash:/etc/aliases +alias_maps = $alias_database + +# Default Mailbox size, is set to 0 which means unlimited! +mailbox_size_limit = 0 + +### TLS settings +### +## TLS for outgoing mails from the server to another server +#smtp_use_tls = yes +#smtp_tls_note_starttls_offer = yes +## TLS for email client +#smtpd_tls_cert_file = /etc/ssl/server/.pem +#smtpd_tls_key_file = /etc/ssl/server/.pem +#smtpd_tls_CAfile = /etc/ssl/cacert.class3.crt # Just an example for CACert.org +#smtpd_tls_auth_only = no +#smtpd_tls_loglevel = 1 +#smtpd_tls_received_header = yes +#smtpd_tls_session_cache_timeout = 3600s +#tls_random_source = dev:/dev/urandom + +debugger_command = + PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin + ddd $daemon_directory/$process_name $process_id & sleep 5 + diff --git a/templates/misc/configfiles/debian_lenny/postfix/etc_postfix_master.cf b/templates/misc/configfiles/debian_lenny/postfix/etc_postfix_master.cf new file mode 100644 index 0000000000..678bb9cd43 --- /dev/null +++ b/templates/misc/configfiles/debian_lenny/postfix/etc_postfix_master.cf @@ -0,0 +1,4 @@ +# Add this lines to be able to use dovecot as delivery agent +# Dovecot LDA +dovecot unix - n n - - pipe + flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -d ${recipient} diff --git a/templates/misc/configfiles/debian_lenny/postfix/etc_postfix_mysql-virtual_alias_maps.cf b/templates/misc/configfiles/debian_lenny/postfix/etc_postfix_mysql-virtual_alias_maps.cf new file mode 100644 index 0000000000..c921e6f2bd --- /dev/null +++ b/templates/misc/configfiles/debian_lenny/postfix/etc_postfix_mysql-virtual_alias_maps.cf @@ -0,0 +1,8 @@ +user = +password = +dbname = +table = mail_virtual +select_field = destination +where_field = email +additional_conditions = and destination <> '' and destination <> ' ' +hosts = diff --git a/templates/misc/configfiles/debian_lenny/postfix/etc_postfix_mysql-virtual_mailbox_domains.cf b/templates/misc/configfiles/debian_lenny/postfix/etc_postfix_mysql-virtual_mailbox_domains.cf new file mode 100644 index 0000000000..4484bee275 --- /dev/null +++ b/templates/misc/configfiles/debian_lenny/postfix/etc_postfix_mysql-virtual_mailbox_domains.cf @@ -0,0 +1,8 @@ +user = +password = +dbname = +table = panel_domains +select_field = domain +where_field = domain +additional_conditions = and isemaildomain = '1' +hosts = diff --git a/templates/misc/configfiles/debian_lenny/postfix/etc_postfix_mysql-virtual_mailbox_maps.cf b/templates/misc/configfiles/debian_lenny/postfix/etc_postfix_mysql-virtual_mailbox_maps.cf new file mode 100644 index 0000000000..7e0f79af72 --- /dev/null +++ b/templates/misc/configfiles/debian_lenny/postfix/etc_postfix_mysql-virtual_mailbox_maps.cf @@ -0,0 +1,7 @@ +user = +password = +dbname = +table = mail_users +select_field = maildir +where_field = email +hosts = diff --git a/templates/misc/configfiles/debian_lenny/postfix/etc_postfix_sasl_smtpd.conf b/templates/misc/configfiles/debian_lenny/postfix/etc_postfix_sasl_smtpd.conf new file mode 100644 index 0000000000..de3699d8db --- /dev/null +++ b/templates/misc/configfiles/debian_lenny/postfix/etc_postfix_sasl_smtpd.conf @@ -0,0 +1,11 @@ +pwcheck_method: auxprop +auxprop_plugin: sql +allowanonymouslogin: no +allowplaintext: yes +mech_list: plain login cram-md5 digest-md5 +sql_engine: mysql +sql_hostnames: +sql_user: +sql_passwd: +sql_database: +sql_select: SELECT password FROM mail_users WHERE username='%u@%r' OR email='%u@%r' \ No newline at end of file diff --git a/templates/misc/configfiles/debian_lenny/powerdns/etc_powerdns_pdns-syscp.conf b/templates/misc/configfiles/debian_lenny/powerdns/etc_powerdns_pdns-syscp.conf new file mode 100644 index 0000000000..ca2d022802 --- /dev/null +++ b/templates/misc/configfiles/debian_lenny/powerdns/etc_powerdns_pdns-syscp.conf @@ -0,0 +1,7 @@ +allow-axfr-ips= +#local-ipv6=YOUR_IPv6_(if_any) +bind-config=/etc/bind/named.conf +bind-check-interval=180 +log-dns-details=yes +local-address=,127.0.0.1 + diff --git a/templates/misc/configfiles/debian_lenny/powerdns/etc_powerdns_pdns.conf b/templates/misc/configfiles/debian_lenny/powerdns/etc_powerdns_pdns.conf new file mode 100644 index 0000000000..c3eef80d2f --- /dev/null +++ b/templates/misc/configfiles/debian_lenny/powerdns/etc_powerdns_pdns.conf @@ -0,0 +1,17 @@ +allow-recursion=127.0.0.1 +config-dir=/etc/powerdns +daemon=yes +guardian=yes +launch=bind +lazy-recursion=yes +local-port=53 +master=yes +module-dir=/usr/lib/powerdns +setgid=pdns +setuid=pdns +socket-dir=/var/run +version-string=powerdns +bind-config=/etc/bind/named.conf +bind-check-interval=300 +include=/etc/powerdns/pdns_syscp.conf + diff --git a/templates/misc/configfiles/debian_lenny/proftpd/etc_proftpd_modules.conf b/templates/misc/configfiles/debian_lenny/proftpd/etc_proftpd_modules.conf new file mode 100644 index 0000000000..a3da4dbc87 --- /dev/null +++ b/templates/misc/configfiles/debian_lenny/proftpd/etc_proftpd_modules.conf @@ -0,0 +1,58 @@ +# +# This file is used to manage DSO modules and features. +# + +# This is the directory where DSO modules reside + +ModulePath /usr/lib/proftpd + +# Allow only user root to load and unload modules, but allow everyone +# to see which modules have been loaded + +ModuleControlsACLs insmod,rmmod allow user root +ModuleControlsACLs lsmod allow user * + +LoadModule mod_ctrls_admin.c +LoadModule mod_tls.c + +# Install proftpd-mod-mysql or proftpd-mod-pgsql to use this +LoadModule mod_sql.c + +# Install proftpd-mod-ldap to use this +#LoadModule mod_ldap.c + +# +# 'SQLBackend mysql' or 'SQLBackend postgres' directives are required +# to have SQL authorization working. You can also comment out the +# unused module here, in alternative. +# + +# Install proftpd-mod-mysql to use this +LoadModule mod_sql_mysql.c + +# Install proftpd-mod-pgsql to use this +#LoadModule mod_sql_postgres.c + +LoadModule mod_radius.c +LoadModule mod_quotatab.c +LoadModule mod_quotatab_file.c + +# Install proftpd-mod-ldap to use this +#LoadModule mod_quotatab_ldap.c + +# Install proftpd-mod-pgsql or proftpd-mod-mysql to use this +#LoadModule mod_quotatab_sql.c +LoadModule mod_quotatab_radius.c +LoadModule mod_wrap.c +LoadModule mod_rewrite.c +LoadModule mod_load.c +LoadModule mod_ban.c +LoadModule mod_wrap2.c +LoadModule mod_wrap2_file.c +# Install proftpd-mod-pgsql or proftpd-mod-mysql to use this +#LoadModule mod_wrap2_sql.c +LoadModule mod_dynmasq.c + + +# keep this module the last one +LoadModule mod_ifsession.c diff --git a/templates/misc/configfiles/debian_lenny/proftpd/etc_proftpd_proftpd.conf b/templates/misc/configfiles/debian_lenny/proftpd/etc_proftpd_proftpd.conf new file mode 100644 index 0000000000..434d676294 --- /dev/null +++ b/templates/misc/configfiles/debian_lenny/proftpd/etc_proftpd_proftpd.conf @@ -0,0 +1,129 @@ +# +# /etc/proftpd/proftpd.conf -- This is a basic ProFTPD configuration file. +# To really apply changes reload proftpd after modifications. +# + +# Includes DSO modules +Include /etc/proftpd/modules.conf + +# Set off to disable IPv6 support which is annoying on IPv4 only boxes. +UseIPv6 on +# If set on you can experience a longer connection delay in many cases. +IdentLookups off + +ServerName " FTP Server" +ServerType standalone +DeferWelcome off + +MultilineRFC2228 on +DefaultServer on +ShowSymlinks on + +TimeoutNoTransfer 600 +TimeoutStalled 600 +TimeoutIdle 1200 + +DisplayLogin welcome.msg +DisplayChdir .message true +ListOptions "-l" + +DenyFilter \*.*/ + +# Use this to jail all users in their homes +# DefaultRoot ~ + +# Users require a valid shell listed in /etc/shells to login. +# Use this directive to release that constrain. +# RequireValidShell off + +# Port 21 is the standard FTP port. +Port 21 + +# In some cases you have to specify passive ports range to by-pass +# firewall limitations. Ephemeral ports can be used for that, but +# feel free to use a more narrow range. +# PassivePorts 49152 65534 + +# If your host was NATted, this option is useful in order to +# allow passive tranfers to work. You have to use your public +# address and opening the passive ports used on your firewall as well. +# MasqueradeAddress 1.2.3.4 + +# This is useful for masquerading address with dynamic IPs: +# refresh any configured MasqueradeAddress directives every 8 hours + +# DynMasqRefresh 28800 + + +# To prevent DoS attacks, set the maximum number of child processes +# to 30. If you need to allow more than 30 concurrent connections +# at once, simply increase this value. Note that this ONLY works +# in standalone mode, in inetd mode you should use an inetd server +# that allows you to limit maximum number of processes per service +# (such as xinetd) +MaxInstances 30 + +# Set the user and group that the server normally runs at. +User proftpd +Group nogroup + +# Umask 022 is a good standard umask to prevent new files and dirs +# (second parm) from being group and world writable. +Umask 022 022 +# Normally, we want files to be overwriteable. +AllowOverwrite on + +# Uncomment this if you are using NIS or LDAP via NSS to retrieve passwords: +# PersistentPasswd off + +# This is required to use both PAM-based authentication and local passwords +# AuthOrder mod_auth_pam.c* mod_auth_unix.c + +# Be warned: use of this directive impacts CPU average load! +# Uncomment this if you like to see progress and transfer rate with ftpwho +# in downloads. That is not needed for uploads rates. +# +# UseSendFile off + +TransferLog /var/log/proftpd/xferlog +SystemLog /var/log/proftpd/proftpd.log + + +QuotaEngine off + + + +Ratios off + + + +# Delay engine reduces impact of the so-called Timing Attack described in +# http://security.lss.hr/index.php?page=details&ID=LSS-2004-10-02 +# It is on by default. + +DelayEngine off + + + +ControlsEngine off +ControlsMaxClients 2 +ControlsLog /var/log/proftpd/controls.log +ControlsInterval 5 +ControlsSocket /var/run/proftpd/proftpd.sock + + + +AdminControlsEngine off + + +# +# Alternative authentication frameworks +# +#Include /etc/proftpd/ldap.conf +Include /etc/proftpd/sql.conf + +# +# This is used for FTPS connections +# +#Include /etc/proftpd/tls.conf + diff --git a/templates/misc/configfiles/debian_lenny/proftpd/etc_proftpd_sql.conf b/templates/misc/configfiles/debian_lenny/proftpd/etc_proftpd_sql.conf new file mode 100644 index 0000000000..a90f0af49d --- /dev/null +++ b/templates/misc/configfiles/debian_lenny/proftpd/etc_proftpd_sql.conf @@ -0,0 +1,25 @@ + +DefaultRoot ~ +RequireValidShell off +AuthOrder mod_sql.c + +SQLBackend mysql +SQLEngine on +SQLAuthenticate on + +SQLAuthTypes Crypt +SQLAuthenticate users* groups* +SQLConnectInfo @ +SQLUserInfo ftp_users username password uid gid homedir shell +SQLGroupInfo ftp_groups groupname gid members +SQLUserWhereClause "login_enabled = 'y'" + +SQLLog PASS login +SQLNamedQuery login UPDATE "last_login=now(), login_count=login_count+1 WHERE username='%u'" ftp_users + +SQLLog RETR download +SQLNamedQuery download UPDATE "down_count=down_count+1, down_bytes=down_bytes+%b WHERE username='%u'" ftp_users + +SQLLog STOR upload +SQLNamedQuery upload UPDATE "up_count=up_count+1, up_bytes=up_bytes+%b WHERE username='%u'" ftp_users + \ No newline at end of file diff --git a/templates/misc/configfiles/debian_lenny/pure-ftpd/etc_default_pure-ftpd-common b/templates/misc/configfiles/debian_lenny/pure-ftpd/etc_default_pure-ftpd-common new file mode 100644 index 0000000000..b26539047f --- /dev/null +++ b/templates/misc/configfiles/debian_lenny/pure-ftpd/etc_default_pure-ftpd-common @@ -0,0 +1,5 @@ +STANDALONE_OR_INETD=standalone +VIRTUALCHROOT=false +UPLOADSCRIPT= +UPLOADUID= +UPLOADGID= diff --git a/templates/misc/configfiles/debian_lenny/pure-ftpd/etc_pure-ftpd_conf_Bind b/templates/misc/configfiles/debian_lenny/pure-ftpd/etc_pure-ftpd_conf_Bind new file mode 100644 index 0000000000..aabe6ec390 --- /dev/null +++ b/templates/misc/configfiles/debian_lenny/pure-ftpd/etc_pure-ftpd_conf_Bind @@ -0,0 +1 @@ +21 diff --git a/templates/misc/configfiles/debian_lenny/pure-ftpd/etc_pure-ftpd_conf_ChrootEveryone b/templates/misc/configfiles/debian_lenny/pure-ftpd/etc_pure-ftpd_conf_ChrootEveryone new file mode 100644 index 0000000000..7cfab5b05d --- /dev/null +++ b/templates/misc/configfiles/debian_lenny/pure-ftpd/etc_pure-ftpd_conf_ChrootEveryone @@ -0,0 +1 @@ +yes diff --git a/templates/misc/configfiles/debian_lenny/pure-ftpd/etc_pure-ftpd_conf_CustomerProof b/templates/misc/configfiles/debian_lenny/pure-ftpd/etc_pure-ftpd_conf_CustomerProof new file mode 100644 index 0000000000..d00491fd7e --- /dev/null +++ b/templates/misc/configfiles/debian_lenny/pure-ftpd/etc_pure-ftpd_conf_CustomerProof @@ -0,0 +1 @@ +1 diff --git a/templates/misc/configfiles/debian_lenny/pure-ftpd/etc_pure-ftpd_conf_MaxIdleTime b/templates/misc/configfiles/debian_lenny/pure-ftpd/etc_pure-ftpd_conf_MaxIdleTime new file mode 100644 index 0000000000..60d3b2f4a4 --- /dev/null +++ b/templates/misc/configfiles/debian_lenny/pure-ftpd/etc_pure-ftpd_conf_MaxIdleTime @@ -0,0 +1 @@ +15 diff --git a/templates/misc/configfiles/debian_lenny/pure-ftpd/etc_pure-ftpd_conf_MinUID b/templates/misc/configfiles/debian_lenny/pure-ftpd/etc_pure-ftpd_conf_MinUID new file mode 100644 index 0000000000..83b33d238d --- /dev/null +++ b/templates/misc/configfiles/debian_lenny/pure-ftpd/etc_pure-ftpd_conf_MinUID @@ -0,0 +1 @@ +1000 diff --git a/templates/misc/configfiles/debian_lenny/pure-ftpd/etc_pure-ftpd_conf_MySQLConfigFile b/templates/misc/configfiles/debian_lenny/pure-ftpd/etc_pure-ftpd_conf_MySQLConfigFile new file mode 100644 index 0000000000..be85bafe5d --- /dev/null +++ b/templates/misc/configfiles/debian_lenny/pure-ftpd/etc_pure-ftpd_conf_MySQLConfigFile @@ -0,0 +1 @@ +/etc/pure-ftpd/db/mysql.conf diff --git a/templates/misc/configfiles/debian_lenny/pure-ftpd/etc_pure-ftpd_conf_NoAnonymous b/templates/misc/configfiles/debian_lenny/pure-ftpd/etc_pure-ftpd_conf_NoAnonymous new file mode 100644 index 0000000000..7cfab5b05d --- /dev/null +++ b/templates/misc/configfiles/debian_lenny/pure-ftpd/etc_pure-ftpd_conf_NoAnonymous @@ -0,0 +1 @@ +yes diff --git a/templates/misc/configfiles/debian_lenny/pure-ftpd/etc_pure-ftpd_conf_PAMAuthentication b/templates/misc/configfiles/debian_lenny/pure-ftpd/etc_pure-ftpd_conf_PAMAuthentication new file mode 100644 index 0000000000..7ecb56eb3f --- /dev/null +++ b/templates/misc/configfiles/debian_lenny/pure-ftpd/etc_pure-ftpd_conf_PAMAuthentication @@ -0,0 +1 @@ +no diff --git a/templates/misc/configfiles/debian_lenny/pure-ftpd/etc_pure-ftpd_db_mysql.conf b/templates/misc/configfiles/debian_lenny/pure-ftpd/etc_pure-ftpd_db_mysql.conf new file mode 100644 index 0000000000..c139a7f151 --- /dev/null +++ b/templates/misc/configfiles/debian_lenny/pure-ftpd/etc_pure-ftpd_db_mysql.conf @@ -0,0 +1,10 @@ +MYSQLServer +MYSQLUser +MYSQLPassword +MYSQLDatabase +MYSQLCrypt any + +MYSQLGetPW SELECT password FROM ftp_users WHERE username="\L" AND login_enabled="y" +MYSQLGetUID SELECT uid FROM ftp_users WHERE username="\L" AND login_enabled="y" +MYSQLGetGID SELECT gid FROM ftp_users WHERE username="\L" AND login_enabled="y" +MYSQLGetDir SELECT homedir FROM ftp_users WHERE username="\L" AND login_enabled="y" diff --git a/templates/misc/configfiles/debian_lenny/xinetd/etc_xinet.d_syscp b/templates/misc/configfiles/debian_lenny/xinetd/etc_xinet.d_syscp new file mode 100644 index 0000000000..acb494c173 --- /dev/null +++ b/templates/misc/configfiles/debian_lenny/xinetd/etc_xinet.d_syscp @@ -0,0 +1,11 @@ +service syscp +{ + id = syscp + socket_type = dgram + protocol = tcp + wait = no + user = root + server = /usr/bin/php + server_args = -q /var/www/syscp/scripts/cron_tasks.php + only_from = 127.0.0.1 +} diff --git a/templates/misc/configfiles/gentoo/awstats/etc_apache_vhosts_05_awstats.conf b/templates/misc/configfiles/gentoo/awstats/etc_apache_vhosts_05_awstats.conf new file mode 100644 index 0000000000..2c220e2f51 --- /dev/null +++ b/templates/misc/configfiles/gentoo/awstats/etc_apache_vhosts_05_awstats.conf @@ -0,0 +1,14 @@ +ScriptAlias /awstats/ "/usr/lib/cgi-bin/" +ScriptAlias /awstats "/usr/lib/cgi-bin/awstats.pl" +ScriptAlias /awstats.pl "/usr/lib/cgi-bin/awstats.pl" +Alias /awstats-icon/ "/usr/share/awstats/icon/" + + + Options ExecCGI + AllowOverride None + + Order allow,deny + Allow from all + + + diff --git a/templates/misc/configfiles/gentoo/awstats/etc_awstats_awstats.model.conf.syscp b/templates/misc/configfiles/gentoo/awstats/etc_awstats_awstats.model.conf.syscp new file mode 100644 index 0000000000..414c74d5c8 --- /dev/null +++ b/templates/misc/configfiles/gentoo/awstats/etc_awstats_awstats.model.conf.syscp @@ -0,0 +1,9 @@ +LogFile="{LOG_FILE}" +LogType=W +LogFormat = 1 +LogSeparator=" " +SiteDomain="{SITE_DOMAIN}" +HostAliases="{HOST_ALIASES}" + +# Include local configuration options identical for all virtual hosts +Include "/etc/awstats/awstats.conf.local" diff --git a/templates/misc/configfiles/gentoo/awstats/etc_awstats_awstats.model_log_sql.conf.syscp b/templates/misc/configfiles/gentoo/awstats/etc_awstats_awstats.model_log_sql.conf.syscp new file mode 100644 index 0000000000..f8d795d73a --- /dev/null +++ b/templates/misc/configfiles/gentoo/awstats/etc_awstats_awstats.model_log_sql.conf.syscp @@ -0,0 +1,9 @@ +LogFile="{LOG_FILE}" +LogType=W +LogFormat = "%host %virtualname %logname %time1 %methodurl %code %bytesd %refererquot %uaquot" +LogSeparator=" " +SiteDomain="{SITE_DOMAIN}" +HostAliases="{HOST_ALIASES}" + +# Include local configuration options identical for all virtual hosts +Include "/etc/awstats/awstats.conf.local" \ No newline at end of file diff --git a/templates/misc/configfiles/gentoo/awstats/etc_cron.d_awstats b/templates/misc/configfiles/gentoo/awstats/etc_cron.d_awstats new file mode 100644 index 0000000000..9ff61b1712 --- /dev/null +++ b/templates/misc/configfiles/gentoo/awstats/etc_cron.d_awstats @@ -0,0 +1,6 @@ +# +# Set PATH, otherwise restart-scripts won't find start-stop-daemon +# +PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin + +*/10 * * * * apache [ -x /usr/bin/awstats_updateall.pl ] && /usr/bin/awstats_updateall.pl now -awstatsprog=/usr/lib/cgi-bin/awstats.pl -configdir=/etc/awstats -excludeconf=awstats.model.conf.syscp,awstats.conf \ No newline at end of file diff --git a/templates/misc/configfiles/gentoo/awstats/etc_cron.d_awstats_log_sql b/templates/misc/configfiles/gentoo/awstats/etc_cron.d_awstats_log_sql new file mode 100644 index 0000000000..4f5c11a0a5 --- /dev/null +++ b/templates/misc/configfiles/gentoo/awstats/etc_cron.d_awstats_log_sql @@ -0,0 +1,6 @@ +# +# Set PATH, otherwise restart-scripts won't find start-stop-daemon +# +PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin + +45 0 * * * apache [ -x /usr/bin/awstats_updateall.pl ] && /usr/bin/awstats_updateall.pl now -awstatsprog=/usr/lib/cgi-bin/awstats.pl -configdir=/etc/awstats -excludeconf=awstats.model.conf.syscp,awstats.conf \ No newline at end of file diff --git a/templates/misc/configfiles/gentoo/awstats/etc_lighttpd_syscp-awstats.conf b/templates/misc/configfiles/gentoo/awstats/etc_lighttpd_syscp-awstats.conf new file mode 100644 index 0000000000..c5369bb318 --- /dev/null +++ b/templates/misc/configfiles/gentoo/awstats/etc_lighttpd_syscp-awstats.conf @@ -0,0 +1,19 @@ +#alias.url += ( +# "/js/awstats_misc_tracker.js" => "/usr/share/awstats/wwwroot/js/awstats_misc_tracker.js" +#) + +$HTTP["url"] =~ "^/awstats" { + alias.url += ( + "/awstats/" => "", + "/awstats" => "awstats.pl", + "/awstats.pl" => "awstats.pl" +# "/awstatsicons/" => "/usr/share/awstats/wwwroot/icon/" + ) + + index-file.names = ( "awstatstotals.php" ) + + cgi.assign = ( + ".pl" => "/usr/bin/perl", + ".cgi" => "/usr/bin/perl" + ) +} \ No newline at end of file diff --git a/templates/misc/configfiles/gentoo/bind/etc_bind_default.zone b/templates/misc/configfiles/gentoo/bind/etc_bind_default.zone new file mode 100644 index 0000000000..817b9bcf2f --- /dev/null +++ b/templates/misc/configfiles/gentoo/bind/etc_bind_default.zone @@ -0,0 +1,21 @@ +$TTL 1W +@ IN SOA ns root ( + 2004060501 ; serial + 8H ; refresh + 2H ; retry + 1W ; expiry + 11h) ; minimum + + IN NS ns + IN MX 10 mail + + IN A + IN MX 10 mail + +* IN A + IN MX 10 mail + +ns IN A + +mail IN A + IN MX 10 mail diff --git a/templates/misc/configfiles/gentoo/courier/etc_courier-imap_imapd b/templates/misc/configfiles/gentoo/courier/etc_courier-imap_imapd new file mode 100644 index 0000000000..f594e41382 --- /dev/null +++ b/templates/misc/configfiles/gentoo/courier/etc_courier-imap_imapd @@ -0,0 +1,376 @@ +##VERSION: $Id: imapd.dist.in,v 1.32 2004/11/25 04:57:04 mrsam Exp $ +# +# imapd created from imapd.dist by sysconftool +# +# Do not alter lines that begin with ##, they are used when upgrading +# this configuration. +# +# Copyright 1998 - 2004 Double Precision, Inc. See COPYING for +# distribution information. +# +# This configuration file sets various options for the Courier-IMAP server +# when used with the couriertcpd server. +# A lot of the stuff here is documented in the manual page for couriertcpd. +# +# NOTE - do not use \ to split long variable contents on multiple lines. +# This will break the default imapd.rc script, which parses this file. +# +##NAME: ADDRESS:0 +# +# Address to listen on, can be set to a single IP address. +# +# ADDRESS=127.0.0.1 + +ADDRESS=0 + +##NAME: PORT:1 +# +# Port numbers that connections are accepted on. The default is 143, +# the standard IMAP port. +# +# Multiple port numbers can be separated by commas. When multiple port +# numbers are used it is possible to select a specific IP address for a +# given port as "ip.port". For example, "127.0.0.1.900,192.68.0.1.900" +# accepts connections on port 900 on IP addresses 127.0.0.1 and 192.68.0.1 +# The previous ADDRESS setting is a default for ports that do not have +# a specified IP address. + +PORT=143 + +##NAME: AUTHSERVICE:0 +# +# It's possible to authenticate using a different 'service' parameter +# depending on the connection's port. This only works with authentication +# modules that use the 'service' parameter, such as PAM. Example: +# +# AUTHSERVICE143=imap +# AUTHSERVICE993=imaps + +##NAME: MAXDAEMONS:0 +# +# Maximum number of IMAP servers started +# + +MAXDAEMONS=50 + +##NAME: MAXPERIP:0 +# +# Maximum number of connections to accept from the same IP address + +MAXPERIP=10 + +##NAME: PIDFILE:0 +# +# File where couriertcpd will save its process ID +# + +PIDFILE=/var/run/imapd.pid + +##NAME: TCPDOPTS:0 +# +# Miscellaneous couriertcpd options that shouldn't be changed. +# + +TCPDOPTS="-nodnslookup -noidentlookup" + +##NAME: IMAP_CAPABILITY:1 +# +# IMAP_CAPABILITY specifies what most of the response should be to the +# CAPABILITY command. +# +# If you have properly configured Courier to use CRAM-MD5 or CRAM-SHA1 +# authentication (see INSTALL), set IMAP_CAPABILITY as follows: +# +# IMAP_CAPABILITY="IMAP4rev1 UIDPLUS CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES SORT QUOTA AUTH=CRAM-MD5 AUTH=CRAM-SHA1 IDLE" +# + +IMAP_CAPABILITY="IMAP4rev1 UIDPLUS CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES SORT QUOTA IDLE" + +##NAME: KEYWORDS_CAPABILITY:0 +# +# IMAP_KEYWORDS=1 enables custom IMAP keywords. Set this option to 0 to +# disable custom keywords. + +IMAP_KEYWORDS=1 + +##NAME: SMAP1_CAPABILITY:0 +# +# EXPERIMENTAL +# +# To enable the experimental "Simple Mail Access Protocol" extensions, +# uncomment the following setting. +# +# SMAP_CAPABILITY=SMAP1 + +##NAME: IMAP_CAPABILITY_ORIG:1 +# +# For use by webadmin + +IMAP_CAPABILITY_ORIG="IMAP4rev1 UIDPLUS CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES SORT QUOTA AUTH=CRAM-MD5 AUTH=CRAM-SHA1 IDLE" + +##NAME: IMAP_PROXY:0 +# +# Enable proxying. See README.proxy + +IMAP_PROXY=0 + +##NAME: IMAP_PROXY_FOREIGN:0 +# +# Proxying to non-Courier servers. Re-sends the CAPABILITY command after +# logging in to the remote server. May not work with all IMAP clients. + +IMAP_PROXY_FOREIGN=0 + +##NAME: IMAP_IDLE_TIMEOUT:0 +# +# This setting controls how often +# the server polls for changes to the folder, in IDLE mode (in seconds). + +IMAP_IDLE_TIMEOUT=60 + +##NAME: IMAP_CAPABILITY_TLS:0 +# +# The following setting will advertise SASL PLAIN authentication after +# STARTTLS is established. If you want to allow SASL PLAIN authentication +# with or without TLS then just comment this out, and add AUTH=PLAIN to +# IMAP_CAPABILITY + +IMAP_CAPABILITY_TLS="$IMAP_CAPABILITY AUTH=PLAIN" + +##NAME: IMAP_TLS_ORIG:0 +# +# For use by webadmin + +IMAP_CAPABILITY_TLS_ORIG="$IMAP_CAPABILITY_ORIG AUTH=PLAIN" + +##NAME: IMAP_DISABLETHREADSORT:0 +# +# Set IMAP_DISABLETHREADSORT to disable the THREAD and SORT commands - +# server side sorting and threading. +# +# Those capabilities will still be advertised, but the server will reject +# them. Set this option if you want to disable all the extra load from +# server-side threading and sorting. Not advertising those capabilities +# will simply result in the clients reading the entire folder, and sorting +# it on the client side. That will still put some load on the server. +# advertising these capabilities, but rejecting the commands, will stop this +# silliness. +# + +IMAP_DISABLETHREADSORT=0 + +##NAME: IMAP_CHECK_ALL_FOLDERS:0 +# +# Set IMAP_CHECK_ALL_FOLDERS to 1 if you want the server to check for new +# mail in every folder. Not all IMAP clients use the IMAP's new mail +# indicator, but some do. Normally new mail is checked only in INBOX, +# because it is a comparatively time consuming operation, and it would be +# a complete waste of time unless mail filters are used to deliver +# mail directly to folders. +# +# When IMAP clients are used which support new mail indication, and when +# mail filters are used to sort incoming mail into folders, setting +# IMAP_CHECK_ALL_FOLDERS to 1 will allow IMAP clients to announce new +# mail in folders. Note that this will result in slightly more load on the +# server. +# + +IMAP_CHECK_ALL_FOLDERS=0 + +##NAME: IMAP_OBSOLETE_CLIENT:0 +# +# Set IMAP_OBSOLETE_CLIENT if your IMAP client expects \\NoInferiors to mean +# what \\HasNoChildren really means. + +IMAP_OBSOLETE_CLIENT=0 + +##NAME: IMAP_UMASK:0 +# +# IMAP_UMASK sets the umask of the server process. The value of IMAP_UMASK is +# simply passed to the "umask" command. The default value is 022. +# +# This feature is mostly useful for shared folders, where the file permissions +# of the messages may be important. + +IMAP_UMASK=027 + +##NAME: IMAP_ULIMITD:0 +# +# IMAP_ULIMITD sets the maximum size of the data segment of the server +# process. The value of IMAP_ULIMITD is simply passed to the "ulimit -d" +# command (or ulimit -v). The argument to ulimi sets the upper limit on the +# size of the data segment of the server process, in kilobytes. The default +# value of 65536 sets a very generous limit of 64 megabytes, which should +# be more than plenty for anyone. +# +# This feature is used as an additional safety check that should stop +# any potential denial-of-service attacks that exploit any kind of +# a memory leak to exhaust all the available memory on the server. +# It is theoretically possible that obscenely huge folders will also +# result in the server running out of memory when doing server-side +# sorting (by my calculations you have to have at least 100,000 messages +# in a single folder, for that to happen). + +IMAP_ULIMITD=65536 + +##NAME: IMAP_USELOCKS:0 +# +# Setting IMAP_USELOCKS to 1 will use dot-locking to support concurrent +# multiple access to the same folder. This incurs slight additional +# overhead. Concurrent multiple access will still work without this setting, +# however occasionally a minor race condition may result in an IMAP client +# downloading the same message twice, or a keyword update will fail. +# +# IMAP_USELOCKS=1 is strongly recommended when shared folders are used. + +IMAP_USELOCKS=1 + +##NAME: IMAP_SHAREDINDEXFILE:0 +# +# The index of all accessible folders. Do not change this setting unless +# you know what you're doing. See README.sharedfolders for additional +# information. + +IMAP_SHAREDINDEXFILE=/etc/courier-imap/shared/index + +##NAME: IMAP_ENHANCEDIDLE:0 +# +# If Courier was compiled with the File Alteration Monitor, setting +# IMAP_ENHANCEDIDLE to 1 enables enhanced IDLE mode, where multiple +# clients may open the same folder concurrently, and receive updates to +# folder contents in realtime. See the imapd(8) man page for additional +# information. +# +# IMPORTANT: IMAP_USELOCKS *MUST* also be set to 1, and IDLE must be included +# in the IMAP_CAPABILITY list. +# + +IMAP_ENHANCEDIDLE=0 + +##NAME: IMAP_TRASHFOLDERNAME:0 +# +# The name of the magic trash Folder. For MSOE compatibility, +# you can set IMAP_TRASHFOLDERNAME="Deleted Items". +# +# IMPORTANT: If you change this, you must also change IMAP_EMPTYTRASH + +IMAP_TRASHFOLDERNAME=Trash + +##NAME: IMAP_EMPTYTRASH:0 +# +# The following setting is optional, and causes messages from the given +# folder to be automatically deleted after the given number of days. +# IMAP_EMPTYTRASH is a comma-separated list of folder:days. The default +# setting, below, purges 7 day old messages from the Trash folder. +# Another useful setting would be: +# +# IMAP_EMPTYTRASH=Trash:7,Sent:30 +# +# This would also delete messages from the Sent folder (presumably copies +# of sent mail) after 30 days. This is a global setting that is applied to +# every mail account, and is probably useful in a controlled, corporate +# environment. +# +# Important: the purging is controlled by CTIME, not MTIME (the file time +# as shown by ls). It is perfectly ordinary to see stuff in Trash that's +# a year old. That's the file modification time, MTIME, that's displayed. +# This is generally when the message was originally delivered to this +# mailbox. Purging is controlled by a different timestamp, CTIME, which is +# changed when the file is moved to the Trash folder (and at other times too). +# +# You might want to disable this setting in certain situations - it results +# in a stat() of every file in each folder, at login and logout. +# + +IMAP_EMPTYTRASH=Trash:7 + +##NAME: IMAP_MOVE_EXPUNGE_TO_TRASH:0 +# +# Set IMAP_MOVE_EXPUNGE_TO_TRASH to move expunged messages to Trash. This +# effectively allows an undo of message deletion by fishing the deleted +# mail from trash. Trash can be manually expunged as usually, and mail +# will get automatically expunged from Trash according to IMAP_EMPTYTRASH. +# +# NOTE: shared folders are still expunged as usual. Shared folders are +# not affected. +# + +IMAP_MOVE_EXPUNGE_TO_TRASH=0 + + +##NAME: OUTBOX:0 +# +# The next set of options deal with the "Outbox" enhancement. +# Uncomment the following setting to create a special folder, named +# INBOX.Outbox +# +# OUTBOX=.Outbox + +##NAME: SENDMAIL:0 +# +# If OUTBOX is defined, mail can be sent via the IMAP connection by copying +# a message to the INBOX.Outbox folder. For all practical matters, +# INBOX.Outbox looks and behaves just like any other IMAP folder. If this +# folder doesn't exist it must be created by the IMAP mail client, just +# like any other IMAP folder. The kicker: any message copied or moved to +# this folder is will be E-mailed by the Courier-IMAP server, by running +# the SENDMAIL program. Therefore, messages copied or moved to this +# folder must be well-formed RFC-2822 messages, with the recipient list +# specified in the To:, Cc:, and Bcc: headers. Courier-IMAP relies on +# SENDMAIL to read the recipient list from these headers (and delete the Bcc: +# header) by running the command "$SENDMAIL -oi -t -f $SENDER", with the +# message piped on standard input. $SENDER will be the return address +# of the message, which is set by the authentication module. +# +# DO NOT MODIFY SENDMAIL, below, unless you know what you're doing. +# + +SENDMAIL=/usr/sbin/sendmail + +##NAME: HEADERFROM:0 +# +# For administrative and oversight purposes, the return address, $SENDER +# will also be saved in the X-IMAP-Sender mail header. This header gets +# added to the sent E-mail (but it doesn't get saved in the copy of the +# message that's saved in the folder) +# +# WARNING - By enabling OUTBOX above, *every* IMAP mail client will receive +# the magic OUTBOX treatment. Therefore advance LARTing is in order for +# _all_ of your lusers, until every one of them is aware of this. Otherwise if +# OUTBOX is left at its default setting - a folder name that might be used +# accidentally - some people may be in for a rude surprise. You can redefine +# the name of the magic folder by changing OUTBOX, above. You should do that +# and pick a less-obvious name. Perhaps brand it with your organizational +# name ( OUTBOX=.WidgetsAndSonsOutbox ) + +HEADERFROM=X-IMAP-Sender + +##NAME: IMAPDSTART:0 +# +# IMAPDSTART is not used directly. Rather, this is a convenient flag to +# be read by your system startup script in /etc/rc.d, like this: +# +# . /etc/courier-imap/imapd +# +# case x$IMAPDSTART in +# x[yY]*) +# /usr/lib/courier-imap/imapd.rc start +# ;; +# esac +# +# The default setting is going to be NO, so you'll have to manually flip +# it to yes. + +IMAPDSTART=YES + +##NAME: MAILDIRPATH:0 +# +# MAILDIRPATH - directory name of the maildir directory. +# +MAILDIRPATH=Maildir + +#Hardwire a value for ${MAILDIR} +MAILDIR=.maildir +MAILDIRPATH=.maildir +#Put any program for ${PRERUN} here +PRERUN= diff --git a/templates/misc/configfiles/gentoo/courier/etc_courier-imap_imapd-ssl b/templates/misc/configfiles/gentoo/courier/etc_courier-imap_imapd-ssl new file mode 100644 index 0000000000..9f48d87576 --- /dev/null +++ b/templates/misc/configfiles/gentoo/courier/etc_courier-imap_imapd-ssl @@ -0,0 +1,199 @@ +##VERSION: $Id: imapd-ssl.dist.in,v 1.11 2004/10/21 00:45:35 mrsam Exp $ +# +# imapd-ssl created from imapd-ssl.dist by sysconftool +# +# Do not alter lines that begin with ##, they are used when upgrading +# this configuration. +# +# Copyright 2000 - 2004 Double Precision, Inc. See COPYING for +# distribution information. +# +# This configuration file sets various options for the Courier-IMAP server +# when used to handle SSL IMAP connections. +# +# SSL and non-SSL connections are handled by a dedicated instance of the +# couriertcpd daemon. If you are accepting both SSL and non-SSL IMAP +# connections, you will start two instances of couriertcpd, one on the +# IMAP port 143, and another one on the IMAP-SSL port 993. +# +# Download OpenSSL from http://www.openssl.org/ +# +##NAME: SSLPORT:1 +# +# Options in the imapd-ssl configuration file AUGMENT the options in the +# imapd configuration file. First the imapd configuration file is read, +# then the imapd-ssl configuration file, so we do not have to redefine +# anything. +# +# However, some things do have to be redefined. The port number is +# specified by SSLPORT, instead of PORT. The default port is port 993. +# +# Multiple port numbers can be separated by commas. When multiple port +# numbers are used it is possibly to select a specific IP address for a +# given port as "ip.port". For example, "127.0.0.1.900,192.68.0.1.900" +# accepts connections on port 900 on IP addresses 127.0.0.1 and 192.68.0.1 +# The SSLADDRESS setting is a default for ports that do not have +# a specified IP address. + +SSLPORT=993 + +##NAME: SSLADDRESS:0 +# +# Address to listen on, can be set to a single IP address. +# +# SSLADDRESS=127.0.0.1 + +SSLADDRESS=0 + +##NAME: SSLPIDFILE:0 +# +# That's the SSL IMAP port we'll listen on. +# Feel free to redefine MAXDAEMONS, TCPDOPTS, and MAXPERIP. + +SSLPIDFILE=/var/run/imapd-ssl.pid + +##NAME: IMAPDSSLSTART:0 +# +# Different pid files, so that both instances of couriertcpd can coexist +# happily. +# +# You can also redefine IMAP_CAPABILITY, although I can't +# think of why you'd want to do that. +# +# +# Ok, the following settings are new to imapd-ssl: +# +# Whether or not to start IMAP over SSL on simap port: + +IMAPDSSLSTART=YES + +##NAME: IMAPDSTARTTLS:0 +# +# Whether or not to implement IMAP STARTTLS extension instead: + +IMAPDSTARTTLS=YES + +##NAME: IMAP_TLS_REQUIRED:1 +# +# Set IMAP_TLS_REQUIRED to 1 if you REQUIRE STARTTLS for everyone. +# (this option advertises the LOGINDISABLED IMAP capability, until STARTTLS +# is issued). + +IMAP_TLS_REQUIRED=0 + +######################################################################### +# +# The following variables configure IMAP over SSL. If OpenSSL is available +# during configuration, the couriertls helper gets compiled, and upon +# installation a dummy TLS_CERTFILE gets generated. courieresmtpd will +# automatically advertise the ESMTP STARTTLS extension if both TLS_CERTFILE +# and COURIERTLS exist. +# +# WARNING: Peer certificate verification has NOT yet been tested. Proceed +# at your own risk. Only the basic SSL/TLS functionality is known to be +# working. Keep this in mind as you play with the following variables. +# +##NAME: COURIERTLS:0 +# + +COURIERTLS=/usr/sbin/couriertls + +##NAME: TLS_PROTOCOL:0 +# +# TLS_PROTOCOL sets the protocol version. The possible versions are: +# +# SSL2 - SSLv2 +# SSL3 - SSLv3 +# TLS1 - TLS1 + +TLS_PROTOCOL=SSL3 + +##NAME: TLS_STARTTLS_PROTOCOL:0 +# +# TLS_STARTTLS_PROTOCOL is used instead of TLS_PROTOCOL for the IMAP STARTTLS +# extension, as opposed to IMAP over SSL on port 993. +# + +TLS_STARTTLS_PROTOCOL=TLS1 + +##NAME: TLS_CIPHER_LIST:0 +# +# TLS_CIPHER_LIST optionally sets the list of ciphers to be used by the +# OpenSSL library. In most situations you can leave TLS_CIPHER_LIST +# undefined +# +# TLS_CIPHER_LIST="ALL:!ADH:RC4+RSA:+SSLv2:@STRENGTH" + +##NAME: TLS_TIMEOUT:0 +# TLS_TIMEOUT is currently not implemented, and reserved for future use. +# This is supposed to be an inactivity timeout, but its not yet implemented. +# + +##NAME: TLS_DHCERTFILE:0 +# +# TLS_DHCERTFILE - PEM file that stores our Diffie-Hellman cipher pair. +# When OpenSSL is compiled to use Diffie-Hellman ciphers instead of RSA +# you must generate a DH pair that will be used. In most situations the +# DH pair is to be treated as confidential, and the file specified by +# TLS_DHCERTFILE must not be world-readable. +# +# TLS_DHCERTFILE= + +##NAME: TLS_CERTFILE:0 +# +# TLS_CERTFILE - certificate to use. TLS_CERTFILE is required for SSL/TLS +# servers, and is optional for SSL/TLS clients. TLS_CERTFILE is usually +# treated as confidential, and must not be world-readable. +# +TLS_CERTFILE=/etc/ssl/server/.pem + +##NAME: TLS_TRUSTCERTS:0 +# +# TLS_TRUSTCERTS=pathname - load trusted certificates from pathname. +# pathname can be a file or a directory. If a file, the file should +# contain a list of trusted certificates, in PEM format. If a +# directory, the directory should contain the trusted certificates, +# in PEM format, one per file and hashed using OpenSSL's c_rehash +# script. TLS_TRUSTCERTS is used by SSL/TLS clients (by specifying +# the -domain option) and by SSL/TLS servers (TLS_VERIFYPEER is set +# to PEER or REQUIREPEER). +# +# +# TLS_TRUSTCERTS= + +##NAME: TLS_VERIFYPEER:0 +# +# TLS_VERIFYPEER - how to verify client certificates. The possible values of +# this setting are: +# +# NONE - do not verify anything +# +# PEER - verify the client certificate, if one's presented +# +# REQUIREPEER - require a client certificate, fail if one's not presented +# +# +TLS_VERIFYPEER=NONE + +##NAME: TLS_CACHE:0 +# +# A TLS/SSL session cache may slightly improve response for IMAP clients +# that open multiple SSL sessions to the server. TLS_CACHEFILE will be +# automatically created, TLS_CACHESIZE bytes long, and used as a cache +# buffer. +# +# This is an experimental feature and should be disabled if it causes +# problems with SSL clients. Disable SSL caching by commenting out the +# following settings: + +TLS_CACHEFILE=/var/lib/courier-imap/couriersslcache +TLS_CACHESIZE=524288 + +##NAME: MAILDIRPATH:0 +# +# MAILDIRPATH - directory name of the maildir directory. +# +MAILDIRPATH=Maildir + +#Hardwire a value for ${MAILDIR} +MAILDIRPATH=.maildir diff --git a/templates/misc/configfiles/gentoo/courier/etc_courier-imap_pop3d b/templates/misc/configfiles/gentoo/courier/etc_courier-imap_pop3d new file mode 100644 index 0000000000..71502ae66d --- /dev/null +++ b/templates/misc/configfiles/gentoo/courier/etc_courier-imap_pop3d @@ -0,0 +1,127 @@ +##VERSION: $Id: pop3d.dist.in,v 1.11 2004/10/30 15:39:38 mrsam Exp $ +# +# pop3d created from pop3d.dist by sysconftool +# +# Do not alter lines that begin with ##, they are used when upgrading +# this configuration. +# +# Copyright 1998 - 2004 Double Precision, Inc. See COPYING for +# distribution information. +# +# Courier POP3 daemon configuration +# +##NAME: PIDFILE:0 +# + +PIDFILE=/var/run/pop3d.pid + +##NAME: MAXDAEMONS:0 +# +# Maximum number of POP3 servers started +# + +MAXDAEMONS=50 + +##NAME: MAXPERIP:4 +# +# Maximum number of connections to accept from the same IP address + +MAXPERIP=5 + +##NAME: POP3AUTH:1 +# +# To advertise the SASL capability, per RFC 2449, uncomment the POP3AUTH +# variable: +# +# POP3AUTH="LOGIN" +# +# If you have configured the CRAM-MD5 or CRAM-SHA1, set POP3AUTH to something +# like this: +# +# POP3AUTH="LOGIN CRAM-MD5 CRAM-SHA1" + +POP3AUTH="" + +##NAME: POP3AUTH_ORIG:0 +# +# For use by webadmin + +POP3AUTH_ORIG="LOGIN CRAM-MD5 CRAM-SHA1" + +##NAME: POP3AUTH_TLS:1 +# +# To also advertise SASL PLAIN if SSL is enabled, uncomment the +# POP3AUTH_TLS environment variable: +# +# POP3AUTH_TLS="LOGIN PLAIN" + +POP3AUTH_TLS="" + +##NAME: POP3AUTH_TLS_ORIG:0 +# +# For use by webadmin + +POP3AUTH_TLS_ORIG="LOGIN PLAIN" + +##NAME: POP3_PROXY:0 +# +# Enable proxying. See README.proxy + +POP3_PROXY=0 + +##NAME: PORT:1 +# +# Port to listen on for connections. The default is port 110. +# +# Multiple port numbers can be separated by commas. When multiple port +# numbers are used it is possibly to select a specific IP address for a +# given port as "ip.port". For example, "127.0.0.1.900,192.68.0.1.900" +# accepts connections on port 900 on IP addresses 127.0.0.1 and 192.68.0.1 +# The ADDRESS setting is a default for ports that do not have a specified +# IP address. + +PORT=110 + +##NAME: ADDRESS:0 +# +# IP address to listen on. 0 means all IP addresses. + +ADDRESS=0 + +##NAME: TCPDOPTS:0 +# +# Other couriertcpd(1) options. The following defaults should be fine. +# + +TCPDOPTS="-nodnslookup -noidentlookup" + +##NAME: POP3DSTART:0 +# +# POP3DSTART is not referenced anywhere in the standard Courier programs +# or scripts. Rather, this is a convenient flag to be read by your system +# startup script in /etc/rc.d, like this: +# +# . /etc/courier-imap/pop3d +# case x$POP3DSTART in +# x[yY]*) +# /usr/lib/courier-imap/pop3d.rc start +# ;; +# esac +# +# The default setting is going to be NO, until Courier is shipped by default +# with enough platforms so that people get annoyed with having to flip it to +# YES every time. + +POP3DSTART=YES + +##NAME: MAILDIRPATH:0 +# +# MAILDIRPATH - directory name of the maildir directory. +# +MAILDIRPATH=Maildir + +#Hardwire a value for ${MAILDIR} +MAILDIR=.maildir +MAILDIRPATH=.maildir +#Put any program for ${PRERUN} here +PRERUN= diff --git a/templates/misc/configfiles/gentoo/courier/etc_courier-imap_pop3d-ssl b/templates/misc/configfiles/gentoo/courier/etc_courier-imap_pop3d-ssl new file mode 100644 index 0000000000..39220bd4df --- /dev/null +++ b/templates/misc/configfiles/gentoo/courier/etc_courier-imap_pop3d-ssl @@ -0,0 +1,186 @@ +##VERSION: $Id: pop3d-ssl.dist.in,v 1.12 2004/10/21 00:45:35 mrsam Exp $ +# +# pop3d-ssl created from pop3d-ssl.dist by sysconftool +# +# Do not alter lines that begin with ##, they are used when upgrading +# this configuration. +# +# Copyright 2000-2004 Double Precision, Inc. See COPYING for +# distribution information. +# +# This configuration file sets various options for the Courier-IMAP server +# when used to handle SSL POP3 connections. +# +# SSL and non-SSL connections are handled by a dedicated instance of the +# couriertcpd daemon. If you are accepting both SSL and non-SSL POP3 +# connections, you will start two instances of couriertcpd, one on the +# POP3 port 110, and another one on the POP3-SSL port 995. +# +# Download OpenSSL from http://www.openssl.org/ +# +##NAME: SSLPORT:0 +# +# Options in the pop3d-ssl configuration file AUGMENT the options in the +# pop3d configuration file. First the pop3d configuration file is read, +# then the pop3d-ssl configuration file, so we do not have to redefine +# anything. +# +# However, some things do have to be redefined. The port number is +# specified by SSLPORT, instead of PORT. The default port is port 995. +# +# Multiple port numbers can be separated by commas. When multiple port +# numbers are used it is possibly to select a specific IP address for a +# given port as "ip.port". For example, "127.0.0.1.900,192.68.0.1.900" +# accepts connections on port 900 on IP addresses 127.0.0.1 and 192.68.0.1 +# The SSLADDRESS setting is a default for ports that do not have +# a specified IP address. + +SSLPORT=995 + +##NAME: SSLADDRESS:0 +# +# Address to listen on, can be set to a single IP address. +# +# SSLADDRESS=127.0.0.1 + +SSLADDRESS=0 + +##NAME: SSLPIDFILE:0 +# +# +# + +SSLPIDFILE=/var/run/pop3d-ssl.pid + +##NAME: POP3DSSLSTART:0 +# +# Whether or not to start POP3 over SSL on spop3 port: + +POP3DSSLSTART=YES + +##NAME: POP3_STARTTLS:0 +# +# Whether or not to implement the POP3 STLS extension: + +POP3_STARTTLS=YES + +##NAME: POP3_TLS_REQUIRED:1 +# +# Set POP3_TLS_REQUIRED to 1 if you REQUIRE STARTTLS for everyone. +# (this option advertises the LOGINDISABLED POP3 capability, until STARTTLS +# is issued). + +POP3_TLS_REQUIRED=0 + +##NAME: COURIERTLS:0 +# +# The following variables configure POP3 over SSL. If OpenSSL is available +# during configuration, the couriertls helper gets compiled, and upon +# installation a dummy TLS_CERTFILE gets generated. courieresmtpd will +# automatically advertise the ESMTP STARTTLS extension if both TLS_CERTFILE +# and COURIERTLS exist. +# +# WARNING: Peer certificate verification has NOT yet been tested. Proceed +# at your own risk. Only the basic SSL/TLS functionality is known to be +# working. Keep this in mind as you play with the following variables. + +COURIERTLS=/usr/sbin/couriertls + +##NAME: TLS_PROTOCOL:0 +# +# TLS_PROTOCOL sets the protocol version. The possible versions are: +# +# SSL2 - SSLv2 +# SSL3 - SSLv3 +# TLS1 - TLS1 + +TLS_PROTOCOL=SSL3 + +##NAME: TLS_STARTTLS_PROTOCOL:0 +# +# TLS_STARTTLS_PROTOCOL is used instead of TLS_PROTOCOL for the POP3 STARTTLS +# extension, as opposed to POP3 over SSL on port 995. +# + +TLS_STARTTLS_PROTOCOL=TLS1 + +##NAME: TLS_CIPHER_LIST:0 +# +# TLS_CIPHER_LIST optionally sets the list of ciphers to be used by the +# OpenSSL library. In most situations you can leave TLS_CIPHER_LIST +# undefined +# +# TLS_CIPHER_LIST="ALL:!ADH:RC4+RSA:+SSLv2:@STRENGTH" + +##NAME: TLS_TIMEOUT:0 +# TLS_TIMEOUT is currently not implemented, and reserved for future use. +# This is supposed to be an inactivity timeout, but its not yet implemented. +# + +##NAME: TLS_DHCERTFILE:0 +# +# TLS_DHCERTFILE - PEM file that stores our Diffie-Hellman cipher pair. +# When OpenSSL is compiled to use Diffie-Hellman ciphers instead of RSA +# you must generate a DH pair that will be used. In most situations the +# DH pair is to be treated as confidential, and the file specified by +# TLS_DHCERTFILE must not be world-readable. +# +# TLS_DHCERTFILE= + +##NAME: TLS_CERTFILE:0 +# +# TLS_CERTFILE - certificate to use. TLS_CERTFILE is required for SSL/TLS +# servers, and is optional for SSL/TLS clients. TLS_CERTFILE is usually +# treated as confidential, and must not be world-readable. +# +TLS_CERTFILE=/etc/ssl/server/.pem + +##NAME: TLS_TRUSTCERTS:0 +# +# TLS_TRUSTCERTS=pathname - load trusted certificates from pathname. +# pathname can be a file or a directory. If a file, the file should +# contain a list of trusted certificates, in PEM format. If a +# directory, the directory should contain the trusted certificates, +# in PEM format, one per file and hashed using OpenSSL's c_rehash +# script. TLS_TRUSTCERTS is used by SSL/TLS clients (by specifying +# the -domain option) and by SSL/TLS servers (TLS_VERIFYPEER is set +# to PEER or REQUIREPEER). +# +# +# TLS_TRUSTCERTS= + +##NAME: TLS_VERIFYPEER:0 +# +# TLS_VERIFYPEER - how to verify client certificates. The possible values of +# this setting are: +# +# NONE - do not verify anything +# +# PEER - verify the client certificate, if one's presented +# +# REQUIREPEER - require a client certificate, fail if one's not presented +# +# +TLS_VERIFYPEER=NONE + +##NAME: TLS_CACHE:0 +# +# A TLS/SSL session cache may slightly improve response for long-running +# POP3 clients. TLS_CACHEFILE will be automatically created, TLS_CACHESIZE +# bytes long, and used as a cache buffer. +# +# This is an experimental feature and should be disabled if it causes +# problems with SSL clients. Disable SSL caching by commenting out the +# following settings: + +TLS_CACHEFILE=/var/lib/courier-imap/couriersslcache +TLS_CACHESIZE=524288 + +##NAME: MAILDIRPATH:0 +# +# MAILDIRPATH - directory name of the maildir directory. +# +MAILDIRPATH=Maildir + +#Hardwire a value for ${MAILDIR} +MAILDIRPATH=.maildir diff --git a/templates/misc/configfiles/gentoo/courier/etc_courier_authlib_authdaemonrc b/templates/misc/configfiles/gentoo/courier/etc_courier_authlib_authdaemonrc new file mode 100644 index 0000000000..867a12db25 --- /dev/null +++ b/templates/misc/configfiles/gentoo/courier/etc_courier_authlib_authdaemonrc @@ -0,0 +1,93 @@ +##VERSION: $Id: authdaemonrc.in,v 1.12 2005/07/05 12:25:08 mrsam Exp $ +# +# Copyright 2000-2005 Double Precision, Inc. See COPYING for +# distribution information. +# +# authdaemonrc created from authdaemonrc.dist by sysconftool +# +# Do not alter lines that begin with ##, they are used when upgrading +# this configuration. +# +# This file configures authdaemond, the resident authentication daemon. +# +# Comments in this file are ignored. Although this file is intended to +# be sourced as a shell script, authdaemond parses it manually, so +# the acceptable syntax is a bit limited. Multiline variable contents, +# with the \ continuation character, are not allowed. Everything must +# fit on one line. Do not use any additional whitespace for indentation, +# or anything else. + +##NAME: authmodulelist:2 +# +# The authentication modules that are linked into authdaemond. The +# default list is installed. You may selectively disable modules simply +# by removing them from the following list. The available modules you +# can use are: authuserdb authpam authshadow authmysql authcustom authpipe + +authmodulelist="authmysql" + +##NAME: authmodulelistorig:3 +# +# This setting is used by Courier's webadmin module, and should be left +# alone + +authmodulelistorig="authuserdb authpam authshadow authmysql authcustom authpipe" + +##NAME: daemons:0 +# +# The number of daemon processes that are started. authdaemon is typically +# installed where authentication modules are relatively expensive: such +# as authldap, or authmysql, so it's better to have a number of them running. +# PLEASE NOTE: Some platforms may experience a problem if there's more than +# one daemon. Specifically, SystemV derived platforms that use TLI with +# socket emulation. I'm suspicious of TLI's ability to handle multiple +# processes accepting connections on the same filesystem domain socket. +# +# You may need to increase daemons if as your system load increases. Symptoms +# include sporadic authentication failures. If you start getting +# authentication failures, increase daemons. However, the default of 5 +# SHOULD be sufficient. Bumping up daemon count is only a short-term +# solution. The permanent solution is to add more resources: RAM, faster +# disks, faster CPUs... + +daemons=5 + +##NAME: authdaemonvar:2 +# +# authdaemonvar is here, but is not used directly by authdaemond. It's +# used by various configuration and build scripts, so don't touch it! + +authdaemonvar=/var/lib/courier/authdaemon + +##NAME: DEBUG_LOGIN:0 +# +# Dump additional diagnostics to syslog +# +# DEBUG_LOGIN=0 - turn off debugging +# DEBUG_LOGIN=1 - turn on debugging +# DEBUG_LOGIN=2 - turn on debugging + log passwords too +# +# ** YES ** - DEBUG_LOGIN=2 places passwords into syslog. +# +# Note that most information is sent to syslog at level 'debug', so +# you may need to modify your /etc/syslog.conf to be able to see it. + +DEBUG_LOGIN=0 + +##NAME: DEFAULTOPTIONS:0 +# +# A comma-separated list of option=value pairs. Each option is applied +# to an account if the account does not have its own specific value for +# that option. So for example, you can set +# DEFAULTOPTIONS="disablewebmail=1,disableimap=1" +# and then enable webmail and/or imap on individual accounts by setting +# disablewebmail=0 and/or disableimap=0 on the account. + +DEFAULTOPTIONS="" + +##NAME: LOGGEROPTS:0 +# +# courierlogger(1) options, e.g. to set syslog facility +# + +LOGGEROPTS="" diff --git a/templates/misc/configfiles/gentoo/courier/etc_courier_authlib_authmysqlrc b/templates/misc/configfiles/gentoo/courier/etc_courier_authlib_authmysqlrc new file mode 100644 index 0000000000..9208bfff82 --- /dev/null +++ b/templates/misc/configfiles/gentoo/courier/etc_courier_authlib_authmysqlrc @@ -0,0 +1,13 @@ +MYSQL_SERVER +MYSQL_USERNAME +MYSQL_PASSWORD +MYSQL_PORT 0 +MYSQL_DATABASE +MYSQL_USER_TABLE mail_users +MYSQL_CRYPT_PWFIELD password_enc +MYSQL_UID_FIELD +MYSQL_GID_FIELD +MYSQL_LOGIN_FIELD username +MYSQL_HOME_FIELD "" +MYSQL_MAILDIR_FIELD maildir +MYSQL_QUOTA_FIELD (quota*1024*1024) \ No newline at end of file diff --git a/templates/misc/configfiles/gentoo/cron/etc_cron.d_syscp b/templates/misc/configfiles/gentoo/cron/etc_cron.d_syscp new file mode 100644 index 0000000000..d8edc40ed9 --- /dev/null +++ b/templates/misc/configfiles/gentoo/cron/etc_cron.d_syscp @@ -0,0 +1,16 @@ +# +# Set PATH, otherwise restart-scripts won't find start-stop-daemon +# +PATH=/sbin:/bin:/usr/sbin:/usr/bin +# +# Regular cron jobs for the syscp package +# +# Please check that all following paths are correct +# +*/5 * * * * root /usr/lib/php5/bin/php -q -c /etc/php/syscp-cronjob/php.ini /var/www/syscp/scripts/cron_tasks.php +0 0 * * * root /usr/lib/php5/bin/php -q -c /etc/php/syscp-cronjob/php.ini /var/www/syscp/scripts/cron_traffic.php +30 0 * * * root /usr/lib/php5/bin/php -q -c /etc/php/syscp-cronjob/php.ini /var/www/syscp/scripts/cron_ticketarchive.php +0 1 * * * root /usr/lib/php5/bin/php -q -c /etc/php/syscp-cronjob/php.ini /var/www/syscp/scripts/cron_used_tickets_reset.php +*/5 * * * * root /usr/lib/php5/bin/php -q -c /etc/php/syscp-cronjob/php.ini /var/www/syscp/scripts/cron_autoresponder.php +*/5 * * * * root /usr/lib/php5/bin/php -q -c /etc/php/syscp-cronjob/php.ini /var/www/syscp/scripts/cron_apsinstaller.php +*/30 * * * * root /usr/lib/php5/bin/php -q -c /etc/php/syscp-cronjob/php.ini /var/www/syscp/scripts/cron_apsupdater.php \ No newline at end of file diff --git a/templates/misc/configfiles/gentoo/cron/etc_php_syscp-cronjob_php.ini b/templates/misc/configfiles/gentoo/cron/etc_php_syscp-cronjob_php.ini new file mode 100644 index 0000000000..23dfb28e88 --- /dev/null +++ b/templates/misc/configfiles/gentoo/cron/etc_php_syscp-cronjob_php.ini @@ -0,0 +1,61 @@ +short_open_tag = On +asp_tags = Off +precision = 14 +output_buffering = Off +allow_call_time_pass_reference = Off +safe_mode = Off +safe_mode_gid = Off +safe_mode_include_dir = "/usr/share/php/:/usr/share/php4/:/usr/share/php5/" +safe_mode_allowed_env_vars = PHP_ +safe_mode_protected_env_vars = LD_LIBRARY_PATH +open_basedir = +disable_functions = +disable_classes = +expose_php = Off +max_execution_time = 180 +max_input_time = 120 +memory_limit = 32M +post_max_size = 32M +error_reporting = E_ALL & ~E_NOTICE +display_errors = On +display_startup_errors = Off +log_errors = Off +log_errors_max_len = 1024 +ignore_repeated_errors = Off +ignore_repeated_source = Off +report_memleaks = On +track_errors = Off +html_errors = Off +variables_order = "GPCS" +register_globals = Off +register_argc_argv = Off +gpc_order = "GPC" +magic_quotes_gpc = Off +magic_quotes_runtime = Off +magic_quotes_sybase = Off +include_path = ".:/usr/share/php/:/usr/share/php4/:/usr/share/php5/" +enable_dl = Off +file_uploads = On +upload_tmp_dir = "/tmp/" +upload_max_filesize = 32M +allow_url_fopen = On +session.save_handler = files +session.save_path = "/tmp/" +session.use_cookies = 1 +session.name = PHPSESSID +session.auto_start = 0 +session.cookie_lifetime = 0 +session.cookie_path = / +session.cookie_domain = +session.serialize_handler = php +session.gc_probability = 1 +session.gc_divisor = 1000 +session.gc_maxlifetime = 1440 +session.bug_compat_42 = 0 +session.bug_compat_warn = 1 +session.referer_check = +session.entropy_length = 16 +session.entropy_file = /dev/urandom +session.cache_limiter = nocache +session.cache_expire = 180 +session.use_trans_sid = 0 diff --git a/templates/misc/configfiles/gentoo/cron/etc_php_syscp-vhost_php.ini b/templates/misc/configfiles/gentoo/cron/etc_php_syscp-vhost_php.ini new file mode 100644 index 0000000000..5abdbef083 --- /dev/null +++ b/templates/misc/configfiles/gentoo/cron/etc_php_syscp-vhost_php.ini @@ -0,0 +1,61 @@ +short_open_tag = On +asp_tags = Off +precision = 14 +output_buffering = 4096 +allow_call_time_pass_reference = Off +safe_mode = Off +safe_mode_gid = Off +safe_mode_include_dir = "/usr/share/php/:/usr/share/php4/:/usr/share/php5/" +safe_mode_allowed_env_vars = PHP_ +safe_mode_protected_env_vars = LD_LIBRARY_PATH +open_basedir = "/var/www/syscp/:/var/www/syscp-suphp/syscp/:/var/www/syscpwebs/:/usr/share/php/:/usr/share/php4/:/usr/share/php5/" +disable_functions = exec,passthru,shell_exec,system,proc_close,proc_get_status,proc_nice,proc_open,proc_terminate +disable_classes = +expose_php = Off +max_execution_time = 30 +max_input_time = 60 +memory_limit = 16M +post_max_size = 12M +error_reporting = E_ALL & ~E_NOTICE +display_errors = Off +display_startup_errors = Off +log_errors = On +log_errors_max_len = 1024 +ignore_repeated_errors = Off +ignore_repeated_source = Off +report_memleaks = On +track_errors = Off +html_errors = Off +variables_order = "GPCS" +register_globals = Off +register_argc_argv = Off +gpc_order = "GPC" +magic_quotes_gpc = Off +magic_quotes_runtime = Off +magic_quotes_sybase = Off +include_path = ".:/usr/share/php/:/usr/share/php4/:/usr/share/php5/" +enable_dl = Off +file_uploads = On +upload_tmp_dir = "/var/www/syscp-suphp/syscp/" +upload_max_filesize = 32M +allow_url_fopen = Off +session.save_handler = files +session.save_path = "/var/www/syscp-suphp/syscp/" +session.use_cookies = 1 +session.name = PHPSESSID +session.auto_start = 0 +session.cookie_lifetime = 0 +session.cookie_path = / +session.cookie_domain = +session.serialize_handler = php +session.gc_probability = 1 +session.gc_divisor = 1000 +session.gc_maxlifetime = 1440 +session.bug_compat_42 = 0 +session.bug_compat_warn = 1 +session.referer_check = +session.entropy_length = 16 +session.entropy_file = /dev/urandom +session.cache_limiter = nocache +session.cache_expire = 180 +session.use_trans_sid = 0 diff --git a/templates/misc/configfiles/gentoo/dkim/dkim-filter.conf b/templates/misc/configfiles/gentoo/dkim/dkim-filter.conf new file mode 100644 index 0000000000..86cdb1b662 --- /dev/null +++ b/templates/misc/configfiles/gentoo/dkim/dkim-filter.conf @@ -0,0 +1,3 @@ +Syslog yes +Domain /etc/postfix/dkim/domains +KeyList /etc/postfix/dkim/dkim-keys.conf diff --git a/templates/misc/configfiles/gentoo/dovecot/etc_dovecot_dovecot-sql.conf b/templates/misc/configfiles/gentoo/dovecot/etc_dovecot_dovecot-sql.conf new file mode 100644 index 0000000000..62dd59bac8 --- /dev/null +++ b/templates/misc/configfiles/gentoo/dovecot/etc_dovecot_dovecot-sql.conf @@ -0,0 +1,5 @@ +driver = mysql +connect = host= dbname= user= password= +default_pass_scheme = CRYPT +password_query = "SELECT username AS user, password_enc AS password, CONCAT(homedir, maildir) AS userdb_home, uid AS userdb_uid, gid AS userdb_gid, CONCAT('*:storage=', quota,'M') AS userdb_quota_rule FROM mail_users WHERE username = '%u' OR email = '%u'" +user_query = "SELECT CONCAT(homedir, maildir) AS home, uid, gid, CONCAT('*:storage=', quota,'M') AS quota_rule FROM mail_users WHERE username = '%u' OR email = '%u'" diff --git a/templates/misc/configfiles/gentoo/dovecot/etc_dovecot_dovecot.conf b/templates/misc/configfiles/gentoo/dovecot/etc_dovecot_dovecot.conf new file mode 100644 index 0000000000..777da1b3e5 --- /dev/null +++ b/templates/misc/configfiles/gentoo/dovecot/etc_dovecot_dovecot.conf @@ -0,0 +1,72 @@ +base_dir = /var/run/dovecot +protocols = imap pop3 +listen = * +mail_access_groups = vmail +mail_debug = no +## Uncomment this line to allow Plaintext Logins from foreign IP if the Connection doesn't use TLS +disable_plaintext_auth = no + +### SSL Settings +### After setting this options, set disable_plaintext_auth to yes (see above) +### and add imaps pop3s to the protocols +#ssl_cert_file = /etc/ssl/server/.pem +#ssl_key_file = /etc/ssl/server/.key +## This is an example with CACerts class3 cert! +#ssl_ca_file = /path/to/cacert.class3.crt +#ssl_cipher_list = ALL:!LOW:!SSLv2 + +protocol imap { + mail_plugins = quota imap_quota +} + +protocol pop3 { + # Uncomment this line if you are migrating from Courier also see Migration from Courier + pop3_uidl_format = UID%u-%v + mail_plugins = quota + +} +protocol lda { + # postmaster is the one in charge of the mail system. MUST be set to a vailid address! + postmaster_address = + auth_socket_path = /var/run/dovecot/auth-master + mail_plugins = quota + sendmail_path = /usr/sbin/sendmail +} + +auth default { + mechanisms = plain login + passdb sql { + args = /etc/dovecot/dovecot-sql.conf + } + + userdb prefetch { + } + + userdb sql { + args = /etc/dovecot/dovecot-sql.conf + } + + user = vmail + socket listen { + # Postfix uses the client socket for SMTP Auth + client { + # Assuming the default Postfix $queue_directory setting + path = /var/spool/postfix/private/auth + mode = 0660 + # Assuming the default Postfix user and group + user = postfix + group = postfix + } + # Note that we're setting a master socket. SMTP AUTH for Postfix and Exim uses client sockets. + master { + path = /var/run/dovecot/auth-master + mode = 0660 + user = vmail + group = vmail + } + + } +} +plugin { + quota = maildir:User Quota +} diff --git a/templates/misc/configfiles/gentoo/libnss/etc_libnss-mysql-root.cfg b/templates/misc/configfiles/gentoo/libnss/etc_libnss-mysql-root.cfg new file mode 100644 index 0000000000..24eeb20d52 --- /dev/null +++ b/templates/misc/configfiles/gentoo/libnss/etc_libnss-mysql-root.cfg @@ -0,0 +1,2 @@ +username +password diff --git a/templates/misc/configfiles/gentoo/libnss/etc_libnss-mysql.cfg b/templates/misc/configfiles/gentoo/libnss/etc_libnss-mysql.cfg new file mode 100644 index 0000000000..4b68d11361 --- /dev/null +++ b/templates/misc/configfiles/gentoo/libnss/etc_libnss-mysql.cfg @@ -0,0 +1,38 @@ +getpwnam SELECT username,'x',uid,gid,'MySQL User',homedir,shell \ + FROM ftp_users \ + WHERE username='%1$s' \ + LIMIT 1 +getpwuid SELECT username,'x',uid,gid,'MySQL User',homedir,shell \ + FROM ftp_users \ + WHERE uid='%1$u' \ + LIMIT 1 +getspnam SELECT username,password,UNIX_TIMESTAMP()-10,'1','2','7','-1','-1','0' \ + FROM ftp_users \ + WHERE username='%1$s' \ + LIMIT 1 +getpwent SELECT username,'x',uid,gid,'MySQL User',homedir,shell \ + FROM ftp_users +getspent SELECT username,password,UNIX_TIMESTAMP()-10,'1','2','7','-1','-1','0' \ + FROM ftp_users +getgrnam SELECT groupname,'x',gid \ + FROM ftp_groups \ + WHERE groupname='%1$s' \ + LIMIT 1 +getgrgid SELECT groupname,'x',gid \ + FROM ftp_groups \ + WHERE gid='%1$u' \ + LIMIT 1 +getgrent SELECT groupname,'x',gid \ + FROM ftp_groups +memsbygid SELECT username \ + FROM ftp_users \ + WHERE gid='%1$u' +gidsbymem SELECT gid \ + FROM ftp_users \ + WHERE username='%1$s' + +host +database +username +password +socket /var/run/mysqld/mysqld.sock diff --git a/templates/misc/configfiles/gentoo/libnss/etc_nsswitch.conf b/templates/misc/configfiles/gentoo/libnss/etc_nsswitch.conf new file mode 100644 index 0000000000..7401ef2599 --- /dev/null +++ b/templates/misc/configfiles/gentoo/libnss/etc_nsswitch.conf @@ -0,0 +1,6 @@ +# Make sure that `passwd`, `group` and `shadow` have mysql in their lines +# You should place mysql at the end, so that it is queried after the other mechanisams +# +passwd: compat mysql +group: compat mysql +shadow: compat mysql diff --git a/templates/misc/configfiles/gentoo/lighttpd/etc_lighttpd.conf b/templates/misc/configfiles/gentoo/lighttpd/etc_lighttpd.conf new file mode 100644 index 0000000000..092ae21971 --- /dev/null +++ b/templates/misc/configfiles/gentoo/lighttpd/etc_lighttpd.conf @@ -0,0 +1,55 @@ +############################################################################### +# Default lighttpd.conf for SysCP. +############################################################################### +var.basedir = "/var/www" +var.logdir = "/var/log/lighttpd" +var.statedir = "/var/lib/lighttpd" + +server.modules = ( + "mod_rewrite", + "mod_redirect", + "mod_alias", + "mod_access", + "mod_auth", + "mod_fastcgi", + "mod_accesslog" +) + +server.username = "lighttpd" +server.groupname = "lighttpd" +server.document-root = var.basedir +server.pid-file = "/var/run/lighttpd.pid" +accesslog.filename = var.logdir + "/access.log" +server.errorlog = var.logdir + "/error.log" + +server.indexfiles = ("index.php", "index.html", + "index.htm", "default.htm") + +server.name = "" +server.port = 80 +server.bind = "" +url.access-deny = ("~", ".inc") + +include "mime-types.conf" +include "syscp-vhosts.conf" + +fastcgi.server = ( +".php" => ( + "localhost" => ( + "socket" => "/tmp/lighttpd-fcgi-sock-lighttpd", + "broken-scriptfilename" => "enable", + "bin-path" => "/usr/bin/php-cgi", + "min-procs" => 1, + "max-procs" => 1, + "max-load-per-proc" => 4, + "idle-timeout" => 60, + "bin-environment" => ( + "UID" => "lighttpd", + "GID" => "lighttpd", + "PHP_FCGI_CHILDREN" => "0", + "PHP_FCGI_MAX_REQUESTS" => "10000" + ), + "bin-copy-environment" => ( "" ) + ) + ) +) diff --git a/templates/misc/configfiles/gentoo/postfix/etc_postfix_main.cf b/templates/misc/configfiles/gentoo/postfix/etc_postfix_main.cf new file mode 100644 index 0000000000..e9aee27ee8 --- /dev/null +++ b/templates/misc/configfiles/gentoo/postfix/etc_postfix_main.cf @@ -0,0 +1,111 @@ +# Postfix programs paths settings +command_directory = /usr/sbin +daemon_directory = /usr/lib/postfix +program_directory = /usr/lib/postfix +sendmail_path = /usr/sbin/sendmail + +## General Postfix configuration +# should be the default domain from your provider eg. "server100.provider.tld" +mydomain = + +# should be different from $mydomain eg. "mail.$mydomain" +myhostname = + +mydestination = $myhostname, + $mydomain, + localhost.$myhostname, + localhost.$mydomain, + localhost +mynetworks = 127.0.0.0/8 +inet_interfaces = all +append_dot_mydomain = no +biff = no + +# Postfix performance settings +default_destination_concurrency_limit = 20 +local_destination_concurrency_limit = 2 + +# SMTPD Settings +smtpd_banner = $myhostname ESMTP $mail_name (Gentoo/GNU) +smtpd_helo_required = yes +smtpd_recipient_restrictions = permit_mynetworks, + permit_sasl_authenticated, + reject_unauth_destination, + reject_unauth_pipelining, + reject_non_fqdn_recipient +smtpd_sender_restrictions = permit_mynetworks, + permit_sasl_authenticated, + reject_unknown_hostname, + reject_unknown_recipient_domain, + reject_unknown_sender_domain +smtpd_client_restrictions = permit_mynetworks, + permit_sasl_authenticated, + reject_unknown_client +# Maximum size of Message in bytes (50MB) +message_size_limit = 52428800 + +## SASL Auth Settings +smtpd_sasl_auth_enable = yes +smtpd_sasl_local_domain = $myhostname +smtpd_sasl_security_options = noanonymous +broken_sasl_auth_clients = yes +## Dovecot Settings for deliver, SASL Auth and virtual transport +## uncomment those line to use Dovecot +#mailbox_command = /usr/libexec/dovecot/deliver +#smtpd_sasl_type = dovecot +#smtpd_sasl_path = private/auth +#virtual_transport = dovecot +#dovecot_destination_recipient_limit = 1 + +# Virtual delivery settings +virtual_mailbox_base = +virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual_mailbox_maps.cf +virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual_mailbox_domains.cf +virtual_alias_maps = mysql:/etc/postfix/mysql-virtual_alias_maps.cf +virtual_uid_maps = static: +virtual_gid_maps = static: + +# Local delivery settings +local_transport = local +alias_database = hash:/etc/mail/aliases +alias_maps = $alias_database + +# Default Mailbox size, is set to 0 which means unlimited! +mailbox_size_limit = 0 + +### TLS settings +### +## TLS for outgoing mails from the server to another server +#smtp_use_tls = yes +#smtp_tls_note_starttls_offer = yes +## TLS for email client +#smtpd_tls_cert_file = /etc/ssl/server/.pem +#smtpd_tls_key_file = /etc/ssl/server/.pem +#smtpd_tls_CAfile = /etc/ssl/cacert.class3.crt # Just an example for CACert.org +#smtpd_tls_auth_only = no +#smtpd_tls_loglevel = 1 +#smtpd_tls_received_header = yes +#smtpd_tls_session_cache_timeout = 3600s +#tls_random_source = dev:/dev/urandom + +### Quota Settings with vda useflag +## I use only virtual as localdelivery... This permit me to have full +## virtual domain hosting without using a lots of maps +#virtual_transport = virtual +## Generate maildirsize files or not +#virtual_create_maildirsize = yes +## I use Courier IMAP compatibles files. +#virtual_mailbox_extended = yes +## Limits only INBOX part (usefull when +## using when you have IMAP users) +#virtual_mailbox_limit_inbox = yes +## maps of soft disk quotas +#virtual_mailbox_limit_maps = mysql:/etc/postfix/mysql-virtual_mailbox_limit_maps.cf +#virtual_mailbox_limit_override = yes +#virtual_maildir_limit_message = Sorry, this user has overdrawn their diskspace quota. Please try again later. +#virtual_overquota_bounce = yes + +debugger_command = + PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin + ddd $daemon_directory/$process_name $process_id & sleep 5 + diff --git a/templates/misc/configfiles/gentoo/postfix/etc_postfix_master.cf b/templates/misc/configfiles/gentoo/postfix/etc_postfix_master.cf new file mode 100644 index 0000000000..b52b5a98e5 --- /dev/null +++ b/templates/misc/configfiles/gentoo/postfix/etc_postfix_master.cf @@ -0,0 +1,4 @@ +# Add this lines to be able to use dovecot as delivery agent +# Dovecot LDA +dovecot unix - n n - - pipe + flags=DRhu user=vmail:vmail argv=/usr/libexec/dovecot/deliver -d ${recipient} diff --git a/templates/misc/configfiles/gentoo/postfix/etc_postfix_mysql-virtual_alias_maps.cf b/templates/misc/configfiles/gentoo/postfix/etc_postfix_mysql-virtual_alias_maps.cf new file mode 100644 index 0000000000..c921e6f2bd --- /dev/null +++ b/templates/misc/configfiles/gentoo/postfix/etc_postfix_mysql-virtual_alias_maps.cf @@ -0,0 +1,8 @@ +user = +password = +dbname = +table = mail_virtual +select_field = destination +where_field = email +additional_conditions = and destination <> '' and destination <> ' ' +hosts = diff --git a/templates/misc/configfiles/gentoo/postfix/etc_postfix_mysql-virtual_mailbox_domains.cf b/templates/misc/configfiles/gentoo/postfix/etc_postfix_mysql-virtual_mailbox_domains.cf new file mode 100644 index 0000000000..4484bee275 --- /dev/null +++ b/templates/misc/configfiles/gentoo/postfix/etc_postfix_mysql-virtual_mailbox_domains.cf @@ -0,0 +1,8 @@ +user = +password = +dbname = +table = panel_domains +select_field = domain +where_field = domain +additional_conditions = and isemaildomain = '1' +hosts = diff --git a/templates/misc/configfiles/gentoo/postfix/etc_postfix_mysql-virtual_mailbox_maps.cf b/templates/misc/configfiles/gentoo/postfix/etc_postfix_mysql-virtual_mailbox_maps.cf new file mode 100644 index 0000000000..7e0f79af72 --- /dev/null +++ b/templates/misc/configfiles/gentoo/postfix/etc_postfix_mysql-virtual_mailbox_maps.cf @@ -0,0 +1,7 @@ +user = +password = +dbname = +table = mail_users +select_field = maildir +where_field = email +hosts = diff --git a/templates/misc/configfiles/gentoo/postfix/etc_sasl2_smtpd.conf b/templates/misc/configfiles/gentoo/postfix/etc_sasl2_smtpd.conf new file mode 100644 index 0000000000..4bd4bafdb1 --- /dev/null +++ b/templates/misc/configfiles/gentoo/postfix/etc_sasl2_smtpd.conf @@ -0,0 +1,12 @@ +pwcheck_method: auxprop +auxprop_plugin: sql +allowanonymouslogin: no +allowplaintext: yes +mech_list: PLAIN LOGIN +password_format: crypt +sql_engine: mysql +sql_hostnames: +sql_user: +sql_passwd: +sql_database: +sql_select: SELECT password_enc FROM mail_users WHERE username='%u@%r' OR email='%u@%r' \ No newline at end of file diff --git a/templates/misc/configfiles/gentoo/postfix/mysql-virtual_mailbox_limit_maps.cf b/templates/misc/configfiles/gentoo/postfix/mysql-virtual_mailbox_limit_maps.cf new file mode 100644 index 0000000000..03c191ac84 --- /dev/null +++ b/templates/misc/configfiles/gentoo/postfix/mysql-virtual_mailbox_limit_maps.cf @@ -0,0 +1,7 @@ +user = +password = +dbname = +table = mail_users +select_field = (quota*1024*1024) +where_field = email +hosts = \ No newline at end of file diff --git a/templates/misc/configfiles/gentoo/proftpd/etc_proftpd_proftpd.conf b/templates/misc/configfiles/gentoo/proftpd/etc_proftpd_proftpd.conf new file mode 100644 index 0000000000..399915b1f8 --- /dev/null +++ b/templates/misc/configfiles/gentoo/proftpd/etc_proftpd_proftpd.conf @@ -0,0 +1,94 @@ +# Server settings +ServerName " FTP Server" +ServerType standalone +ServerIdent off +DefaultServer on +Port 21 +MaxInstances 50 + +# General settings +DeferWelcome on +MultilineRFC2228 on +ShowSymlinks on +AllowOverwrite on +AllowStoreRestart on +AllowRetrieveRestart on +UseReverseDNS off +IdentLookups off +ListOptions "-al" +DisplayChdir .message +UseIPv6 off + +# Modules settings +#DelayEngine off + +# Timeout settings +TimeoutLogin 120 +TimeoutNoTransfer 600 +TimeoutStalled 600 +TimeoutIdle 600 + +# Security settings +RootLogin off +RequireValidShell off +User syscpftpd +Group syscpftpd +Umask 133 022 +DefaultRoot ~ +DenyFilter \*.*/ + +# Per-Directory settings + +Umask 133 022 +AllowOverwrite on + + +# SQL settings +SQLAuthTypes Crypt +SQLAuthenticate users* groups* +SQLConnectInfo @ +SQLUserInfo ftp_users username password uid gid homedir shell +SQLGroupInfo ftp_groups groupname gid members +SQLUserWhereClause "login_enabled = 'y'" + +SQLLog PASS login +SQLNamedQuery login UPDATE "last_login=now(), login_count=login_count+1 WHERE username='%u'" ftp_users + +SQLLog RETR download +SQLNamedQuery download UPDATE "down_count=down_count+1, down_bytes=down_bytes+%b WHERE username='%u'" ftp_users + +SQLLog STOR upload +SQLNamedQuery upload UPDATE "up_count=up_count+1, up_bytes=up_bytes+%b WHERE username='%u'" ftp_users + +# TLS settings +# +#TLSEngine on +#TLSLog /var/log/proftpd-tls.log +#TLSProtocol SSLv23 +#TLSTimeoutHandshake 120 +# Really important for WinClients +#TLSOptions NoCertRequest +#TLSRSACertificateFile /etc/ssl/server/.crt +#TLSRSACertificateKeyFile /etc/ssl/server/.key +# Authenticate client that want to use FTP over TLS? +#TLSVerifyClient off +# Uncomment the following line to force tls login +#TLSRequired off +# + +# LOG settings +# Logging Formats +LogFormat default "%h %1 %u %t \"%r\" %s %b" +LogFormat auth "%v [%P] %h %t \"%r\" %s" +LogFormat write "%h %l %u %t \"%r\" %s %b" +# Activate Logging +# all logins +ExtendedLog /var/log/proftpd-auth.log AUTH auth +# file/dir access +ExtendedLog /var/log/proftpd-access.log WRITE,READ write +# everything (be careful, generates_ very_ big logfiles) +#ExtendedLog /var/log/proftpd-all.log ALL default + +# make proftpd faster / do not perform ident and reverse dns lookup +UseReverseDNS off +IdentLookups off diff --git a/templates/misc/configfiles/gentoo/xinetd/etc_xinet.d_syscp b/templates/misc/configfiles/gentoo/xinetd/etc_xinet.d_syscp new file mode 100644 index 0000000000..acb494c173 --- /dev/null +++ b/templates/misc/configfiles/gentoo/xinetd/etc_xinet.d_syscp @@ -0,0 +1,11 @@ +service syscp +{ + id = syscp + socket_type = dgram + protocol = tcp + wait = no + user = root + server = /usr/bin/php + server_args = -q /var/www/syscp/scripts/cron_tasks.php + only_from = 127.0.0.1 +} diff --git a/templates/misc/configfiles/suse_linux_10_0/awstats/etc_apache_vhosts_05_awstats.conf b/templates/misc/configfiles/suse_linux_10_0/awstats/etc_apache_vhosts_05_awstats.conf new file mode 100644 index 0000000000..2c220e2f51 --- /dev/null +++ b/templates/misc/configfiles/suse_linux_10_0/awstats/etc_apache_vhosts_05_awstats.conf @@ -0,0 +1,14 @@ +ScriptAlias /awstats/ "/usr/lib/cgi-bin/" +ScriptAlias /awstats "/usr/lib/cgi-bin/awstats.pl" +ScriptAlias /awstats.pl "/usr/lib/cgi-bin/awstats.pl" +Alias /awstats-icon/ "/usr/share/awstats/icon/" + + + Options ExecCGI + AllowOverride None + + Order allow,deny + Allow from all + + + diff --git a/templates/misc/configfiles/suse_linux_10_0/awstats/etc_awstats_awstats.model.conf.syscp b/templates/misc/configfiles/suse_linux_10_0/awstats/etc_awstats_awstats.model.conf.syscp new file mode 100644 index 0000000000..0a979bfdaf --- /dev/null +++ b/templates/misc/configfiles/suse_linux_10_0/awstats/etc_awstats_awstats.model.conf.syscp @@ -0,0 +1,9 @@ +LogFile="{LOG_FILE}" +LogType=W +LogFormat = 1 +LogSeparator=" " +SiteDomain="{SITE_DOMAIN}" +HostAliases="{HOST_ALIASES}" + +# Include local configuration options identical for all virtual hosts +Include "/etc/awstats/awstats.conf.local" \ No newline at end of file diff --git a/templates/misc/configfiles/suse_linux_10_0/awstats/etc_awstats_awstats.model_log_sql.conf.syscp b/templates/misc/configfiles/suse_linux_10_0/awstats/etc_awstats_awstats.model_log_sql.conf.syscp new file mode 100644 index 0000000000..f8d795d73a --- /dev/null +++ b/templates/misc/configfiles/suse_linux_10_0/awstats/etc_awstats_awstats.model_log_sql.conf.syscp @@ -0,0 +1,9 @@ +LogFile="{LOG_FILE}" +LogType=W +LogFormat = "%host %virtualname %logname %time1 %methodurl %code %bytesd %refererquot %uaquot" +LogSeparator=" " +SiteDomain="{SITE_DOMAIN}" +HostAliases="{HOST_ALIASES}" + +# Include local configuration options identical for all virtual hosts +Include "/etc/awstats/awstats.conf.local" \ No newline at end of file diff --git a/templates/misc/configfiles/suse_linux_10_0/awstats/etc_cron.d_awstats b/templates/misc/configfiles/suse_linux_10_0/awstats/etc_cron.d_awstats new file mode 100644 index 0000000000..2ae06fa455 --- /dev/null +++ b/templates/misc/configfiles/suse_linux_10_0/awstats/etc_cron.d_awstats @@ -0,0 +1,6 @@ +# +# Set PATH, otherwise restart-scripts won't find start-stop-daemon +# +PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin + +*/10 * * * * www-data [ -x /usr/bin/awstats_updateall.pl ] && /usr/bin/awstats_updateall.pl now -awstatsprog=/usr/lib/cgi-bin/awstats.pl -configdir=/etc/awstats -excludeconf=awstats.model.conf.syscp,awstats.conf \ No newline at end of file diff --git a/templates/misc/configfiles/suse_linux_10_0/awstats/etc_cron.d_awstats_log_sql b/templates/misc/configfiles/suse_linux_10_0/awstats/etc_cron.d_awstats_log_sql new file mode 100644 index 0000000000..7b12f47d02 --- /dev/null +++ b/templates/misc/configfiles/suse_linux_10_0/awstats/etc_cron.d_awstats_log_sql @@ -0,0 +1,6 @@ +# +# Set PATH, otherwise restart-scripts won't find start-stop-daemon +# +PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin + +45 0 * * * www-data [ -x /usr/bin/awstats_updateall.pl ] && /usr/bin/awstats_updateall.pl now -awstatsprog=/usr/lib/cgi-bin/awstats.pl -configdir=/etc/awstats -excludeconf=awstats.model.conf.syscp,awstats.conf \ No newline at end of file diff --git a/templates/misc/configfiles/suse_linux_10_0/awstats/etc_lighttpd_syscp-awstats.conf b/templates/misc/configfiles/suse_linux_10_0/awstats/etc_lighttpd_syscp-awstats.conf new file mode 100644 index 0000000000..c5369bb318 --- /dev/null +++ b/templates/misc/configfiles/suse_linux_10_0/awstats/etc_lighttpd_syscp-awstats.conf @@ -0,0 +1,19 @@ +#alias.url += ( +# "/js/awstats_misc_tracker.js" => "/usr/share/awstats/wwwroot/js/awstats_misc_tracker.js" +#) + +$HTTP["url"] =~ "^/awstats" { + alias.url += ( + "/awstats/" => "", + "/awstats" => "awstats.pl", + "/awstats.pl" => "awstats.pl" +# "/awstatsicons/" => "/usr/share/awstats/wwwroot/icon/" + ) + + index-file.names = ( "awstatstotals.php" ) + + cgi.assign = ( + ".pl" => "/usr/bin/perl", + ".cgi" => "/usr/bin/perl" + ) +} \ No newline at end of file diff --git a/templates/misc/configfiles/suse_linux_10_0/courier/etc_authlib_authdaemonrc b/templates/misc/configfiles/suse_linux_10_0/courier/etc_authlib_authdaemonrc new file mode 100644 index 0000000000..428a68dadb --- /dev/null +++ b/templates/misc/configfiles/suse_linux_10_0/courier/etc_authlib_authdaemonrc @@ -0,0 +1,103 @@ +##VERSION: $Id: authdaemonrc.in,v 1.13 2005/10/05 00:07:32 mrsam Exp $ +# +# Copyright 2000-2005 Double Precision, Inc. See COPYING for +# distribution information. +# +# authdaemonrc created from authdaemonrc.dist by sysconftool +# +# Do not alter lines that begin with ##, they are used when upgrading +# this configuration. +# +# This file configures authdaemond, the resident authentication daemon. +# +# Comments in this file are ignored. Although this file is intended to +# be sourced as a shell script, authdaemond parses it manually, so +# the acceptable syntax is a bit limited. Multiline variable contents, +# with the \ continuation character, are not allowed. Everything must +# fit on one line. Do not use any additional whitespace for indentation, +# or anything else. + +##NAME: authmodulelist:2 +# +# The authentication modules that are linked into authdaemond. The +# default list is installed. You may selectively disable modules simply +# by removing them from the following list. The available modules you +# can use are: authuserdb authpam authldap authmysql authcustom authpipe + +authmodulelist="authmysql" + +##NAME: authmodulelistorig:3 +# +# This setting is used by Courier's webadmin module, and should be left +# alone + +authmodulelistorig="authcustom authcram authuserdb authldap authmysql authpam" + +##NAME: daemons:0 +# +# The number of daemon processes that are started. authdaemon is typically +# installed where authentication modules are relatively expensive: such +# as authldap, or authmysql, so it's better to have a number of them running. +# PLEASE NOTE: Some platforms may experience a problem if there's more than +# one daemon. Specifically, SystemV derived platforms that use TLI with +# socket emulation. I'm suspicious of TLI's ability to handle multiple +# processes accepting connections on the same filesystem domain socket. +# +# You may need to increase daemons if as your system load increases. Symptoms +# include sporadic authentication failures. If you start getting +# authentication failures, increase daemons. However, the default of 5 +# SHOULD be sufficient. Bumping up daemon count is only a short-term +# solution. The permanent solution is to add more resources: RAM, faster +# disks, faster CPUs... + +daemons=5 + +##NAME: authdaemonvar:2 +# +# authdaemonvar is here, but is not used directly by authdaemond. It's +# used by various configuration and build scripts, so don't touch it! + +authdaemonvar=/var/run/authdaemon.courier-imap + +##NAME: DEBUG_LOGIN:0 +# +# Dump additional diagnostics to syslog +# +# DEBUG_LOGIN=0 - turn off debugging +# DEBUG_LOGIN=1 - turn on debugging +# DEBUG_LOGIN=2 - turn on debugging + log passwords too +# +# ** YES ** - DEBUG_LOGIN=2 places passwords into syslog. +# +# Note that most information is sent to syslog at level 'debug', so +# you may need to modify your /etc/syslog.conf to be able to see it. + +DEBUG_LOGIN=0 + +##NAME: DEFAULTOPTIONS:0 +# +# A comma-separated list of option=value pairs. Each option is applied +# to an account if the account does not have its own specific value for +# that option. So for example, you can set +# DEFAULTOPTIONS="disablewebmail=1,disableimap=1" +# and then enable webmail and/or imap on individual accounts by setting +# disablewebmail=0 and/or disableimap=0 on the account. + +DEFAULTOPTIONS="" + +##NAME: LOGGEROPTS:0 +# +# courierlogger(1) options, e.g. to set syslog facility +# + +LOGGEROPTS="" + +##NAME: LDAP_TLS_OPTIONS:0 +# +# Options documented in ldap.conf(5) can be set here, prefixed with 'LDAP'. +# Examples: +# +#LDAPTLS_CACERT=/path/to/cacert.pem +#LDAPTLS_REQCERT=demand +#LDAPTLS_CERT=/path/to/clientcert.pem +#LDAPTLS_KEY=/path/to/clientkey.pem diff --git a/templates/misc/configfiles/suse_linux_10_0/courier/etc_authlib_authmysqlrc b/templates/misc/configfiles/suse_linux_10_0/courier/etc_authlib_authmysqlrc new file mode 100644 index 0000000000..4190aa9ec0 --- /dev/null +++ b/templates/misc/configfiles/suse_linux_10_0/courier/etc_authlib_authmysqlrc @@ -0,0 +1,12 @@ +MYSQL_SERVER +MYSQL_USERNAME +MYSQL_PASSWORD +MYSQL_PORT 3306 +MYSQL_DATABASE +MYSQL_USER_TABLE mail_users +MYSQL_CRYPT_PWFIELD password_enc +MYSQL_UID_FIELD uid +MYSQL_GID_FIELD gid +MYSQL_LOGIN_FIELD username +MYSQL_HOME_FIELD homedir +MYSQL_MAILDIR_FIELD maildir diff --git a/templates/misc/configfiles/suse_linux_10_0/cron/etc_cron.d_syscp b/templates/misc/configfiles/suse_linux_10_0/cron/etc_cron.d_syscp new file mode 100644 index 0000000000..8f97d49fdd --- /dev/null +++ b/templates/misc/configfiles/suse_linux_10_0/cron/etc_cron.d_syscp @@ -0,0 +1,14 @@ +# +# Set PATH, otherwise restart-scripts won't find start-stop-daemon +# +PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin +# +# Regular cron jobs for the syscp package +# +*/5 * * * * root /usr/bin/php5 -q /srv/www/htdocs/syscp/scripts/cron_tasks.php +0 0 * * * root /usr/bin/php5 -q /srv/www/htdocs/syscp/scripts/cron_traffic.php +30 0 * * * root /usr/bin/php5 -q /srv/www/htdocs/syscp/scripts/cron_ticketarchive.php +0 1 * * * root /usr/bin/php5 -q /var/www/htdocs/syscp/scripts/cron_used_tickets_reset.php +*/5 * * * * root /usr/lib/php5 -q /var/www/htdocs/syscp/scripts/cron_autoresponder.php +*/5 * * * * root /usr/lib/php5 -q /var/www/htdocs/syscp/scripts/cron_apsinstaller.php +*/30 * * * * root /usr/lib/php5 -q /var/www/htdocs/syscp/scripts/cron_apsupdater.php diff --git a/templates/misc/configfiles/suse_linux_10_0/dkim/dkim-filter.conf b/templates/misc/configfiles/suse_linux_10_0/dkim/dkim-filter.conf new file mode 100644 index 0000000000..86cdb1b662 --- /dev/null +++ b/templates/misc/configfiles/suse_linux_10_0/dkim/dkim-filter.conf @@ -0,0 +1,3 @@ +Syslog yes +Domain /etc/postfix/dkim/domains +KeyList /etc/postfix/dkim/dkim-keys.conf diff --git a/templates/misc/configfiles/suse_linux_10_0/postfix/etc_postfix_main.cf b/templates/misc/configfiles/suse_linux_10_0/postfix/etc_postfix_main.cf new file mode 100644 index 0000000000..8427f4e21e --- /dev/null +++ b/templates/misc/configfiles/suse_linux_10_0/postfix/etc_postfix_main.cf @@ -0,0 +1,63 @@ +queue_directory = /var/spool/postfix +command_directory = /usr/sbin +daemon_directory = /usr/lib/postfix +mail_owner = postfix +inet_interfaces = all +unknown_local_recipient_reject_code = 550 +debug_peer_level = 2 +debugger_command = + PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin + xxgdb $daemon_directory/$process_name $process_id & sleep 5 +sendmail_path = /usr/sbin/sendmail +newaliases_path = /usr/bin/newaliases +mailq_path = /usr/bin/mailq +setgid_group = maildrop +html_directory = /usr/share/doc/packages/postfix/html +manpage_directory = /usr/share/man +sample_directory = /usr/share/doc/packages/postfix/samples +readme_directory = /usr/share/doc/packages/postfix/README_FILES +inet_protocols = all +biff = no +append_dot_mydomain = no +mail_spool_directory = /var/mail +canonical_maps = hash:/etc/postfix/canonical +virtual_mailbox_base = /var/kunden/mail/ +virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual_mailbox_maps.cf +virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual_mailbox_domains.cf +virtual_alias_domains = +virtual_alias_maps = mysql:/etc/postfix/mysql-virtual_alias_maps.cf +virtual_uid_maps = static: +virtual_gid_maps = static: +virtual_maps = hash:/etc/postfix/virtual +relocated_maps = hash:/etc/postfix/relocated +transport_maps = hash:/etc/postfix/transport +sender_canonical_maps = hash:/etc/postfix/sender_canonical +masquerade_exceptions = root +masquerade_classes = envelope_sender, header_sender, header_recipient +myhostname = +mydomain = +program_directory = /usr/lib/postfix +masquerade_domains = +mydestination = $myhostname $mydomain localhost localhost.$mydomain +mynetworks = 127.0.0.0/8 +defer_transports = +disable_dns_lookups = no +relayhost = +mailbox_command = +mailbox_transport = +strict_8bitmime = no +disable_mime_output_conversion = no +smtpd_client_restrictions = +smtpd_helo_required = no +smtpd_helo_restrictions = +strict_rfc821_envelopes = no +smtpd_recipient_restrictions = permit_mynetworks permit_sasl_authenticated reject_unauth_destination +smtpd_sasl_auth_enable = yes +smtpd_sasl_local_domain = $myhostname +smtpd_sasl_security_options = noanonymous +broken_sasl_auth_clients = yes +#smtpd_use_tls = no +#smtp_use_tls = no +alias_maps = $alias_database +mailbox_size_limit = 0 +message_size_limit = 10240000 \ No newline at end of file diff --git a/templates/misc/configfiles/suse_linux_10_0/postfix/etc_postfix_mysql-virtual_alias_maps.cf b/templates/misc/configfiles/suse_linux_10_0/postfix/etc_postfix_mysql-virtual_alias_maps.cf new file mode 100644 index 0000000000..c921e6f2bd --- /dev/null +++ b/templates/misc/configfiles/suse_linux_10_0/postfix/etc_postfix_mysql-virtual_alias_maps.cf @@ -0,0 +1,8 @@ +user = +password = +dbname = +table = mail_virtual +select_field = destination +where_field = email +additional_conditions = and destination <> '' and destination <> ' ' +hosts = diff --git a/templates/misc/configfiles/suse_linux_10_0/postfix/etc_postfix_mysql-virtual_mailbox_domains.cf b/templates/misc/configfiles/suse_linux_10_0/postfix/etc_postfix_mysql-virtual_mailbox_domains.cf new file mode 100644 index 0000000000..4484bee275 --- /dev/null +++ b/templates/misc/configfiles/suse_linux_10_0/postfix/etc_postfix_mysql-virtual_mailbox_domains.cf @@ -0,0 +1,8 @@ +user = +password = +dbname = +table = panel_domains +select_field = domain +where_field = domain +additional_conditions = and isemaildomain = '1' +hosts = diff --git a/templates/misc/configfiles/suse_linux_10_0/postfix/etc_postfix_mysql-virtual_mailbox_maps.cf b/templates/misc/configfiles/suse_linux_10_0/postfix/etc_postfix_mysql-virtual_mailbox_maps.cf new file mode 100644 index 0000000000..7e0f79af72 --- /dev/null +++ b/templates/misc/configfiles/suse_linux_10_0/postfix/etc_postfix_mysql-virtual_mailbox_maps.cf @@ -0,0 +1,7 @@ +user = +password = +dbname = +table = mail_users +select_field = maildir +where_field = email +hosts = diff --git a/templates/misc/configfiles/suse_linux_10_0/postfix/usr_lib_sasl2_smtpd.conf b/templates/misc/configfiles/suse_linux_10_0/postfix/usr_lib_sasl2_smtpd.conf new file mode 100644 index 0000000000..3d4dff6031 --- /dev/null +++ b/templates/misc/configfiles/suse_linux_10_0/postfix/usr_lib_sasl2_smtpd.conf @@ -0,0 +1,9 @@ +pwcheck_method: auxprop +auxprop_plugin: sql +mech_list: plain login cram-md5 digest-md5 +sql_engine: mysql +sql_hostnames: +sql_user: +sql_passwd: +sql_database: +sql_select: select password from mail_users where username='%u@%r' diff --git a/templates/misc/configfiles/suse_linux_10_0/proftpd/etc_proftpd_modules.conf b/templates/misc/configfiles/suse_linux_10_0/proftpd/etc_proftpd_modules.conf new file mode 100644 index 0000000000..751e169a50 --- /dev/null +++ b/templates/misc/configfiles/suse_linux_10_0/proftpd/etc_proftpd_modules.conf @@ -0,0 +1,30 @@ +# +# This file is used to manage DSO modules and features. +# + +# This is the directory where DSO modules resides + +ModulePath /usr/lib/proftpd + +# Allow only user root to load and unload modules, but allow everyone +# to see which modules have been loaded + +ModuleControlsACLs insmod,rmmod allow user root +ModuleControlsACLs lsmod allow user * + +#LoadModule mod_ctrls_admin.c +LoadModule mod_tls.c +LoadModule mod_sql.c +#LoadModule mod_ldap.c +LoadModule mod_sql_mysql.c +#LoadModule mod_sql_postgres.c +#LoadModule mod_quotatab.c +#LoadModule mod_quotatab_file.c +#LoadModule mod_quotatab_ldap.c +#LoadModule mod_quotatab_sql.c +#LoadModule mod_radius.c +LoadModule mod_wrap.c +LoadModule mod_rewrite.c + +# keep this module the last one +LoadModule mod_ifsession.c diff --git a/templates/misc/configfiles/suse_linux_10_0/proftpd/etc_proftpd_proftpd.conf b/templates/misc/configfiles/suse_linux_10_0/proftpd/etc_proftpd_proftpd.conf new file mode 100644 index 0000000000..2c1bf87082 --- /dev/null +++ b/templates/misc/configfiles/suse_linux_10_0/proftpd/etc_proftpd_proftpd.conf @@ -0,0 +1,70 @@ +Include /etc/proftpd/modules.conf + +ServerName " FTP Server" +ServerType standalone +DeferWelcome off + +MultilineRFC2228 on +DefaultServer on +ShowSymlinks on +AllowOverwrite on + +TimeoutNoTransfer 600 +TimeoutStalled 600 +TimeoutIdle 1200 + +DisplayLogin welcome.msg +DisplayChdir .message +ListOptions "-l" + +DenyFilter \*.*/ + +Port 21 +MaxInstances 30 +UseIPv6 off + +TransferLog /var/log/proftpd/xferlog +SystemLog /var/log/proftpd/proftpd.log + +# make proftpd faster / do not perform ident and reverse dns lookup +UseReverseDNS off +IdentLookups off + +# Set the user and group that the server normally runs at. +User nobody +Group nogroup + + +# Umask 022 is a good standard umask to prevent new files and dirs +# (second parm) from being group and world writable. + Umask 022 022 +# Normally, we want files to be overwriteable. + AllowOverwrite on + + + +# CH-Root all users +DefaultRoot ~ +# Reject rootlogin (just for security) +RootLogin off +# Noo need to require valid shell, because user is virtual +RequireValidShell off + + +AuthOrder mod_sql.c + +SQLAuthTypes Crypt Plaintext +SQLAuthenticate users* groups* +SQLConnectInfo @ +SQLUserInfo ftp_users username password uid gid homedir shell +SQLGroupInfo ftp_groups groupname gid members +SQLUserWhereClause "login_enabled = 'y'" + +SQLLog PASS login +SQLNamedQuery login UPDATE "last_login=now(), login_count=login_count+1 WHERE username='%u'" ftp_users + +SQLLog RETR download +SQLNamedQuery download UPDATE "down_count=down_count+1, down_bytes=down_bytes+%b WHERE username='%u'" ftp_users + +SQLLog STOR upload +SQLNamedQuery upload UPDATE "up_count=up_count+1, up_bytes=up_bytes+%b WHERE username='%u'" ftp_users diff --git a/templates/misc/configfiles/ubuntu_hardy/awstats/etc_apache_vhosts_05_awstats.conf b/templates/misc/configfiles/ubuntu_hardy/awstats/etc_apache_vhosts_05_awstats.conf new file mode 100644 index 0000000000..2c220e2f51 --- /dev/null +++ b/templates/misc/configfiles/ubuntu_hardy/awstats/etc_apache_vhosts_05_awstats.conf @@ -0,0 +1,14 @@ +ScriptAlias /awstats/ "/usr/lib/cgi-bin/" +ScriptAlias /awstats "/usr/lib/cgi-bin/awstats.pl" +ScriptAlias /awstats.pl "/usr/lib/cgi-bin/awstats.pl" +Alias /awstats-icon/ "/usr/share/awstats/icon/" + + + Options ExecCGI + AllowOverride None + + Order allow,deny + Allow from all + + + diff --git a/templates/misc/configfiles/ubuntu_hardy/awstats/etc_awstats_awstats.model.conf.syscp b/templates/misc/configfiles/ubuntu_hardy/awstats/etc_awstats_awstats.model.conf.syscp new file mode 100644 index 0000000000..0a979bfdaf --- /dev/null +++ b/templates/misc/configfiles/ubuntu_hardy/awstats/etc_awstats_awstats.model.conf.syscp @@ -0,0 +1,9 @@ +LogFile="{LOG_FILE}" +LogType=W +LogFormat = 1 +LogSeparator=" " +SiteDomain="{SITE_DOMAIN}" +HostAliases="{HOST_ALIASES}" + +# Include local configuration options identical for all virtual hosts +Include "/etc/awstats/awstats.conf.local" \ No newline at end of file diff --git a/templates/misc/configfiles/ubuntu_hardy/awstats/etc_awstats_awstats.model_log_sql.conf.syscp b/templates/misc/configfiles/ubuntu_hardy/awstats/etc_awstats_awstats.model_log_sql.conf.syscp new file mode 100644 index 0000000000..f8d795d73a --- /dev/null +++ b/templates/misc/configfiles/ubuntu_hardy/awstats/etc_awstats_awstats.model_log_sql.conf.syscp @@ -0,0 +1,9 @@ +LogFile="{LOG_FILE}" +LogType=W +LogFormat = "%host %virtualname %logname %time1 %methodurl %code %bytesd %refererquot %uaquot" +LogSeparator=" " +SiteDomain="{SITE_DOMAIN}" +HostAliases="{HOST_ALIASES}" + +# Include local configuration options identical for all virtual hosts +Include "/etc/awstats/awstats.conf.local" \ No newline at end of file diff --git a/templates/misc/configfiles/ubuntu_hardy/awstats/etc_cron.d_awstats b/templates/misc/configfiles/ubuntu_hardy/awstats/etc_cron.d_awstats new file mode 100644 index 0000000000..2ae06fa455 --- /dev/null +++ b/templates/misc/configfiles/ubuntu_hardy/awstats/etc_cron.d_awstats @@ -0,0 +1,6 @@ +# +# Set PATH, otherwise restart-scripts won't find start-stop-daemon +# +PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin + +*/10 * * * * www-data [ -x /usr/bin/awstats_updateall.pl ] && /usr/bin/awstats_updateall.pl now -awstatsprog=/usr/lib/cgi-bin/awstats.pl -configdir=/etc/awstats -excludeconf=awstats.model.conf.syscp,awstats.conf \ No newline at end of file diff --git a/templates/misc/configfiles/ubuntu_hardy/awstats/etc_cron.d_awstats_log_sql b/templates/misc/configfiles/ubuntu_hardy/awstats/etc_cron.d_awstats_log_sql new file mode 100644 index 0000000000..7b12f47d02 --- /dev/null +++ b/templates/misc/configfiles/ubuntu_hardy/awstats/etc_cron.d_awstats_log_sql @@ -0,0 +1,6 @@ +# +# Set PATH, otherwise restart-scripts won't find start-stop-daemon +# +PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin + +45 0 * * * www-data [ -x /usr/bin/awstats_updateall.pl ] && /usr/bin/awstats_updateall.pl now -awstatsprog=/usr/lib/cgi-bin/awstats.pl -configdir=/etc/awstats -excludeconf=awstats.model.conf.syscp,awstats.conf \ No newline at end of file diff --git a/templates/misc/configfiles/ubuntu_hardy/awstats/etc_lighttpd_syscp-awstats.conf b/templates/misc/configfiles/ubuntu_hardy/awstats/etc_lighttpd_syscp-awstats.conf new file mode 100644 index 0000000000..c5369bb318 --- /dev/null +++ b/templates/misc/configfiles/ubuntu_hardy/awstats/etc_lighttpd_syscp-awstats.conf @@ -0,0 +1,19 @@ +#alias.url += ( +# "/js/awstats_misc_tracker.js" => "/usr/share/awstats/wwwroot/js/awstats_misc_tracker.js" +#) + +$HTTP["url"] =~ "^/awstats" { + alias.url += ( + "/awstats/" => "", + "/awstats" => "awstats.pl", + "/awstats.pl" => "awstats.pl" +# "/awstatsicons/" => "/usr/share/awstats/wwwroot/icon/" + ) + + index-file.names = ( "awstatstotals.php" ) + + cgi.assign = ( + ".pl" => "/usr/bin/perl", + ".cgi" => "/usr/bin/perl" + ) +} \ No newline at end of file diff --git a/templates/misc/configfiles/ubuntu_hardy/courier/etc_courier_authdaemonrc b/templates/misc/configfiles/ubuntu_hardy/courier/etc_courier_authdaemonrc new file mode 100644 index 0000000000..29346e54c0 --- /dev/null +++ b/templates/misc/configfiles/ubuntu_hardy/courier/etc_courier_authdaemonrc @@ -0,0 +1,68 @@ +##VERSION: $Id: authdaemonrc.in,v 1.8 2001/10/07 02:16:22 mrsam Exp $ +# +# Copyright 2000-2001 Double Precision, Inc. See COPYING for +# distribution information. +# +# authdaemonrc created from authdaemonrc.dist by sysconftool +# +# Do not alter lines that begin with ##, they are used when upgrading +# this configuration. +# +# This file configures authdaemond, the resident authentication daemon. +# +# Comments in this file are ignored. Although this file is intended to +# be sourced as a shell script, authdaemond parses it manually, so +# the acceptable syntax is a bit limited. Multiline variable contents, +# with the \ continuation character, are not allowed. Everything must +# fit on one line. Do not use any additional whitespace for indentation, +# or anything else. + +##NAME: authmodulelist:0 +# +# The authentication modules that are linked into authdaemond. The +# default list is installed. You may selectively disable modules simply +# by removing them from the following list. The available modules you +# can use are: authcustom authcram authuserdb authldap authmysql authpam + +authmodulelist="authmysql" + +##NAME: authmodulelistorig:1 +# +# This setting is used by Courier's webadmin module, and should be left +# alone + +authmodulelistorig="authcustom authcram authuserdb authldap authmysql authpam" + +##NAME: daemons:0 +# +# The number of daemon processes that are started. authdaemon is typically +# installed where authentication modules are relatively expensive: such +# as authldap, or authmysql, so it's better to have a number of them running. +# PLEASE NOTE: Some platforms may experience a problem if there's more than +# one daemon. Specifically, SystemV derived platforms that use TLI with +# socket emulation. I'm suspicious of TLI's ability to handle multiple +# processes accepting connections on the same filesystem domain socket. +# +# You may need to increase daemons if as your system load increases. Symptoms +# include sporadic authentication failures. If you start getting +# authentication failures, increase daemons. However, the default of 5 +# SHOULD be sufficient. Bumping up daemon count is only a short-term +# solution. The permanent solution is to add more resources: RAM, faster +# disks, faster CPUs... + +daemons=5 + +##NAME: version:0 +# +# When you have multiple versions of authdaemond.* installed, authdaemond +# just picks the first one it finds. Set "version" to override that. +# For example: version=authdaemond.plain + +version="" + +##NAME: authdaemonvar:0 +# +# authdaemonvar is here, but is not used directly by authdaemond. It's +# used by various configuration and build scripts, so don't touch it! + +authdaemonvar=/var/run/courier/authdaemon diff --git a/templates/misc/configfiles/ubuntu_hardy/courier/etc_courier_authmysqlrc b/templates/misc/configfiles/ubuntu_hardy/courier/etc_courier_authmysqlrc new file mode 100644 index 0000000000..6703bef4e8 --- /dev/null +++ b/templates/misc/configfiles/ubuntu_hardy/courier/etc_courier_authmysqlrc @@ -0,0 +1,13 @@ +MYSQL_SERVER +MYSQL_USERNAME +MYSQL_PASSWORD +MYSQL_PORT 3306 +MYSQL_DATABASE +MYSQL_USER_TABLE mail_users +MYSQL_CRYPT_PWFIELD password_enc +MYSQL_UID_FIELD uid +MYSQL_GID_FIELD gid +MYSQL_LOGIN_FIELD username +MYSQL_HOME_FIELD homedir +MYSQL_MAILDIR_FIELD maildir +MYSQL_QUOTA_FIELD (quota*1024*1024) \ No newline at end of file diff --git a/templates/misc/configfiles/ubuntu_hardy/cron/etc_cron.d_syscp b/templates/misc/configfiles/ubuntu_hardy/cron/etc_cron.d_syscp new file mode 100644 index 0000000000..5ee811524c --- /dev/null +++ b/templates/misc/configfiles/ubuntu_hardy/cron/etc_cron.d_syscp @@ -0,0 +1,14 @@ +# +# Set PATH, otherwise restart-scripts won't find start-stop-daemon +# +PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin +# +# Regular cron jobs for the syscp package +# +*/5 * * * * root /usr/bin/php5 -q /var/www/syscp/scripts/cron_tasks.php +0 0 * * * root /usr/bin/php5 -q /var/www/syscp/scripts/cron_traffic.php +30 0 * * * root /usr/bin/php5 -q /var/www/syscp/scripts/cron_ticketarchive.php +0 1 * * * root /usr/bin/php5 -q /var/www/syscp/scripts/cron_used_tickets_reset.php +*/5 * * * * root /usr/bin/php5 -q /var/www/syscp/scripts/cron_autoresponder.php +*/5 * * * * root /usr/bin/php5 -q /var/www/syscp/scripts/cron_apsinstaller.php +*/30 * * * * root /usr/bin/php5 -q /var/www/syscp/scripts/cron_apsupdater.php diff --git a/templates/misc/configfiles/ubuntu_hardy/dkim/dkim-filter.conf b/templates/misc/configfiles/ubuntu_hardy/dkim/dkim-filter.conf new file mode 100644 index 0000000000..86cdb1b662 --- /dev/null +++ b/templates/misc/configfiles/ubuntu_hardy/dkim/dkim-filter.conf @@ -0,0 +1,3 @@ +Syslog yes +Domain /etc/postfix/dkim/domains +KeyList /etc/postfix/dkim/dkim-keys.conf diff --git a/templates/misc/configfiles/ubuntu_hardy/dovecot/etc_dovecot_dovecot-sql.conf b/templates/misc/configfiles/ubuntu_hardy/dovecot/etc_dovecot_dovecot-sql.conf new file mode 100644 index 0000000000..4e392b7f79 --- /dev/null +++ b/templates/misc/configfiles/ubuntu_hardy/dovecot/etc_dovecot_dovecot-sql.conf @@ -0,0 +1,5 @@ +driver = mysql +connect = host= dbname= user= password= +default_pass_scheme = CRYPT +password_query = SELECT username AS user, password_enc AS password, CONCAT(homedir, maildir) AS userdb_home, uid AS userdb_uid, gid AS userdb_gid, CONCAT('maildir:storage=', (quota*1024)) as userdb_quota FROM mail_users WHERE username = '%u' OR email = '%u' +user_query = SELECT CONCAT(homedir, maildir) AS home, uid, gid, CONCAT('maildir:storage=', (quota*1024)) as quota FROM mail_users WHERE username = '%u' OR email = '%u' diff --git a/templates/misc/configfiles/ubuntu_hardy/dovecot/etc_dovecot_dovecot.conf b/templates/misc/configfiles/ubuntu_hardy/dovecot/etc_dovecot_dovecot.conf new file mode 100644 index 0000000000..c6051be386 --- /dev/null +++ b/templates/misc/configfiles/ubuntu_hardy/dovecot/etc_dovecot_dovecot.conf @@ -0,0 +1,72 @@ +base_dir = /var/run/dovecot +protocols = imap pop3 +listen = * +mail_access_groups = vmail +mail_debug = no +## Uncomment this line to allow Plaintext Logins from foreign IP if the Connection doesn't use TLS +disable_plaintext_auth = no + +### SSL Settings +### After setting this options, set disable_plaintext_auth to yes (see above) +### and add imaps pop3s to the protocols +#ssl_cert_file = /etc/ssl/server/.pem +#ssl_key_file = /etc/ssl/server/.key +## This is an example with CACerts class3 cert! +#ssl_ca_file = /path/to/cacert.class3.crt +#ssl_cipher_list = ALL:!LOW:!SSLv2 + +protocol imap { + mail_plugins = quota imap_quota +} + +protocol pop3 { + # Uncomment this line if you are migrating from Courier also see Migration from Courier + pop3_uidl_format = UID%u-%v + mail_plugins = quota + +} +protocol lda { + # postmaster is the one in charge of the mail system. MUST be set to a vailid address! + postmaster_address = + auth_socket_path = /var/run/dovecot/auth-master + mail_plugins = quota + sendmail_path = /usr/sbin/sendmail +} + +auth default { + mechanisms = plain login + passdb sql { + args = /etc/dovecot/dovecot-sql.conf + } + + userdb prefetch { + } + + userdb sql { + args = /etc/dovecot/dovecot-sql.conf + } + + user = vmail + socket listen { + # Postfix uses the client socket for SMTP Auth + client { + # Assuming the default Postfix $queue_directory setting + path = /var/spool/postfix/private/auth + mode = 0660 + # Assuming the default Postfix user and group + user = postfix + group = postfix + } + # Note that we're setting a master socket. SMTP AUTH for Postfix and Exim uses client sockets. + master { + path = /var/run/dovecot/auth-master + mode = 0660 + user = vmail + group = vmail + } + + } +} +plugin { + quota = maildir +} diff --git a/templates/misc/configfiles/ubuntu_hardy/exim4/etc_exim4_conf.d_acl_30_exim4-config_check_rcpt.rul b/templates/misc/configfiles/ubuntu_hardy/exim4/etc_exim4_conf.d_acl_30_exim4-config_check_rcpt.rul new file mode 100644 index 0000000000..eb6d643fa1 --- /dev/null +++ b/templates/misc/configfiles/ubuntu_hardy/exim4/etc_exim4_conf.d_acl_30_exim4-config_check_rcpt.rul @@ -0,0 +1,125 @@ +### acl/30_exim4-config_check_rcpt +################################# + +acl_check_rcpt: + accept + hosts = : + + warn + hosts = +relay_from_hosts + control = submission/sender_retain + + .ifdef CHECK_RCPT_LOCAL_LOCALPARTS + deny + domains = +local_domains:+syscp_domain + local_parts = CHECK_RCPT_LOCAL_LOCALPARTS + message = restricted characters in address + .endif + + .ifdef CHECK_RCPT_REMOTE_LOCALPARTS + deny + domains = !+local_domains + local_parts = CHECK_RCPT_REMOTE_LOCALPARTS + message = restricted characters in address + .endif + + accept + .ifndef CHECK_RCPT_POSTMASTER + local_parts = postmaster + .else + local_parts = CHECK_RCPT_POSTMASTER + .endif + domains = +local_domains:+syscp_domain + + deny + message = sender envelope address $sender_address is locally blacklisted here. If you think this is wrong, get in touch with postmaster + !acl = acl_local_deny_exceptions + senders = ${if exists{CONFDIR/local_sender_blacklist}\ + {CONFDIR/local_sender_blacklist}\ + {}} + + deny + message = sender IP address $sender_host_address is locally blacklisted here. If you think this is wrong, get in touch with postmaster + !acl = acl_local_deny_exceptions + hosts = ${if exists{CONFDIR/local_host_blacklist}\ + {CONFDIR/local_host_blacklist}\ + {}} + + .ifdef CHECK_RCPT_VERIFY_SENDER + deny + message = Sender verification failed + !acl = acl_local_deny_exceptions + !verify = sender + .endif + + deny + !acl = acl_local_deny_exceptions + senders = ${if exists{CONFDIR/local_sender_callout}\ + {CONFDIR/local_sender_callout}\ + {}} + !verify = sender/callout + + deny + !acl = acl_local_deny_exceptions + recipients = ${if exists{CONFDIR/local_rcpt_callout}\ + {CONFDIR/local_rcpt_callout}\ + {}} + !verify = recipient/callout + + .ifdef CHECK_RCPT_REVERSE_DNS + warn + message = X-Host-Lookup-Failed: Reverse DNS lookup failed for $sender_host_address (${if eq{$host_lookup_failed}{1}{failed}{deferred}}) + condition = ${if and{{def:sender_host_address}{!def:sender_host_name}}\ + {yes}{no}} + .endif + + .ifdef CHECK_RCPT_IP_DNSBLS + warn + message = X-Warning: $sender_host_address is listed at $dnslist_domain ($dnslist_value: $dnslist_text) + log_message = $sender_host_address is listed at $dnslist_domain ($dnslist_value: $dnslist_text) + dnslists = CHECK_RCPT_IP_DNSBLS + .endif + + .ifdef CHECK_RCPT_DOMAIN_DNSBLS + warn + message = X-Warning: $sender_address_domain is listed at $dnslist_domain ($dnslist_value: $dnslist_text) + log_message = $sender_address_domain is listed at $dnslist_domain ($dnslist_value: $dnslist_text) + !senders = ${if exists{CONFDIR/local_domain_dnsbl_whitelist}\ + {CONFDIR/local_domain_dnsbl_whitelist}\ + {}} + dnslists = CHECK_RCPT_DOMAIN_DNSBLS/$sender_address_domain + .endif + + .ifdef CHECK_RCPT_LOCAL_ACL_FILE + .include CHECK_RCPT_LOCAL_ACL_FILE + .endif + + accept + domains = +local_domains:+syscp_domain + endpass + message = unknown user + verify = recipient + + accept + domains = +relay_to_domains + endpass + .ifdef CHECK_RCPT_GIVE_UNKNOWN_USER + message = ${if eq{$acl_verify_message}{Unrouteable address}{unknown user}{$acl_verify_message}} + .else + message = unrouteable address + .endif + verify = recipient + + ############ + # If control reaches this point, the domain is neither in +local_domains + # nor in +relay_to_domains. + ############ + + accept + hosts = +relay_from_hosts + + accept + authenticated = * + + deny + message = relay not permitted \ No newline at end of file diff --git a/templates/misc/configfiles/ubuntu_hardy/exim4/etc_exim4_conf.d_auth_30_syscp-config b/templates/misc/configfiles/ubuntu_hardy/exim4/etc_exim4_conf.d_auth_30_syscp-config new file mode 100644 index 0000000000..8f0ce5638e --- /dev/null +++ b/templates/misc/configfiles/ubuntu_hardy/exim4/etc_exim4_conf.d_auth_30_syscp-config @@ -0,0 +1,30 @@ +### auth/30_syscp-config +################################# + +plain_server: + driver = plaintext + public_name = PLAIN + server_condition = "${if and { \ + {!eq{$2}{}} \ + {!eq{$3}{}} \ + {crypteq{$3}{${lookup mysql{SYSCP_AUTH_PLAIN}{$value}fail}}} \ + } {yes}{no}}" + server_set_id = $2 + server_prompts = : +# .ifndef AUTH_SERVER_ALLOW_NOTLS_PASSWORDS +# server_advertise_condition = ${if eq{$tls_cipher}{}{}{*}} +# .endif + +login_server: + driver = plaintext + public_name = LOGIN + server_prompts = "Username:: : Password::" + server_condition = "${if and { \ + {!eq{$1}{}} \ + {!eq{$2}{}} \ + {crypteq{$2}{${lookup mysql{SYSCP_AUTH_LOGIN}{$value}fail}}} \ + } {yes}{no}}" + server_set_id = $1 +# .ifndef AUTH_SERVER_ALLOW_NOTLS_PASSWORDS +# server_advertise_condition = ${if eq{$tls_cipher}{}{}{*}} +# .endif \ No newline at end of file diff --git a/templates/misc/configfiles/ubuntu_hardy/exim4/etc_exim4_conf.d_main_10_syscp-config_options b/templates/misc/configfiles/ubuntu_hardy/exim4/etc_exim4_conf.d_main_10_syscp-config_options new file mode 100644 index 0000000000..9ddde2c5d4 --- /dev/null +++ b/templates/misc/configfiles/ubuntu_hardy/exim4/etc_exim4_conf.d_main_10_syscp-config_options @@ -0,0 +1,20 @@ +hide mysql_servers = /// + +SYSCP_LOCAL_DOMAIN = SELECT domain FROM panel_domains WHERE domain = '${quote_mysql:$domain}' AND isemaildomain = '1' + +SYSCP_MAILALIAS = SELECT REPLACE(destination,' ',',') FROM mail_virtual WHERE \ + (( email = '${quote_mysql:$local_part}@${quote_mysql:$domain}' ) \ + OR ( email = '@${quote_mysql:$domain}' AND iscatchall > 0 )) \ + AND destination <> '' AND destination <> ' ' ORDER BY iscatchall ASC LIMIT 1 + +SYSCP_MAILUSER = SELECT CONCAT(homedir,maildir) FROM mail_users WHERE \ + email = '${quote_mysql:$local_part}@${quote_mysql:$domain}' AND postfix = 'y' + +SYSCP_PARENT_DOMAIN = SELECT parent.domain FROM `panel_domains` AS parent INNER JOIN panel_domains AS alias \ + ON alias.domain = '${quote_mysql:$domain}' AND parent.id = alias.aliasdomain + +SYSCP_AUTH_PLAIN = SELECT password_enc FROM mail_users WHERE username = '${quote_mysql:$2}' + +SYSCP_AUTH_LOGIN = SELECT password_enc FROM mail_users WHERE username = '${quote_mysql:$1}' + +domainlist syscp_domain = mysql;SYSCP_LOCAL_DOMAIN \ No newline at end of file diff --git a/templates/misc/configfiles/ubuntu_hardy/exim4/etc_exim4_conf.d_router_180_syscp-config b/templates/misc/configfiles/ubuntu_hardy/exim4/etc_exim4_conf.d_router_180_syscp-config new file mode 100644 index 0000000000..c3168c79ce --- /dev/null +++ b/templates/misc/configfiles/ubuntu_hardy/exim4/etc_exim4_conf.d_router_180_syscp-config @@ -0,0 +1,12 @@ +syscp_mailalias: + debug_print = "R: syscp_mailalias for $local_part@$domain" + driver = redirect + domains = +syscp_domain + data = ${lookup mysql {SYSCP_MAILALIAS}{$value}fail} + +syscp_mailuser: + debug_print = "R: syscp_mailuser for $local_part@$domain" + driver = redirect + domains = +syscp_domain + data = ${lookup mysql {SYSCP_MAILUSER}{$value}fail} + directory_transport = maildir_syscp \ No newline at end of file diff --git a/templates/misc/configfiles/ubuntu_hardy/exim4/etc_exim4_conf.d_transport_30_syscp-config b/templates/misc/configfiles/ubuntu_hardy/exim4/etc_exim4_conf.d_transport_30_syscp-config new file mode 100644 index 0000000000..75602a3943 --- /dev/null +++ b/templates/misc/configfiles/ubuntu_hardy/exim4/etc_exim4_conf.d_transport_30_syscp-config @@ -0,0 +1,13 @@ +maildir_syscp: + debug_print = "T: maildir_syscp for $local_part@$domain" + driver = appendfile + create_directory + delivery_date_add + envelope_to_add + return_path_add + maildir_format + directory_mode = 0770 + mode = 0660 + mode_fail_narrower = false + user = 2000 + group = 2000 \ No newline at end of file diff --git a/templates/misc/configfiles/ubuntu_hardy/libnss/etc_nss-mysql-root.conf b/templates/misc/configfiles/ubuntu_hardy/libnss/etc_nss-mysql-root.conf new file mode 100644 index 0000000000..305499f39a --- /dev/null +++ b/templates/misc/configfiles/ubuntu_hardy/libnss/etc_nss-mysql-root.conf @@ -0,0 +1,16 @@ +conf.version = 2; +shadow.host = inet::3306; +shadow.database = ; +shadow.db_user = ; +shadow.db_password = ; +shadow.table = ftp_users u; +shadow.where_clause = ; +shadow.userid_column = u.id; +shadow.user_column = u.username; +shadow.password_column = u.password; +shadow.lastchange_column = UNIX_TIMESTAMP()-10; +shadow.min_column = 1; +shadow.max_column = 2; +shadow.warn_column = 7; +shadow.inact_column = -1; +shadow.expire_column = -1; diff --git a/templates/misc/configfiles/ubuntu_hardy/libnss/etc_nss-mysql.conf b/templates/misc/configfiles/ubuntu_hardy/libnss/etc_nss-mysql.conf new file mode 100644 index 0000000000..54461bb88c --- /dev/null +++ b/templates/misc/configfiles/ubuntu_hardy/libnss/etc_nss-mysql.conf @@ -0,0 +1,24 @@ +conf.version = 2; +users.host = inet::3306; +users.database = ; +users.db_user = ; +users.db_password = ; +users.table = ftp_users u; +users.where_clause =; +users.user_column = u.username; +users.password_column = u.password; +users.userid_column = u.id; +users.uid_column = u.uid; +users.gid_column = u.gid; +users.realname_column = u.username; +users.homedir_column = u.homedir; +users.shell_column = u.shell; +groups.group_info_table = ftp_groups g; +groups.where_clause = ; +groups.group_name_column = g.groupname; +groups.groupid_column = g.id; +groups.gid_column = g.gid; +groups.password_column = "x"; +groups.members_table = ftp_groups ug; +groups.member_userid_column = ug.customerid; +groups.member_groupid_column = ug.id; diff --git a/templates/misc/configfiles/ubuntu_hardy/libnss/etc_nsswitch.conf b/templates/misc/configfiles/ubuntu_hardy/libnss/etc_nsswitch.conf new file mode 100644 index 0000000000..7401ef2599 --- /dev/null +++ b/templates/misc/configfiles/ubuntu_hardy/libnss/etc_nsswitch.conf @@ -0,0 +1,6 @@ +# Make sure that `passwd`, `group` and `shadow` have mysql in their lines +# You should place mysql at the end, so that it is queried after the other mechanisams +# +passwd: compat mysql +group: compat mysql +shadow: compat mysql diff --git a/templates/misc/configfiles/ubuntu_hardy/lighttpd/etc_lighttpd.conf b/templates/misc/configfiles/ubuntu_hardy/lighttpd/etc_lighttpd.conf new file mode 100644 index 0000000000..b69f0435da --- /dev/null +++ b/templates/misc/configfiles/ubuntu_hardy/lighttpd/etc_lighttpd.conf @@ -0,0 +1,60 @@ +############################################################################### +# Default lighttpd.conf for SysCP. +############################################################################### +var.basedir = "/var/www" +var.logdir = "/var/log/lighttpd" +var.statedir = "/var/lib/lighttpd" + +server.modules = ( + "mod_rewrite", + "mod_redirect", + "mod_alias", + "mod_access", + "mod_auth", + "mod_fastcgi", + "mod_accesslog" +) + +server.username = "www-data" +server.groupname = "www-data" +server.document-root = var.basedir +server.pid-file = "/var/run/lighttpd.pid" +accesslog.filename = var.logdir + "/access.log" +server.errorlog = var.logdir + "/error.log" + +server.indexfiles = ("index.php", "index.html", + "index.htm", "default.htm") + +server.name = "" +server.port = 80 +server.bind = "" +url.access-deny = ("~", ".inc") + +fastcgi.server = ( +".php" => ( + "localhost" => ( + "socket" => "/var/kunden/tmp/lighttpd-fcgi-sock-lighttpd", + "broken-scriptfilename" => "enable", + "bin-path" => "/usr/bin/php5-cgi", + "min-procs" => 1, + "max-procs" => 1, + "max-load-per-proc" => 4, + "idle-timeout" => 60, + "bin-environment" => ( + "UID" => "www-data", + "GID" => "www-data", + "PHP_FCGI_CHILDREN" => "0", + "PHP_FCGI_MAX_REQUESTS" => "10000" + ), + "bin-copy-environment" => ( "" ) + ) + ) +) + +#### external configuration files +## mimetype mapping +include_shell "/usr/share/lighttpd/create-mime.assign.pl" + +## load enabled configuration files, +## read /etc/lighttpd/conf-available/README first +include_shell "/usr/share/lighttpd/include-conf-enabled.pl" \ No newline at end of file diff --git a/templates/misc/configfiles/ubuntu_hardy/postfix/etc_postfix_main.cf b/templates/misc/configfiles/ubuntu_hardy/postfix/etc_postfix_main.cf new file mode 100644 index 0000000000..c73affc036 --- /dev/null +++ b/templates/misc/configfiles/ubuntu_hardy/postfix/etc_postfix_main.cf @@ -0,0 +1,92 @@ +# Postfix programs paths settings +command_directory = /usr/sbin +daemon_directory = /usr/lib/postfix +program_directory = /usr/lib/postfix +sendmail_path = /usr/sbin/sendmail + +## General Postfix configuration +# should be the default domain from your provider eg. "server100.provider.tld" +mydomain = + +# should be different from $mydomain eg. "mail.$mydomain" +myhostname = mail. + +mydestination = $myhostname, + $mydomain, + localhost.$myhostname, + localhost.$mydomain, + localhost +mynetworks = 127.0.0.0/8 +inet_interfaces = all +append_dot_mydomain = no +biff = no + +# Postfix performance settings +default_destination_concurrency_limit = 20 +local_destination_concurrency_limit = 2 + +# SMTPD Settings +smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu/GNU) +smtpd_helo_required = yes +smtpd_recipient_restrictions = permit_mynetworks, + permit_sasl_authenticated, + reject_unauth_destination, + reject_unauth_pipelining, + reject_non_fqdn_recipient +smtpd_sender_restrictions = permit_mynetworks, + permit_sasl_authenticated, + reject_unknown_hostname, + reject_unknown_recipient_domain, + reject_unknown_sender_domain +smtpd_client_restrictions = permit_mynetworks, + permit_sasl_authenticated, + reject_unknown_client +# Maximum size of Message in bytes (50MB) +message_size_limit = 52428800 + +## SASL Auth Settings +smtpd_sasl_auth_enable = yes +smtpd_sasl_local_domain = $myhostname +smtpd_sasl_security_options = noanonymous +broken_sasl_auth_clients = yes +## Dovecot Settings for deliver, SASL Auth and virtual transport +## uncomment those line to use Dovecot +#mailbox_command = /usr/lib/dovecot/deliver +#virtual_transport = dovecot +#dovecot_destination_recipient_limit = 1 + +# Virtual delivery settings +virtual_mailbox_base = +virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual_mailbox_maps.cf +virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual_mailbox_domains.cf +virtual_alias_maps = mysql:/etc/postfix/mysql-virtual_alias_maps.cf +virtual_uid_maps = static: +virtual_gid_maps = static: + +# Local delivery settings +local_transport = local +alias_database = hash:/etc/aliases +alias_maps = $alias_database + +# Default Mailbox size, is set to 0 which means unlimited! +mailbox_size_limit = 0 + +### TLS settings +### +## TLS for outgoing mails from the server to another server +#smtp_use_tls = yes +#smtp_tls_note_starttls_offer = yes +## TLS for email client +#smtpd_tls_cert_file = /etc/ssl/server/.crt +#smtpd_tls_key_file = /etc/ssl/server/.key +#smtpd_tls_CAfile = /etc/ssl/cacert.class3.crt # Just an example for CACert.org +#smtpd_tls_auth_only = no +#smtpd_tls_loglevel = 1 +#smtpd_tls_received_header = yes +#smtpd_tls_session_cache_timeout = 3600s +#tls_random_source = dev:/dev/urandom + +debugger_command = + PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin + ddd $daemon_directory/$process_name $process_id & sleep 5 + diff --git a/templates/misc/configfiles/ubuntu_hardy/postfix/etc_postfix_master.cf b/templates/misc/configfiles/ubuntu_hardy/postfix/etc_postfix_master.cf new file mode 100644 index 0000000000..678bb9cd43 --- /dev/null +++ b/templates/misc/configfiles/ubuntu_hardy/postfix/etc_postfix_master.cf @@ -0,0 +1,4 @@ +# Add this lines to be able to use dovecot as delivery agent +# Dovecot LDA +dovecot unix - n n - - pipe + flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -d ${recipient} diff --git a/templates/misc/configfiles/ubuntu_hardy/postfix/etc_postfix_mysql-virtual_alias_maps.cf b/templates/misc/configfiles/ubuntu_hardy/postfix/etc_postfix_mysql-virtual_alias_maps.cf new file mode 100644 index 0000000000..c921e6f2bd --- /dev/null +++ b/templates/misc/configfiles/ubuntu_hardy/postfix/etc_postfix_mysql-virtual_alias_maps.cf @@ -0,0 +1,8 @@ +user = +password = +dbname = +table = mail_virtual +select_field = destination +where_field = email +additional_conditions = and destination <> '' and destination <> ' ' +hosts = diff --git a/templates/misc/configfiles/ubuntu_hardy/postfix/etc_postfix_mysql-virtual_mailbox_domains.cf b/templates/misc/configfiles/ubuntu_hardy/postfix/etc_postfix_mysql-virtual_mailbox_domains.cf new file mode 100644 index 0000000000..4484bee275 --- /dev/null +++ b/templates/misc/configfiles/ubuntu_hardy/postfix/etc_postfix_mysql-virtual_mailbox_domains.cf @@ -0,0 +1,8 @@ +user = +password = +dbname = +table = panel_domains +select_field = domain +where_field = domain +additional_conditions = and isemaildomain = '1' +hosts = diff --git a/templates/misc/configfiles/ubuntu_hardy/postfix/etc_postfix_mysql-virtual_mailbox_maps.cf b/templates/misc/configfiles/ubuntu_hardy/postfix/etc_postfix_mysql-virtual_mailbox_maps.cf new file mode 100644 index 0000000000..7e0f79af72 --- /dev/null +++ b/templates/misc/configfiles/ubuntu_hardy/postfix/etc_postfix_mysql-virtual_mailbox_maps.cf @@ -0,0 +1,7 @@ +user = +password = +dbname = +table = mail_users +select_field = maildir +where_field = email +hosts = diff --git a/templates/misc/configfiles/ubuntu_hardy/postfix/etc_postfix_sasl_smtpd.conf b/templates/misc/configfiles/ubuntu_hardy/postfix/etc_postfix_sasl_smtpd.conf new file mode 100644 index 0000000000..de3699d8db --- /dev/null +++ b/templates/misc/configfiles/ubuntu_hardy/postfix/etc_postfix_sasl_smtpd.conf @@ -0,0 +1,11 @@ +pwcheck_method: auxprop +auxprop_plugin: sql +allowanonymouslogin: no +allowplaintext: yes +mech_list: plain login cram-md5 digest-md5 +sql_engine: mysql +sql_hostnames: +sql_user: +sql_passwd: +sql_database: +sql_select: SELECT password FROM mail_users WHERE username='%u@%r' OR email='%u@%r' \ No newline at end of file diff --git a/templates/misc/configfiles/ubuntu_hardy/powerdns/etc_powerdns_pdns-syscp.conf b/templates/misc/configfiles/ubuntu_hardy/powerdns/etc_powerdns_pdns-syscp.conf new file mode 100644 index 0000000000..ca2d022802 --- /dev/null +++ b/templates/misc/configfiles/ubuntu_hardy/powerdns/etc_powerdns_pdns-syscp.conf @@ -0,0 +1,7 @@ +allow-axfr-ips= +#local-ipv6=YOUR_IPv6_(if_any) +bind-config=/etc/bind/named.conf +bind-check-interval=180 +log-dns-details=yes +local-address=,127.0.0.1 + diff --git a/templates/misc/configfiles/ubuntu_hardy/powerdns/etc_powerdns_pdns.conf b/templates/misc/configfiles/ubuntu_hardy/powerdns/etc_powerdns_pdns.conf new file mode 100644 index 0000000000..c3eef80d2f --- /dev/null +++ b/templates/misc/configfiles/ubuntu_hardy/powerdns/etc_powerdns_pdns.conf @@ -0,0 +1,17 @@ +allow-recursion=127.0.0.1 +config-dir=/etc/powerdns +daemon=yes +guardian=yes +launch=bind +lazy-recursion=yes +local-port=53 +master=yes +module-dir=/usr/lib/powerdns +setgid=pdns +setuid=pdns +socket-dir=/var/run +version-string=powerdns +bind-config=/etc/bind/named.conf +bind-check-interval=300 +include=/etc/powerdns/pdns_syscp.conf + diff --git a/templates/misc/configfiles/ubuntu_hardy/proftpd/etc_proftpd_modules.conf b/templates/misc/configfiles/ubuntu_hardy/proftpd/etc_proftpd_modules.conf new file mode 100644 index 0000000000..9bb7b785a9 --- /dev/null +++ b/templates/misc/configfiles/ubuntu_hardy/proftpd/etc_proftpd_modules.conf @@ -0,0 +1,34 @@ +# +# This file is used to manage DSO modules and features. +# + +# This is the directory where DSO modules resides + +ModulePath /usr/lib/proftpd + +# Allow only user root to load and unload modules, but allow everyone +# to see which modules have been loaded + +ModuleControlsACLs insmod,rmmod allow user root +ModuleControlsACLs lsmod allow user * + +#LoadModule mod_ctrls_admin.c +LoadModule mod_tls.c +LoadModule mod_sql.c +#LoadModule mod_ldap.c +LoadModule mod_sql_mysql.c +#LoadModule mod_sql_postgres.c +#LoadModule mod_quotatab.c +#LoadModule mod_quotatab_file.c +#LoadModule mod_quotatab_ldap.c +#LoadModule mod_quotatab_sql.c +#LoadModule mod_radius.c +LoadModule mod_wrap.c +LoadModule mod_rewrite.c + +# keep this module the last one +LoadModule mod_ifsession.c + + + DelayEngine off + diff --git a/templates/misc/configfiles/ubuntu_hardy/proftpd/etc_proftpd_proftpd.conf b/templates/misc/configfiles/ubuntu_hardy/proftpd/etc_proftpd_proftpd.conf new file mode 100644 index 0000000000..17bf89c64a --- /dev/null +++ b/templates/misc/configfiles/ubuntu_hardy/proftpd/etc_proftpd_proftpd.conf @@ -0,0 +1,64 @@ +Include /etc/proftpd/modules.conf + +ServerName " FTP Server" +ServerType standalone +DeferWelcome off + +MultilineRFC2228 on +DefaultServer on +ShowSymlinks on +AllowOverwrite on + +TimeoutNoTransfer 600 +TimeoutStalled 600 +TimeoutIdle 1200 + +DisplayLogin welcome.msg +DisplayChdir .message +ListOptions "-l" + +DenyFilter \*.*/ + +Port 21 +MaxInstances 30 +UseIPv6 off + +TransferLog /var/log/proftpd/xferlog +SystemLog /var/log/proftpd/proftpd.log + +# make proftpd faster / do not perform ident and reverse dns lookup +UseReverseDNS off +IdentLookups off + +# Set the user and group that the server normally runs at. +User nobody +Group nogroup + + +# Umask 022 is a good standard umask to prevent new files and dirs +# (second parm) from being group and world writable. + Umask 022 022 +# Normally, we want files to be overwriteable. + AllowOverwrite on + + +DefaultRoot ~ +RequireValidShell off + +AuthOrder mod_sql.c + +SQLAuthTypes Crypt +SQLAuthenticate users* groups* +SQLConnectInfo @ +SQLUserInfo ftp_users username password uid gid homedir shell +SQLGroupInfo ftp_groups groupname gid members +SQLUserWhereClause "login_enabled = 'y'" + +SQLLog PASS login +SQLNamedQuery login UPDATE "last_login=now(), login_count=login_count+1 WHERE username='%u'" ftp_users + +SQLLog RETR download +SQLNamedQuery download UPDATE "down_count=down_count+1, down_bytes=down_bytes+%b WHERE username='%u'" ftp_users + +SQLLog STOR upload +SQLNamedQuery upload UPDATE "up_count=up_count+1, up_bytes=up_bytes+%b WHERE username='%u'" ftp_users diff --git a/templates/misc/configfiles/ubuntu_hardy/pure-ftpd/etc_default_pure-ftpd-common b/templates/misc/configfiles/ubuntu_hardy/pure-ftpd/etc_default_pure-ftpd-common new file mode 100644 index 0000000000..b26539047f --- /dev/null +++ b/templates/misc/configfiles/ubuntu_hardy/pure-ftpd/etc_default_pure-ftpd-common @@ -0,0 +1,5 @@ +STANDALONE_OR_INETD=standalone +VIRTUALCHROOT=false +UPLOADSCRIPT= +UPLOADUID= +UPLOADGID= diff --git a/templates/misc/configfiles/ubuntu_hardy/pure-ftpd/etc_pure-ftpd_conf_Bind b/templates/misc/configfiles/ubuntu_hardy/pure-ftpd/etc_pure-ftpd_conf_Bind new file mode 100644 index 0000000000..aabe6ec390 --- /dev/null +++ b/templates/misc/configfiles/ubuntu_hardy/pure-ftpd/etc_pure-ftpd_conf_Bind @@ -0,0 +1 @@ +21 diff --git a/templates/misc/configfiles/ubuntu_hardy/pure-ftpd/etc_pure-ftpd_conf_ChrootEveryone b/templates/misc/configfiles/ubuntu_hardy/pure-ftpd/etc_pure-ftpd_conf_ChrootEveryone new file mode 100644 index 0000000000..7cfab5b05d --- /dev/null +++ b/templates/misc/configfiles/ubuntu_hardy/pure-ftpd/etc_pure-ftpd_conf_ChrootEveryone @@ -0,0 +1 @@ +yes diff --git a/templates/misc/configfiles/ubuntu_hardy/pure-ftpd/etc_pure-ftpd_conf_CustomerProof b/templates/misc/configfiles/ubuntu_hardy/pure-ftpd/etc_pure-ftpd_conf_CustomerProof new file mode 100644 index 0000000000..d00491fd7e --- /dev/null +++ b/templates/misc/configfiles/ubuntu_hardy/pure-ftpd/etc_pure-ftpd_conf_CustomerProof @@ -0,0 +1 @@ +1 diff --git a/templates/misc/configfiles/ubuntu_hardy/pure-ftpd/etc_pure-ftpd_conf_MaxIdleTime b/templates/misc/configfiles/ubuntu_hardy/pure-ftpd/etc_pure-ftpd_conf_MaxIdleTime new file mode 100644 index 0000000000..60d3b2f4a4 --- /dev/null +++ b/templates/misc/configfiles/ubuntu_hardy/pure-ftpd/etc_pure-ftpd_conf_MaxIdleTime @@ -0,0 +1 @@ +15 diff --git a/templates/misc/configfiles/ubuntu_hardy/pure-ftpd/etc_pure-ftpd_conf_MinUID b/templates/misc/configfiles/ubuntu_hardy/pure-ftpd/etc_pure-ftpd_conf_MinUID new file mode 100644 index 0000000000..83b33d238d --- /dev/null +++ b/templates/misc/configfiles/ubuntu_hardy/pure-ftpd/etc_pure-ftpd_conf_MinUID @@ -0,0 +1 @@ +1000 diff --git a/templates/misc/configfiles/ubuntu_hardy/pure-ftpd/etc_pure-ftpd_conf_MySQLConfigFile b/templates/misc/configfiles/ubuntu_hardy/pure-ftpd/etc_pure-ftpd_conf_MySQLConfigFile new file mode 100644 index 0000000000..be85bafe5d --- /dev/null +++ b/templates/misc/configfiles/ubuntu_hardy/pure-ftpd/etc_pure-ftpd_conf_MySQLConfigFile @@ -0,0 +1 @@ +/etc/pure-ftpd/db/mysql.conf diff --git a/templates/misc/configfiles/ubuntu_hardy/pure-ftpd/etc_pure-ftpd_conf_NoAnonymous b/templates/misc/configfiles/ubuntu_hardy/pure-ftpd/etc_pure-ftpd_conf_NoAnonymous new file mode 100644 index 0000000000..7cfab5b05d --- /dev/null +++ b/templates/misc/configfiles/ubuntu_hardy/pure-ftpd/etc_pure-ftpd_conf_NoAnonymous @@ -0,0 +1 @@ +yes diff --git a/templates/misc/configfiles/ubuntu_hardy/pure-ftpd/etc_pure-ftpd_conf_PAMAuthentication b/templates/misc/configfiles/ubuntu_hardy/pure-ftpd/etc_pure-ftpd_conf_PAMAuthentication new file mode 100644 index 0000000000..7ecb56eb3f --- /dev/null +++ b/templates/misc/configfiles/ubuntu_hardy/pure-ftpd/etc_pure-ftpd_conf_PAMAuthentication @@ -0,0 +1 @@ +no diff --git a/templates/misc/configfiles/ubuntu_hardy/pure-ftpd/etc_pure-ftpd_db_mysql.conf b/templates/misc/configfiles/ubuntu_hardy/pure-ftpd/etc_pure-ftpd_db_mysql.conf new file mode 100644 index 0000000000..c139a7f151 --- /dev/null +++ b/templates/misc/configfiles/ubuntu_hardy/pure-ftpd/etc_pure-ftpd_db_mysql.conf @@ -0,0 +1,10 @@ +MYSQLServer +MYSQLUser +MYSQLPassword +MYSQLDatabase +MYSQLCrypt any + +MYSQLGetPW SELECT password FROM ftp_users WHERE username="\L" AND login_enabled="y" +MYSQLGetUID SELECT uid FROM ftp_users WHERE username="\L" AND login_enabled="y" +MYSQLGetGID SELECT gid FROM ftp_users WHERE username="\L" AND login_enabled="y" +MYSQLGetDir SELECT homedir FROM ftp_users WHERE username="\L" AND login_enabled="y" diff --git a/templates/misc/configfiles/ubuntu_hardy/xinetd/etc_xinet.d_syscp b/templates/misc/configfiles/ubuntu_hardy/xinetd/etc_xinet.d_syscp new file mode 100644 index 0000000000..acb494c173 --- /dev/null +++ b/templates/misc/configfiles/ubuntu_hardy/xinetd/etc_xinet.d_syscp @@ -0,0 +1,11 @@ +service syscp +{ + id = syscp + socket_type = dgram + protocol = tcp + wait = no + user = root + server = /usr/bin/php + server_args = -q /var/www/syscp/scripts/cron_tasks.php + only_from = 127.0.0.1 +} diff --git a/templates/misc/configurehint.tpl b/templates/misc/configurehint.tpl new file mode 100644 index 0000000000..df7f735fac --- /dev/null +++ b/templates/misc/configurehint.tpl @@ -0,0 +1,68 @@ + + + + + + + Attention: SysCP has not been confiured yet! + + + + + +
    + +
    + + + + + + diff --git a/templates/misc/error.tpl b/templates/misc/error.tpl new file mode 100644 index 0000000000..7161096a7e --- /dev/null +++ b/templates/misc/error.tpl @@ -0,0 +1,13 @@ +$header + + + + + + + + +
      {$lng['error']['error']}
    $error
    +
    +
    +$footer \ No newline at end of file diff --git a/templates/misc/question_yesno.tpl b/templates/misc/question_yesno.tpl new file mode 100644 index 0000000000..cd3ecd433a --- /dev/null +++ b/templates/misc/question_yesno.tpl @@ -0,0 +1,18 @@ +$header +
    + + + $hiddenparams + + + + + + + + +
      {$lng['question']['question']}
    $text 
    +
    +
    +
    +$footer \ No newline at end of file diff --git a/templates/misc/standardcustomer/index.html b/templates/misc/standardcustomer/index.html new file mode 100644 index 0000000000..4104b0fc4d --- /dev/null +++ b/templates/misc/standardcustomer/index.html @@ -0,0 +1,69 @@ + + + + + + + SysCP Defaultpage + + + + + +
    +
      +
    • This domain was created using SysCP.
    • +
    • There is no content on this domain yet.
    • +
    +
    + + + + + + diff --git a/templates/misc/success.tpl b/templates/misc/success.tpl new file mode 100644 index 0000000000..16f770fe8c --- /dev/null +++ b/templates/misc/success.tpl @@ -0,0 +1,13 @@ +$header + + + + + + + + +
      {$lng['success']['success']}
    $success_message
    {$lng['success']['clickheretocontinue']}
    +
    +
    +$footer \ No newline at end of file diff --git a/templates/navigation_element.tpl b/templates/navigation_element.tpl new file mode 100644 index 0000000000..52371c7a4a --- /dev/null +++ b/templates/navigation_element.tpl @@ -0,0 +1,12 @@ +
    + + + + + + + + + + +
       $completeLink
    $navigation_links
    diff --git a/templates/navigation_link.tpl b/templates/navigation_link.tpl new file mode 100644 index 0000000000..9611d4f7a2 --- /dev/null +++ b/templates/navigation_link.tpl @@ -0,0 +1,2 @@ +   {$completeLink} +
    \ No newline at end of file