commit
0322436cf5
@ -3,6 +3,7 @@ import { MatSnackBar } from '@angular/material/snack-bar';
|
|||||||
import { Title } from '@angular/platform-browser';
|
import { Title } from '@angular/platform-browser';
|
||||||
|
|
||||||
import { TranslateService } from '@ngx-translate/core';
|
import { TranslateService } from '@ngx-translate/core';
|
||||||
|
import { environment } from 'environments/environment.prod';
|
||||||
|
|
||||||
import { DataStoreService } from 'app/core/core-services/data-store.service';
|
import { DataStoreService } from 'app/core/core-services/data-store.service';
|
||||||
import { OpenSlidesService } from 'app/core/core-services/openslides.service';
|
import { OpenSlidesService } from 'app/core/core-services/openslides.service';
|
||||||
|
@ -47,4 +47,8 @@
|
|||||||
<mat-icon>undo</mat-icon>
|
<mat-icon>undo</mat-icon>
|
||||||
<span>{{ 'Reset to factory defaults' | translate }}</span>
|
<span>{{ 'Reset to factory defaults' | translate }}</span>
|
||||||
</button>
|
</button>
|
||||||
|
<button *ngIf="isSuperAdmin" mat-menu-item (click)="exportToOS4()">
|
||||||
|
<mat-icon>archive</mat-icon>
|
||||||
|
<span>{{ 'Export to OpenSlides4' | translate }}</span>
|
||||||
|
</button>
|
||||||
</mat-menu>
|
</mat-menu>
|
||||||
|
@ -2,9 +2,13 @@ import { Component, OnInit } from '@angular/core';
|
|||||||
import { Title } from '@angular/platform-browser';
|
import { Title } from '@angular/platform-browser';
|
||||||
|
|
||||||
import { TranslateService } from '@ngx-translate/core';
|
import { TranslateService } from '@ngx-translate/core';
|
||||||
|
import { environment } from 'environments/environment.prod';
|
||||||
|
|
||||||
import { BaseComponent } from 'app/base.component';
|
import { BaseComponent } from 'app/base.component';
|
||||||
|
import { HttpService } from 'app/core/core-services/http.service';
|
||||||
|
import { OperatorService } from 'app/core/core-services/operator.service';
|
||||||
import { ConfigRepositoryService } from 'app/core/repositories/config/config-repository.service';
|
import { ConfigRepositoryService } from 'app/core/repositories/config/config-repository.service';
|
||||||
|
import { FileExportService } from 'app/core/ui-services/file-export.service';
|
||||||
import { PromptService } from 'app/core/ui-services/prompt.service';
|
import { PromptService } from 'app/core/ui-services/prompt.service';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -22,11 +26,18 @@ export class ConfigOverviewComponent extends BaseComponent implements OnInit {
|
|||||||
protected titleService: Title,
|
protected titleService: Title,
|
||||||
protected translate: TranslateService,
|
protected translate: TranslateService,
|
||||||
public repo: ConfigRepositoryService,
|
public repo: ConfigRepositoryService,
|
||||||
private promptDialog: PromptService
|
private promptDialog: PromptService,
|
||||||
|
private http: HttpService,
|
||||||
|
private exporter: FileExportService,
|
||||||
|
private operator: OperatorService
|
||||||
) {
|
) {
|
||||||
super(titleService, translate);
|
super(titleService, translate);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public isSuperAdmin(): boolean {
|
||||||
|
return this.operator.isSuperAdmin;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the title, inits the table and calls the repo
|
* Sets the title, inits the table and calls the repo
|
||||||
*/
|
*/
|
||||||
@ -49,4 +60,10 @@ export class ConfigOverviewComponent extends BaseComponent implements OnInit {
|
|||||||
await this.repo.resetGroups(this.groups);
|
await this.repo.resetGroups(this.groups);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async exportToOS4(): Promise<void> {
|
||||||
|
const data = await this.http.get<any>(environment.urlPrefix + '/core/os4-export/');
|
||||||
|
const json = JSON.stringify(data, null, 2);
|
||||||
|
this.exporter.saveFile(json, 'export.json', 'application/json');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
1740
server/openslides/core/export.py
Normal file
1740
server/openslides/core/export.py
Normal file
File diff suppressed because it is too large
Load Diff
@ -13,4 +13,5 @@ urlpatterns = [
|
|||||||
name="core_history_information",
|
name="core_history_information",
|
||||||
),
|
),
|
||||||
url(r"^history/data/$", views.HistoryDataView.as_view(), name="core_history_data"),
|
url(r"^history/data/$", views.HistoryDataView.as_view(), name="core_history_data"),
|
||||||
|
url(r"^os4-export/$", views.OS4ExportView.as_view(), name="core_os4_export"),
|
||||||
]
|
]
|
||||||
|
@ -40,6 +40,7 @@ from ..utils.rest_api import (
|
|||||||
)
|
)
|
||||||
from .config import config
|
from .config import config
|
||||||
from .exceptions import ConfigError, ConfigNotFound
|
from .exceptions import ConfigError, ConfigNotFound
|
||||||
|
from .export import OS4Exporter, OS4ExporterException
|
||||||
from .models import (
|
from .models import (
|
||||||
ConfigStore,
|
ConfigStore,
|
||||||
Countdown,
|
Countdown,
|
||||||
@ -720,3 +721,20 @@ class HistoryDataView(utils_views.APIView):
|
|||||||
collection: list(dataset[collection].values())
|
collection: list(dataset[collection].values())
|
||||||
for collection in dataset.keys()
|
for collection in dataset.keys()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class OS4ExportView(utils_views.APIView):
|
||||||
|
"""
|
||||||
|
Returns the server time as UNIX timestamp.
|
||||||
|
"""
|
||||||
|
|
||||||
|
http_method_names = ["get"]
|
||||||
|
|
||||||
|
def get_context_data(self, **context):
|
||||||
|
if not in_some_groups(self.request.user.pk or 0, [GROUP_ADMIN_PK]):
|
||||||
|
self.permission_denied(self.request)
|
||||||
|
|
||||||
|
try:
|
||||||
|
return OS4Exporter().get_data()
|
||||||
|
except OS4ExporterException as e:
|
||||||
|
raise ValidationError({"detail": str(e)})
|
||||||
|
@ -3,6 +3,7 @@ source = openslides
|
|||||||
omit =
|
omit =
|
||||||
openslides/core/management/commands/*.py
|
openslides/core/management/commands/*.py
|
||||||
openslides/users/management/commands/*.py
|
openslides/users/management/commands/*.py
|
||||||
|
openslides/core/export.py
|
||||||
|
|
||||||
[coverage:html]
|
[coverage:html]
|
||||||
directory = personal_data/tmp/htmlcov
|
directory = personal_data/tmp/htmlcov
|
||||||
|
Loading…
Reference in New Issue
Block a user