Browse Source

manually merged

Serghey Rodin 11 years ago
parent
commit
8ef6558b3d

+ 145 - 0
bin/v-add-backup-sftp-host

@@ -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

+ 153 - 0
bin/v-backup-user

@@ -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
 

+ 46 - 0
bin/v-delete-backup-sftp-host

@@ -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

+ 9 - 3
bin/v-update-firewall

@@ -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

+ 24 - 0
install/debian/dovecot.conf

@@ -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
+        }
+    }

+ 1 - 1
install/debian/proftpd.conf

@@ -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

+ 13 - 46
install/rhel/dovecot/conf.d/20-imap.conf

@@ -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 =
+mail_plugins = $mail_plugins autocreate
+}
 
-  # 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 = 
+plugin {
+  autocreate = Trash
+  autocreate2 = Spam
+  autocreate3 = Sent
+  autocreate4 = Drafts
+  #autocreate5 = Custom
+  autosubscribe = Trash
+  autosubscribe2 = Spam
+  autosubscribe3 = Sent
+  autosubscribe4 = Drafts
+  #autosubscribe5 = Custom
 }

+ 13 - 51
install/ubuntu/dovecot/conf.d/20-imap.conf

@@ -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 =
+mail_plugins = $mail_plugins autocreate
+}
 
-  # 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 = 
+plugin {
+  autocreate = Trash
+  autocreate2 = Spam
+  autocreate3 = Sent
+  autocreate4 = Drafts
+  #autocreate5 = Custom
+  autosubscribe = Trash
+  autosubscribe2 = Spam
+  autosubscribe3 = Sent
+  autosubscribe4 = Drafts
+  #autosubscribe5 = Custom
 }

+ 1 - 0
install/vst-install-debian.sh

@@ -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

+ 1 - 0
install/vst-install-ubuntu.sh

@@ -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

+ 2 - 2
web/css/main.css

@@ -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;
 }
 
 

BIN
web/images/toggle_password.png


BIN
web/images/unlim.png


+ 95 - 95
web/inc/i18n/ua.php

@@ -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',

+ 1 - 1
web/index.php

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

+ 1 - 1
web/js/events.js

@@ -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);
 }
 

+ 3 - 2
web/js/jquery.finder.js

@@ -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) {

+ 1 - 2
web/js/pages/add.package.js

@@ -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);
     });

+ 0 - 1
web/js/pages/edit.package.js

@@ -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);

+ 10 - 10
web/templates/admin/add_package.html

@@ -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>

+ 10 - 10
web/templates/admin/edit_package.html

@@ -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>

+ 28 - 17
web/templates/footer.html

@@ -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>