forked from EVOgeek/Vmeda.Online
		
	MOBILE-2975 comments: Allow disable comments
This commit is contained in:
		
							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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user