Skip to content
Snippets Groups Projects
customization.component.ts 4.93 KiB
Newer Older
  • Learn to ignore specific revisions
  • import { Component, OnDestroy, OnInit, ViewChild } from '@angular/core';
    
    import { NotificationService } from '../../service/notification.service';
    import { HttpClient } from '@angular/common/http';
    import { tap, catchError } from 'rxjs/operators';
    import { TranslateService } from '@ngx-translate/core';
    import { AuthService } from '../../service/auth.service';
    import { of } from 'rxjs';
    import { NgForm } from '@angular/forms';
    
    import { FunctionsService } from '../../service/functions.service';
    
    
    declare let tinymce: any;
    
    @Component({
        templateUrl: 'customization.component.html',
        styleUrls: ['../administration.scss', 'customization.component.scss'],
    })
    
    
    export class CustomizationComponent implements OnInit, OnDestroy {
    
    
        @ViewChild('customizationForm', { static: false }) customizationForm: NgForm;
    
        loading: boolean = true;
    
        applicationUrl: string = '';
    
        watermark = {
            enabled: false,
            text: 'Document n°[id]',
    
        constructor(
            public http: HttpClient,
            private translate: TranslateService,
            public notificationService: NotificationService,
            public authService: AuthService,
    
            private functions: FunctionsService
    
            await this.getCustomizationInfos();
    
            await this.getWatermark();
    
            setTimeout(() => {
                this.initMce();
            }, 0);
    
            this.loading = false;
    
            return new Promise((resolve) => {
                this.http.get('../rest/authenticationInformations').pipe(
                    tap((data: any) => {
    
                        this.applicationUrl = data.applicationUrl;
    
                        this.loginMessage = data.loginMessage;
                        resolve(true);
                    }),
                    catchError((err: any) => {
    
                        this.notificationService.handleErrors(err);
                        return of(false);
                    })
                ).subscribe();
            });
        }
    
        getWatermark() {
            return new Promise((resolve) => {
                this.http.get('../rest/customization/watermark').pipe(
                    tap((data: any) => {
    
                        if (!this.functions.empty(data.configuration)) {
                            this.watermark = data.configuration;
                        }
    
                        resolve(true);
                    }),
                    catchError((err: any) => {
                        this.notificationService.handleErrors(err);
    
                        return of(false);
                    })
                ).subscribe();
    
        }
    
        onSubmit() {
            this.loginMessage = tinymce.get('login_message').getContent();
    
            this.http.put('../rest/customization', {id: this.authService.user.id , loginMessage: this.loginMessage, applicationUrl: this.applicationUrl, watermark: this.watermark}).pipe(
    
                    this.notificationService.success(this.translate.instant('lang.modificationSaved'));
    
                }),
                catchError((err: any) => {
                    this.notificationService.handleErrors(err);
                    return of(false);
                })
            ).subscribe();
    
        isNumber(evt: any) {
            evt = (evt) ? evt : window.event;
            const charCode = (evt.which) ? evt.which : evt.keyCode;
            if (charCode > 31 && (charCode < 48 || charCode > 57)) {
                return false;
            }
            return true;
        }
    
    
        initMce() {
            const param = {
                selector: '#login_message',
    
                base_url: `${this.functions.getBaseUrl().split('#')[0]}/tinymce/`,
    
                extended_valid_elements : 'tag,class,script[src|async|defer|type|charset]',
    
                content_css: `${this.functions.getBaseUrl().split('#')[0]}/assets/custom_tinymce.css`,
    
                language: this.translate.instant('lang.langISO').replace('-', '_'),
                language_url: `../node_modules/tinymce-i18n/langs/${this.translate.instant('lang.langISO').replace('-', '_')}.js`,
                menubar: false,
                statusbar: false,
                readonly: false,
                plugins: [
    
                    'autolink', 'table', 'noneditable', 'link'
    
                ],
                noneditable_noneditable_class: 'mceNonEditable',
                table_toolbar: '',
                table_sizing_mode: 'relative',
                table_resize_bars: false,
                toolbar_sticky: true,
                toolbar_drawer: 'floating',
                table_style_by_css: true,
                content_style: 'table td { padding: 1px; vertical-align: top; }',
                forced_root_block : false,
                toolbar: 'undo redo | fontselect fontsizeselect | bold italic underline strikethrough forecolor backcolor | table maarch_b64image | \
            alignleft aligncenter alignright alignjustify \
    
            bullist numlist outdent indent | removeformat | link'