src/app/core/admin/admin/admin.component.html
<h1>Administration & Configuration</h1>
<p style="font-weight: bold; font-style: italic">
Warning: This section is intended for system administrators only. Make sure
you know what you are doing.
</p>
<hr />
<h2>Shortcuts</h2>
<mat-nav-list>
<mat-list-item [routerLink]="['/admin/site-settings']" i18n="admin menu item">
Site Settings
</mat-list-item>
<mat-list-item [routerLink]="['/admin/conflicts']" i18n="admin menu item">
Database Conflicts
</mat-list-item>
<mat-list-item [routerLink]="['/admin/setup-wizard']" i18n="admin menu item">
Setup Wizard
</mat-list-item>
</mat-nav-list>
<hr />
<h2>Backup</h2>
<p>
<button (click)="saveBackup()" mat-stroked-button>
Download Backup (.json)
</button>
<button (click)="backupImport.click()" mat-stroked-button>
Restore Backup (.json)
</button>
<input #backupImport type="file" hidden (change)="loadBackup($event)" />
</p>
<br />
<hr />
<h2>Export</h2>
<p>
<button (click)="saveCsvExport()" mat-stroked-button>
Download whole database (.csv)
</button>
</p>
<br />
<hr />
<h2>Application Configuration</h2>
<p>
<button (click)="downloadConfigClick()" mat-stroked-button>
Download configuration
</button>
<button (click)="configImport.click()" mat-stroked-button>
Upload new configuration
</button>
<input #configImport type="file" hidden (change)="uploadConfigFile($event)" />
<button routerLink="config-import" mat-stroked-button>
Generate configuration from spreadsheet
</button>
</p>
<br />
<hr />
<h2>Debug the PouchDB</h2>
<p>
<button (click)="debugDatabase()" mat-stroked-button>
Send to console.log()
</button>
</p>
<p>
<button (click)="clearDatabase()" mat-stroked-button>Empty Database</button>
</p>
<br />
<hr />
<h2 id="alert-log-heading">Alert Log</h2>
<table aria-describedby="alert-log-heading" class="admin-table">
<thead>
<th class="shrink-width">Timestamp</th>
<th class="shrink-width">Type</th>
<th>Message</th>
</thead>
<tbody>
<tr *ngFor="let alert of alerts.reverse()">
<td>{{ alert.timestamp | date: "medium" }}</td>
<td>{{ alert.type }}</td>
<td>{{ alert.message }}</td>
</tr>
</tbody>
</table>