Skip to content

Commit 074cd67

Browse files
committed
[add] Add batch mark leave function
1 parent 4722c84 commit 074cd67

File tree

3 files changed

+70
-1
lines changed

3 files changed

+70
-1
lines changed

templates/meetings_detail.html

+23-1
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ <h4>Participants</h4>
5151
<div class="row mb-3">
5252
{{if and .IsAdmin (not .MeetingFinished)}}
5353
<div class="btn-bar ml-3">
54-
<button class="btn btn-sm btn-outline-info">Mark leave</button>
54+
<button class="btn btn-sm btn-outline-info" id="markLeaveBtn">Mark leave</button>
5555
</div>
5656
{{end}}
5757
</div>
@@ -192,6 +192,28 @@ <h5 class="modal-title">Participant Detail</h5>
192192
});
193193
}
194194
});
195+
196+
$("#markLeaveBtn").on('click', function () {
197+
let checked = [];
198+
$("input[name='participant[]']").each(function () {
199+
if ($(this).prop("checked")) {
200+
checked.push($(this).val());
201+
}
202+
});
203+
204+
let req = new XMLHttpRequest();
205+
req.open("POST", "/meeting/participant/leave/batch/{{.Meeting.MeetId}}");
206+
req.setRequestHeader("Content-Type", "application/json");
207+
req.send(JSON.stringify(checked));
208+
209+
req.onload = function () {
210+
if(req.status === 204){
211+
window.location.reload();
212+
} else {
213+
console.log(req.response);
214+
}
215+
}
216+
});
195217
</script>
196218
{{end}}
197219

web/meetings.go

+46
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package web
22

33
import (
44
"encoding/base64"
5+
"encoding/json"
56
"errors"
67
"fmt"
78
"github.com/Team6083/OverHours/models"
@@ -350,6 +351,51 @@ func (web *Web) MeetingParticipantLeaveGET(w http.ResponseWriter, r *http.Reques
350351
http.Redirect(w, r, fmt.Sprintf("/meeting/detail/%s", meetId), http.StatusSeeOther)
351352
}
352353

354+
func (web *Web) MeetingParticipantLeaveBatchPOST(w http.ResponseWriter, r *http.Request) {
355+
sessionUser := r.Context().Value("user").(*models.User)
356+
357+
if !sessionUser.CheckPermissionLevel(models.PermissionAdmin) {
358+
web.handle403(w, r)
359+
return
360+
}
361+
362+
decoder := json.NewDecoder(r.Body)
363+
var data []string
364+
err := decoder.Decode(&data)
365+
if err != nil {
366+
handleWebErr(w, err)
367+
return
368+
}
369+
370+
vars := mux.Vars(r)
371+
meetId := vars["meetId"]
372+
373+
meeting, err := web.database.GetMeetingByMeetId(meetId)
374+
if err != nil {
375+
handleWebErr(w, err)
376+
return
377+
}
378+
379+
participants := meeting.Participants
380+
381+
for _, v := range data {
382+
if _, ok := participants[v]; ok {
383+
participant := participants[v]
384+
participant.Leave = true
385+
participants[v] = participant
386+
}
387+
}
388+
389+
meeting.Participants = participants
390+
_, err = web.database.SaveMeeting(meeting)
391+
if err != nil {
392+
handleWebErr(w, err)
393+
return
394+
}
395+
396+
w.WriteHeader(http.StatusNoContent)
397+
}
398+
353399
func (web *Web) MeetingParticipantDeleteLogGET(w http.ResponseWriter, r *http.Request) {
354400
sessionUser := r.Context().Value("user").(*models.User)
355401

web/routes.go

+1
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ func (web *Web) GetPageInfos() []PageInfo {
2222
pages = append(pages, PageInfo{"/meeting/checkin/{meetId}", web.MeetingCheckinGET, "GET", PageLogin, true})
2323
pages = append(pages, PageInfo{"/meeting/checkin/{meetId}/{userId}", web.MeetingCheckinGET, "GET", PageLogin, true})
2424
pages = append(pages, PageInfo{"/meeting/participant/leave/{meetId}/{userId}", web.MeetingParticipantLeaveGET, "GET", PageLogin, true})
25+
pages = append(pages, PageInfo{"/meeting/participant/leave/batch/{meetId}", web.MeetingParticipantLeaveBatchPOST, "POST", PageLeader, true})
2526
pages = append(pages, PageInfo{"/meeting/participant/deleteLog/{meetId}/{userId}", web.MeetingParticipantDeleteLogGET, "GET", PageLogin, true})
2627
pages = append(pages, PageInfo{"/meeting/participant/delete/{meetId}/{userId}", web.MeetingParticipantDeleteGET, "GET", PageLogin, true})
2728
pages = append(pages, PageInfo{"/meeting/form", web.MeetingFormGET, "GET", PageLeader, true})

0 commit comments

Comments
 (0)