diff --git a/src/addon/blog/components/entries/addon-blog-entries.html b/src/addon/blog/components/entries/addon-blog-entries.html index 9312a00cd..670e4d276 100644 --- a/src/addon/blog/components/entries/addon-blog-entries.html +++ b/src/addon/blog/components/entries/addon-blog-entries.html @@ -29,7 +29,7 @@ - + diff --git a/src/addon/blog/components/entries/entries.ts b/src/addon/blog/components/entries/entries.ts index 54f84d30a..b66db02a3 100644 --- a/src/addon/blog/components/entries/entries.ts +++ b/src/addon/blog/components/entries/entries.ts @@ -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. diff --git a/src/addon/mod/assign/submission/comments/component/addon-mod-assign-submission-comments.html b/src/addon/mod/assign/submission/comments/component/addon-mod-assign-submission-comments.html index 07a5ae68e..be2ba466f 100644 --- a/src/addon/mod/assign/submission/comments/component/addon-mod-assign-submission-comments.html +++ b/src/addon/mod/assign/submission/comments/component/addon-mod-assign-submission-comments.html @@ -1,4 +1,4 @@ - +

{{plugin.name}}

diff --git a/src/addon/mod/assign/submission/comments/component/comments.ts b/src/addon/mod/assign/submission/comments/component/comments.ts index 31f62de86..98c8be9e0 100644 --- a/src/addon/mod/assign/submission/comments/component/comments.ts +++ b/src/addon/mod/assign/submission/comments/component/comments.ts @@ -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(); } /** diff --git a/src/addon/mod/data/pages/entry/entry.html b/src/addon/mod/data/pages/entry/entry.html index 20e8d31d0..ebbc2e2fa 100644 --- a/src/addon/mod/data/pages/entry/entry.html +++ b/src/addon/mod/data/pages/entry/entry.html @@ -31,7 +31,7 @@ - + diff --git a/src/addon/mod/data/pages/entry/entry.ts b/src/addon/mod/data/pages/entry/entry.ts index cb17d7dfa..51e95ce9c 100644 --- a/src/addon/mod/data/pages/entry/entry.ts +++ b/src/addon/mod/data/pages/entry/entry.ts @@ -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. diff --git a/src/core/comments/components/comments/comments.ts b/src/core/comments/components/comments/comments.ts index 2e5303a8e..6538a0874 100644 --- a/src/core/comments/components/comments/comments.ts +++ b/src/core/comments/components/comments/comments.ts @@ -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(); + + 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(); + } } diff --git a/src/core/comments/components/comments/core-comments.html b/src/core/comments/components/comments/core-comments.html index 7dad81877..e7b71e041 100644 --- a/src/core/comments/components/comments/core-comments.html +++ b/src/core/comments/components/comments/core-comments.html @@ -1,4 +1,4 @@ - +
{{ 'core.commentscount' | translate : {'$a': commentsCount} }}
diff --git a/src/core/comments/providers/comments.ts b/src/core/comments/providers/comments.ts index db3978029..2d876990d 100644 --- a/src/core/comments/providers/comments.ts +++ b/src/core/comments/providers/comments.ts @@ -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} Promise resolved with true if disabled, rejected or resolved with false otherwise. + */ + areCommentsDisabled(siteId?: string): Promise { + return this.sitesProvider.getSite(siteId).then((site) => { + return this.areCommentsDisabledInSite(site); + }); + } + /** * Get cache key for get comments data WS calls. *