commit
						2c8850b669
					
				@ -657,6 +657,7 @@
 | 
			
		||||
  "addon.mod_forum.posttoforum": "forum",
 | 
			
		||||
  "addon.mod_forum.posttomygroups": "forum",
 | 
			
		||||
  "addon.mod_forum.privatereply": "forum",
 | 
			
		||||
  "addon.mod_forum.qandanotify": "forum",
 | 
			
		||||
  "addon.mod_forum.re": "forum",
 | 
			
		||||
  "addon.mod_forum.refreshposts": "local_moodlemobileapp",
 | 
			
		||||
  "addon.mod_forum.removefromfavourites": "forum",
 | 
			
		||||
 | 
			
		||||
@ -127,6 +127,11 @@
 | 
			
		||||
                <ion-label>{{ 'addon.mod_assign.'+summary.warnofungroupedusers | translate }}</ion-label>
 | 
			
		||||
            </ion-item>
 | 
			
		||||
        </ion-card>
 | 
			
		||||
 | 
			
		||||
        <div collapsible-footer *ngIf="!showLoading" slot="fixed">
 | 
			
		||||
            <core-course-module-navigation [courseId]="courseId" [currentModuleId]="module.id">
 | 
			
		||||
            </core-course-module-navigation>
 | 
			
		||||
        </div>
 | 
			
		||||
    </ng-container>
 | 
			
		||||
 | 
			
		||||
    <!-- If it's a student, display his submission. -->
 | 
			
		||||
 | 
			
		||||
@ -31,12 +31,20 @@
 | 
			
		||||
            </ion-item>
 | 
			
		||||
        </ion-card>
 | 
			
		||||
 | 
			
		||||
        <!-- Q&A message. -->
 | 
			
		||||
        <ion-card class="core-info-card" *ngIf="showQAMessage">
 | 
			
		||||
            <ion-item>
 | 
			
		||||
                <ion-icon name="fas-info-circle" slot="start" aria-hidden="true"></ion-icon>
 | 
			
		||||
                <ion-label>{{ 'addon.mod_forum.qandanotify' | translate }}</ion-label>
 | 
			
		||||
            </ion-item>
 | 
			
		||||
        </ion-card>
 | 
			
		||||
 | 
			
		||||
        <ng-container *ngIf="forum">
 | 
			
		||||
            <core-empty-box *ngIf="!discussions || discussions.empty" icon="far-comments"
 | 
			
		||||
            <core-empty-box *ngIf="!discussions || !discussions.hasDiscussions" icon="far-comments"
 | 
			
		||||
                [message]="'addon.mod_forum.forumnodiscussionsyet' | translate">
 | 
			
		||||
            </core-empty-box>
 | 
			
		||||
 | 
			
		||||
            <div *ngIf="discussions && !discussions.empty && sortingAvailable && selectedSortOrder" class="ion-text-wrap">
 | 
			
		||||
            <div *ngIf="discussions?.hasDiscussions && sortingAvailable && selectedSortOrder" class="ion-text-wrap">
 | 
			
		||||
                <core-combobox [modalOptions]="sortOrderSelectorModalOptions" listboxId="addon-mod-forum-sort-selector"
 | 
			
		||||
                    [label]="('core.sort' | translate)" (onChange)="setSortOrder($event)" [selection]="selectedSortOrder.label | translate"
 | 
			
		||||
                    interface="modal">
 | 
			
		||||
 | 
			
		||||
@ -85,6 +85,7 @@ export class AddonModForumIndexComponent extends CoreCourseModuleMainActivityCom
 | 
			
		||||
    sortOrders: AddonModForumSortOrder[] = [];
 | 
			
		||||
    canPin = false;
 | 
			
		||||
    hasOfflineRatings = false;
 | 
			
		||||
    showQAMessage = false;
 | 
			
		||||
    sortOrderSelectorModalOptions: ModalOptions = {
 | 
			
		||||
        component: AddonModForumSortOrderSelectorComponent,
 | 
			
		||||
    };
 | 
			
		||||
@ -345,8 +346,9 @@ export class AddonModForumIndexComponent extends CoreCourseModuleMainActivityCom
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        const forum = this.forum;
 | 
			
		||||
        const showDueDateMessage = !CoreSites.getCurrentSite()?.isVersionGreaterEqualThan('3.11');
 | 
			
		||||
        this.description = forum.intro || this.description;
 | 
			
		||||
        this.availabilityMessage = AddonModForumHelper.getAvailabilityMessage(forum);
 | 
			
		||||
        this.availabilityMessage = AddonModForumHelper.getAvailabilityMessage(forum, showDueDateMessage);
 | 
			
		||||
        this.descriptionNote = Translate.instant('addon.mod_forum.numdiscussions', {
 | 
			
		||||
            numdiscussions: forum.numdiscussions,
 | 
			
		||||
        });
 | 
			
		||||
@ -403,6 +405,7 @@ export class AddonModForumIndexComponent extends CoreCourseModuleMainActivityCom
 | 
			
		||||
                    const cutoffDateReached = AddonModForumHelper.isCutoffDateReached(forum)
 | 
			
		||||
                                    && !accessInfo.cancanoverridecutoff;
 | 
			
		||||
                    this.canAddDiscussion = !!forum.cancreatediscussions && !cutoffDateReached;
 | 
			
		||||
                    this.showQAMessage = forum.type === 'qanda' && !accessInfo.canviewqandawithoutposting;
 | 
			
		||||
 | 
			
		||||
                    return;
 | 
			
		||||
                }),
 | 
			
		||||
@ -702,4 +705,16 @@ class AddonModForumDiscussionsManager extends CoreListItemsManager<AddonModForum
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Check whether there is any discussion in the items.
 | 
			
		||||
     *
 | 
			
		||||
     * @return Whether there is a discussion.
 | 
			
		||||
     */
 | 
			
		||||
    get hasDiscussions(): boolean {
 | 
			
		||||
        const source = this.getSource();
 | 
			
		||||
        const items = source.getItems();
 | 
			
		||||
 | 
			
		||||
        return items !== null && items.some(item => !source.isNewDiscussionForm(item));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -49,6 +49,7 @@
 | 
			
		||||
    "posttoforum": "Post to forum",
 | 
			
		||||
    "posttomygroups": "Post a copy to all groups",
 | 
			
		||||
    "privatereply": "Reply privately",
 | 
			
		||||
    "qandanotify": "This is a question and answer forum. In order to see other responses to these questions, you must first post your answer",
 | 
			
		||||
    "re": "Re:",
 | 
			
		||||
    "refreshposts": "Refresh posts",
 | 
			
		||||
    "removefromfavourites": "Unstar this discussion",
 | 
			
		||||
 | 
			
		||||
@ -84,6 +84,14 @@
 | 
			
		||||
            </ion-item>
 | 
			
		||||
        </ion-card>
 | 
			
		||||
 | 
			
		||||
        <!-- Q&A message. -->
 | 
			
		||||
        <ion-card class="core-info-card" *ngIf="showQAMessage">
 | 
			
		||||
            <ion-item>
 | 
			
		||||
                <ion-icon name="fas-info-circle" slot="start" aria-hidden="true"></ion-icon>
 | 
			
		||||
                <ion-label>{{ 'addon.mod_forum.qandanotify' | translate }}</ion-label>
 | 
			
		||||
            </ion-item>
 | 
			
		||||
        </ion-card>
 | 
			
		||||
 | 
			
		||||
        <div *ngIf="startingPost" class="ion-margin-bottom">
 | 
			
		||||
            <addon-mod-forum-post [post]="startingPost" [discussion]="discussion" [courseId]="courseId" [highlight]="true"
 | 
			
		||||
                [discussionId]="discussionId" [component]="component" [componentId]="cmId" [formData]="formData"
 | 
			
		||||
 | 
			
		||||
@ -105,6 +105,7 @@ export class AddonModForumDiscussionPage implements OnInit, AfterViewInit, OnDes
 | 
			
		||||
    cmId?: number;
 | 
			
		||||
    canPin = false;
 | 
			
		||||
    availabilityMessage: string | null = null;
 | 
			
		||||
    showQAMessage = false;
 | 
			
		||||
    leavingPage = false;
 | 
			
		||||
 | 
			
		||||
    protected forumId?: number;
 | 
			
		||||
@ -493,6 +494,11 @@ export class AddonModForumDiscussionPage implements OnInit, AfterViewInit, OnDes
 | 
			
		||||
                                });
 | 
			
		||||
                            }
 | 
			
		||||
 | 
			
		||||
                            // Show Q&A message if user hasn't posted.
 | 
			
		||||
                            const currentUserId = CoreSites.getCurrentSiteUserId();
 | 
			
		||||
                            this.showQAMessage = forum.type === 'qanda' && !accessInfo.canviewqandawithoutposting &&
 | 
			
		||||
                                !posts.some(post => post.author.id === currentUserId);
 | 
			
		||||
 | 
			
		||||
                            return;
 | 
			
		||||
                        }),
 | 
			
		||||
                );
 | 
			
		||||
 | 
			
		||||
@ -278,24 +278,27 @@ export class AddonModForumHelperProvider {
 | 
			
		||||
     * Returns the availability message of the given forum.
 | 
			
		||||
     *
 | 
			
		||||
     * @param forum Forum instance.
 | 
			
		||||
     * @param getDueDateMessage Whether to get due date message. If false, only cutoff date message will be returned.
 | 
			
		||||
     * @return Message or null if the forum has no cut-off or due date.
 | 
			
		||||
     */
 | 
			
		||||
    getAvailabilityMessage(forum: AddonModForumData): string | null {
 | 
			
		||||
    getAvailabilityMessage(forum: AddonModForumData, getDueDateMessage = true): string | null {
 | 
			
		||||
        if (this.isCutoffDateReached(forum)) {
 | 
			
		||||
            return Translate.instant('addon.mod_forum.cutoffdatereached');
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (getDueDateMessage) {
 | 
			
		||||
            if (this.isDueDateReached(forum)) {
 | 
			
		||||
                const dueDate = CoreTimeUtils.userDate(forum.duedate * 1000);
 | 
			
		||||
 | 
			
		||||
                return Translate.instant('addon.mod_forum.thisforumisdue', { $a: dueDate });
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
        if ((forum.duedate ?? 0) > 0) {
 | 
			
		||||
            const dueDate = CoreTimeUtils.userDate(forum.duedate! * 1000);
 | 
			
		||||
            if (forum.duedate && forum.duedate > 0) {
 | 
			
		||||
                const dueDate = CoreTimeUtils.userDate(forum.duedate * 1000);
 | 
			
		||||
 | 
			
		||||
                return Translate.instant('addon.mod_forum.thisforumhasduedate', { $a: dueDate });
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return null;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -65,7 +65,7 @@
 | 
			
		||||
            </ng-container>
 | 
			
		||||
        </ion-list>
 | 
			
		||||
 | 
			
		||||
        <core-empty-box *ngIf="(!entries || entries.empty) && (!isSearch || hasSearched)" icon="fas-list"
 | 
			
		||||
        <core-empty-box *ngIf="(!entries || !entries.hasEntries) && (!isSearch || hasSearched)" icon="fas-list"
 | 
			
		||||
            [message]="'addon.mod_glossary.noentriesfound' | translate">
 | 
			
		||||
        </core-empty-box>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -472,4 +472,13 @@ class AddonModGlossaryEntriesManager extends CoreListItemsManager<AddonModGlossa
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Check whether there is any entry in the items.
 | 
			
		||||
     *
 | 
			
		||||
     * @return Whether there is an entry.
 | 
			
		||||
     */
 | 
			
		||||
    get hasEntries(): boolean {
 | 
			
		||||
        return this.getSource().onlineEntries.length > 0 || this.getSource().offlineEntries.length > 0;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -34,7 +34,7 @@
 | 
			
		||||
    </div>
 | 
			
		||||
 | 
			
		||||
    <!-- Availability info space. -->
 | 
			
		||||
    <div class="core-module-availabilityinfo core-module-info-box-section" *ngIf="showAvailabilityInfo">
 | 
			
		||||
    <div class="core-module-availabilityinfo core-module-info-box-section" *ngIf="showAvailabilityInfo && module.availabilityinfo">
 | 
			
		||||
        <ion-icon name="fas-lock" [attr.aria-label]="'core.restricted' | translate"></ion-icon>
 | 
			
		||||
        <core-format-text [text]="module.availabilityinfo" contextLevel="module" [contextInstanceId]="module.id" [courseId]="module.course">
 | 
			
		||||
        </core-format-text>
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user