From c87b59ecb233a3c3136049ff89dfa9c639c15dfc Mon Sep 17 00:00:00 2001 From: Neilpang Date: Mon, 22 Jun 2015 22:39:35 +0800 Subject: [PATCH 001/104] a space is needed a space is needed --- bin/v-add-firewall-rule | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/v-add-firewall-rule b/bin/v-add-firewall-rule index 126f62b4..56a6fcf4 100755 --- a/bin/v-add-firewall-rule +++ b/bin/v-add-firewall-rule @@ -52,7 +52,7 @@ is_system_enabled "$FIREWALL_SYSTEM" 'FIREWALL_SYSTEM' get_next_fw_rule validate_format 'rule' is_object_new '../../data/firewall/rules' 'RULE' "$rule" -if [ ! -z "$comment"]; then +if [ ! -z "$comment" ]; then validate_format 'comment' fi From d5441fdf85c24a7b712779dac43be911ba62a1d4 Mon Sep 17 00:00:00 2001 From: System Void Date: Tue, 24 Nov 2015 07:51:23 +0000 Subject: [PATCH 002/104] Added file existence check. I added a check to see if the file exists. --- web/download/file/index.php | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/web/download/file/index.php b/web/download/file/index.php index 5322185b..b0a462f4 100644 --- a/web/download/file/index.php +++ b/web/download/file/index.php @@ -8,20 +8,16 @@ if ((!isset($_SESSION['FILEMANAGER_KEY'])) || (empty($_SESSION['FILEMANAGER_KEY' $user = $_SESSION['user']; if (($_SESSION['user'] == 'admin') && (!empty($_SESSION['look']))) { - $user=$_SESSION['look']; + $user = $_SESSION['look']; } -if (!empty($_REQUEST['path'])) { - $path = $_REQUEST['path']; +$path = $_REQUEST['path']; +if (!empty($path) && file_exists($path)) { header("Content-type: application/octet-stream"); header("Content-Transfer-Encoding: binary"); header("Content-disposition: attachment;filename=".basename($path)); - passthru (VESTA_CMD . "v-open-fs-file " . $user . " " . escapeshellarg($path)); + passthru(VESTA_CMD . "v-open-fs-file " . $user . " " . escapeshellarg($path)); exit; -} -else { +} else { die('File not found'); } - - -?> From f9dc9233435d8647e8649b01eece51c7ed202941 Mon Sep 17 00:00:00 2001 From: Piotr Mamak Date: Thu, 24 Dec 2015 13:52:37 +0100 Subject: [PATCH 003/104] Humanize mail account quota --- web/templates/admin/list_mail_acc.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/templates/admin/list_mail_acc.html b/web/templates/admin/list_mail_acc.html index 10babc2c..901b94ef 100644 --- a/web/templates/admin/list_mail_acc.html +++ b/web/templates/admin/list_mail_acc.html @@ -158,7 +158,7 @@ sort-star="
:
- +
From 539a248a5077cf29538fff0b02361f588d3220d6 Mon Sep 17 00:00:00 2001 From: Piotr Mamak Date: Fri, 25 Dec 2015 13:31:01 +0100 Subject: [PATCH 004/104] Humanize mail account quota (user) --- web/templates/user/list_mail_acc.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/templates/user/list_mail_acc.html b/web/templates/user/list_mail_acc.html index 5d1956d9..1a3e68d8 100644 --- a/web/templates/user/list_mail_acc.html +++ b/web/templates/user/list_mail_acc.html @@ -146,7 +146,7 @@ sort-star="
:
- +
From 50b304464f5ab7f533bdc17007fed731d94c3884 Mon Sep 17 00:00:00 2001 From: neil Date: Tue, 29 Dec 2015 14:02:53 +0800 Subject: [PATCH 005/104] add new command v-update-web-domain-ssl, to update the ssl certificate when the certificate is renewed. --- bin/v-update-web-domain-ssl | 91 +++++++++++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 bin/v-update-web-domain-ssl diff --git a/bin/v-update-web-domain-ssl b/bin/v-update-web-domain-ssl new file mode 100644 index 00000000..6dffc281 --- /dev/null +++ b/bin/v-update-web-domain-ssl @@ -0,0 +1,91 @@ +#!/bin/bash +# info: updating ssl certificate for domain +# options: USER DOMAIN SSL_DIR [RESTART] +# +# The function updates the SSL certificate for a domain. Parameter ssl_dir is a path +# to directory where 2 or 3 ssl files can be found. Certificate file +# domain.tld.crt and its key domain.tld.key are mandatory. Certificate +# authority domain.tld.ca file is optional. + + +#----------------------------------------------------------# +# Variable&Function # +#----------------------------------------------------------# + +# Argument definition +user=$1 +domain=$(idn -t --quiet -u "$2" ) +domain_idn=$(idn -t --quiet -a "$domain") +ssl_dir=$3 +restart="$4" + +# Includes +source $VESTA/func/main.sh +source $VESTA/func/domain.sh +source $VESTA/func/ip.sh +source $VESTA/conf/vesta.conf + + +#----------------------------------------------------------# +# Verifications # +#----------------------------------------------------------# + +check_args '3' "$#" 'USER DOMAIN SSL_DIR [RESTART]' +validate_format 'user' 'domain' 'ssl_dir' +is_system_enabled "$WEB_SYSTEM" 'WEB_SYSTEM' +is_system_enabled "$WEB_SSL" 'SSL_SUPPORT' +is_object_valid 'user' 'USER' "$user" +is_object_unsuspended 'user' 'USER' "$user" +is_object_valid 'web' 'DOMAIN' "$domain" +is_object_unsuspended 'web' 'DOMAIN' "$domain" +is_object_value_exist 'web' 'DOMAIN' "$domain" '$SSL' +is_web_domain_cert_valid + + +#----------------------------------------------------------# +# Action # +#----------------------------------------------------------# + +# Adding certificate to user data directory +cp -f $ssl_dir/$domain.crt $USER_DATA/ssl/$domain.crt +cp -f $ssl_dir/$domain.key $USER_DATA/ssl/$domain.key +cp -f $ssl_dir/$domain.crt $USER_DATA/ssl/$domain.pem +if [ -e "$ssl_dir/$domain.ca" ]; then + cp -f $ssl_dir/$domain.ca $USER_DATA/ssl/$domain.ca + echo >> $USER_DATA/ssl/$domain.pem + cat $USER_DATA/ssl/$domain.ca >> $USER_DATA/ssl/$domain.pem +fi +chmod 660 $USER_DATA/ssl/$domain.* + + + +# Adding certificate to user dir +cp -f $USER_DATA/ssl/$domain.crt $HOMEDIR/$user/conf/web/ssl.$domain.crt +cp -f $USER_DATA/ssl/$domain.key $HOMEDIR/$user/conf/web/ssl.$domain.key +cp -f $USER_DATA/ssl/$domain.pem $HOMEDIR/$user/conf/web/ssl.$domain.pem +if [ -e "$USER_DATA/ssl/$domain.ca" ]; then + cp -f $USER_DATA/ssl/$domain.ca $HOMEDIR/$user/conf/web/ssl.$domain.ca +fi + + + +#----------------------------------------------------------# +# Vesta # +#----------------------------------------------------------# + +# Restarting web server +if [ "$restart" != 'no' ]; then + $BIN/v-restart-web + check_result $? "Web restart failed" >/dev/null + + if [ ! -z "$PROXY_SYSTEM" ]; then + $BIN/v-restart-proxy + check_result $? "Proxy restart failed" >/dev/null + fi +fi + +# Logging +log_history "update ssl certificate for $domain" +log_event "$OK" "$EVENT" + +exit From 395c47102113031751f95fb2b0e6e541a007efd4 Mon Sep 17 00:00:00 2001 From: Ryan Harvey Date: Thu, 18 Feb 2016 02:12:53 +0000 Subject: [PATCH 006/104] Update v-add-user More stricter permissions, the current setup allows any user on the system to read other users web files as long as they know the path, the only users which should be allow to access $HOMEDIR/$user/web is owner of sites and nginx user to be able to serve static files. I also locked down access $HOMEDIR/$user/tmp to the user, its gets used in the hosting template for tmp files, i don't see why another user would need access to it as apache runs as the user. --- bin/v-add-user | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/bin/v-add-user b/bin/v-add-user index 35424381..6961760c 100755 --- a/bin/v-add-user +++ b/bin/v-add-user @@ -67,10 +67,13 @@ echo "$user:$password" | /usr/sbin/chpasswd mkdir $HOMEDIR/$user/conf if [ ! -z "$WEB_SYSTEM" ]; then + nginxuser=$(ps -eo user,comm|grep nginx|uniq|grep -v "root"|awk '{ print $1}') mkdir $HOMEDIR/$user/conf/web $HOMEDIR/$user/web $HOMEDIR/$user/tmp - chmod 751 $HOMEDIR/$user/conf/web $HOMEDIR/$user/web - chmod 771 $HOMEDIR/$user/tmp - chown $user:$user $HOMEDIR/$user/web $HOMEDIR/$user/tmp + chmod 751 $HOMEDIR/$user/conf/web + chmod 710 $HOMEDIR/$user/web + chmod 700 $HOMEDIR/$user/tmp + chown $user:$nginxuser $HOMEDIR/$user/web + chown $user:$user $HOMEDIR/$user/tmp fi if [ ! -z "$MAIL_SYSTEM" ]; then From af66851b8b460291db685f870377554a38f65c16 Mon Sep 17 00:00:00 2001 From: System Void Date: Sun, 26 Jun 2016 16:14:47 +0100 Subject: [PATCH 007/104] Moving this to v-open-fs-file --- web/download/file/index.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/download/file/index.php b/web/download/file/index.php index b0a462f4..0cc5b5c1 100644 --- a/web/download/file/index.php +++ b/web/download/file/index.php @@ -12,7 +12,7 @@ if (($_SESSION['user'] == 'admin') && (!empty($_SESSION['look']))) { } $path = $_REQUEST['path']; -if (!empty($path) && file_exists($path)) { +if (!empty($path)) { header("Content-type: application/octet-stream"); header("Content-Transfer-Encoding: binary"); header("Content-disposition: attachment;filename=".basename($path)); From 20675ac38076749a1bc320a66692852b0880595b Mon Sep 17 00:00:00 2001 From: System Void Date: Sun, 26 Jun 2016 16:18:43 +0100 Subject: [PATCH 008/104] Added file check --- bin/v-open-fs-file | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/bin/v-open-fs-file b/bin/v-open-fs-file index b04ad493..c51cd0b9 100755 --- a/bin/v-open-fs-file +++ b/bin/v-open-fs-file @@ -33,6 +33,11 @@ if [ ! -z "$src_file" ]; then echo "Error: invalid source path $src_file" exit 2 fi + + if [ ! -f "$src_file" ]; then + echo "Error: file not found $src_file" + exit 2 + fi fi # Reading file From 93dbc16a8609e30b84376c56816d0ac3c16c031c Mon Sep 17 00:00:00 2001 From: slmcncb Date: Fri, 1 Jul 2016 00:01:16 +0300 Subject: [PATCH 009/104] fix cron template files --- web/templates/admin/add_cron.html | 8 ++++---- web/templates/admin/edit_cron.html | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/web/templates/admin/add_cron.html b/web/templates/admin/add_cron.html index f0ba4f96..6719fa0f 100644 --- a/web/templates/admin/add_cron.html +++ b/web/templates/admin/add_cron.html @@ -86,7 +86,7 @@

- +

@@ -155,7 +155,7 @@

- +

@@ -229,7 +229,7 @@

- +

@@ -344,7 +344,7 @@

- +

diff --git a/web/templates/admin/edit_cron.html b/web/templates/admin/edit_cron.html index 9eb7f106..ffd388bb 100644 --- a/web/templates/admin/edit_cron.html +++ b/web/templates/admin/edit_cron.html @@ -86,7 +86,7 @@

- +

@@ -155,7 +155,7 @@

- +

@@ -227,7 +227,7 @@

- +

@@ -341,7 +341,7 @@

- +

From 2cbd8e2d3793473462b1c89263d21889f1cb8476 Mon Sep 17 00:00:00 2001 From: myrevery Date: Sat, 2 Jul 2016 08:37:35 -0700 Subject: [PATCH 010/104] Release 0.9.8-16 Hello @serghey-rodin. Update for 0.9.8-16 Complete and extremely accurate Chinese localization translation. L591&L595&L597&L601 Core keywords need to be updated. --- web/inc/i18n/cn.php | 808 ++++++++++++++++++++++---------------------- 1 file changed, 404 insertions(+), 404 deletions(-) diff --git a/web/inc/i18n/cn.php b/web/inc/i18n/cn.php index 1d82d920..16c24cd4 100644 --- a/web/inc/i18n/cn.php +++ b/web/inc/i18n/cn.php @@ -1,29 +1,29 @@ '预设方案', - 'IP' => 'IP管理', - 'Graphs' => '流量统计', - 'Statistics' => '统计分析', - 'Log' => '日志', + 'IP' => 'IP 地址', + 'Graphs' => '资源图表', + 'Statistics' => '统计信息', + 'Log' => '系统日志', 'Server' => '服务器', 'Services' => '系统服务', - 'Firewall' => '防火牆', - 'Updates' => '更新升级', + 'Firewall' => '防火墙', + 'Updates' => '系统更新', 'Log in' => '登录', - 'Log out' => '退出', + 'Log out' => '登出', - 'USER' => '用户管理', - 'WEB' => '网站管理 ', - 'DNS' => 'DNS管理', - 'MAIL' => '邮箱管理', + 'USER' => '用户账户', + 'WEB' => 'Web 服务', + 'DNS' => 'DNS 服务', + 'MAIL' => '邮箱服务', 'DB' => '数据库', - 'CRON' => '计划任务', - 'BACKUP' => '备份管理', + 'CRON' => '定时任务', + 'BACKUP' => '数据备份', 'Add User' => '添加用户', 'Add Domain' => '添加域名', @@ -35,26 +35,26 @@ $LANG['cn'] = array( 'Add Database' => '添加数据库', 'Add Cron Job' => '添加定时任务', 'Create Backup' => '创建备份', - 'Configure' => '要配置', - 'Restore All' => '恢复所有', - 'Add Package' => '增加预设方案', - 'Add IP' => '添加IP', - 'Add Rule' => '添加規則', - 'Ban IP Address' => '潘基文的IP地址', + 'Configure' => '配置', + 'Restore All' => '全部恢复', + 'Add Package' => '添加方案', + 'Add IP' => '添加IP地址', + 'Add Rule' => '添加规则', + 'Ban IP Address' => '封锁IP地址', 'Search' => '搜索', - 'Add one more FTP Account' => '增加一個FTP賬號', - 'Overall Statistics' => '总体统计', - 'Daily' => '日', - 'Weekly' => '周', - 'Monthly' => '月', - 'Yearly' => '年', - 'Add' => '增加', + 'Add one more FTP Account' => '增加一个FTP账户', + 'Overall Statistics' => '整体统计信息', + 'Daily' => '按天', + 'Weekly' => '按周', + 'Monthly' => '按月', + 'Yearly' => '按年', + 'Add' => '添加', 'Back' => '返回', 'Save' => '保存', 'Submit' => '提交', - 'toggle all' => '批量执行', - 'apply to selected' => '应用到已选择', + 'toggle all' => '批量操作', + 'apply to selected' => '应用于选中项的操作', 'rebuild' => '重建', 'rebuild web' => '重建网站', 'rebuild dns' => '重建DNS', @@ -65,69 +65,69 @@ $LANG['cn'] = array( 'suspend' => '暂停', 'unsuspend' => '解除暂停', 'delete' => '删除', - 'show per user' => '显示每个用户', - 'login as' => '登录为', - 'logout' => '退出', - 'edit' => '修改', - 'open webstats' => '打开webstats', + 'show per user' => '按用户显示', + 'login as' => '登录至账户', + 'logout' => '登出', + 'edit' => '编辑', + 'open webstats' => '打开网站统计', 'view logs' => '查看日志', - 'list records' => '列表 %s 记录', - 'add record' => '增加记录', - 'list accounts' => '列表 %s 账户', + 'list records' => '列出 %s 条记录', + 'add record' => '添加记录', + 'list accounts' => '列出 %s 个账户', 'add account' => '添加账户', 'open webmail' => '打开网页邮箱', - 'list fail2ban' => 'fail2ban的名單', + 'list fail2ban' => 'fail2ban 封锁名单', 'open %s' => '打开 %s', 'download' => '下载', 'restore' => '恢复', - 'configure restore settings' => '配置欢迎设置', + 'configure restore settings' => '配置还原设置', 'stop' => '停止', - 'start' => '开始', - 'restart' => '重启', + 'start' => '启动', + 'restart' => '重新启动', 'update' => '更新', 'generate' => '生成', 'Generate CSR' => '生成CSR', 'reread IP' => '重新读取IP', 'enable autoupdate' => '启用自动更新', - 'disable autoupdate' => '禁用自动更新', - 'turn on notifications' => '開啟通知', - 'turn off notifications' => '關閉通知', + 'disable autoupdate' => '停用自动更新', + 'turn on notifications' => '启用通知', + 'turn off notifications' => '停用通知', 'Adding User' => '添加用户', - 'Editing User' => '修改用过', + 'Editing User' => '编辑用户', 'Adding Domain' => '添加域名', - 'Editing Domain' => '修改域名', + 'Editing Domain' => '编辑域名', 'Adding DNS Domain' => '添加DNS域名', - 'Editing DNS Domain' => '修改DNS域名', + 'Editing DNS Domain' => '编辑DNS域名', 'Adding DNS Record' => '添加DNS记录', - 'Editing DNS Record' => '修改DNS记录', - 'Adding Mail Domain' => '添加邮局域名', - 'Editing Mail Domain' => '修改邮局域名', + 'Editing DNS Record' => '编辑DNS记录', + 'Adding Mail Domain' => '添加邮箱域名', + 'Editing Mail Domain' => '编辑邮箱域名', 'Adding Mail Account' => '添加邮箱账户', - 'Editing Mail Account' => '修改邮箱账户', - 'Adding database' => '添加数据', - 'Editing Cron Job' => '修改定时任务', + 'Editing Mail Account' => '编辑邮箱账户', + 'Adding database' => '添加数据库', + 'Editing Cron Job' => '编辑定时任务', 'Adding Cron Job' => '添加定时任务', - 'Editing Database' => '修改数据库', - 'Adding Package' => '添加预设方案', - 'Editing Package' => '修改预设方案', + 'Editing Database' => '编辑数据库', + 'Adding Package' => '添加方案', + 'Editing Package' => '编辑方案', 'Adding IP address' => '添加IP地址', - 'Editing IP Address' => '修改IP地址', - 'Editing Backup Exclusions' => '编辑排除', - 'Generating CSR' => '生成的CSR', - 'Listing' => '列表', + 'Editing IP Address' => '编辑IP地址', + 'Editing Backup Exclusions' => '配置备份排除项目', + 'Generating CSR' => '生成CSR', + 'Listing' => '列出', 'Search Results' => '搜索结果', - 'Adding Firewall Rule' => '添加防火牆規則', - 'Editing Firewall Rule' => '編輯防火牆規則', - 'Adding IP Address to Banlist' => '添加IP地址黑名單', + 'Adding Firewall Rule' => '添加防火墙规则', + 'Editing Firewall Rule' => '编辑防火墙规则', + 'Adding IP Address to Banlist' => '添加IP至封锁名单', - 'active' => '活跃', + 'active' => '正常', 'spnd' => '暂停', - 'suspended' => '暂停', - 'running' => '运行', - 'stopped' => '停止', - 'outdated' => '过期', - 'updated' => '更新', + 'suspended' => '已暂停', + 'running' => '运行中', + 'stopped' => '已停止', + 'outdated' => '可升级新版本', + 'updated' => '已是最新版本', 'yes' => '是', 'no' => '否', @@ -212,64 +212,64 @@ $LANG['cn'] = array( 'Owner' => '归属', 'Users' => '用户', 'Load Average' => '平均负载', - 'Memory Usage' => '内存使用', - 'HTTPD Usage' => 'apache使用', - 'NGINX Usage' => 'nginx使用', - 'MySQL Usage on localhost' => '本地Mysql使用', - 'PostgreSQL Usage on localhost' => '本地PostgreSQL使用', - 'Bandwidth Usage eth0' => 'eth0流量使用', - 'FTP Usage' => 'FTP使用', - 'SSH Usage' => 'SSH使用', + 'Memory Usage' => '内存用量', + 'HTTPD Usage' => 'Apache用量', + 'NGINX Usage' => 'NGINX用量', + 'MySQL Usage on localhost' => 'MySQL用量 (localhost)', + 'PostgreSQL Usage on localhost' => 'PostgreSQL用量 (localhost)', + 'Bandwidth Usage eth0' => '网络流量 (eth0)', + 'FTP Usage' => 'FTP用量', + 'SSH Usage' => 'SSH用量', 'reverse proxy' => '反向代理', - 'web server' => '网页服务器', - 'dns server' => 'dns服务器', - 'mail server' => '邮件服务器', - 'pop/imap server' => 'pop/imap服务器', - 'email antivirus' => '邮件杀毒', - 'email antispam' => '反垃圾邮件', - 'database server' => '数据库服务器', - 'ftp server' => 'FTP服务器', - 'job scheduler' => '定时调度', - 'CPU' => '处理器', + 'web server' => 'Web服务', + 'dns server' => 'DNS服务', + 'mail server' => '邮箱服务', + 'pop/imap server' => 'POP/IMAP服务', + 'email antivirus' => '邮箱防病毒', + 'email antispam' => '防垃圾邮件', + 'database server' => '数据库服务', + 'ftp server' => 'FTP服务', + 'job scheduler' => '执行定时任务', + 'CPU' => 'CPU', 'Memory' => '内存', - 'Uptime' => '在线时间', - 'core package' => '核心方案', - 'php interpreter' => 'php 解释器', - 'internal web server' => '内网网页服务器', + 'Uptime' => '已运行时间', + 'core package' => '核心系统', + 'php interpreter' => 'PHP解释器', + 'internal web server' => '内部Web服务', 'Version' => '版本', - 'Release' => '发布', - 'Architecture' => 'Architecture', - 'Object' => '兑现', + 'Release' => '发布号', + 'Architecture' => '架构', + 'Object' => '对象', 'Owner' => '归属', - 'Username' => '用户名', + 'Username' => '用户名称', 'Password' => '密码', - 'Email' => '邮箱', - 'Package' => '预设方案', + 'Email' => '电子邮箱', + 'Package' => '方案', 'Language' => '语言', - 'First Name' => '姓', - 'Last Name' => '名', - 'Send login credentials to email address' => '发送登录凭据到电子邮件地址', + 'First Name' => '名字', + 'Last Name' => '姓氏', + 'Send login credentials to email address' => '将登录信息发送到邮箱', 'Default Template' => '默认模板', - 'Default Name Servers' => '默认NS服务器', + 'Default Name Servers' => '默认DNS服务器', 'Domain' => '域名', 'DNS Support' => 'DNS支持', - 'Mail Support' => 'Mail支持', + 'Mail Support' => '邮箱支持', 'Advanced options' => '高级选项', 'Aliases' => '别名', 'SSL Certificate' => 'SSL证书', - 'SSL Key' => 'SSL Key', - 'SSL Certificate Authority / Intermediate' => 'SSL证书颁发机构 / 中级', + 'SSL Key' => 'SSL密匙', + 'SSL Certificate Authority / Intermediate' => 'SSL签发机构 / 中级', 'SSL CSR' => 'SSL CSR', 'optional' => '可选', 'internal' => '内部', 'Statistics Authorization' => '统计授权', 'Statistics Auth' => '统计验证', 'Account' => '账户', - 'Prefix will be automaticaly added to username' => '前缀 %s 会自动添加到用户名', - 'Send FTP credentials to email' => '发送FTP凭证到邮箱', + 'Prefix will be automaticaly added to username' => '前缀 %s 将会自动加入用户名称', + 'Send FTP credentials to email' => '将FTP登录信息发送到邮箱', 'Expiration Date' => '到期日期', 'YYYY-MM-DD' => 'YYYY-MM-DD', - 'Name servers' => 'NS服务器', + 'Name servers' => 'DNS服务器', 'Record' => '记录', 'IP or Value' => 'IP或值', 'Priority' => '优先级', @@ -277,24 +277,24 @@ $LANG['cn'] = array( 'in megabytes' => '以MB为单位', 'Message' => '信息', 'use local-part' => '使用本地部分', - 'one or more email addresses' => '一个或者更多邮箱地址', - 'Prefix will be automaticaly added to database name and database user' => '前缀 %s 会自动增加到数据库用户名', + 'one or more email addresses' => '一个或更多邮箱地址', + 'Prefix will be automaticaly added to database name and database user' => '前缀 %s 将会自动加入数据库名称及用户名称', 'Database' => '数据库', 'Type' => '类型', 'Minute' => '分钟', - 'Command' => '命令', + 'Command' => '指令', 'Package Name' => '方案名称', 'Netmask' => '子网掩码', - 'Interface' => '接口', + 'Interface' => '网络接口', 'Shared' => '共享', - 'Assigned user' => '分配用户', - 'Assigned domain' => '分配域名', - 'NAT IP association' => 'NAT IP association', + 'Assigned user' => '指定用户', + 'Assigned domain' => '指定域名', + 'NAT IP association' => 'NAT IP 连接', 'shell' => '脚本', 'web domains' => '网站域名', 'web aliases' => '网站别名', - 'dns records' => 'dns记录', - 'mail domains' => '邮局域名', + 'dns records' => 'DNS记录', + 'mail domains' => '邮箱域名', 'mail accounts' => '邮箱账户', 'accounts' => '账户', 'databases' => '数据库', @@ -302,164 +302,164 @@ $LANG['cn'] = array( 'backups' => '备份', 'quota' => '配额', 'day of week' => '星期几', - 'cmd' => 'cmd', + 'cmd' => '指令', 'users' => '用户', 'domains' => '域名', 'aliases' => '别名', 'records' => '记录', - 'jobs' => '定时任务', - 'username' => '用户名', + 'jobs' => '任务', + 'username' => '用户名称', 'password' => '密码', 'type' => '类型', - 'charset' => '字符集编码', + 'charset' => '编码', 'domain' => '域名', - 'ip' => 'ip', + 'ip' => 'IP', 'ip address' => 'IP地址', - 'IP address' => 'IP 地址', + 'IP address' => 'IP地址', 'netmask' => '子网掩码', 'interface' => '网络接口', - 'assigned user' => '分配用户', + 'assigned user' => '指定用户', 'ns1' => 'ns1', 'ns2' => 'ns2', 'user' => '用户', 'email' => '邮箱', - 'first name' => '姓', - 'last name' => '名', + 'first name' => '名字', + 'last name' => '姓氏', 'account' => '账户', - 'ssl certificate' => 'ssl证书', - 'ssl key' => 'ssl密匙', - 'stats user password' => '统计用户密码', - 'stats username' => '统计用户名', + 'ssl certificate' => 'SSL证书', + 'ssl key' => 'SSL密匙', + 'stats user password' => '统计用户账户密码', + 'stats username' => '统计用户名称', 'stats password' => '统计密码', - 'ftp user password' => 'ftp用户密码', - 'ftp user' => 'ftp用户', + 'ftp user password' => 'FTP用户账户密码', + 'ftp user' => 'FTP用户', 'Last 70 lines of %s.%s.log' => '最后70行 %s.%s.日志', 'Download AccessLog' => '下载访问日志', 'Download ErrorLog' => '下载错误日志', - 'Country' => '国家‘', - '2 letter code' => '2位短码:例如中国是CN/美国是US', - 'State / Province' => '州/省', - 'City / Locality' => '市/地区', + 'Country' => '国家', + '2 letter code' => '2位国家简码 如: 中国CN / 美国US', + 'State / Province' => '州 / 省', + 'City / Locality' => '市 / 地区', 'Organization' => '组织名称', - 'Action' => '動作', - 'Protocol' => '協議', - 'Port' => '港口', - 'Comment' => '評論', - 'Banlist' => '黑名單', - 'ranges are acceptable' => '範圍是可以接受的', + 'Action' => '操作', + 'Protocol' => '协议', + 'Port' => '端口', + 'Comment' => '备注', + 'Banlist' => '需封锁', + 'ranges are acceptable' => '可使用范围 如: 21-22', 'CIDR format is supported' => '支持CIDR格式', - 'Add one more Name Server' => 'Add one more Name Server', + 'Add one more Name Server' => '增加一个DNS服务器', - 'unlimited' => 'unlimited', - '1 account' => '1 账户', - '%s accounts' => '%s 账户', - '1 domain' => '1 域名', - '%s domains' => '%s 域名', - '1 record' => '1 记录', - '%s records' => '%s 记录', - '1 mail account' => '1 邮箱账户', - '%s mail accounts' => '%s 邮箱账户', - '1 database' => '1 数据库', - '%s databases' => '%s 数据库', - '1 cron job' => '1 定时任务', - '%s cron jobs' => '%s 定时任务', - '1 archive' => '1 档案', - '%s archives' => '%s 档案', - '1 package' => '1 预设方案', - '%s packages' => '%s 预设方案', - '1 IP address' => '1 IP地址', - '%s IP addresses' => '%s IP地址', - '1 month' => '1 月', - '%s months' => '%s 月', - '1 log record' => '1 日志记录', - '%s log records' => '%s 日志记录', - '1 object' => '1 对象', - '%s objects' => '%s 对象', - 'no exclusions' => '不排除', - '1 rule' => '1規則', - '%s rules' => '%s 規則', - 'There are currently banned IP' => '目前尚無禁止的IP地址', + 'unlimited' => '无限', + '1 account' => '1 个账户', + '%s accounts' => '%s 个账户', + '1 domain' => '1 个域名', + '%s domains' => '%s 个域名', + '1 record' => '1 条记录', + '%s records' => '%s 条记录', + '1 mail account' => '1 个邮箱账户', + '%s mail accounts' => '%s 个邮箱账户', + '1 database' => '1 个数据库', + '%s databases' => '%s 个数据库', + '1 cron job' => '1 个任务', + '%s cron jobs' => '%s 个任务', + '1 archive' => '1 个存档', + '%s archives' => '%s 个存档', + '1 package' => '1 个方案', + '%s packages' => '%s 个方案', + '1 IP address' => '1 个IP地址', + '%s IP addresses' => '%s 个IP地址', + '1 month' => '1 个月', + '%s months' => '%s 个月', + '1 log record' => '1 条日志记录', + '%s log records' => '%s 条日志记录', + '1 object' => '1 个对象', + '%s objects' => '%s 个对象', + 'no exclusions' => '未排除', + '1 rule' => '1 条规则', + '%s rules' => '%s 条规则', + 'There are currently banned IP' => '目前没有已暂停的IP地址', - 'USER_CREATED_OK' => 'User %s 已创建成功', - 'WEB_DOMAIN_CREATED_OK' => 'Domain %s 已创建成功.', - 'DNS_DOMAIN_CREATED_OK' => 'DNS domain %s 已创建成功.', - 'DNS_RECORD_CREATED_OK' => 'Record %s.%s 已创建成功.', - 'MAIL_DOMAIN_CREATED_OK' => 'Mail domain %s 已创建成功.', - 'MAIL_ACCOUNT_CREATED_OK' => 'Mail account %s@%s 已创建成功', - 'DATABASE_CREATED_OK' => 'Database %s 已创建成功', - 'CRON_CREATED_OK' => 'Cron job 已创建成功.', - 'IP_CREATED_OK' => 'IP address %s 已创建成功.', - 'PACKAGE_CREATED_OK' => 'Package %s 已创建成功.', - 'SSL_GENERATED_OK' => '证书已成功生成.', - 'RULE_CREATED_OK' => '規則已成功創建', - 'Autoupdate has been successfully enabled' => 'Autoupdate has been successfully enabled', - 'Autoupdate has been successfully disabled' => 'Autoupdate has been successfully disabled', - 'Cronjob email reporting has been successfully enabled' => '的cronjob電子郵件報告已成功啟用', - 'Cronjob email reporting has been successfully disabled' => '的cronjob電子郵件報告已成功關閉', - 'Changes has been saved.' => '更改已保存.', - 'Confirmation' => 'Confirmation', - 'DELETE_USER_CONFIRMATION' => '您确定删除用户 %s?', - 'SUSPEND_USER_CONFIRMATION' => '你确定暂停用户 %s?', - 'UNSUSPEND_USER_CONFIRMATION' => '您确定解除暂停用户 %s?', - 'DELETE_DOMAIN_CONFIRMATION' => '您确定删除域名 %s?', - 'SUSPEND_DOMAIN_CONFIRMATION' => '你确定暂停域名 %s?', - 'UNSUSPEND_DOMAIN_CONFIRMATION' => '你确定解除暂停域名 %s?', - 'DELETE_RECORD_CONFIRMATION' => '你确定删除记录 %s?', - 'SUSPEND_RECORD_CONFIRMATION' => '你确定暂停记录 %s?', - 'UNSUSPEND_RECORD_CONFIRMATION' => '你确定解除暂停记录 %s?', - 'DELETE_MAIL_ACCOUNT_CONFIRMATION' => '你确定删除 %s?', - 'SUSPEND_MAIL_ACCOUNT_CONFIRMATION' => '你确定暂停 %s?', - 'UNSUSPEND_MAIL_ACCOUNT_CONFIRMATION' => '你确定解除暂停 %s?', - 'DELETE_DATABASE_CONFIRMATION' => '你确定删除数据库 %s?', - 'SUSPEND_DATABASE_CONFIRMATION' => '你确定暂停数据 %s?', - 'UNSUSPEND_DATABASE_CONFIRMATION' => '你确定解除暂停数据库 %s?', - 'DELETE_CRON_CONFIRMATION' => '你确定删除定时任务?', - 'SUSPEND_CRON_CONFIRMATION' => '你确定暂停定时任务?', - 'UNSUSPEND_CRON_CONFIRMATION' => '你确定解除暂停定时任务?', - 'DELETE_BACKUP_CONFIRMATION' => '你确定删除 %s 备份?', - 'DELETE_EXCLUSION_CONFIRMATION' => 'Are you sure to delete %s exclusion?', - 'DELETE_PACKAGE_CONFIRMATION' => '你确定删除方案 %s?', - 'DELETE_IP_CONFIRMATION' => '你确定删除IP地址 %s?', - 'DELETE_RULE_CONFIRMATION' => '您確定要刪除規則 #%s?', - 'SUSPEND_RULE_CONFIRMATION' => '您確定要暫停規則 #%s?', - 'UNSUSPEND_RULE_CONFIRMATION' => '您確定要取消掛起規則 #%s?', - 'LEAVE_PAGE_CONFIRMATION' => 'Leave Page?', - 'RESTART_CONFIRMATION' => 'Are you sure you want to restart %s?', - 'Welcome' => '欢迎光临', + 'USER_CREATED_OK' => '用户 %s 已添加成功', + 'WEB_DOMAIN_CREATED_OK' => '网站域名 %s 已添加成功', + 'DNS_DOMAIN_CREATED_OK' => 'DNS域名 %s 已添加成功', + 'DNS_RECORD_CREATED_OK' => '记录 %s.%s 已添加成功', + 'MAIL_DOMAIN_CREATED_OK' => '邮箱域名 %s 已添加成功', + 'MAIL_ACCOUNT_CREATED_OK' => '邮箱账户 %s@%s 已添加成功', + 'DATABASE_CREATED_OK' => '数据库 %s 已添加成功', + 'CRON_CREATED_OK' => '定时任务已添加成功', + 'IP_CREATED_OK' => 'IP地址 %s 已添加成功', + 'PACKAGE_CREATED_OK' => '方案 %s 已添加成功', + 'SSL_GENERATED_OK' => 'SSL证书已生成', + 'RULE_CREATED_OK' => '规则已创建成功', + 'Autoupdate has been successfully enabled' => '自动更新已成功启用', + 'Autoupdate has been successfully disabled' => '自动更新已成功关闭', + 'Cronjob email reporting has been successfully enabled' => '定时任务的电子邮件报告已成功启用', + 'Cronjob email reporting has been successfully disabled' => '定时任务的电子邮件报告已成功关闭', + 'Changes has been saved.' => '已保存更改', + 'Confirmation' => '确认', + 'DELETE_USER_CONFIRMATION' => '确定要删除用户 %s 吗?', + 'SUSPEND_USER_CONFIRMATION' => '确定要暂停用户 %s 吗?', + 'UNSUSPEND_USER_CONFIRMATION' => '确定要解除暂停用户 %s 吗?', + 'DELETE_DOMAIN_CONFIRMATION' => '确定要删除域名 %s 吗?', + 'SUSPEND_DOMAIN_CONFIRMATION' => '确定要暂停域名 %s 吗?', + 'UNSUSPEND_DOMAIN_CONFIRMATION' => '确定要解除暂停域名 %s 吗?', + 'DELETE_RECORD_CONFIRMATION' => '确定要删除记录 %s 吗?', + 'SUSPEND_RECORD_CONFIRMATION' => '确定要暂停记录 %s 吗?', + 'UNSUSPEND_RECORD_CONFIRMATION' => '确定要解除暂停记录 %s 吗?', + 'DELETE_MAIL_ACCOUNT_CONFIRMATION' => '确定要删除 %s 吗?', + 'SUSPEND_MAIL_ACCOUNT_CONFIRMATION' => '确定要暂停 %s 吗?', + 'UNSUSPEND_MAIL_ACCOUNT_CONFIRMATION' => '确定要解除暂停 %s 吗?', + 'DELETE_DATABASE_CONFIRMATION' => '确定要删除数据库 %s 吗?', + 'SUSPEND_DATABASE_CONFIRMATION' => '确定要暂停数据库 %s 吗?', + 'UNSUSPEND_DATABASE_CONFIRMATION' => '确定要解除暂停数据库 %s 吗?', + 'DELETE_CRON_CONFIRMATION' => '确定要删除定时任务吗?', + 'SUSPEND_CRON_CONFIRMATION' => '确定要暂停定时任务吗?', + 'UNSUSPEND_CRON_CONFIRMATION' => '确定要解除暂停定时任务吗?', + 'DELETE_BACKUP_CONFIRMATION' => '确定要删除 %s 备份吗?', + 'DELETE_EXCLUSION_CONFIRMATION' => '确定要删除 %s 例外吗?', + 'DELETE_PACKAGE_CONFIRMATION' => '确定要删除方案 %s 吗?', + 'DELETE_IP_CONFIRMATION' => '确定要删除IP地址 %s 吗?', + 'DELETE_RULE_CONFIRMATION' => '确定要删除规则 #%s 吗?', + 'SUSPEND_RULE_CONFIRMATION' => '确定要暂停规则 #%s 吗?', + 'UNSUSPEND_RULE_CONFIRMATION' => '确定要解除暂停规则 #%s 吗?', + 'LEAVE_PAGE_CONFIRMATION' => '确定要离开当前页吗?', + 'RESTART_CONFIRMATION' => '确定要重新启动 %s 吗?', + 'Welcome' => '欢迎', 'LOGGED_IN_AS' => '以用户身份 %s 登录', 'Error' => '错误', - 'Invalid username or password' => '无效账号或密码', - 'Invalid username or code' => '无效账户或者验证码', - 'Passwords not match' => '密码不正确', - 'Please enter valid email address.' => '请输入有效的邮箱.', - 'Field "%s" can not be blank.' => '字段 "%s" 不能为空.', - 'Password is too short.' => '密码太短 (最少为6位数大小写字母+数字)', + 'Invalid username or password' => '无效的用户名称或密码', + 'Invalid username or code' => '无效的用户名称或验证码.', + 'Passwords not match' => '密码错误', + 'Please enter valid email address.' => '请输入正确的邮箱', + 'Field "%s" can not be blank.' => '"%s" 不能为空', + 'Password is too short.' => '密码太短 (至少为6个数字+字母)', 'Error code:' => '错误代码: %s', - 'SERVICE_ACTION_FAILED' => '"%s" "%s" 字段', - 'IP address is in use' => 'IP地址已被使用', - 'BACKUP_SCHEDULED' => '任务已经被添加到队列中。当备份完成将会电子邮件通知您.', - 'BACKUP_EXISTS' => '现有的备份已在运行,请等待该备份完成.', - 'RESTORE_SCHEDULED' => '任务已经被添加到队列中。当备份完成将会电子邮件通知您.', - 'RESTORE_EXISTS' => '现有的修复工作已在执行,请等待完成后再执行.', + 'SERVICE_ACTION_FAILED' => '"%s" "%s" 失败', + 'IP address is in use' => 'IP地址在使用中', + 'BACKUP_SCHEDULED' => '您的要求已加入队列中,备份完成后会以电子邮件通知您 ', + 'BACKUP_EXISTS' => '已经有一个备份正在执行,请等待备份完成后再操作', + 'RESTORE_SCHEDULED' => '您的要求已加入队列中,恢复完成后会以电子邮件通知您', + 'RESTORE_EXISTS' => '已经有一个恢复正在执行,请等待恢复完成后再操作', - 'WEB_EXCLUSIONS' => "Type domain name, one per line. To exclude all domains use *. To exclude specific dirs use following format: domain.com:public_html/cache:public_html/tmp", - 'DNS_EXCLUSIONS' => "Type domain name, one per line. To exclude all domains use *", - 'MAIL_EXCLUSIONS' => "Type domain name, one per line. To exclude all domains use *. To exclude specific accounts use following format: domain.com:info:support:postmaster", - 'DB_EXCLUSIONS' => "Type full database name, one per line. To exclude all databases use *", - 'CRON_EXCLUSIONS' => "To exclude all jobs use *", - 'USER_EXCLUSIONS' => "Type directory name, one per line. To exlude all dirs use *", + 'WEB_EXCLUSIONS' => "输入域名,每行一个。要排除所有域名请使用 *。要排除特定目录使用以下格式: domain.com:public_html/cache:public_html/tmp", + 'DNS_EXCLUSIONS' => "输入域名,每行一个。要排除所有域名请使用 *", + 'MAIL_EXCLUSIONS' => "输入域名,每行一个。要排除所有域名请使用 *。要排除特定帐户使用以下格式: domain.com:info:support:postmaster", + 'DB_EXCLUSIONS' => "输入完整数据库名称,每行一个。要排除所有数据库请使用 *", + 'CRON_EXCLUSIONS' => "要排除所有任务请使用 *", + 'USER_EXCLUSIONS' => "输入目录名称,每行一个。要排除所有目录请使用 *", - 'Welcome to Vesta Control Panel' => '欢迎来到Vesta管理面板', - 'MAIL_FROM' => 'Vesta管理面板 ', + 'Welcome to Vesta Control Panel' => '欢迎来到 Vesta 管理系统', + 'MAIL_FROM' => 'Vesta 管理系统 ', 'GREETINGS_GORDON_FREEMAN' => "您好, %s %s,\n", 'GREETINGS' => "您好,\n", - 'ACCOUNT_READY' => "您的帐户已创建可以使用.\n\nhttps://%s/login/\n用户名: %s\n密码: %s\n\n", + 'ACCOUNT_READY' => "您的账户已创建成功,并可以开始使用了!\n\nhttps://%s/login/\n用户名称: %s\n密码: %s\n\n--\nVesta Control Panel\n", - 'FTP login credentials' => 'FTP登录资料', - 'FTP_ACCOUNT_READY' => "FTP帐户已创建可以使用.\n\n主机名: %s\n用户名: %s_%s\n密码: %s\n\n", + 'FTP login credentials' => 'FTP 登录信息', + 'FTP_ACCOUNT_READY' => "FTP账户已创建成功,并可以开始使用了!\n\n主机名称: %s\n用户名称: %s_%s\n密码: %s\n\n--\nVesta Control Panel\n", - 'Database Credentials' => '数据库账户资料', - 'DATABASE_READY' => "数据库已创建成功.\n\n数据库名: %s\n用户: %s\n密码: %s\n%s\n\n", + 'Database Credentials' => "数据库登录信息", + 'DATABASE_READY' => "数据库已添加成功!\n\n数据库名称: %s\n用户名称: %s\n密码: %s\n%s\n\n--\nVesta Control Panel\n", 'forgot password' => '忘记密码', 'Confirm' => '确认', @@ -470,177 +470,177 @@ $LANG['cn'] = array( 'RESET_NOTICE' => '', 'RESET_CODE_SENT' => '密码重置代码已发送到您的邮箱
', 'MAIL_RESET_SUBJECT' => '密码重置在 %s', - 'PASSWORD_RESET_REQUEST' => "重置面板密码请点击链接:\nhttps://%s/reset/?action=confirm&user=%s&code=%s\n\n或者您可以到 https://%s/reset/?action=code&user=%s 输入重置验证代码:\n%s\n\n如果您没有要求重设密码,请忽略此消息.", + 'PASSWORD_RESET_REQUEST' => '重置密码请点击链接:\nhttps://%s/reset/?action=confirm&user=%s&code=%s\n\n或者您可以到 https://%s/reset/?action=code&user=%s 输入密码重置代码:\n%s\n\n如果您没有要求重置密码,请忽略此邮件\n\n--\nVesta Control Panel\n', - 'Jan' => 'Jan', - 'Feb' => 'Feb', - 'Mar' => 'Mar', - 'Apr' => 'Apr', - 'May' => 'May', - 'Jun' => 'Jun', - 'Jul' => 'Jul', - 'Aug' => 'Aug', - 'Sep' => 'Sep', - 'Oct' => 'Oct', - 'Nov' => 'Nov', - 'Dec' => 'Dec', + 'Jan' => '01月', + 'Feb' => '02月', + 'Mar' => '03月', + 'Apr' => '04月', + 'May' => '05月', + 'Jun' => '06月', + 'Jul' => '07月', + 'Aug' => '08月', + 'Sep' => '09月', + 'Oct' => '10月', + 'Nov' => '11月', + 'Dec' => '12月', - 'Configuring Server' => 'Configuring Server', - 'Hostname' => 'Hostname', - 'Time Zone' => 'Time Zone', - 'Default Language' => 'Default Language', - 'FileSystem Disk Quota' => 'FileSystem Disk Quota', - 'Vesta Control Panel Plugins' => 'Vesta Control Panel Plugins', - 'preview' => 'preview', - 'Reseller Role' => 'Reseller Role', - 'Web Config Editor' => 'Web Config Editor', - 'Template Manager' => 'Template Manager', - 'Backup Migration Manager' => 'Backup Migration Manager', - 'FileManager' => 'FileManager', - 'show: CPU / MEM / NET / DISK' => 'show: CPU / MEM / NET / DISK', + 'Configuring Server' => '配置服务器', + 'Hostname' => '主机名称', + 'Time Zone' => '时区', + 'Default Language' => '默认语言', + 'FileSystem Disk Quota' => '文件系统磁盘配额', + 'Vesta Control Panel Plugins' => 'Vesta 管理系统的插件', + 'preview' => '预览', + 'Reseller Role' => '作为经销商', + 'Web Config Editor' => '网络配置编辑器', + 'Template Manager' => '模板管理', + 'Backup Migration Manager' => '备份迁移管理', + 'FileManager' => '文件管理', + 'show: CPU / MEM / NET / DISK' => '显示: CPU / MEM / NET / DISK', - 'sort by' => 'sort by', - 'Date' => 'Date', - 'Starred' => 'Starred', - 'Name' => 'Name', + 'sort by' => '排序方式', + 'Date' => '日期', + 'Starred' => '星标', + 'Name' => '名称', - 'File Manager' => 'File Manager', - 'type' => 'type', - 'size' => 'size', - 'date' => 'date', - 'name' => 'name', - 'Initializing' => 'Initializing', - 'UPLOAD' => 'UPLOAD', - 'NEW FILE' => 'NEW FILE', - 'NEW DIR' => 'NEW DIR', - 'DELETE' => 'DELETE', - 'RENAME' => 'RENAME', - 'RIGHTS' => 'RIGHTS', - 'COPY' => 'COPY', - 'ARCHIVE' => 'ARCHIVE', - 'EXTRACT' => 'EXTRACT', - 'DOWNLOAD' => 'DOWNLOAD', - 'Hit' => 'Hit', - 'to reload the page' => 'to reload the page', - 'Directory name cannot be empty' => 'Directory name cannot be empty', - 'File name cannot be empty' => 'File name cannot be empty', - 'No file selected' => 'No file selected', - 'No file or folder selected' => 'No file or folder selected', - 'File type not supported' => 'File type not supported', - 'Directory download not available in current version' => 'Directory download not available in current version', - 'Directory not available' => 'Directory not available', - 'Done' => 'Done', - 'Close' => 'Close', - 'Copy' => 'Copy', - 'Cancel' => 'Cancel', - 'Rename' => 'Rename', - 'Change Rights' => 'Change Rights', - 'Delete' => 'Delete', - 'Extract' => 'Extract', - 'Create' => 'Create', - 'Compress' => 'Compress', + 'File Manager' => '文件管理', + 'type' => '类型', + 'size' => '大小', + 'date' => '日期', + 'name' => '名称', + 'Initializing' => '初始化中', + 'UPLOAD' => '上传', + 'NEW FILE' => '新建文件', + 'NEW DIR' => '新建目录', + 'DELETE' => '删除', + 'RENAME' => '重命名', + 'RIGHTS' => '权限', + 'COPY' => '复制', + 'ARCHIVE' => '存档', + 'EXTRACT' => '提取', + 'DOWNLOAD' => '下载', + 'Hit' => '再次按下', + 'to reload the page' => '键则刷新此页面', + 'Directory name cannot be empty' => '目录名称不能为空', + 'File name cannot be empty' => '文件名称不能为空', + 'No file selected' => '没有文件被选中', + 'No file or folder selected' => '没有文件或目录被选中', + 'File type not supported' => '不支持的文件类型', + 'Directory download not available in current version' => '目录下载在当前版本中不可用', + 'Directory not available' => '目录不可用', + 'Done' => '完成', + 'Close' => '关闭', + 'Copy' => '复制', + 'Cancel' => '取消', + 'Rename' => '重命名', + 'Change Rights' => '变更权限', + 'Delete' => '删除', + 'Extract' => '提取', + 'Create' => '创建', + 'Compress' => '压缩', 'OK' => 'OK', - 'Are you sure you want to copy' => 'Are you sure you want to copy', - 'Are you sure you want to delete' => 'Are you sure you want to delete', - 'into' => 'into', - 'existing files will be replaced' => 'existing files will be replaced', - 'Original name' => 'Original name', - 'File' => 'File', - 'already exists' => 'already exists', - 'Create file' => 'Create file', - 'Create directory' => 'Create directory', - 'read by owner' => 'read by owner', - 'write by owner' => 'write by owner', - 'execute/search by owner' => 'execute/search by owner', - 'read by group' => 'read by group', - 'write by group' => 'write by group', - 'execute/search by group' => 'execute/search by group', - 'read by others' => 'read by others', - 'write by others' => 'write by others', - 'execute/search by others' => 'execute/search by others', + 'Are you sure you want to copy' => '你确定要复制', + 'Are you sure you want to delete' => '你确定要删除', + 'into' => '到', + 'existing files will be replaced' => '现有文件将被替换', + 'Original name' => '原有名称', + 'File' => '文件', + 'already exists' => '已经存在', + 'Create file' => '创建文件', + 'Create directory' => '创建目录', + 'read by owner' => '拥有者可读', + 'write by owner' => '拥有者可写', + 'execute/search by owner' => '拥有者可执行', + 'read by group' => '组可读', + 'write by group' => '组可写', + 'execute/search by group' => '组可执行', + 'read by others' => '其他可读', + 'write by others' => '其他可写', + 'execute/search by others' => '其他可执行', - 'Add New object' => 'Add New object', - 'Save Form' => 'Save Form', - 'Cancel saving form' => 'Cancel saving form', - 'Go to USER list' => 'Go to USER list', - 'Go to WEB list' => 'Go to WEB list', - 'Go to DNS list' => 'Go to DNS list', - 'Go to MAIL list' => 'Go to MAIL list', - 'Go to DB list' => 'Go to DB list', - 'Go to CRON list' => 'Go to CRON list', - 'Go to BACKUP list' => 'Go to BACKUP list', - 'Focus on search' => 'Focus on search', - 'Display/Close shortcuts' => 'Display/Close shortcuts', - 'Move backward through top menu' => 'Move backward through top menu', - 'Move forward through top menu' => 'Move forward through top menu', - 'Enter focused element' => 'Enter focused element', - 'Move up through elements list' => 'Move up through elements list', - 'Move down through elements list' => 'Move down through elements list', + 'Add New object' => '添加新对象', + 'Save Form' => '保存表单', + 'Cancel saving form' => '取消保存表单', + 'Go to USER list' => '转到用户账户', + 'Go to WEB list' => '转到Web服务', + 'Go to DNS list' => '转到DNS服务', + 'Go to MAIL list' => '转到邮箱服务', + 'Go to DB list' => '转到数据库', + 'Go to CRON list' => '转到定时任务', + 'Go to BACKUP list' => '转到数据备份', + 'Focus on search' => '光标定位到搜索栏', + 'Display/Close shortcuts' => '显示 / 关闭 快捷键', + 'Move backward through top menu' => '在顶部菜单栏向前定位光标', + 'Move forward through top menu' => '在顶部菜单栏向后定位光标', + 'Enter focused element' => '转到被光标定位的菜单项', + 'Move up through elements list' => '在当前页列表内向上移动光标', + 'Move down through elements list' => '在当前页列表内向下移动光标', - 'Upload' => 'Upload', - 'New File' => 'New File', - 'New Folder' => 'New Folder', - 'Download' => 'Download', - 'Rename' => 'Rename', - 'Copy' => 'Copy', - 'Archive' => 'Archive', - 'Delete' => 'Delete', - 'Save File (in text editor)' => 'Save File (in text editor)', - 'Close Popup / Cancel' => 'Close Popup / Cancel', - 'Move Cursor Up' => 'Move Cursor Up', - 'Move Cursor Dow' => 'Move Cursor Dow', - 'Switch to Left Tab' => 'Switch to Left Tab', - 'Switch to Right Tab' => 'Switch to Right Tab', - 'Switch Tab' => 'Switch Tab', - 'Go to the Top of File List' => 'Go to the Top of File List', - 'Go to the Last File' => 'Go to the Last File', - 'Open File/Enter Directory' => 'Open File/Enter Directory', - 'Go to Parent Directory' => 'Go to Parent Directory', - 'Select Current File' => 'Select Current File', - 'Select Bunch of Files' => 'Select Bunch of Files', - 'Append File to the Current Selection' => 'Append File to the Current Selection', - 'Select All Files' => 'Select All Files', + 'Upload' => '上传', + 'New File' => '新建文件', + 'New Folder' => '新建目录', + 'Download' => '下载', + 'Rename' => '重命名', + 'Copy' => '复制', + 'Archive' => '存档', + 'Delete' => '删除', + 'Save File (in text editor)' => '保存文件 (在文本编辑器内)', + 'Close Popup / Cancel' => '关闭弹窗 / 取消', + 'Move Cursor Up' => '上移光标', + 'Move Cursor Down' => '下移光标', + 'Switch to Left Tab' => '切换到左标签', + 'Switch to Right Tab' => '切换到右标签', + 'Switch Tab' => '切换标签', + 'Go to the Top of the File List' => '转至文件列表顶部', + 'Go to the Last File' => '转至最后一个文件', + 'Open File / Enter Directory' => '打开文件 / 进入目录', + 'Go to Parent Directory' => '转至父目录', + 'Select Current File' => '选中当前文件', + 'Select Bunch of Files' => '选择多个文件', + 'Add File to the Current Selection' => '将文件添加到当前选中区内', + 'Select All Files' => '选择所有文件', 'shortcuts are inspired by magnificent GNU Midnight Commander file manager' => - 'shortcuts are inspired by magnificent GNU Midnight Commander file manager', + '快捷键的灵感来自旖旎的 GNU Midnight Commander 文件管理器', - 'Licence Key' => 'Licence Key', - 'Enter License Key' => 'Enter License Key', - 'Buy Licence' => 'Buy Licence', - 'Buy Lifetime License' => 'Buy Lifetime License', - 'Disable and Cancel Licence' => 'Disable and Cancel Licence', - 'Licence Activated' => 'Licence Activated', - 'Licence Deactivated' => 'Licence Deactivated', - 'Restrict users so that they cannot use SSH and access only their home directory.' => 'Restrict users so that they cannot use SSH and access only their home directory.', - 'Browse, copy, edit, view, and retrieve all of your web domain files using fully featured File Manager.' => 'Browse, copy, edit, view, and retrieve all of your web domain files using fully featured File Manager.', - 'This is a commercial module, you would need to purchace license key to enable it.' => 'This is a commercial module, you would need to purchace license key to enable it.', + 'Licence Key' => '许可密匙', + 'Enter License Key' => '输入许可密匙', + 'Buy Licence' => '购买许可', + 'Buy Lifetime License' => '购买终身许可', + 'Disable and Cancel Licence' => '停用并取消许可', + 'Licence Activated' => '许可已激活', + 'Licence Deactivated' => '许可已停用', + 'Restrict users so that they cannot use SSH and access only their home directory.' => '限制用户,使他们不能使用 SSH 只能访问自己的主目录。', + 'Browse, copy, edit, view, and retrieve all of your web domain files using fully featured File Manager.' => '功能全面的文件管理器,浏览,复制,编辑,查看和检索你的 Web 文件。', + 'This is a commercial module, you would need to purchace license key to enable it.' => '这是商业模块,你需要购买许可密匙来启用它。', - 'Minutes' => 'Minutes', - 'Hourly' => 'Hourly', - 'Daily' => 'Daily', - 'Weekly' => 'Weekly', - 'Monthly' => 'Monthly', - 'Run Command' => 'Run Command', - 'every month' => 'every month', - 'every odd month' => 'every odd month', - 'every even month' => 'every even month', - 'every day' => 'every day', - 'every odd day' => 'every odd day', - 'every even day' => 'every even day', - 'weekdays (5 days)' => 'weekdays (5 days)', - 'weekend (2 days)' => 'weekend (2 days)', - 'Monday' => 'Monday', - 'Tuesday' => 'Tuesday', - 'Wednesday' => 'Wednesday', - 'Thursday' => 'Thursday', - 'Friday' => 'Friday', - 'Saturday' => 'Saturday', - 'Sunday' => 'Sunday', - 'every hour' => 'every hour', - 'every two hours' => 'every two hours', - 'every minute' => 'every minute', - 'every two minutes' => 'every two minutes', - 'every' => 'every', - 'Hour' => 'Hour', - 'Minute' => 'Minute' + 'Minutes' => '分钟', + 'Hourly' => '小时', + 'Daily' => '按天', + 'Weekly' => '按周', + 'Monthly' => '按月', + 'Run Command' => '运行指令于', + 'every month' => '每个月', + 'every odd month' => '每个奇数月', + 'every even month' => '每隔 2 月', + 'every day' => '每日', + 'every odd day' => '每个奇数日', + 'every even day' => '每隔 2 日', + 'weekdays (5 days)' => '工作日 (5天)', + 'weekend (2 days)' => '双休日 (2天)', + 'Monday' => '周一 ', + 'Tuesday' => '周二 ', + 'Wednesday' => '周三 ', + 'Thursday' => '周四 ', + 'Friday' => '周五 ', + 'Saturday' => '周六 ', + 'Sunday' => '周日 ', + 'every hour' => '每小时', + 'every two hours' => '每隔 2 小时', + 'every minute' => '每分钟', + 'every two minutes' => '每隔 2 分钟', + 'every' => '每隔', + 'Hour' => '小时', + 'Minute' => '分钟' ); From de44c2baafa240a6e33a80400fa954f75e53f972 Mon Sep 17 00:00:00 2001 From: danjol Date: Wed, 6 Jul 2016 22:11:25 +0200 Subject: [PATCH 011/104] Update nl.php Currently translating the rest of the text :) --- web/inc/i18n/nl.php | 76 ++++++++++++++++++++++----------------------- 1 file changed, 38 insertions(+), 38 deletions(-) diff --git a/web/inc/i18n/nl.php b/web/inc/i18n/nl.php index 5eff2d3e..cdba3a5d 100644 --- a/web/inc/i18n/nl.php +++ b/web/inc/i18n/nl.php @@ -241,13 +241,13 @@ $LANG['nl'] = array( 'Users' => 'Gebruikers', 'Load Average' => 'Gemiddelde Belasting', 'Memory Usage' => 'Geheugengebruik', - 'APACHE2 Usage' => 'APACHE2 Usage', + 'APACHE2 Usage' => 'APACHE2 Gebruik', 'HTTPD Usage' => 'HTTPD Gebruik', 'NGINX Usage' => 'NGINX Gebruik', 'MySQL Usage on localhost' => 'MySQL Gebruik op localhost', 'PostgreSQL Usage on localhost' => 'PostgreSQL Gebruik op localhost', 'Bandwidth Usage eth0' => 'Bandbreedtegebruik eth0', - 'Exim Usage' => 'Exim Usage', + 'Exim Usage' => 'Exim Gebruik', 'FTP Usage' => 'FTP Gebruik', 'SSH Usage' => 'SSH Gebruik', 'reverse proxy' => 'reverse proxy', @@ -365,10 +365,10 @@ $LANG['nl'] = array( 'ftp user password' => 'FTP gebruikerswachtwoord', 'ftp user' => 'FTP gebruiker', 'Last 70 lines of %s.%s.log' => 'Laatste 70 lijnen van %s.%s.log', - 'AccessLog' => 'AccessLog', - 'ErrorLog' => 'ErrorLog', - 'Download AccessLog' => 'Download Access Log', - 'Download ErrorLog' => 'Download Error Log', + 'AccessLog' => 'ToegangLog', + 'ErrorLog' => 'FoutenLog', + 'Download AccessLog' => 'Download Toegang Log', + 'Download ErrorLog' => 'Download Fout Log', 'Country' => 'Land', '2 letter code' => '2 letterige landcode', 'State / Province' => 'Staat / Provincie', @@ -389,19 +389,19 @@ $LANG['nl'] = array( 'SSH' => 'SSH', 'FTP' => 'FTP', 'VESTA' => 'VESTA', - 'Add one more Name Server' => 'Add one more Name Server', + 'Add one more Name Server' => 'Voeg nog een Name Server toe', - 'web domain' => 'web domain', - 'dns domain' => 'dns domain', + 'web domain' => 'web domein', + 'dns domain' => 'dns domein', 'dns record' => 'dns record', - 'mail domain' => 'mail domain', + 'mail domain' => 'mail domein', 'mail account' => 'mail account', 'cron job' => 'cron job', 'cron' => 'cron', 'user dir' => 'user dir', - 'unlimited' => 'unlimited', + 'unlimited' => 'oneindig', '1 account' => '1 account', '%s accounts' => '%s accounts', '1 domain' => '1 domein', @@ -539,14 +539,14 @@ $LANG['nl'] = array( 'Nov' => 'Nov', 'Dec' => 'Dec', - 'Configuring Server' => 'Configuring Server', + 'Configuring Server' => 'Server Instellen', 'Hostname' => 'Hostname', - 'Time Zone' => 'Time Zone', - 'Default Language' => 'Default Language', + 'Time Zone' => 'Tijdzone', + 'Default Language' => 'Standaard Taal', 'Proxy Server' => 'Proxy Server', 'Web Server' => 'Web Server', 'Backend Server' => 'Backend Server', - 'Backend Pool Mode' => 'Backend Pool Mode', + 'Backend Pool Mode' => 'Backend Pool Stand', 'DNS Server' => 'DNS Server', 'DNS Cluster' => 'DNS Cluster', 'MAIL Server' => 'MAIL Server', @@ -559,19 +559,19 @@ $LANG['nl'] = array( 'phpPgAdmin URL' => 'phpPgAdmin URL', 'Maximum Number Of Databases' => 'Maximum Number Of Databases', 'Current Number Of Databases' => 'Current Number Of Databases', - 'Local backup' => 'Local backup', + 'Local backup' => 'Lokale backup', 'Compression level' => 'Compression level', 'Directory' => 'Directory', - 'Remote backup' => 'Remote backup', + 'Remote backup' => 'Afstand backup', 'ftp' => 'FTP', 'sftp' => 'SFTP', 'SFTP Chroot' => 'SFTP Chroot', - 'FileSystem Disk Quota' => 'FileSystem Disk Quota', + 'FileSystem Disk Quota' => 'BestandenSystem Schijf Quotum', 'Vesta Control Panel Plugins' => 'Vesta Control Panel Plugins', - 'preview' => 'preview', + 'preview' => 'Voorbeeld', 'Reseller Role' => 'Reseller Role', - 'Web Config Editor' => 'Web Config Editor', - 'Template Manager' => 'Template Manager', + 'Web Config Editor' => 'Web Configuratie Bewerker', + 'Template Manager' => 'Voorbeeld Manager', 'Backup Migration Manager' => 'Backup Migration Manager', 'FileManager' => 'FileManager', 'show: CPU / MEM / NET / DISK' => 'show: CPU / MEM / NET / DISK', @@ -694,10 +694,10 @@ $LANG['nl'] = array( 'Browse, copy, edit, view, and retrieve all of your web domain files using fully featured File Manager.' => 'Browse, copy, edit, view, and retrieve all of your web domain files using fully featured File Manager.', 'This is a commercial module, you would need to purchace license key to enable it.' => 'This is a commercial module, you would need to purchace license key to enable it.', - 'Minutes' => 'Minutes', - 'Hourly' => 'Hourly', - 'Run Command' => 'Run Command', - 'every month' => 'every month', + 'Minutes' => 'Minuten', + 'Hourly' => 'Ieder Uur', + 'Run Command' => 'Voer commando uit', + 'every month' => 'elke maand', 'every odd month' => 'every odd month', 'every even month' => 'every even month', 'every day' => 'every day', @@ -705,19 +705,19 @@ $LANG['nl'] = array( 'every even day' => 'every even day', 'weekdays (5 days)' => 'weekdays (5 days)', 'weekend (2 days)' => 'weekend (2 days)', - 'Monday' => 'Monday', - 'Tuesday' => 'Tuesday', - 'Wednesday' => 'Wednesday', - 'Thursday' => 'Thursday', - 'Friday' => 'Friday', - 'Saturday' => 'Saturday', - 'Sunday' => 'Sunday', - 'every hour' => 'every hour', - 'every two hours' => 'every two hours', - 'every minute' => 'every minute', - 'every two minutes' => 'every two minutes', - 'every' => 'every', - 'Generate' => 'Generate', + 'Monday' => 'Maandag', + 'Tuesday' => 'Dinsdag', + 'Wednesday' => 'Woensdag', + 'Thursday' => 'Donderdag', + 'Friday' => 'Vrijdag', + 'Saturday' => 'Zaterdag', + 'Sunday' => 'Zondag', + 'every hour' => 'elk uur', + 'every two hours' => 'elke twee uur', + 'every minute' => 'elke minuut', + 'every two minutes' => 'elke twee minuten', + 'every' => 'alle', + 'Generate' => 'Genereer', 'webalizer' => 'webalizer', 'awstats' => 'awstats', From 755cab11db7823fed0fe3cd43caa060e64ebb3ae Mon Sep 17 00:00:00 2001 From: Flat Date: Thu, 7 Jul 2016 07:19:41 +0900 Subject: [PATCH 012/104] Remove unnecessary quotes --- web/templates/admin/list_search.html | 2 +- web/templates/admin/list_user.html | 2 +- web/templates/user/list_search.html | 2 +- web/templates/user/list_user.html | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/web/templates/admin/list_search.html b/web/templates/admin/list_search.html index a9e28944..888a069c 100644 --- a/web/templates/admin/list_search.html +++ b/web/templates/admin/list_search.html @@ -75,7 +75,7 @@ -
 L
+
 L
diff --git a/web/templates/admin/list_user.html b/web/templates/admin/list_user.html index d52d80986..0cfa18d6 100644 --- a/web/templates/admin/list_user.html +++ b/web/templates/admin/list_user.html @@ -95,7 +95,7 @@ sort-bandwidth="" sort-disk=" -
 L
+
 L
 ↵
diff --git a/web/templates/user/list_search.html b/web/templates/user/list_search.html index d8c677fe..4aae3494 100644 --- a/web/templates/user/list_search.html +++ b/web/templates/user/list_search.html @@ -74,7 +74,7 @@ -
 L
+
 L
diff --git a/web/templates/user/list_user.html b/web/templates/user/list_user.html index 3087bc65..0d464750 100644 --- a/web/templates/user/list_user.html +++ b/web/templates/user/list_user.html @@ -93,7 +93,7 @@ sort-disk="" sort-star=" -
 L
+
 L
 ↵
From ce821b1177a2767511eb59add8249346b94072f4 Mon Sep 17 00:00:00 2001 From: Clark Chen Date: Wed, 6 Jul 2016 18:52:16 -0400 Subject: [PATCH 013/104] Update tw.php --- web/inc/i18n/tw.php | 256 +++++++++++++++----------------------------- 1 file changed, 87 insertions(+), 169 deletions(-) diff --git a/web/inc/i18n/tw.php b/web/inc/i18n/tw.php index 405b6f61..1c5ca69f 100644 --- a/web/inc/i18n/tw.php +++ b/web/inc/i18n/tw.php @@ -5,7 +5,6 @@ * Clark's Computer Knowledge Journal (https://www.clark-chen.com) * Clark's Hosting Service (https://host.clark-chen.com) * Clark Chen (clark@clark-chen.com) - * Github - https://github.com/ttcttctw/Vesta-Control-Panel-Traditional-Chinese-Translation/blob/master/tw.php */ $LANG['tw'] = array( 'Packages' => '方案設定', @@ -13,13 +12,12 @@ $LANG['tw'] = array( 'Graphs' => '資源使用圖表', 'Statistics' => '統計資料', 'Log' => '系統紀錄', - 'Server' => '伺服器', 'Services' => '服務', 'Firewall' => '防火牆', + 'Server' => '伺服器', 'Updates' => '系統更新', 'Log in' => '登入', 'Log out' => '登出', - 'USER' => '使用者管理', 'WEB' => '網站管理', 'DNS' => 'DNS管理', @@ -27,22 +25,6 @@ $LANG['tw'] = array( 'DB' => '資料庫', 'CRON' => '任務排程', 'BACKUP' => '備份', - - 'LOGIN' => 'LOGIN', - 'RESET PASSWORD' => 'RESET PASSWORD', - 'SEARCH' => 'SEARCH', - 'PACKAGE' => 'PACKAGE', - 'RRD' => 'RRD', - 'STATS' => 'STATS', - 'LOG' => 'LOG', - 'UPDATES' => 'UPDATES', - 'FIREWALL' => 'FIREWALL', - 'SERVER' => 'SERVER', - 'MEMORY' => '記憶體', - 'DISK' => '磁碟', - 'NETWORK' => '網路', - 'Web Log Manager' => 'Web Log Manager', - 'Add User' => '新增使用者', 'Add Domain' => '新增網域', 'Add Web Domain' => '新增網站網域', @@ -70,7 +52,6 @@ $LANG['tw'] = array( 'Back' => '返回', 'Save' => '儲存', 'Submit' => '送出', - 'toggle all' => '批次執行', 'apply to selected' => '套用到所有已選擇的', 'rebuild' => '重建', @@ -110,7 +91,6 @@ $LANG['tw'] = array( 'disable autoupdate' => '停用自動更新', 'turn on notifications' => '啟用通知', 'turn off notifications' => '停用通知', - 'Adding User' => '新增使用者', 'Editing User' => '編輯使用者', 'Adding Domain' => '新增網域', @@ -138,7 +118,6 @@ $LANG['tw'] = array( 'Adding Firewall Rule' => '新增防火牆規則', 'Editing Firewall Rule' => '編輯防火牆規則', 'Adding IP Address to Banlist' => '新增IP至黑名單', - 'active' => '正常', 'spnd' => '封鎖', 'suspended' => '已封鎖', @@ -146,7 +125,6 @@ $LANG['tw'] = array( 'stopped' => '已停止', 'outdated' => '有新版本可升級', 'updated' => '已是最新版本', - 'yes' => '是', 'no' => '否', 'none' => '無', @@ -170,14 +148,12 @@ $LANG['tw'] = array( 'User Directories' => '使用者目錄', 'Template' => '模板', 'Web Template' => 'Apache模板', - 'Backend Template' => 'Backend Template', 'Proxy Template' => 'Nginx模板', 'DNS Template' => 'DNS模板', 'Web Domains' => '網站網域', 'SSL Domains' => 'SSL網域', - 'Web Aliases' => '網站次網域', + 'Web Aliases' => '網站子網域', 'per domain' => '(每網域)', - 'DNS Domains' => 'DNS網域', 'DNS domains' => 'DNS網域', 'DNS records' => 'DNS紀錄', 'Name Servers' => '域名服務器', @@ -185,7 +161,6 @@ $LANG['tw'] = array( 'Mail Accounts' => '信箱使用者', 'Cron Jobs' => '任務排程', 'SSH Access' => 'SSH權限', - 'IP Address' => 'IP Address', 'IP Addresses' => 'IP位置', 'Backups' => '備份', 'Backup System' => '備份系統', @@ -197,12 +172,10 @@ $LANG['tw'] = array( 'Proxy Extensions' => 'Nginx擴充', 'Web Statistics' => '網站統計', 'Additional FTP Account' => '其他FTP帳號', - 'Path' => '路徑', 'SOA' => 'SOA', 'TTL' => 'TTL', 'Expire' => '過期', 'Records' => '紀錄', - 'Serial' => 'Serial', 'Catchall email' => '收到所有郵件', 'AntiVirus Support' => '防毒支援', 'AntiSpam Support' => '防垃圾郵件支援', @@ -212,16 +185,6 @@ $LANG['tw'] = array( 'Autoreply' => '自動回覆', 'Forward to' => '轉寄到', 'Do not store forwarded mail' => '不保留已轉發的郵件', - 'IMAP hostname' => 'IMAP hostname', - 'IMAP port' => 'IMAP port', - 'IMAP security' => 'IMAP security', - 'IMAP auth method' => 'IMAP auth method', - 'SMTP hostname' => 'SMTP hostname', - 'SMTP port' => 'SMTP port', - 'SMTP security' => 'SMTP security', - 'SMTP auth method' => 'SMTP auth method', - 'STARTTLS' => 'STARTTLS', - 'Normal password' => 'Normal password', 'database' => '資料庫', 'User' => '使用者', 'Host' => '主機', @@ -243,15 +206,24 @@ $LANG['tw'] = array( 'Users' => '使用者', 'Load Average' => '平均負載量', 'Memory Usage' => '記憶體使用量', - 'APACHE2 Usage' => 'Apache2使用量', + 'Bandwidth Usage p2p1' => '流量使用量 (p2p1)', + 'Bandwidth Usage ppp0' => '流量使用量 (ppp0)', + 'Bandwidth Usage ppp1' => '流量使用量 (ppp1)', + 'Bandwidth Usage eth0' => '流量使用量 (eth0)', + 'Bandwidth Usage eth1' => '流量使用量 (eth1)', + 'Bandwidth Usage sit0' => '流量使用量 (sit0)', + 'Bandwidth Usage sit1' => '流量使用量 (sit1)', + 'Bandwidth Usage he-ipv6' => '流量使用量 (he-ipv6)', 'HTTPD Usage' => 'Apache使用量', + 'APACHE2 Usage' => 'Apache2使用量', 'NGINX Usage' => 'NGINX使用量', + 'Exim Usage' => 'Exim使用量', 'MySQL Usage on localhost' => 'MySQL使用量 (localhost)', 'PostgreSQL Usage on localhost' => 'PostgreSQL使用量 (localhost)', - 'Bandwidth Usage eth0' => '流量使用量 (eth0)', - 'Exim Usage' => 'Exim使用量', 'FTP Usage' => 'FTP使用量', 'SSH Usage' => 'SSH使用量', + 'ACCEPT' => '允許', + 'DROP' => '封鎖', 'reverse proxy' => '代理伺服器', 'web server' => '網站主機', 'dns server' => 'DNS主機', @@ -264,7 +236,11 @@ $LANG['tw'] = array( 'job scheduler' => '任務排程指令', 'firewall' => '防火牆', 'brute-force monitor' => '防止暴力破解', + 'LoadAverage' => '平均負載量', 'CPU' => '處理器負載', + 'MEMORY' => '記憶體', + 'DISK' => '磁碟', + 'NETWORK' => '網路', 'Memory' => '記憶體', 'Uptime' => '已啟動時間', 'core package' => '核心系統', @@ -274,6 +250,7 @@ $LANG['tw'] = array( 'Release' => '發佈號碼', 'Architecture' => '架構', 'Object' => 'Object', + 'Owner' => '擁有者', 'Username' => '使用者名稱', 'Password' => '密碼', 'Email' => '電子信箱', @@ -288,7 +265,7 @@ $LANG['tw'] = array( 'DNS Support' => 'DNS支援', 'Mail Support' => '信箱支援', 'Advanced options' => '進階選項', - 'Aliases' => '次網域', + 'Aliases' => '子網域', 'SSL Certificate' => 'SSL憑證', 'SSL Key' => 'SSL密鑰', 'SSL Certificate Authority / Intermediate' => 'SSL中繼憑證', @@ -299,6 +276,7 @@ $LANG['tw'] = array( 'Statistics Auth' => '統計驗證', 'Account' => '帳號', 'Prefix will be automaticaly added to username' => '前綴 %s 將會自動加到使用者名稱', + 'Path' => '路徑', 'Send FTP credentials to email' => '將FTP登入資料傳送到使用者信箱', 'Expiration Date' => '到期日期', 'YYYY-MM-DD' => 'YYYY-MM-DD', @@ -318,15 +296,16 @@ $LANG['tw'] = array( 'Command' => '指令', 'Package Name' => '方案名稱', 'Netmask' => '子網路遮罩', - 'Interface' => '端口', + 'Interface' => '介面卡', 'Shared' => '共享', 'Assigned user' => '指定使用者', 'Assigned domain' => '指定網址', 'NAT IP association' => 'NAT IP連結', 'shell' => 'shell', 'web domains' => '網站網域', - 'web aliases' => '網站次網域', + 'web aliases' => '網站子網域', 'dns records' => 'DNS記錄', + 'DNS Domains' => 'DNS網域', 'mail domains' => '信箱網域', 'mail accounts' => '信箱帳號', 'accounts' => '帳號', @@ -338,7 +317,7 @@ $LANG['tw'] = array( 'cmd' => '指令', 'users' => '使用者', 'domains' => '網域', - 'aliases' => '次網域', + 'aliases' => '子網域', 'records' => '記錄', 'jobs' => '任務', 'username' => '使用者名稱', @@ -350,7 +329,7 @@ $LANG['tw'] = array( 'ip address' => 'IP位置', 'IP address' => 'IP位置', 'netmask' => '子網路遮罩', - 'interface' => '端口', + 'interface' => '介面卡', 'assigned user' => '指定使用者', 'ns1' => 'ns1', 'ns2' => 'ns2', @@ -377,33 +356,29 @@ $LANG['tw'] = array( 'City / Locality' => '市 / 地區', 'Organization' => '組織名稱', 'Action' => '動作', - 'Protocol' => '協議', - 'Port' => '端口', + 'Protocol' => '協定', + 'Port' => '連線埠', + 'Proxy Server' => '代理伺服器', + 'Web Server' => '網頁伺服器', + 'DNS Server' => 'DNS伺服器', + 'MAIL Server' => '郵件伺服器', + 'Antivirus' => '防毒系統', + 'AntiSpam' => '防垃圾郵件', + 'Webmail URL' => '網路信箱網址', + 'MySQL Support' => 'MySQL支援', + 'phpMyAdmin URL' => 'phpMyAdmin網址', + 'Maximum Number Of Databases' => '資料庫最高可使用數量', + 'Current Number Of Databases' => '資料庫目前已使用數量', + 'PostgreSQL Support' => 'PostgreSQL支援', + 'Local backup' => '本機備份', + 'Compression level' => '壓縮程度', + 'Directory' => '路徑', + 'Remote backup' => '異地備份', 'Comment' => '備註', 'Banlist' => '黑名單', 'ranges are acceptable' => '可使用範圍(例如:21-22)', 'CIDR format is supported' => '支援CIDR格式', - 'ACCEPT' => '允許', - 'DROP' => '封鎖', - 'TCP' => 'TCP', - 'UDP' => 'UDP', - 'ICMP' => 'ICMP', - 'SSH' => 'SSH', - 'FTP' => 'FTP', - 'VESTA' => 'VESTA', 'Add one more Name Server' => '新增域名服務器', - - 'web domain' => 'web domain', - 'dns domain' => 'dns domain', - 'dns record' => 'dns record', - 'mail domain' => 'mail domain', - 'mail account' => 'mail account', - 'cron job' => 'cron job', - - 'cron' => 'cron', - 'user dir' => 'user dir', - - 'unlimited' => 'unlimited', '1 account' => '1 帳號', '%s accounts' => '%s 帳號', '1 domain' => '1 網域', @@ -418,8 +393,6 @@ $LANG['tw'] = array( '%s cron jobs' => '%s 任務排程', '1 archive' => '1 壓縮', '%s archives' => '%s 壓縮', - '1 item' => '1 item', - '%s items' => '%s items', '1 package' => '1 方案', '%s packages' => '%s 方案', '1 IP address' => '1 IP位置', @@ -434,7 +407,6 @@ $LANG['tw'] = array( '1 rule' => '1 規則', '%s rules' => '%s 規則', 'There are no currently banned IP' => '目前沒有任何已封鎖的IP', - 'USER_CREATED_OK' => '使用者 %s has been 已加入成功!', 'WEB_DOMAIN_CREATED_OK' => '網域 %s 已加入成功!', 'DNS_DOMAIN_CREATED_OK' => 'DNS網域 %s 已加入成功!', @@ -447,7 +419,6 @@ $LANG['tw'] = array( 'PACKAGE_CREATED_OK' => '方案 %s 已加入成功!', 'SSL_GENERATED_OK' => 'SSL憑證 已加入成功!', 'RULE_CREATED_OK' => 'Rule 已加入成功!', - 'BANLIST_CREATED_OK' => 'IP address has been banned successfully', // I'm not sure about this text 'Autoupdate has been successfully enabled' => '自動更新已成功啟動', 'Autoupdate has been successfully disabled' => '自動更新已成功關閉', 'Cronjob email reporting has been successfully enabled' => '任務排程 電子郵件回報已成功啟動', @@ -479,7 +450,6 @@ $LANG['tw'] = array( 'DELETE_RULE_CONFIRMATION' => '確定要刪除規則 #%s 嗎?', 'SUSPEND_RULE_CONFIRMATION' => '確定要封鎖規則 #%s 嗎?', 'UNSUSPEND_RULE_CONFIRMATION' => '確定要解除封鎖規則 #%s 嗎?', - 'LEAVE_PAGE_CONFIRMATION' => 'Leave Page?', 'RESTART_CONFIRMATION' => '確定要重新啟動 %s 嗎?', 'Welcome' => '歡迎', 'LOGGED_IN_AS' => '以使用者身份 %s 登入', @@ -497,37 +467,53 @@ $LANG['tw'] = array( 'BACKUP_EXISTS' => '已經有一個備份正在執行中,請等待備份完成後在操作', 'RESTORE_SCHEDULED' => '您的要求已加入隊列中,回復完成後會再以電子郵件通知您', 'RESTORE_EXISTS' => '已經有一個回復正在執行中,請等待備份完成後在操作', - - 'WEB_EXCLUSIONS' => '輸入網域名稱,每行一個網域。如要排除備份所有網域請使用*。排除特定的資料夾請依照這個格式: Example.com:public_html/cache:public_html/tmp', - 'DNS_EXCLUSIONS' => '輸入網域名稱,每行一個網域。如要排除備份所有網域請使用*', - 'MAIL_EXCLUSIONS' => '輸入網域名稱,每行一個網域。如要排除備份所有網域請使用*。要排除特定使用者請依照這個格式: Example.com:info:support:postmaster', - 'DB_EXCLUSIONS' => '輸入完整資料庫名城,每行一個資料庫。如要排除備份所有資料庫請使用*', - 'CRON_EXCLUSIONS' => '要排除備份所有任務排程請使用*', - 'USER_EXCLUSIONS' => '輸入要排除備份的資料夾名稱,每行一個資料夾。如要排除備份所有資料夾請使用*', - + 'WEB_EXCLUSIONS' => "輸入網域名稱,每行一個網域。如要排除備份所有網域請使用*。排除特定的資料夾請依照這個格式: Example.com:public_html/cache:public_html/tmp", + 'DNS_EXCLUSIONS' => "輸入網域名稱,每行一個網域。如要排除備份所有網域請使用*", + 'MAIL_EXCLUSIONS' => "輸入網域名稱,每行一個網域。如要排除備份所有網域請使用*。要排除特定使用者請依照這個格式: Example.com:info:support:postmaster", + 'DB_EXCLUSIONS' => "輸入完整資料庫名城,每行一個資料庫。如要排除備份所有資料庫請使用*", + 'CRON_EXCLUSIONS' => "要排除備份所有任務排程請使用*", + 'USER_EXCLUSIONS' => "輸入要排除備份的資料夾名稱,每行一個資料夾。如要排除備份所有資料夾請使用*", 'Welcome to Vesta Control Panel' => '歡迎來到 Vesta 管理系統', 'MAIL_FROM' => 'Vesta 管理系統 ', 'GREETINGS_GORDON_FREEMAN' => "您好, %s %s,\n", 'GREETINGS' => "您好,\n", 'ACCOUNT_READY' => "您的帳號已成功建立,並可以開始使用了!\n\nhttps://%s/login/\n使用者名稱: %s\n密碼: %s\n\n--\nVesta Control Panel\n", - 'FTP login credentials' => 'FTP 登入資料', 'FTP_ACCOUNT_READY' => "FTP帳號已成功建立,並可以開始使用了!\n\n主機名稱: %s\n使用者名稱: %s_%s\n密碼: %s\n\n--\nVesta Control Panel\n", - - 'Database Credentials' => '資料庫 登入資料', + 'Database Credentials' => "資料庫 登入資料", 'DATABASE_READY' => "資料庫已加入成功!\n\n資料庫名稱: %s\n使用者名稱: %s\n密碼: %s\n%s\n\n--\nVesta Control Panel\n", - 'forgot password' => '忘記密碼', 'Confirm' => '確認', 'New Password' => '新密碼', 'Confirm Password' => '確認密碼', 'Reset' => '重設', 'Reset Code' => '重設代碼', - 'RESET_NOTICE' => '', // should we add something here? + 'RESET_NOTICE' => '', 'RESET_CODE_SENT' => '密買重設代碼已發送到您的信箱
', 'MAIL_RESET_SUBJECT' => '密碼重置在 %s', - 'PASSWORD_RESET_REQUEST' => "重置密碼請點擊連結:\nhttps://%s/reset/?action=confirm&user=%s&code=%s\n\n或者您可以到 https://%s/reset/?action=code&user=%s 輸入密碼重設代碼:\n%s\n\n如果您沒有要求重設密碼,請忽略此郵件\n\n—\nVesta Control Panel\n", + 'Run Command' => '執行指令', + 'every month' => '每月', + 'every odd month' => '每個單數月', + 'every even month' => '每個偶數月', + 'every day' => '每天', + 'every odd day' => '每次單數日', + 'every even day' => '每次偶數日', + 'weekdays (5 days)' => '平常日 (五天)', + 'weekend (2 days)' => '週末 (兩天)', + 'Monday' => '星期一', + 'Tuesday' => '星期二', + 'Wednesday' => '星期三', + 'Thursday' => '星期四', + 'Friday' => '星期五', + 'Saturday' => '星期六', + 'Sunday' => '星期日', + 'every hour' => '每小時', + 'every two hours' => '每兩小時', + 'every minute' => '每分鐘', + 'every two minutes' => '每兩分鐘', + 'every' => '每', + 'PASSWORD_RESET_REQUEST' => "重置密碼請點擊連結:\nhttps://%s/reset/?action=confirm&user=%s&code=%s\n\n或者您可以到 https://%s/reset/?action=code&user=%s 輸入密碼重設代碼:\n%s\n\n如果您沒有要求重設密碼,請忽略此郵件\n\n—\nVesta Control Panel\n", 'Jan' => '1月', 'Feb' => '2月', 'Mar' => '3月', @@ -540,34 +526,10 @@ $LANG['tw'] = array( 'Oct' => '10月', 'Nov' => '11月', 'Dec' => '12月', - 'Configuring Server' => '配置主機', 'Hostname' => '主機名稱', 'Time Zone' => '時區', 'Default Language' => '預設語言', - 'Proxy Server' => '代理伺服器', - 'Web Server' => '網頁伺服器', - 'Backend Server' => 'Backend Server', - 'Backend Pool Mode' => 'Backend Pool Mode', - 'DNS Server' => 'DNS伺服器', - 'DNS Cluster' => 'DNS Cluster', - 'MAIL Server' => '郵件伺服器', - 'Antivirus' => '防毒系統', - 'AntiSpam' => '防垃圾郵件', - 'Webmail URL' => '網路信箱網址', - 'MySQL Support' => 'MySQL支援', - 'phpMyAdmin URL' => 'phpMyAdmin網址', - 'PostgreSQL Support' => 'PostgreSQL支援', - 'phpPgAdmin URL' => 'phpPgAdmin URL', - 'Maximum Number Of Databases' => '資料庫最高可使用數量', - 'Current Number Of Databases' => '資料庫目前已使用數量', - 'Local backup' => '本機備份', - 'Compression level' => '壓縮程度', - 'Directory' => '路徑', - 'Remote backup' => '異地備份', - 'ftp' => 'FTP', - 'sftp' => 'SFTP', - 'SFTP Chroot' => 'SFTP Chroot', 'FileSystem Disk Quota' => '檔案系統硬碟配額', 'Vesta Control Panel Plugins' => 'Vesta Control Panel 外掛', 'preview' => '預覽', @@ -577,29 +539,26 @@ $LANG['tw'] = array( 'Backup Migration Manager' => '備份轉移管理器', 'FileManager' => '檔案管理器', 'show: CPU / MEM / NET / DISK' => '顯示: 處理器 / 記憶體 / 網路 / 硬碟', - 'sort by' => '排序按照', 'Date' => '日期', 'Starred' => '加註星號', 'Name' => '名稱', - - 'File Manager' => '檔案管理器', + 'type' => '類型', 'size' => '大小', 'date' => '日期', 'name' => '名稱', 'Initializing' => '正在初始化', 'UPLOAD' => '上傳', + 'RIGHTS' => '權限', 'NEW FILE' => '新增檔案', 'NEW DIR' => '新增資料夾', 'DELETE' => '刪除', 'RENAME' => '重新命名', - 'RIGHTS' => '權限', 'COPY' => '複製', 'ARCHIVE' => '壓縮', 'EXTRACT' => '解壓縮', 'DOWNLOAD' => '下載', - 'Are you sure?' => 'Are you sure?', // unused? 'Hit' => 'Hit', 'to reload the page' => '重新整理頁面', 'Directory name cannot be empty' => '資料夾名稱不能為空白', @@ -614,16 +573,11 @@ $LANG['tw'] = array( 'Copy' => '複製', 'Cancel' => '取消', 'Rename' => '重新命名', - 'Change Rights' => '修改權限', 'Delete' => '刪除', 'Extract' => '解壓縮', 'Create' => '新增', 'Compress' => '壓縮', 'OK' => '確定', - 'YOU ARE COPYING' => 'YOU ARE COPYING', // unused? - 'YOU ARE REMOVING' => 'YOU ARE REMOVING', - 'Delete items' => 'Delete items', - 'Copy files' => 'Copy files', 'Are you sure you want to copy' => '確定要複製', 'Are you sure you want to delete' => '確定要刪除', 'into' => '資訊', @@ -633,6 +587,10 @@ $LANG['tw'] = array( 'already exists' => '已經存在', 'Create file' => '新增檔案', 'Create directory' => '新增資料夾', + 'Add New object' => '新增', + 'Save Form' => '儲存設定', + 'Cancel saving form' => '不要儲存設定', + 'Change Rights' => '修改權限', 'read by owner' => '擁有者可讀', 'write by owner' => '擁有者可寫', 'execute/search by owner' => '擁有者可執行', @@ -642,11 +600,6 @@ $LANG['tw'] = array( 'read by others' => '所有人可讀', 'write by others' => '所有人可寫', 'execute/search by others' => '所有人可執行', - - 'Shortcuts' => '快捷鍵', - 'Add New object' => '新增', - 'Save Form' => '儲存設定', - 'Cancel saving form' => '不要儲存設定', 'Go to USER list' => '回到使用者列表', 'Go to WEB list' => '回到網站列表', 'Go to DNS list' => '回到DNS列表', @@ -661,12 +614,15 @@ $LANG['tw'] = array( 'Enter focused element' => '進入選擇的選項', 'Move up through elements list' => '往上查看列表', 'Move down through elements list' => '往下查看列表', - 'Upload' => '上傳', 'New File' => '新增檔案', 'New Folder' => '新增資料夾', 'Download' => '下載', + 'Rename' => '重新命名', + 'Copy' => '複製', 'Archive' => '壓縮', + 'Delete' => '刪除', + 'Shortcuts' => '快捷鍵', 'Save File (in text editor)' => '儲存檔案 (在目前的文字編輯器)', 'Close Popup / Cancel' => '關閉快顯視窗 / 取消', 'Move Cursor Up' => '選項往上移', @@ -682,9 +638,9 @@ $LANG['tw'] = array( 'Select Bunch of Files' => '選取多個檔案', 'Add File to the Current Selection' => '增加檔案到已選取的列表', 'Select All Files' => '選取所有檔案', - 'shortcuts are inspired by magnificent GNU Midnight Commander file manager' => + 'shortcuts are inspired by magnificent GNU Midnight Commander file manager' => "快捷鍵是的想法是由 magnificent GNU Midnight Commander 檔案管理器 啟發的
繁體中文翻譯是由 Clark's 虛擬主機服務 總工程師 Clark Chen 提供。", - + 'Save' => '儲存', 'Licence Key' => '授權金鑰', 'Enter License Key' => '輸入授權金鑰', 'Buy Licence' => '購買授權', @@ -694,43 +650,5 @@ $LANG['tw'] = array( 'Licence Deactivated' => '授權已停用', 'Restrict users so that they cannot use SSH and access only their home directory.' => '禁止使用者使用SSH,並且只能存取他們自己的資料夾', 'Browse, copy, edit, view, and retrieve all of your web domain files using fully featured File Manager.' => '瀏覽、複製、編輯、存取你所有的網站資料使用全能的檔案管理器', - 'This is a commercial module, you would need to purchace license key to enable it.' => '這是一個付費模組,您需要購買授權金鑰才能啟動它。', - - 'Minutes' => 'Minutes', - 'Hourly' => 'Hourly', - 'Run Command' => 'Run Command', - 'every month' => 'every month', - 'every odd month' => 'every odd month', - 'every even month' => 'every even month', - 'every day' => 'every day', - 'every odd day' => 'every odd day', - 'every even day' => 'every even day', - 'weekdays (5 days)' => 'weekdays (5 days)', - 'weekend (2 days)' => 'weekend (2 days)', - 'Monday' => 'Monday', - 'Tuesday' => 'Tuesday', - 'Wednesday' => 'Wednesday', - 'Thursday' => 'Thursday', - 'Friday' => 'Friday', - 'Saturday' => 'Saturday', - 'Sunday' => 'Sunday', - 'every hour' => 'every hour', - 'every two hours' => 'every two hours', - 'every minute' => 'every minute', - 'every two minutes' => 'every two minutes', - 'every' => 'every', - 'Generate' => 'Generate', - - 'webalizer' => 'webalizer', - 'awstats' => 'awstats', - - -// Texts below doesn't exist in en.php - 'Bandwidth Usage p2p1' => '流量使用量 (p2p1)', - 'Bandwidth Usage ppp0' => '流量使用量 (ppp0)', - 'Bandwidth Usage ppp1' => '流量使用量 (ppp1)', - 'Bandwidth Usage eth1' => '流量使用量 (eth1)', - 'Bandwidth Usage sit0' => '流量使用量 (sit0)', - 'Bandwidth Usage sit1' => '流量使用量 (sit1)', - 'Bandwidth Usage he-ipv6' => '流量使用量 (he-ipv6)', + 'This is a commercial module, you would need to purchace license key to enable it.' => '這是一個付費模組,您需要購買授權金鑰才能啟動它。' ); From 497f388dcd0e6c7c634a8e512be1d049fc59c164 Mon Sep 17 00:00:00 2001 From: Flat Date: Thu, 7 Jul 2016 18:31:10 +0900 Subject: [PATCH 014/104] Use `white-space: nowrap;` rather than replacing spaces with  s --- web/css/styles.min.css | 1 + web/templates/admin/list_backup.html | 2 +- web/templates/admin/list_backup_detail.html | 2 +- web/templates/admin/list_backup_exclusions.html | 2 +- web/templates/admin/list_cron.html | 2 +- web/templates/admin/list_db.html | 2 +- web/templates/admin/list_dns.html | 2 +- web/templates/admin/list_dns_rec.html | 2 +- web/templates/admin/list_firewall.html | 2 +- web/templates/admin/list_firewall_banlist.html | 2 +- web/templates/admin/list_ip.html | 2 +- web/templates/admin/list_mail.html | 2 +- web/templates/admin/list_mail_acc.html | 2 +- web/templates/admin/list_packages.html | 2 +- web/templates/admin/list_services.html | 2 +- web/templates/admin/list_user.html | 4 ++-- web/templates/admin/list_web.html | 2 +- web/templates/user/list_cron.html | 2 +- web/templates/user/list_db.html | 2 +- web/templates/user/list_dns.html | 4 ++-- web/templates/user/list_dns_rec.html | 2 +- web/templates/user/list_mail.html | 2 +- web/templates/user/list_mail_acc.html | 2 +- web/templates/user/list_user.html | 4 ++-- web/templates/user/list_web.html | 2 +- 25 files changed, 28 insertions(+), 27 deletions(-) diff --git a/web/css/styles.min.css b/web/css/styles.min.css index e0a3e112..fa27dd58 100644 --- a/web/css/styles.min.css +++ b/web/css/styles.min.css @@ -2929,6 +2929,7 @@ form#vstobjects.suspended { padding: 3px 14px 3px 27px; position: absolute; text-transform: uppercase; + white-space: nowrap; word-break: keep-all; z-index: -1; } diff --git a/web/templates/admin/list_backup.html b/web/templates/admin/list_backup.html index 0dcac926..043f14e7 100644 --- a/web/templates/admin/list_backup.html +++ b/web/templates/admin/list_backup.html @@ -1,6 +1,6 @@
- +
diff --git a/web/templates/admin/list_backup_detail.html b/web/templates/admin/list_backup_detail.html index abdb28d0..39790652 100644 --- a/web/templates/admin/list_backup_detail.html +++ b/web/templates/admin/list_backup_detail.html @@ -1,6 +1,6 @@
- +
diff --git a/web/templates/admin/list_backup_exclusions.html b/web/templates/admin/list_backup_exclusions.html index 28d07574..8a00c9ba 100644 --- a/web/templates/admin/list_backup_exclusions.html +++ b/web/templates/admin/list_backup_exclusions.html @@ -1,6 +1,6 @@
- +
diff --git a/web/templates/admin/list_cron.html b/web/templates/admin/list_cron.html index 4ec2de21..2a0d56b3 100644 --- a/web/templates/admin/list_cron.html +++ b/web/templates/admin/list_cron.html @@ -1,6 +1,6 @@
- +
diff --git a/web/templates/admin/list_firewall.html b/web/templates/admin/list_firewall.html index 8f00ed11..defa4c8e 100644 --- a/web/templates/admin/list_firewall.html +++ b/web/templates/admin/list_firewall.html @@ -1,6 +1,6 @@
- +
diff --git a/web/templates/admin/list_ip.html b/web/templates/admin/list_ip.html index 3d4c78fc..ab4dfb3d 100644 --- a/web/templates/admin/list_ip.html +++ b/web/templates/admin/list_ip.html @@ -1,6 +1,6 @@
- +
diff --git a/web/templates/admin/list_user.html b/web/templates/admin/list_user.html index d52d80986..6f081c24 100644 --- a/web/templates/admin/list_user.html +++ b/web/templates/admin/list_user.html @@ -2,9 +2,9 @@
'; + echo ''; } else { - echo ''; + echo ''; } ?>
diff --git a/web/templates/user/list_mail.html b/web/templates/user/list_mail.html index 2d3dd836..5ce0d17e 100644 --- a/web/templates/user/list_mail.html +++ b/web/templates/user/list_mail.html @@ -1,6 +1,6 @@
- +
From 1c1ba0449cd15c060408522818b9489d1893aa3c Mon Sep 17 00:00:00 2001 From: dpeca Date: Wed, 20 Jul 2016 20:21:51 +0200 Subject: [PATCH 024/104] Removing AllowSupplementaryGroups from clamav.conf Option 'AllowSupplementaryGroups' is not allowed anymore on new version of ClamAV Reported as bug - https://bugs.vestacp.com/issues/279 Details - http://forum.vestacp.com/viewtopic.php?f=12&t=11884 --- install/debian/8/clamav/clamd.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/debian/8/clamav/clamd.conf b/install/debian/8/clamav/clamd.conf index ea982697..4e04356e 100644 --- a/install/debian/8/clamav/clamd.conf +++ b/install/debian/8/clamav/clamd.conf @@ -8,7 +8,7 @@ LocalSocketMode 666 # TemporaryDirectory is not set to its default /tmp here to make overriding # the default with environment variables TMPDIR/TMP/TEMP possible User clamav -AllowSupplementaryGroups true +# AllowSupplementaryGroups true ScanMail true ScanArchive true ArchiveBlockEncrypted false From fb11b194b330d465a5fb761d8d6f4e7c30ec74d8 Mon Sep 17 00:00:00 2001 From: dpeca Date: Thu, 21 Jul 2016 00:45:26 +0200 Subject: [PATCH 025/104] Changing password_vesta_host to server hostname ''Vesta Password Driver for Roundcube'' will try to make a HTTPS request to Vesta, in order to change mail password. In /etc/roundcube/plugins/password/config.inc.php you have: $rcmail_config['password_vesta_host'] = 'localhost'; That 'localhost' must be changed to server hostname, because HTTPS to localhost will not works if your server hostname is not 'localhost', because SSL certs are not for 'localhost' but for server hostname. This line will change localhost to server hostname, and 'Vesta Password driver for Roundcube' will works. --- install/vst-install-debian.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/install/vst-install-debian.sh b/install/vst-install-debian.sh index 5dfb084f..13200314 100755 --- a/install/vst-install-debian.sh +++ b/install/vst-install-debian.sh @@ -1069,6 +1069,7 @@ if [ "$exim" = 'yes' ] && [ "$mysql" = 'yes' ]; then mysql -e "CREATE DATABASE roundcube" mysql -e "GRANT ALL ON roundcube.* TO roundcube@localhost IDENTIFIED BY '$r'" sed -i "s/%password%/$r/g" /etc/roundcube/db.inc.php + sed -i "s/localhost/$servername/g" /etc/roundcube/plugins/password/config.inc.php mysql roundcube < /usr/share/dbconfig-common/data/roundcube/install/mysql chmod a+r /etc/roundcube/main.inc.php if [ "$release" -eq 8 ]; then From e2da4fbb188d76426cd89bd41e1aec5fada95e7b Mon Sep 17 00:00:00 2001 From: dpeca Date: Thu, 21 Jul 2016 01:00:03 +0200 Subject: [PATCH 026/104] Roundcube log permission fix Roundcube is not able to write to /var/log/roundcube This is a fix for it. Reported as a bug long time ago - https://forum.vestacp.com/viewtopic.php?f=12&t=10114&p=39648#p38630 See last line at this post. In v16 you accepted my pull request for password driver, but that was just a partial fix, because it needs to fix log permissions too. Now here is a fix for roundcube log permissions. --- install/vst-install-debian.sh | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/install/vst-install-debian.sh b/install/vst-install-debian.sh index 5dfb084f..d2933e13 100755 --- a/install/vst-install-debian.sh +++ b/install/vst-install-debian.sh @@ -1125,6 +1125,14 @@ check_result $? "can't create admin user" $VESTA/bin/v-change-user-shell admin bash $VESTA/bin/v-change-user-language admin $lang +# RoundCube permissions fix +if [ "$exim" = 'yes' ] && [ "$mysql" = 'yes' ]; then + if [ ! -d "/var/log/roundcube" ]; then + mkdir /var/log/roundcube + fi + chown admin:admin /var/log/roundcube +fi + # Configuring system ips $VESTA/bin/v-update-sys-ip From c5ae7881af1dfc07e6763887d4491b7a63d91874 Mon Sep 17 00:00:00 2001 From: dpeca Date: Thu, 21 Jul 2016 01:57:22 +0200 Subject: [PATCH 027/104] Fix for SMTP and IMAP hostname in add_mail_acc.html template Dovecot and Exim4 is able to handle ONLY one TLS / SSL certs. In most cases - it is a cert ONLY for server hostname. So, if you point mail client to $v_domain for IMAP/SMTP TLS - mail client will popup a warning and it will say that certs are for server hostname - not for domain that client added. So, in most cases (in 99% percents) it is better to point mail client to server hostname - because Exim4 and Dovecot have valid cert for server hostname. --- web/templates/admin/add_mail_acc.html | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/web/templates/admin/add_mail_acc.html b/web/templates/admin/add_mail_acc.html index 70f2d5bc..725780ee 100644 --- a/web/templates/admin/add_mail_acc.html +++ b/web/templates/admin/add_mail_acc.html @@ -132,6 +132,7 @@
+ @@ -142,7 +143,7 @@ - + @@ -158,7 +159,7 @@ - + @@ -179,4 +180,4 @@
: william.cage@
:
:
:
-
\ No newline at end of file + From 5d6c0137c1fbe75ec7d5fa49cc117b6c8b81bdbd Mon Sep 17 00:00:00 2001 From: dpeca Date: Thu, 21 Jul 2016 02:27:51 +0200 Subject: [PATCH 028/104] Fix for: /usr/local/vesta/func/db.sh: line 390: [: : integer expression expected Every night cron is sending email with subject: Cron sudo /usr/local/vesta/bin/v-update-sys-queue disk And content of that email is: /usr/local/vesta/func/db.sh: line 390: [: : integer expression expected This is a fix for that bug. I guess mysql for some databases returns empty string for DB size, so this will handle that case. --- func/db.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/func/db.sh b/func/db.sh index c7514eea..59a30746 100644 --- a/func/db.sh +++ b/func/db.sh @@ -387,7 +387,7 @@ get_mysql_disk_usage() { query="SELECT SUM( data_length + index_length ) / 1024 / 1024 \"Size\" FROM information_schema.TABLES WHERE table_schema='$database'" usage=$(mysql_query "$query" |tail -n1) - if [ "$usage" == 'NULL' ] || [ "${usage:0:1}" -eq '0' ]; then + if [ "$usage" == '' ] || [ "$usage" == 'NULL' ] || [ "${usage:0:1}" -eq '0' ]; then usage=1 fi export LC_ALL=C From db4c2bcdf5e19c345658a1a8811c3603c365ce57 Mon Sep 17 00:00:00 2001 From: Derrick Hammer Date: Sat, 23 Jul 2016 15:17:12 -0400 Subject: [PATCH 029/104] *delete config if domain is not in user web.conf --- func/domain.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/func/domain.sh b/func/domain.sh index a163d259..75aaf373 100644 --- a/func/domain.sh +++ b/func/domain.sh @@ -271,8 +271,8 @@ del_web_config() { get_web_config_lines $WEBTPL/$1/$WEB_BACKEND/$2 $conf sed -i "$top_line,$bottom_line d" $conf - web_domains=$(grep DOMAIN $USER_DATA/web.conf |wc -l) - if [ "$web_domains" -eq '0' ]; then + web_domain=$(grep $domain $USER_DATA/web.conf |wc -l) + if [ "$web_domain" -eq '0' ]; then sed -i "/.*\/$user\/.*$1.conf/d" /etc/$1/conf.d/vesta.conf rm -f $conf fi From 8ea7cf60d39dfa51811e1b21eeef17775b15fb78 Mon Sep 17 00:00:00 2001 From: Tjebbe Lievens Date: Fri, 29 Jul 2016 18:35:06 +0200 Subject: [PATCH 030/104] Fix is_format_valid 'user' Error is showing but script isn't stopping when entering an invalid user. --- func/main.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/func/main.sh b/func/main.sh index 617637b8..de791b80 100644 --- a/func/main.sh +++ b/func/main.sh @@ -465,12 +465,12 @@ sync_cron_jobs() { is_user_format_valid() { if [ ${#1} -eq 1 ]; then if ! [[ "$1" =~ ^^[[:alnum:]]$ ]]; then - echo "invalid $2 format :: $1" + check_result $E_INVALID "invalid $2 format :: $1" fi else if ! [[ "$1" =~ ^[[:alnum:]][-|\.|_[:alnum:]]{0,28}[[:alnum:]]$ ]] then - echo "invalid $2 format :: $1" + check_result $E_INVALID "invalid $2 format :: $1" fi fi } From aacaf1b08fdb1c427827b462e25f69bbeda21f01 Mon Sep 17 00:00:00 2001 From: Tjebbe Lievens Date: Fri, 29 Jul 2016 18:51:18 +0200 Subject: [PATCH 031/104] Improve email validation --- func/main.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/func/main.sh b/func/main.sh index 617637b8..920dd81c 100644 --- a/func/main.sh +++ b/func/main.sh @@ -612,7 +612,7 @@ is_dns_record_format_valid() { # Email format validator is_email_format_valid() { - if [[ ! "$1" =~ "@" ]] ; then + if [[ ! "$1" =~ ^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,63}$ ]] ; then check_result $E_INVALID "invalid email format :: $1" fi } From 721731dbd54781bfdb2ad266556b07c03f699a0d Mon Sep 17 00:00:00 2001 From: Derrick Hammer Date: Sat, 30 Jul 2016 02:57:54 -0400 Subject: [PATCH 032/104] *Append $idn_domain to DKIM record names --- bin/v-add-mail-domain-dkim | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bin/v-add-mail-domain-dkim b/bin/v-add-mail-domain-dkim index fe709a59..4a71870c 100755 --- a/bin/v-add-mail-domain-dkim +++ b/bin/v-add-mail-domain-dkim @@ -63,11 +63,11 @@ fi # Adding dns records if [ ! -z "$DNS_SYSTEM" ] && [ -e "$USER_DATA/dns/$domain.conf" ]; then p=$(cat $USER_DATA/mail/$domain.pub |grep -v ' KEY---' |tr -d '\n') - record='_domainkey' + record="_domainkey.$domain_idn" policy="\"t=y; o=~;\"" $BIN/v-add-dns-record $user $domain $record TXT "$policy" - record='mail._domainkey' + record="mail._domainkey.$domain_idn" selector="\"k=rsa\; p=$p\"" $BIN/v-add-dns-record $user $domain $record TXT "$selector" fi From b060bb612e244eea514580a0d3ddacb86b4d8af7 Mon Sep 17 00:00:00 2001 From: Derrick Hammer Date: Sun, 31 Jul 2016 03:25:21 -0400 Subject: [PATCH 033/104] *Fix key size by increasing to 4096 to be more secure and be compliant to letsencrypt --- bin/v-add-letsencrypt-user | 2 +- bin/v-generate-ssl-cert | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/bin/v-add-letsencrypt-user b/bin/v-add-letsencrypt-user index 431c2543..697d2ad0 100755 --- a/bin/v-add-letsencrypt-user +++ b/bin/v-add-letsencrypt-user @@ -12,7 +12,7 @@ # Argument definition user=$1 email=$2 -key_size=2048 +key_size=4096 # Includes source $VESTA/func/main.sh diff --git a/bin/v-generate-ssl-cert b/bin/v-generate-ssl-cert index 80912d78..b87a2d65 100755 --- a/bin/v-generate-ssl-cert +++ b/bin/v-generate-ssl-cert @@ -21,7 +21,7 @@ org=$6 org_unit=$7 aliases=$8 format=${9-shell} -KEY_SIZE=2048 +KEY_SIZE=4096 DAYS=365 # Includes From f8c8a33d40576426466044b6a60cdb3bf21304d3 Mon Sep 17 00:00:00 2001 From: Derrick Hammer Date: Sun, 31 Jul 2016 04:06:38 -0400 Subject: [PATCH 034/104] *Set VESTA global variable and use everywhere --- install/vst-install-debian.sh | 25 +++++++++++++------------ install/vst-install-rhel.sh | 28 ++++++++++++++-------------- install/vst-install-ubuntu.sh | 25 +++++++++++++------------ 3 files changed, 40 insertions(+), 38 deletions(-) diff --git a/install/vst-install-debian.sh b/install/vst-install-debian.sh index 5dfb084f..de744c70 100755 --- a/install/vst-install-debian.sh +++ b/install/vst-install-debian.sh @@ -10,6 +10,7 @@ export DEBIAN_FRONTEND=noninteractive RHOST='apt.vestacp.com' CHOST='c.vestacp.com' VERSION='debian' +VESTA='/usr/local/vesta' memory=$(grep 'MemTotal' /proc/meminfo |tr ' ' '\n' |grep [0-9]) arch=$(uname -i) os='debian' @@ -506,10 +507,10 @@ mv -f /root/.my.cnf $vst_backups/mysql > /dev/null 2>&1 # Backup vesta service vesta stop > /dev/null 2>&1 -cp -r /usr/local/vesta/* $vst_backups/vesta > /dev/null 2>&1 +cp -r $VESTA/* $vst_backups/vesta > /dev/null 2>&1 apt-get -y remove vesta vesta-nginx vesta-php > /dev/null 2>&1 apt-get -y purge vesta vesta-nginx vesta-php > /dev/null 2>&1 -rm -rf /usr/local/vesta > /dev/null 2>&1 +rm -rf $VESTA > /dev/null 2>&1 #----------------------------------------------------------# @@ -644,10 +645,10 @@ wget $vestacp/sudo/admin -O /etc/sudoers.d/admin chmod 440 /etc/sudoers.d/admin # Configuring system env -echo "export VESTA='/usr/local/vesta'" > /etc/profile.d/vesta.sh +echo "export VESTA='$VESTA'" > /etc/profile.d/vesta.sh chmod 755 /etc/profile.d/vesta.sh source /etc/profile.d/vesta.sh -echo 'PATH=$PATH:/usr/local/vesta/bin' >> /root/.bash_profile +echo 'PATH=$PATH:'$VESTA'/bin' >> /root/.bash_profile echo 'export PATH' >> /root/.bash_profile source /root/.bash_profile @@ -666,7 +667,7 @@ chmod 750 $VESTA/conf $VESTA/data/users $VESTA/data/ips $VESTA/log chmod -R 750 $VESTA/data/queue chmod 660 $VESTA/log/* rm -f /var/log/vesta -ln -s /usr/local/vesta/log /var/log/vesta +ln -s $VESTA/log /var/log/vesta chown admin:admin $VESTA/data/sessions chmod 770 $VESTA/data/sessions @@ -1160,19 +1161,19 @@ $VESTA/bin/v-add-domain admin $servername check_result $? "can't create $servername domain" # Adding cron jobs -command='sudo /usr/local/vesta/bin/v-update-sys-queue disk' +command="sudo $VESTA/bin/v-update-sys-queue disk" $VESTA/bin/v-add-cron-job 'admin' '15' '02' '*' '*' '*' "$command" -command='sudo /usr/local/vesta/bin/v-update-sys-queue traffic' +command="sudo $VESTA/bin/v-update-sys-queue traffic" $VESTA/bin/v-add-cron-job 'admin' '10' '00' '*' '*' '*' "$command" -command='sudo /usr/local/vesta/bin/v-update-sys-queue webstats' +command="sudo $VESTA/bin/v-update-sys-queue webstats" $VESTA/bin/v-add-cron-job 'admin' '30' '03' '*' '*' '*' "$command" -command='sudo /usr/local/vesta/bin/v-update-sys-queue backup' +command="sudo $VESTA/bin/v-update-sys-queue backup" $VESTA/bin/v-add-cron-job 'admin' '*/5' '*' '*' '*' '*' "$command" -command='sudo /usr/local/vesta/bin/v-backup-users' +command="sudo $VESTA/bin/v-backup-users" $VESTA/bin/v-add-cron-job 'admin' '10' '05' '*' '*' '*' "$command" -command='sudo /usr/local/vesta/bin/v-update-user-stats' +command="sudo $VESTA/bin/v-update-user-stats" $VESTA/bin/v-add-cron-job 'admin' '20' '00' '*' '*' '*' "$command" -command='sudo /usr/local/vesta/bin/v-update-sys-rrd' +command="sudo $VESTA/bin/v-update-sys-rrd" $VESTA/bin/v-add-cron-job 'admin' '*/5' '*' '*' '*' '*' "$command" service cron restart diff --git a/install/vst-install-rhel.sh b/install/vst-install-rhel.sh index 37616e60..02dc49ad 100755 --- a/install/vst-install-rhel.sh +++ b/install/vst-install-rhel.sh @@ -10,6 +10,7 @@ RHOST='r.vestacp.com' CHOST='c.vestacp.com' REPO='cmmnt' VERSION='rhel' +VESTA='/usr/local/vesta' memory=$(grep 'MemTotal' /proc/meminfo |tr ' ' '\n' |grep [0-9]) arch=$(uname -i) os=$(cut -f 1 -d ' ' /etc/redhat-release) @@ -527,8 +528,8 @@ mv /var/lib/pgsql/data $vst_backups/postgresql/ >/dev/null 2>&1 # Backing up Vesta configuration and data service vesta stop > /dev/null 2>&1 -mv /usr/local/vesta/data/* $vst_backups/vesta > /dev/null 2>&1 -mv /usr/local/vesta/conf/* $vst_backups/vesta > /dev/null 2>&1 +mv $VESTA/data/* $vst_backups/vesta > /dev/null 2>&1 +mv $VESTA/conf/* $vst_backups/vesta > /dev/null 2>&1 #----------------------------------------------------------# @@ -677,10 +678,10 @@ wget $vestacp/sudo/admin -O /etc/sudoers.d/admin chmod 440 /etc/sudoers.d/admin # Configuring system env -echo "export VESTA='/usr/local/vesta'" > /etc/profile.d/vesta.sh +echo "export VESTA='$VESTA'" > /etc/profile.d/vesta.sh chmod 755 /etc/profile.d/vesta.sh source /etc/profile.d/vesta.sh -echo 'PATH=$PATH:/usr/local/vesta/bin' >> /root/.bash_profile +echo 'PATH=$PATH:'$VESTA'/bin' >> /root/.bash_profile echo 'export PATH' >> /root/.bash_profile source /root/.bash_profile @@ -699,7 +700,7 @@ chmod 750 $VESTA/conf $VESTA/data/users $VESTA/data/ips $VESTA/log chmod -R 750 $VESTA/data/queue chmod 660 $VESTA/log/* rm -f /var/log/vesta -ln -s /usr/local/vesta/log /var/log/vesta +ln -s $VESTA/log /var/log/vesta chown admin:admin $VESTA/data/sessions chmod 770 $VESTA/data/sessions @@ -1229,22 +1230,21 @@ fi $VESTA/bin/v-add-domain admin $servername check_result $? "can't create $servername domain" -# Adding cron jobs -command='sudo /usr/local/vesta/bin/v-update-sys-queue disk' +command="sudo $VESTA/bin/v-update-sys-queue disk" $VESTA/bin/v-add-cron-job 'admin' '15' '02' '*' '*' '*' "$command" -command='sudo /usr/local/vesta/bin/v-update-sys-queue traffic' +command="sudo $VESTA/bin/v-update-sys-queue traffic" $VESTA/bin/v-add-cron-job 'admin' '10' '00' '*' '*' '*' "$command" -command='sudo /usr/local/vesta/bin/v-update-sys-queue webstats' +command="sudo $VESTA/bin/v-update-sys-queue webstats" $VESTA/bin/v-add-cron-job 'admin' '30' '03' '*' '*' '*' "$command" -command='sudo /usr/local/vesta/bin/v-update-sys-queue backup' +command="sudo $VESTA/bin/v-update-sys-queue backup" $VESTA/bin/v-add-cron-job 'admin' '*/5' '*' '*' '*' '*' "$command" -command='sudo /usr/local/vesta/bin/v-backup-users' +command="sudo $VESTA/bin/v-backup-users" $VESTA/bin/v-add-cron-job 'admin' '10' '05' '*' '*' '*' "$command" -command='sudo /usr/local/vesta/bin/v-update-user-stats' +command="sudo $VESTA/bin/v-update-user-stats" $VESTA/bin/v-add-cron-job 'admin' '20' '00' '*' '*' '*' "$command" -command='sudo /usr/local/vesta/bin/v-update-sys-rrd' +command="sudo $VESTA/bin/v-update-sys-rrd" $VESTA/bin/v-add-cron-job 'admin' '*/5' '*' '*' '*' '*' "$command" -service crond restart +service cron restart # Building inititall rrd images $VESTA/bin/v-update-sys-rrd diff --git a/install/vst-install-ubuntu.sh b/install/vst-install-ubuntu.sh index d71a4edc..5f3bd558 100755 --- a/install/vst-install-ubuntu.sh +++ b/install/vst-install-ubuntu.sh @@ -10,6 +10,7 @@ export DEBIAN_FRONTEND=noninteractive RHOST='apt.vestacp.com' CHOST='c.vestacp.com' VERSION='ubuntu' +VESTA='/usr/local/vesta' memory=$(grep 'MemTotal' /proc/meminfo |tr ' ' '\n' |grep [0-9]) arch=$(uname -i) os='ubuntu' @@ -491,10 +492,10 @@ mv -f /root/.my.cnf $vst_backups/mysql > /dev/null 2>&1 # Backup vesta service vesta stop > /dev/null 2>&1 -cp -r /usr/local/vesta/* $vst_backups/vesta > /dev/null 2>&1 +cp -r $VESTA/* $vst_backups/vesta > /dev/null 2>&1 apt-get -y remove vesta vesta-nginx vesta-php > /dev/null 2>&1 apt-get -y purge vesta vesta-nginx vesta-php > /dev/null 2>&1 -rm -rf /usr/local/vesta > /dev/null 2>&1 +rm -rf $VESTA > /dev/null 2>&1 #----------------------------------------------------------# @@ -636,10 +637,10 @@ wget $vestacp/sudo/admin -O /etc/sudoers.d/admin chmod 440 /etc/sudoers.d/admin # Configuring system env -echo "export VESTA='/usr/local/vesta'" > /etc/profile.d/vesta.sh +echo "export VESTA='$VESTA'" > /etc/profile.d/vesta.sh chmod 755 /etc/profile.d/vesta.sh source /etc/profile.d/vesta.sh -echo 'PATH=$PATH:/usr/local/vesta/bin' >> /root/.bash_profile +echo 'PATH=$PATH:'$VESTA'/bin' >> /root/.bash_profile echo 'export PATH' >> /root/.bash_profile source /root/.bash_profile @@ -658,7 +659,7 @@ chmod 750 $VESTA/conf $VESTA/data/users $VESTA/data/ips $VESTA/log chmod -R 750 $VESTA/data/queue chmod 660 $VESTA/log/* rm -f /var/log/vesta -ln -s /usr/local/vesta/log /var/log/vesta +ln -s $VESTA/log /var/log/vesta chown admin:admin $VESTA/data/sessions chmod 770 $VESTA/data/sessions @@ -1149,19 +1150,19 @@ $VESTA/bin/v-add-domain admin $servername check_result $? "can't create $servername domain" # Adding cron jobs -command='sudo /usr/local/vesta/bin/v-update-sys-queue disk' +command="sudo $VESTA/bin/v-update-sys-queue disk" $VESTA/bin/v-add-cron-job 'admin' '15' '02' '*' '*' '*' "$command" -command='sudo /usr/local/vesta/bin/v-update-sys-queue traffic' +command="sudo $VESTA/bin/v-update-sys-queue traffic" $VESTA/bin/v-add-cron-job 'admin' '10' '00' '*' '*' '*' "$command" -command='sudo /usr/local/vesta/bin/v-update-sys-queue webstats' +command="sudo $VESTA/bin/v-update-sys-queue webstats" $VESTA/bin/v-add-cron-job 'admin' '30' '03' '*' '*' '*' "$command" -command='sudo /usr/local/vesta/bin/v-update-sys-queue backup' +command="sudo $VESTA/bin/v-update-sys-queue backup" $VESTA/bin/v-add-cron-job 'admin' '*/5' '*' '*' '*' '*' "$command" -command='sudo /usr/local/vesta/bin/v-backup-users' +command="sudo $VESTA/bin/v-backup-users" $VESTA/bin/v-add-cron-job 'admin' '10' '05' '*' '*' '*' "$command" -command='sudo /usr/local/vesta/bin/v-update-user-stats' +command="sudo $VESTA/bin/v-update-user-stats" $VESTA/bin/v-add-cron-job 'admin' '20' '00' '*' '*' '*' "$command" -command='sudo /usr/local/vesta/bin/v-update-sys-rrd' +command="sudo $VESTA/bin/v-update-sys-rrd" $VESTA/bin/v-add-cron-job 'admin' '*/5' '*' '*' '*' '*' "$command" service cron restart From 9ada699ddf95a4cafe8d8f0c060e4a6a98b6d171 Mon Sep 17 00:00:00 2001 From: Derrick Hammer Date: Sun, 31 Jul 2016 04:13:17 -0400 Subject: [PATCH 035/104] *Copy/paste fail --- install/vst-install-rhel.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/vst-install-rhel.sh b/install/vst-install-rhel.sh index 02dc49ad..0e0ee455 100755 --- a/install/vst-install-rhel.sh +++ b/install/vst-install-rhel.sh @@ -1244,7 +1244,7 @@ command="sudo $VESTA/bin/v-update-user-stats" $VESTA/bin/v-add-cron-job 'admin' '20' '00' '*' '*' '*' "$command" command="sudo $VESTA/bin/v-update-sys-rrd" $VESTA/bin/v-add-cron-job 'admin' '*/5' '*' '*' '*' '*' "$command" -service cron restart +service crond restart # Building inititall rrd images $VESTA/bin/v-update-sys-rrd From 065f567a8b466874c4015e0c08ffcf62cfb9c3b2 Mon Sep 17 00:00:00 2001 From: kondurake Date: Tue, 2 Aug 2016 18:37:41 +0300 Subject: [PATCH 036/104] =?UTF-8?q?Show=20domain=20IP=20as=20"IP=20?= =?UTF-8?q?=E2=86=92=20NAT"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- web/templates/admin/list_web.html | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/web/templates/admin/list_web.html b/web/templates/admin/list_web.html index a707f006..45699ae2 100644 --- a/web/templates/admin/list_web.html +++ b/web/templates/admin/list_web.html @@ -57,6 +57,7 @@
$value) { ++$i; if ($data[$key]['SUSPENDED'] == 'yes') { @@ -178,7 +179,7 @@ sort-name="" sort-bandwidth="" sort-dis
- .', $data[$key]['IP'])?> +
From d7f4bc4a79ab27874f83590bd0c0e8956de7841e Mon Sep 17 00:00:00 2001 From: kondurake Date: Tue, 2 Aug 2016 18:43:06 +0300 Subject: [PATCH 037/104] Fix "Parsing error" if a NAT IP is specified https://bugs.vestacp.com/issues/325 --- web/templates/admin/add_web.html | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/web/templates/admin/add_web.html b/web/templates/admin/add_web.html index b5549b01..010f2bde 100644 --- a/web/templates/admin/add_web.html +++ b/web/templates/admin/add_web.html @@ -62,14 +62,10 @@
From cfcc7d62a0bddf360c5f9500ad2b6576b7e550f6 Mon Sep 17 00:00:00 2001 From: kondurake Date: Tue, 2 Aug 2016 18:48:21 +0300 Subject: [PATCH 038/104] Fix "Parsing error" if a NAT IP is specified https://bugs.vestacp.com/issues/325 --- web/templates/admin/edit_web.html | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/web/templates/admin/edit_web.html b/web/templates/admin/edit_web.html index afa34174..4680cd6b 100644 --- a/web/templates/admin/edit_web.html +++ b/web/templates/admin/edit_web.html @@ -65,15 +65,10 @@ From 0561a213dbe5fe9aeb3b155e426196da75504b93 Mon Sep 17 00:00:00 2001 From: Serghey Rodin Date: Mon, 8 Aug 2016 12:05:04 +0300 Subject: [PATCH 039/104] php 5.6 for CentOS --- install/vst-install-rhel.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/install/vst-install-rhel.sh b/install/vst-install-rhel.sh index 37616e60..db1903b2 100755 --- a/install/vst-install-rhel.sh +++ b/install/vst-install-rhel.sh @@ -436,6 +436,7 @@ check_result $? "Can't install EPEL repository" if [ "$remi" = 'yes' ]; then rpm -Uvh --force $vestacp/remi-release.rpm check_result $? "Can't install REMI repository" + sed -i "s/enabled=0/enabled=1/g" /etc/yum.repos.d/remi.repo fi # Installing Nginx repository @@ -605,7 +606,7 @@ fi # Installing rpm packages if [ -z "$disable_remi" ]; then - yum -y --disablerepo=* --enablerepo="base,updates,nginx,epel,vesta,remi" \ + yum -y --disablerepo=* --enablerepo="base,updates,nginx,epel,vesta,remi*"\ install $software else yum -y --disablerepo=* --enablerepo="base,updates,nginx,epel,vesta" \ From 9fb11527ba346e040e836bc046565f72f71db013 Mon Sep 17 00:00:00 2001 From: skid Date: Tue, 9 Aug 2016 16:23:51 +0300 Subject: [PATCH 040/104] fix for domain validation on rhel5 --- func/main.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/func/main.sh b/func/main.sh index 617637b8..b1503d6c 100644 --- a/func/main.sh +++ b/func/main.sh @@ -479,7 +479,7 @@ is_user_format_valid() { is_domain_format_valid() { object_name=${2-domain} exclude="[!|@|#|$|^|&|*|(|)|+|=|{|}|:|,|<|>|?|_|/|\|\"|'|;|%|\`| ]" - if [[ $1 =~ $exclude ]] || [[ $1 =~ ^[0-9]+$ ]] || [[ $1 =~ \.\. ]]; then + if [[ $1 =~ $exclude ]] || [[ $1 =~ ^[0-9]+$ ]] || [[ $1 =~ "\.\." ]]; then check_result $E_INVALID "invalid $object_name format :: $1" fi } From 08bdff8ba32d78c856a891860098770495162f35 Mon Sep 17 00:00:00 2001 From: skid Date: Tue, 9 Aug 2016 17:33:37 +0300 Subject: [PATCH 041/104] improving kondurake patches --- web/templates/admin/add_web.html | 2 +- web/templates/admin/edit_web.html | 2 +- web/templates/admin/list_web.html | 3 +-- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/web/templates/admin/add_web.html b/web/templates/admin/add_web.html index 010f2bde..3bebdd8a 100644 --- a/web/templates/admin/add_web.html +++ b/web/templates/admin/add_web.html @@ -63,7 +63,7 @@ $value) { - $display_ip = htmlentities(empty($value['NAT']) ? $ip : "{$ip} → {$value['NAT']}"); + $display_ip = htmlentities(empty($value['NAT']) ? $ip : "{$value['NAT']}"); $ip_selected = ((!empty($v_ip) && $ip == $v_ip) || $v_ip == "'{$ip}'") ? 'selected' : ''; echo "\n\t\t\t\t\t\t\t\t\t\t\t\t\n"; } diff --git a/web/templates/admin/list_web.html b/web/templates/admin/list_web.html index 45699ae2..8f2e82f1 100644 --- a/web/templates/admin/list_web.html +++ b/web/templates/admin/list_web.html @@ -57,7 +57,6 @@
$value) { ++$i; if ($data[$key]['SUSPENDED'] == 'yes') { @@ -179,7 +178,7 @@ sort-name="" sort-bandwidth="" sort-dis
- +
From 98752897f05f205b791fa9f3e3369b505c0c7aeb Mon Sep 17 00:00:00 2001 From: skid Date: Tue, 9 Aug 2016 17:36:36 +0300 Subject: [PATCH 042/104] Defining PATH for root commands --- bin/v-restart-cron | 1 + bin/v-restart-dns | 1 + bin/v-restart-ftp | 1 + bin/v-restart-mail | 1 + bin/v-restart-proxy | 1 + bin/v-restart-service | 1 + bin/v-restart-web | 1 + bin/v-restart-web-backend | 1 + 8 files changed, 8 insertions(+) diff --git a/bin/v-restart-cron b/bin/v-restart-cron index 8fcaf2be..305f2db2 100755 --- a/bin/v-restart-cron +++ b/bin/v-restart-cron @@ -12,6 +12,7 @@ # Includes source $VESTA/func/main.sh source $VESTA/conf/vesta.conf +PATH="$PATH:/usr/local/sbin:/sbin:/usr/sbin:/root/bin" send_email_report() { email=$(grep CONTACT $VESTA/data/users/admin/user.conf) diff --git a/bin/v-restart-dns b/bin/v-restart-dns index 8e84d66e..fad2f704 100755 --- a/bin/v-restart-dns +++ b/bin/v-restart-dns @@ -12,6 +12,7 @@ # Includes source $VESTA/func/main.sh source $VESTA/conf/vesta.conf +PATH="$PATH:/usr/local/sbin:/sbin:/usr/sbin:/root/bin" send_email_report() { if [ -e '/etc/named.conf' ]; then diff --git a/bin/v-restart-ftp b/bin/v-restart-ftp index 9ab2d771..f554011c 100755 --- a/bin/v-restart-ftp +++ b/bin/v-restart-ftp @@ -12,6 +12,7 @@ # Includes source $VESTA/func/main.sh source $VESTA/conf/vesta.conf +PATH="$PATH:/usr/local/sbin:/sbin:/usr/sbin:/root/bin" send_email_report() { email=$(grep CONTACT $VESTA/data/users/admin/user.conf) diff --git a/bin/v-restart-mail b/bin/v-restart-mail index 2784cd3d..7080260e 100755 --- a/bin/v-restart-mail +++ b/bin/v-restart-mail @@ -12,6 +12,7 @@ # Includes source $VESTA/func/main.sh source $VESTA/conf/vesta.conf +PATH="$PATH:/usr/local/sbin:/sbin:/usr/sbin:/root/bin" send_email_report() { email=$(grep CONTACT $VESTA/data/users/admin/user.conf) diff --git a/bin/v-restart-proxy b/bin/v-restart-proxy index 79776ce7..e050eb1c 100755 --- a/bin/v-restart-proxy +++ b/bin/v-restart-proxy @@ -12,6 +12,7 @@ # Includes source $VESTA/func/main.sh source $VESTA/conf/vesta.conf +PATH="$PATH:/usr/local/sbin:/sbin:/usr/sbin:/root/bin" send_email_report() { email=$(grep CONTACT $VESTA/data/users/admin/user.conf) diff --git a/bin/v-restart-service b/bin/v-restart-service index 5df3e255..e46339f9 100755 --- a/bin/v-restart-service +++ b/bin/v-restart-service @@ -14,6 +14,7 @@ service=$1 # Includes source $VESTA/func/main.sh +PATH="$PATH:/usr/local/sbin:/sbin:/usr/sbin:/root/bin" #----------------------------------------------------------# diff --git a/bin/v-restart-web b/bin/v-restart-web index 4b62a8a0..a7ecf644 100755 --- a/bin/v-restart-web +++ b/bin/v-restart-web @@ -12,6 +12,7 @@ # Includes source $VESTA/func/main.sh source $VESTA/conf/vesta.conf +PATH="$PATH:/usr/local/sbin:/sbin:/usr/sbin:/root/bin" send_email_report() { email=$(grep CONTACT $VESTA/data/users/admin/user.conf) diff --git a/bin/v-restart-web-backend b/bin/v-restart-web-backend index 54ba8daa..50cd940f 100755 --- a/bin/v-restart-web-backend +++ b/bin/v-restart-web-backend @@ -12,6 +12,7 @@ # Includes source $VESTA/func/main.sh source $VESTA/conf/vesta.conf +PATH="$PATH:/usr/local/sbin:/sbin:/usr/sbin:/root/bin" send_email_report() { email=$(grep CONTACT $VESTA/data/users/admin/user.conf) From 7b924c0227e680e4652a4f9e082fa65d4ff5f775 Mon Sep 17 00:00:00 2001 From: Serghey Rodin Date: Tue, 9 Aug 2016 19:21:45 +0300 Subject: [PATCH 043/104] improving kondurake patches --- web/list/web/index.php | 1 + 1 file changed, 1 insertion(+) diff --git a/web/list/web/index.php b/web/list/web/index.php index 1db6c29c..688dfeaa 100644 --- a/web/list/web/index.php +++ b/web/list/web/index.php @@ -9,6 +9,7 @@ include($_SERVER['DOCUMENT_ROOT']."/inc/main.php"); exec (VESTA_CMD."v-list-web-domains $user json", $output, $return_var); $data = json_decode(implode('', $output), true); $data = array_reverse($data,true); +$ips = json_decode(shell_exec(VESTA_CMD.'v-list-sys-ips json'), true); // Render page render_page($user, $TAB, 'list_web'); From 4adbef4517897f7e279fab02b63ebbfda466a6fa Mon Sep 17 00:00:00 2001 From: Serghey Rodin Date: Tue, 9 Aug 2016 19:22:45 +0300 Subject: [PATCH 044/104] FileManager move function + small bugfixes --- web/css/file_manager.css | 386 +++------------------- web/file_manager/fm_api.php | 28 +- web/file_manager/fm_core.php | 28 +- web/images/flat_icons.png | Bin 13365 -> 14074 bytes web/inc/i18n/ar.php | 5 + web/inc/i18n/bs.php | 5 + web/inc/i18n/cn.php | 5 + web/inc/i18n/cz.php | 5 + web/inc/i18n/da.php | 5 + web/inc/i18n/de.php | 5 + web/inc/i18n/el.php | 5 + web/inc/i18n/en.php | 5 + web/inc/i18n/es.php | 5 + web/inc/i18n/fa.php | 5 + web/inc/i18n/fi.php | 5 + web/inc/i18n/fr.php | 5 + web/inc/i18n/hu.php | 5 + web/inc/i18n/id.php | 5 + web/inc/i18n/it.php | 5 + web/inc/i18n/ja.php | 5 + web/inc/i18n/nl.php | 5 + web/inc/i18n/no.php | 5 + web/inc/i18n/pl.php | 5 + web/inc/i18n/pt-BR.php | 5 + web/inc/i18n/pt.php | 5 + web/inc/i18n/ro.php | 5 + web/inc/i18n/ru.php | 5 + web/inc/i18n/se.php | 5 + web/inc/i18n/tr.php | 5 + web/inc/i18n/tw.php | 5 + web/inc/i18n/ua.php | 5 + web/inc/i18n/vi.php | 5 + web/js/app.js | 10 +- web/js/file_manager.js | 414 +++++++++++++++++------- web/js/i18n.js.php | 3 + web/js/templates.js | 36 ++- web/templates/file_manager/main.php | 82 +---- web/templates/file_manager/tab_menu.php | 2 + 38 files changed, 563 insertions(+), 566 deletions(-) diff --git a/web/css/file_manager.css b/web/css/file_manager.css index bc9723c0..d8e5a26e 100644 --- a/web/css/file_manager.css +++ b/web/css/file_manager.css @@ -1,25 +1,12 @@ body { margin: 0; padding: 0; } .hidden { display: none; } -.l-logo { - background-color: #7B7B7B; - background-image: url("/images/sprite.png?1446554103"); - background-position: -117px -57px; - background-repeat: no-repeat; - border: 9px solid #7B7B7B; - display: inline-block; - float: left; - height: 22px; - margin-left: 0; - margin-top: 0; - width: 59px; -} +.l-logo { background-color: #7B7B7B; background-image: url("/images/sprite.png?1446554103"); background-position: -117px -57px; background-repeat: no-repeat; border: 9px solid #7B7B7B; display: inline-block; float: left; height: 22px; margin-left: 0; margin-top: 0; width: 59px; } #main{ display: inline-block; font-family: Arial; font-size: 15px; color: #777; width: 100%; } -.window { display: inline-block; float: left; /*border: 1px solid #eee;*/ width: 50%; height: 100%; background-color: #ececec; /*background: url(/images/background-dots.png) #ececec;*/ } +.window { display: inline-block; float: left; width: 50%; height: 100%; background-color: #ececec; } .window.active { background: #fff; } - .window.active .l-logo { background-color: #333; border-color: #333; } @@ -31,7 +18,7 @@ body { margin: 0; padding: 0; } .active .menu { box-shadow: 0 1px 11px -5px rgba(0, 0, 0, 0.5); } -.menu { /*background-color: #EEE;*/ display: inline-block; color: #999999; width: 100%; padding: 8px 0 7px 0; border-bottom: 1px solid #CFCFCD; border-left: 1px solid #CFCFCD; margin-left: -1px; } +.menu { display: inline-block; color: #999999; width: 100%; padding: 8px 0 7px 0; border-bottom: 1px solid #CFCFCD; border-left: 1px solid #CFCFCD; margin-left: -1px; } .menu div { display: inline-block; float: left; padding: 6px 5px 5px; font-size: 11px; margin: 0 3px; line-height: 14px; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; } @@ -44,6 +31,7 @@ body { margin: 0; padding: 0; } .menu div.button.small.rename { background: url("/images/flat_icons.png") no-repeat scroll -180px -180px; width: 12px; } .menu div.button.small.rights { background: url("/images/flat_icons.png") no-repeat scroll -237px -97px; } .menu div.button.small.copy { background: url("/images/flat_icons.png") no-repeat scroll -177px -210px; } +.menu div.button.small.move { background: url("/images/flat_icons.png") no-repeat scroll -231px -210px; } .menu div.button.small.download { background: url("/images/flat_icons.png") no-repeat scroll -176px -243px; } .menu div.button.small.extract { background: url("/images/flat_icons.png") no-repeat scroll -232px -35px; } .menu div.button.small.archive { background: url("/images/flat_icons.png") no-repeat scroll -175px -58px; } @@ -55,6 +43,7 @@ body { margin: 0; padding: 0; } .menu div.button.small.rename:hover { background-position: -207px -180px; } .menu div.button.small.rights:hover { background-position: -237px -122px; } .menu div.button.small.copy:hover { background-position: -204px -210px; } +.menu div.button.small.move:hover { background-position: -231px -243px; } .menu div.button.small.download:hover { background-position: -204px -243px; } .menu div.button.small.extract:hover { background: url("/images/flat_icons.png") no-repeat scroll -255px -35px; } .menu div.button.small.archive:hover { background: url("/images/flat_icons.png") no-repeat scroll -201px -35px; } @@ -69,21 +58,15 @@ body { margin: 0; padding: 0; } .menu div.button.del:hover { color: #FF5A5A; } - .menu div.button.disabled:hover, .menu div.button.disabled { opacity: 0.5; cursor: default; text-decoration: none; } - .menu .upload.button { color: #777; border: 1px solid #B7B7B7; background-color: #EAEAE8; text-transform: uppercase; font-size: 12px; text-decoration: none; margin-left: 8px; padding: 5px 12px; margin-right: 10px; border-radius: 3px; float: left; transition: box-shadow 0.28s cubic-bezier(0.4, 0, 0.2, 1) 0s; -webkit-transition: box-shadow 0.28s cubic-bezier(0.4, 0, 0.2, 1) 0s; font-size: 11px; line-height: 14px; } .window.active .menu .upload { border: 1px solid #AACC0D; background-color: #AACC0D; color: #FFF; } -.menu .upload.button.progress { background: url(/images/progress.gif) no-repeat /*-98px*/ -60px 0px #EBEBEB; border-color: #8A9079; color: transparent; padding: 3px 12px; height: 0; margin-top: 9px; transition: background 0.28s cubic-bezier(0.4, 0, 0.2, 1) 0s; - -webkit-transition: background 0.28s cubic-bezier(0.4, 0, 0.2, 1) 0s; -} - +.menu .upload.button.progress { background: url(/images/progress.gif) no-repeat /*-98px*/ -60px 0px #EBEBEB; border-color: #8A9079; color: transparent; padding: 3px 12px; height: 0; margin-top: 9px; transition: background 0.28s cubic-bezier(0.4, 0, 0.2, 1) 0s; -webkit-transition: background 0.28s cubic-bezier(0.4, 0, 0.2, 1) 0s; } .menu .upload.button.progress.done { background-color: #d1ff66; border-color: #8a9079; box-shadow: 0 0 9px 0 #d1ff38; color: transparent; height: 0; margin-top: 9px; padding: 3px 12px; transition: background 0.28s cubic-bezier(0.4, 0, 0.2, 1) 0s; -webkit-transition: background 0.28s cubic-bezier(0.4, 0, 0.2, 1) 0s; transition: height 0.28s cubic-bezier(0.4, 0, 0.2, 1) 0s; -webkit-transition: height 0.28s cubic-bezier(0.4, 0, 0.2, 1) 0s; } - .menu .upload.button:hover, .window.active .menu .upload:hover { border: 1px solid #C0E60F; background-color: #C0E60F; color: #fff; } .menu .upload.button:active, .window.active .menu .upload:active { border: 1px solid #FFCC00; background-color: #FFCC00; color: #FFF; } @@ -107,7 +90,6 @@ ul.listing { list-style-type: none; padding: 18px 0 0; margin: -4px 0 0 -1px; b .listing li.file { } -/* .listing li .icon { background: url("/images/document.png") no-repeat scroll -2px 6px; float: left; margin-left: -17px; width: 13px; height: 24px; }*/ .listing li .icon { background: url("/images/flat_icons.png") no-repeat scroll -97px -100px; float: left; margin-left: -17px; width: 31px; height: 31px; margin-top: 1px; } .listing li .icon.filetype-dir { background: url("/images/flat_icons.png") no-repeat scroll -24px -98px; } .listing li .icon.filetype-link { background: url("/images/flat_icons.png") no-repeat scroll -97px -121px; } @@ -203,15 +185,7 @@ ul.listing { list-style-type: none; padding: 18px 0 0; margin: -4px 0 0 -1px; b .listing li .filename-holder { max-width: 40%; overflow: hidden; float: left; height: 35px; } .listing li .filename { color: #555; cursor: pointer; height: 32px; float: left; padding: 2px 7px 0 7px; border-radius: 3px; transition: all 0.18s cubic-bezier(0.4, 0, 0.2, 1) 0s; -webkit-transition: all 0.18s cubic-bezier(0.4, 0, 0.2, 1) 0s; } -/* .listing li .filename { background: url("/images/folder_.png") no-repeat scroll -2px 6px; color: #555; cursor: pointer; float: left; margin-left: -27px; padding-left: 19px; }*/ - .listing li .filename:hover { color: #333; background-color: #D1D0CF; } -/* -.listing li .filename:hover { color: #FFF; background-color: #6CB6B9; } -.listing li.selected .filename:hover { color: #FFF; } -.listing li.active .filename:hover { color: #FFF; background-color: #CAA335; } -.listing li.active.selected .filename:hover { color: #FFF; background-color: #60A885; } -*/ .listing li .filename a { color: #7D7D7D; text-decoration: none; } .listing li .mode { width: 51px; font-size: 11px; padding-top: 2px; } .listing li .owner { width: 11%; font-style: italic; color: #81A64F; font-size: 12px; padding-top: 2px; } @@ -221,58 +195,30 @@ ul.listing { list-style-type: none; padding: 18px 0 0; margin: -4px 0 0 -1px; b .listing li .time { width: 50px; font-size: 11px; padding-top: 2px; } .window.active .listing li.selected .mode { color: #7F7550; } -.window.active .listing li.selected .owner { /* color: #7F7550; */ } +.window.active .listing li.selected .owner { } .window.active .listing li.selected .size-value { color: #7F7550; } .window.active .listing li.selected .size-unit { color: #7F7550; } .window.active .listing li.selected .date { color: #7F7550; } .window.active .listing li.selected .time { color: #7F7550; } - -/* -.listing li.selected-inactive.selected { background-color: #e9e9e9; border-top: 1px solid #ccc; border-bottom: 1px solid #ccc; } -.listing li.selected-inactive .mode, -.listing li.selected-inactive .time, -.listing li.selected-inactive .date { color: #999 !important; } -*/ - .listing li.selected { background-color: #DEDEDE; } -.listing.active li.selected { background-color: #ffd437 /*#7FD5D9*/; } +.listing.active li.selected { background-color: #ffd437; } .listing li.selected .filename:hover { color: #333; background-color: #F0B607; } - - - -/* ///.listing li.selected-inactive.selected.active { background-color: #dfc891; border-top: 1px solid #cdb885; border-bottom: 1px solid #cdb885; }*/ - -/* -.listing li.selected .filename { color: #333; } -.listing li.selected .date, -.listing li.selected .mode, -.listing li.selected .time { color: #777; } -.listing li.selected .owner { color: #31775A; } -.listing li.selected .size { color: #31775A; } -*/ .window.active .listing li.active { background-color: #FFDC5A; } .window.active .listing li.active .marker { background-color: #C2A84B; } .listing li.active { background-color: #DEDEDE; } .listing li.active .marker { background-color: #C2C2C2; } -/* ///.listing li.selected.active .filename { color: #fff29c; } */ .listing li.selected.active .marker { background-color: #3a8a96; } .listing li.selected-inactive { background-color: #DEDEDE; } -/*///.listing li.selected-inactive .marker { background-color: #7FD5D9; } -.listing li.selected-inactive .filename { color: #54A9A9; } */ - .listing li .filename a:hover { color: #3399FF; } .listing li:hover { background-color: #E5E5E5; cursor: pointer; } .window.active .listing li.active:hover { background-color: #FFE570; } -.listing li.selected:hover { background-color: /*#89E6EA*/#FFE570; } +.listing li.selected:hover { background-color: #FFE570; } .listing li.selected.active:hover { background-color: #FFE570; } - - - .context-menu { background-color: #333333; width: 200px; list-style-type: none; font-family: arial; padding-left: 0; } .context-menu li { border-bottom: 1px solid #555; padding: 12px 12px 12px 12px; color: #D6CEC1; font-size: 14px; cursor: pointer; } @@ -294,22 +240,16 @@ ul.listing { list-style-type: none; padding: 18px 0 0; margin: -4px 0 0 -1px; b .context-menu.sort-order span.name, .context-menu.sort-order span.date, .context-menu.sort-order span.size, -.context-menu.sort-order span.type - { background: url("/images/flat_icons.png") repeat scroll -308px -105px; display: inline-block; padding: 12px 28px 12px 12px; width: 64px; } - - - +.context-menu.sort-order span.type { background: url("/images/flat_icons.png") repeat scroll -308px -105px; display: inline-block; padding: 12px 28px 12px 12px; width: 64px; } .context-menu.sort-order span.active { background-color: #FFCC00; color: #FFF; } - .context-menu.sort-order span:hover { background-color: #4B4B4B; color: #FFF; } .context-menu.sort-order span:active { background-color: #FFCC00; color: #FFF; } .confirm-box { background-color: #333; width: 480px; font-family: arial; margin-left: 50px; border-radius: 3px; box-shadow: 0 2px 11px 0 rgba(0, 0, 0, 0.5); } -/*.confirm-box.replace { height: 230px; }*/ .confirm-box .message { color: #EBE697; font-size: 16px; padding: 25px; margin-bottom: 60px; display: inline-block; } .confirm-box .results, -.confirm-box .warning { color: #FF9500; font-size: 16px; padding: 25px; } +.confirm-box .warning { color: #ffc800; font-size: 16px; padding: 25px; } .confirm-box .warning .title, .confirm-box .message .title { color: #48B1B7; } .confirm-box .action-name { color: #B9CAD4; display: inline-block; float: left; margin-bottom: 28px; margin-left: 25px; } @@ -317,27 +257,22 @@ ul.listing { list-style-type: none; padding: 18px 0 0; margin: -4px 0 0 -1px; b .confirm-box .action-nam .checkbox { border: 1px solid #777; height: 10px; margin-right: 10px; margin-top: 3px; padding-top: 0; width: 10px; } .confirm-box .controls { border-top: 1px solid #555; display: inline-block; width: 100%; margin-bottom :9px; } -.confirm-box .controls .cancel { /*background-color: #e8e8e6;*/ border: 1px solid transparent; border-radius: 3px; color: #CCC; display: inline-block; float: left; font-size: 12px; margin: 12px 0 0 12px; padding: 7px 18px; text-transform: uppercase; cursor: pointer; } +.confirm-box .controls .cancel { border: 1px solid transparent; border-radius: 3px; color: #CCC; display: inline-block; float: left; font-size: 12px; margin: 12px 0 0 12px; padding: 7px 18px; text-transform: uppercase; cursor: pointer; } .confirm-box .controls .keep-original { color: #ccc; cursor: pointer; display: inline-block; float: left; margin: 11px 0 0 15px; padding: 7px; text-decoration: underline; } .confirm-box .controls .ok { margin: 12px 12px 0 0; border-radius: 3px; cursor: pointer; border: 1px solid #CACE33; background-color: #CACE33; color: #FFF; float: right; display: inline-block; font-size: 12px; padding: 7px 18px; text-transform: uppercase; width: 100px; text-align: center; height: 14px; } .confirm-box .controls .cancel:hover, -.confirm-box .controls .ok:hover { border: 1px solid #54BDAA; background-color: #54BDAA; /*border: 1px solid #6DB8D3; background-color: #6DB8D3;*/ color: #FFF; box-shadow: 0 2px 11px 0 rgba(0, 0, 0, 0.5); } +.confirm-box .controls .ok:hover { border: 1px solid #54BDAA; background-color: #54BDAA; color: #FFF; box-shadow: 0 2px 11px 0 rgba(0, 0, 0, 0.5); } .confirm-box .controls .cancel:active, .confirm-box .controls .ok:active { border: 1px solid #ccc; background-color: #ccc; } .confirm-box.delete .controls .ok { background-color: #ff9f89; border-color: #ff9f89; } .confirm-box.delete .controls .ok:hover { background-color: #FF6C6E; border-color: #FF6C6E; } - - .confirm-box .controls .keep-original:hover { color: #FFCC00; } .confirm-box .controls .keep-original:active { color: #6DB8D3; } -/*.confirm-box.delete { height: 183px; }*/ - .confirm-box .new-title { background-color: #292929; border: 1px solid #111; color: #eee; font-family: Arial; font-size: 16px; margin-bottom: 73px; margin-left: 27px; padding: 10px 14px; width: 396px; } .confirm-box .new-title:focus { border: 1px solid #FFCC00; box-shadow: 0 0 5px 0 rgba(255, 204, 0 , 0.3); } -/*.confirm-box.rename { height: 209px; } */ .confirm-box.rename .message { margin-bottom: 36px; } .confirm-box.rename .controls.replace { display: none; } .confirm-box.rename.warning .controls { display: none; } @@ -352,8 +287,6 @@ ul.listing { list-style-type: none; padding: 18px 0 0; margin: -4px 0 0 -1px; b .confirm-box.chmod ul:last-of-type { margin-bottom: 38px; } .confirm-box.chmod li { list-style-type: none; } - -/*.confirm-box.archive { height: 468px; }*/ .confirm-box.archive .message { margin-bottom: 38px; } .confirm-box.archive.warning .controls, .confirm-box.archive .controls.replace, @@ -367,15 +300,12 @@ ul.listing { list-style-type: none; padding: 18px 0 0; margin: -4px 0 0 -1px; b .confirm-box.unpack .message { margin-bottom: 0; } .confirm-box.pack .message { margin-bottom: 0; } - .confirm-box .actions select { background-color: #333333; border: 1px solid #ccc; color: #fff; font-family: Arial; font-size: 16px; margin-bottom: 27px; margin-left: 27px; padding: 10px 14px; } .confirm-box .actions .title { color: #ccc; font-family: Arial; line-height: 33px; padding-left: 27px; text-transform: capitalize; } .confirm-box .actions label { cursor: pointer; padding-left: 27px; color: #ebe697; } .confirm-box.unpack .actions { padding-bottom: 30px; } .confirm-box.unpack .actions input { margin-right: 5px; } - -/*.confirm-box.owner-mode { height: 484px; }*/ .confirm-box.owner-mode .warning { display: none; } .confirm-box.owner-mode.warning .warning { display: inline-block; } .confirm-box.owner-mode.warning .message { margin-bottom: -39px; } @@ -387,8 +317,6 @@ ul.listing { list-style-type: none; padding: 18px 0 0; margin: -4px 0 0 -1px; b .confirm-box.owner-mode .recursive { margin-top: 30px; margin-bottom: 25px; } - - .warning-box { width: 60%; background-color: #ff9f89; border-bottom: 5px solid #ff6c6e; color: #FFF; font-family: arial; margin-left: auto; margin-right: auto; padding-bottom: 30px; margin-bottom: 50px; left: 20%; position: absolute; top: 0; box-shadow: 0 2px 11px 0 rgba(0, 0, 0, 0.5); } .warning-box.inform { background-color: #72c5b2; border-color: #019174; } .warning-box.reload { width: 100px; background-color: #333; border-color: #222; z-index: 5000; left: 45%; opacity: 0.9; padding: 17px 27px; border-radius: 0 0 6px 6px; border: none; opacity: 0.9; } @@ -402,150 +330,53 @@ ul.listing { list-style-type: none; padding: 18px 0 0; margin: -4px 0 0 -1px; b .warning-box.inform .close:hover { background-color: #019174; } - .fotorama--fullscreen .fotorama__fullscreen-icon { background-position: -64px 0 !important; } +.fileinput-button input { font-size: 14px !important; width: 90px; } -/* - transition: box-shadow 0.28s cubic-bezier(0.4, 0, 0.2, 1) 0s; - -webkit-transition: box-shadow 0.28s cubic-bezier(0.4, 0, 0.2, 1) 0s; +.progress-container { width: 100%; position: fixed; bottom: 1px; } +.progress-container .progress-elm { background-color: rgba(0, 0, 0, 0.5); border-radius: 3px; display: block; height: 12px; margin-left: auto; margin-right: auto; padding: 7px; width: 212px; } +.progress-container .progress-elm .title { color: #fff; display: inline-block; float: left; font-family: arial; font-size: 11px; margin-left: 4px; padding-right: 14px; padding-top: 0; text-transform: uppercase; } +.progress-container .progress-elm .progress { background: #ebebeb url("/images/progress.gif") no-repeat scroll 0px 0; border-color: #8a9079; border-radius: 3px; color: transparent; display: inline-block; height: 0; margin-top: 3px; padding: 3px 12px; transition: background 0.28s cubic-bezier(0.4, 0, 0.2, 1) 0s; width: 60px; float: left; } +.progress-container .progress-elm .close { background: rgba(0, 0, 0, 0) url("/images/sprite.png?1446554103") repeat scroll -428px -487px; cursor: pointer; display: inline-block; float: right; height: 7px; margin-right: 3px; margin-top: 3px; width: 7px; } +.progress-container .progress-elm .close:hover { border: 7px solid #333; margin-top: -4px; margin-right: -4px; background-color: #333; } +.progress-container .progress-elm .close:active { border: 7px solid #FFCC00; margin-top: -4px; margin-right: -4px; background-color: #FFCC00; } - box-shadow: 0 6px 15px rgba( 0, 0, 0, 0.23), 0 10px 18px rgba( 0, 0, 0, 0.16); - box-shadow: 0 3px 10px rgba(0, 0, 0, 0.23), 0 3px 10px rgba(0, 0, 0, 0.16); - box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.64); +.checkbox-toolbar { float: left !important; } -*/ +.subcontext-control.hidden { display: none !important; } +.subcontext-control { color: red; } +.subcontext-menu-hidden { display: none; } +.subcontext-menu { position: absolute; background-color: yellow; padding: 10px; border: 1px solid red; } -/* +.shortcuts { background: rgba(50, 50, 50, 0.9); display: inline-block; position: fixed; right: 20%; bottom: 0; color: #eee; width: 810px; border: 1px solid #333; font-family: arial; font-size: 13px; } +.shortcuts .header { border-bottom: 1px solid #333; height: 43px; } +.shortcuts .title { text-transform: uppercase; color: #ffcc00; padding: 7px 0 7px 14px; display: inline-block; float: left; font-size: 11px; letter-spacing: 3px; font-weight: bold; line-height: 30px; } +.shortcuts .close { background: url("/images/sprite.png?1446554103") repeat scroll -408px -469px; cursor: pointer; display: inline-block; float: right; height: 32px; padding-top: 11px; width: 46px; } +.shortcuts .close:hover { background-color: #000; } +.shortcuts .close:active { background-color: #55c9c0; } +.shortcuts ul { list-style-type: none; padding: 30px 20px; display: inline-block; float: left; width: 360px; } +.shortcuts ul li { padding: 5px 20px; } +.shortcuts ul li.step-top { padding-top: 30px; } +.shortcuts ul li span { color: #48F4EF; display: inline-block; font-weight: bold; padding: 0 20px 0 0; text-align: right; } +.shortcuts ul li span.bigger { font-size: 18px; } +.shortcuts ul.note { font-style: italic; color: #9CA484; width: 700px; padding-left: 50px; } +.shortcuts ul.note a { color: #9CA484; } - Прочёл. Похоже проблема уже решена, не понял, что нужно сделать, проверить правильность решения? - Вроде всё в порядке, инпут уже максимльно близко вкладывается в спан. +.to-shortcuts { display: inline-block; position: fixed; top: 95%; right: 1%; } +.l-icon-shortcuts { display: inline-block; vertical-align: middle; background-image: url("/images/sprite.png?1446554103"); width: 35px; height: 35px; background-position: -122px -283px; border-radius: 18px; } +.l-icon-shortcuts:hover { background-position: -160px -283px; } +.l-icon-shortcuts:active { background-position: -198px -283px; } - -- Для Дмитрия (удалить после прочтения): - - -- Аплоад прячет инпут, делая его прозрачным, и помещая поверх кнопку html (сделано для кроссбраузерности) - -- При стилизации кнопки для аплоада, важно задать такие же размеры для инпута с типом файла, - -- иначе он может быть больше или меньше стилизованной кнопки, что приведёт к вызову аплоад диалогового окна - -- при клике на неправильную область - - - -- вот файл инпут ----> .fileinput-button input -*/ -.fileinput-button input { - font-size: 14px !important; - width: 90px; -} - -.progress-container { - width: 100%; - position: fixed; - bottom: 1px; -} -.progress-container .progress-elm { - background-color: rgba(0, 0, 0, 0.5); - border-radius: 3px; - display: block; - height: 12px; - margin-left: auto; - margin-right: auto; - padding: 7px; - width: 212px; -} - -.progress-container .progress-elm .title { - color: #fff; - display: inline-block; - float: left; - font-family: arial; - font-size: 11px; - margin-left: 4px; - padding-right: 14px; - padding-top: 0; - text-transform: uppercase; -} - -.progress-container .progress-elm .progress { - background: #ebebeb url("/images/progress.gif") no-repeat scroll 0px 0; - border-color: #8a9079; - border-radius: 3px; - color: transparent; - display: inline-block; - height: 0; - margin-top: 3px; - padding: 3px 12px; - transition: background 0.28s cubic-bezier(0.4, 0, 0.2, 1) 0s; - width: 60px; - float: left; -} - -.progress-container .progress-elm .close { - background: rgba(0, 0, 0, 0) url("/images/sprite.png?1446554103") repeat scroll -428px -487px; - cursor: pointer; - display: inline-block; - float: right; - height: 7px; - margin-right: 3px; - margin-top: 3px; - width: 7px; -} -.progress-container .progress-elm .close:hover { - border: 7px solid #333; - margin-top: -4px; - margin-right: -4px; - background-color: #333; -} -.progress-container .progress-elm .close:active { - border: 7px solid #FFCC00; - margin-top: -4px; - margin-right: -4px; - background-color: #FFCC00; -} - - - - - -.checkbox-toolbar { - float: left !important; -} -/*W -.check-label::before { - background-image: url("/images/sprite.png?1446554103"); - background-position: -232px -9px; - background-repeat: no-repeat; - background-size: 450px auto; - content: ""; - display: inline-block; - height: 16px; - width: 16px; - margin-top: -25px; - - border: 1px solid red; -} -input[type="checkbox"] { - display: none; -} - -.clicked-on.check-label::before, .checkbox-selected .check-label { - background-position: -225px -42px; - content: ""; - display: inline-block; - height: 27px; - left: -6px; - top: -6px; - width: 27px; -} -*/ @media (max-width: 1400px) { .listing li .filename-holder { width: 35%; } } - -@media (max-width: 1450px) { +@media (max-width: 1550px) { .menu div.button.mkfile, .menu div.button.mkdir { display: none; } .menu div.button.mkfile.small, @@ -553,14 +384,13 @@ input[type="checkbox"] { .listing li .filename-holder { max-width: 30%; } } -@media (max-width: 1320px) { +@media (max-width: 1500px) { .menu div.button.del { display: none; } .menu div.button.del.small { display: inline-block; } .listing li .filename-holder { max-width: 25%; } } - -@media (max-width: 1290px) { +@media (max-width: 1450px) { .menu div.button { display: none; } .menu div.button.medium, .menu div.button.small { display: inline-block; } @@ -572,7 +402,7 @@ input[type="checkbox"] { .listing li .mode { display: none; } } -@media (max-width: 890px) { +@media (max-width: 990px) { .window { width: 100%; } .window:nth-of-type(2){ display: none; } .listing li .owner { display: inline-block; } @@ -587,7 +417,7 @@ input[type="checkbox"] { .listing li .filename-holder { max-width: 30%; } } -@media (max-width: 600px) { +@media (max-width: 670px) { .menu div.button { display: none; } .menu div.button.medium, .menu div.button.small { display: inline-block; } @@ -615,123 +445,3 @@ input[type="checkbox"] { } -.subcontext-control.hidden { - display: none !important; -} - -.subcontext-control { - color: red; -} -.subcontext-menu-hidden { - display: none; -} - -.subcontext-menu { - position: absolute; - background-color: yellow; - padding: 10px; - border: 1px solid red; -} - -.subcontext-menu li { - /*float: left;*/ -} - - -.shortcuts { - background: rgba(50, 50, 50, 0.9); - display: inline-block; - position: fixed; - right: 20%; - bottom: 0; - color: #eee; - width: 810px; - border: 1px solid #333; - font-family: arial; - font-size: 13px; -} -.shortcuts .header { - border-bottom: 1px solid #333; - height: 43px; -} -.shortcuts .title { - text-transform: uppercase; - color: #ffcc00; - padding: 7px 0 7px 14px; - display: inline-block; - float: left; - font-size: 11px; - letter-spacing: 3px; - font-weight: bold; - line-height: 30px; -} -.shortcuts .close { - background: url("/images/sprite.png?1446554103") repeat scroll -408px -469px; - cursor: pointer; - display: inline-block; - float: right; - height: 32px; - padding-top: 11px; - width: 46px; -} -.shortcuts .close:hover { - background-color: #000; -.. -} -.shortcuts .close:active { - background-color: #55c9c0; -} -.shortcuts ul { - list-style-type: none; - padding: 30px 20px; - display: inline-block; - float: left; - width: 360px; -} -.shortcuts ul li { - padding: 5px 20px; -} -.shortcuts ul li.step-top { - padding-top: 30px; -} -.shortcuts ul li span { - color: #48F4EF; - display: inline-block; - font-weight: bold; - padding: 0 20px 0 0; - text-align: right; -} -.shortcuts ul li span.bigger { - font-size: 18px; -} -.shortcuts ul.note { - font-style: italic; - color: #9CA484; - width: 700px; - padding-left: 50px; -} -.shortcuts ul.note a { - color: #9CA484; -} - -.to-shortcuts { - display: inline-block; - position: fixed; - top: 95%; - right: 1%; -} -.l-icon-shortcuts { - display: inline-block; - vertical-align: middle; - background-image: url("/images/sprite.png?1446554103"); - width: 35px; - height: 35px; - background-position: -122px -283px; - border-radius: 18px; -} -.l-icon-shortcuts:hover { - background-position: -160px -283px; -} -.l-icon-shortcuts:active { - background-position: -198px -283px; -} diff --git a/web/file_manager/fm_api.php b/web/file_manager/fm_api.php index 009b65f8..0bb0effd 100644 --- a/web/file_manager/fm_api.php +++ b/web/file_manager/fm_api.php @@ -37,17 +37,29 @@ switch ($_REQUEST['action']) { case 'rename_file': $dir = $_REQUEST['dir']; - $item = $_REQUEST['item']; - $target_name = $_REQUEST['target_name']; - print json_encode($fm->renameFile($dir, $item, $target_name)); + $item = $dir . '/' . $_REQUEST['item']; + $target_name = $dir . '/' . $_REQUEST['target_name']; + print json_encode($fm->renameFile($item, $target_name)); break; case 'rename_directory': $dir = $_REQUEST['dir']; + $item = $dir.$_REQUEST['item']; + $target_name = $dir.$_REQUEST['target_name']; + + print json_encode($fm->renameDirectory($item, $target_name)); + break; + + case 'move_file': $item = $_REQUEST['item']; $target_name = $_REQUEST['target_name']; + print json_encode($fm->renameFile($item, $target_name)); + break; - print json_encode($fm->renameDirectory($dir, $item, $target_name)); + case 'move_directory': + $item = $_REQUEST['item']; + $target_name = $_REQUEST['target_name']; + print json_encode($fm->renameDirectory($item, $target_name)); break; case 'delete_files': @@ -98,11 +110,9 @@ switch ($_REQUEST['action']) { break; case 'pack_item': - $dir = $_REQUEST['dir']; - $target_dir = $_REQUEST['dir_target']; - $filename = $_REQUEST['filename']; - $item = $_REQUEST['item']; - print json_encode($fm->packItem($item, $dir, $target_dir, $filename)); + $items = $_REQUEST['items']; + $dst_item = $_REQUEST['dst_item']; + print json_encode($fm->packItem($items, $dst_item)); break; case 'backup': diff --git a/web/file_manager/fm_core.php b/web/file_manager/fm_core.php index 62cb304b..f2b65908 100644 --- a/web/file_manager/fm_core.php +++ b/web/file_manager/fm_core.php @@ -150,13 +150,18 @@ class FileManager { } } - function packItem($item, $dir, $target_dir, $filename) { - $item = $this->formatFullPath($item); - $dst_item = $this->formatFullPath($target_dir); + function packItem($items, $dst_item) { + $items_arr = explode(',', $items); + foreach($items_arr as $key => $item){ + $items_arr[$key] = $this->formatFullPath($item); + } + $items = implode(' ', $items_arr); + $dst_item = $this->formatFullPath($dst_item); $dst_item = str_replace('.tar.gz', '', $dst_item); - exec (VESTA_CMD . "v-add-fs-archive {$this->user} {$dst_item} {$item}", $output, $return_var); +// echo VESTA_CMD . "v-add-fs-archive {$this->user} {$dst_item} {$items}"; + exec (VESTA_CMD . "v-add-fs-archive {$this->user} {$dst_item} {$items}", $output, $return_var); $error = self::check_return_code($return_var, $output); @@ -233,9 +238,12 @@ class FileManager { } } - function renameFile($dir, $item, $target_name) { - $item = $this->formatFullPath($dir . '/' . $item); - $dst_item = $this->formatFullPath($dir . '/' . $target_name); + function renameFile($item, $target_name) { +// $item = $this->formatFullPath($dir . '/' . $item); +// $dst_item = $this->formatFullPath($dir . '/' . $target_name); + + $item = $this->formatFullPath($item); + $dst_item = $this->formatFullPath($target_name); exec (VESTA_CMD . "v-move-fs-file {$this->user} {$item} {$dst_item}", $output, $return_var); @@ -254,9 +262,9 @@ class FileManager { } } - function renameDirectory($dir, $item, $target_name) { - $item = $this->formatFullPath($dir . $item); - $dst_item = $this->formatFullPath($dir . $target_name); + function renameDirectory($item, $target_name) { + $item = $this->formatFullPath($item); + $dst_item = $this->formatFullPath($target_name); if ($item == $dst_item) { return array( diff --git a/web/images/flat_icons.png b/web/images/flat_icons.png index c645adf153be460958598b1a8d32f91a46614111..f40609387e766895e71018bb777ef675b4a43f6c 100644 GIT binary patch literal 14074 zcmZ|01yodD^fr9yPU#eoZUm&k0i?T!5~LfYk&#uD|uI z?_2Nt{@=@*VeUD1Zk)5v-p}*wJ<*!#3V7I5*Z=_FDJjZn0{~JL_@cl>2U}2Wh)=

P$@))a_C^)S2Uq;a01He;2 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 ND9WqKmCKlZ_+LCJ>AnB} diff --git a/web/inc/i18n/ar.php b/web/inc/i18n/ar.php index c04b7f3f..fd7b5c46 100644 --- a/web/inc/i18n/ar.php +++ b/web/inc/i18n/ar.php @@ -591,6 +591,7 @@ $LANG['ar'] = array( 'NEW DIR' => 'مجلد جديد', 'DELETE' => 'حذف', 'RENAME' => 'إعادة تسمية', + 'MOVE' => 'MOVE', 'RIGHTS' => 'الحقوق', 'COPY' => 'نسخ', 'ARCHIVE' => 'ضغط', @@ -611,6 +612,7 @@ $LANG['ar'] = array( 'Copy' => 'نسخ', 'Cancel' => 'إلغاء', 'Rename' => 'إعادة تسمية', + 'Move' => 'Move', 'Change Rights' => 'تغيير الحقوق', 'Delete' => 'حذف', 'Extract' => 'فك ضغط', @@ -621,7 +623,9 @@ $LANG['ar'] = array( 'YOU ARE REMOVING' => 'تقوم بالحذف', 'Delete items' => 'حذف العناصر', 'Copy files' => 'نسخ الملفات', + 'Move files' => 'Move files', 'Are you sure you want to copy' => 'هل أنت متأكد أنك تريد نسخ', + 'Are you sure you want to move' => 'Are you sure you want to move', 'Are you sure you want to delete' => 'هل انت متأكد أنك تريد حذف', 'into' => 'إلى', 'existing files will be replaced' => 'الملفات الموجودة مسبقاً سوف تستبدل', @@ -674,6 +678,7 @@ $LANG['ar'] = array( 'Go to the Top of the File List' => 'إذهب إلى أعلى قائمة الملفات', 'Go to the Last File' => 'إذهب إلى آخر ملف', 'Open File / Enter Directory' => 'فتح ملف / مجلد', + 'Edit File' => 'Edit File', 'Go to Parent Directory' => 'الذهاب للمجلد الأب', 'Select Current File' => 'حدد الملف الحالي', 'Select Bunch of Files' => 'حدد مجموعة ملفات', diff --git a/web/inc/i18n/bs.php b/web/inc/i18n/bs.php index ce9d3008..2801e41b 100644 --- a/web/inc/i18n/bs.php +++ b/web/inc/i18n/bs.php @@ -591,6 +591,7 @@ $LANG['bs'] = array( 'NEW DIR' => 'NEW DIR', 'DELETE' => 'DELETE', 'RENAME' => 'RENAME', + 'MOVE' => 'MOVE', 'RIGHTS' => 'RIGHTS', 'COPY' => 'COPY', 'ARCHIVE' => 'ARCHIVE', @@ -611,6 +612,7 @@ $LANG['bs'] = array( 'Copy' => 'Kopirati', 'Cancel' => 'Odustati', 'Rename' => 'Izmijeniti', + 'Move' => 'Move', 'Change Rights' => 'Change Rights', 'Delete' => 'Izbrisati', 'Extract' => 'Ekstraktovati', @@ -621,7 +623,9 @@ $LANG['bs'] = array( 'YOU ARE REMOVING' => 'YOU ARE REMOVING', 'Delete items' => 'Delete items', 'Copy files' => 'Copy files', + 'Move files' => 'Move files', 'Are you sure you want to copy' => 'Are you sure you want to copy', + 'Are you sure you want to move' => 'Are you sure you want to move', 'Are you sure you want to delete' => 'Are you sure you want to delete', 'into' => 'into', 'existing files will be replaced' => 'existing files will be replaced', @@ -674,6 +678,7 @@ $LANG['bs'] = array( 'Go to the Top of the File List' => 'Go to the Top of the File List', 'Go to the Last File' => 'Go to the Last File', 'Open File / Enter Directory' => 'Open File / Enter Directory', + 'Edit File' => 'Edit File', 'Go to Parent Directory' => 'Go to Parent Directory', 'Select Current File' => 'Select Current File', 'Select Bunch of Files' => 'Select Bunch of Files', diff --git a/web/inc/i18n/cn.php b/web/inc/i18n/cn.php index 1234ada8..0e3b89cd 100644 --- a/web/inc/i18n/cn.php +++ b/web/inc/i18n/cn.php @@ -591,6 +591,7 @@ $LANG['cn'] = array( 'NEW DIR' => 'NEW DIR', 'DELETE' => 'DELETE', 'RENAME' => 'RENAME', + 'MOVE' => 'MOVE', 'RIGHTS' => 'RIGHTS', 'COPY' => 'COPY', 'ARCHIVE' => 'ARCHIVE', @@ -611,6 +612,7 @@ $LANG['cn'] = array( 'Copy' => 'Copy', 'Cancel' => 'Cancel', 'Rename' => 'Rename', + 'Move' => 'Move', 'Change Rights' => 'Change Rights', 'Delete' => 'Delete', 'Extract' => 'Extract', @@ -621,7 +623,9 @@ $LANG['cn'] = array( 'YOU ARE REMOVING' => 'YOU ARE REMOVING', 'Delete items' => 'Delete items', 'Copy files' => 'Copy files', + 'Move files' => 'Move files', 'Are you sure you want to copy' => 'Are you sure you want to copy', + 'Are you sure you want to move' => 'Are you sure you want to move', 'Are you sure you want to delete' => 'Are you sure you want to delete', 'into' => 'into', 'existing files will be replaced' => 'existing files will be replaced', @@ -674,6 +678,7 @@ $LANG['cn'] = array( 'Go to the Top of the File List' => 'Go to the Top of the File List', 'Go to the Last File' => 'Go to the Last File', 'Open File / Enter Directory' => 'Open File / Enter Directory', + 'Edit File' => 'Edit File', 'Go to Parent Directory' => 'Go to Parent Directory', 'Select Current File' => 'Select Current File', 'Select Bunch of Files' => 'Select Bunch of Files', diff --git a/web/inc/i18n/cz.php b/web/inc/i18n/cz.php index 1c81a135..29e728c9 100644 --- a/web/inc/i18n/cz.php +++ b/web/inc/i18n/cz.php @@ -592,6 +592,7 @@ $LANG['cz'] = array( 'NEW DIR' => 'NEW DIR', 'DELETE' => 'DELETE', 'RENAME' => 'RENAME', + 'MOVE' => 'MOVE', 'RIGHTS' => 'RIGHTS', 'COPY' => 'COPY', 'ARCHIVE' => 'ARCHIVE', @@ -612,6 +613,7 @@ $LANG['cz'] = array( 'Copy' => 'Copy', 'Cancel' => 'Cancel', 'Rename' => 'Rename', + 'Move' => 'Move', 'Change Rights' => 'Change Rights', 'Delete' => 'Delete', 'Extract' => 'Extract', @@ -622,7 +624,9 @@ $LANG['cz'] = array( 'YOU ARE REMOVING' => 'YOU ARE REMOVING', 'Delete items' => 'Delete items', 'Copy files' => 'Copy files', + 'Move files' => 'Move files', 'Are you sure you want to copy' => 'Are you sure you want to copy', + 'Are you sure you want to move' => 'Are you sure you want to move', 'Are you sure you want to delete' => 'Are you sure you want to delete', 'into' => 'into', 'existing files will be replaced' => 'existing files will be replaced', @@ -675,6 +679,7 @@ $LANG['cz'] = array( 'Go to the Top of the File List' => 'Go to the Top of the File List', 'Go to the Last File' => 'Go to the Last File', 'Open File / Enter Directory' => 'Open File / Enter Directory', + 'Edit File' => 'Edit File', 'Go to Parent Directory' => 'Go to Parent Directory', 'Select Current File' => 'Select Current File', 'Select Bunch of Files' => 'Select Bunch of Files', diff --git a/web/inc/i18n/da.php b/web/inc/i18n/da.php index 6fd4eb89..2650e694 100644 --- a/web/inc/i18n/da.php +++ b/web/inc/i18n/da.php @@ -593,6 +593,7 @@ $LANG['da'] = array( 'NEW DIR' => 'NEW DIR', 'DELETE' => 'DELETE', 'RENAME' => 'RENAME', + 'MOVE' => 'MOVE', 'RIGHTS' => 'RIGHTS', 'COPY' => 'COPY', 'ARCHIVE' => 'ARCHIVE', @@ -613,6 +614,7 @@ $LANG['da'] = array( 'Copy' => 'Copy', 'Cancel' => 'Cancel', 'Rename' => 'Rename', + 'Move' => 'Move', 'Change Rights' => 'Change Rights', 'Delete' => 'Delete', 'Extract' => 'Extract', @@ -623,7 +625,9 @@ $LANG['da'] = array( 'YOU ARE REMOVING' => 'YOU ARE REMOVING', 'Delete items' => 'Delete items', 'Copy files' => 'Copy files', + 'Move files' => 'Move files', 'Are you sure you want to copy' => 'Are you sure you want to copy', + 'Are you sure you want to move' => 'Are you sure you want to move', 'Are you sure you want to delete' => 'Are you sure you want to delete', 'into' => 'into', 'existing files will be replaced' => 'existing files will be replaced', @@ -676,6 +680,7 @@ $LANG['da'] = array( 'Go to the Top of the File List' => 'Go to the Top of the File List', 'Go to the Last File' => 'Go to the Last File', 'Open File / Enter Directory' => 'Open File / Enter Directory', + 'Edit File' => 'Edit File', 'Go to Parent Directory' => 'Go to Parent Directory', 'Select Current File' => 'Select Current File', 'Select Bunch of Files' => 'Select Bunch of Files', diff --git a/web/inc/i18n/de.php b/web/inc/i18n/de.php index 1c391505..32511012 100644 --- a/web/inc/i18n/de.php +++ b/web/inc/i18n/de.php @@ -591,6 +591,7 @@ $LANG['de'] = array( 'NEW DIR' => 'NEW DIR', 'DELETE' => 'DELETE', 'RENAME' => 'RENAME', + 'MOVE' => 'MOVE', 'RIGHTS' => 'RIGHTS', 'COPY' => 'COPY', 'ARCHIVE' => 'ARCHIVE', @@ -611,6 +612,7 @@ $LANG['de'] = array( 'Copy' => 'Copy', 'Cancel' => 'Cancel', 'Rename' => 'Rename', + 'Move' => 'Move', 'Change Rights' => 'Change Rights', 'Delete' => 'Delete', 'Extract' => 'Extract', @@ -621,7 +623,9 @@ $LANG['de'] = array( 'YOU ARE REMOVING' => 'YOU ARE REMOVING', 'Delete items' => 'Delete items', 'Copy files' => 'Copy files', + 'Move files' => 'Move files', 'Are you sure you want to copy' => 'Are you sure you want to copy', + 'Are you sure you want to move' => 'Are you sure you want to move', 'Are you sure you want to delete' => 'Are you sure you want to delete', 'into' => 'into', 'existing files will be replaced' => 'existing files will be replaced', @@ -674,6 +678,7 @@ $LANG['de'] = array( 'Go to the Top of the File List' => 'Go to the Top of the File List', 'Go to the Last File' => 'Go to the Last File', 'Open File / Enter Directory' => 'Open File / Enter Directory', + 'Edit File' => 'Edit File', 'Go to Parent Directory' => 'Go to Parent Directory', 'Select Current File' => 'Select Current File', 'Select Bunch of Files' => 'Select Bunch of Files', diff --git a/web/inc/i18n/el.php b/web/inc/i18n/el.php index 22832944..4413cca0 100644 --- a/web/inc/i18n/el.php +++ b/web/inc/i18n/el.php @@ -592,6 +592,7 @@ $LANG['el'] = array( 'NEW DIR' => 'NEW DIR', 'DELETE' => 'DELETE', 'RENAME' => 'RENAME', + 'MOVE' => 'MOVE', 'RIGHTS' => 'RIGHTS', 'COPY' => 'COPY', 'ARCHIVE' => 'ARCHIVE', @@ -612,6 +613,7 @@ $LANG['el'] = array( 'Copy' => 'Copy', 'Cancel' => 'Cancel', 'Rename' => 'Rename', + 'Move' => 'Move', 'Change Rights' => 'Change Rights', 'Delete' => 'Delete', 'Extract' => 'Extract', @@ -622,7 +624,9 @@ $LANG['el'] = array( 'YOU ARE REMOVING' => 'YOU ARE REMOVING', 'Delete items' => 'Delete items', 'Copy files' => 'Copy files', + 'Move files' => 'Move files', 'Are you sure you want to copy' => 'Are you sure you want to copy', + 'Are you sure you want to move' => 'Are you sure you want to move', 'Are you sure you want to delete' => 'Are you sure you want to delete', 'into' => 'into', 'existing files will be replaced' => 'existing files will be replaced', @@ -675,6 +679,7 @@ $LANG['el'] = array( 'Go to the Top of the File List' => 'Go to the Top of the File List', 'Go to the Last File' => 'Go to the Last File', 'Open File / Enter Directory' => 'Open File / Enter Directory', + 'Edit File' => 'Edit File', 'Go to Parent Directory' => 'Go to Parent Directory', 'Select Current File' => 'Select Current File', 'Select Bunch of Files' => 'Select Bunch of Files', diff --git a/web/inc/i18n/en.php b/web/inc/i18n/en.php index b9c52301..f40283d7 100644 --- a/web/inc/i18n/en.php +++ b/web/inc/i18n/en.php @@ -591,6 +591,7 @@ $LANG['en'] = array( 'NEW DIR' => 'NEW DIR', 'DELETE' => 'DELETE', 'RENAME' => 'RENAME', + 'MOVE' => 'MOVE', 'RIGHTS' => 'RIGHTS', 'COPY' => 'COPY', 'ARCHIVE' => 'ARCHIVE', @@ -611,6 +612,7 @@ $LANG['en'] = array( 'Copy' => 'Copy', 'Cancel' => 'Cancel', 'Rename' => 'Rename', + 'Move' => 'Move', 'Change Rights' => 'Change Rights', 'Delete' => 'Delete', 'Extract' => 'Extract', @@ -621,7 +623,9 @@ $LANG['en'] = array( 'YOU ARE REMOVING' => 'YOU ARE REMOVING', 'Delete items' => 'Delete items', 'Copy files' => 'Copy files', + 'Move files' => 'Move files', 'Are you sure you want to copy' => 'Are you sure you want to copy', + 'Are you sure you want to move' => 'Are you sure you want to move', 'Are you sure you want to delete' => 'Are you sure you want to delete', 'into' => 'into', 'existing files will be replaced' => 'existing files will be replaced', @@ -674,6 +678,7 @@ $LANG['en'] = array( 'Go to the Top of the File List' => 'Go to the Top of the File List', 'Go to the Last File' => 'Go to the Last File', 'Open File / Enter Directory' => 'Open File / Enter Directory', + 'Edit File' => 'Edit File', 'Go to Parent Directory' => 'Go to Parent Directory', 'Select Current File' => 'Select Current File', 'Select Bunch of Files' => 'Select Bunch of Files', diff --git a/web/inc/i18n/es.php b/web/inc/i18n/es.php index 6a044cab..2e9f7ec9 100644 --- a/web/inc/i18n/es.php +++ b/web/inc/i18n/es.php @@ -591,6 +591,7 @@ $LANG['es'] = array( 'NEW DIR' => 'NEW DIR', 'DELETE' => 'DELETE', 'RENAME' => 'RENAME', + 'MOVE' => 'MOVE', 'RIGHTS' => 'RIGHTS', 'COPY' => 'COPY', 'ARCHIVE' => 'ARCHIVE', @@ -611,6 +612,7 @@ $LANG['es'] = array( 'Copy' => 'Copy', 'Cancel' => 'Cancel', 'Rename' => 'Rename', + 'Move' => 'Move', 'Change Rights' => 'Change Rights', 'Delete' => 'Delete', 'Extract' => 'Extract', @@ -621,7 +623,9 @@ $LANG['es'] = array( 'YOU ARE REMOVING' => 'YOU ARE REMOVING', 'Delete items' => 'Delete items', 'Copy files' => 'Copy files', + 'Move files' => 'Move files', 'Are you sure you want to copy' => 'Are you sure you want to copy', + 'Are you sure you want to move' => 'Are you sure you want to move', 'Are you sure you want to delete' => 'Are you sure you want to delete', 'into' => 'into', 'existing files will be replaced' => 'existing files will be replaced', @@ -674,6 +678,7 @@ $LANG['es'] = array( 'Go to the Top of the File List' => 'Go to the Top of the File List', 'Go to the Last File' => 'Go to the Last File', 'Open File / Enter Directory' => 'Open File / Enter Directory', + 'Edit File' => 'Edit File', 'Go to Parent Directory' => 'Go to Parent Directory', 'Select Current File' => 'Select Current File', 'Select Bunch of Files' => 'Select Bunch of Files', diff --git a/web/inc/i18n/fa.php b/web/inc/i18n/fa.php index 28d74e70..9911a601 100644 --- a/web/inc/i18n/fa.php +++ b/web/inc/i18n/fa.php @@ -593,6 +593,7 @@ $LANG['fa'] = array( 'NEW DIR' => 'پوشه تازه', 'DELETE' => 'حذف', 'RENAME' => 'تغییر نام', + 'MOVE' => 'MOVE', 'RIGHTS' => 'RIGHTS', 'COPY' => 'رونوشت', 'ARCHIVE' => 'بايگاني', @@ -613,6 +614,7 @@ $LANG['fa'] = array( 'Copy' => 'كپي', 'Cancel' => 'لغو', 'Rename' => 'تغيير نام', + 'Move' => 'Move', 'Change Rights' => 'Change Rights', 'Delete' => 'حذف', 'Extract' => 'بیرون کشیدن', @@ -623,7 +625,9 @@ $LANG['fa'] = array( 'YOU ARE REMOVING' => 'YOU ARE REMOVING', 'Delete items' => 'Delete items', 'Copy files' => 'Copy files', + 'Move files' => 'Move files', 'Are you sure you want to copy' => 'آيا از كپي كردن اطمينان داريد؟', + 'Are you sure you want to move' => 'Are you sure you want to move', 'Are you sure you want to delete' => 'آيا از حذف اطمينان داريد؟', 'into' => 'به', 'existing files will be replaced' => 'پرونده های موجود جایگزین خواهد شد', @@ -676,6 +680,7 @@ $LANG['fa'] = array( 'Go to the Top of the File List' => 'رفتن به ابتداي فهرست پرونده ها', 'Go to the Last File' => 'رفتن به آخرين پرونده', 'Open File / Enter Directory' => 'بازگردن پرونده/ورود به پوشه', + 'Edit File' => 'Edit File', 'Go to Parent Directory' => 'رفتن به پوشه بالايي', 'Select Current File' => 'انتخاب فايل جاري', 'Select Bunch of Files' => 'انتخاب دسته اي پرونده ها', diff --git a/web/inc/i18n/fi.php b/web/inc/i18n/fi.php index 11d86a7c..5a16feca 100644 --- a/web/inc/i18n/fi.php +++ b/web/inc/i18n/fi.php @@ -592,6 +592,7 @@ $LANG['fi'] = array( 'NEW DIR' => 'NEW DIR', 'DELETE' => 'DELETE', 'RENAME' => 'RENAME', + 'MOVE' => 'MOVE', 'RIGHTS' => 'RIGHTS', 'COPY' => 'COPY', 'ARCHIVE' => 'ARCHIVE', @@ -612,6 +613,7 @@ $LANG['fi'] = array( 'Copy' => 'Copy', 'Cancel' => 'Cancel', 'Rename' => 'Rename', + 'Move' => 'Move', 'Change Rights' => 'Change Rights', 'Delete' => 'Delete', 'Extract' => 'Extract', @@ -622,7 +624,9 @@ $LANG['fi'] = array( 'YOU ARE REMOVING' => 'YOU ARE REMOVING', 'Delete items' => 'Delete items', 'Copy files' => 'Copy files', + 'Move files' => 'Move files', 'Are you sure you want to copy' => 'Are you sure you want to copy', + 'Are you sure you want to move' => 'Are you sure you want to move', 'Are you sure you want to delete' => 'Are you sure you want to delete', 'into' => 'into', 'existing files will be replaced' => 'existing files will be replaced', @@ -675,6 +679,7 @@ $LANG['fi'] = array( 'Go to the Top of the File List' => 'Go to the Top of the File List', 'Go to the Last File' => 'Go to the Last File', 'Open File / Enter Directory' => 'Open File / Enter Directory', + 'Edit File' => 'Edit File', 'Go to Parent Directory' => 'Go to Parent Directory', 'Select Current File' => 'Select Current File', 'Select Bunch of Files' => 'Select Bunch of Files', diff --git a/web/inc/i18n/fr.php b/web/inc/i18n/fr.php index 6b2c6a9b..f06f61e5 100644 --- a/web/inc/i18n/fr.php +++ b/web/inc/i18n/fr.php @@ -591,6 +591,7 @@ $LANG['fr'] = array( 'NEW DIR' => 'RÉP.', 'DELETE' => 'SUPPR', 'RENAME' => 'RENOMMER', + 'MOVE' => 'MOVE', 'RIGHTS' => 'RIGHTS', 'COPY' => 'COPIER', 'ARCHIVE' => 'ARCHIVER', @@ -611,6 +612,7 @@ $LANG['fr'] = array( 'Copy' => 'Copier', 'Cancel' => 'Annuler', 'Rename' => 'Renommer', + 'MOVE' => 'Move', 'Change Rights' => 'Change Rights', 'Delete' => 'Supprimer', 'Extract' => 'Extraire', @@ -621,7 +623,9 @@ $LANG['fr'] = array( 'YOU ARE REMOVING' => 'YOU ARE REMOVING', 'Delete items' => 'Delete items', 'Copy files' => 'Copy files', + 'Move files' => 'Move files', 'Are you sure you want to copy' => 'Are you sure you want to copy', + 'Are you sure you want to move' => 'Are you sure you want to move', 'Are you sure you want to delete' => 'Are you sure you want to delete', 'into' => 'into', 'existing files will be replaced' => 'existing files will be replaced', @@ -674,6 +678,7 @@ $LANG['fr'] = array( 'Go to the Top of the File List' => 'Go to the Top of the File List', 'Go to the Last File' => 'Go to the Last File', 'Open File / Enter Directory' => 'Open File / Enter Directory', + 'Edit File' => 'Edit File', 'Go to Parent Directory' => 'Go to Parent Directory', 'Select Current File' => 'Select Current File', 'Select Bunch of Files' => 'Select Bunch of Files', diff --git a/web/inc/i18n/hu.php b/web/inc/i18n/hu.php index a9b99bd9..1fed0348 100644 --- a/web/inc/i18n/hu.php +++ b/web/inc/i18n/hu.php @@ -595,6 +595,7 @@ $LANG['hu'] = array( 'NEW DIR' => 'NEW DIR', 'DELETE' => 'DELETE', 'RENAME' => 'RENAME', + 'MOVE' => 'MOVE', 'RIGHTS' => 'RIGHTS', 'COPY' => 'COPY', 'ARCHIVE' => 'ARCHIVE', @@ -615,6 +616,7 @@ $LANG['hu'] = array( 'Copy' => 'Copy', 'Cancel' => 'Cancel', 'Rename' => 'Rename', + 'Move' => 'Move', 'Change Rights' => 'Change Rights', 'Delete' => 'Delete', 'Extract' => 'Extract', @@ -625,7 +627,9 @@ $LANG['hu'] = array( 'YOU ARE REMOVING' => 'YOU ARE REMOVING', 'Delete items' => 'Delete items', 'Copy files' => 'Copy files', + 'Move files' => 'Move files', 'Are you sure you want to copy' => 'Are you sure you want to copy', + 'Are you sure you want to move' => 'Are you sure you want to move', 'Are you sure you want to delete' => 'Are you sure you want to delete', 'into' => 'into', 'existing files will be replaced' => 'existing files will be replaced', @@ -678,6 +682,7 @@ $LANG['hu'] = array( 'Go to the Top of the File List' => 'Go to the Top of the File List', 'Go to the Last File' => 'Go to the Last File', 'Open File / Enter Directory' => 'Open File / Enter Directory', + 'Edit File' => 'Edit File', 'Go to Parent Directory' => 'Go to Parent Directory', 'Select Current File' => 'Select Current File', 'Select Bunch of Files' => 'Select Bunch of Files', diff --git a/web/inc/i18n/id.php b/web/inc/i18n/id.php index f1965d9f..68343ab7 100644 --- a/web/inc/i18n/id.php +++ b/web/inc/i18n/id.php @@ -594,6 +594,7 @@ $LANG['id'] = array( 'NEW DIR' => 'DIREKTORI BARU', 'DELETE' => 'HAPUS', 'RENAME' => 'GANTI', + 'MOVE' => 'MOVE', 'RIGHTS' => 'RIGHTS', 'COPY' => 'SALIN', 'ARCHIVE' => 'ARSIP', @@ -614,6 +615,7 @@ $LANG['id'] = array( 'Copy' => 'Salin', 'Cancel' => 'Batal', 'Rename' => 'Ganti nama', + 'Move' => 'Move', 'Change Rights' => 'Change Rights', 'Delete' => 'Hapus', 'Extract' => 'Ekstrak', @@ -624,7 +626,9 @@ $LANG['id'] = array( 'YOU ARE REMOVING' => 'YOU ARE REMOVING', 'Delete items' => 'Delete items', 'Copy files' => 'Copy files', + 'Move files' => 'Move files', 'Are you sure you want to copy' => 'Yakin mau disalin', + 'Are you sure you want to move' => 'Are you sure you want to move', 'Are you sure you want to delete' => 'Yakin mau dihapus', 'into' => 'ke', 'existing files will be replaced' => 'file yg sudah ada akan diganti', @@ -677,6 +681,7 @@ $LANG['id'] = array( 'Go to the Top of the File List' => 'Pindah Ke atas dari Daftar File', 'Go to the Last File' => 'Pindah File terakhir', 'Open File / Enter Directory' => 'Buka File/Masuk ke Directory', + 'Edit File' => 'Edit File', 'Go to Parent Directory' => 'Ke Parent Directory', 'Select Current File' => 'Pilih File ini', 'Select Bunch of Files' => 'Pilih Bunch of Files', diff --git a/web/inc/i18n/it.php b/web/inc/i18n/it.php index 23fdba5d..566d4c3c 100644 --- a/web/inc/i18n/it.php +++ b/web/inc/i18n/it.php @@ -592,6 +592,7 @@ $LANG['it'] = array( 'NEW DIR' => 'NEW DIR', 'DELETE' => 'DELETE', 'RENAME' => 'RENAME', + 'MOVE' => 'MOVE', 'RIGHTS' => 'RIGHTS', 'COPY' => 'COPY', 'ARCHIVE' => 'ARCHIVE', @@ -612,6 +613,7 @@ $LANG['it'] = array( 'Copy' => 'Copy', 'Cancel' => 'Cancel', 'Rename' => 'Rename', + 'Move' => 'Move', 'Change Rights' => 'Change Rights', 'Delete' => 'Delete', 'Extract' => 'Extract', @@ -622,7 +624,9 @@ $LANG['it'] = array( 'YOU ARE REMOVING' => 'YOU ARE REMOVING', 'Delete items' => 'Delete items', 'Copy files' => 'Copy files', + 'Move files' => 'Move files', 'Are you sure you want to copy' => 'Are you sure you want to copy', + 'Are you sure you want to move' => 'Are you sure you want to move', 'Are you sure you want to delete' => 'Are you sure you want to delete', 'into' => 'into', 'existing files will be replaced' => 'existing files will be replaced', @@ -675,6 +679,7 @@ $LANG['it'] = array( 'Go to the Top of the File List' => 'Go to the Top of the File List', 'Go to the Last File' => 'Go to the Last File', 'Open File / Enter Directory' => 'Open File / Enter Directory', + 'Edit File' => 'Edit File', 'Go to Parent Directory' => 'Go to Parent Directory', 'Select Current File' => 'Select Current File', 'Select Bunch of Files' => 'Select Bunch of Files', diff --git a/web/inc/i18n/ja.php b/web/inc/i18n/ja.php index c425a04c..459f948f 100644 --- a/web/inc/i18n/ja.php +++ b/web/inc/i18n/ja.php @@ -591,6 +591,7 @@ $LANG['ja'] = array( 'NEW DIR' => 'ディレクトリの作成', 'DELETE' => '削除', 'RENAME' => '名前の変更', + 'MOVE' => 'MOVE', 'RIGHTS' => '権限', 'COPY' => 'コピー', 'ARCHIVE' => 'アーカイブ', @@ -611,6 +612,7 @@ $LANG['ja'] = array( 'Copy' => 'コピー', 'Cancel' => 'キャンセル', 'Rename' => '名前の変更', + 'Move' => 'Move', 'Change Rights' => '権限の変更', 'Delete' => '削除', 'Extract' => '展開', @@ -621,7 +623,9 @@ $LANG['ja'] = array( 'YOU ARE REMOVING' => '削除中', 'Delete items' => '項目の削除', 'Copy files' => 'ファイルのコピー', + 'Move files' => 'Move files', 'Are you sure you want to copy' => '次のファイルをコピーしてもよろしいですか', + 'Are you sure you want to move' => 'Are you sure you want to move', 'Are you sure you want to delete' => '次のファイルを削除してもよろしいですか', 'into' => 'から', 'existing files will be replaced' => '既存のファイルは置き換えられます', @@ -674,6 +678,7 @@ $LANG['ja'] = array( 'Go to the Top of the File List' => 'ファイルリストの先頭に移動する', 'Go to the Last File' => '最後のファイルに移動する', 'Open File / Enter Directory' => 'ファイルを開く / ディレクトリに入る', + 'Edit File' => 'Edit File', 'Go to Parent Directory' => '親ディレクトリに移動する', 'Select Current File' => 'ファイルを選択する', 'Select Bunch of Files' => 'ファイルを範囲選択する', diff --git a/web/inc/i18n/nl.php b/web/inc/i18n/nl.php index 5eff2d3e..9cd78966 100644 --- a/web/inc/i18n/nl.php +++ b/web/inc/i18n/nl.php @@ -592,6 +592,7 @@ $LANG['nl'] = array( 'NEW DIR' => 'NEW DIR', 'DELETE' => 'DELETE', 'RENAME' => 'RENAME', + 'MOVE' => 'MOVE', 'RIGHTS' => 'RIGHTS', 'COPY' => 'COPY', 'ARCHIVE' => 'ARCHIVE', @@ -612,6 +613,7 @@ $LANG['nl'] = array( 'Copy' => 'Copy', 'Cancel' => 'Cancel', 'Rename' => 'Rename', + 'Move' => 'Move', 'Change Rights' => 'Change Rights', 'Delete' => 'Delete', 'Extract' => 'Extract', @@ -622,7 +624,9 @@ $LANG['nl'] = array( 'YOU ARE REMOVING' => 'YOU ARE REMOVING', 'Delete items' => 'Delete items', 'Copy files' => 'Copy files', + 'Move files' => 'Move files', 'Are you sure you want to copy' => 'Are you sure you want to copy', + 'Are you sure you want to move' => 'Are you sure you want to move', 'Are you sure you want to delete' => 'Are you sure you want to delete', 'into' => 'into', 'existing files will be replaced' => 'existing files will be replaced', @@ -675,6 +679,7 @@ $LANG['nl'] = array( 'Go to the Top of the File List' => 'Go to the Top of the File List', 'Go to the Last File' => 'Go to the Last File', 'Open File / Enter Directory' => 'Open File / Enter Directory', + 'Edit File' => 'Edit File', 'Go to Parent Directory' => 'Go to Parent Directory', 'Select Current File' => 'Select Current File', 'Select Bunch of Files' => 'Select Bunch of Files', diff --git a/web/inc/i18n/no.php b/web/inc/i18n/no.php index cd55ccf5..c583d522 100644 --- a/web/inc/i18n/no.php +++ b/web/inc/i18n/no.php @@ -592,6 +592,7 @@ $LANG['no'] = array( 'NEW DIR' => 'NEW DIR', 'DELETE' => 'DELETE', 'RENAME' => 'RENAME', + 'MOVE' => 'MOVE', 'RIGHTS' => 'RIGHTS', 'COPY' => 'COPY', 'ARCHIVE' => 'ARCHIVE', @@ -612,6 +613,7 @@ $LANG['no'] = array( 'Copy' => 'Copy', 'Cancel' => 'Cancel', 'Rename' => 'Rename', + 'Move' => 'Move', 'Change Rights' => 'Change Rights', 'Delete' => 'Delete', 'Extract' => 'Extract', @@ -622,7 +624,9 @@ $LANG['no'] = array( 'YOU ARE REMOVING' => 'YOU ARE REMOVING', 'Delete items' => 'Delete items', 'Copy files' => 'Copy files', + 'Move files' => 'Move files', 'Are you sure you want to copy' => 'Are you sure you want to copy', + 'Are you sure you want to move' => 'Are you sure you want to move', 'Are you sure you want to delete' => 'Are you sure you want to delete', 'into' => 'into', 'existing files will be replaced' => 'existing files will be replaced', @@ -675,6 +679,7 @@ $LANG['no'] = array( 'Go to the Top of the File List' => 'Go to the Top of the File List', 'Go to the Last File' => 'Go to the Last File', 'Open File / Enter Directory' => 'Open File / Enter Directory', + 'Edit File' => 'Edit File', 'Go to Parent Directory' => 'Go to Parent Directory', 'Select Current File' => 'Select Current File', 'Select Bunch of Files' => 'Select Bunch of Files', diff --git a/web/inc/i18n/pl.php b/web/inc/i18n/pl.php index d4d509d5..3d4bd28a 100644 --- a/web/inc/i18n/pl.php +++ b/web/inc/i18n/pl.php @@ -591,6 +591,7 @@ $LANG['pl'] = array( 'NEW DIR' => 'NOWY FOLDER', 'DELETE' => 'USUŃ', 'RENAME' => 'ZMIEŃ NAZWĘ', + 'MOVE' => 'MOVE', 'RIGHTS' => 'RIGHTS', 'COPY' => 'KOPIUJ', 'ARCHIVE' => 'ARCHIWIZUJ', @@ -611,6 +612,7 @@ $LANG['pl'] = array( 'Copy' => 'Kopiuj', 'Cancel' => 'Anuluj', 'Rename' => 'Zmień nazwę', + 'Move' => 'Move', 'Change Rights' => 'Change Rights', 'Delete' => 'Usuń', 'Extract' => 'Rozpakuj', @@ -621,7 +623,9 @@ $LANG['pl'] = array( 'YOU ARE REMOVING' => 'YOU ARE REMOVING', 'Delete items' => 'Delete items', 'Copy files' => 'Copy files', + 'Move files' => 'Move files', 'Are you sure you want to copy' => 'Czy jesteś pewny, że chcesz skopiować?', + 'Are you sure you want to move' => 'Are you sure you want to move', 'Are you sure you want to delete' => 'Czy jesteś pewny, że chcesz usunąć?', 'into' => 'do', 'existing files will be replaced' => 'istniejące pliki zostaną zastąpione', @@ -674,6 +678,7 @@ $LANG['pl'] = array( 'Go to the Top of the File List' => 'Przejdź na górę listy plików', 'Go to the Last File' => 'Przejdź do ostatniego pliku', 'Open File / Enter Directory' => 'Otwórz plik/folder', + 'Edit File' => 'Edit File', 'Go to Parent Directory' => 'Przejdź do katalogu nadrzędnego', 'Select Current File' => 'Wybierz aktywny plik', 'Select Bunch of Files' => 'Wybierz kilka plików', diff --git a/web/inc/i18n/pt-BR.php b/web/inc/i18n/pt-BR.php index 94248614..0a4929fa 100644 --- a/web/inc/i18n/pt-BR.php +++ b/web/inc/i18n/pt-BR.php @@ -591,6 +591,7 @@ $LANG['pt-BR'] = array( 'NEW DIR' => 'NOVO DIR', 'DELETE' => 'DELETAR', 'RENAME' => 'RENOMEAR', + 'MOVE' => 'MOVE', 'RIGHTS' => 'RIGHTS', 'COPY' => 'COPIAR', 'ARCHIVE' => 'ARQUIVAR', @@ -611,6 +612,7 @@ $LANG['pt-BR'] = array( 'Copy' => 'Copiar', 'Cancel' => 'Cancelar', 'Rename' => 'Renomear', + 'Move' => 'Move', 'Change Rights' => 'Change Rights', 'Delete' => 'Deletar', 'Extract' => 'Extrair', @@ -621,7 +623,9 @@ $LANG['pt-BR'] = array( 'YOU ARE REMOVING' => 'YOU ARE REMOVING', 'Delete items' => 'Delete items', 'Copy files' => 'Copy files', + 'Move files' => 'Move files', 'Are you sure you want to copy' => 'Tem certeza que deseja copiar', + 'Are you sure you want to move' => 'Are you sure you want to move', 'Are you sure you want to delete' => 'Tem certeza que deseja deletar', 'into' => 'dentro', 'existing files will be replaced' => 'arquivos existentes serão substituídos', @@ -674,6 +678,7 @@ $LANG['pt-BR'] = array( 'Go to the Top of the File List' => 'Ir para o Início da Lista de Arquivo', 'Go to the Last File' => 'Ir para o último Arquivo', 'Open File / Enter Directory' => 'Abrir Arquivo/Digitar Diretório', + 'Edit File' => 'Edit File', 'Go to Parent Directory' => 'Ir para o diretório principal', 'Select Current File' => 'Selecionar o Arquivo Atual', 'Select Bunch of Files' => 'Selecionar Vários Arquivos', diff --git a/web/inc/i18n/pt.php b/web/inc/i18n/pt.php index 76b8a657..dc78e38a 100644 --- a/web/inc/i18n/pt.php +++ b/web/inc/i18n/pt.php @@ -591,6 +591,7 @@ $LANG['pt'] = array( 'NEW DIR' => 'NOVO DIR', 'DELETE' => 'DELETAR', 'RENAME' => 'RENOMEAR', + 'MOVE' => 'MOVE', 'RIGHTS' => 'RIGHTS', 'COPY' => 'COPIAR', 'ARCHIVE' => 'ARQUIVAR', @@ -611,6 +612,7 @@ $LANG['pt'] = array( 'Copy' => 'Copiar', 'Cancel' => 'Cancelar', 'Rename' => 'Renomear', + 'Move' => 'Move', 'Change Rights' => 'Change Rights', 'Delete' => 'Deletar', 'Extract' => 'Extrair', @@ -621,7 +623,9 @@ $LANG['pt'] = array( 'YOU ARE REMOVING' => 'YOU ARE REMOVING', 'Delete items' => 'Delete items', 'Copy files' => 'Copy files', + 'Move files' => 'Move files', 'Are you sure you want to copy' => 'Tem certeza que deseja copiar', + 'Are you sure you want to move' => 'Are you sure you want to move', 'Are you sure you want to delete' => 'Tem certeza que deseja deletar', 'into' => 'dentro', 'existing files will be replaced' => 'arquivos existentes serão substituídos', @@ -674,6 +678,7 @@ $LANG['pt'] = array( 'Go to the Top of the File List' => 'Ir para o Início da Lista de Arquivo', 'Go to the Last File' => 'Ir para o último Arquivo', 'Open File / Enter Directory' => 'Abrir Arquivo/Digitar Diretório', + 'Edit File' => 'Edit File', 'Go to Parent Directory' => 'Ir para o diretório principal', 'Select Current File' => 'Selecionar o Arquivo Atual', 'Select Bunch of Files' => 'Selecionar Vários Arquivos', diff --git a/web/inc/i18n/ro.php b/web/inc/i18n/ro.php index cb9fd788..77e0eb8f 100644 --- a/web/inc/i18n/ro.php +++ b/web/inc/i18n/ro.php @@ -592,6 +592,7 @@ $LANG['ro'] = array( 'NEW DIR' => 'NEW DIR', 'DELETE' => 'DELETE', 'RENAME' => 'RENAME', + 'MOVE' => 'MOVE', 'RIGHTS' => 'RIGHTS', 'COPY' => 'COPY', 'ARCHIVE' => 'ARCHIVE', @@ -612,6 +613,7 @@ $LANG['ro'] = array( 'Copy' => 'Copy', 'Cancel' => 'Cancel', 'Rename' => 'Rename', + 'Move' => 'Move', 'Change Rights' => 'Change Rights', 'Delete' => 'Delete', 'Extract' => 'Extract', @@ -622,7 +624,9 @@ $LANG['ro'] = array( 'YOU ARE REMOVING' => 'YOU ARE REMOVING', 'Delete items' => 'Delete items', 'Copy files' => 'Copy files', + 'Move files' => 'Move files', 'Are you sure you want to copy' => 'Are you sure you want to copy', + 'Are you sure you want to move' => 'Are you sure you want to move', 'Are you sure you want to delete' => 'Are you sure you want to delete', 'into' => 'into', 'existing files will be replaced' => 'existing files will be replaced', @@ -675,6 +679,7 @@ $LANG['ro'] = array( 'Go to the Top of the File List' => 'Go to the Top of the File List', 'Go to the Last File' => 'Go to the Last File', 'Open File / Enter Directory' => 'Open File / Enter Directory', + 'Edit File' => 'Edit File', 'Go to Parent Directory' => 'Go to Parent Directory', 'Select Current File' => 'Select Current File', 'Select Bunch of Files' => 'Select Bunch of Files', diff --git a/web/inc/i18n/ru.php b/web/inc/i18n/ru.php index 79bdb597..0055bf0a 100644 --- a/web/inc/i18n/ru.php +++ b/web/inc/i18n/ru.php @@ -592,6 +592,7 @@ $LANG['ru'] = array( 'NEW DIR' => 'ПАПКА', 'DELETE' => 'УДАЛИТЬ', 'RENAME' => 'ПЕРЕИМЕНОВАТЬ', + 'MOVE' => 'ПЕРЕМЕСТИТЬ', 'RIGHTS' => 'ПРАВА', 'COPY' => 'КОПИЯ', 'ARCHIVE' => 'АРХИВ', @@ -612,6 +613,7 @@ $LANG['ru'] = array( 'Copy' => 'Скопировать', 'Cancel' => 'Отмена', 'Rename' => 'Переименовать', + 'Move' => 'Пемеместить', 'Change Rights' => 'Сменить права', 'Delete' => 'Удалить', 'Extract' => 'Распаковать', @@ -622,7 +624,9 @@ $LANG['ru'] = array( 'YOU ARE REMOVING' => 'YOU ARE REMOVING', 'Delete items' => 'Delete items', 'Copy files' => 'Copy files', + 'Move files' => 'Переместить файлы', 'Are you sure you want to copy' => 'Вы уверены, что хотите скопировать', + 'Are you sure you want to move' => 'Вы уверены, что хотите переместить', 'Are you sure you want to delete' => 'Вы уверены, что хотите удалить', 'into' => 'в', 'existing files will be replaced' => 'существующие файлы будут перезаписаны', @@ -675,6 +679,7 @@ $LANG['ru'] = array( 'Go to the Top of the File List' => 'Перейти к первому файлу', 'Go to the Last File' => 'Перейти к последнему файлу', 'Open File / Enter Directory' => 'Открыть Файл/Папку', + 'Edit File' => 'Редактировать Файл', 'Go to Parent Directory' => 'Перейти в родительскую директорию', 'Select Current File' => 'Выбрать активный файл', 'Select Bunch of Files' => 'Выбрать блок файлов', diff --git a/web/inc/i18n/se.php b/web/inc/i18n/se.php index 0aa3b5e8..112ab91e 100644 --- a/web/inc/i18n/se.php +++ b/web/inc/i18n/se.php @@ -591,6 +591,7 @@ $LANG['se'] = array( 'NEW DIR' => 'NEW DIR', 'DELETE' => 'DELETE', 'RENAME' => 'RENAME', + 'MOVE' => 'MOVE', 'RIGHTS' => 'RIGHTS', 'COPY' => 'COPY', 'ARCHIVE' => 'ARCHIVE', @@ -611,6 +612,7 @@ $LANG['se'] = array( 'Copy' => 'Copy', 'Cancel' => 'Cancel', 'Rename' => 'Rename', + 'Move' => 'Move', 'Change Rights' => 'Change Rights', 'Delete' => 'Delete', 'Extract' => 'Extract', @@ -621,7 +623,9 @@ $LANG['se'] = array( 'YOU ARE REMOVING' => 'YOU ARE REMOVING', 'Delete items' => 'Delete items', 'Copy files' => 'Copy files', + 'Move files' => 'Move files', 'Are you sure you want to copy' => 'Are you sure you want to copy', + 'Are you sure you want to move' => 'Are you sure you want to move', 'Are you sure you want to delete' => 'Are you sure you want to delete', 'into' => 'into', 'existing files will be replaced' => 'existing files will be replaced', @@ -674,6 +678,7 @@ $LANG['se'] = array( 'Go to the Top of the File List' => 'Go to the Top of the File List', 'Go to the Last File' => 'Go to the Last File', 'Open File / Enter Directory' => 'Open File / Enter Directory', + 'Edit File' => 'Edit File', 'Go to Parent Directory' => 'Go to Parent Directory', 'Select Current File' => 'Select Current File', 'Select Bunch of Files' => 'Select Bunch of Files', diff --git a/web/inc/i18n/tr.php b/web/inc/i18n/tr.php index a36dfb23..59be3cba 100644 --- a/web/inc/i18n/tr.php +++ b/web/inc/i18n/tr.php @@ -592,6 +592,7 @@ $LANG['tr'] = array( 'NEW DIR' => 'YENİ KLASÖR', 'DELETE' => 'SİL', 'RENAME' => 'YENİDEN ADLANDIR', + 'MOVE' => 'MOVE', 'RIGHTS' => 'RIGHTS', 'COPY' => 'KOPYALA', 'ARCHIVE' => 'ARŞİVLE', @@ -612,6 +613,7 @@ $LANG['tr'] = array( 'Copy' => 'Kopyala', 'Cancel' => 'Vazgeç', 'Rename' => 'Yeniden Adlandır', + 'Move' => 'Move', 'Change Rights' => 'Change Rights', 'Delete' => 'Sil', 'Extract' => 'Çıkart', @@ -622,7 +624,9 @@ $LANG['tr'] = array( 'YOU ARE REMOVING' => 'YOU ARE REMOVING', 'Delete items' => 'Delete items', 'Copy files' => 'Copy files', + 'Move files' => 'Move files', 'Are you sure you want to copy' => 'Kopyalamak istediğinizden emin misiniz', + 'Are you sure you want to move' => 'Are you sure you want to move', 'Are you sure you want to delete' => 'Silmek istediğinizden emin misiniz', 'into' => 'into', 'existing files will be replaced' => 'varolan dosyalar değiştirilir', @@ -675,6 +679,7 @@ $LANG['tr'] = array( 'Go to the Top of the File List' => 'Dosya Listesinin Tepesine git', 'Go to the Last File' => 'Son Dosyaya git', 'Open File / Enter Directory' => 'Dosya Aç/Dizin Gir', + 'Edit File' => 'Edit File', 'Go to Parent Directory' => 'Üst Dizine Git', 'Select Current File' => 'Şuanki Dosyayı Seç', 'Select Bunch of Files' => 'Dosya Demetini Seç', diff --git a/web/inc/i18n/tw.php b/web/inc/i18n/tw.php index 405b6f61..dd04d75f 100644 --- a/web/inc/i18n/tw.php +++ b/web/inc/i18n/tw.php @@ -594,6 +594,7 @@ $LANG['tw'] = array( 'NEW DIR' => '新增資料夾', 'DELETE' => '刪除', 'RENAME' => '重新命名', + 'MOVE' => 'MOVE', 'RIGHTS' => '權限', 'COPY' => '複製', 'ARCHIVE' => '壓縮', @@ -614,6 +615,7 @@ $LANG['tw'] = array( 'Copy' => '複製', 'Cancel' => '取消', 'Rename' => '重新命名', + 'Move' => 'Move', 'Change Rights' => '修改權限', 'Delete' => '刪除', 'Extract' => '解壓縮', @@ -624,7 +626,9 @@ $LANG['tw'] = array( 'YOU ARE REMOVING' => 'YOU ARE REMOVING', 'Delete items' => 'Delete items', 'Copy files' => 'Copy files', + 'Move files' => 'Move files', 'Are you sure you want to copy' => '確定要複製', + 'Are you sure you want to move' => 'Are you sure you want to move', 'Are you sure you want to delete' => '確定要刪除', 'into' => '資訊', 'existing files will be replaced' => '原本的檔案會被覆蓋', @@ -677,6 +681,7 @@ $LANG['tw'] = array( 'Go to the Top of the File List' => '回到檔案列表頂端', 'Go to the Last File' => '回到上個檔案', 'Open File / Enter Directory' => '開啟檔案 或 進入資料夾', + 'Edit File' => 'Edit File', 'Go to Parent Directory' => '回到上一頁', 'Select Current File' => '選取目前的檔案', 'Select Bunch of Files' => '選取多個檔案', diff --git a/web/inc/i18n/ua.php b/web/inc/i18n/ua.php index 2bebeb2f..ec29ed53 100644 --- a/web/inc/i18n/ua.php +++ b/web/inc/i18n/ua.php @@ -592,6 +592,7 @@ $LANG['ua'] = array( 'NEW DIR' => 'NEW DIR', 'DELETE' => 'DELETE', 'RENAME' => 'RENAME', + 'MOVE' => 'MOVE', 'RIGHTS' => 'RIGHTS', 'COPY' => 'COPY', 'ARCHIVE' => 'ARCHIVE', @@ -612,6 +613,7 @@ $LANG['ua'] = array( 'Copy' => 'Copy', 'Cancel' => 'Cancel', 'Rename' => 'Rename', + 'Move' => 'Move', 'Change Rights' => 'Change Rights', 'Delete' => 'Delete', 'Extract' => 'Extract', @@ -622,7 +624,9 @@ $LANG['ua'] = array( 'YOU ARE REMOVING' => 'YOU ARE REMOVING', 'Delete items' => 'Delete items', 'Copy files' => 'Copy files', + 'Move files' => 'Move files', 'Are you sure you want to copy' => 'Are you sure you want to copy', + 'Are you sure you want to move' => 'Are you sure you want to move', 'Are you sure you want to delete' => 'Are you sure you want to delete', 'into' => 'into', 'existing files will be replaced' => 'existing files will be replaced', @@ -675,6 +679,7 @@ $LANG['ua'] = array( 'Go to the Top of the File List' => 'Go to the Top of the File List', 'Go to the Last File' => 'Go to the Last File', 'Open File / Enter Directory' => 'Open File / Enter Directory', + 'Edit File' => 'Edit File', 'Go to Parent Directory' => 'Go to Parent Directory', 'Select Current File' => 'Select Current File', 'Select Bunch of Files' => 'Select Bunch of Files', diff --git a/web/inc/i18n/vi.php b/web/inc/i18n/vi.php index c226a207..eef37d80 100644 --- a/web/inc/i18n/vi.php +++ b/web/inc/i18n/vi.php @@ -591,6 +591,7 @@ $LANG['vi'] = array( 'NEW DIR' => 'Thêm thư mục mới', 'DELETE' => 'Xóa', 'RENAME' => 'Đổi tên', + 'MOVE' => 'MOVE', 'RIGHTS' => 'RIGHTS', 'COPY' => 'Sao chép', 'ARCHIVE' => 'Nén', @@ -611,6 +612,7 @@ $LANG['vi'] = array( 'Copy' => 'Sao chép', 'Cancel' => 'Hủy', 'Rename' => 'Đổi tên', + 'Move' => 'Move', 'Change Rights' => 'Change Rights', 'Delete' => 'Xóa', 'Extract' => 'Giải nén', @@ -621,7 +623,9 @@ $LANG['vi'] = array( 'YOU ARE REMOVING' => 'YOU ARE REMOVING', 'Delete items' => 'Delete items', 'Copy files' => 'Copy files', + 'Move files' => 'Move files', 'Are you sure you want to copy' => 'Bạn có chắc chắn muốn sao chép', + 'Are you sure you want to move' => 'Are you sure you want to move', 'Are you sure you want to delete' => 'Bạn có chắc chắn muốn xóa', 'into' => 'into', 'existing files will be replaced' => 'tệp tồn tại sẽ được ghi đè', @@ -674,6 +678,7 @@ $LANG['vi'] = array( 'Go to the Top of the File List' => 'Lên đầu danh sách tệp', 'Go to the Last File' => 'Di chuyển đến tệp cuối cùng', 'Open File / Enter Directory' => 'Mở tệp/Truy cập thư mục', + 'Edit File' => 'Edit File', 'Go to Parent Directory' => 'Về thư mục cha', 'Select Current File' => 'Chọn tệp hiện tại', 'Select Bunch of Files' => 'Chọn nhiều tệp', diff --git a/web/js/app.js b/web/js/app.js index 249fd89b..af335fa5 100644 --- a/web/js/app.js +++ b/web/js/app.js @@ -797,9 +797,9 @@ App.Ajax.request = function(method, data, callback, onError){ }*/ //App.Helpers.setAjaxBusy(method, data); data = data || {}; - + var prgs = $('.progress-container'); - + switch (method) { case 'cd': prgs.find('title').text('Opening dir'); @@ -825,8 +825,12 @@ App.Ajax.request = function(method, data, callback, onError){ prgs.find('title').text('Renaming file'); prgs.show(); break; + case 'copy_file': + case 'copy_directory': + prgs.find('title').text('Copying files'); + prgs.show(); + break; default: - break; } diff --git a/web/js/file_manager.js b/web/js/file_manager.js index cbf6ca6c..b467a0b1 100644 --- a/web/js/file_manager.js +++ b/web/js/file_manager.js @@ -314,7 +314,6 @@ FM.open = function(dir, box, callback) { 'dir': dir }; App.Ajax.request('cd', params, function(reply) { - //var tab = FM.getTabLetter(FM.CURRENT_TAB); FM.preselectedItems[tab] = []; if (reply.result == true) { var html = FM.generate_listing(reply.listing, box); @@ -324,17 +323,16 @@ FM.open = function(dir, box, callback) { } callback && callback(reply); - + var current_pwd = dir.trim() == '' ? FM.ROOT_DIR : dir; - + FM.updateTopLevelPathBar(box, tab, current_pwd); - - + var path_a = FM['TAB_A_CURRENT_PATH'] == '' ? FM.ROOT_DIR : FM['TAB_A_CURRENT_PATH']; var path_b = FM['TAB_B_CURRENT_PATH'] == '' ? FM.ROOT_DIR : FM['TAB_B_CURRENT_PATH']; var url = '/list/directory/?dir_a='+path_a+'&dir_b='+path_b; history.pushState({}, null, url); - + if (FM['CURRENT_' + tab + '_LINE'] == -1) { FM.setActive(0, FM.CURRENT_TAB); } @@ -738,7 +736,7 @@ FM.bulkOperation = function(ref) { $(ref).find('option[value=-1]').attr('selected', true); } -FM.checkBulkStatus = function(bulkStatuses, acc) { +FM.checkBulkStatus = function(bulkStatuses, acc, dont_reload) { var status = true; var msg = ''; if (bulkStatuses.length == acc.length) { @@ -760,10 +758,11 @@ FM.checkBulkStatus = function(bulkStatuses, acc) { $('#popup .ok').hide(); } - var box = FM['TAB_' + tab]; var tab = FM.getTabLetter(FM.CURRENT_TAB); -// FM.openAndSync(FM['TAB_' + tab + '_CURRENT_PATH'], box, function(){}, true); - FM.openAndSync(FM['TAB_' + tab + '_CURRENT_PATH'], box, function(){}, false); + var box = FM['TAB_' + tab]; + if(!dont_reload){ + FM.openAndSync(FM['TAB_' + tab + '_CURRENT_PATH'], box); + } } } @@ -803,8 +802,6 @@ FM.humanFileSizeUnit = function(size) { FM.bulkCopyDo = function() { var acc = $(FM.CURRENT_TAB).find('.dir.selected'); if (acc.length > 0) { - //FM.popupClose(); - var cfr_html = ''; var numberOfItems = 0; $.each(acc, function(i, o) { @@ -825,7 +822,6 @@ FM.bulkCopyDo = function() { src = $.parseJSON(src); if (FM.isItemPseudo(src)) { - //cfr_html += '

'+src.name+'
'; return; } @@ -836,9 +832,6 @@ FM.bulkCopyDo = function() { } if (FM.isItemPseudo(src)) { - /*return FM.displayError( - App.Constants.FM_NO_FILE_OR_DIRECTORY_SELECTED - );*/ return; } @@ -856,16 +849,18 @@ FM.bulkCopyDo = function() { dir_target: dest }; + App.Ajax.request(action, params, function(reply) { if (reply.result == true) { bulkStatuses.push(true); } else { - //FM.showError('copy-items', reply.message); bulkStatuses.push(reply.message); } - - FM.checkBulkStatus(bulkStatuses, acc); + FM.checkBulkStatus(bulkStatuses, acc, true); + if(bulkStatuses.length == acc.length){ + FM.open(FM['TAB_' + opposite_tab + '_CURRENT_PATH'], FM['TAB_' + opposite_tab]); + } }); }); } @@ -960,7 +955,6 @@ FM.bulkRemoveDo = function() { bulkStatuses.push(true); } else { - //FM.showError('copy-items', reply.message); bulkStatuses.push(reply.message); } @@ -997,76 +991,6 @@ FM.bulkRemove = function() { } } - -FM.bulkRemove11111 = function() { - var acc = $(FM.CURRENT_TAB).find('.dir.selected'); - if (acc.length > 0) { - //FM.popupClose(); - - var cfr_html = ''; - - $.each(acc, function(i, o) { - var ref = $(o); - var src = $(ref).find('.source').val(); - src = $.parseJSON(src); - - if (!FM.isItemPseudo(o)) { - cfr_html += '
'+src.name+'
'; - } - }); - - var tpl = Tpl.get('popup_bulk', 'FM'); - tpl.set(':ACTION', App.Constants.FM_YOU_ARE_REMOVING); - tpl.set(':TEXT', cfr_html); - - FM.popupOpen(tpl.finalize()); - - var bulkStatuses = []; - $.each(acc, function(i, o) { - var ref = $(o); - var src = $(ref).find('.source').val(); - src = $.parseJSON(src); - - var tab = FM.getTabLetter(FM.CURRENT_TAB); - - var opposite_tab = 'A'; - if (tab == 'A') { - opposite_tab = 'B'; - } - - if (FM.isItemPseudo(src)) { - return; - /*return FM.displayError( - App.Constants.FM_NO_FILE_OR_DIRECTORY_SELECTED - );*/ - } - - var dest = FM['TAB_' + opposite_tab + '_CURRENT_PATH' ]; - if (dest == '') { - dest = GLOBAL.ROOT_DIR; - } - - var params = { - item: src.full_path, - dir: FM['TAB_' + tab + '_CURRENT_PATH'] - }; - - App.Ajax.request('delete_files', params, function(reply) { - if (reply.result == true) { - bulkStatuses.push(true); - } - else { - //FM.showError('copy-items', reply.message); - bulkStatuses.push(reply.message); - } - - FM.checkBulkStatus(bulkStatuses, acc); - }); - }); - - } -} - FM.toggleAllItemsSelected = function() { var tab = FM.getTabLetter(FM.CURRENT_TAB); var box = FM['TAB_' + tab]; @@ -1398,6 +1322,198 @@ FM.renameItems = function() { FM.popupOpen(tpl.finalize()); } +FM.confirmMove = function() { + var tab = FM.getTabLetter(FM.CURRENT_TAB); + var box = FM['TAB_' + tab]; + var selected = $(FM['TAB_' + tab] ).find('.dir.active'); + if (!selected) { + return FM.displayError( + App.Constants.FM_NO_FILE_OR_DIRECTORY_SELECTED + ); + } + + var src = selected.find('.source').val(); + src = $.parseJSON(src); + + var target_name = $('#dst-name').val(); + + if (target_name.trim().length == 0) { + return FM.displayError( + App.Constants.FM_FILE_NAME_CANNOT_BE_EMPTY + ); + } + + var opposite_tab = 'A'; + if (tab == 'A') { + opposite_tab = 'B'; + } + var opposite_box = FM['TAB_' + opposite_tab]; + + var action = FM.isItemFile(src) ? 'move_file' : 'move_directory'; + + var params = { + item: FM['TAB_' + tab + '_CURRENT_PATH'] + '/' + src.name, + target_name: target_name + }; + + App.Ajax.request(action, params, function(reply) { + if (reply.result == true) { + FM.popupClose(); + FM.openAndSync(FM['TAB_' + tab + '_CURRENT_PATH'], box); + FM.openAndSync(FM['TAB_' + opposite_tab + '_CURRENT_PATH'], opposite_box); + } + else { + FM.showError('rename-items', reply.message); + } + }); +} + + +FM.moveItems = function() { + var tab = FM.getTabLetter(FM.CURRENT_TAB); + var selected = $(FM['TAB_' + tab] ).find('.dir.selected'); + if (selected.length == 0) { + return FM.displayError( + App.Constants.FM_NO_FILE_OR_DIRECTORY_SELECTED + ); + } + + if (selected.length > 1) { // multi operation + return FM.bulkMove(); + } + + var src = selected.find('.source').val(); + src = $.parseJSON(src); + + if (FM.isItemPseudo(src)) { + return FM.displayError( + App.Constants.FM_NO_FILE_OR_DIRECTORY_SELECTED + ); + } + + var opposite_tab = 'A'; + if (tab == 'A') { + opposite_tab = 'B'; + } + + var dst = FM['TAB_' + opposite_tab + '_CURRENT_PATH']; + if (dst == '') { + dst = GLOBAL.ROOT_DIR; + } + + var tpl = Tpl.get('popup_move', 'FM'); + tpl.set(':FILENAME', src.full_path); + tpl.set(':DST_NAME', (dst + '/' + src.name).replace('//', '/')); + FM.popupOpen(tpl.finalize()); +} + +FM.bulkMove = function() { + var acc = $(FM.CURRENT_TAB).find('.dir.selected'); + if (acc.length > 0) { + FM.popupClose(); + + var cfr_html = ''; + var numberOfItems = 0; + $.each(acc, function(i, o) { + var ref = $(o); + var src = $(ref).find('.source').val(); + src = $.parseJSON(src); + + if (!FM.isItemPseudo(src)) { + cfr_html += '
'+src.name+'
'; + numberOfItems++; + } + }); + + var tab = FM.getTabLetter(FM.CURRENT_TAB); + var opposite_tab = 'A'; + if (tab == 'A') { + opposite_tab = 'B'; + } + var dest = FM['TAB_' + opposite_tab + '_CURRENT_PATH' ]; + if (dest == '') { + dest = GLOBAL.ROOT_DIR; + } + + var tpl = Tpl.get('popup_bulk_move', 'FM'); + tpl.set(':NUMBER_OF_ITEMS', numberOfItems); + tpl.set(':DST_NAME', dest); + //popup_bulk_copy + + FM.popupOpen(tpl.finalize()); + } +} + +FM.bulkMoveDo = function() { + var acc = $(FM.CURRENT_TAB).find('.dir.selected'); + if (acc.length > 0) { + //FM.popupClose(); + + var cfr_html = ''; + var numberOfItems = 0; + $.each(acc, function(i, o) { + var ref = $(o); + var src = $(ref).find('.source').val(); + src = $.parseJSON(src); + + if (!FM.isItemPseudo(o)) { + cfr_html += '
'+src.name+'
'; + numberOfItems++; + } + }); + + var bulkStatuses = []; + $.each(acc, function(i, o) { + var ref = $(o); + var src = $(ref).find('.source').val(); + src = $.parseJSON(src); + + var target_name = $('#dst-name').val(); + if (target_name.trim().length == 0) { + return FM.displayError( + App.Constants.FM_FILE_NAME_CANNOT_BE_EMPTY + ); + } + + var tab = FM.getTabLetter(FM.CURRENT_TAB); + var opposite_tab = 'A'; + if (tab == 'A') { + opposite_tab = 'B'; + } + + if (FM.isItemPseudo(src)) { + return; + } + + var dest = FM['TAB_' + opposite_tab + '_CURRENT_PATH' ]; + if (dest == '') { + dest = GLOBAL.ROOT_DIR; + } + var action = FM.isItemFile(src) ? 'move_file' : 'move_directory'; + + var params = { + item: FM['TAB_' + tab + '_CURRENT_PATH'] + '/' + src.name, + target_name: target_name + }; + + App.Ajax.request(action, params, function(reply) { + if (reply.result == true) { + bulkStatuses.push(true); + } + else { + //FM.showError('copy-items', reply.message); + bulkStatuses.push(reply.message); + } + + FM.checkBulkStatus(bulkStatuses, acc); + if(bulkStatuses.length == acc.length){ + FM.open(FM['TAB_' + opposite_tab + '_CURRENT_PATH'], FM['TAB_' + opposite_tab]); + } + }); + }); + } +} + FM.confirmChmod = function() { var tab = FM.getTabLetter(FM.CURRENT_TAB); var box = FM['TAB_' + tab]; @@ -1540,9 +1656,6 @@ FM.confirmBulkChmod = function() { $('#popup .message').show().html(msg); $('#popup .ok').hide(); } - -// FM.popupClose(); -// FM.openAndSync(FM['TAB_' + tab + '_CURRENT_PATH'], box); } } @@ -1635,6 +1748,7 @@ FM.popupOpen = function(html) { } FM.popupClose = function() { + $('#reload-in-time').remove(); clearTimeout(FM.Env.errorMessageHideTimeout); return $('#popup').flayer_close(); } @@ -1651,22 +1765,22 @@ FM.copyItems = function() { if (selected.length > 1) { // multi operation return FM.bulkCopy(); } - + var src = selected.find('.source').val(); src = $.parseJSON(src); - + if (FM.isItemPseudo(src)) { return FM.displayError( App.Constants.FM_NO_FILE_OR_DIRECTORY_SELECTED ); } - + var opposite_tab = 'A'; if (tab == 'A') { opposite_tab = 'B'; } - + var dst = FM['TAB_' + opposite_tab + '_CURRENT_PATH']; if (dst == '') { dst = GLOBAL.ROOT_DIR; @@ -1687,7 +1801,7 @@ FM.confirmUnpackItem = function () { App.Constants.FM_NO_FILE_SELECTED ); } - + var opposite_tab = 'A'; if (tab == 'A') { opposite_tab = 'B'; @@ -1695,7 +1809,7 @@ FM.confirmUnpackItem = function () { var src = selected.find('.source').val(); src = $.parseJSON(src); - + if (FM.isItemPseudo(src)) { return FM.displayError( App.Constants.FM_NO_FILE_SELECTED @@ -1707,12 +1821,12 @@ FM.confirmUnpackItem = function () { App.Constants.FM_FILE_TYPE_NOT_SUPPORTED ); } - + var dst = FM['TAB_' + tab + '_CURRENT_PATH']; if (dst == '') { dst = GLOBAL.ROOT_DIR; } - + var params = { item: src.full_path, filename: src.name, @@ -1733,47 +1847,63 @@ FM.confirmUnpackItem = function () { } FM.confirmPackItem = function () { + var tab = FM.getTabLetter(FM.CURRENT_TAB); var box = FM['TAB_' + tab]; - var selected = $(FM['TAB_' + tab] ).find('.dir.active'); + var selected = $(FM['TAB_' + tab] ).find('.dir.active, .dir.selected'); if (selected.length == 0) { return FM.displayError( App.Constants.FM_NO_FILE_OR_DIRECTORY_SELECTED ); } - + if (selected.length == 1) { + var ref = $(selected[0]); + var src = $(ref).find('.source').val(); + src = $.parseJSON(src); + + if (FM.isItemPseudo(src)) { + return FM.displayError( + App.Constants.FM_NO_FILE_OR_DIRECTORY_SELECTED + ); + } + } + + + if (selected.length > 0) { + var files_arr = []; + $.each(selected, function(i, o) { + var ref = $(o); + var src = $(ref).find('.source').val(); + src = $.parseJSON(src); + + if (!FM.isItemPseudo(o)) { + files_arr.push(src.full_path); + } + }); + } + + + var opposite_tab = 'A'; if (tab == 'A') { opposite_tab = 'B'; } - var src = selected.find('.source').val(); - src = $.parseJSON(src); - - if (FM.isItemPseudo(src)) { - return FM.displayError( - App.Constants.FM_NO_FILE_OR_DIRECTORY_SELECTED - ); - } - var dst = FM['TAB_' + tab + '_CURRENT_PATH']; if (dst == '') { dst = GLOBAL.ROOT_DIR; } - + var params = { - item: src.full_path, - filename: src.name, - dir: FM['TAB_' + tab + '_CURRENT_PATH'], - dir_target: $('#pack-destination').val() + items: files_arr.join(','), + dst_item: $('#pack-destination').val() }; - App.Ajax.request('pack_item', params, function(reply) { if (reply.result == true) { FM.popupClose(); FM.open(FM['TAB_' + tab + '_CURRENT_PATH'], FM['TAB_' + tab]); - FM.open(FM['TAB_' + opposite_tab + '_CURRENT_PATH'], FM['TAB_' + opposite_tab]); +/// FM.open(FM['TAB_' + opposite_tab + '_CURRENT_PATH'], FM['TAB_' + opposite_tab]); } else { FM.showError('unpack_item', reply.message); @@ -1784,7 +1914,7 @@ FM.confirmPackItem = function () { FM.confirmCopyItems = function () { var tab = FM.getTabLetter(FM.CURRENT_TAB); var selected = $(FM['TAB_' + tab] ).find('.dir.selected'); - + if (!selected) { return FM.displayError( App.Constants.FM_NO_FILE_OR_DIRECTORY_SELECTED @@ -1822,7 +1952,6 @@ FM.confirmCopyItems = function () { App.Ajax.request(action, params, function(reply) { if (reply.result == true) { FM.popupClose(); - // FM.open(FM['TAB_' + tab + '_CURRENT_PATH'], FM['TAB_' + tab]); FM.openAndSync(FM['TAB_' + opposite_tab + '_CURRENT_PATH'], FM['TAB_' + opposite_tab]); } else { @@ -1962,12 +2091,11 @@ FM.triggerRefreshActionTrick = function() { $('#reload-in-time').remove(); FM.Env.RELOAD_IN_TIME = true; var tpl = Tpl.get('reload_in_time', 'FM'); - //tpl.set(':TIME_LEFT', FM.RELOAD_IN_TIME_SECONDS + 1); - + $('body').append(tpl.finalize()); - + var ref = $('#reload-in-time').find('.reload-in-time-counter'); - + var timeleft = FM.RELOAD_IN_TIME_SECONDS; FM.Env.reload_in_time_interval = setInterval(function() { @@ -2293,6 +2421,32 @@ $(document).ready(function() { 'target': document }); + shortcut.add("F4",function() { + var tab = FM.getTabLetter(FM.CURRENT_TAB); + var elm = $(FM.CURRENT_TAB).find('.dir:eq('+FM['CURRENT_'+tab+'_LINE']+')'); + + if (elm.length == 1) { + var src = $.parseJSON($(elm).find('.source').val()); + + if (src.type == 'd') { + } + else { + if(FM.IMG_FILETYPES.indexOf(src.filetype) >= 0 && src.filetype.length > 0) { + FM.fotoramaOpen(tab, 'img-' + elm.index()); + } + else { + FM.openFile(src.full_path, FM.CURRENT_TAB, elm); + } + } + } + },{ + 'type': 'keydown', + 'propagate': false, + 'disable_in_input': false, + 'target': document + }); + + shortcut.add("Enter",function() { if (FM.isPopupOpened()) { return FM.handlePopupSubmit(); @@ -2357,6 +2511,16 @@ $(document).ready(function() { 'target': document }); + shortcut.add("m",function() { + FM.moveItems(); + },{ + 'type': 'keydown', + 'propagate': false, + 'disable_in_input': true, + 'target': document + }); + + shortcut.add("shift+F6",function() { FM.renameItems(); },{ diff --git a/web/js/i18n.js.php b/web/js/i18n.js.php index 3200a356..f625beca 100644 --- a/web/js/i18n.js.php +++ b/web/js/i18n.js.php @@ -24,6 +24,7 @@ App.Constants.FM_DIRECTORY_NOT_AVAILABLE = ''; App.Constants.FM_CLOSE = ''; App.Constants.FM_COPY = ''; +App.Constants.FM_MOVE = ''; App.Constants.FM_CANCEL = ''; App.Constants.FM_RENAME = ''; App.Constants.FM_CHMOD = ''; @@ -38,8 +39,10 @@ App.Constants.FM_YOU_ARE_COPYING = ''; App.Constants.FM_YOU_ARE_REMOVING = ''; App.Constants.FM_COPY_BULK = ''; +App.Constants.FM_MOVE_BULK = ''; App.Constants.FM_CONFIRM_COPY = ''; +App.Constants.FM_CONFIRM_MOVE = ''; App.Constants.FM_CONFIRM_DELETE = ''; App.Constants.FM_INTO_KEYWORD = ''; App.Constants.FM_EXISTING_FILES_WILL_BE_REPLACED= ''; diff --git a/web/js/templates.js b/web/js/templates.js index 3c7f252c..1691c10f 100644 --- a/web/js/templates.js +++ b/web/js/templates.js @@ -64,14 +64,18 @@ App.Templates.html = {

'+App.Constants.FM_COPY+'

\
\ '], - /*popup_bulk: [''], + popup_bulk_pack: ['
\ +
'+App.Constants.FM_PACK+' (~!:NUMBER_OF_ITEMS~!)
\ +
\ + \ +
\ +
\ + \ +
\ +

'+App.Constants.FM_CANCEL+'

\ +

'+App.Constants.FM_PACK_BUTTON+'

\ +
\ +
'], + popup_unpack: ['
\
'+App.Constants.FM_EXTRACT+' "~!:FILENAME~!" '+App.Constants.FM_INTO_KEYWORD+':
\
\ From 56210b7c9e510c8e87d43bc0d2553a34dc3ecefa Mon Sep 17 00:00:00 2001 From: Serghey Rodin Date: Wed, 10 Aug 2016 14:39:23 +0300 Subject: [PATCH 046/104] fix for missing url after login --- web/inc/main.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/web/inc/main.php b/web/inc/main.php index 901c3709..e0761013 100644 --- a/web/inc/main.php +++ b/web/inc/main.php @@ -20,6 +20,7 @@ if(!isset($_SESSION['user_combined_ip'])){ // Checking user to use session from the same IP he has been logged in if($_SESSION['user_combined_ip'] != $user_combined_ip){ session_destroy(); + session_start(); $_SESSION['request_uri'] = $_SERVER['REQUEST_URI']; header("Location: /login/"); exit; @@ -28,6 +29,7 @@ if($_SESSION['user_combined_ip'] != $user_combined_ip){ // Check system settings if ((!isset($_SESSION['VERSION'])) && (!defined('NO_AUTH_REQUIRED'))) { session_destroy(); + session_start(); $_SESSION['request_uri'] = $_SERVER['REQUEST_URI']; header("Location: /login/"); exit; From 81a0d978fc5cb1c9e28a092537b3aa10b6c91e52 Mon Sep 17 00:00:00 2001 From: Serghey Rodin Date: Wed, 10 Aug 2016 14:40:23 +0300 Subject: [PATCH 047/104] fix for empty aliases --- bin/v-add-web-domain | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/bin/v-add-web-domain b/bin/v-add-web-domain index 04fa9afc..17c64a6f 100755 --- a/bin/v-add-web-domain +++ b/bin/v-add-web-domain @@ -120,12 +120,21 @@ if [ ! -z "$WEB_BACKEND" ]; then check_result $? "Backend error" >/dev/null fi -# Preparing domain variables -if [ "$aliases" != 'none' ]; then - ALIAS="www.$domain,$aliases,$(get_ip_alias $domain)" -else +# Preparing domain aliases +if [ "$aliases" = 'none' ]; then ALIAS='' +else + ALIAS="www.$domain" + if [ ! -z "$aliases" ]; then + ALIAS="$ALIAS,$aliases" + fi + ip_alias=$(get_ip_alias $domain) + if [ ! -z "$ip_alias" ]; then + ALIAS="$ALIAS,$ip_alias" + fi fi + +# Preparing domain variables prepare_web_domain_values # Adding web server config From db9be6d2446e7363d19985262b66c6d36f574f37 Mon Sep 17 00:00:00 2001 From: Derrick Hammer Date: Sat, 13 Aug 2016 17:19:55 -0400 Subject: [PATCH 048/104] *Strip double quotes and only add back if value has spaces or semicolon --- bin/v-add-dns-record | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/bin/v-add-dns-record b/bin/v-add-dns-record index 113874d3..08f7be57 100755 --- a/bin/v-add-dns-record +++ b/bin/v-add-dns-record @@ -49,6 +49,12 @@ if [[ $rtype =~ NS|CNAME|MX|PTR|SRV ]]; then fi fi +dvalue=${dvalue//\"/} + +if [[ "dvalue" =~ [^\;\s] ]]; then + dvalue='"'"$dvalue"'"' +fi + #----------------------------------------------------------# # Verifications # From 9873dfacd0c5df214256cc537d36755cf716a61d Mon Sep 17 00:00:00 2001 From: Serghey Rodin Date: Thu, 18 Aug 2016 17:22:23 +0300 Subject: [PATCH 049/104] Fix for clamav: /var/run ownership and foreground option --- install/vst-install-rhel.sh | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/install/vst-install-rhel.sh b/install/vst-install-rhel.sh index db1903b2..876edfb7 100755 --- a/install/vst-install-rhel.sh +++ b/install/vst-install-rhel.sh @@ -1097,7 +1097,7 @@ if [ "$clamd" = 'yes' ]; then wget $vestacp/clamav/freshclam.conf -O /etc/freshclam.conf mkdir -p /var/log/clamav mkdir -p /var/run/clamav - chown clam:clam /var/log/clamav + chown clam:clam /var/log/clamav /var/run/clamav chown -R clam:clam /var/lib/clamav if [ "$release" -eq '7' ]; then wget $vestacp/clamav/clamd.service -O \ @@ -1105,6 +1105,10 @@ if [ "$clamd" = 'yes' ]; then systemctl --system daemon-reload fi /usr/bin/freshclam + if [ "$release" -eq '7' ]; then + sed -i "s/nofork/foreground/" /usr/lib/systemd/system/clamd.service + systemctl daemon-reload + fi chkconfig clamd on service clamd start #check_result $? "clamd start failed" From 5fd052ee07369490c9486163d8e73026e7295722 Mon Sep 17 00:00:00 2001 From: onbalt Date: Fri, 19 Aug 2016 18:25:15 +0300 Subject: [PATCH 050/104] Wrong variable in v-change-web-domain-backend-tpl Change variable $backend to $backend_type in v-change-web-domain-backend-tpl --- bin/v-change-web-domain-backend-tpl | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/bin/v-change-web-domain-backend-tpl b/bin/v-change-web-domain-backend-tpl index 40b11df1..67044d6d 100755 --- a/bin/v-change-web-domain-backend-tpl +++ b/bin/v-change-web-domain-backend-tpl @@ -45,7 +45,7 @@ is_backend_template_valid $template prepare_web_backend # Deleting backend -rm -f $pool/$backend.conf +rm -f $pool/$backend_type.conf # Allocating backend port backend_port=9000 @@ -63,10 +63,10 @@ cat $WEBTPL/$WEB_BACKEND/$template.tpl |\ -e "s|%user%|$user|"\ -e "s|%domain%|$domain|"\ -e "s|%domain_idn%|$domain_idn|"\ - -e "s|%backend%|$backend|g" > $pool/$backend.conf + -e "s|%backend%|$backend_type|g" > $pool/$backend_type.conf # Checking backend pool configuration -if [ "$backend" = "$user" ]; then +if [ "$backend_type" = "$user" ]; then conf=$USER_DATA/web.conf fields='$DOMAIN' nohead=1 From b3ccb9c9d9d94276568229d2a0dabbdaecdb16db Mon Sep 17 00:00:00 2001 From: onbalt Date: Sat, 20 Aug 2016 00:10:14 +0300 Subject: [PATCH 051/104] Update v-change-web-domain-tpl --- bin/v-change-web-domain-tpl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bin/v-change-web-domain-tpl b/bin/v-change-web-domain-tpl index 3366c313..93635230 100755 --- a/bin/v-change-web-domain-tpl +++ b/bin/v-change-web-domain-tpl @@ -54,9 +54,9 @@ fi # Defining variables for new vhost config prepare_web_domain_values -add_web_config "$WEB_SYSTEM" "$TPL.tpl" +add_web_config "$WEB_SYSTEM" "$template.tpl" if [ "$SSL" = 'yes' ]; then - add_web_config "$WEB_SYSTEM" "$TPL.stpl" + add_web_config "$WEB_SYSTEM" "$template.stpl" fi From fdd35376f10dd208731bcd4e427ff2450ad07025 Mon Sep 17 00:00:00 2001 From: core01 Date: Wed, 24 Aug 2016 21:21:21 +0300 Subject: [PATCH 052/104] Fixing incorrect load of image, css and js when using HTTPS --- install/debian/7/nginx/phpmyadmin.inc | 3 +++ install/debian/8/nginx/phpmyadmin.inc | 3 +++ install/rhel/5/nginx/phpmyadmin.inc | 4 ++++ install/rhel/6/nginx/phpmyadmin.inc | 3 +++ install/rhel/7/nginx/phpmyadmin.inc | 3 +++ install/ubuntu/12.04/nginx/phpmyadmin.inc | 3 +++ install/ubuntu/12.10/nginx/phpmyadmin.inc | 3 +++ install/ubuntu/13.04/nginx/phpmyadmin.inc | 3 +++ install/ubuntu/13.10/nginx/phpmyadmin.inc | 3 +++ install/ubuntu/14.04/nginx/phpmyadmin.inc | 3 +++ install/ubuntu/14.10/nginx/phpmyadmin.inc | 3 +++ install/ubuntu/15.04/nginx/phpmyadmin.inc | 3 +++ install/ubuntu/15.10/nginx/phpmyadmin.inc | 3 +++ 13 files changed, 40 insertions(+) diff --git a/install/debian/7/nginx/phpmyadmin.inc b/install/debian/7/nginx/phpmyadmin.inc index d70ca3e3..1feb8546 100644 --- a/install/debian/7/nginx/phpmyadmin.inc +++ b/install/debian/7/nginx/phpmyadmin.inc @@ -12,4 +12,7 @@ location /phpmyadmin { include fastcgi_params; fastcgi_param SCRIPT_FILENAME $request_filename; } + location ~* ^/phpmyadmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ { + root /usr/share/; + } } diff --git a/install/debian/8/nginx/phpmyadmin.inc b/install/debian/8/nginx/phpmyadmin.inc index d70ca3e3..1feb8546 100644 --- a/install/debian/8/nginx/phpmyadmin.inc +++ b/install/debian/8/nginx/phpmyadmin.inc @@ -12,4 +12,7 @@ location /phpmyadmin { include fastcgi_params; fastcgi_param SCRIPT_FILENAME $request_filename; } + location ~* ^/phpmyadmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ { + root /usr/share/; + } } diff --git a/install/rhel/5/nginx/phpmyadmin.inc b/install/rhel/5/nginx/phpmyadmin.inc index 09da5207..efd6f4c4 100644 --- a/install/rhel/5/nginx/phpmyadmin.inc +++ b/install/rhel/5/nginx/phpmyadmin.inc @@ -12,4 +12,8 @@ location /phpmyadmin { include fastcgi_params; fastcgi_param SCRIPT_FILENAME $request_filename; } + location ~* ^/phpmyadmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ { + root /usr/share/; + } + } diff --git a/install/rhel/6/nginx/phpmyadmin.inc b/install/rhel/6/nginx/phpmyadmin.inc index 09da5207..9c5a6882 100644 --- a/install/rhel/6/nginx/phpmyadmin.inc +++ b/install/rhel/6/nginx/phpmyadmin.inc @@ -12,4 +12,7 @@ location /phpmyadmin { include fastcgi_params; fastcgi_param SCRIPT_FILENAME $request_filename; } + location ~* ^/phpmyadmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ { + root /usr/share/; + } } diff --git a/install/rhel/7/nginx/phpmyadmin.inc b/install/rhel/7/nginx/phpmyadmin.inc index 09da5207..9c5a6882 100644 --- a/install/rhel/7/nginx/phpmyadmin.inc +++ b/install/rhel/7/nginx/phpmyadmin.inc @@ -12,4 +12,7 @@ location /phpmyadmin { include fastcgi_params; fastcgi_param SCRIPT_FILENAME $request_filename; } + location ~* ^/phpmyadmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ { + root /usr/share/; + } } diff --git a/install/ubuntu/12.04/nginx/phpmyadmin.inc b/install/ubuntu/12.04/nginx/phpmyadmin.inc index d70ca3e3..1feb8546 100644 --- a/install/ubuntu/12.04/nginx/phpmyadmin.inc +++ b/install/ubuntu/12.04/nginx/phpmyadmin.inc @@ -12,4 +12,7 @@ location /phpmyadmin { include fastcgi_params; fastcgi_param SCRIPT_FILENAME $request_filename; } + location ~* ^/phpmyadmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ { + root /usr/share/; + } } diff --git a/install/ubuntu/12.10/nginx/phpmyadmin.inc b/install/ubuntu/12.10/nginx/phpmyadmin.inc index d70ca3e3..1feb8546 100644 --- a/install/ubuntu/12.10/nginx/phpmyadmin.inc +++ b/install/ubuntu/12.10/nginx/phpmyadmin.inc @@ -12,4 +12,7 @@ location /phpmyadmin { include fastcgi_params; fastcgi_param SCRIPT_FILENAME $request_filename; } + location ~* ^/phpmyadmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ { + root /usr/share/; + } } diff --git a/install/ubuntu/13.04/nginx/phpmyadmin.inc b/install/ubuntu/13.04/nginx/phpmyadmin.inc index d70ca3e3..1feb8546 100644 --- a/install/ubuntu/13.04/nginx/phpmyadmin.inc +++ b/install/ubuntu/13.04/nginx/phpmyadmin.inc @@ -12,4 +12,7 @@ location /phpmyadmin { include fastcgi_params; fastcgi_param SCRIPT_FILENAME $request_filename; } + location ~* ^/phpmyadmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ { + root /usr/share/; + } } diff --git a/install/ubuntu/13.10/nginx/phpmyadmin.inc b/install/ubuntu/13.10/nginx/phpmyadmin.inc index d70ca3e3..1feb8546 100644 --- a/install/ubuntu/13.10/nginx/phpmyadmin.inc +++ b/install/ubuntu/13.10/nginx/phpmyadmin.inc @@ -12,4 +12,7 @@ location /phpmyadmin { include fastcgi_params; fastcgi_param SCRIPT_FILENAME $request_filename; } + location ~* ^/phpmyadmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ { + root /usr/share/; + } } diff --git a/install/ubuntu/14.04/nginx/phpmyadmin.inc b/install/ubuntu/14.04/nginx/phpmyadmin.inc index d70ca3e3..1feb8546 100644 --- a/install/ubuntu/14.04/nginx/phpmyadmin.inc +++ b/install/ubuntu/14.04/nginx/phpmyadmin.inc @@ -12,4 +12,7 @@ location /phpmyadmin { include fastcgi_params; fastcgi_param SCRIPT_FILENAME $request_filename; } + location ~* ^/phpmyadmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ { + root /usr/share/; + } } diff --git a/install/ubuntu/14.10/nginx/phpmyadmin.inc b/install/ubuntu/14.10/nginx/phpmyadmin.inc index d70ca3e3..1feb8546 100644 --- a/install/ubuntu/14.10/nginx/phpmyadmin.inc +++ b/install/ubuntu/14.10/nginx/phpmyadmin.inc @@ -12,4 +12,7 @@ location /phpmyadmin { include fastcgi_params; fastcgi_param SCRIPT_FILENAME $request_filename; } + location ~* ^/phpmyadmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ { + root /usr/share/; + } } diff --git a/install/ubuntu/15.04/nginx/phpmyadmin.inc b/install/ubuntu/15.04/nginx/phpmyadmin.inc index d70ca3e3..1feb8546 100644 --- a/install/ubuntu/15.04/nginx/phpmyadmin.inc +++ b/install/ubuntu/15.04/nginx/phpmyadmin.inc @@ -12,4 +12,7 @@ location /phpmyadmin { include fastcgi_params; fastcgi_param SCRIPT_FILENAME $request_filename; } + location ~* ^/phpmyadmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ { + root /usr/share/; + } } diff --git a/install/ubuntu/15.10/nginx/phpmyadmin.inc b/install/ubuntu/15.10/nginx/phpmyadmin.inc index d70ca3e3..1feb8546 100644 --- a/install/ubuntu/15.10/nginx/phpmyadmin.inc +++ b/install/ubuntu/15.10/nginx/phpmyadmin.inc @@ -12,4 +12,7 @@ location /phpmyadmin { include fastcgi_params; fastcgi_param SCRIPT_FILENAME $request_filename; } + location ~* ^/phpmyadmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ { + root /usr/share/; + } } From 4bc53a11429ec4872159a0ba76a0b5fd02c501ee Mon Sep 17 00:00:00 2001 From: Dmitry Bannik Date: Thu, 25 Aug 2016 02:33:19 +0300 Subject: [PATCH 053/104] Added default install "expect" to work for backup sftp --- install/vst-install-debian.sh | 4 ++-- install/vst-install-rhel.sh | 4 ++-- install/vst-install-ubuntu.sh | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/install/vst-install-debian.sh b/install/vst-install-debian.sh index 5dfb084f..5507fd4e 100755 --- a/install/vst-install-debian.sh +++ b/install/vst-install-debian.sh @@ -28,7 +28,7 @@ if [ "$release" -eq 8 ]; then mysql-client postgresql postgresql-contrib phppgadmin phpMyAdmin mc flex whois rssh git idn zip sudo bc ftp lsof ntpdate rrdtool quota e2fslibs bsdutils e2fsprogs curl imagemagick fail2ban dnsutils - bsdmainutils cron vesta vesta-nginx vesta-php" + bsdmainutils cron vesta vesta-nginx vesta-php expect" else software="nginx apache2 apache2-utils apache2.2-common apache2-suexec-custom libapache2-mod-ruid2 libapache2-mod-rpaf @@ -40,7 +40,7 @@ else mysql-client postgresql postgresql-contrib phppgadmin phpMyAdmin mc flex whois rssh git idn zip sudo bc ftp lsof ntpdate rrdtool quota e2fslibs bsdutils e2fsprogs curl imagemagick fail2ban dnsutils - bsdmainutils cron vesta vesta-nginx vesta-php" + bsdmainutils cron vesta vesta-nginx vesta-php expect" fi # Defining help function diff --git a/install/vst-install-rhel.sh b/install/vst-install-rhel.sh index db1903b2..33df4897 100755 --- a/install/vst-install-rhel.sh +++ b/install/vst-install-rhel.sh @@ -26,7 +26,7 @@ if [ "$release" -eq 7 ]; then postgresql postgresql-server postgresql-contrib phpPgAdmin e2fsprogs openssh-clients ImageMagick curl mc screen ftp zip unzip flex sqlite pcre sudo bc jwhois mailx lsof tar telnet rrdtool net-tools ntp GeoIP freetype - fail2ban rsyslog iptables-services which vesta vesta-nginx vesta-php" + fail2ban rsyslog iptables-services which vesta vesta-nginx vesta-php expect" else software="nginx httpd mod_ssl mod_ruid2 mod_fcgid mod_extract_forwarded php php-common php-cli php-bcmath php-gd php-imap php-mbstring php-mcrypt @@ -36,7 +36,7 @@ else postgresql-server postgresql-contrib phpPgAdmin e2fsprogs openssh-clients ImageMagick curl mc screen ftp zip unzip flex sqlite pcre sudo bc jwhois mailx lsof tar telnet rrdtool net-tools ntp GeoIP freetype fail2ban - which vesta vesta-nginx vesta-php" + which vesta vesta-nginx vesta-php expect" fi # Defining help function diff --git a/install/vst-install-ubuntu.sh b/install/vst-install-ubuntu.sh index d71a4edc..401737c9 100755 --- a/install/vst-install-ubuntu.sh +++ b/install/vst-install-ubuntu.sh @@ -26,7 +26,7 @@ software="nginx apache2 apache2-utils apache2.2-common mysql-client postgresql postgresql-contrib phppgadmin phpMyAdmin mc flex whois rssh git idn zip sudo bc ftp lsof ntpdate rrdtool quota e2fslibs bsdutils e2fsprogs curl imagemagick fail2ban dnsutils - bsdmainutils cron vesta vesta-nginx vesta-php" + bsdmainutils cron vesta vesta-nginx vesta-php expect" # Defining help function help() { From f1c46e9ab8baede4ecbf9d2efc8179b38560fbe9 Mon Sep 17 00:00:00 2001 From: Dmitry Bannik Date: Thu, 25 Aug 2016 02:48:13 +0300 Subject: [PATCH 054/104] fix charset russian language to send mail --- func/main.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/func/main.sh b/func/main.sh index b1503d6c..5f6d7fea 100644 --- a/func/main.sh +++ b/func/main.sh @@ -1,3 +1,4 @@ +#!/usr/bin/env bash # Internal variables HOMEDIR='/home' BACKUP='/backup' @@ -448,6 +449,7 @@ sync_cron_jobs() { rm -f $crontab if [ "$CRON_REPORTS" = 'yes' ]; then echo "MAILTO=$CONTACT" > $crontab + echo 'CONTENT_TYPE="text/plain; charset=utf-8"' >> $crontab fi while read line; do eval $line From b89f602f7b17709b472d92b566d708f860c95d20 Mon Sep 17 00:00:00 2001 From: Serghey Rodin Date: Thu, 25 Aug 2016 19:29:36 +0300 Subject: [PATCH 055/104] Service config feature --- bin/v-change-sys-config-value | 2 + bin/v-change-sys-service-config | 119 +++++++++++ bin/v-list-sys-clamd-config | 73 +++++++ bin/v-list-sys-dovecot-config | 103 +++++++++ bin/v-list-sys-mysql-config | 82 +++++++ bin/v-list-sys-nginx-config | 88 ++++++++ bin/v-list-sys-pgsql-config | 70 ++++++ bin/v-list-sys-php-config | 94 ++++++++ bin/v-list-sys-proftpd-config | 64 ++++++ bin/v-list-sys-spamd-config | 64 ++++++ bin/v-list-sys-vsftpd-config | 64 ++++++ bin/v-open-fs-config | 47 ++++ web/edit/server/apache2/index.php | 58 +++++ web/edit/server/bind9/index.php | 73 +++++++ web/edit/server/clamd/index.php | 58 +++++ web/edit/server/cron/index.php | 58 +++++ web/edit/server/crond/index.php | 58 +++++ web/edit/server/dovecot/index.php | 183 ++++++++++++++++ web/edit/server/exim/index.php | 58 +++++ web/edit/server/exim4/index.php | 58 +++++ web/edit/server/fail2ban/index.php | 58 +++++ web/edit/server/httpd/index.php | 58 +++++ web/edit/server/iptables/index.php | 10 + web/edit/server/mariadb/index.php | 67 ++++++ web/edit/server/mysql/index.php | 67 ++++++ web/edit/server/mysqld/index.php | 67 ++++++ web/edit/server/named/index.php | 58 +++++ web/edit/server/php-fpm/index.php | 68 ++++++ web/edit/server/php5-fpm/index.php | 68 ++++++ web/edit/server/postgresql/index.php | 78 +++++++ web/edit/server/proftpd/index.php | 58 +++++ web/edit/server/spamassassin/index.php | 58 +++++ web/edit/server/spamd/index.php | 58 +++++ web/edit/server/vsftpd/index.php | 58 +++++ web/favicon.ico | Bin 0 -> 4286 bytes web/js/pages/edit_server_mysql.js | 41 ++++ web/js/pages/edit_server_nginx.js | 41 ++++ web/js/pages/edit_server_php.js | 41 ++++ web/templates/admin/edit_server_bind9.html | 92 ++++++++ web/templates/admin/edit_server_dovecot.html | 171 +++++++++++++++ web/templates/admin/edit_server_httpd.html | 86 ++++++++ web/templates/admin/edit_server_mysql.html | 155 ++++++++++++++ web/templates/admin/edit_server_nginx.html | 213 +++++++++++++++++++ web/templates/admin/edit_server_pgsql.html | 92 ++++++++ web/templates/admin/edit_server_php.html | 175 +++++++++++++++ web/templates/admin/edit_server_service.html | 84 ++++++++ web/templates/admin/list_services.html | 5 +- 47 files changed, 3499 insertions(+), 2 deletions(-) create mode 100755 bin/v-change-sys-service-config create mode 100755 bin/v-list-sys-clamd-config create mode 100755 bin/v-list-sys-dovecot-config create mode 100755 bin/v-list-sys-mysql-config create mode 100755 bin/v-list-sys-nginx-config create mode 100755 bin/v-list-sys-pgsql-config create mode 100755 bin/v-list-sys-php-config create mode 100755 bin/v-list-sys-proftpd-config create mode 100755 bin/v-list-sys-spamd-config create mode 100755 bin/v-list-sys-vsftpd-config create mode 100755 bin/v-open-fs-config create mode 100644 web/edit/server/apache2/index.php create mode 100644 web/edit/server/bind9/index.php create mode 100644 web/edit/server/clamd/index.php create mode 100644 web/edit/server/cron/index.php create mode 100644 web/edit/server/crond/index.php create mode 100644 web/edit/server/dovecot/index.php create mode 100644 web/edit/server/exim/index.php create mode 100644 web/edit/server/exim4/index.php create mode 100644 web/edit/server/fail2ban/index.php create mode 100644 web/edit/server/httpd/index.php create mode 100644 web/edit/server/iptables/index.php create mode 100644 web/edit/server/mariadb/index.php create mode 100644 web/edit/server/mysql/index.php create mode 100644 web/edit/server/mysqld/index.php create mode 100644 web/edit/server/named/index.php create mode 100644 web/edit/server/php-fpm/index.php create mode 100644 web/edit/server/php5-fpm/index.php create mode 100644 web/edit/server/postgresql/index.php create mode 100644 web/edit/server/proftpd/index.php create mode 100644 web/edit/server/spamassassin/index.php create mode 100644 web/edit/server/spamd/index.php create mode 100644 web/edit/server/vsftpd/index.php create mode 100644 web/favicon.ico create mode 100644 web/js/pages/edit_server_mysql.js create mode 100644 web/js/pages/edit_server_nginx.js create mode 100644 web/js/pages/edit_server_php.js create mode 100644 web/templates/admin/edit_server_bind9.html create mode 100644 web/templates/admin/edit_server_dovecot.html create mode 100644 web/templates/admin/edit_server_httpd.html create mode 100644 web/templates/admin/edit_server_mysql.html create mode 100644 web/templates/admin/edit_server_nginx.html create mode 100644 web/templates/admin/edit_server_pgsql.html create mode 100644 web/templates/admin/edit_server_php.html create mode 100644 web/templates/admin/edit_server_service.html diff --git a/bin/v-change-sys-config-value b/bin/v-change-sys-config-value index 31b62634..10657656 100755 --- a/bin/v-change-sys-config-value +++ b/bin/v-change-sys-config-value @@ -18,6 +18,8 @@ value=$2 source $VESTA/func/main.sh source $VESTA/conf/vesta.conf +PATH="$PATH:/usr/local/sbin:/sbin:/usr/sbin:/root/bin" + #----------------------------------------------------------# # Verifications # diff --git a/bin/v-change-sys-service-config b/bin/v-change-sys-service-config new file mode 100755 index 00000000..77b45d88 --- /dev/null +++ b/bin/v-change-sys-service-config @@ -0,0 +1,119 @@ +#!/bin/bash +# info: change service config +# options: CONFIG SERVICE [RESTART] +# +# The function for changing service confguration. + + +#----------------------------------------------------------# +# Variable&Function # +#----------------------------------------------------------# + +# Argument definition +src=$1 +service=$2 +restart=$3 +echo "$0 $*" >/tmp/t.log + +# Includes +source $VESTA/func/main.sh +source $VESTA/conf/vesta.conf + + +#----------------------------------------------------------# +# Verifications # +#----------------------------------------------------------# + +check_args '2' "$#" 'CONFIG SERVICE [RESTART]' +if [ ! -e "$src" ]; then + check_result "$E_NOTEXIST" "$src config doesn't exist" +fi + +#----------------------------------------------------------# +# Action # +#----------------------------------------------------------# + +# Defining dst config path +case $service in + nginx) dst='/etc/nginx/nginx.conf';; + httpd) dst='/etc/httpd/conf/httpd.conf';; + apache2) dst='/etc/apache2/apache2.conf';; + exim) dst='/etc/exim/exim.conf';; + exim4) dst='/etc/exim4/exim4.conf.template';; + vsftpd) dst=$(find /etc/vsftpd* -name 'vsftpd.conf');; + proftpd) dst=$(find /etc/proftpd* -name 'proftpd.conf');; + php) dst=$(find /etc/php* -name php.ini);; + mysql) dst=$(find /etc/my* -name my.cnf);; + mariadb) dst=$(find /etc/my* -name my.cnf);; + postgresql) dst=$($BIN/v-list-sys-pgsql-config plain |cut -f 1);; + postgresql-hba) dst=$($BIN/v-list-sys-pgsql-config plain |cut -f 2);; + dovecot) dst=$(find /etc/dovecot* -name dovecot.conf);; + dovecot-1) dst='/etc/dovecot/conf.d/10-auth.conf';; + dovecot-2) dst='/etc/dovecot/conf.d/10-logging.conf';; + dovecot-3) dst='/etc/dovecot/conf.d/10-mail.conf';; + dovecot-4) dst='/etc/dovecot/conf.d/10-master.conf';; + dovecot-5) dst='/etc/dovecot/conf.d/10-ssl.conf';; + dovecot-6) dst='/etc/dovecot/conf.d/20-imap.conf';; + dovecot-7) dst='/etc/dovecot/conf.d/20-pop3.conf';; + dovecot-8) dst='/etc/dovecot/conf.d/auth-passwdfile.conf.ext';; + named) dst='/etc/named.conf';; + bind9) dst='/etc/bind/named.conf';; + bind9-opt) dst='/etc/bind/named.conf.options';; + spamd) dst=$($BIN/v-list-sys-spamd-config plain);; + spamassassin) dst=$($BIN/v-list-sys-spamd-config plain);; + clamd) dst=$($BIN/v-list-sys-clamd-config plain);; + cron) dst='/etc/crontab';; + crond) dst='/etc/crontab';; + fail2ban) dst='/etc/fail2ban/jail.local';; + *) check_result $E_NOTEXIST "service $service doesn't exist" +esac + +# Checking config path +for config in $dst; do + if [ ! -e "$config" ]; then + check_result $E_NOTEXIST "$service config doesn't exist" + fi +done + +# Checking diff between src and dst configs +for config in $dst; do + diff -q $src $config >/dev/null + + if [ $? -ne 0 ]; then + cp $config $config.vst.back + cp $src $config + update="yes" + fi +done + +# Restarting service +if [ "$update" = 'yes' ] && [ "$restart" != 'no' ]; then + if [ "$service" = 'php' ]; then + if [ "$WEB_SYSTEM" = "nginx" ]; then + service=$WEB_BACKEND + else + service=$WEB_SYSTEM + fi + fi + if [[ "$service" =~ - ]]; then + service=$(echo ${service%-*}) + fi + + service $service restart >/dev/null 2>&1 + if [ $? -ne 0 ]; then + for config in $dst; do + mv -f $config.vst.back $config + done + check_result $E_RESTART "$service failed to start with new config" + fi +fi + + +#----------------------------------------------------------# +# Vesta # +#----------------------------------------------------------# + +# Logging +log_event "$OK" "$ARGUMENTS" + +exit diff --git a/bin/v-list-sys-clamd-config b/bin/v-list-sys-clamd-config new file mode 100755 index 00000000..1bb614b9 --- /dev/null +++ b/bin/v-list-sys-clamd-config @@ -0,0 +1,73 @@ +#!/bin/bash +# info: list clamd config parameters +# options: [FORMAT] +# +# The function for obtaining the list of clamd config parameters. + + +#----------------------------------------------------------# +# Variable&Function # +#----------------------------------------------------------# + +# Argument definition +format=${1-shell} + +# Includes +source $VESTA/func/main.sh + +# JSON list function +json_list() { + echo '{ + "CONFIG": { + "config_path": "'$config_path'" + } +}' +} + +# SHELL list function +shell_list() { + echo "config_path: $config_path" +} + +# PLAIN list function +plain_list() { + echo "$config_path" +} + +# CSV list function +csv_list() { + echo "config_path" + echo "$config_path" +} + + +#----------------------------------------------------------# +# Action # +#----------------------------------------------------------# + +# Defining config path +if [ -e '/etc/clamav/clamd.conf' ]; then + config_path='/etc/clamav/clamd.conf' +else + if [ -e '/etc/clamd.conf' ]; then + config_path='/etc/clamd.conf' + fi + if [ -e '/etc/clamd.d/clamd.conf' ]; then + config_path='/etc/clamav/clamd.conf' + fi +fi + +# Listing data +case $format in + json) json_list ;; + plain) plain_list ;; + csv) csv_list ;; + shell) shell_list;; +esac + + +#----------------------------------------------------------# +# Vesta # +#----------------------------------------------------------# + +exit diff --git a/bin/v-list-sys-dovecot-config b/bin/v-list-sys-dovecot-config new file mode 100755 index 00000000..87375586 --- /dev/null +++ b/bin/v-list-sys-dovecot-config @@ -0,0 +1,103 @@ +#!/bin/bash +# info: list dovecot config parameters +# options: [FORMAT] +# +# The function for obtaining the list of dovecot config parameters. + + +#----------------------------------------------------------# +# Variable&Function # +#----------------------------------------------------------# + +# Argument definition +format=${1-shell} + +# Includes +source $VESTA/func/main.sh + +# JSON list function +json_list() { + echo '{ + "CONFIG": { + "config_path": "'$config_path'", + "config_path1": "'$config_path1'", + "config_path2": "'$config_path2'", + "config_path3": "'$config_path3'", + "config_path4": "'$config_path4'", + "config_path5": "'$config_path5'", + "config_path6": "'$config_path6'", + "config_path7": "'$config_path7'", + "config_path8": "'$config_path8'" + } +}' +} + +# SHELL list function +shell_list() { + echo "config_path: $config_path" + echo "config_path1: $config_path1" + echo "config_path2: $config_path2" + echo "config_path3: $config_path3" + echo "config_path4: $config_path4" + echo "config_path5: $config_path5" + echo "config_path6: $config_path6" + echo "config_path7: $config_path7" + echo "config_path8: $config_path8" +} + +# PLAIN list function +plain_list() { + echo -en "$config_path\t" + echo -en "$config_path1\t" + echo -en "$config_path2\t" + echo -en "$config_path3\t" + echo -en "$config_path4\t" + echo -en "$config_path5\t" + echo -en "$config_path6\t" + echo -en "$config_path7\t" + echo -e "$config_path8\t" +} + +# CSV list function +csv_list() { + echo -n "config_path,config_path1,config_path2,config_path3," + echo "config_path4,config_path5,config_path6,config_path7,config_path8" + echo -n "$config_path,$config_path1,$config_path2,$config_path3," + echo -n "$config_path4,$config_path5,$config_path6,$config_path7," + echo "$config_path8" +} + + +#----------------------------------------------------------# +# Action # +#----------------------------------------------------------# + +# Defining config path +if [ -e '/etc/dovecot.conf' ]; then + config_path='/etc/dovecot.conf' +else + config_path='/etc/dovecot/dovecot.conf' + config_path1='/etc/dovecot/conf.d/10-auth.conf' + config_path2='/etc/dovecot/conf.d/10-logging.conf' + config_path3='/etc/dovecot/conf.d/10-mail.conf' + config_path4='/etc/dovecot/conf.d/10-master.conf' + config_path5='/etc/dovecot/conf.d/10-ssl.conf' + config_path6='/etc/dovecot/conf.d/20-imap.conf' + config_path7='/etc/dovecot/conf.d/20-pop3.conf' + config_path8='/etc/dovecot/conf.d/auth-passwdfile.conf.ext' +fi + +# Listing data +case $format in + json) json_list ;; + plain) plain_list ;; + csv) csv_list ;; + shell) shell_list;; +esac + + +#----------------------------------------------------------# +# Vesta # +#----------------------------------------------------------# + +exit diff --git a/bin/v-list-sys-mysql-config b/bin/v-list-sys-mysql-config new file mode 100755 index 00000000..bf297aab --- /dev/null +++ b/bin/v-list-sys-mysql-config @@ -0,0 +1,82 @@ +#!/bin/bash +# info: list mysql config parameters +# options: [FORMAT] +# +# The function for obtaining the list of mysql config parameters. + + +#----------------------------------------------------------# +# Variable&Function # +#----------------------------------------------------------# + +# Argument definition +format=${1-shell} + +# Includes +source $VESTA/func/main.sh +source $VESTA/conf/vesta.conf + +# JSON list function +json_list() { + eval $(echo "$config"|egrep "$keys"|\ + sed -e "s/[ ]*=/=/" -e "s/=[ ]*/=\'/" -e "s/$/'/") + echo '{ + "CONFIG": { + "max_user_connections": "'$max_user_connections'", + "max_connections": "'$max_connections'", + "wait_timeout": "'$wait_timeout'", + "interactive_timeout": "'$interactive_timeout'", + "max_allowed_packet": "'$max_allowed_packet'", + "config_path": "'$config_path'" + } +}' +} + +# SHELL list function +shell_list() { + echo "$config" |egrep "$keys" |tr '=' ' ' + echo "config_path $config_path" +} + +# PLAIN list function +plain_list() { + echo "$config" |egrep "$keys" |tr '=' ' ' + echo "config_path $config_path" +} + +# CSV list function +csv_list() { + echo "$keys" |sed "s/|/,/g" + echo "$config" |egrep "$keys" |tr '=' ' ' |awk '{print $2}' |tr '\n' ',' + echo +} + + +#----------------------------------------------------------# +# Action # +#----------------------------------------------------------# + +# Defining config path +config_path=$(find /etc/my* -name my.cnf) + +# Defining keys +keys="max_user_connections|max_connections|wait_timeout|interactive_timeout" +keys="${keys}|max_allowed_packet" + +# Reading config +config=$(cat $config_path|grep -v "^;") + +# Listing data +case $format in + json) json_list ;; + plain) plain_list ;; + csv) csv_list ;; + shell) shell_list |column -t;; +esac + + +#----------------------------------------------------------# +# Vesta # +#----------------------------------------------------------# + +exit diff --git a/bin/v-list-sys-nginx-config b/bin/v-list-sys-nginx-config new file mode 100755 index 00000000..c365caa7 --- /dev/null +++ b/bin/v-list-sys-nginx-config @@ -0,0 +1,88 @@ +#!/bin/bash +# info: list nginx config parameters +# options: [FORMAT] +# +# The function for obtaining the list of nginx config parameters. + + +#----------------------------------------------------------# +# Variable&Function # +#----------------------------------------------------------# + +# Argument definition +format=${1-shell} + +# Includes +source $VESTA/func/main.sh + +# JSON list function +json_list() { + eval $(echo "$config" |egrep "$keys" |tr -d ';'| awk '{print $1"="$2}') + echo '{ + "CONFIG": { + "worker_processes": "'$worker_processes'", + "worker_connections": "'$worker_connections'", + "send_timeout": "'$send_timeout'", + "proxy_connect_timeout": "'$proxy_connect_timeout'", + "proxy_send_timeout": "'$proxy_send_timeout'", + "proxy_read_timeout": "'$proxy_read_timeout'", + "client_max_body_size": "'$client_max_body_size'", + "gzip": "'$gzip'", + "gzip_comp_level": "'$gzip_comp_level'", + "charset": "'$charset'", + "config_path": "'$config_path'" + } +}' +} + +# SHELL list function +shell_list() { + echo "$config" |egrep "$keys" |tr -d ';' + echo "config_path $config_path" +} + +# PLAIN list function +plain_list() { + echo "$config" |egrep "$keys" |tr -d ';' + echo "config_path $config_path" +} + +# CSV list function +csv_list() { + echo "$keys" |sed "s/ |/,/g" + echo "$config" |egrep "$keys" |awk '{print $2}' |tr -d ';' |tr '\n' ',' + echo +} + + +#----------------------------------------------------------# +# Action # +#----------------------------------------------------------# + +# Defining config path +config_path='/etc/nginx/nginx.conf' + +# Defining keys +keys="worker_processes |worker_connections |send_timeout" +keys="$keys |proxy_connect_timeout |proxy_send_timeout" +keys="$keys |proxy_read_timeout |client_max_body_size" +keys="$keys |gzip |gzip_comp_level |charset " + + +# Reading nginx config +config=$(cat $config_path) + +# Listing data +case $format in + json) json_list ;; + plain) plain_list ;; + csv) csv_list ;; + shell) shell_list |column -t;; +esac + + +#----------------------------------------------------------# +# Vesta # +#----------------------------------------------------------# + +exit diff --git a/bin/v-list-sys-pgsql-config b/bin/v-list-sys-pgsql-config new file mode 100755 index 00000000..f568f107 --- /dev/null +++ b/bin/v-list-sys-pgsql-config @@ -0,0 +1,70 @@ +#!/bin/bash +# info: list postgresql config parameters +# options: [FORMAT] +# +# The function for obtaining the list of postgresql config parameters. + + +#----------------------------------------------------------# +# Variable&Function # +#----------------------------------------------------------# + +# Argument definition +format=${1-shell} + +# Includes +source $VESTA/func/main.sh + +# JSON list function +json_list() { + echo '{ + "CONFIG": { + "pg_hba_path": "'$pg_hba_path'", + "config_path": "'$config_path'" + } +}' +} + +# SHELL list function +shell_list() { + echo "config_path: $config_path" + echo "pg_hba_path: $pg_hba_path" +} + +# PLAIN list function +plain_list() { + echo -e "$config_path\t$pg_hba_path" +} + +# CSV list function +csv_list() { + echo "config_path,pg_hba_path" + echo "$config_path,$pg_hba_path" +} + + +#----------------------------------------------------------# +# Action # +#----------------------------------------------------------# + +# Defining config path +config_path=$(find /etc/postgresql /var/lib/pgsql/data -name \ + postgresql.conf 2>/dev/null) +pg_hba_path=$(find /etc/postgresql /var/lib/pgsql/data -name \ + pg_hba.conf 2>/dev/null) + + +# Listing data +case $format in + json) json_list ;; + plain) plain_list ;; + csv) csv_list ;; + shell) shell_list;; +esac + + +#----------------------------------------------------------# +# Vesta # +#----------------------------------------------------------# + +exit diff --git a/bin/v-list-sys-php-config b/bin/v-list-sys-php-config new file mode 100755 index 00000000..b0090271 --- /dev/null +++ b/bin/v-list-sys-php-config @@ -0,0 +1,94 @@ +#!/bin/bash +# info: list php config parameters +# options: [FORMAT] +# +# The function for obtaining the list of php config parameters. + + +#----------------------------------------------------------# +# Variable&Function # +#----------------------------------------------------------# + +# Argument definition +format=${1-shell} + +# Includes +source $VESTA/func/main.sh +source $VESTA/conf/vesta.conf + +# JSON list function +json_list() { + eval $(echo "$config"|egrep "$keys"|\ + sed -e "s/[ ]*=/=/" -e "s/=[ ]*/=\'/" -e "s/$/'/") + echo '{ + "CONFIG": { + "memory_limit": "'$memory_limit'", + "max_execution_time": "'$max_execution_time'", + "max_input_time": "'$max_input_time'", + "upload_max_filesize": "'$upload_max_filesize'", + "post_max_size": "'$post_max_size'", + "display_errors": "'$display_errors'", + "error_reporting": "'$error_reporting'", + "config_path": "'$config_path'" + } +}' +} + +# SHELL list function +shell_list() { + echo "$config" |egrep "$keys" |tr -d '=' + echo "config_path $config_path" +} + +# PLAIN list function +plain_list() { + echo "$config" |egrep "$keys" |tr -d '=' + echo "config_path $config_path" +} + +# CSV list function +csv_list() { + echo "$keys" |sed "s/ |/,/g" + echo "$config" |egrep "$keys" |tr -d '=' |awk '{print $2}' |tr '\n' ',' + echo +} + + +#----------------------------------------------------------# +# Action # +#----------------------------------------------------------# + +# Defining config path +config_path=$(find /etc/php* -name php.ini) +config_count=$(echo "$config_path" |wc -l) +if [ "$config_count" -gt 1 ]; then + if [ "$WEB_SYSTEM" = "nginx" ]; then + config_path=$(echo "$config_path"| grep fpm) + else + config_path=$(echo "$config_path"| grep apache) + fi +fi + + +# Defining keys +keys="memory_limit |max_execution_time |max_input_time" +keys="$keys |upload_max_filesize |post_max_size" +keys="$keys |display_errors |error_reporting " + +# Reading config +config=$(cat $config_path|grep -v "^;") + +# Listing data +case $format in + json) json_list ;; + plain) plain_list ;; + csv) csv_list ;; + shell) shell_list |column -t;; +esac + + +#----------------------------------------------------------# +# Vesta # +#----------------------------------------------------------# + +exit diff --git a/bin/v-list-sys-proftpd-config b/bin/v-list-sys-proftpd-config new file mode 100755 index 00000000..f0b35502 --- /dev/null +++ b/bin/v-list-sys-proftpd-config @@ -0,0 +1,64 @@ +#!/bin/bash +# info: list proftpd config parameters +# options: [FORMAT] +# +# The function for obtaining the list of proftpd config parameters. + + +#----------------------------------------------------------# +# Variable&Function # +#----------------------------------------------------------# + +# Argument definition +format=${1-shell} + +# Includes +source $VESTA/func/main.sh + +# JSON list function +json_list() { + echo '{ + "CONFIG": { + "config_path": "'$config_path'" + } +}' +} + +# SHELL list function +shell_list() { + echo "config_path: $config_path" +} + +# PLAIN list function +plain_list() { + echo "$config_path" +} + +# CSV list function +csv_list() { + echo "config_path" + echo "$config_path" +} + + +#----------------------------------------------------------# +# Action # +#----------------------------------------------------------# + +# Defining config path +config_path=$(find /etc/proftpd* -name proftpd.conf 2>/dev/null) + +# Listing data +case $format in + json) json_list ;; + plain) plain_list ;; + csv) csv_list ;; + shell) shell_list;; +esac + + +#----------------------------------------------------------# +# Vesta # +#----------------------------------------------------------# + +exit diff --git a/bin/v-list-sys-spamd-config b/bin/v-list-sys-spamd-config new file mode 100755 index 00000000..04d82c73 --- /dev/null +++ b/bin/v-list-sys-spamd-config @@ -0,0 +1,64 @@ +#!/bin/bash +# info: list spamassassin config parameters +# options: [FORMAT] +# +# The function for obtaining the list of spamassassin config parameters. + + +#----------------------------------------------------------# +# Variable&Function # +#----------------------------------------------------------# + +# Argument definition +format=${1-shell} + +# Includes +source $VESTA/func/main.sh + +# JSON list function +json_list() { + echo '{ + "CONFIG": { + "config_path": "'$config_path'" + } +}' +} + +# SHELL list function +shell_list() { + echo "config_path: $config_path" +} + +# PLAIN list function +plain_list() { + echo "$config_path" +} + +# CSV list function +csv_list() { + echo "config_path" + echo "$config_path" +} + + +#----------------------------------------------------------# +# Action # +#----------------------------------------------------------# + +# Defining config path +config_path=$(find /etc/spamassassin /etc/mail -name local.cf 2>/dev/null) + +# Listing data +case $format in + json) json_list ;; + plain) plain_list ;; + csv) csv_list ;; + shell) shell_list;; +esac + + +#----------------------------------------------------------# +# Vesta # +#----------------------------------------------------------# + +exit diff --git a/bin/v-list-sys-vsftpd-config b/bin/v-list-sys-vsftpd-config new file mode 100755 index 00000000..060d8842 --- /dev/null +++ b/bin/v-list-sys-vsftpd-config @@ -0,0 +1,64 @@ +#!/bin/bash +# info: list vsftpd config parameters +# options: [FORMAT] +# +# The function for obtaining the list of vsftpd config parameters. + + +#----------------------------------------------------------# +# Variable&Function # +#----------------------------------------------------------# + +# Argument definition +format=${1-shell} + +# Includes +source $VESTA/func/main.sh + +# JSON list function +json_list() { + echo '{ + "CONFIG": { + "config_path": "'$config_path'" + } +}' +} + +# SHELL list function +shell_list() { + echo "config_path: $config_path" +} + +# PLAIN list function +plain_list() { + echo "$config_path" +} + +# CSV list function +csv_list() { + echo "config_path" + echo "$config_path" +} + + +#----------------------------------------------------------# +# Action # +#----------------------------------------------------------# + +# Defining config path +config_path=$(find /etc/vsftpd* -name vsftpd.conf 2>/dev/null) + +# Listing data +case $format in + json) json_list ;; + plain) plain_list ;; + csv) csv_list ;; + shell) shell_list;; +esac + + +#----------------------------------------------------------# +# Vesta # +#----------------------------------------------------------# + +exit diff --git a/bin/v-open-fs-config b/bin/v-open-fs-config new file mode 100755 index 00000000..807bbec9 --- /dev/null +++ b/bin/v-open-fs-config @@ -0,0 +1,47 @@ +#!/bin/bash +# info: open config +# options: CONFIG +# +# The function opens/reads config files on the file system + +src_file=$1 + +# Checking arguments +if [ -z "$src_file" ]; then + echo "Usage: CONFIG" + exit 1 +fi + +# Checking vesta user +if [ ! -e "$VESTA/data/users/$user" ]; then + echo "Error: vesta user $user doesn't exist" + exit 3 +fi + +# Checking file on fs +if [ ! -e "$src_file" ]; then + echo "Error: $src_file file doesn't exist" + exit 3 +fi + +# Checking path +if [ ! -z "$src_file" ]; then + rpath=$(readlink -f "$src_file") + services="nginx|apache|httpd|php|ftp|bind|named|exim|dovecot|spamassassin" + services="$services|clam|mysql|postgresql|pgsql|cron|fail2ban|iptables" + spath=$(echo "$rpath" |egrep "$services") + if [ -z "$spath" ]; then + echo "Error: invalid source path $src_file" + exit 2 + fi +fi + +# Reading conf +cat "$src_file" 2>/dev/null +if [ $? -ne 0 ]; then + echo "Error: file $src_file was not opened" + exit 3 +fi + +# Exiting +exit diff --git a/web/edit/server/apache2/index.php b/web/edit/server/apache2/index.php new file mode 100644 index 00000000..d3c79bcb --- /dev/null +++ b/web/edit/server/apache2/index.php @@ -0,0 +1,58 @@ +o^#AZZ{my|_BL_|Esh=?&p^u$uqY>brR5iuenB4WIG z6;q5cBGzI=^hE9H)$RM?9*&>)-hMxAzPsn1d;Xtu?{7)cq2K=gguluBjwIQgB*`H` ztmL==ztzvlhrg1XI3xKb;epT{b&qI07U{h9wvxxkm{1Tpg-=3=xTN)}+usnqmA$;@ z3(o!p(RH^!FWR3!)jqHNcJkX~ui^Ynilz>agv$c;7#FAqauF*W1e|l^+ z{w|t$%s(}+y8Ua>?fj5iUkjO{_&)?}Qr}tOnt%>|%_lR?9CH7N?T%n)=nM$tk&c79 ztqI6tH+{Yu&p2nkuz?P89|ZGpF7mwo3Guj##Dp9<6a+7WO|yYLe+JF0+4+QMyXVAA z@5!0DOzZhQ^)nmSMH3hEOTO5&v$ANf2hEJ(~aLR!Ar{#DfbsTJS8Z`d6c zh~=tawZ#tc;OCt{uKNYkT^3Dj&HOdv@fOp&KEdZe?U<#Hj?b(x?_Q4nVq;7=Ej06y zmB(GF2=pG`JoL@(;$zWSe6*8!DI4aW`DB*ueY@dkWT*jeIro5G zwX>V`jQp8p!1w8%VDaz{Sg+v`kL|yRrcPP?w3EZm_GpW{Xa0Gw?2Uj={&vRtzrE)k zQETR#_lFpXWn3u4y^otYwEH>VAZxsEo9y9k<;aTMIeh>@$HKEy? zpT+;AbgiDe@649%S-Jn%S#td8$m2ekEbn3#e_no?m)w>G?uFHoZx#Ni3G;3BhDY7<`1G>g|2^5ECcItP1x11Rv-yBGE({BE z0(Z*W%S%(|2?0OU6<@x#_BK|;$M;WRs~+c#AuT^7AJYPPQV%=l+n(o*N +
+
+ + + + → ".htmlentities($_SESSION['error_msg']).""; + } else { + if (!empty($_SESSION['ok_msg'])) { + echo ""; + } + } + ?> + + + +
+ / + → ".$_SESSION['ok_msg']."
+
+
+
+ +
+ + + +
+ + +
+ + + + + + + + +
+ + +
+
+ + + + + + + + + + + + + + +
+ +
+ +
+ +
+ +
+ +
+ + + + + + +
+ + + +
+
+
+
\ No newline at end of file diff --git a/web/templates/admin/edit_server_dovecot.html b/web/templates/admin/edit_server_dovecot.html new file mode 100644 index 00000000..50d9668e --- /dev/null +++ b/web/templates/admin/edit_server_dovecot.html @@ -0,0 +1,171 @@ +
+
+
+ + + + → ".htmlentities($_SESSION['error_msg']).""; + } else { + if (!empty($_SESSION['ok_msg'])) { + echo ""; + } + } + ?> + + +
+ / + → ".$_SESSION['ok_msg']."
+
+
+
+ +
+ + + +
+ + +
+ + + + + + + + +
+ + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ + + + + + + +
+ + + +
+
+
+
diff --git a/web/templates/admin/edit_server_httpd.html b/web/templates/admin/edit_server_httpd.html new file mode 100644 index 00000000..a713b54e --- /dev/null +++ b/web/templates/admin/edit_server_httpd.html @@ -0,0 +1,86 @@ +
+
+
+ + + + → ".htmlentities($_SESSION['error_msg']).""; + } else { + if (!empty($_SESSION['ok_msg'])) { + echo ""; + } + } + ?> + + +
+ / + + → ".$_SESSION['ok_msg']."
+
+
+
+ +
+ + + +
+ + +
+ + + + + + + + +
+ + +
+
+ + + + + + + + + + + +
+ +
+ +
+ +
+ + + + + + + +
+ + + +
+
+
+
\ No newline at end of file diff --git a/web/templates/admin/edit_server_mysql.html b/web/templates/admin/edit_server_mysql.html new file mode 100644 index 00000000..d5fa8976 --- /dev/null +++ b/web/templates/admin/edit_server_mysql.html @@ -0,0 +1,155 @@ +
+
+
+ + + + → ".htmlentities($_SESSION['error_msg']).""; + } else { + if (!empty($_SESSION['ok_msg'])) { + echo ""; + } + } + ?> + + +
+ / + → ".$_SESSION['ok_msg']."
+
+
+
+ +
+ + + +
+ + +
+ + + + + + + + +
+ + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ max_connections +
+ +

+
+ max_user_connections +
+ +

+
+ wait_timeout +
+ +

+
+ interactive_timeout +
+ +

+
+ max_allowed_packet +
+ +

+
+ +
+ + + + + + + + + + + + + + + +
+ +
+ +
+ +
+ +
+ + + + + + + +
+ + + +
+
+
+
\ No newline at end of file diff --git a/web/templates/admin/edit_server_nginx.html b/web/templates/admin/edit_server_nginx.html new file mode 100644 index 00000000..3bcd4f6b --- /dev/null +++ b/web/templates/admin/edit_server_nginx.html @@ -0,0 +1,213 @@ +
+
+
+ + + + → ".htmlentities($_SESSION['error_msg']).""; + } else { + if (!empty($_SESSION['ok_msg'])) { + echo ""; + } + } + ?> + + +
+ / + + → ".$_SESSION['ok_msg']."
+
+
+
+ +
+ + + +
+ + +
+ + + + + + + + +
+ + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ worker_processes +
+ +

+
+ worker_connections +
+ +

+
+ client_max_body_size +
+ +

+
+ send_timeout +
+ +

+
+ proxy_connect_timeout +
+ +

+
+ proxy_send_timeout +
+ +

+
+ proxy_read_timeout +
+ +

+
+ gzip +
+ +

+
+ gzip_comp_level +
+ +

+
+ charset +
+ +

+
+ +
+ + + + + + + + + + + + + + + + +
+ +
+ +
+ +
+ +
+ + + + + + + +
+ + + +
+
+
+
\ No newline at end of file diff --git a/web/templates/admin/edit_server_pgsql.html b/web/templates/admin/edit_server_pgsql.html new file mode 100644 index 00000000..314729a6 --- /dev/null +++ b/web/templates/admin/edit_server_pgsql.html @@ -0,0 +1,92 @@ +
+
+
+ + + + → ".htmlentities($_SESSION['error_msg']).""; + } else { + if (!empty($_SESSION['ok_msg'])) { + echo ""; + } + } + ?> + + +
+ / + → ".$_SESSION['ok_msg']."
+
+
+
+ +
+ + + +
+ + +
+ + + + + + + + +
+ + +
+
+ + + + + + + + + + + + + + +
+ +
+ +
+ +
+ +
+ +
+ + + + + + + +
+ + + +
+
+
+
diff --git a/web/templates/admin/edit_server_php.html b/web/templates/admin/edit_server_php.html new file mode 100644 index 00000000..ef54c323 --- /dev/null +++ b/web/templates/admin/edit_server_php.html @@ -0,0 +1,175 @@ +
+
+
+ + + + → ".htmlentities($_SESSION['error_msg']).""; + } else { + if (!empty($_SESSION['ok_msg'])) { + echo ""; + } + } + ?> + + +
+ / + + → ".$_SESSION['ok_msg']."
+
+
+
+ +
+ + + +
+ + +
+ + + + + + + + +
+ + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ max_execution_time +
+ +

+
+ max_input_time +
+ +

+
+ memory_limit +
+ +

+
+ error_reporting +
+ +

+
+ display_errors +
+ +

+
+ post_max_size +
+ +

+
+ upload_max_filesize +
+ +

+
+ +
+ + + + + + + + + + + + + +
+ +
+ +
+ +
+ +
+ + + + + + +
+ + + +
+
+
+
\ No newline at end of file diff --git a/web/templates/admin/edit_server_service.html b/web/templates/admin/edit_server_service.html new file mode 100644 index 00000000..76cb75c8 --- /dev/null +++ b/web/templates/admin/edit_server_service.html @@ -0,0 +1,84 @@ +
+
+
+ + + + → ".htmlentities($_SESSION['error_msg']).""; + } else { + if (!empty($_SESSION['ok_msg'])) { + echo ""; + } + } + ?> + + +
+ / + → ".$_SESSION['ok_msg']."
+
+
+
+ +
+ + + +
+ + +
+ + + + + + + + +
+ + +
+
+ + + + + + + + + + +
+ +
+ +
+ +
+ + + + + + + +
+ + + +
+
+
+
\ No newline at end of file diff --git a/web/templates/admin/list_services.html b/web/templates/admin/list_services.html index 189d7d90..0428bbe8 100644 --- a/web/templates/admin/list_services.html +++ b/web/templates/admin/list_services.html @@ -53,6 +53,7 @@
+
 ↵
 R
@@ -136,6 +137,7 @@
+
 ↵
 S
 R
@@ -169,8 +171,7 @@
:
-
: -
+
:
From dfb01cc47304f99523699544e01382be9f6e93cf Mon Sep 17 00:00:00 2001 From: Serghey Rodin Date: Thu, 25 Aug 2016 19:30:54 +0300 Subject: [PATCH 056/104] fix wildcards in backup exclusion list --- bin/v-list-user-backup-exclusions | 3 ++- web/templates/admin/list_backup_exclusions.html | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/bin/v-list-user-backup-exclusions b/bin/v-list-user-backup-exclusions index d0f428e8..4ef75bf7 100755 --- a/bin/v-list-user-backup-exclusions +++ b/bin/v-list-user-backup-exclusions @@ -18,6 +18,7 @@ source $VESTA/func/main.sh # JSON list function json_list() { + set -f i=1 echo '{' echo ' "WEB": {' @@ -27,7 +28,7 @@ json_list() { object_keys=$(echo ${object//:/ } |wc -w) for key in $(echo "${object/:/ }"); do if [ "$j" -eq 1 ]; then - echo -n " \"$key\": " + echo -n " \"${key}\": " if [ "$object_keys" -eq 1 ]; then echo -n '""' fi diff --git a/web/templates/admin/list_backup_exclusions.html b/web/templates/admin/list_backup_exclusions.html index 28d07574..67de46a7 100644 --- a/web/templates/admin/list_backup_exclusions.html +++ b/web/templates/admin/list_backup_exclusions.html @@ -77,7 +77,7 @@ $ex_value) { - echo ''.$ex_key.':'.$ex_value.'
'; + echo ''.$ex_key.' '.$ex_value.'
'; } ?> From 03381b828f39655e98c46068f4df540f29f6aea0 Mon Sep 17 00:00:00 2001 From: Serghey Rodin Date: Thu, 25 Aug 2016 19:31:23 +0300 Subject: [PATCH 057/104] fix for bulk operations on backups --- web/templates/admin/list_backup.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/templates/admin/list_backup.html b/web/templates/admin/list_backup.html index 0dcac926..5bc585f1 100644 --- a/web/templates/admin/list_backup.html +++ b/web/templates/admin/list_backup.html @@ -19,7 +19,7 @@
-
+