Skip to content

Commit

Permalink
SAK-49659 grader. Fix document preview links after bundling change. (s…
Browse files Browse the repository at this point in the history
  • Loading branch information
adrianfish committed Jan 23, 2024
1 parent d4d8e0a commit 71246a7
Show file tree
Hide file tree
Showing 6 changed files with 47 additions and 30 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
import org.sakaiproject.user.api.UserNotDefinedException;
import org.sakaiproject.webapi.beans.ProfileRestBean;

import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.RandomStringUtils;

import org.springframework.http.MediaType;
Expand Down Expand Up @@ -53,6 +54,10 @@ public ResponseEntity<ProfileRestBean> getUserProfile(@PathVariable String userI

checkSakaiSession();

if (StringUtils.equals(userId, "blank")) {
return ResponseEntity.noContent().build();
}

UserProfile userProfile = (UserProfile) profileLogic.getUserProfile(userId);

if (userProfile == null) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ import { GRADE_CHECKED, LETTER_GRADE_TYPE, SCORE_GRADE_TYPE, PASS_FAIL_GRADE_TYP

export class SakaiGrader extends graderRenderingMixin(gradableDataMixin(SakaiElement)) {


static properties = {

gradableId: { attribute: "gradable-id", type: String },
Expand All @@ -25,6 +24,7 @@ export class SakaiGrader extends graderRenderingMixin(gradableDataMixin(SakaiEle
_submission: { state: true },
_nonEditedSubmission: { state: true },
_selectedAttachment: { state: true },
_selectedPreview: { state: true },
_saveSucceeded: { state: true },
_saveFailed: { state: true },
_submissions: { state: true },
Expand Down Expand Up @@ -66,7 +66,6 @@ export class SakaiGrader extends graderRenderingMixin(gradableDataMixin(SakaiEle
}
}


set gradableId(value) {

const oldValue = this._gradableId;
Expand Down Expand Up @@ -117,14 +116,14 @@ export class SakaiGrader extends graderRenderingMixin(gradableDataMixin(SakaiEle
if (!this._submittedTextMode && this.__submission.submittedAttachments && this.__submission.submittedAttachments.length > 0) {
this._selectedAttachment = this.__submission.submittedAttachments[0];
const preview = this.__submission.previewableAttachments[this._selectedAttachment.ref];
this.selectedPreview = preview || this._selectedAttachment;
this._selectedPreview = preview || this._selectedAttachment;
}

if (this.feedbackCommentEditor) {
if (this.feedbackCommentEditor && this.__submission.feedbackComment) {
this.feedbackCommentEditor.setData(this.__submission.feedbackComment, () => this.modified = false);
}

if (this.privateNotesEditor) {
if (this.privateNotesEditor && this.__submission.privateNotes) {
this.privateNotesEditor.setData(this.__submission.privateNotes, () => this.modified = false);
}

Expand Down Expand Up @@ -330,6 +329,7 @@ export class SakaiGrader extends graderRenderingMixin(gradableDataMixin(SakaiEle
_previewAttachment(e) {

e.preventDefault();

this._selectedAttachment = this._submission.submittedAttachments.find(sa => sa.ref === e.target.dataset.ref);
const type = this._selectedAttachment.type;

Expand All @@ -342,11 +342,11 @@ export class SakaiGrader extends graderRenderingMixin(gradableDataMixin(SakaiEle
preview = !preview && (type.startsWith("image/") || type.startsWith("video/") || this.previewMimetypes.includes(type)) ? this._selectedAttachment : preview;

if (preview) {
this.selectedPreview = preview;
this._selectedPreview = preview;
} else {
this.selectedPreview = this._selectedAttachment; // If there's no preview, open in a new tab or download the attachment.
this._selectedPreview = this._selectedAttachment; // If there's no preview, open in a new tab or download the attachment.

window.open(this.selectedPreview.url, "_blank");
window.open(this._selectedPreview.url, "_blank");
}
}
}
Expand Down Expand Up @@ -645,7 +645,7 @@ export class SakaiGrader extends graderRenderingMixin(gradableDataMixin(SakaiEle

let filtered = [ ...this.originalSubmissions ];

if (this.submittedOnly) {
if (this._submittedOnly) {
if (this._ungradedOnly) {
filtered = filtered.filter(s => s.submitted && !s.graded);
} else if (this._gradedOnly) {
Expand All @@ -659,8 +659,8 @@ export class SakaiGrader extends graderRenderingMixin(gradableDataMixin(SakaiEle
filtered = filtered.filter(s => s.graded);
}

if (this.currentGroup && this.currentGroup !== `/site/${portal.siteId}`) {
const group = this.groups.find(g => g.reference === this.currentGroup);
if (this.currentGroups && this.currentGroups.length === 1 && this.currentGroups[0].includes("/group")) {
const group = this.groups.find(g => g.reference === this.currentGroups[0]);
filtered = filtered.filter(s => group.users.includes(s.firstSubmitterId));
}

Expand All @@ -685,19 +685,18 @@ export class SakaiGrader extends graderRenderingMixin(gradableDataMixin(SakaiEle

_submittedOnlyChanged(e) {

this.submittedOnly = e.target.checked;
this._applyFilters(e);
this._submittedOnly = e.target.checked;
this._applyFilters();
}

_areSettingsInAction() {
return (this.currentGroup && this.currentGroup !== `/site/${portal.siteId}`) || this.submittedOnly || this._ungradedOnly || this._gradedOnly;
return (this.currentGroups && this.currentGroups.length > 0 && this.currentGroups[0] !== `/site/${portal.siteId}`) || this._submittedOnly || this._ungradedOnly || this._gradedOnly;
}

_getSubmitter(submission) {
return submission.groupId ? submission.groupTitle : submission.firstSubmitterName;
}


_removeAttachment(e) {

e.stopPropagation();
Expand All @@ -717,10 +716,13 @@ export class SakaiGrader extends graderRenderingMixin(gradableDataMixin(SakaiEle
}
}

_groupSelected(e) {
_groupsSelected(e) {

this.currentGroup = e.detail.value;
this._applyFilters(e);
this.currentGroups = e.detail.value;
if (this.currentGroups.length === 1 && !this.currentGroups[0].includes("/group")) {
this.currentGroups = [];
}
this._applyFilters();
}

_gradedStatusSelected(e) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -160,7 +160,7 @@ export const gradableDataMixin = Base => class extends Base {
!leftSubmission.hydrated && submissionIds.push(leftSubmission.id);
}

!this._submissions[i].hydrated && submissionIds.push(submissionId);
!this._submissions[i]?.hydrated && submissionIds.push(submissionId);

if ((i + 1) < (this._submissions.length - 1)) {
const rightSubmission = this._submissions[i + 1];
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import "../sakai-grader-file-picker.js";
import { Submission } from "./submission.js";
import "@sakai-ui/sakai-date-picker";
import "@sakai-ui/sakai-group-picker";
import "@sakai-ui/sakai-document-viewer";
import "@sakai-ui/sakai-document-viewer/sakai-document-viewer.js";
import "@sakai-ui/sakai-lti-iframe";
import "@sakai-ui/sakai-user-photo";
import "@sakai-ui/sakai-icon";
Expand All @@ -31,7 +31,7 @@ export const graderRenderingMixin = Base => class extends Base {
<div class="modal-body">
<div>
<label>
<input type="checkbox" ?disabled=${!this.hasSubmitted} @change=${this._submittedOnlyChanged} .checked=${this.submittedOnly} />
<input type="checkbox" ?disabled=${!this.hasSubmitted} @change=${this._submittedOnlyChanged} .checked=${this._submittedOnly} />
${this.i18n["nav.view.subsOnly"]}
</label>
</div>
Expand All @@ -53,7 +53,7 @@ export const graderRenderingMixin = Base => class extends Base {
${this.groups ? html`
<div class="grader-groups">
<div>${this.i18n.group_label}</div>
<sakai-group-picker .groups="${this.groups}" @group-selected=${this._groupSelected}></sakai-group-picker>
<sakai-group-picker .groups=${this.groups} @groups-selected=${this._groupsSelected}></sakai-group-picker>
</div>
` : nothing }
`}
Expand Down Expand Up @@ -116,6 +116,10 @@ export const graderRenderingMixin = Base => class extends Base {

_renderGradable() {

if (this._submissions.length === 0) {
return html`<h2>No submitters</h2>`;
}

if (!this._submission.hydrated) {
return html`<div class="sak-banner-info">${this.i18n.loading_submission}</div>`;
}
Expand Down Expand Up @@ -154,7 +158,7 @@ export const graderRenderingMixin = Base => class extends Base {
</div>
`}
${this._submission.submittedTime || (this._submission.draft && this._submission.visible) ? html`
${this.submittedTextMode ? html`
${this._submittedTextMode ? html`
<div id="grader-submitted-text-block">
<div class="sak-banner-info">${unsafeHTML(this.i18n.inline_feedback_instruction)}</div>
<textarea id="grader-feedback-text-editor" class="d-none">${this._submission.feedbackText}</textarea>
Expand All @@ -174,11 +178,11 @@ export const graderRenderingMixin = Base => class extends Base {
</button>
</div>
` : html`
${this._selectedAttachment || this.selectedPreview ? html`
${this._selectedAttachment || this._selectedPreview ? html`
<div class="preview">
<sakai-document-viewer
preview="${ifDefined(this.selectedPreview ? JSON.stringify(this.selectedPreview) : undefined)}"
content="${ifDefined(this._selectedAttachment ? JSON.stringify(this._selectedAttachment) : undefined)}">
.preview=${this._selectedPreview}
.content=${this._selectedAttachment}>
</sakai-document-viewer>
</div>
` : nothing }
Expand Down Expand Up @@ -762,7 +766,7 @@ export const graderRenderingMixin = Base => class extends Base {
<div>
<button type="button"
class="btn btn-transparent text-decoration-underline"
@click=${() => this.submittedTextMode = true}>
@click=${() => this._submittedTextMode = true}>
${this.i18n.submission_inline}
</button>
</div>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,7 @@ class Submission {
this.hasNonInlineAttachments = this.submittedAttachments.filter(r => r.type !== "text/html").length > 0;
} else {
this.id = "dummy";
this.submittedAttachments = [];
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,11 +35,16 @@ export class SakaiProfile extends LitElement {
fetch(url, { credentials: "include" })
.then(r => {

if (r.ok) {
return r.json();
if (r.ok && r.status !== 204) { return r.json(); }

if (r.status === 204) {
this._profile = {};
return;
}

throw new Error(`Network error while getting user profile from ${url}`);
if (r.status !== 204) {
throw new Error(`Network error while getting user profile from ${url}`);
}
})
.then(profile => this._profile = profile)
.catch(error => console.error(error));
Expand Down

0 comments on commit 71246a7

Please sign in to comment.