MOBILE-2975 comments: Allow disable comments
parent
8723e5b684
commit
65c202c998
|
@ -29,7 +29,7 @@
|
|||
</ion-item>
|
||||
<ion-card-content>
|
||||
<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>
|
||||
</ion-item>
|
||||
<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 { CoreUserProvider } from '@core/user/providers/user';
|
||||
import { AddonBlogProvider } from '../../providers/blog';
|
||||
import { CoreCommentsProvider } from '@core/comments/providers/comments';
|
||||
|
||||
/**
|
||||
* Component that displays the blog entries.
|
||||
|
@ -47,9 +48,11 @@ export class AddonBlogEntriesComponent implements OnInit {
|
|||
showMyIssuesToggle = false;
|
||||
onlyMyEntries = false;
|
||||
component = AddonBlogProvider.COMPONENT;
|
||||
commentsEnabled: boolean;
|
||||
|
||||
constructor(protected blogProvider: AddonBlogProvider, protected domUtils: CoreDomUtilsProvider,
|
||||
protected userProvider: CoreUserProvider, sitesProvider: CoreSitesProvider) {
|
||||
protected userProvider: CoreUserProvider, sitesProvider: CoreSitesProvider,
|
||||
protected commentsProvider: CoreCommentsProvider) {
|
||||
this.currentUserId = sitesProvider.getCurrentSiteUserId();
|
||||
}
|
||||
|
||||
|
@ -81,6 +84,8 @@ export class AddonBlogEntriesComponent implements OnInit {
|
|||
this.filter['tagid'] = this.tagId;
|
||||
}
|
||||
|
||||
this.commentsEnabled = !this.commentsProvider.areCommentsDisabledInSite();
|
||||
|
||||
this.fetchEntries().then(() => {
|
||||
this.blogProvider.logView(this.filter).catch(() => {
|
||||
// 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>
|
||||
<core-comments contextLevel="module" [instanceId]="assign.cmid" component="assignsubmission_comments" [itemId]="submission.id" area="submission_comments" [title]="plugin.name"></core-comments>
|
||||
</a>
|
||||
|
|
|
@ -27,8 +27,12 @@ import { AddonModAssignSubmissionPluginComponent } from '../../../classes/submis
|
|||
export class AddonModAssignSubmissionCommentsComponent extends AddonModAssignSubmissionPluginComponent {
|
||||
@ViewChild(CoreCommentsCommentsComponent) commentsComponent: CoreCommentsCommentsComponent;
|
||||
|
||||
commentsEnabled: boolean;
|
||||
|
||||
constructor(protected commentsProvider: CoreCommentsProvider) {
|
||||
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-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>
|
||||
</ion-item>
|
||||
|
||||
|
|
|
@ -26,6 +26,7 @@ import { AddonModDataHelperProvider } from '../../providers/helper';
|
|||
import { AddonModDataSyncProvider } from '../../providers/sync';
|
||||
import { AddonModDataFieldsDelegate } from '../../providers/fields-delegate';
|
||||
import { AddonModDataComponentsModule } from '../../components/components.module';
|
||||
import { CoreCommentsProvider } from '@core/comments/providers/comments';
|
||||
|
||||
/**
|
||||
* Page that displays the view entry page.
|
||||
|
@ -68,13 +69,14 @@ export class AddonModDataEntryPage implements OnDestroy {
|
|||
jsData;
|
||||
ratingInfo: CoreRatingInfo;
|
||||
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,
|
||||
protected domUtils: CoreDomUtilsProvider, protected fieldsDelegate: AddonModDataFieldsDelegate,
|
||||
protected courseProvider: CoreCourseProvider, protected dataProvider: AddonModDataProvider,
|
||||
protected dataHelper: AddonModDataHelperProvider,
|
||||
sitesProvider: CoreSitesProvider, protected navCtrl: NavController, protected eventsProvider: CoreEventsProvider,
|
||||
private cdr: ChangeDetectorRef) {
|
||||
private cdr: ChangeDetectorRef, protected commentsProvider: CoreCommentsProvider) {
|
||||
this.module = params.get('module') || {};
|
||||
this.entryId = params.get('entryId') || null;
|
||||
this.courseId = params.get('courseId');
|
||||
|
@ -91,6 +93,7 @@ export class AddonModDataEntryPage implements OnDestroy {
|
|||
* View loaded.
|
||||
*/
|
||||
ionViewDidLoad(): void {
|
||||
this.commentsEnabled = !this.commentsProvider.areCommentsDisabledInSite();
|
||||
this.fetchEntryData();
|
||||
|
||||
// Refresh data if this discussion is synchronized automatically.
|
||||
|
|
|
@ -12,9 +12,11 @@
|
|||
// See the License for the specific language governing permissions and
|
||||
// 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 { CoreCommentsProvider } from '../../providers/comments';
|
||||
import { CoreEventsProvider } from '@providers/events';
|
||||
import { CoreSitesProvider } from '@providers/sites';
|
||||
|
||||
/**
|
||||
* Component that displays the count of comments.
|
||||
|
@ -23,7 +25,7 @@ import { CoreCommentsProvider } from '../../providers/comments';
|
|||
selector: 'core-comments',
|
||||
templateUrl: 'core-comments.html',
|
||||
})
|
||||
export class CoreCommentsCommentsComponent implements OnChanges {
|
||||
export class CoreCommentsCommentsComponent implements OnChanges, OnDestroy {
|
||||
@Input() contextLevel: string;
|
||||
@Input() instanceId: number;
|
||||
@Input() component: string;
|
||||
|
@ -36,9 +38,26 @@ export class CoreCommentsCommentsComponent implements OnChanges {
|
|||
|
||||
commentsLoaded = false;
|
||||
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.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 {
|
||||
if (this.disabled) {
|
||||
return;
|
||||
}
|
||||
|
||||
this.commentsLoaded = false;
|
||||
this.onLoading.emit(true);
|
||||
|
||||
|
@ -77,7 +100,7 @@ export class CoreCommentsCommentsComponent implements OnChanges {
|
|||
* Opens the comments page.
|
||||
*/
|
||||
openComments(): void {
|
||||
if (this.commentsCount > 0) {
|
||||
if (!this.disabled && this.commentsCount > 0) {
|
||||
// Open a new state with the interpolated contents.
|
||||
this.navCtrl.push('CoreCommentsViewerPage', {
|
||||
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">
|
||||
{{ 'core.commentscount' | translate : {'$a': commentsCount} }}
|
||||
</div>
|
||||
|
|
|
@ -14,6 +14,7 @@
|
|||
|
||||
import { Injectable } from '@angular/core';
|
||||
import { CoreSitesProvider } from '@providers/sites';
|
||||
import { CoreSite } from '@classes/site';
|
||||
|
||||
/**
|
||||
* Service that provides some features regarding comments.
|
||||
|
@ -25,6 +26,30 @@ export class CoreCommentsProvider {
|
|||
|
||||
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.
|
||||
*
|
||||
|
|
Loading…
Reference in New Issue