several fixes and improvements
- Add projector logo/headerimage - Fixed opening multiselect action menu for users. - Used defined toolbar color for multiselect mode. - (server) Added check for 'request.data._mutable = True' to edit user profile as normal user.
This commit is contained in:
parent
cc45525678
commit
c9c4566c08
@ -35,5 +35,5 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
mat-toolbar.multi-select {
|
mat-toolbar.multi-select {
|
||||||
background-color: #757575;
|
background-color: #757575 !important;
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,9 @@
|
|||||||
<div id="container" [osResized]="resizeSubject" [ngStyle]="containerStyle" #container>
|
<div id="container" [osResized]="resizeSubject" [ngStyle]="containerStyle" #container>
|
||||||
<div id="projector" [ngStyle]="projectorStyle">
|
<div id="projector" [ngStyle]="projectorStyle">
|
||||||
<div id="header" [ngStyle]="headerFooterStyle" *ngIf="enableHeaderAndFooter">
|
<div id="header" [ngStyle]="headerFooterStyle" *ngIf="enableHeaderAndFooter">
|
||||||
<!-- TODO: Logo <img *ngIf="enableLogo" id="logo"> -->
|
<!-- projector logo -->
|
||||||
|
<os-logo *ngIf="enableLogo" inputAction="logo_projector_main" class="projector-logo-main"> </os-logo>
|
||||||
|
|
||||||
<div *ngIf="enableTitle" id="eventdata">
|
<div *ngIf="enableTitle" id="eventdata">
|
||||||
<div
|
<div
|
||||||
*ngIf="eventName"
|
*ngIf="eventName"
|
||||||
|
@ -21,12 +21,12 @@
|
|||||||
margin-bottom: 20px;
|
margin-bottom: 20px;
|
||||||
z-index: 1;
|
z-index: 1;
|
||||||
|
|
||||||
#logo {
|
.projector-logo-main {
|
||||||
|
height: 50px;
|
||||||
padding-left: 50px;
|
padding-left: 50px;
|
||||||
padding-top: 10px;
|
padding-top: 10px;
|
||||||
height: 50px;
|
|
||||||
margin-right: 25px;
|
|
||||||
float: left;
|
float: left;
|
||||||
|
display: flex;
|
||||||
}
|
}
|
||||||
|
|
||||||
#eventdata {
|
#eventdata {
|
||||||
|
@ -157,20 +157,33 @@ export class ProjectorComponent extends BaseComponent implements OnDestroy {
|
|||||||
super(titleService, translate);
|
super(titleService, translate);
|
||||||
|
|
||||||
// Get all important config variables.
|
// Get all important config variables.
|
||||||
|
|
||||||
|
// enable header/footer
|
||||||
this.configService
|
this.configService
|
||||||
.get<boolean>('projector_enable_header_footer')
|
.get<boolean>('projector_enable_header_footer')
|
||||||
.subscribe(val => (this.enableHeaderAndFooter = val));
|
.subscribe(val => (this.enableHeaderAndFooter = val));
|
||||||
this.configService.get<boolean>('projector_enable_title').subscribe(val => (this.enableTitle = val));
|
this.configService.get<boolean>('projector_enable_title').subscribe(val => (this.enableTitle = val));
|
||||||
|
|
||||||
|
// projector colors
|
||||||
this.configService
|
this.configService
|
||||||
.get<string>('projector_header_fontcolor')
|
.get<string>('projector_header_fontcolor')
|
||||||
.subscribe(val => (this.headerFooterStyle.color = val));
|
.subscribe(val => (this.headerFooterStyle.color = val));
|
||||||
this.configService
|
this.configService
|
||||||
.get<string>('projector_header_backgroundcolor')
|
.get<string>('projector_header_backgroundcolor')
|
||||||
.subscribe(val => (this.headerFooterStyle['background-color'] = val));
|
.subscribe(val => (this.headerFooterStyle['background-color'] = val));
|
||||||
this.configService.get<boolean>('projector_enable_logo').subscribe(val => (this.enableLogo = val));
|
|
||||||
this.configService
|
this.configService
|
||||||
.get<string>('projector_background_color')
|
.get<string>('projector_background_color')
|
||||||
.subscribe(val => (this.projectorStyle['background-color'] = val));
|
.subscribe(val => (this.projectorStyle['background-color'] = val));
|
||||||
|
|
||||||
|
// projector logo / background-image
|
||||||
|
this.configService.get<boolean>('projector_enable_logo').subscribe(val => (this.enableLogo = val));
|
||||||
|
this.configService.get<{ path?: string }>('logo_projector_header').subscribe(val => {
|
||||||
|
if (val && val.path) {
|
||||||
|
this.headerFooterStyle['background-image'] = "url('" + val.path + "')";
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// event data
|
||||||
this.configService.get<string>('general_event_name').subscribe(val => (this.eventName = val));
|
this.configService.get<string>('general_event_name').subscribe(val => (this.eventName = val));
|
||||||
this.configService.get<string>('general_event_description').subscribe(val => (this.eventDescription = val));
|
this.configService.get<string>('general_event_description').subscribe(val => (this.eventDescription = val));
|
||||||
this.configService.get<string>('general_event_date').subscribe(val => (this.eventDate = val));
|
this.configService.get<string>('general_event_date').subscribe(val => (this.eventDate = val));
|
||||||
|
@ -47,7 +47,6 @@
|
|||||||
*ngIf="user"
|
*ngIf="user"
|
||||||
(keydown)="onKeyDown($event)"
|
(keydown)="onKeyDown($event)"
|
||||||
>
|
>
|
||||||
<!-- <h3 translate>Personal Data</h3> -->
|
|
||||||
<div *ngIf="isAllowed('seeName')">
|
<div *ngIf="isAllowed('seeName')">
|
||||||
<!-- Title -->
|
<!-- Title -->
|
||||||
<mat-form-field
|
<mat-form-field
|
||||||
@ -106,7 +105,7 @@
|
|||||||
</mat-form-field>
|
</mat-form-field>
|
||||||
|
|
||||||
<!-- Gender -->
|
<!-- Gender -->
|
||||||
<mat-form-field class="form25 force-min-with" *ngIf="user.gender || editUser">
|
<mat-form-field class="form25 force-min-with" *ngIf="user.gender || (editUser && isAllowed('manage'))">
|
||||||
<mat-select placeholder="{{ 'Gender' | translate }}" formControlName="gender">
|
<mat-select placeholder="{{ 'Gender' | translate }}" formControlName="gender">
|
||||||
<mat-option>-</mat-option>
|
<mat-option>-</mat-option>
|
||||||
<mat-option *ngFor="let gender of genderList" [value]="gender">{{ gender | translate }}</mat-option>
|
<mat-option *ngFor="let gender of genderList" [value]="gender">{{ gender | translate }}</mat-option>
|
||||||
|
@ -124,7 +124,7 @@
|
|||||||
<mat-icon>cloud_upload</mat-icon>
|
<mat-icon>cloud_upload</mat-icon>
|
||||||
<span translate>Import</span><span> ...</span>
|
<span translate>Import</span><span> ...</span>
|
||||||
</button>
|
</button>
|
||||||
|
</div>
|
||||||
<div *ngIf="isMultiSelect">
|
<div *ngIf="isMultiSelect">
|
||||||
<button mat-menu-item (click)="selectAll()">
|
<button mat-menu-item (click)="selectAll()">
|
||||||
<mat-icon>done_all</mat-icon>
|
<mat-icon>done_all</mat-icon>
|
||||||
@ -192,7 +192,6 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
</mat-menu>
|
</mat-menu>
|
||||||
</mat-drawer-container>
|
</mat-drawer-container>
|
||||||
|
|
||||||
|
@ -16,6 +16,7 @@ from django.contrib.sites.shortcuts import get_current_site
|
|||||||
from django.core import mail
|
from django.core import mail
|
||||||
from django.core.exceptions import ValidationError as DjangoValidationError
|
from django.core.exceptions import ValidationError as DjangoValidationError
|
||||||
from django.db import transaction
|
from django.db import transaction
|
||||||
|
from django.http.request import QueryDict
|
||||||
from django.utils.encoding import force_bytes, force_text
|
from django.utils.encoding import force_bytes, force_text
|
||||||
from django.utils.http import urlsafe_base64_decode, urlsafe_base64_encode
|
from django.utils.http import urlsafe_base64_decode, urlsafe_base64_encode
|
||||||
|
|
||||||
@ -114,6 +115,7 @@ class UserViewSet(ModelViewSet):
|
|||||||
self.permission_denied(request)
|
self.permission_denied(request)
|
||||||
|
|
||||||
# This is a hack to make request.data mutable. Otherwise fields can not be deleted.
|
# This is a hack to make request.data mutable. Otherwise fields can not be deleted.
|
||||||
|
if isinstance(request.data, QueryDict):
|
||||||
request.data._mutable = True
|
request.data._mutable = True
|
||||||
# Remove fields that the user is not allowed to change.
|
# Remove fields that the user is not allowed to change.
|
||||||
# The list() is required because we want to use del inside the loop.
|
# The list() is required because we want to use del inside the loop.
|
||||||
|
Loading…
Reference in New Issue
Block a user