MOBILE-2975 comments: Allow disable comments
parent
8723e5b684
commit
65c202c998
|
@ -29,7 +29,7 @@
|
||||||
</ion-item>
|
</ion-item>
|
||||||
<ion-card-content>
|
<ion-card-content>
|
||||||
<core-format-text [text]="entry.summary" [component]="this.component" [componentId]="entry.id"></core-format-text>
|
<core-format-text [text]="entry.summary" [component]="this.component" [componentId]="entry.id"></core-format-text>
|
||||||
<ion-item>
|
<ion-item *ngIf="commentsEnabled">
|
||||||
<core-comments [component]="this.component" [itemId]="entry.id" area="format_blog" [instanceId]="entry.userid" contextLevel="user"></core-comments>
|
<core-comments [component]="this.component" [itemId]="entry.id" area="format_blog" [instanceId]="entry.userid" contextLevel="user"></core-comments>
|
||||||
</ion-item>
|
</ion-item>
|
||||||
<core-file *ngFor="let file of entry.attachmentfiles" [file]="file" [component]="this.component" [componentId]="entry.id"></core-file>
|
<core-file *ngFor="let file of entry.attachmentfiles" [file]="file" [component]="this.component" [componentId]="entry.id"></core-file>
|
||||||
|
|
|
@ -18,6 +18,7 @@ import { CoreDomUtilsProvider } from '@providers/utils/dom';
|
||||||
import { CoreSitesProvider } from '@providers/sites';
|
import { CoreSitesProvider } from '@providers/sites';
|
||||||
import { CoreUserProvider } from '@core/user/providers/user';
|
import { CoreUserProvider } from '@core/user/providers/user';
|
||||||
import { AddonBlogProvider } from '../../providers/blog';
|
import { AddonBlogProvider } from '../../providers/blog';
|
||||||
|
import { CoreCommentsProvider } from '@core/comments/providers/comments';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Component that displays the blog entries.
|
* Component that displays the blog entries.
|
||||||
|
@ -47,9 +48,11 @@ export class AddonBlogEntriesComponent implements OnInit {
|
||||||
showMyIssuesToggle = false;
|
showMyIssuesToggle = false;
|
||||||
onlyMyEntries = false;
|
onlyMyEntries = false;
|
||||||
component = AddonBlogProvider.COMPONENT;
|
component = AddonBlogProvider.COMPONENT;
|
||||||
|
commentsEnabled: boolean;
|
||||||
|
|
||||||
constructor(protected blogProvider: AddonBlogProvider, protected domUtils: CoreDomUtilsProvider,
|
constructor(protected blogProvider: AddonBlogProvider, protected domUtils: CoreDomUtilsProvider,
|
||||||
protected userProvider: CoreUserProvider, sitesProvider: CoreSitesProvider) {
|
protected userProvider: CoreUserProvider, sitesProvider: CoreSitesProvider,
|
||||||
|
protected commentsProvider: CoreCommentsProvider) {
|
||||||
this.currentUserId = sitesProvider.getCurrentSiteUserId();
|
this.currentUserId = sitesProvider.getCurrentSiteUserId();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -81,6 +84,8 @@ export class AddonBlogEntriesComponent implements OnInit {
|
||||||
this.filter['tagid'] = this.tagId;
|
this.filter['tagid'] = this.tagId;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this.commentsEnabled = !this.commentsProvider.areCommentsDisabledInSite();
|
||||||
|
|
||||||
this.fetchEntries().then(() => {
|
this.fetchEntries().then(() => {
|
||||||
this.blogProvider.logView(this.filter).catch(() => {
|
this.blogProvider.logView(this.filter).catch(() => {
|
||||||
// Ignore errors.
|
// Ignore errors.
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<a ion-item text-wrap (click)="showComments()" detail-none>
|
<a *ngIf="commentsEnabled" ion-item text-wrap (click)="showComments()" detail-none>
|
||||||
<h2>{{plugin.name}}</h2>
|
<h2>{{plugin.name}}</h2>
|
||||||
<core-comments contextLevel="module" [instanceId]="assign.cmid" component="assignsubmission_comments" [itemId]="submission.id" area="submission_comments" [title]="plugin.name"></core-comments>
|
<core-comments contextLevel="module" [instanceId]="assign.cmid" component="assignsubmission_comments" [itemId]="submission.id" area="submission_comments" [title]="plugin.name"></core-comments>
|
||||||
</a>
|
</a>
|
||||||
|
|
|
@ -27,8 +27,12 @@ import { AddonModAssignSubmissionPluginComponent } from '../../../classes/submis
|
||||||
export class AddonModAssignSubmissionCommentsComponent extends AddonModAssignSubmissionPluginComponent {
|
export class AddonModAssignSubmissionCommentsComponent extends AddonModAssignSubmissionPluginComponent {
|
||||||
@ViewChild(CoreCommentsCommentsComponent) commentsComponent: CoreCommentsCommentsComponent;
|
@ViewChild(CoreCommentsCommentsComponent) commentsComponent: CoreCommentsCommentsComponent;
|
||||||
|
|
||||||
|
commentsEnabled: boolean;
|
||||||
|
|
||||||
constructor(protected commentsProvider: CoreCommentsProvider) {
|
constructor(protected commentsProvider: CoreCommentsProvider) {
|
||||||
super();
|
super();
|
||||||
|
|
||||||
|
this.commentsEnabled = !commentsProvider.areCommentsDisabledInSite();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -31,7 +31,7 @@
|
||||||
<core-rating-rate *ngIf="data && entry && ratingInfo && (!data.approval || entry.approved)" [ratingInfo]="ratingInfo" contextLevel="module" [instanceId]="data.coursemodule" [itemId]="entry.id" [itemSetId]="0" [courseId]="courseId" [aggregateMethod]="data.assessed" [scaleId]="data.scale" [userId]="entry.userid" (onLoading)="setLoadingRating($event)" (onUpdate)="ratingUpdated()"></core-rating-rate>
|
<core-rating-rate *ngIf="data && entry && ratingInfo && (!data.approval || entry.approved)" [ratingInfo]="ratingInfo" contextLevel="module" [instanceId]="data.coursemodule" [itemId]="entry.id" [itemSetId]="0" [courseId]="courseId" [aggregateMethod]="data.assessed" [scaleId]="data.scale" [userId]="entry.userid" (onLoading)="setLoadingRating($event)" (onUpdate)="ratingUpdated()"></core-rating-rate>
|
||||||
<core-rating-aggregate *ngIf="data && entry && ratingInfo" [ratingInfo]="ratingInfo" contextLevel="module" [instanceId]="data.coursemodule" [itemId]="entry.id" [courseId]="courseId" [aggregateMethod]="data.assessed" [scaleId]="data.scale"></core-rating-aggregate>
|
<core-rating-aggregate *ngIf="data && entry && ratingInfo" [ratingInfo]="ratingInfo" contextLevel="module" [instanceId]="data.coursemodule" [itemId]="entry.id" [courseId]="courseId" [aggregateMethod]="data.assessed" [scaleId]="data.scale"></core-rating-aggregate>
|
||||||
|
|
||||||
<ion-item *ngIf="data && entry && entry.id > 0">
|
<ion-item *ngIf="data && entry && entry.id > 0 && commentsEnabled">
|
||||||
<core-comments contextLevel="module" [instanceId]="data.coursemodule" component="mod_data" [itemId]="entry.id" area="database_entry" [displaySpinner]="false" (onLoading)="setLoadingComments($event)"></core-comments>
|
<core-comments contextLevel="module" [instanceId]="data.coursemodule" component="mod_data" [itemId]="entry.id" area="database_entry" [displaySpinner]="false" (onLoading)="setLoadingComments($event)"></core-comments>
|
||||||
</ion-item>
|
</ion-item>
|
||||||
|
|
||||||
|
|
|
@ -26,6 +26,7 @@ import { AddonModDataHelperProvider } from '../../providers/helper';
|
||||||
import { AddonModDataSyncProvider } from '../../providers/sync';
|
import { AddonModDataSyncProvider } from '../../providers/sync';
|
||||||
import { AddonModDataFieldsDelegate } from '../../providers/fields-delegate';
|
import { AddonModDataFieldsDelegate } from '../../providers/fields-delegate';
|
||||||
import { AddonModDataComponentsModule } from '../../components/components.module';
|
import { AddonModDataComponentsModule } from '../../components/components.module';
|
||||||
|
import { CoreCommentsProvider } from '@core/comments/providers/comments';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Page that displays the view entry page.
|
* Page that displays the view entry page.
|
||||||
|
@ -68,13 +69,14 @@ export class AddonModDataEntryPage implements OnDestroy {
|
||||||
jsData;
|
jsData;
|
||||||
ratingInfo: CoreRatingInfo;
|
ratingInfo: CoreRatingInfo;
|
||||||
isPullingToRefresh = false; // Whether the last fetching of data was started by a pull-to-refresh action
|
isPullingToRefresh = false; // Whether the last fetching of data was started by a pull-to-refresh action
|
||||||
|
commentsEnabled: boolean;
|
||||||
|
|
||||||
constructor(params: NavParams, protected utils: CoreUtilsProvider, protected groupsProvider: CoreGroupsProvider,
|
constructor(params: NavParams, protected utils: CoreUtilsProvider, protected groupsProvider: CoreGroupsProvider,
|
||||||
protected domUtils: CoreDomUtilsProvider, protected fieldsDelegate: AddonModDataFieldsDelegate,
|
protected domUtils: CoreDomUtilsProvider, protected fieldsDelegate: AddonModDataFieldsDelegate,
|
||||||
protected courseProvider: CoreCourseProvider, protected dataProvider: AddonModDataProvider,
|
protected courseProvider: CoreCourseProvider, protected dataProvider: AddonModDataProvider,
|
||||||
protected dataHelper: AddonModDataHelperProvider,
|
protected dataHelper: AddonModDataHelperProvider,
|
||||||
sitesProvider: CoreSitesProvider, protected navCtrl: NavController, protected eventsProvider: CoreEventsProvider,
|
sitesProvider: CoreSitesProvider, protected navCtrl: NavController, protected eventsProvider: CoreEventsProvider,
|
||||||
private cdr: ChangeDetectorRef) {
|
private cdr: ChangeDetectorRef, protected commentsProvider: CoreCommentsProvider) {
|
||||||
this.module = params.get('module') || {};
|
this.module = params.get('module') || {};
|
||||||
this.entryId = params.get('entryId') || null;
|
this.entryId = params.get('entryId') || null;
|
||||||
this.courseId = params.get('courseId');
|
this.courseId = params.get('courseId');
|
||||||
|
@ -91,6 +93,7 @@ export class AddonModDataEntryPage implements OnDestroy {
|
||||||
* View loaded.
|
* View loaded.
|
||||||
*/
|
*/
|
||||||
ionViewDidLoad(): void {
|
ionViewDidLoad(): void {
|
||||||
|
this.commentsEnabled = !this.commentsProvider.areCommentsDisabledInSite();
|
||||||
this.fetchEntryData();
|
this.fetchEntryData();
|
||||||
|
|
||||||
// Refresh data if this discussion is synchronized automatically.
|
// Refresh data if this discussion is synchronized automatically.
|
||||||
|
|
|
@ -12,9 +12,11 @@
|
||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
import { Component, EventEmitter, Input, OnChanges, Output, SimpleChange } from '@angular/core';
|
import { Component, EventEmitter, Input, OnChanges, OnDestroy, Output, SimpleChange } from '@angular/core';
|
||||||
import { NavController } from 'ionic-angular';
|
import { NavController } from 'ionic-angular';
|
||||||
import { CoreCommentsProvider } from '../../providers/comments';
|
import { CoreCommentsProvider } from '../../providers/comments';
|
||||||
|
import { CoreEventsProvider } from '@providers/events';
|
||||||
|
import { CoreSitesProvider } from '@providers/sites';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Component that displays the count of comments.
|
* Component that displays the count of comments.
|
||||||
|
@ -23,7 +25,7 @@ import { CoreCommentsProvider } from '../../providers/comments';
|
||||||
selector: 'core-comments',
|
selector: 'core-comments',
|
||||||
templateUrl: 'core-comments.html',
|
templateUrl: 'core-comments.html',
|
||||||
})
|
})
|
||||||
export class CoreCommentsCommentsComponent implements OnChanges {
|
export class CoreCommentsCommentsComponent implements OnChanges, OnDestroy {
|
||||||
@Input() contextLevel: string;
|
@Input() contextLevel: string;
|
||||||
@Input() instanceId: number;
|
@Input() instanceId: number;
|
||||||
@Input() component: string;
|
@Input() component: string;
|
||||||
|
@ -36,9 +38,26 @@ export class CoreCommentsCommentsComponent implements OnChanges {
|
||||||
|
|
||||||
commentsLoaded = false;
|
commentsLoaded = false;
|
||||||
commentsCount: number;
|
commentsCount: number;
|
||||||
|
disabled = false;
|
||||||
|
|
||||||
constructor(private navCtrl: NavController, private commentsProvider: CoreCommentsProvider) {
|
protected updateSiteObserver;
|
||||||
|
|
||||||
|
constructor(private navCtrl: NavController, private commentsProvider: CoreCommentsProvider,
|
||||||
|
sitesProvider: CoreSitesProvider, eventsProvider: CoreEventsProvider) {
|
||||||
this.onLoading = new EventEmitter<boolean>();
|
this.onLoading = new EventEmitter<boolean>();
|
||||||
|
|
||||||
|
this.disabled = this.commentsProvider.areCommentsDisabledInSite();
|
||||||
|
|
||||||
|
// Update visibility if current site info is updated.
|
||||||
|
this.updateSiteObserver = eventsProvider.on(CoreEventsProvider.SITE_UPDATED, () => {
|
||||||
|
const wasDisabled = this.disabled;
|
||||||
|
|
||||||
|
this.disabled = this.commentsProvider.areCommentsDisabledInSite();
|
||||||
|
|
||||||
|
if (wasDisabled && !this.disabled) {
|
||||||
|
this.fetchData();
|
||||||
|
}
|
||||||
|
}, sitesProvider.getCurrentSiteId());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -59,6 +78,10 @@ export class CoreCommentsCommentsComponent implements OnChanges {
|
||||||
}
|
}
|
||||||
|
|
||||||
protected fetchData(): void {
|
protected fetchData(): void {
|
||||||
|
if (this.disabled) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
this.commentsLoaded = false;
|
this.commentsLoaded = false;
|
||||||
this.onLoading.emit(true);
|
this.onLoading.emit(true);
|
||||||
|
|
||||||
|
@ -77,7 +100,7 @@ export class CoreCommentsCommentsComponent implements OnChanges {
|
||||||
* Opens the comments page.
|
* Opens the comments page.
|
||||||
*/
|
*/
|
||||||
openComments(): void {
|
openComments(): void {
|
||||||
if (this.commentsCount > 0) {
|
if (!this.disabled && this.commentsCount > 0) {
|
||||||
// Open a new state with the interpolated contents.
|
// Open a new state with the interpolated contents.
|
||||||
this.navCtrl.push('CoreCommentsViewerPage', {
|
this.navCtrl.push('CoreCommentsViewerPage', {
|
||||||
contextLevel: this.contextLevel,
|
contextLevel: this.contextLevel,
|
||||||
|
@ -90,4 +113,11 @@ export class CoreCommentsCommentsComponent implements OnChanges {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Component destroyed.
|
||||||
|
*/
|
||||||
|
ngOnDestroy(): void {
|
||||||
|
this.updateSiteObserver && this.updateSiteObserver.off();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<core-loading [hideUntil]="commentsLoaded || !displaySpinner">
|
<core-loading *ngIf="!disabled" [hideUntil]="commentsLoaded || !displaySpinner">
|
||||||
<div (click)="openComments()" *ngIf="commentsCount >= 0">
|
<div (click)="openComments()" *ngIf="commentsCount >= 0">
|
||||||
{{ 'core.commentscount' | translate : {'$a': commentsCount} }}
|
{{ 'core.commentscount' | translate : {'$a': commentsCount} }}
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -14,6 +14,7 @@
|
||||||
|
|
||||||
import { Injectable } from '@angular/core';
|
import { Injectable } from '@angular/core';
|
||||||
import { CoreSitesProvider } from '@providers/sites';
|
import { CoreSitesProvider } from '@providers/sites';
|
||||||
|
import { CoreSite } from '@classes/site';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Service that provides some features regarding comments.
|
* Service that provides some features regarding comments.
|
||||||
|
@ -25,6 +26,30 @@ export class CoreCommentsProvider {
|
||||||
|
|
||||||
constructor(private sitesProvider: CoreSitesProvider) {}
|
constructor(private sitesProvider: CoreSitesProvider) {}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if Calendar is disabled in a certain site.
|
||||||
|
*
|
||||||
|
* @param {CoreSite} [site] Site. If not defined, use current site.
|
||||||
|
* @return {boolean} Whether it's disabled.
|
||||||
|
*/
|
||||||
|
areCommentsDisabledInSite(site?: CoreSite): boolean {
|
||||||
|
site = site || this.sitesProvider.getCurrentSite();
|
||||||
|
|
||||||
|
return site.isFeatureDisabled('NoDelegate_CoreComments');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if comments are disabled in a certain site.
|
||||||
|
*
|
||||||
|
* @param {string} [siteId] Site Id. If not defined, use current site.
|
||||||
|
* @return {Promise<boolean>} Promise resolved with true if disabled, rejected or resolved with false otherwise.
|
||||||
|
*/
|
||||||
|
areCommentsDisabled(siteId?: string): Promise<boolean> {
|
||||||
|
return this.sitesProvider.getSite(siteId).then((site) => {
|
||||||
|
return this.areCommentsDisabledInSite(site);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get cache key for get comments data WS calls.
|
* Get cache key for get comments data WS calls.
|
||||||
*
|
*
|
||||||
|
|
Loading…
Reference in New Issue