Current File : //usr/local/jetapps/var/www/jetbackup5/docroot/app/views/restoreMultiAccount.htm |
<div ng-controller="restoreMultiAccount" class="controller-box">
<div class="row">
<div class="col-xl-5 col-lg-5 col-md-5 col-xs-12">
<div class="modal-content" style="box-shadow: none;">
<div class="modal-body">
<div class="row">
<div class="col-md-12">
<div ng-hide="showOptions">
<h3 class="modal-title" style="border-bottom: 1px solid #e5e5e5; padding-bottom: 10px; margin-bottom: 20px;">{{ lang.t("Select Action") }}</h3>
<form data-parsley-validate="" class="form-horizontal form-label-left" novalidate>
<div class="form-group">
<div class="col-md-12 col-sm-12 col-xs-12">
<div class="pretty p-default p-round p-smooth">
<input type="radio" ng-model="action" id="action_restore" ng-checked="action == 'restore'" value="restore" />
<div class="state p-primary"><label for="action_restore">{{ lang.t("Restore") }}</label></div>
</div>
<div class="pretty p-default p-round p-smooth">
<input type="radio" ng-model="action" id="action_download" ng-checked="action == 'download'" value="download" />
<div class="state p-primary"><label for="action_download">{{ lang.t("Download") }}</label></div>
</div>
<div class="pretty p-default p-round p-smooth" ng-show="perm.isRoot">
<input type="radio" ng-model="action" id="action_lock" ng-checked="action == 'lock'" value="lock" />
<div class="state p-primary"><label for="action_lock">{{ lang.t("Lock Backups") }}</label></div>
</div>
<div class="pretty p-default p-round p-smooth" ng-show="perm.isRoot">
<input type="radio" ng-model="action" id="action_unlock" ng-checked="action == 'unlock'" value="unlock" />
<div class="state p-primary"><label for="action_unlock">{{ lang.t("Unlock Backups") }}</label></div>
</div>
</div>
</div>
</form>
<h3 class="modal-title" style="border-bottom: 1px solid #e5e5e5; padding-bottom: 10px; margin-bottom: 20px;">{{ lang.t("Filters") }}</h3>
<form data-parsley-validate="" class="form-horizontal form-label-left" novalidate>
<alert-box ng-model="filteredAccountsStatus"></alert-box>
<fieldset ng-disabled="loadingAccounts">
<div class="form-group">
<label class="control-label col-md-3 col-sm-3 col-xs-12">{{ lang.t("Accounts") }}</label>
<div class="col-md-9 col-sm-9 col-xs-12">
<div class="input-group">
<md-autocomplete
md-search-text="autocomplete.accountText"
md-no-cache="true"
md-clear-button="false"
md-input-id="accountSelection"
md-menu-class="account-selection-results"
md-selected-item-change="selectAccount(account)"
md-items="account in searchAccounts(autocomplete.accountText)"
md-min-length="2"
placeholder="{{ lang.t('Start typing the requested account...') }}">
<md-item-template>
<div ng-include="includePath('accountDropdown')"></div>
</md-item-template>
<md-not-found>
{{ lang.t("No account matching \"%s\" were found.", autocomplete.accountText) }}
</md-not-found>
</md-autocomplete>
<div class="include-btns" ng-show="filters.accounts.length">
<button ng-click="filters.accounts.splice($index, 1)" class="btn btn-primary btn-xs" ng-repeat="username in filters.accounts track by $index">
<em class="fas fa-times"></em>
{{ account_details[username] !== undefined && account_details[username].virtual && account_details[username].nickname ? account_details[username].nickname : username }}
</button>
</div>
<div class="input-group-btn" style="vertical-align: top;">
<button class="btn btn-primary" ng-click="accountsSelection()">{{ lang.t("List Accounts") }}</button>
</div>
</div>
<p class="help-block">{{ lang.t("Note: All accounts will be selected unless you add account filters") }}</p>
</div>
</div>
<div class="form-group">
<label class="control-label col-md-3 col-sm-3 col-xs-12">{{ lang.t("Account Status") }}</label>
<div class="col-md-9 col-sm-9 col-xs-12">
<div class="pretty p-default p-round p-smooth">
<input type="radio" ng-model="filters.account_status" id="status_0" ng-checked="filters.account_status == 0" value="0" />
<div class="state p-primary"><label for="status_0">{{ lang.t("Any") }}</label></div>
</div>
<div class="pretty p-default p-round p-smooth">
<input type="radio" ng-model="filters.account_status" id="status_1" ng-checked="filters.account_status == 1" value="1" />
<div class="state p-primary"><label for="status_1">{{ lang.t("Only Active") }}</label></div>
</div>
<div class="pretty p-default p-round p-smooth">
<input type="radio" ng-model="filters.account_status" id="status_2" ng-checked="filters.account_status == 2" value="2" />
<div class="state p-primary"><label for="status_2">{{ lang.t("Only Orphan") }}</label></div>
</div>
</div>
</div>
<div class="form-group" ng-show="action == 'lock' || action == 'unlock'">
<label class="control-label col-md-3 col-sm-3 col-xs-12">{{ lang.t((action == 'lock' ? "Lock" : "Unlock") + " Backups") }}</label>
<div class="col-md-9 col-sm-9 col-xs-12">
<div class="pretty p-default p-round p-smooth">
<input type="radio" ng-model="options.allbackups" id="allbackups_0" ng-checked="options.allbackups == 0" value="0" />
<div class="state p-primary"><label for="allbackups_0">{{ lang.t("Single Backup") }}</label></div>
</div>
<div class="pretty p-default p-round p-smooth">
<input type="radio" ng-model="options.allbackups" id="allbackups_1" ng-checked="options.allbackups == 1" value="1" />
<div class="state p-primary"><label for="allbackups_1">{{ lang.t("All Backups") }}</label></div>
</div>
</div>
</div>
<div style="text-align: center; padding: 10px;">
<button class="btn btn-warning btn-xs" ng-click="advanced = !advanced;">{{advanced ? lang.t("Show Less Filters") : lang.t("Show More Filters") }}</button>
</div>
<div ng-show="advanced">
<div class="form-group">
<label class="control-label col-md-3 col-sm-3 col-xs-12">{{ lang.t("Use Damaged Backups") }}</label>
<div class="col-md-9 col-sm-9 col-xs-12">
<div class="pretty p-default p-round p-smooth">
<input type="radio" ng-model="filters.use_damaged" id="use_damaged_0" ng-checked="filters.use_damaged == 0" value="0" />
<div class="state p-primary"><label for="use_damaged_0">{{ lang.t("No") }}</label></div>
</div>
<div class="pretty p-default p-round p-smooth">
<input type="radio" ng-model="filters.use_damaged" id="use_damaged_1" ng-checked="filters.use_damaged == 1" value="1" />
<div class="state p-primary"><label for="use_damaged_1">{{ lang.t("Yes") }}</label></div>
</div>
</div>
</div>
<div class="form-group">
<label class="control-label col-md-3 col-sm-3 col-xs-12">{{ lang.t("Backup Date Range") }}</label>
<div class="col-md-9 col-sm-9 col-xs-12">
<div class="input-group">
<span class="input-group-addon">{{lang.t("From")}}</span>
<input
class="form-control"
moment-picker="filters.date_start"
format="MMM Do YYYY, hh:mm A"
max-date="filters.date_end"
id="date_start"
placeholder="{{ lang.t('Any Starting Date') }}"
ng-model="filters.date_start"
ng-model-options="{ updateOn: 'blur' }" />
</div>
<div class="input-group" style="margin-bottom: 0;">
<span class="input-group-addon">{{lang.t("To")}}</span>
<input
moment-picker="filters.date_end"
format="MMM Do YYYY, hh:mm A"
min-date="filters.date_start"
max-date="today"
class="form-control"
id="date_end"
placeholder="{{ lang.t('Any Ending Date') }}"
ng-model="filters.date_end"
ng-model-options="{ updateOn: 'blur' }" />
</div>
<div>
<a href="" ng-click="filters.date_start = ''; filters.date_end = '';" style="font-weight: bold;">
<span class="fas fa-times"></span>
{{lang.t("Reset Backup Date Range")}}
</a>
</div>
</div>
</div>
<div class="form-group" ng-hide="(action == 'lock' || action == 'unlock') && options.allbackups == 1">
<label class="control-label col-md-3 col-sm-3 col-xs-12">{{ lang.t("Backup Date Sorting") }}</label>
<div class="col-md-9 col-sm-9 col-xs-12">
<div class="pretty p-default p-round p-smooth">
<input type="radio" ng-model="filters.show_oldest" id="show_oldest_0" ng-checked="filters.show_oldest == 0" value="0" />
<div class="state p-primary"><label for="show_oldest_0">{{ lang.t("Sort by Newest") }}</label></div>
</div>
<div class="pretty p-default p-round p-smooth">
<input type="radio" ng-model="filters.show_oldest" id="show_oldest_1" ng-checked="filters.show_oldest == 1" value="1" />
<div class="state p-primary"><label for="show_oldest_1">{{ lang.t("Sort by Oldest") }}</label></div>
</div>
</div>
</div>
<div class="form-group" ng-show="perm.canManageDestinations">
<label class="control-label col-md-3 col-sm-3 col-xs-12">{{ lang.t("Destination") }}</label>
<div class="col-md-9 col-sm-9 col-xs-12">
<select id="destination" class="form-control" data-ng-options="destination.value as destination.label for destination in destinations" data-ng-model="filters.destination"></select>
</div>
</div>
<div class="form-group">
<label class="control-label col-md-3 col-sm-3 col-xs-12">{{ lang.t("Owned By") }}</label>
<div class="col-md-9 col-sm-9 col-xs-12">
<div class="input-group">
<md-autocomplete
md-search-text="autocomplete.ownerText"
md-no-cache="true"
md-clear-button="false"
md-input-id="accountSelection"
md-menu-class="account-selection-results"
md-selected-item-change="selectOwner(account)"
md-items="account in searchOwners(autocomplete.ownerText)"
md-min-length="2"
placeholder="{{ lang.t('Start typing the requested account...') }}">
<md-item-template>
<div ng-include="includePath('accountDropdown')"></div>
</md-item-template>
<md-not-found>
{{ lang.t("No account matching \"%s\" were found.", autocomplete.ownerText) }}
</md-not-found>
</md-autocomplete>
<div class="include-btns">
<button ng-click="filters.owned_by.splice($index, 1)" class="btn btn-primary btn-xs" ng-repeat="username in filters.owned_by track by $index">
<em class="fas fa-times"></em>
{{ owner_details[username] !== undefined && owner_details[username].virtual && owner_details[username].nickname ? owner_details[username].nickname : username }}
</button>
</div>
<div class="input-group-btn" style="vertical-align: top;">
<button class="btn btn-primary" ng-click="ownersSelection()">{{ lang.t("List Accounts") }}</button>
</div>
</div>
</div>
</div>
<div class="form-group" ng-show="perm.isRoot">
<label class="control-label col-md-3 col-sm-3 col-xs-12">{{ lang.t("Account Tags") }}</label>
<div class="col-md-9 col-sm-9 col-xs-12">
<div class="input-group">
<md-autocomplete
md-search-text="autocomplete.tagText"
md-no-cache="true"
md-clear-button="false"
md-input-id="accountSelection"
md-menu-class="account-selection-results"
md-selected-item-change="selectTag(tag)"
md-items="tag in searchTags(autocomplete.tagText)"
md-min-length="2"
placeholder="{{ lang.t('Start typing the requested tag name...') }}">
<md-item-template>
<strong>{{tag.name}}</strong>
</md-item-template>
<md-not-found>
{{ lang.t("No tag matching \"%s\" were found.", autocomplete.tagText) }}
</md-not-found>
</md-autocomplete>
<div class="include-btns">
<button ng-click="filters.tags.splice($index, 1)" class="btn btn-primary btn-xs" style="border-color: #dddddd; background-color: {{ tags[tag].color }}" ng-repeat="tag in filters.tags track by $index">
<em class="fas fa-times"></em>
{{ tags[tag].name }}
</button>
</div>
<div class="input-group-btn" style="vertical-align: top;">
<button class="btn btn-primary" ng-click="tagsSelection()">{{ lang.t("List Tags") }}</button>
</div>
</div>
</div>
</div>
<div class="form-group" ng-hide="filters.account_status == 2">
<label class="control-label col-md-3 col-sm-3 col-xs-12">{{ lang.t("Account Suspended") }}</label>
<div class="col-md-9 col-sm-9 col-xs-12">
<div class="pretty p-default p-round p-smooth">
<input type="radio" ng-model="filters.account_suspended" id="suspended_0" ng-checked="filters.account_suspended == 0" value="0" />
<div class="state p-primary"><label for="suspended_0">{{ lang.t("Any") }}</label></div>
</div>
<div class="pretty p-default p-round p-smooth">
<input type="radio" ng-model="filters.account_suspended" id="suspended_1" ng-checked="filters.account_suspended == 1" value="1" />
<div class="state p-primary"><label for="suspended_1">{{ lang.t("Active") }}</label></div>
</div>
<div class="pretty p-default p-round p-smooth">
<input type="radio" ng-model="filters.account_suspended" id="suspended_2" ng-checked="filters.account_suspended == 2" value="2" />
<div class="state p-primary"><label for="suspended_2">{{ lang.t("Suspended") }}</label></div>
</div>
</div>
</div>
<div class="form-group" ng-hide="action == 'unlock' || action == 'lock'">
<label class="control-label col-md-3 col-sm-3 col-xs-12">{{ lang.t("Backup Lock") }}</label>
<div class="col-md-9 col-sm-9 col-xs-12">
<div class="pretty p-default p-round p-smooth">
<input type="radio" ng-model="filters.locked" id="locked_0" ng-checked="filters.locked == 0" value="0" />
<div class="state p-primary"><label for="locked_0">{{ lang.t("Any") }}</label></div>
</div>
<div class="pretty p-default p-round p-smooth">
<input type="radio" ng-model="filters.locked" id="locked_1" ng-checked="filters.locked == 1" value="1" />
<div class="state p-primary"><label for="locked_1">{{ lang.t("Locked") }}</label></div>
</div>
<div class="pretty p-default p-round p-smooth">
<input type="radio" ng-model="filters.locked" id="locked_2" ng-checked="filters.locked == 2" value="2" />
<div class="state p-primary"><label for="locked_2">{{ lang.t("Unlocked") }}</label></div>
</div>
</div>
</div>
<div class="form-group">
<label class="control-label col-md-3 col-sm-3 col-xs-12">{{ lang.t("Backup Encryption") }}</label>
<div class="col-md-9 col-sm-9 col-xs-12">
<div class="pretty p-default p-round p-smooth">
<input type="radio" ng-model="filters.encrypted" id="encrypted_0" ng-checked="filters.encrypted == 0" value="0" />
<div class="state p-primary"><label for="encrypted_0">{{ lang.t("Any") }}</label></div>
</div>
<div class="pretty p-default p-round p-smooth">
<input type="radio" ng-model="filters.encrypted" id="encrypted_1" ng-checked="filters.encrypted == 1" value="1" />
<div class="state p-primary"><label for="encrypted_1">{{ lang.t("Encrypted") }}</label></div>
</div>
<div class="pretty p-default p-round p-smooth">
<input type="radio" ng-model="filters.encrypted" id="encrypted_2" ng-checked="filters.encrypted == 2" value="2" />
<div class="state p-primary"><label for="encrypted_2">{{ lang.t("Unencrypted") }}</label></div>
</div>
</div>
</div>
<div class="form-group">
<label class="control-label col-md-3 col-sm-3 col-xs-12">{{ lang.t("Backup Structure") }}</label>
<div class="col-md-9 col-sm-9 col-xs-12">
<div class="pretty p-default p-round p-smooth">
<input type="radio" ng-model="filters.backup_structure" id="backup_structure_0" ng-checked="filters.backup_structure == 0" value="0" />
<div class="state p-primary"><label for="encrypted_0">{{ lang.t("Any") }}</label></div>
</div>
<div class="pretty p-default p-round p-smooth">
<input type="radio" ng-model="filters.backup_structure" id="backup_structure_1" ng-checked="filters.backup_structure == 1" value="1" />
<div class="state p-primary"><label for="backup_structure_1">{{ lang.t("Incremental") }}</label></div>
</div>
<div class="pretty p-default p-round p-smooth">
<input type="radio" ng-model="filters.backup_structure" id="backup_structure_2" ng-checked="filters.backup_structure == 2" value="2" />
<div class="state p-primary"><label for="backup_structure_2">{{ lang.t("Archived") }}</label></div>
</div>
<div class="pretty p-default p-round p-smooth">
<input type="radio" ng-model="filters.backup_structure" id="backup_structure_4" ng-checked="filters.backup_structure == 4" value="4" />
<div class="state p-primary"><label for="backup_structure_4">{{ lang.t("Compressed") }}</label></div>
</div>
</div>
</div>
<div class="form-group">
<label class="control-label col-md-3 col-sm-3 col-xs-12">{{ lang.t("Backup Contains") }}</label>
<div class="col-md-9 col-sm-9 col-xs-12">
<div class="row">
<div class="col-md-6" ng-repeat="type in account_types" style="margin-bottom: 3px;">
<div class="pretty p-default p-curve p-smooth">
<input aria-label="{{ type.label }} checkbox" type="checkbox" id="filter_contains_{{type.value}}" ng-checked="containsChecked(type.value, filters)" ng-click="toggleContains(type.value, filters)" ng-disabled="isContainsDisabled(type.value)" value="{{ type.value }}" />
<div aria-label="{{ type.label }} checkbox" class="state p-primary"><label for="filter_contains_{{type.value}}">{{ type.label }}</label></div>
</div>
</div>
</div>
</div>
</div>
</div>
</fieldset>
</form>
</div>
<div ng-show="showOptions">
<!--div ng-show="action == 'unlock'">
<div style="margin-bottom: 20px;">
<h3 class="modal-title" style="border-bottom: 1px solid #e5e5e5; padding-bottom: 10px; margin-bottom: 20px;">{{ lang.t("Unlock Options") }}</h3>
<form data-parsley-validate="" class="form-horizontal form-label-left" novalidate>
<div class="pretty p-default p-curve p-smooth">
<input type="checkbox" ng-model="options.allbackups" id="unlock_allbackups" ng-checked="options.allbackups" />
<div class="state p-primary"><label for="unlock_allbackups">{{ lang.t("Unlock all account backups") }}</label></div>
</div>
</form>
</div>
</div-->
<div ng-show="action == 'lock'">
<div style="margin-bottom: 20px;">
<h3 class="modal-title" style="border-bottom: 1px solid #e5e5e5; padding-bottom: 10px; margin-bottom: 20px;">{{ lang.t("Lock Options") }}</h3>
<form data-parsley-validate="" class="form-horizontal form-label-left" novalidate>
<div class="form-group">
<label class="control-label col-md-3 col-sm-3 col-xs-12" for="lock_ttl">{{ lang.t("Lock Time") }}</label>
<div class="col-md-9 col-sm-9 col-xs-12">
<input-dropdown addon="{{lang.t('Days')}}" options="{0:lang.t('Unlimited time'),5:5,10:10,15:15,30:30}" ng-model="options.lockttl">
<input validate-field="int" min="1" id="lock_ttl" class="form-control col-md-7 col-xs-12" type="text" ng-model="options.lockttl" value="" />
</input-dropdown>
<p class="help-block">{{ lang.t("The lock TTL.") }}</p>
</div>
</div>
</form>
</div>
</div>
<div ng-show="action == 'download'">
<div style="margin-bottom: 20px;">
<h3 class="modal-title" style="border-bottom: 1px solid #e5e5e5; padding-bottom: 10px; margin-bottom: 20px;">{{ lang.t("What to Download") }}</h3>
<div class="row">
<div class="col-md-4" ng-repeat="type in account_types" style="margin-bottom: 3px;">
<div class="pretty p-default p-curve p-smooth">
<input aria-label="{{ type.label }} checkbox" type="checkbox" id="download_options_contains_{{type.value}}" ng-checked="containsChecked(type.value)" ng-click="toggleContains(type.value)" ng-disabled="isContainsDisabled(type.value)" value="{{ type.value }}" />
<div aria-label="{{ type.label }} checkbox" class="state p-primary"><label for="download_options_contains_{{type.value}}">{{ type.label }}</label></div>
</div>
</div>
</div>
</div>
</div>
<div ng-show="action == 'restore'">
<div style="margin-bottom: 20px;">
<h3 class="modal-title" style="border-bottom: 1px solid #e5e5e5; padding-bottom: 10px; margin-bottom: 20px;">{{ lang.t("What to Restore") }}</h3>
<form data-parsley-validate="" class="form-horizontal form-label-left" novalidate>
<div class="row">
<div class="col-md-4" ng-repeat="type in account_types" style="margin-bottom: 3px;">
<div class="pretty p-default p-curve p-smooth">
<input aria-label="{{ type.label }} checkbox" type="checkbox" id="restore_options_contains_{{type.value}}" ng-checked="containsChecked(type.value)" ng-click="toggleContains(type.value)" ng-disabled="isContainsDisabled(type.value)" value="{{ type.value }}" />
<div aria-label="{{ type.label }} checkbox" class="state p-primary"><label for="restore_options_contains_{{type.value}}">{{ type.label }}</label></div>
</div>
</div>
</div>
</form>
</div>
<div ng-show="gotItems([const.BACKUP_TYPE_ACCOUNT_CONFIG,const.BACKUP_TYPE_ACCOUNT_HOMEDIR,const.BACKUP_TYPE_ACCOUNT_EMAILS])" style="margin-bottom: 20px;">
<h3 class="modal-title" style="border-bottom: 1px solid #e5e5e5; padding-bottom: 10px; margin-bottom: 20px;">{{ lang.t("Restore Options") }}</h3>
<form data-parsley-validate="" class="form-horizontal form-label-left" novalidate>
<div ng-show="gotItems([const.BACKUP_TYPE_ACCOUNT_CONFIG])">
<div class="pretty p-default p-curve p-smooth">
<input type="checkbox" ng-model="options.terminate" id="terminate" ng-checked="options.terminate" />
<div class="state p-primary"><label for="terminate">{{ lang.t("Terminate account before restore (Only for non reseller accounts)") }}</label></div>
</div>
</div>
<div ng-show="gotItems([const.BACKUP_TYPE_ACCOUNT_HOMEDIR,const.BACKUP_TYPE_ACCOUNT_EMAILS]) && !options.terminate && !account.orphan">
<div class="pretty p-default p-curve p-smooth">
<input type="checkbox" ng-model="options.merge" id="merge" ng-checked="options.merge" />
<div class="state p-primary"><label for="merge">{{ lang.t("Merge live account data with backup data") }}</label></div>
</div>
</div>
<div ng-show="gotItems([const.BACKUP_TYPE_ACCOUNT_CONFIG])">
<div class="pretty p-default p-curve p-smooth">
<input type="checkbox" ng-model="options.suspend" id="suspend" ng-checked="options.suspend" />
<div class="state p-primary"><label for="merge">{{ lang.t("Suspend account after restore") }}</label></div>
</div>
</div>
</form>
</div>
<div ng-show="restore_conditions.length" style="margin-bottom: 20px;">
<h3 class="modal-title" style="border-bottom: 1px solid #e5e5e5; padding-bottom: 10px; margin-bottom: 20px;">{{ lang.t("Restore Conditions") }}</h3>
<form data-parsley-validate="" class="form-horizontal form-label-left" novalidate>
<div ng-repeat="condition in restore_conditions">
<div class="pretty p-default p-curve p-smooth">
<input type="checkbox" ng-model="conditions[condition._id]" id="condition_{{condition._id}}" ng-checked="conditions[condition._id]" />
<div class="state p-primary"><label for="condition_{{condition._id}}">{{ condition.condition }}</label></div>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="modal-footer" style="text-align: center;">
<alert-box ng-show="showOptions" ng-model="actionMessage"></alert-box>
<button ng-show="showOptions" class="btn btn-danger" type="button" ng-click="showOptions = flase;" title="{{ lang.t('Back to Filters') }}">{{ lang.t("Back to Filters") }}</button>
<button ng-show="!showOptions" class="btn btn-primary" type="button" ng-disabled="(total_accounts-excluded.length) <= 0" ng-click="showOptions = (total_accounts-excluded.length > 0)" title="{{ lang.t('Next') }}">{{ lang.t("Next") }}</button>
<button ng-show="showOptions && action == 'restore'" class="btn btn-primary" type="button" ng-click="addToQueue()" title="{{ lang.t('Restore Filtered Accounts') }}"><span class="fas fa-sync"></span> {{ lang.t("Restore Filtered Accounts") }}</button>
<button ng-show="showOptions && action == 'download'" class="btn btn-primary" type="button" ng-click="addToQueue()" title="{{ lang.t('Download Filtered Accounts Backups') }}"><span class="fas fa-download"></span> {{ lang.t("Download Filtered Accounts Backups") }}</button>
<button ng-show="showOptions && action == 'lock'" class="btn btn-primary" type="button" ng-click="manageBackupLock()" title="{{ lang.t('Lock Filtered Accounts Backups') }}"><span class="fas fa-lock"></span> {{ lang.t("Lock Filtered Accounts Backups") }}</button>
<button ng-show="showOptions && action == 'unlock'" class="btn btn-primary" type="button" ng-click="manageBackupLock()" title="{{ lang.t('Unlock Filtered Accounts Backups') }}"><span class="fas fa-unlock"></span> {{ lang.t("Unlock Filtered Accounts Backups") }}</button>
</div>
</div>
</div>
<div class="col-xl-7 col-lg-7 col-md-7 col-xs-12">
<div class="table-responsive">
<table class="table table-striped content-table">
<thead>
<tr>
<th class="col-sm-3 col-md-3 col-lg-3 column-title" ng-hide="(action == 'lock' || action == 'unlock') && options.allbackups == 1">
{{ lang.t("Selected Backup") }}
</th>
<th class="col-sm-2 col-md-2 col-lg-2 column-title">
{{ lang.t("Username") }}
</th>
<th class="col-sm-2 col-md-2 col-lg-2 column-title">
{{ lang.t("Owner") }}
</th>
<th class="col-sm-3 col-md-3 col-lg-3 column-title" ng-hide="action == 'lock' || action == 'unlock'">
{{ lang.t("Encryption Key") }}
</th>
<th class="column-title" ng-if="perm.isRoot">{{ lang.t("Delete") }}</th>
<th class="col-sm-2 col-md-2 col-lg-2 column-title">
<span ng-show="exclude_loading" class="fas fa-spin fa-circle-notch"></span>
{{ lang.t("Status") }}
<a href="" class="btn btn-xs" ng-class="{ 'btn-success': exclude_type == 1, 'btn-danger': exclude_type == 0 }" ng-hide="exclude_loading" ng-click="toggleExcludeAll()">{{ exclude_type == 0 ? lang.t("Exclude All") : lang.t("Include All") }}</a>
</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="account in accounts track by $index" id="account_row_{{$index}}" ng-click="openActions(account)" ng-class="{ 'suspended': account.account.suspended }">
<td data-title="{{ lang.t('Selected Backup') }}" ng-hide="(action == 'lock' || action == 'unlock') && options.allbackups == 1">
<span uib-tooltip="{{ account.snapshot.lock_ttl ? lang.t('Locked until %s', lang.d(account.snapshot.lock_ttl)) : lang.t('Locked with unlimited time') }}" tooltip-enable="account.snapshot.lock" class="fas" ng-class="{ 'fa-lock': account.snapshot.lock, 'fa-lock-open': !account.snapshot.lock }"></span>
{{ lang.d(account.snapshot.created, 'shorttime') }}
<div>
<span ng-show="account.snapshot.damaged" class="label label-danger" tooltip="right|The backup may not be complete"><span class="fas fa-exclamation-triangle"></span> {{lang.t("Damaged")}}</span>
<!--span ng-show="account.snapshot.disabled" class="label label-danger" tooltip="right|Restore/download this backup will fail in some cases while the destination is disabled"><span class="fas fa-exclamation-triangle"></span> {{lang.t("Destination Disabled")}}</span-->
</div>
</td>
<td data-title="{{ lang.t('Username / Nickname') }}" style="white-space: nowrap;">
{{ (account.account.virtual && account.account.nickname ? account.account.nickname : account.account.username) + (account.account.orphan ? " - (" + lang.t("Orphan") + ")" : '') }}
<span class="fas fa-info-circle" uib-tooltip-template="'accountDetails.htm'" tooltip-placement="auto" tooltip-class="backups-tooltip"></span>
</td>
<td data-title="{{ lang.t('Owner') }}">
{{ account.account.owner_nickname }}
</td>
<td data-title="{{ lang.t('Encryption Key') }}" ng-hide="action == 'lock' || action == 'unlock'">
<strong ng-show="account.snapshot.encrypted">
<span class="fas fa-lock"></span>
{{lang.t("Encrypted Backup")}}
</strong>
<div ng-show="account.snapshot.encrypted">
<div ng-show="account.account.secret_key">
<div class="text-red" style="font-weight: bold; font-size: 11px;">{{lang.t("Encryption key is stored remotely")}}</div>
<label ng-show="!isExcluded(account.account)"><input type="text" class="form-control" ng-model="encryption_keys[account.account._id]" /></label>
</div>
<div ng-hide="account.account.secret_key" class="text-green" style="font-weight: bold; font-size: 11px;">{{lang.t("Encryption key is stored locally")}}</div>
</div>
<div ng-hide="account.snapshot.encrypted">-</div>
</td>
<td ng-if="perm.isRoot" >
<a href="" uib-tooltip="{{ lang.t('Delete Snapshot') }}" ng-click="deleteSnapshot(account.snapshot)"><em class="fas fa-trash"></em></a>
</td>
<td data-title="{{ lang.t('Status') }}">
<button ng-click="toggleExclude(account.account)" ng-show="isExcluded(account.account)" class="btn btn-danger btn-xs"><span class="fas fa-times"></span> {{ lang.t("Excluded") }}</button>
<button ng-click="toggleExclude(account.account)" ng-hide="isExcluded(account.account)" class="btn btn-success btn-xs"><span class="fas fa-check"></span> {{ lang.t("Included") }}</button>
</td>
</tr>
<tr ng-hide="!loadingAccounts">
<td colspan="10">
<loading-box><span>{{ lang.t("Loading Accounts") }}</span></loading-box>
</td>
</tr>
<tr ng-hide="accounts.length > 0 || loadingAccounts">
<td colspan="10">
<span>{{ lang.t("No Accounts Found") }}</span>
</td>
</tr>
</tbody>
</table>
</div>
<pagination fetch="fetchNoResetExcludes" meta="meta"></pagination>
</div>
</div>
</div>
<script type="text/ng-template" id="accountDetails.htm">
<div style="text-align: left; padding: 10px 0;">
<h5 style="margin: 0 20px 5px 20px; font-weight: bold;">{{ lang.t("Account Details") }}</h5>
<div style="margin: 0 20px 5px 20px;">
<div><strong>{{lang.t("ID")}}</strong>: {{account.account._id}}</div>
<div><strong>{{lang.t("UUID")}}</strong>: {{account.account.uuid}}</div>
<div><strong>{{lang.t("Domain")}}</strong>: {{account.account.domain}}</div>
<div><strong>{{lang.t("Home Directory")}}</strong>: {{account.account.homedir}}</div>
<div><strong>{{lang.t("IP Address")}}</strong>: {{account.account.ip}}</div>
</div>
</div>
</script>