diff --git a/FrontEnd/src/app/groups/group-details/group-details.component.html b/FrontEnd/src/app/groups/group-details/group-details.component.html index 7c9ba16..1b05cea 100644 --- a/FrontEnd/src/app/groups/group-details/group-details.component.html +++ b/FrontEnd/src/app/groups/group-details/group-details.component.html @@ -57,12 +57,12 @@ [contentStyle]="{'min-height':'600px', 'min-width': '800px'}">
Od kiedy test ma być dostępny: - +


Ile minut ma być dostępny ten test:


- +
Ta funkcjonalność pozwala tylko na edycję dostępności testów. diff --git a/FrontEnd/src/app/groups/group-details/group-details.component.ts b/FrontEnd/src/app/groups/group-details/group-details.component.ts index 696f52e..d60485d 100644 --- a/FrontEnd/src/app/groups/group-details/group-details.component.ts +++ b/FrontEnd/src/app/groups/group-details/group-details.component.ts @@ -31,14 +31,17 @@ export class GroupDetailsComponent implements OnInit, OnDestroy { displayAvailability = false; - dateFrom: Date; + dateFrom: Date = new Date(); howLong = 10; testId = 1; + minDate: Date = new Date(); + columnDefs = [ { headerName: 'Nazwa', field: 'title', headerTooltip: 'Nazwa' }, { headerName: 'Ocena', field: 'grade', headerTooltip: 'Ocena' }, { headerName: 'Max.', field: 'maxScore', headerTooltip: 'Max.', hide: false }, + { headerName: 'Start', field: 'startDate', headerTooltip: 'Start' }, { headerName: '', suppressMenu: true, @@ -46,6 +49,9 @@ export class GroupDetailsComponent implements OnInit, OnDestroy { cellRenderer: this.customCellRendererFunc } ]; + timetest: number; + + timeout: any; constructor(private route: ActivatedRoute, private groupService: GroupsService, private router: Router, public snackBar: MatSnackBar) { } @@ -87,7 +93,8 @@ export class GroupDetailsComponent implements OnInit, OnDestroy { success => { this.snackBar.open('Prawidłowo edytowano przedział czasowy.', null, { duration: 3000, verticalPosition: 'top', panelClass: ['snackbar-success'] }); - this.displayAvailability = false; + this.displayAvailability = false; + this.isDisplayed('testów'); }, error => { this.snackBar.open('Wystąpił błąd serwera. Spróbuj ponownie później.', null, @@ -119,8 +126,16 @@ export class GroupDetailsComponent implements OnInit, OnDestroy { public onRowClicked(e) { if (e.event.target !== undefined) { const data = e.data; + const now1 = new Date(); + const now = now1.getTime(); const actionType = e.event.target.getAttribute('data-action-type'); - + const temp = new Date(data['dateFrom']); + const timetest = temp.getTime(); + const tempstop = new Date(data['dateTo']); + const timeteststop = tempstop.getTime(); + const currentUsername = JSON.parse(localStorage.getItem('currentUser')).username; + const groupOwnerUsername = localStorage.getItem('groupOwnerUsername'); + if ((groupOwnerUsername === currentUsername) || (timetest < now && now < timeteststop)) { switch (actionType) { case 'remove': return this.onActionRemoveClick(e); @@ -129,7 +144,23 @@ export class GroupDetailsComponent implements OnInit, OnDestroy { default: this.goTo(e); } + } else { + switch (actionType) { + case 'remove': + return this.onActionRemoveClick(e); + case 'edit': + return this.showAvailabilityDialog(e.data); + default: + this.noTime(); + } } + + } + } + + noTime() { + this.snackBar.open('Test jest nieaktywny.', null, + { duration: 3000, verticalPosition: 'top', panelClass: ['snackbar-error'] }); } goTo(event: RowDoubleClickedEvent) { @@ -201,30 +232,52 @@ export class GroupDetailsComponent implements OnInit, OnDestroy { } onGridSizeChanged(params) { + const currentUsername = JSON.parse(localStorage.getItem('currentUser')).username; + const groupOwnerUsername = localStorage.getItem('groupOwnerUsername'); if (params.clientWidth < 800) { - this.columnDefs = [ - { headerName: 'Nazwa', field: 'title', headerTooltip: 'Nazwa' }, - { headerName: 'Ocena', field: 'grade', headerTooltip: 'Ocena' }, - { headerName: 'Max.', field: 'maxScore', headerTooltip: 'Max.', hide: true }, - { - headerName: '', - suppressMenu: true, - suppressSorting: true, - cellRenderer: this.customCellRendererFunc - } - ]; + if (groupOwnerUsername === currentUsername) { + this.columnDefs = [ + { headerName: 'Nazwa', field: 'title', headerTooltip: 'Nazwa' }, + { headerName: 'Ocena', field: 'grade', headerTooltip: 'Ocena' }, + { headerName: 'Max.', field: 'maxScore', headerTooltip: 'Max.', hide: true }, + { headerName: 'Start', field: 'startDate', headerTooltip: 'Start'}, + { + headerName: '', + suppressMenu: true, + suppressSorting: true, + cellRenderer: this.customCellRendererFunc + } + ]; + } else { + this.columnDefs = [ + { headerName: 'Nazwa', field: 'title', headerTooltip: 'Nazwa' }, + { headerName: 'Ocena', field: 'grade', headerTooltip: 'Ocena' }, + { headerName: 'Max.', field: 'maxScore', headerTooltip: 'Max.', hide: true }, + { headerName: 'Start', field: 'startDate', headerTooltip: 'Start'}, + ]; + } } else { - this.columnDefs = [ - { headerName: 'Nazwa', field: 'title', headerTooltip: 'Nazwa' }, - { headerName: 'Ocena', field: 'grade', headerTooltip: 'Ocena' }, - { headerName: 'Max.', field: 'maxScore', headerTooltip: 'Max.' }, - { - headerName: '', - suppressMenu: true, - suppressSorting: true, - cellRenderer: this.customCellRendererFunc - } - ]; + if (groupOwnerUsername === currentUsername) { + this.columnDefs = [ + { headerName: 'Nazwa', field: 'title', headerTooltip: 'Nazwa' }, + { headerName: 'Ocena', field: 'grade', headerTooltip: 'Ocena' }, + { headerName: 'Max.', field: 'maxScore', headerTooltip: 'Max.' }, + { headerName: 'Start', field: 'startDate', headerTooltip: 'Start'}, + { + headerName: '', + suppressMenu: true, + suppressSorting: true, + cellRenderer: this.customCellRendererFunc + } + ]; + } else { + this.columnDefs = [ + { headerName: 'Nazwa', field: 'title', headerTooltip: 'Nazwa' }, + { headerName: 'Ocena', field: 'grade', headerTooltip: 'Ocena' }, + { headerName: 'Max.', field: 'maxScore', headerTooltip: 'Max.' }, + { headerName: 'Start', field: 'startDate', headerTooltip: 'Start'} + ]; + } } params.api.sizeColumnsToFit(); @@ -275,8 +328,30 @@ export class GroupDetailsComponent implements OnInit, OnDestroy { } if (resource === 'testów') { this.localeText.noRowsToShow = 'Brak testów do wyświetlenia'; - setTimeout(() => { - this.testsSubscription = this.groupService.getResource(this.id, 'tests').subscribe(data => this.data = data); + if (this.timeout) { + clearTimeout(this.timeout); + } + this.timeout = setTimeout(() => { + this.testsSubscription = this.groupService.getResource(this.id, 'tests').subscribe(data => { + this.data = data; + data.forEach(x => { + const temp = new Date(x['dateFrom']); + const tempstop = new Date(x['dateTo']); + x['startDate'] = ''; + const hours = temp.getHours(); + const minutes = temp.getMinutes(); + // const months = ['STY', 'LUT', 'MAR', 'KWI', 'MAJ', 'CZE', 'LIP', 'SIE', 'WRZ', 'PAŹ', 'LIS', 'GRU']; + const year = temp.getFullYear().toString().substring(2); + const monthTemp = (temp.getMonth() + 1); + let month = monthTemp.toString(); + if (monthTemp < 10) { + month = `0${monthTemp}`; + } + const date = temp.getDate(); + const time = date + '.' + month + '.' + year + ' ' + hours + ':' + minutes; + x['startDate'] += time; + }); + }); this.dataToDisplay = resource; }, 200); diff --git a/FrontEnd/src/app/groups/sharing-resources-in-groups/sharing-resources-in-groups.component.html b/FrontEnd/src/app/groups/sharing-resources-in-groups/sharing-resources-in-groups.component.html index 46162e9..e6240a5 100644 --- a/FrontEnd/src/app/groups/sharing-resources-in-groups/sharing-resources-in-groups.component.html +++ b/FrontEnd/src/app/groups/sharing-resources-in-groups/sharing-resources-in-groups.component.html @@ -28,13 +28,13 @@


Od kiedy test ma być dostępny: - +


Ile minut ma być dostępny ten test:


- +
Brak elementów do dodania diff --git a/FrontEnd/src/app/groups/sharing-resources-in-groups/sharing-resources-in-groups.component.ts b/FrontEnd/src/app/groups/sharing-resources-in-groups/sharing-resources-in-groups.component.ts index cd1c241..1f37682 100644 --- a/FrontEnd/src/app/groups/sharing-resources-in-groups/sharing-resources-in-groups.component.ts +++ b/FrontEnd/src/app/groups/sharing-resources-in-groups/sharing-resources-in-groups.component.ts @@ -15,9 +15,9 @@ import { Subscription } from 'rxjs/Subscription'; export class SharingResourcesInGroupsComponent implements OnInit, OnDestroy { public id = 0; - public dateFrom: Date; + public dateFrom: Date = new Date(); public howLong = 10; - public maxDate = new Date(); + public minDate = new Date(); public materialsToAdd: Resource[] = []; public testsToAdd: Resource[] = []; diff --git a/FrontEnd/src/app/login/login.component.css b/FrontEnd/src/app/login/login.component.css index c517f10..bc597e5 100644 --- a/FrontEnd/src/app/login/login.component.css +++ b/FrontEnd/src/app/login/login.component.css @@ -1,5 +1,5 @@ #container-small { - background-color: #181616; + background-color: #28102f; padding: 30px; width: 25%; height: 400px; @@ -10,7 +10,7 @@ text-align: center; } #container-login { - background-color: #181616; + background-color: #28102f; top: 50%; left: 50%; transform: translate(-50%, -50%); diff --git a/FrontEnd/src/app/tests/single-choice-question/single-choice-question.component.css b/FrontEnd/src/app/tests/single-choice-question/single-choice-question.component.css index 1598789..0d9d7c7 100644 --- a/FrontEnd/src/app/tests/single-choice-question/single-choice-question.component.css +++ b/FrontEnd/src/app/tests/single-choice-question/single-choice-question.component.css @@ -34,3 +34,10 @@ .align { text-align: center; } + +.check +{ + height: 35px; + width: 35px; + margin-right: 20px; +} diff --git a/FrontEnd/src/app/tests/single-choice-question/single-choice-question.component.html b/FrontEnd/src/app/tests/single-choice-question/single-choice-question.component.html index 5e14c93..d0f930f 100644 --- a/FrontEnd/src/app/tests/single-choice-question/single-choice-question.component.html +++ b/FrontEnd/src/app/tests/single-choice-question/single-choice-question.component.html @@ -17,6 +17,11 @@
+ +
+

Wpisz możliwe odpowiedzi i zaznacz prawidłową:

diff --git a/FrontEnd/src/app/tests/single-choice-question/single-choice-question.component.ts b/FrontEnd/src/app/tests/single-choice-question/single-choice-question.component.ts index 40e3e70..ea133d4 100644 --- a/FrontEnd/src/app/tests/single-choice-question/single-choice-question.component.ts +++ b/FrontEnd/src/app/tests/single-choice-question/single-choice-question.component.ts @@ -12,6 +12,7 @@ export class SingleChoiceQuestionComponent implements OnInit { @Input() edit: Boolean; isChecked: Boolean = false; + help: Boolean = false; answers: Array = []; answersCorrect: Array = []; newAttribute: any = { @@ -45,6 +46,7 @@ export class SingleChoiceQuestionComponent implements OnInit { }); } this.points = this.content['content']['points']; + this.help = this.content['content']['help']; } else { this.content = {}; this.content['content'] = { @@ -53,7 +55,8 @@ export class SingleChoiceQuestionComponent implements OnInit { question: '', answers: [], points: 1, - time: 0 + time: 0, + help: this.help }; this.content['edit'] = false; } @@ -110,6 +113,10 @@ export class SingleChoiceQuestionComponent implements OnInit { } } + changeHelp(): void { + this.help = !this.help; + } + addTable(): void { if ((this.question === undefined) || (this.question.trim().length === 0)) { this.snackBar.open('Pytanie nie może być puste!', null, @@ -161,6 +168,7 @@ export class SingleChoiceQuestionComponent implements OnInit { this.content['content']['answers'] = this.answers; this.content['content']['points'] = this.points; this.content['content']['time'] = this.time; + this.content['content']['help'] = this.help; if (this.edit) { this.editing.emit(this.content); } else { @@ -189,6 +197,7 @@ export class SingleChoiceQuestionComponent implements OnInit { this.isChecked = false; this.question = ''; this.time = 0; + this.help = false; this.answers = []; this.answersCorrect = []; this.newAttribute = {}; diff --git a/FrontEnd/src/app/tests/test-details/question-view/single-choice/single-choice.component.css b/FrontEnd/src/app/tests/test-details/question-view/single-choice/single-choice.component.css index 78f0cb7..e464736 100644 --- a/FrontEnd/src/app/tests/test-details/question-view/single-choice/single-choice.component.css +++ b/FrontEnd/src/app/tests/test-details/question-view/single-choice/single-choice.component.css @@ -6,6 +6,12 @@ } +.fifty +{ + margin-right: auto; + margin-left: auto; + margin-bottom: 20px; +} .radio-answer { diff --git a/FrontEnd/src/app/tests/test-details/question-view/single-choice/single-choice.component.html b/FrontEnd/src/app/tests/test-details/question-view/single-choice/single-choice.component.html index 4fce135..14c8696 100644 --- a/FrontEnd/src/app/tests/test-details/question-view/single-choice/single-choice.component.html +++ b/FrontEnd/src/app/tests/test-details/question-view/single-choice/single-choice.component.html @@ -1,7 +1,8 @@
Pytanie za {{question.points}}pkt.
Czas: {{ timeLeft }} sek. Czas: bez limitu -
{{question.question}}
+
+
{{question.question}}
diff --git a/FrontEnd/src/app/tests/test-maker/test-maker.component.ts b/FrontEnd/src/app/tests/test-maker/test-maker.component.ts index fa0e510..fe64b9e 100644 --- a/FrontEnd/src/app/tests/test-maker/test-maker.component.ts +++ b/FrontEnd/src/app/tests/test-maker/test-maker.component.ts @@ -162,7 +162,8 @@ export class TestMakerComponent implements OnInit { time: this.test[i]['content']['time'], answers: this.test[i]['content']['answers'], points: this.test[i]['content']['points'], - id: this.test[i]['content']['id'] + id: this.test[i]['content']['id'], + help: this.test[i]['content']['help'] }); } toSend['body'] = body; diff --git a/FrontEnd/src/assets/50-50.png b/FrontEnd/src/assets/50-50.png new file mode 100644 index 0000000..3001bf2 Binary files /dev/null and b/FrontEnd/src/assets/50-50.png differ