manually merged

This commit is contained in:
Serghey Rodin 2015-03-10 00:47:06 +02:00
commit 8ef6558b3d
22 changed files with 559 additions and 244 deletions

145
bin/v-add-backup-sftp-host Executable file
View file

@ -0,0 +1,145 @@
#!/bin/bash
# info: add backup sftp host
# options: HOST USERNAME [PASSWORD] [PATH] [PORT]
#
# The function adds sftp host for system backups
#----------------------------------------------------------#
# Variable&Function #
#----------------------------------------------------------#
# Argument defenition
sftp_host=$1
sftp_user=$2
sftp_password=${3-******}
sftp_path=${4-backup}
sftp_port=${5-22}
A3='******'
# Includes
source $VESTA/func/main.sh
source $VESTA/conf/vesta.conf
# Replace password with ******
if [[ $A3 != '******' ]]
then
EVENT="${EVENT/$sftp_password/******}"
fi
# sftp command function
sftpc() {
expect -f "-" <<EOF "$@"
set count 0
spawn /usr/bin/sftp -o StrictHostKeyChecking=no -o Port=$sftp_port $sftp_user@$sftp_host
expect {
"password:" {
send "$sftp_password\r"
exp_continue
}
-re "Couldn't|(.*)disconnect|(.*)stalled|(.*)not found" {
set count \$argc
set output "Disconnected."
set rc $E_FTP
exp_continue
}
-re ".*denied.*(publickey|password)." {
set output "Permission denied, wrong publickey or password."
set rc $E_CONNECT
}
"sftp>" {
if {\$count < \$argc} {
set arg [lindex \$argv \$count]
send "\$arg\r"
incr count
} else {
send "exit\r"
set output "Disconnected."
if {[info exists rc] != 1} {
set rc $OK
}
}
exp_continue
}
timeout {
set output "Connection timeout."
set rc $E_CONNECT
}
}
if {[info exists output] == 1} {
puts "\$output"
}
exit \$rc
EOF
}
#----------------------------------------------------------#
# Verifications #
#----------------------------------------------------------#
check_expect=$(which expect)
if [[ ! -n $check_expect ]]
then
echo "Error: \"expect\" utility not found"
log_event "$E_NOTEXIST" "$EVENT"
exit $E_NOTEXIST
fi
check_args '2' "$#" "HOST USERNAME [PASSWORD] [PATH] [PORT]"
#----------------------------------------------------------#
# Action #
#----------------------------------------------------------#
# Checking network connection and write permissions
sftmpdir="$sftp_path/vst.bK76A9SUkt"
sftpc "mkdir $sftp_path" > /dev/null 2>&1
sftpc "mkdir $sftmpdir" "rmdir $sftmpdir"
rc=$?
if [[ "$rc" != 0 ]]
then
case $rc in
$E_CONNECT) echo "Error: can't login to sftp host";;
$E_FTP) echo "Error: can't create temp folder on the sftp host";;
esac
log_event "$rc" "$EVENT"
exit "$rc"
fi
# Adding sftp backup config file
echo "HOST='$sftp_host'
USERNAME='$sftp_user'
PASSWORD='$sftp_password'
BPATH='$sftp_path'
PORT='$sftp_port'
TIME='$TIME'
DATE='$DATE'" > $VESTA/conf/sftp.backup.conf
chmod 660 $VESTA/conf/sftp.backup.conf
#----------------------------------------------------------#
# Vesta #
#----------------------------------------------------------#
# Update vesta.conf
if [ -z "$(grep LANGUAGE $VESTA/conf/vesta.conf)" ]; then
echo "BACKUP_SYSTEM='ftp'" >> $VESTA/conf/vesta.conf
else
bckp=$(echo "$BACKUP_SYSTEM,sftp" |\
sed "s/,/\n/g"|\
sort -r -u |\
sed "/^$/d"|\
sed ':a;N;$!ba;s/\n/,/g')
sed -i "s/BACKUP_SYSTEM=.*/BACKUP_SYSTEM='$bckp'/g" $VESTA/conf/vesta.conf
fi
# Logging
echo "$sftp_host/$sftp_path successfully added as backup destination"
log_event "$OK" "$EVENT"
exit

View file

@ -687,6 +687,158 @@ ftp_backup() {
fi
}
# sftp command function
sftpc() {
expect -f "-" <<EOF "$@"
set timeout 60
set count 0
spawn /usr/bin/sftp -o StrictHostKeyChecking=no -o Port=$PORT $USERNAME@$HOST
expect {
"password:" {
send "$PASSWORD\r"
exp_continue
}
-re "Couldn't|(.*)disconnect|(.*)stalled|(.*)not found" {
set count \$argc
set output "Disconnected."
set rc $E_FTP
exp_continue
}
-re ".*denied.*(publickey|password)." {
set output "Permission denied, wrong publickey or password."
set rc $E_CONNECT
}
-re "\[0-9]*%" {
exp_continue
}
"sftp>" {
if {\$count < \$argc} {
set arg [lindex \$argv \$count]
send "\$arg\r"
incr count
} else {
send "exit\r"
set output "Disconnected."
if {[info exists rc] != 1} {
set rc $OK
}
}
exp_continue
}
timeout {
set output "Connection timeout."
set rc $E_CONNECT
}
}
if {[info exists output] == 1} {
puts "\$output"
}
exit \$rc
EOF
}
sftp_backup() {
#Checking expect installation
check_expect=$(which expect)
if [[ ! -n $check_expect ]]
then
echo "Error: \"expect\" utility not found"
log_event "$E_NOTEXIST" "$EVENT"
exit $E_NOTEXIST
fi
# Checking config
if [ ! -e "$VESTA/conf/sftp.backup.conf" ]; then
sftp_conf_error="Can't open $VESTA/conf/sftp.backup.conf"
echo "$sftp_conf_error" | $send_mail -s "$subj" $email
echo "Error: $VESTA/conf/sftp.backup.conf doesn't exist"
sed -i "/ $user /d" $VESTA/data/queue/backup.pipe
log_event "$E_NOTEXIST" "$EVENT"
exit $E_NOTEXIST
fi
# Parse config
source $VESTA/conf/sftp.backup.conf
# Set current data
DATE=$(date +%F)
TIME=$(date +%T)
# Set default port
if [ -z "$(grep 'PORT=' $VESTA/conf/sftp.backup.conf)" ]; then
PORT='22'
fi
# Checking variables
if [ -z "$HOST" ] || [ -z "$USERNAME" ] || [ -z "$PASSWORD" ]; then
rm -rf $tmpdir
echo "Can't parse sftp backup configuration" |\
$send_mail -s "$subj" $email
echo "Error: Parsing error"
sed -i "/ $user /d" $VESTA/data/queue/backup.pipe
log_event "$E_PARSING" "$EVENT"
exit $E_PARSING
fi
# Debug info
echo -e "$(date "+%F %T") Remote: $HOST/$BPATH/$user.$DATE.tar"
# Checking network connection and write permissions
echo -e "$(date "+%F %T") Checking network connection and write permissions ..."
sftmpdir="$BPATH/vst.bK76A9SUkt"
sftpc "mkdir $BPATH" > /dev/null 2>&1
sftpc "mkdir $sftmpdir" "rmdir $sftmpdir" > /dev/null 2>&1
rc=$?
if [[ "$rc" != 0 ]]
then
rm -rf $tmpdir
case $rc in
$E_CONNECT) echo "Error: can't login to sftp host" | $send_mail -s "$subj" $email;;
$E_FTP) echo "Error: can't create temp folder on the sftp host" | $send_mail -s "$subj" $email;;
esac
sed -i "/ $user /d" $VESTA/data/queue/backup.pipe
log_event "$rc" "$EVENT"
exit "$rc"
fi
echo -e "$(date "+%F %T") Connection established"
# Checking retention
echo -e "$(date "+%F %T") Checking retention ..."
backup_list=$(sftpc "cd $BPATH" "ls -l" |awk '{print $9}' |grep "^$user\.")
backups_count=$(echo "$backup_list" | wc -l)
if [ "$backups_count" -ge "$BACKUPS" ]; then
backups_rm_number=$((backups_count - BACKUPS + 1))
for backup in $(echo "$backup_list" | head -n $backups_rm_number); do
backup_date=$(echo $backup | sed -e "s/$user.//" -e "s/.tar.*$//")
if [ -z $deprecated ]; then deprecated="$backup_date"; else deprecated="$deprecated $backup_date"; fi
echo -e "$(date "+%F %T") Roated sftp backup: $backup_date"
msg="$msg\n$(date "+%F %T") Roated sftp backup: $backup_date"
sftpc "cd $BPATH" "rm $backup" > /dev/null 2>&1
done
fi
# Uploading backup archive
echo -e "$(date "+%F %T") Uploading $user.$DATE.tar ..."
if [ "$localbackup" = 'yes' ]; then
cd $BACKUP
sftpc "cd $BPATH" "put $user.$DATE.tar" > /dev/null 2>&1
else
cd $tmpdir
tar -cf $BACKUP/$user.$DATE.tar .
cd $BACKUP/
sftpc "cd $BPATH" "put $user.$DATE.tar" > /dev/null 2>&1
rm -f $user.$DATE.tar
fi
echo -e "$(date "+%F %T") Upload complete"
}
echo "-- SUMMARY --"
msg="$msg\n-- SUMMARY --"
@ -695,6 +847,7 @@ for backup_type in $(echo -e "${BACKUP_SYSTEM//,/\\n}"); do
case $backup_type in
local) local_backup ;;
ftp) ftp_backup ;;
sftp) sftp_backup ;;
esac
done

View file

@ -0,0 +1,46 @@
#!/bin/bash
# info: delete backup sftp server
# options: NONE
#
# The function deletes sftp backup host
#----------------------------------------------------------#
# Variable&Function #
#----------------------------------------------------------#
# Includes
source $VESTA/func/main.sh
source $VESTA/conf/vesta.conf
#----------------------------------------------------------#
# Verifications #
#----------------------------------------------------------#
#----------------------------------------------------------#
# Action #
#----------------------------------------------------------#
# Delete configuration file
rm -f $VESTA/conf/sftp.backup.conf
#----------------------------------------------------------#
# Vesta #
#----------------------------------------------------------#
# Update vesta.conf
bckp=$(echo "$BACKUP_SYSTEM" |\
sed "s/,/\n/g"|\
sed "s/sftp//" |\
sed "/^$/d"|\
sed ':a;N;$!ba;s/\n/,/g')
sed -i "s/BACKUP_SYSTEM=.*/BACKUP_SYSTEM='$bckp'/g" $VESTA/conf/vesta.conf
# Logging
echo "sftp host successfulle removed from configuration"
log_event "$OK" "$EVENT"
exit

View file

@ -12,6 +12,7 @@
# Defining absolute path for iptables and modprobe
iptables="/sbin/iptables"
modprobe="/sbin/modprobe"
sysctl="/sbin/sysctl"
# Includes
source /etc/profile.d/vesta.sh
@ -38,11 +39,16 @@ if [ ! -e "$rules" ]; then
exit
fi
$sysctl net.netfilter.nf_conntrack_max >/dev/null 2>&1
if [ $? -ne 0 ]; then
conntrack='no'
fi
# Checking conntrack module avaiabilty
$modprobe nf_conntrack >/dev/null 2>&1
$modprobe nf_conntrack_ftp >/dev/null 2>&1
if [ $? -ne 0 ]; then
stateful='no'
conntrack_ftp='no'
fi
# Creating temporary file
@ -75,7 +81,7 @@ for line in $(sort -r -n -k 2 -t \' $rules); do
# Checking FTP for contrack module
if [ "$TYPE" = "FTP" ] || [ "$PORT" = '21' ]; then
if [ "$stateful" != 'no' ]; then
if [ "$conntrack_ftp" != 'no' ]; then
state="-m conntrack --ctstate NEW"
else
port="-m multiport --dports 20,21,12000:12100"
@ -101,7 +107,7 @@ for p_rule in $(cat $ports); do
done
# Enabling stateful support
if [ "$stateful" != 'no' ]; then
if [ "$conntrack" != 'no' ]; then
str="$iptables -A INPUT -p tcp -m state"
str="$str --state ESTABLISHED,RELATED -j ACCEPT"
echo "$str" >> $tmp

View file

@ -2,3 +2,27 @@ protocols = imap pop3
listen = *, ::
base_dir = /var/run/dovecot/
!include conf.d/*.conf
namespace {
type = private
separator = /
prefix =
inbox = yes
mailbox Sent {
auto = subscribe
special_use = \Sent
}
mailbox Drafts {
auto = subscribe
special_use = \Drafts
}
mailbox Trash {
auto = subscribe
special_use = \Trash
}
mailbox Junk {
auto = subscribe
special_use = \Junk
}
}

View file

@ -3,7 +3,7 @@ ServerName "FTP"
ServerIdent on "FTP Server ready."
ServerAdmin root@localhost
DefaultServer on
VRootEngine on
VRootEngine off
DefaultRoot ~ !adm
AuthPAMConfig proftpd
AuthOrder mod_auth_pam.c* mod_auth_unix.c

View file

@ -3,51 +3,18 @@
##
protocol imap {
# Maximum IMAP command line length. Some clients generate very long command
# lines with huge mailboxes, so you may need to raise this if you get
# "Too long argument" or "IMAP command line too large" errors often.
#imap_max_line_length = 64k
# Maximum number of IMAP connections allowed for a user from each IP address.
# NOTE: The username is compared case-sensitively.
#mail_max_userip_connections = 10
# Space separated list of plugins to load (default is global mail_plugins).
#mail_plugins = $mail_plugins
# IMAP logout format string:
# %i - total number of bytes read from client
# %o - total number of bytes sent to client
#imap_logout_format = bytes=%i/%o
# Override the IMAP CAPABILITY response. If the value begins with '+',
# add the given capabilities on top of the defaults (e.g. +XFOO XBAR).
#imap_capability =
# How long to wait between "OK Still here" notifications when client is
# IDLEing.
#imap_idle_notify_interval = 2 mins
# ID field names and values to send to clients. Using * as the value makes
# Dovecot use the default value. The following fields have default values
# currently: name, version, os, os-version, support-url, support-email.
#imap_id_send =
# ID fields sent by client to log. * means everything.
#imap_id_log =
# Workarounds for various client bugs:
# delay-newmail:
# Send EXISTS/RECENT new mail notifications only when replying to NOOP
# and CHECK commands. Some clients ignore them otherwise, for example OSX
# Mail (<v2.1). Outlook Express breaks more badly though, without this it
# may show user "Message no longer in server" errors. Note that OE6 still
# breaks even with this workaround if synchronization is set to
# "Headers Only".
# tb-extra-mailbox-sep:
# With mbox storage a mailbox can contain either mails or submailboxes,
# but not both. Thunderbird separates these two by forcing server to
# accept '/' suffix in mailbox names in subscriptions list.
# The list is space-separated.
#imap_client_workarounds =
mail_plugins = $mail_plugins autocreate
}
plugin {
autocreate = Trash
autocreate2 = Spam
autocreate3 = Sent
autocreate4 = Drafts
#autocreate5 = Custom
autosubscribe = Trash
autosubscribe2 = Spam
autosubscribe3 = Sent
autosubscribe4 = Drafts
#autosubscribe5 = Custom
}

View file

@ -3,56 +3,18 @@
##
protocol imap {
# Maximum IMAP command line length. Some clients generate very long command
# lines with huge mailboxes, so you may need to raise this if you get
# "Too long argument" or "IMAP command line too large" errors often.
#imap_max_line_length = 64k
# Maximum number of IMAP connections allowed for a user from each IP address.
# NOTE: The username is compared case-sensitively.
#mail_max_userip_connections = 10
# Space separated list of plugins to load (default is global mail_plugins).
#mail_plugins = $mail_plugins
# IMAP logout format string:
# %i - total number of bytes read from client
# %o - total number of bytes sent to client
#imap_logout_format = bytes=%i/%o
# Override the IMAP CAPABILITY response. If the value begins with '+',
# add the given capabilities on top of the defaults (e.g. +XFOO XBAR).
#imap_capability =
# How long to wait between "OK Still here" notifications when client is
# IDLEing.
#imap_idle_notify_interval = 2 mins
# ID field names and values to send to clients. Using * as the value makes
# Dovecot use the default value. The following fields have default values
# currently: name, version, os, os-version, support-url, support-email.
#imap_id_send =
# ID fields sent by client to log. * means everything.
#imap_id_log =
# Workarounds for various client bugs:
# delay-newmail:
# Send EXISTS/RECENT new mail notifications only when replying to NOOP
# and CHECK commands. Some clients ignore them otherwise, for example OSX
# Mail (<v2.1). Outlook Express breaks more badly though, without this it
# may show user "Message no longer in server" errors. Note that OE6 still
# breaks even with this workaround if synchronization is set to
# "Headers Only".
# tb-extra-mailbox-sep:
# Thunderbird gets somehow confused with LAYOUT=fs (mbox and dbox) and
# adds extra '/' suffixes to mailbox names. This option causes Dovecot to
# ignore the extra '/' instead of treating it as invalid mailbox name.
# tb-lsub-flags:
# Show \Noselect flags for LSUB replies with LAYOUT=fs (e.g. mbox).
# This makes Thunderbird realize they aren't selectable and show them
# greyed out, instead of only later giving "not selectable" popup error.
#
# The list is space-separated.
#imap_client_workarounds =
mail_plugins = $mail_plugins autocreate
}
plugin {
autocreate = Trash
autocreate2 = Spam
autocreate3 = Sent
autocreate4 = Drafts
#autocreate5 = Custom
autosubscribe = Trash
autosubscribe2 = Spam
autosubscribe3 = Sent
autosubscribe4 = Drafts
#autosubscribe5 = Custom
}

View file

@ -533,6 +533,7 @@ wget $CHOST/$VERSION/sudoers.conf -O /etc/sudoers
wget $CHOST/$VERSION/sudoers.admin.conf -O /etc/sudoers.d/admin
chmod 440 /etc/sudoers
chmod 440 /etc/sudoers.d/admin
echo 'Defaults:admin !syslog' >>/etc/sudoers.d/admin
# NTP Synchronization
echo '#!/bin/sh' > /etc/cron.daily/ntpdate

View file

@ -534,6 +534,7 @@ wget $CHOST/$VERSION/sudoers.vestacp.conf -O /etc/sudoers.d/vestacp
wget $CHOST/$VERSION/sudoers.admin.conf -O /etc/sudoers.d/admin
chmod 440 /etc/sudoers.d/vestacp
chmod 440 /etc/sudoers.d/admin
echo 'Defaults:admin !syslog' >>/etc/sudoers.d/admin
# NTP Synchronization
echo '#!/bin/sh' > /etc/cron.daily/ntpdate

View file

@ -1291,11 +1291,11 @@ label:active {
.toggle-psw-visibility-icon {
cursor: pointer;
opacity: 0.4;
opacity: 1;
}
.show-passwords-enabled-action {
opacity: 1;
opacity: 0.4;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 311 B

BIN
web/images/unlim.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 225 B

View file

@ -26,7 +26,7 @@ $LANG['ua'] = array(
'CRON' => 'CRON',
'BACKUP' => 'BACKUP',
'Add User' => 'Додати акаунт',
'Add User' => 'Додати користувача',
'Add Domain' => 'Додати домен',
'Add Web Domain' => 'Додати WEB домен',
'Add DNS Domain' => 'Додати DNS домен',
@ -45,10 +45,10 @@ $LANG['ua'] = array(
'Add one more FTP Account' => 'Додати ще один FTP акаунт',
'Search' => 'Пошук',
'Overall Statistics' => 'Загальна статистика',
'Daily' => 'Щоденні',
'Weekly' => 'Щотижневі',
'Monthly' => 'Щомісячні',
'Yearly' => 'Щорічні',
'Daily' => 'Щоденний',
'Weekly' => 'Щотижневий',
'Monthly' => 'Щомісячний',
'Yearly' => 'Щорічний',
'Add' => 'Додати',
'Back' => 'Назад',
'Save' => 'Зберегти',
@ -56,21 +56,21 @@ $LANG['ua'] = array(
'toggle all' => 'виділити все',
'apply to selected' => 'застосувати до вибраних',
'rebuild' => 'перестворити',
'rebuild web' => 'перестворити WEB',
'rebuild dns' => 'перестворити DNS',
'rebuild mail' => 'перестворити MAIL',
'rebuild db' => 'перестворити DB',
'rebuild cron' => 'перестворити CRON',
'rebuild' => 'перебудувати',
'rebuild web' => 'перебудувати WEB',
'rebuild dns' => 'перебудувати DNS',
'rebuild mail' => 'перебудувати MAIL',
'rebuild db' => 'перебудувати DB',
'rebuild cron' => 'перебудувати CRON',
'update counters' => 'оновити лічильники',
'suspend' => 'заблокувати',
'unsuspend' => 'розблокувати',
'delete' => 'видалити',
'show per user' => 'вибрати користувача',
'show per user' => 'по користувачам',
'login as' => 'увійти як',
'logout' => 'вийти',
'edit' => 'редагувати',
'open webstats' => 'відкрити звіт веб-аналітики',
'open webstats' => 'відкрити веб-статистику',
'view logs' => 'переглянути логи',
'list records' => 'показати записи: %s',
'add record' => 'додати запис',
@ -88,14 +88,14 @@ $LANG['ua'] = array(
'update' => 'оновити',
'generate' => 'згенерувати',
'Generate CSR' => 'Згенерувати CSR запит',
'reread IP' => 'оновити IP',
'reread IP' => 'перечитати IP',
'enable autoupdate' => 'увімкнути автооновлення',
'disable autoupdate' => 'вимкнути автооновлення',
'turn on notifications' => 'увімкнути сповіщення',
'turn off notifications' => 'вимкнути сповіщення',
'Adding User' => 'Додавання акаунту',
'Editing User' => 'Редагування акаунту',
'Adding User' => 'Додавання користувача',
'Editing User' => 'Редагування користувача',
'Adding Domain' => 'Додавання домену',
'Editing Domain' => 'Редагування домену',
'Adding DNS Domain' => 'Додавання DNS домену',
@ -114,7 +114,7 @@ $LANG['ua'] = array(
'Editing Package' => 'Редагування пакету',
'Adding IP address' => 'Додавання IP адреси',
'Editing IP Address' => 'Редагування IP адреси',
'Editing Backup Exclusions' => 'Налаштування вийнятків',
'Editing Backup Exclusions' => 'Налаштування вийнятків архіву',
'Generating CSR' => 'Генерування CSR запиту',
'Listing' => 'Список',
'Search Results' => 'Результати пошуку',
@ -150,7 +150,7 @@ $LANG['ua'] = array(
'Web' => 'Веб',
'Mail' => 'Пошта',
'Databases' => 'Бази даних',
'User Directories' => 'Теки Користувача',
'User Directories' => 'Теки користувача',
'Template' => 'Шаблон',
'Web Template' => 'Шаблон Apache',
'Proxy Template' => 'Шаблон Nginx',
@ -161,7 +161,7 @@ $LANG['ua'] = array(
'per domain' => 'на домен',
'DNS Domains' => 'DNS домени',
'DNS Domains' => 'DNS домени',
'DNS records' => 'DNS запису',
'DNS records' => 'DNS записи',
'Name Servers' => 'Сервери імен',
'Mail Domains' => 'Поштові домени',
'Mail Accounts' => 'Поштові акаунти',
@ -173,19 +173,19 @@ $LANG['ua'] = array(
'backup exclusions' => 'вийнятки архіву',
'template' => 'шаблон',
'SSL Support' => 'Підтримка SSL',
'SSL Home Directory' => 'Тека SSL',
'SSL Home Directory' => 'Домашня тека SSL',
'Proxy Support' => 'Підтримка Nginx',
'Proxy Extensions' => 'Опрацювання Nginx',
'Web Statistics' => 'Статистика сайту',
'Additional FTP Account' => 'Додатковий FTP',
'Proxy Extensions' => 'Розширення Nginx',
'Web Statistics' => 'Веб статистика',
'Additional FTP Account' => 'Додатковий FTP акаунт',
'SOA' => 'SOA',
'TTL' => 'TTL',
'Expire' => 'Спливає',
'Records' => 'DNS записи',
'Records' => 'Записи',
'Catchall email' => 'Пастка пошти',
'AntiVirus Support' => 'Антивірус',
'AntiSpam Support' => 'Антиспам',
'DKIM Support' => 'DKIM',
'AntiVirus Support' => 'Підтримка антивірусу',
'AntiSpam Support' => 'Підтримка антиспаму',
'DKIM Support' => 'Підтримка DKIM',
'Accounts' => 'Акаунти',
'Quota' => 'Квота',
'Autoreply' => 'Автовідповідач',
@ -201,8 +201,8 @@ $LANG['ua'] = array(
'Month' => 'Місяць',
'Day of week' => 'День тижня',
'local' => 'локальний',
'Run Time' => 'Виконаний за',
'Backup Size' => 'Розмір',
'Run Time' => 'Виконано за',
'Backup Size' => 'Розмір архіву',
'SYS' => 'Системний',
'Domains' => 'Домени',
'Status' => 'Статус',
@ -211,14 +211,14 @@ $LANG['ua'] = array(
'Owner' => 'Власник',
'Users' => 'Користувачі',
'Load Average' => 'Загальне Навантаження',
'Memory Usage' => 'Використання Пам`яті',
'HTTPD Usage' => 'Web сервер',
'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' => 'Використання HTTPd',
'NGINX Usage' => 'Використання Nginx',
'MySQL Usage on localhost' => 'Локальний сервер бази даних MySQL',
'PostgreSQL Usage on localhost' => 'Локальний сервер бази даних PostgreSQL',
'Bandwidth Usage eth0' => 'Використання мережі eth0',
'FTP Usage' => 'Використання FTP',
'SSH Usage' => 'Використання SSH',
'reverse proxy' => 'зворотній проксі',
'web server' => 'Web сервер',
'dns server' => 'DNS сервер ',
@ -230,7 +230,7 @@ $LANG['ua'] = array(
'ftp server' => 'FTP сервер',
'job scheduler' => 'планувальник завдань',
'CPU' => 'Процесор',
'Memory' => 'Пам`ять',
'Memory' => 'Пам\'ять',
'Uptime' => 'Запущений',
'core package' => 'головний пакет',
'php interpreter' => 'PHP інтерпретатор',
@ -238,14 +238,14 @@ $LANG['ua'] = array(
'Version' => 'Версія',
'Release' => 'Реліз',
'Architecture' => 'Архітектура',
'Object' => 'Об`єкт',
'Object' => 'Об\'єкт',
'Owner' => 'Власник',
'Username' => 'Акаунт',
'Password' => 'Пароль',
'Email' => 'Поштова скринька',
'Package' => 'Пакет',
'Language' => 'Мова',
'First Name' => 'Ім`я',
'First Name' => 'Ім\'я',
'Last Name' => 'Прізвище',
'Send login credentials to email address' => 'Відправити дані акаунту за адресою',
'Default Template' => 'Шаблон за замовчуванням',
@ -257,12 +257,12 @@ $LANG['ua'] = array(
'Aliases' => 'Аліаси',
'SSL Certificate' => 'SSL сертификат',
'SSL Key' => 'Ключ SSL сертифікату',
'SSL Certificate Authority / Intermediate' => 'Центр сертифікації SSL / Intermediate',
'SSL Certificate Authority / Intermediate' => 'Центр сертифікації SSL / Проміжний',
'SSL CSR' => 'SSL CSR запит',
'optional' => 'опційно',
'internal' => 'внутрішній',
'Statistics Authorization' => 'Обмежений доступ до статистики',
'Statistics Auth' => 'Авторизація Статистики',
'Statistics Auth' => 'Авторизація перегляду статистики',
'Account' => 'Акаунт',
'Prefix will be automaticaly added to username' => 'Префікс %s буде автоматично додано до назви акаунту',
'Send FTP credentials to email' => 'Відправити дані FTP акаунту за адресою',
@ -272,7 +272,7 @@ $LANG['ua'] = array(
'Record' => 'Запис / Піддомен',
'IP or Value' => 'IP адреса або Значення',
'Priority' => 'Пріоритет',
'Record Number' => 'Порядковий номер',
'Record Number' => 'Порядковий номер запису',
'in megabytes' => 'в мегабайтах',
'Message' => 'Повідомлення',
'use local-part' => 'використовуйте тільки імена акаунтів',
@ -286,12 +286,12 @@ $LANG['ua'] = array(
'Netmask' => 'Маска підмережі',
'Interface' => 'Інтерфейс',
'Shared' => 'Загальний',
'Assigned user' => 'Назначити користувачу',
'Assigned domain' => 'Домен',
'Assigned user' => 'Призначений користувач',
'Assigned domain' => 'Призначений домен',
'NAT IP association' => 'Асоційований NAT IP',
'shell' => 'SSH доступ',
'shell' => 'оболонка',
'web domains' => 'Web домени',
'web aliases' => 'аліаси хостів',
'web aliases' => 'Web аліаси',
'dns records' => 'DNS записи',
'mail domains' => 'поштові домени',
'mail accounts' => 'поштові акаунти',
@ -299,7 +299,7 @@ $LANG['ua'] = array(
'databases' => 'бази даних',
'cron jobs' => 'cron завдання',
'backups' => 'архіви',
'quota' => 'квота диску',
'quota' => 'квота',
'day of week' => 'день тижня',
'cmd' => 'командний рядок',
'users' => 'користувачі',
@ -317,26 +317,26 @@ $LANG['ua'] = array(
'IP address' => 'IP адреса',
'netmask' => 'маска підмережі',
'interface' => 'інтерфейс',
'assigned user' => 'обраний користувач',
'assigned user' => 'призначений користувач',
'ns1' => 'сервер імен #1',
'ns2' => 'сервер імен #2',
'user' => 'користувач',
'email' => 'пошта',
'first name' => 'ім`я',
'last name' => 'прізвище',
'first name' => 'Ім\'я',
'last name' => 'Прізвище',
'account' => 'акаунт',
'ssl certificate' => 'SSL сертификат',
'ssl key' => 'ключ SSL сертифікату',
'stats user password' => 'пароль доступу до статистики',
'stats username' => 'ім`я користувача статистики',
'stats password' => 'пароль користувача статистики',
'stats user password' => 'пароль користувача статистики',
'stats username' => 'ім\'я користувача статистики',
'stats password' => 'пароль статистики',
'ftp user password' => 'пароль доступу до FTP',
'ftp user' => 'користувач FTP',
'Last 70 lines of %s.%s.log' => 'Останні 70 рядків файлу %s.%s.log',
'Download AccessLog' => 'Завантажити AccessLog',
'Download ErrorLog' => 'Завантажити ErrorLog',
'Country' => 'Країна',
'2 letter code' => 'двобуквений код',
'2 letter code' => 'Двобуквений код',
'State / Province' => 'Область',
'City / Locality' => 'Місто / Населений пункт',
'Organization' => 'Організація',
@ -348,52 +348,52 @@ $LANG['ua'] = array(
'ranges are acceptable' => 'дозволені діапазони',
'CIDR format is supported' => 'формат CIDR підтримується',
'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' => 'IP адрес на сторінці: 1',
'%s IP addresses' => 'IP адрес на сторінці: %s',
'1 month' => 'місяців на сторінці: 1',
'%s months' => 'місяців на сторінці: %s',
'1 log record' => 'записів на сторінці: 1',
'%s log records' => 'записів на сторінці %s',
'1 object' => 'об`єктів на сторінці: 1',
'%s objects' => 'об`єктів на сторінці: %s',
'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',
'1 rule' => '1 правило',
'%s rules' => '%s правил',
'There are no currently banned IP' => 'Немає заблокованих IP',
'USER_CREATED_OK' => 'Аккаунт <a href="/edit/user/?user=%s"><b>%s</b></a> успішно створено',
'WEB_DOMAIN_CREATED_OK' => 'Домен <a href="/edit/web/?domain=%s"><b>%s</b></a> успішно створено.',
'DNS_DOMAIN_CREATED_OK' => 'Домен <a href="/list/dns/?domain=%s"><b>%s</b></a> успішно створено.',
'DNS_RECORD_CREATED_OK' => 'Запис <b>%s.%s</b> успішно створено.',
'MAIL_DOMAIN_CREATED_OK' => 'Домен <a href="/list/mail/?domain=%s"><b>%s</b></a> успішно створено.',
'MAIL_ACCOUNT_CREATED_OK' => 'Аккаунт <a href="/edit/mail/?account=%s&domain=%s"><b>%s@%s</b></a> успішно створено',
'WEB_DOMAIN_CREATED_OK' => 'WEB домен <a href="/edit/web/?domain=%s"><b>%s</b></a> успішно створено.',
'DNS_DOMAIN_CREATED_OK' => 'DNS домен <a href="/list/dns/?domain=%s"><b>%s</b></a> успішно створено.',
'DNS_RECORD_CREATED_OK' => 'DNS запис <b>%s.%s</b> успішно створено.',
'MAIL_DOMAIN_CREATED_OK' => 'Поштовий домен <a href="/list/mail/?domain=%s"><b>%s</b></a> успішно створено.',
'MAIL_ACCOUNT_CREATED_OK' => 'Поштову скриньку <a href="/edit/mail/?account=%s&domain=%s"><b>%s@%s</b></a> успішно створено',
'DATABASE_CREATED_OK' => 'Базу даних <a href="/edit/db/?database=%s"><b>%s</b></a> успішно створено',
'CRON_CREATED_OK' => 'Завдання успішно додано',
'CRON_CREATED_OK' => 'Cron завдання успішно додано',
'IP_CREATED_OK' => '"IP адресу <a href="/edit/ip/?ip=%s"><b>%s</b></a> успішно створено.',
'PACKAGE_CREATED_OK' => 'Пакет <a href="/edit/package/?package=%s"><b>%s</b></a> успішно створено.',
'SSL_GENERATED_OK' => 'SSL cертификат успішно створено.',
'SSL_GENERATED_OK' => 'SSL cертификат успішно згенеровано.',
'RULE_CREATED_OK' => 'Правило успішно створено.',
'Autoupdate has been successfully enabled' => 'Aвтооновлення було успішно увімкнено',
'Autoupdate has been successfully disabled' => 'Aвтооновлення було успішно вимкнено',
'Cronjob email reporting has been successfully enabled' => 'Cronjob звітування було успішно увімкнено',
'Cronjob email reporting has been successfully disabled' => 'Cronjob звітування було успішно вимкнено',
'Changes has been saved.' => 'Зміни збережені.',
'Changes has been saved.' => 'Зміни збережено.',
'Confirmation' => 'Підтвердження',
'DELETE_USER_CONFIRMATION' => 'Ви впевнені, що хочете видалити користувача %s?',
'SUSPEND_USER_CONFIRMATION' => 'Ви впевнені, що хочете заблокувати користувача %s?',
@ -434,9 +434,9 @@ $LANG['ua'] = array(
'SERVICE_ACTION_FAILED' => 'Не вдалось "%s" "%s"',
'IP address is in use' => 'IP адреса використовується',
'BACKUP_SCHEDULED' => 'Завдання успішно додано в чергу. Після виконання ви отримаєте повний звіт по пошті.',
'BACKUP_EXISTS' => 'Резервне копіювання вже виконується, будь-ласка дочекайтесь закінчення.',
'BACKUP_EXISTS' => 'Резервне копіювання вже виконується, будь-ласка, дочекайтесь закінчення.',
'RESTORE_SCHEDULED' => 'Завдання успішно додано в чергу. Після виконання ви отримаєте повний звіт по пошті.',
'RESTORE_EXISTS' => 'Завдання вже виконується, будь-ласка дочекайтесь закінчення.',
'RESTORE_EXISTS' => 'Завдання вже виконується, будь-ласка, дочекайтесь закінчення.',
'WEB_EXCLUSIONS' => "Вкажіть домени по одному на рядок. Для того, щоб виключити всі, використовуйте *. Щоб виключити тільки деякі теки, використовуйте наступний формат: domain.com:public_html/cache:public_html/tmp",
'DNS_EXCLUSIONS' => "Вкажіть домени по одному на рядок. Для того, щоб виключити всі, використовуйте *",
@ -449,20 +449,20 @@ $LANG['ua'] = array(
'MAIL_FROM' => 'Vesta Control Panel <noreply@%s>',
'GREETINGS_GORDON_FREEMAN' => "Вітаємо, %s %s,\n",
'GREETINGS' => "Вітаємо,\n",
'ACCOUNT_READY' => "Ваш аккаунт успішно створений і готовий до використання.\n\nhttps://%s/login/\nІм`я користувача: %s\nПароль: %s\n\n--\nПанель керування Vesta\n",
'ACCOUNT_READY' => "Ваш аккаунт успішно створено і готовий до використання.\n\nhttps://%s/login/\nІм`я користувача: %s\nПароль: %s\n\n--\nПанель керування Vesta\n",
'FTP login credentials' => 'Дані доступу до FTP',
'FTP_ACCOUNT_READY' => "FTP аккаунт успішно створений і готовий до використання.\n\nХост: %s\nІм`я користувача: %s_%s\nПароль: %s\n\n--\nПанель керування Vesta\n",
'FTP_ACCOUNT_READY' => "FTP аккаунт успішно створено і готовий до використання.\n\nХост: %s\nІм`я користувача: %s_%s\nПароль: %s\n\n--\nПанель керування Vesta\n",
'Database Credentials' => 'Дані доступу до БД',
'DATABASE_READY' => "База даних успішно створена.\n\nБаза даних: %s\nКористувач: %s\nПароль: %s\n%s\n\n--\nПанель керування Vesta\n",
'forgot password' => 'нагадати',
'forgot password' => 'нагадати пароль',
'Confirm' => 'Підтвердити',
'New Password' => 'Новий пароль',
'Confirm Password' => 'Підтвердження паролю',
'Reset' => 'Скинути',
'Reset Code' => 'Код відновлення',
'Reset Code' => 'Код скидання',
'RESET_NOTICE' => '',
'RESET_CODE_SENT' => 'Код для відновлення паролю успішно відправлено на вашу електронну пошту.<br>',
'MAIL_RESET_SUBJECT' => 'Відновлення паролю %s',

View file

@ -1,7 +1,7 @@
<?php
session_start();
if (isset($_SESSION['user'])) {
header("Location: /list/user");
header("Location: /list/user/");
} else {
header("Location: /login/");
}

View file

@ -142,7 +142,7 @@ VE.helpers.initAdditionalPasswordFieldElements = function(ref) {
$(ref).prop('autocomplete', 'off');
var enabled_html = enabled ? '' : 'show-passwords-enabled-action';
var html = '<span class="hide-password"><img class="toggle-psw-visibility-icon ' + enabled_html + '" onClick="VE.helpers.toggleHiddenPasswordText(\'' + ref + '\', this)" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEwAACxMBAJqcGAAAANlJREFUOI3d0UtKA0EQBuBP0eQCitkJLiXiSSTkUCKIIPg8SJCouDELrxDRCxi3SUQimXFhjRSDZq8/FE3/jyqqm3+JXVziGbOoJ1xgZ1GwiXMUKDFBH1cYB1fgBI16uIG7MJW4x1rS1zFIeh8rucFREicR7mKEV3SwgWnyHVThLXzUuotwxY2Cu0ncDJvLccko4lxKXPkL9509TMQ4du7E5BfsoYW35NvPU1dxncRB7FyhhYek99Qeka+fOMU8TNPY+TZNnuP4p3BGG2d4xHvUMJpvLwr+UXwCQghNMl5Zo0AAAAAASUVORK5CYII=" /></span>';
var html = '<span class="hide-password"><img class="toggle-psw-visibility-icon ' + enabled_html + '" onClick="VE.helpers.toggleHiddenPasswordText(\'' + ref + '\', this)" src="/images/toggle_password.png" /></span>';
$(ref).after(html);
}

View file

@ -172,7 +172,7 @@
var c = f.get.clicks(p,o,$(this));
var ref = $(e.target);
if (ref.parents('.data-row').hasClass('selected') && $('.selected').length == 1) {console.warn(1);
if (ref.parents('.data-row').hasClass('selected') && $('.selected').length == 1) {
ref.parents('.data-row').removeClass('selected');
ref.parents('.data-row').find('.ch-toggle').attr('checked', false);
return;
@ -203,7 +203,7 @@
p.on('mouseout', function(){
d.off("keydown", turnOff);
});
function turnOff(e) {
if (f.detect.ctrl(e)) {
if (e.keyCode == 65) {
@ -562,6 +562,7 @@
hAll: function(p,o) {
f.h.on(p.find(o.children), o);
f.t.update(p, o);
o.toggleAllHook && o.toggleAllHook();
},
unHExist: function(bool,el,o) {
if(bool) {

View file

@ -41,7 +41,6 @@ App.Listeners.PACKAGE.init = function() {
if ($(ref).val().trim() == App.Constants.UNLIM_VALUE || $(ref).val().trim() == App.Constants.UNLIM_TRANSLATED_VALUE) {
$(ref).val('0');
App.Actions.PACKAGE.enable_unlimited(ref, elm);
//$(elm).attr('checked', true);
}
else {
App.Actions.PACKAGE.disable_unlimited(ref, elm);
@ -54,7 +53,7 @@ App.Listeners.PACKAGE.init = function() {
// Trigger listeners
App.Listeners.PACKAGE.init();
App.Listeners.PACKAGE.checkbox_unlimited_feature();
$('form[name="v_edit_package"]').bind('submit', function(evt) {
$('form[name="v_add_package"]').bind('submit', function(evt) {
$('input:disabled').each(function(i, elm) {
$(elm).attr('disabled', false);
});

View file

@ -41,7 +41,6 @@ App.Listeners.PACKAGE.init = function() {
if ($(ref).val().trim() == App.Constants.UNLIM_VALUE || $(ref).val().trim() == App.Constants.UNLIM_TRANSLATED_VALUE) {
$(ref).val('0');
App.Actions.PACKAGE.enable_unlimited(ref, elm);
//$(elm).attr('checked', true);
}
else {
App.Actions.PACKAGE.disable_unlimited(ref, elm);

View file

@ -146,7 +146,7 @@
<tr>
<td>
<input type="text" size="20" class="vst-input" name="v_web_domains" <?php if (isset($v_web_domains)) echo "value=".$v_web_domains; ?>>
<img class="unlim-trigger" id="unlim-web-domains" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAQCAQAAACMnYaxAAAAAmJLR0QA/4ePzL8AAACaSURBVBgZxcExasJQAADQBwkIujhGXHSxB3ArDg4u0lkE8TRCZwvFC2Rzq2fQOCpY0EO4qoNgftEM9gTte/y9CJG6spOnRNVZoOlbEOyN3I0dBMFOgy9LLW0frj7NXE21vcgsOBoodFycvSoMnWI3kUIiRqIQuzG30dWTyk28y6V6urbm1GWCXKbv7s1aEKzUPFSU/FZS8U9+AP5iKrZ4my0HAAAAAElFTkSuQmCC" />
<img class="unlim-trigger" id="unlim-web-domains" src="/images/unlim.png" />
</td>
</tr>
<tr>
@ -157,7 +157,7 @@
<tr>
<td>
<input type="text" size="20" class="vst-input" name="v_web_aliases" <?php if (isset($v_web_aliases)) echo "value=".$v_web_aliases; ?>>
<img id="unlim-web-aliases" class="unlim-trigger" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAQCAQAAACMnYaxAAAAAmJLR0QA/4ePzL8AAACaSURBVBgZxcExasJQAADQBwkIujhGXHSxB3ArDg4u0lkE8TRCZwvFC2Rzq2fQOCpY0EO4qoNgftEM9gTte/y9CJG6spOnRNVZoOlbEOyN3I0dBMFOgy9LLW0frj7NXE21vcgsOBoodFycvSoMnWI3kUIiRqIQuzG30dWTyk28y6V6urbm1GWCXKbv7s1aEKzUPFSU/FZS8U9+AP5iKrZ4my0HAAAAAElFTkSuQmCC" />
<img id="unlim-web-aliases" class="unlim-trigger" src="/images/unlim.png" />
</td>
</tr>
<tr>
@ -168,7 +168,7 @@
<tr>
<td>
<input type="text" size="20" class="vst-input" name="v_dns_domains" <?php if (isset($v_dns_domains)) echo "value=".$v_dns_domains; ?>>
<img id="unlim-dns-domain" class="unlim-trigger" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAQCAQAAACMnYaxAAAAAmJLR0QA/4ePzL8AAACaSURBVBgZxcExasJQAADQBwkIujhGXHSxB3ArDg4u0lkE8TRCZwvFC2Rzq2fQOCpY0EO4qoNgftEM9gTte/y9CJG6spOnRNVZoOlbEOyN3I0dBMFOgy9LLW0frj7NXE21vcgsOBoodFycvSoMnWI3kUIiRqIQuzG30dWTyk28y6V6urbm1GWCXKbv7s1aEKzUPFSU/FZS8U9+AP5iKrZ4my0HAAAAAElFTkSuQmCC" />
<img id="unlim-dns-domain" class="unlim-trigger" src="/images/unlim.png" />
</td>
</tr>
<tr>
@ -179,7 +179,7 @@
<tr>
<td>
<input type="text" size="20" class="vst-input" name="v_dns_records" <?php if (isset($v_dns_records)) echo "value=".$v_dns_records; ?>>
<img id="unlim-dns-records" class="unlim-trigger" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAQCAQAAACMnYaxAAAAAmJLR0QA/4ePzL8AAACaSURBVBgZxcExasJQAADQBwkIujhGXHSxB3ArDg4u0lkE8TRCZwvFC2Rzq2fQOCpY0EO4qoNgftEM9gTte/y9CJG6spOnRNVZoOlbEOyN3I0dBMFOgy9LLW0frj7NXE21vcgsOBoodFycvSoMnWI3kUIiRqIQuzG30dWTyk28y6V6urbm1GWCXKbv7s1aEKzUPFSU/FZS8U9+AP5iKrZ4my0HAAAAAElFTkSuQmCC" />
<img id="unlim-dns-records" class="unlim-trigger" src="/images/unlim.png" />
</td>
</tr>
<tr>
@ -190,7 +190,7 @@
<tr>
<td>
<input type="text" size="20" class="vst-input" name="v_mail_domains" <?php if (isset($v_mail_domains)) echo "value=".$v_mail_domains; ?>>
<img id="unlim-mail-domains" class="unlim-trigger" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAQCAQAAACMnYaxAAAAAmJLR0QA/4ePzL8AAACaSURBVBgZxcExasJQAADQBwkIujhGXHSxB3ArDg4u0lkE8TRCZwvFC2Rzq2fQOCpY0EO4qoNgftEM9gTte/y9CJG6spOnRNVZoOlbEOyN3I0dBMFOgy9LLW0frj7NXE21vcgsOBoodFycvSoMnWI3kUIiRqIQuzG30dWTyk28y6V6urbm1GWCXKbv7s1aEKzUPFSU/FZS8U9+AP5iKrZ4my0HAAAAAElFTkSuQmCC" />
<img id="unlim-mail-domains" class="unlim-trigger" src="/images/unlim.png" />
</td>
</tr>
<tr>
@ -201,7 +201,7 @@
<tr>
<td>
<input type="text" size="20" class="vst-input" name="v_mail_accounts" <?php if (isset($v_mail_accounts)) echo "value=".$v_mail_accounts; ?>>
<img id="unlim-mail-accounts" class="unlim-trigger" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAQCAQAAACMnYaxAAAAAmJLR0QA/4ePzL8AAACaSURBVBgZxcExasJQAADQBwkIujhGXHSxB3ArDg4u0lkE8TRCZwvFC2Rzq2fQOCpY0EO4qoNgftEM9gTte/y9CJG6spOnRNVZoOlbEOyN3I0dBMFOgy9LLW0frj7NXE21vcgsOBoodFycvSoMnWI3kUIiRqIQuzG30dWTyk28y6V6urbm1GWCXKbv7s1aEKzUPFSU/FZS8U9+AP5iKrZ4my0HAAAAAElFTkSuQmCC" />
<img id="unlim-mail-accounts" class="unlim-trigger" src="/images/unlim.png" />
</td>
</tr>
<tr>
@ -212,7 +212,7 @@
<tr>
<td>
<input type="text" size="20" class="vst-input" name="v_databases" <?php if (isset($v_databases)) echo "value=".$v_databases; ?>>
<img id="unlim-databases" class="unlim-trigger" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAQCAQAAACMnYaxAAAAAmJLR0QA/4ePzL8AAACaSURBVBgZxcExasJQAADQBwkIujhGXHSxB3ArDg4u0lkE8TRCZwvFC2Rzq2fQOCpY0EO4qoNgftEM9gTte/y9CJG6spOnRNVZoOlbEOyN3I0dBMFOgy9LLW0frj7NXE21vcgsOBoodFycvSoMnWI3kUIiRqIQuzG30dWTyk28y6V6urbm1GWCXKbv7s1aEKzUPFSU/FZS8U9+AP5iKrZ4my0HAAAAAElFTkSuQmCC" />
<img id="unlim-databases" class="unlim-trigger" src="/images/unlim.png" />
</td>
</tr>
<tr>
@ -223,7 +223,7 @@
<tr>
<td>
<input type="text" size="20" class="vst-input" name="v_cron_jobs" <?php if (isset($v_cron_jobs)) echo "value=".$v_cron_jobs; ?>>
<img id="unlim-cron-jobs" class="unlim-trigger" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAQCAQAAACMnYaxAAAAAmJLR0QA/4ePzL8AAACaSURBVBgZxcExasJQAADQBwkIujhGXHSxB3ArDg4u0lkE8TRCZwvFC2Rzq2fQOCpY0EO4qoNgftEM9gTte/y9CJG6spOnRNVZoOlbEOyN3I0dBMFOgy9LLW0frj7NXE21vcgsOBoodFycvSoMnWI3kUIiRqIQuzG30dWTyk28y6V6urbm1GWCXKbv7s1aEKzUPFSU/FZS8U9+AP5iKrZ4my0HAAAAAElFTkSuQmCC" />
<img id="unlim-cron-jobs" class="unlim-trigger" src="/images/unlim.png" />
</td>
</tr>
<tr>
@ -244,7 +244,7 @@
<tr>
<td>
<input type="text" size="20" class="vst-input" name="v_disk_quota" <?php if (isset($v_disk_quota)) echo "value=".$v_disk_quota; ?>>
<img id="unlim-disk-quota" class="unlim-trigger" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAQCAQAAACMnYaxAAAAAmJLR0QA/4ePzL8AAACaSURBVBgZxcExasJQAADQBwkIujhGXHSxB3ArDg4u0lkE8TRCZwvFC2Rzq2fQOCpY0EO4qoNgftEM9gTte/y9CJG6spOnRNVZoOlbEOyN3I0dBMFOgy9LLW0frj7NXE21vcgsOBoodFycvSoMnWI3kUIiRqIQuzG30dWTyk28y6V6urbm1GWCXKbv7s1aEKzUPFSU/FZS8U9+AP5iKrZ4my0HAAAAAElFTkSuQmCC" />
<img id="unlim-disk-quota" class="unlim-trigger" src="/images/unlim.png" />
</td>
</tr>
<tr>
@ -255,7 +255,7 @@
<tr>
<td>
<input type="text" size="20" class="vst-input" name="v_bandwidth" <?php if (isset($v_bandwidth)) echo "value=".$v_bandwidth; ?>>
<img name="unlim-bandwidth" class="unlim-trigger" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAQCAQAAACMnYaxAAAAAmJLR0QA/4ePzL8AAACaSURBVBgZxcExasJQAADQBwkIujhGXHSxB3ArDg4u0lkE8TRCZwvFC2Rzq2fQOCpY0EO4qoNgftEM9gTte/y9CJG6spOnRNVZoOlbEOyN3I0dBMFOgy9LLW0frj7NXE21vcgsOBoodFycvSoMnWI3kUIiRqIQuzG30dWTyk28y6V6urbm1GWCXKbv7s1aEKzUPFSU/FZS8U9+AP5iKrZ4my0HAAAAAElFTkSuQmCC" />
<img name="unlim-bandwidth" class="unlim-trigger" src="/images/unlim.png" />
</td>
</tr>
<tr>

View file

@ -152,7 +152,7 @@
<tr>
<td>
<input type="text" size="20" class="vst-input" name="v_web_domains" <?php if (isset($v_web_domains)) echo "value=".$v_web_domains; ?>>
<img class="unlim-trigger" id="unlim-web-domains" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAQCAQAAACMnYaxAAAAAmJLR0QA/4ePzL8AAACaSURBVBgZxcExasJQAADQBwkIujhGXHSxB3ArDg4u0lkE8TRCZwvFC2Rzq2fQOCpY0EO4qoNgftEM9gTte/y9CJG6spOnRNVZoOlbEOyN3I0dBMFOgy9LLW0frj7NXE21vcgsOBoodFycvSoMnWI3kUIiRqIQuzG30dWTyk28y6V6urbm1GWCXKbv7s1aEKzUPFSU/FZS8U9+AP5iKrZ4my0HAAAAAElFTkSuQmCC" />
<img class="unlim-trigger" id="unlim-web-domains" src="/images/unlim.png" />
</td>
</tr>
<tr>
@ -163,7 +163,7 @@
<tr>
<td>
<input type="text" size="20" class="vst-input" name="v_web_aliases" <?php if (isset($v_web_aliases)) echo "value=".$v_web_aliases; ?>>
<img id="unlim-web-aliases" class="unlim-trigger" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAQCAQAAACMnYaxAAAAAmJLR0QA/4ePzL8AAACaSURBVBgZxcExasJQAADQBwkIujhGXHSxB3ArDg4u0lkE8TRCZwvFC2Rzq2fQOCpY0EO4qoNgftEM9gTte/y9CJG6spOnRNVZoOlbEOyN3I0dBMFOgy9LLW0frj7NXE21vcgsOBoodFycvSoMnWI3kUIiRqIQuzG30dWTyk28y6V6urbm1GWCXKbv7s1aEKzUPFSU/FZS8U9+AP5iKrZ4my0HAAAAAElFTkSuQmCC" />
<img id="unlim-web-aliases" class="unlim-trigger" src="/images/unlim.png" />
</td>
</tr>
<tr>
@ -174,7 +174,7 @@
<tr>
<td>
<input type="text" size="20" class="vst-input" name="v_dns_domains" <?php if (isset($v_dns_domains)) echo "value=".$v_dns_domains; ?>>
<img id="unlim-dns-domain" class="unlim-trigger" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAQCAQAAACMnYaxAAAAAmJLR0QA/4ePzL8AAACaSURBVBgZxcExasJQAADQBwkIujhGXHSxB3ArDg4u0lkE8TRCZwvFC2Rzq2fQOCpY0EO4qoNgftEM9gTte/y9CJG6spOnRNVZoOlbEOyN3I0dBMFOgy9LLW0frj7NXE21vcgsOBoodFycvSoMnWI3kUIiRqIQuzG30dWTyk28y6V6urbm1GWCXKbv7s1aEKzUPFSU/FZS8U9+AP5iKrZ4my0HAAAAAElFTkSuQmCC" />
<img id="unlim-dns-domain" class="unlim-trigger" src="/images/unlim.png" />
</td>
</tr>
<tr>
@ -185,7 +185,7 @@
<tr>
<td>
<input type="text" size="20" class="vst-input" name="v_dns_records" <?php if (isset($v_dns_records)) echo "value=".$v_dns_records; ?>>
<img id="unlim-dns-records" class="unlim-trigger" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAQCAQAAACMnYaxAAAAAmJLR0QA/4ePzL8AAACaSURBVBgZxcExasJQAADQBwkIujhGXHSxB3ArDg4u0lkE8TRCZwvFC2Rzq2fQOCpY0EO4qoNgftEM9gTte/y9CJG6spOnRNVZoOlbEOyN3I0dBMFOgy9LLW0frj7NXE21vcgsOBoodFycvSoMnWI3kUIiRqIQuzG30dWTyk28y6V6urbm1GWCXKbv7s1aEKzUPFSU/FZS8U9+AP5iKrZ4my0HAAAAAElFTkSuQmCC" />
<img id="unlim-dns-records" class="unlim-trigger" src="/images/unlim.png" />
</td>
</tr>
<tr>
@ -196,7 +196,7 @@
<tr>
<td>
<input type="text" size="20" class="vst-input" name="v_mail_domains" <?php if (isset($v_mail_domains)) echo "value=".$v_mail_domains; ?>>
<img id="unlim-mail-domains" class="unlim-trigger" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAQCAQAAACMnYaxAAAAAmJLR0QA/4ePzL8AAACaSURBVBgZxcExasJQAADQBwkIujhGXHSxB3ArDg4u0lkE8TRCZwvFC2Rzq2fQOCpY0EO4qoNgftEM9gTte/y9CJG6spOnRNVZoOlbEOyN3I0dBMFOgy9LLW0frj7NXE21vcgsOBoodFycvSoMnWI3kUIiRqIQuzG30dWTyk28y6V6urbm1GWCXKbv7s1aEKzUPFSU/FZS8U9+AP5iKrZ4my0HAAAAAElFTkSuQmCC" />
<img id="unlim-mail-domains" class="unlim-trigger" src="/images/unlim.png" />
</td>
</tr>
<tr>
@ -207,7 +207,7 @@
<tr>
<td>
<input type="text" size="20" class="vst-input" name="v_mail_accounts" <?php if (isset($v_mail_accounts)) echo "value=".$v_mail_accounts; ?>>
<img id="unlim-mail-accounts" class="unlim-trigger" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAQCAQAAACMnYaxAAAAAmJLR0QA/4ePzL8AAACaSURBVBgZxcExasJQAADQBwkIujhGXHSxB3ArDg4u0lkE8TRCZwvFC2Rzq2fQOCpY0EO4qoNgftEM9gTte/y9CJG6spOnRNVZoOlbEOyN3I0dBMFOgy9LLW0frj7NXE21vcgsOBoodFycvSoMnWI3kUIiRqIQuzG30dWTyk28y6V6urbm1GWCXKbv7s1aEKzUPFSU/FZS8U9+AP5iKrZ4my0HAAAAAElFTkSuQmCC" />
<img id="unlim-mail-accounts" class="unlim-trigger" src="/images/unlim.png" />
<td>
</tr>
<tr>
@ -218,7 +218,7 @@
<tr>
<td>
<input type="text" size="20" class="vst-input" name="v_databases" <?php if (isset($v_databases)) echo "value=".$v_databases; ?>>
<img id="unlim-databases" class="unlim-trigger" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAQCAQAAACMnYaxAAAAAmJLR0QA/4ePzL8AAACaSURBVBgZxcExasJQAADQBwkIujhGXHSxB3ArDg4u0lkE8TRCZwvFC2Rzq2fQOCpY0EO4qoNgftEM9gTte/y9CJG6spOnRNVZoOlbEOyN3I0dBMFOgy9LLW0frj7NXE21vcgsOBoodFycvSoMnWI3kUIiRqIQuzG30dWTyk28y6V6urbm1GWCXKbv7s1aEKzUPFSU/FZS8U9+AP5iKrZ4my0HAAAAAElFTkSuQmCC" />
<img id="unlim-databases" class="unlim-trigger" src="/images/unlim.png" />
</td>
</tr>
<tr>
@ -229,7 +229,7 @@
<tr>
<td>
<input type="text" size="20" class="vst-input" name="v_cron_jobs" <?php if (isset($v_cron_jobs)) echo "value=".$v_cron_jobs; ?>>
<img id="unlim-cron-jobs" class="unlim-trigger" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAQCAQAAACMnYaxAAAAAmJLR0QA/4ePzL8AAACaSURBVBgZxcExasJQAADQBwkIujhGXHSxB3ArDg4u0lkE8TRCZwvFC2Rzq2fQOCpY0EO4qoNgftEM9gTte/y9CJG6spOnRNVZoOlbEOyN3I0dBMFOgy9LLW0frj7NXE21vcgsOBoodFycvSoMnWI3kUIiRqIQuzG30dWTyk28y6V6urbm1GWCXKbv7s1aEKzUPFSU/FZS8U9+AP5iKrZ4my0HAAAAAElFTkSuQmCC" />
<img id="unlim-cron-jobs" class="unlim-trigger" src="/images/unlim.png" />
</td>
</tr>
<tr>
@ -250,7 +250,7 @@
<tr>
<td>
<input type="text" size="20" class="vst-input" name="v_disk_quota" <?php if (isset($v_disk_quota)) echo "value=".$v_disk_quota; ?>>
<img id="unlim-disk-quota" class="unlim-trigger" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAQCAQAAACMnYaxAAAAAmJLR0QA/4ePzL8AAACaSURBVBgZxcExasJQAADQBwkIujhGXHSxB3ArDg4u0lkE8TRCZwvFC2Rzq2fQOCpY0EO4qoNgftEM9gTte/y9CJG6spOnRNVZoOlbEOyN3I0dBMFOgy9LLW0frj7NXE21vcgsOBoodFycvSoMnWI3kUIiRqIQuzG30dWTyk28y6V6urbm1GWCXKbv7s1aEKzUPFSU/FZS8U9+AP5iKrZ4my0HAAAAAElFTkSuQmCC" />
<img id="unlim-disk-quota" class="unlim-trigger" src="/images/unlim.png" />
</td>
</tr>
<tr>
@ -261,7 +261,7 @@
<tr>
<td>
<input type="text" size="20" class="vst-input" name="v_bandwidth" <?php if (isset($v_bandwidth)) echo "value=".$v_bandwidth; ?>>
<img name="unlim-bandwidth" class="unlim-trigger" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAQCAQAAACMnYaxAAAAAmJLR0QA/4ePzL8AAACaSURBVBgZxcExasJQAADQBwkIujhGXHSxB3ArDg4u0lkE8TRCZwvFC2Rzq2fQOCpY0EO4qoNgftEM9gTte/y9CJG6spOnRNVZoOlbEOyN3I0dBMFOgy9LLW0frj7NXE21vcgsOBoodFycvSoMnWI3kUIiRqIQuzG30dWTyk28y6V6urbm1GWCXKbv7s1aEKzUPFSU/FZS8U9+AP5iKrZ4my0HAAAAAElFTkSuQmCC" />
<img name="unlim-bandwidth" class="unlim-trigger" src="/images/unlim.png" />
</td>
</tr>
<tr>

View file

@ -5,28 +5,39 @@
<script type="text/javascript">
$(document).ready(function() {
VE.core.register($('.data'));
var shift_select_ref = $('#vstobjects').finderSelect({children: '.data-row',
'onFinish': function(evt) {
var ref = $(evt.target);
if (ref.hasClass('ch-toggle')) {
if (!ref.prop('checked')) {
ref.parents('.data-row').addClass('selected');
if (location.href.search(/list/) != -1) {
var shift_select_ref = $('body').finderSelect({children: '.data-row',
'onFinish': function(evt) {
var ref = $(evt.target);
if (ref.hasClass('ch-toggle')) {
if (!ref.prop('checked')) {
ref.parents('.data-row').addClass('selected');
}
else {
ref.parents('.data-row').removeClass('selected');
}
}
else {
ref.parents('.data-row').removeClass('selected');
$('#vstobjects').find('.data-row .ch-toggle').attr('checked', false);
$('#vstobjects').find('.data-row.selected .ch-toggle').attr('checked', true);
}
},
'toggleAllHook': function() {
if ($('.data-row').length == $('.ch-toggle:checked').length) {
$('.data-row.selected').removeClass('selected');
$('.ch-toggle').attr('checked', false);
}
else {
$('.ch-toggle').attr('checked', true);
}
}
else {
$('#vstobjects').find('.data-row .ch-toggle').attr('checked', false);
$('#vstobjects').find('.data-row.selected .ch-toggle').attr('checked', true);
});
$('table').on('mousedown', 'td', function(e) {
if (e.ctrlKey) {
e.preventDefault();
}
}
});
$('table').on('mousedown', 'td', function(e) {
if (e.ctrlKey) {
e.preventDefault();
}
});
});
}
});
</script>
</body>