forked from CIT/Vmeda.Online
		
	MOBILE-3068 database: Fix comments not updated on PTR
This commit is contained in:
		
							parent
							
								
									160b544d8e
								
							
						
					
					
						commit
						5533c39288
					
				| @ -85,7 +85,6 @@ export class AddonModDataIndexComponent extends CoreCourseModuleMainActivityComp | |||||||
|             private prefetchHandler: AddonModDataPrefetchHandler, |             private prefetchHandler: AddonModDataPrefetchHandler, | ||||||
|             private timeUtils: CoreTimeUtilsProvider, |             private timeUtils: CoreTimeUtilsProvider, | ||||||
|             private groupsProvider: CoreGroupsProvider, |             private groupsProvider: CoreGroupsProvider, | ||||||
|             private commentsProvider: CoreCommentsProvider, |  | ||||||
|             private modalCtrl: ModalController, |             private modalCtrl: ModalController, | ||||||
|             private utils: CoreUtilsProvider, |             private utils: CoreUtilsProvider, | ||||||
|             protected navCtrl: NavController) { |             protected navCtrl: NavController) { | ||||||
| @ -152,8 +151,12 @@ export class AddonModDataIndexComponent extends CoreCourseModuleMainActivityComp | |||||||
|             promises.push(this.dataProvider.invalidateDatabaseAccessInformationData(this.data.id)); |             promises.push(this.dataProvider.invalidateDatabaseAccessInformationData(this.data.id)); | ||||||
|             promises.push(this.groupsProvider.invalidateActivityGroupInfo(this.data.coursemodule)); |             promises.push(this.groupsProvider.invalidateActivityGroupInfo(this.data.coursemodule)); | ||||||
|             promises.push(this.dataProvider.invalidateEntriesData(this.data.id)); |             promises.push(this.dataProvider.invalidateEntriesData(this.data.id)); | ||||||
|  | 
 | ||||||
|             if (this.hasComments) { |             if (this.hasComments) { | ||||||
|                 promises.push(this.commentsProvider.invalidateCommentsByInstance('module', this.data.coursemodule)); |                 this.eventsProvider.trigger(CoreCommentsProvider.REFRESH_COMMENTS_EVENT, { | ||||||
|  |                     contextLevel: 'module', | ||||||
|  |                     instanceId: this.data.coursemodule | ||||||
|  |                 }, this.sitesProvider.getCurrentSiteId()); | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
| @ -192,6 +195,7 @@ export class AddonModDataIndexComponent extends CoreCourseModuleMainActivityComp | |||||||
| 
 | 
 | ||||||
|         return this.dataProvider.getDatabase(this.courseId, this.module.id).then((data) => { |         return this.dataProvider.getDatabase(this.courseId, this.module.id).then((data) => { | ||||||
|             this.data = data; |             this.data = data; | ||||||
|  |             this.hasComments = data.comments; | ||||||
| 
 | 
 | ||||||
|             this.description = data.intro || data.description; |             this.description = data.intro || data.description; | ||||||
|             this.dataRetrieved.emit(data); |             this.dataRetrieved.emit(data); | ||||||
| @ -258,7 +262,6 @@ export class AddonModDataIndexComponent extends CoreCourseModuleMainActivityComp | |||||||
|      * @return {Promise<any>} Resolved then done. |      * @return {Promise<any>} Resolved then done. | ||||||
|      */ |      */ | ||||||
|     protected fetchEntriesData(): Promise<any> { |     protected fetchEntriesData(): Promise<any> { | ||||||
|         this.hasComments = false; |  | ||||||
| 
 | 
 | ||||||
|         return this.dataProvider.getDatabaseAccessInformation(this.data.id, this.selectedGroup).then((accessData) => { |         return this.dataProvider.getDatabaseAccessInformation(this.data.id, this.selectedGroup).then((accessData) => { | ||||||
|             // Update values for current group.
 |             // Update values for current group.
 | ||||||
|  | |||||||
| @ -27,6 +27,7 @@ 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'; | import { CoreCommentsProvider } from '@core/comments/providers/comments'; | ||||||
|  | import { CoreCommentsCommentsComponent } from '@core/comments/components/comments/comments'; | ||||||
| 
 | 
 | ||||||
| /** | /** | ||||||
|  * Page that displays the view entry page. |  * Page that displays the view entry page. | ||||||
| @ -38,6 +39,7 @@ import { CoreCommentsProvider } from '@core/comments/providers/comments'; | |||||||
| }) | }) | ||||||
| export class AddonModDataEntryPage implements OnDestroy { | export class AddonModDataEntryPage implements OnDestroy { | ||||||
|     @ViewChild(Content) content: Content; |     @ViewChild(Content) content: Content; | ||||||
|  |     @ViewChild(CoreCommentsCommentsComponent) comments: CoreCommentsCommentsComponent; | ||||||
| 
 | 
 | ||||||
|     protected module: any; |     protected module: any; | ||||||
|     protected entryId: number; |     protected entryId: number; | ||||||
| @ -211,13 +213,16 @@ export class AddonModDataEntryPage implements OnDestroy { | |||||||
| 
 | 
 | ||||||
|         promises.push(this.dataProvider.invalidateDatabaseData(this.courseId)); |         promises.push(this.dataProvider.invalidateDatabaseData(this.courseId)); | ||||||
|         if (this.data) { |         if (this.data) { | ||||||
|             if (this.data.comments && this.entry && this.entry.id > 0 && this.commentsEnabled) { |  | ||||||
|                 promises.push(this.commentsProvider.invalidateCommentsData('module', this.data.coursemodule, 'mod_data', |  | ||||||
|                     this.entry.id, 'database_entry')); |  | ||||||
|             } |  | ||||||
|             promises.push(this.dataProvider.invalidateEntryData(this.data.id, this.entryId)); |             promises.push(this.dataProvider.invalidateEntryData(this.data.id, this.entryId)); | ||||||
|             promises.push(this.groupsProvider.invalidateActivityGroupInfo(this.data.coursemodule)); |             promises.push(this.groupsProvider.invalidateActivityGroupInfo(this.data.coursemodule)); | ||||||
|             promises.push(this.dataProvider.invalidateEntriesData(this.data.id)); |             promises.push(this.dataProvider.invalidateEntriesData(this.data.id)); | ||||||
|  | 
 | ||||||
|  |             if (this.data.comments && this.entry && this.entry.id > 0 && this.commentsEnabled && this.comments) { | ||||||
|  |                 // Refresh comments. Don't add it to promises because we don't want the comments fetch to block the entry fetch.
 | ||||||
|  |                 this.comments.doRefresh().catch(() => { | ||||||
|  |                     // Ignore errors.
 | ||||||
|  |                 }); | ||||||
|  |             } | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         return Promise.all(promises).finally(() => { |         return Promise.all(promises).finally(() => { | ||||||
|  | |||||||
| @ -158,11 +158,12 @@ export class AddonModDataHelperProvider { | |||||||
|      * @param {any} entry Entry. |      * @param {any} entry Entry. | ||||||
|      * @param {number} offset Entry offset. |      * @param {number} offset Entry offset. | ||||||
|      * @param {string} mode Mode list or show. |      * @param {string} mode Mode list or show. | ||||||
|      * @param {AddonModDataOfflineAction[]} actions Actions that can be performed to the record. |      * @param {{[name: string]: boolean}} actions Actions that can be performed to the record. | ||||||
|      * @return {string} Generated HTML. |      * @return {string} Generated HTML. | ||||||
|      */ |      */ | ||||||
|     displayShowFields(template: string, fields: any[], entry: any, offset: number, mode: string, |     displayShowFields(template: string, fields: any[], entry: any, offset: number, mode: string, | ||||||
|             actions: AddonModDataOfflineAction[]): string { |             actions: {[name: string]: boolean}): string { | ||||||
|  | 
 | ||||||
|         if (!template) { |         if (!template) { | ||||||
|             return ''; |             return ''; | ||||||
|         } |         } | ||||||
| @ -357,9 +358,9 @@ export class AddonModDataHelperProvider { | |||||||
|      * @param {any}  database     Database activity. |      * @param {any}  database     Database activity. | ||||||
|      * @param {any}  accessInfo   Access info to the activity. |      * @param {any}  accessInfo   Access info to the activity. | ||||||
|      * @param {any}  record       Entry or record where the actions will be performed. |      * @param {any}  record       Entry or record where the actions will be performed. | ||||||
|      * @return {any}              Keyed with the action names and boolean to evalute if it can or cannot be done. |      * @return {{[name: string]: boolean}} Keyed with the action names and boolean to evalute if it can or cannot be done. | ||||||
|      */ |      */ | ||||||
|     getActions(database: any, accessInfo: any, record: any): any { |     getActions(database: any, accessInfo: any, record: any): {[name: string]: boolean} { | ||||||
|         return { |         return { | ||||||
|             more: true, |             more: true, | ||||||
|             moreurl: true, |             moreurl: true, | ||||||
|  | |||||||
| @ -41,6 +41,7 @@ export class CoreCommentsCommentsComponent implements OnChanges, OnDestroy { | |||||||
|     disabled = false; |     disabled = false; | ||||||
| 
 | 
 | ||||||
|     protected updateSiteObserver; |     protected updateSiteObserver; | ||||||
|  |     protected refreshCommentsObserver; | ||||||
| 
 | 
 | ||||||
|     constructor(private navCtrl: NavController, private commentsProvider: CoreCommentsProvider, |     constructor(private navCtrl: NavController, private commentsProvider: CoreCommentsProvider, | ||||||
|             sitesProvider: CoreSitesProvider, eventsProvider: CoreEventsProvider) { |             sitesProvider: CoreSitesProvider, eventsProvider: CoreEventsProvider) { | ||||||
| @ -58,6 +59,19 @@ export class CoreCommentsCommentsComponent implements OnChanges, OnDestroy { | |||||||
|                 this.fetchData(); |                 this.fetchData(); | ||||||
|             } |             } | ||||||
|         }, sitesProvider.getCurrentSiteId()); |         }, sitesProvider.getCurrentSiteId()); | ||||||
|  | 
 | ||||||
|  |         // Refresh comments if event received.
 | ||||||
|  |         this.refreshCommentsObserver = eventsProvider.on(CoreCommentsProvider.REFRESH_COMMENTS_EVENT, (data) => { | ||||||
|  |             // Verify these comments need to be updated.
 | ||||||
|  |             if (this.undefinedOrEqual(data, 'contextLevel') && this.undefinedOrEqual(data, 'instanceId') && | ||||||
|  |                     this.undefinedOrEqual(data, 'component') && this.undefinedOrEqual(data, 'itemId') && | ||||||
|  |                     this.undefinedOrEqual(data, 'area')) { | ||||||
|  | 
 | ||||||
|  |                 this.doRefresh().catch(() => { | ||||||
|  |                     // Ignore errors.
 | ||||||
|  |                 }); | ||||||
|  |             } | ||||||
|  |         }, sitesProvider.getCurrentSiteId()); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     /** |     /** | ||||||
| @ -77,7 +91,10 @@ export class CoreCommentsCommentsComponent implements OnChanges, OnDestroy { | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     protected fetchData(): void { |     /** | ||||||
|  |      * Fetch comments data. | ||||||
|  |      */ | ||||||
|  |     fetchData(): void { | ||||||
|         if (this.disabled) { |         if (this.disabled) { | ||||||
|             return; |             return; | ||||||
|         } |         } | ||||||
| @ -94,6 +111,27 @@ export class CoreCommentsCommentsComponent implements OnChanges, OnDestroy { | |||||||
|         }); |         }); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     /** | ||||||
|  |      * Refresh comments. | ||||||
|  |      * | ||||||
|  |      * @return {Promise<any>} Promise resolved when done. | ||||||
|  |      */ | ||||||
|  |     doRefresh(): Promise<any> { | ||||||
|  |         return this.invalidateComments().then(() => { | ||||||
|  |             return this.fetchData(); | ||||||
|  |         }); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * Invalidate comments data. | ||||||
|  |      * | ||||||
|  |      * @return {Promise<any>} Promise resolved when done. | ||||||
|  |      */ | ||||||
|  |     invalidateComments(): Promise<any> { | ||||||
|  |         return this.commentsProvider.invalidateCommentsData(this.contextLevel, this.instanceId, this.component, this.itemId, | ||||||
|  |                 this.area); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     /** |     /** | ||||||
|      * Opens the comments page. |      * Opens the comments page. | ||||||
|      */ |      */ | ||||||
| @ -116,5 +154,17 @@ export class CoreCommentsCommentsComponent implements OnChanges, OnDestroy { | |||||||
|      */ |      */ | ||||||
|     ngOnDestroy(): void { |     ngOnDestroy(): void { | ||||||
|         this.updateSiteObserver && this.updateSiteObserver.off(); |         this.updateSiteObserver && this.updateSiteObserver.off(); | ||||||
|  |         this.refreshCommentsObserver && this.refreshCommentsObserver.off(); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * Check if a certain value in data is undefined or equal to this instance value. | ||||||
|  |      * | ||||||
|  |      * @param {any} data Data object. | ||||||
|  |      * @param {string} name Name of the property to check. | ||||||
|  |      * @return {boolean} Whether it's undefined or equal. | ||||||
|  |      */ | ||||||
|  |     protected undefinedOrEqual(data: any, name: string): boolean { | ||||||
|  |         return typeof data[name] == 'undefined' || data[name] == this[name]; | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  | |||||||
| @ -25,6 +25,8 @@ import { CoreCommentsOfflineProvider } from './offline'; | |||||||
| @Injectable() | @Injectable() | ||||||
| export class CoreCommentsProvider { | export class CoreCommentsProvider { | ||||||
| 
 | 
 | ||||||
|  |     static REFRESH_COMMENTS_EVENT = 'core_comments_refresh_comments'; | ||||||
|  | 
 | ||||||
|     protected ROOT_CACHE_KEY = 'mmComments:'; |     protected ROOT_CACHE_KEY = 'mmComments:'; | ||||||
|     static pageSize = null; |     static pageSize = null; | ||||||
|     static pageSizeOK = false; // If true, the pageSize is definitive. If not, it's a temporal value to reduce WS calls.
 |     static pageSizeOK = false; // If true, the pageSize is definitive. If not, it's a temporal value to reduce WS calls.
 | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user