Make user guide multilingual
This commit is contained in:
parent
3b00b76f19
commit
ca38f0b0a4
|
@ -1,6 +1,8 @@
|
||||||
package eu.eudat.controllers;
|
package eu.eudat.controllers;
|
||||||
|
|
||||||
|
import eu.eudat.logic.security.claims.ClaimedAuthorities;
|
||||||
import eu.eudat.models.data.helpers.responses.ResponseItem;
|
import eu.eudat.models.data.helpers.responses.ResponseItem;
|
||||||
|
import eu.eudat.models.data.security.Principal;
|
||||||
import eu.eudat.models.data.userguide.UserGuide;
|
import eu.eudat.models.data.userguide.UserGuide;
|
||||||
import eu.eudat.types.ApiMessageCode;
|
import eu.eudat.types.ApiMessageCode;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
@ -19,6 +21,8 @@ import java.util.List;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
import java.util.stream.Stream;
|
import java.util.stream.Stream;
|
||||||
|
|
||||||
|
import static eu.eudat.types.Authorities.ADMIN;
|
||||||
|
|
||||||
@RestController
|
@RestController
|
||||||
@CrossOrigin
|
@CrossOrigin
|
||||||
@RequestMapping(value = {"/api/userguide/"})
|
@RequestMapping(value = {"/api/userguide/"})
|
||||||
|
@ -31,13 +35,16 @@ public class UserGuideController {
|
||||||
this.environment = environment;
|
this.environment = environment;
|
||||||
}
|
}
|
||||||
|
|
||||||
@RequestMapping(path = "current", method = RequestMethod.GET )
|
@RequestMapping(path = "{lang}", method = RequestMethod.GET )
|
||||||
public ResponseEntity getUserGuide() throws IOException {
|
public ResponseEntity getUserGuide(@PathVariable(name = "lang") String lang) throws IOException {
|
||||||
Stream<Path> walk = Files.walk(Paths.get(this.environment.getProperty("userguide.path")));
|
Stream<Path> walk = Files.walk(Paths.get(this.environment.getProperty("userguide.path")));
|
||||||
List<String> result = walk.filter(Files::isRegularFile)
|
List<String> result = walk.filter(Files::isRegularFile)
|
||||||
.map(Path::toString).collect(Collectors.toList());
|
.map(Path::toString).collect(Collectors.toList());
|
||||||
|
|
||||||
String fileName = result.get(0);
|
String fileName = result.stream().filter(guide -> guide.contains("_" + lang)).findFirst().orElse(null);
|
||||||
|
if (fileName == null) {
|
||||||
|
fileName = result.stream().filter(guide -> guide.contains("_en")).findFirst().get();
|
||||||
|
}
|
||||||
InputStream is = new FileInputStream(fileName);
|
InputStream is = new FileInputStream(fileName);
|
||||||
|
|
||||||
String[] filepath = fileName.split("\\.")[0].split("\\\\");
|
String[] filepath = fileName.split("\\.")[0].split("\\\\");
|
||||||
|
@ -60,7 +67,7 @@ public class UserGuideController {
|
||||||
|
|
||||||
@RequestMapping(value = "current", method = RequestMethod.POST)
|
@RequestMapping(value = "current", method = RequestMethod.POST)
|
||||||
public @ResponseBody
|
public @ResponseBody
|
||||||
ResponseEntity<ResponseItem<String>> updateGuide(@RequestBody UserGuide guide) throws Exception {
|
ResponseEntity<ResponseItem<String>> updateGuide(@RequestBody UserGuide guide, @ClaimedAuthorities(claims = {ADMIN}) Principal principal) throws Exception {
|
||||||
String fileName = this.environment.getProperty("userguide.path") + guide.getName() + ".html";
|
String fileName = this.environment.getProperty("userguide.path") + guide.getName() + ".html";
|
||||||
OutputStream os = new FileOutputStream(fileName);
|
OutputStream os = new FileOutputStream(fileName);
|
||||||
os.write(guide.getHtml().getBytes());
|
os.write(guide.getHtml().getBytes());
|
||||||
|
|
|
@ -19,8 +19,8 @@ export class UserGuideService {
|
||||||
this.userGuideUrl = `${configurationService.server}userguide`;
|
this.userGuideUrl = `${configurationService.server}userguide`;
|
||||||
}
|
}
|
||||||
|
|
||||||
public getUserGuide(): Observable<HttpResponse<Blob>> {
|
public getUserGuide(lang: string): Observable<HttpResponse<Blob>> {
|
||||||
return this.http.get(`${this.userGuideUrl}/current`, { responseType: 'blob', observe: 'response', headers: {'Content-type': 'text/html',
|
return this.http.get(`${this.userGuideUrl}/${lang}`, { responseType: 'blob', observe: 'response', headers: {'Content-type': 'text/html',
|
||||||
'Accept': 'text/html',
|
'Accept': 'text/html',
|
||||||
'Access-Control-Allow-Origin': this.configurationService.app,
|
'Access-Control-Allow-Origin': this.configurationService.app,
|
||||||
'Access-Control-Allow-Credentials': 'true'} });
|
'Access-Control-Allow-Credentials': 'true'} });
|
||||||
|
|
|
@ -9,6 +9,8 @@ import { Router } from '@angular/router';
|
||||||
import { isNullOrUndefined } from 'util';
|
import { isNullOrUndefined } from 'util';
|
||||||
import { environment } from 'environments/environment';
|
import { environment } from 'environments/environment';
|
||||||
import { ConfigurationService } from '@app/core/services/configuration/configuration.service';
|
import { ConfigurationService } from '@app/core/services/configuration/configuration.service';
|
||||||
|
import { AuthService } from '@app/core/services/auth/auth.service';
|
||||||
|
import { LanguageService } from '@app/core/services/language/language.service';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'app-user-guide-editor',
|
selector: 'app-user-guide-editor',
|
||||||
|
@ -23,7 +25,8 @@ export class UserGuideEditorComponent extends BaseComponent implements OnInit {
|
||||||
private uiNotificationService: UiNotificationService,
|
private uiNotificationService: UiNotificationService,
|
||||||
private translate: TranslateService,
|
private translate: TranslateService,
|
||||||
private router: Router,
|
private router: Router,
|
||||||
private configurationService: ConfigurationService
|
private configurationService: ConfigurationService,
|
||||||
|
private languageService: LanguageService
|
||||||
) { super(); }
|
) { super(); }
|
||||||
|
|
||||||
ngOnInit() {
|
ngOnInit() {
|
||||||
|
@ -32,7 +35,7 @@ export class UserGuideEditorComponent extends BaseComponent implements OnInit {
|
||||||
name: [''],
|
name: [''],
|
||||||
html: ['']
|
html: ['']
|
||||||
});
|
});
|
||||||
this.userGuideService.getUserGuide().pipe(takeUntil(this._destroyed)).subscribe(data => {
|
this.userGuideService.getUserGuide(this.languageService.getCurrentLanguage()).pipe(takeUntil(this._destroyed)).subscribe(data => {
|
||||||
const contentDispositionHeader = data.headers.get('Content-Disposition');
|
const contentDispositionHeader = data.headers.get('Content-Disposition');
|
||||||
const filename = contentDispositionHeader.split(';')[1].trim().split('=')[1].replace(/"/g, '');
|
const filename = contentDispositionHeader.split(';')[1].trim().split('=')[1].replace(/"/g, '');
|
||||||
|
|
||||||
|
|
|
@ -3,6 +3,7 @@ import { UserGuideService } from '@app/core/services/user-guide/user-guide.servi
|
||||||
import { BaseComponent } from '@common/base/base.component';
|
import { BaseComponent } from '@common/base/base.component';
|
||||||
import { takeUntil } from 'rxjs/internal/operators/takeUntil';
|
import { takeUntil } from 'rxjs/internal/operators/takeUntil';
|
||||||
import { DomSanitizer } from '@angular/platform-browser';
|
import { DomSanitizer } from '@angular/platform-browser';
|
||||||
|
import { LanguageService } from '@app/core/services/language/language.service';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'app-user-guide-content',
|
selector: 'app-user-guide-content',
|
||||||
|
@ -17,12 +18,13 @@ export class UserGuideContentComponent extends BaseComponent implements OnInit,
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
private userGuideService: UserGuideService,
|
private userGuideService: UserGuideService,
|
||||||
private sanitizer: DomSanitizer
|
private sanitizer: DomSanitizer,
|
||||||
|
private languageService: LanguageService
|
||||||
) { super(); }
|
) { super(); }
|
||||||
|
|
||||||
ngOnInit() {
|
ngOnInit() {
|
||||||
this.scrollEvent = ((ev) => this.scroll(ev));
|
this.scrollEvent = ((ev) => this.scroll(ev));
|
||||||
this.userGuideService.getUserGuide()
|
this.userGuideService.getUserGuide(this.languageService.getCurrentLanguage())
|
||||||
.pipe(takeUntil(this._destroyed))
|
.pipe(takeUntil(this._destroyed))
|
||||||
.subscribe(response => {
|
.subscribe(response => {
|
||||||
const blob = new Blob([response.body], { type: 'text/html' });
|
const blob = new Blob([response.body], { type: 'text/html' });
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue