/usr/local/jetapps/var/www/jetbackup5/docroot/app/views
<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>
.
Edit
..
Edit
404.htm
Edit
accountActions.htm
Edit
accountBackups.htm
Edit
accountBackupsDownloadSummary.htm
Edit
accountBackupsLockSummary.htm
Edit
accountBackupsRestoreSummary.htm
Edit
accountBackupsUnlockSummary.htm
Edit
accountDownloads.htm
Edit
accountDropdown.htm
Edit
accountExcludeListSelection.htm
Edit
accountFilterActions.htm
Edit
accountFilterGroupActions.htm
Edit
accountFilterGroupManage.htm
Edit
accountFilterGroupManageFields.htm
Edit
accountFilterGroupManagePopup.htm
Edit
accountFilterGroupSelection.htm
Edit
accountFilterGroups.htm
Edit
accountFilterManage.htm
Edit
accountFilterManageFields.htm
Edit
accountFilterManagePopup.htm
Edit
accountFilters
Edit
accountFilters.htm
Edit
accountManage.htm
Edit
accountOrphanActions.htm
Edit
accountPackagesSelection.htm
Edit
accountReassign.htm
Edit
accountSelection.htm
Edit
accounts.htm
Edit
accountsOrphans.htm
Edit
accountsSelection.htm
Edit
addons.htm
Edit
agreement.htm
Edit
agreementPanel.htm
Edit
alerts.htm
Edit
backupJobActions.htm
Edit
backupJobManage.htm
Edit
backupJobs.htm
Edit
backupJobsSelection.htm
Edit
backupLockSelection.htm
Edit
cloneJobActions.htm
Edit
cloneJobManage.htm
Edit
cloneJobs.htm
Edit
cloneJobsSelection.htm
Edit
confirm.htm
Edit
dashboard.htm
Edit
destinationActions.htm
Edit
destinationManage.htm
Edit
destinations
Edit
destinations.htm
Edit
destinationsSelection.htm
Edit
disableUI.htm
Edit
disasterRecovery
Edit
disasterRecovery.htm
Edit
downloads.htm
Edit
encryptionKeySelection.htm
Edit
extension.htm
Edit
fileBrowse.htm
Edit
fileManager.htm
Edit
fileManagerDownload.htm
Edit
fileManagerPopup.htm
Edit
fileManagerRestore.htm
Edit
fileManagerView.htm
Edit
filePermissions.htm
Edit
filePermissionsActions.htm
Edit
filePermissionsManage.htm
Edit
hookActions.htm
Edit
hookManage.htm
Edit
hooks.htm
Edit
license.htm
Edit
listSelection.htm
Edit
logActions.htm
Edit
logItemActions.htm
Edit
logItems.htm
Edit
logViewer.htm
Edit
login.htm
Edit
logs.htm
Edit
main.htm
Edit
modifyDatabasesExcludes.htm
Edit
modifyMongoDBExcludes.htm
Edit
modifyMySQLExcludes.htm
Edit
modifyPostgreSQLExcludes.htm
Edit
myAccount.htm
Edit
notifications
Edit
packageActions.htm
Edit
packages.htm
Edit
permissions.htm
Edit
plugin.htm
Edit
pluginActions.htm
Edit
pluginManage.htm
Edit
plugins.htm
Edit
queue.htm
Edit
queueActions.htm
Edit
queueItemActions.htm
Edit
queueItems.htm
Edit
queueLogViewer.htm
Edit
queuePriorities.htm
Edit
queuePriorityActions.htm
Edit
queuePriorityManage.htm
Edit
repositories.htm
Edit
repositoryActions.htm
Edit
repositoryManage.htm
Edit
restore.htm
Edit
restoreConditionActions.htm
Edit
restoreConditionManage.htm
Edit
restoreConditions.htm
Edit
restoreDirectories.htm
Edit
restoreDisasterRecovery.htm
Edit
restoreMultiAccount.htm
Edit
restoreSingle.htm
Edit
restoreSingleAccount.htm
Edit
scheduleActions.htm
Edit
scheduleManage.htm
Edit
scheduleManageFields.htm
Edit
scheduleManagePopup.htm
Edit
scheduleSelection.htm
Edit
schedules.htm
Edit
security.htm
Edit
securityAvailablePlugins.htm
Edit
settings
Edit
settings.htm
Edit
showcase.htm
Edit
sideMenu.htm
Edit
support
Edit
support.htm
Edit
tagActions.htm
Edit
tagManage.htm
Edit
tags.htm
Edit
tagsSelection.htm
Edit