forked from CIT/Vmeda.Online
		
	MOBILE-1874 sitehome: Check if Main Menu block is visible
This commit is contained in:
		
							parent
							
								
									17f707ed86
								
							
						
					
					
						commit
						aa600f2d92
					
				| @ -85,11 +85,22 @@ export class CoreCourseProvider { | |||||||
|         this.sitesProvider.createTableFromSchema(this.courseStatusTableSchema); |         this.sitesProvider.createTableFromSchema(this.courseStatusTableSchema); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     /** | ||||||
|  |      * Check if the get course blocks WS is available in current site. | ||||||
|  |      * | ||||||
|  |      * @return {boolean} Whether it's available. | ||||||
|  |      * @since 3.3 | ||||||
|  |      */ | ||||||
|  |     canGetCourseBlocks(): boolean { | ||||||
|  |         return this.sitesProvider.wsAvailableInCurrentSite('core_block_get_course_blocks'); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     /** |     /** | ||||||
|      * Check whether the site supports requesting stealth modules. |      * Check whether the site supports requesting stealth modules. | ||||||
|      * |      * | ||||||
|      * @param {CoreSite} [site] Site. If not defined, current site. |      * @param {CoreSite} [site] Site. If not defined, current site. | ||||||
|      * @return {boolean} Whether the site supports requesting stealth modules. |      * @return {boolean} Whether the site supports requesting stealth modules. | ||||||
|  |      * @since 3.4.6, 3.5.3, 3.6 | ||||||
|      */ |      */ | ||||||
|     canRequestStealthModules(site?: CoreSite): boolean { |     canRequestStealthModules(site?: CoreSite): boolean { | ||||||
|         site = site || this.sitesProvider.getCurrentSite(); |         site = site || this.sitesProvider.getCurrentSite(); | ||||||
| @ -208,6 +219,39 @@ export class CoreCourseProvider { | |||||||
|         return this.ROOT_CACHE_KEY + 'activitiescompletion:' + courseId + ':' + userId; |         return this.ROOT_CACHE_KEY + 'activitiescompletion:' + courseId + ':' + userId; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     /** | ||||||
|  |      * Get course blocks. | ||||||
|  |      * | ||||||
|  |      * @param {number} courseId Course ID. | ||||||
|  |      * @param {string} [siteId] Site ID. If not defined, current site. | ||||||
|  |      * @return {Promise<any[]>} Promise resolved with the list of blocks. | ||||||
|  |      * @since 3.3 | ||||||
|  |      */ | ||||||
|  |     getCourseBlocks(courseId: number, siteId?: string): Promise<any[]> { | ||||||
|  |         return this.sitesProvider.getSite(siteId).then((site) => { | ||||||
|  |             const params = { | ||||||
|  |                     courseid: courseId | ||||||
|  |                 }, | ||||||
|  |                 preSets: CoreSiteWSPreSets = { | ||||||
|  |                     cacheKey: this.getCourseBlocksCacheKey(courseId) | ||||||
|  |                 }; | ||||||
|  | 
 | ||||||
|  |             return site.read('core_block_get_course_blocks', params, preSets).then((result) => { | ||||||
|  |                 return result.blocks || []; | ||||||
|  |             }); | ||||||
|  |         }); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * Get cache key for course blocks WS calls. | ||||||
|  |      * | ||||||
|  |      * @param {number} courseId Course ID. | ||||||
|  |      * @return {string} Cache key. | ||||||
|  |      */ | ||||||
|  |     protected getCourseBlocksCacheKey(courseId: number): string { | ||||||
|  |         return this.ROOT_CACHE_KEY + 'courseblocks:' + courseId; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     /** |     /** | ||||||
|      * Get the data stored for a course. |      * Get the data stored for a course. | ||||||
|      * |      * | ||||||
| @ -608,6 +652,19 @@ export class CoreCourseProvider { | |||||||
|         return modules; |         return modules; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     /** | ||||||
|  |      * Invalidates course blocks WS call. | ||||||
|  |      * | ||||||
|  |      * @param {number} courseId Course ID. | ||||||
|  |      * @param {string} [siteId] Site ID. If not defined, current site. | ||||||
|  |      * @return {Promise<any>} Promise resolved when the data is invalidated. | ||||||
|  |      */ | ||||||
|  |     invalidateCourseBlocks(courseId: number, siteId?: string): Promise<any> { | ||||||
|  |         return this.sitesProvider.getSite(siteId).then((site) => { | ||||||
|  |             return site.invalidateWsCacheForKey(this.getCourseBlocksCacheKey(courseId)); | ||||||
|  |         }); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     /** |     /** | ||||||
|      * Invalidates module WS call. |      * Invalidates module WS call. | ||||||
|      * |      * | ||||||
|  | |||||||
| @ -22,14 +22,14 @@ | |||||||
|             </ng-container> |             </ng-container> | ||||||
|         </ng-container> |         </ng-container> | ||||||
| 
 | 
 | ||||||
|         <!-- Site home block. --> |         <!-- Main menu block. --> | ||||||
|         <ng-container *ngIf="block && block.hasContent"> |         <ng-container *ngIf="mainMenuBlock && mainMenuBlock.hasContent"> | ||||||
|             <ion-item-divider color="light" *ngIf="(section && section.hasContent) || items.length > 0"></ion-item-divider> |             <ion-item-divider color="light" *ngIf="(section && section.hasContent) || items.length > 0"></ion-item-divider> | ||||||
|             <ion-item text-wrap *ngIf="block.summary"> |             <ion-item text-wrap *ngIf="mainMenuBlock.summary"> | ||||||
|                 <core-format-text [text]="block.summary"></core-format-text> |                 <core-format-text [text]="mainMenuBlock.summary"></core-format-text> | ||||||
|             </ion-item> |             </ion-item> | ||||||
| 
 | 
 | ||||||
|             <core-course-module *ngFor="let module of block.modules" [module]="module" [courseId]="siteHomeId" [downloadEnabled]="true" [section]="block"></core-course-module> |             <core-course-module *ngFor="let module of mainMenuBlock.modules" [module]="module" [courseId]="siteHomeId" [downloadEnabled]="true" [section]="mainMenuBlock"></core-course-module> | ||||||
|         </ng-container> |         </ng-container> | ||||||
|     </ion-list> |     </ion-list> | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -30,7 +30,7 @@ import { CoreSiteHomeProvider } from '../../providers/sitehome'; | |||||||
| export class CoreSiteHomeIndexComponent implements OnInit { | export class CoreSiteHomeIndexComponent implements OnInit { | ||||||
|     dataLoaded = false; |     dataLoaded = false; | ||||||
|     section: any; |     section: any; | ||||||
|     block: any; |     mainMenuBlock: any; | ||||||
|     hasContent: boolean; |     hasContent: boolean; | ||||||
|     items: any[] = []; |     items: any[] = []; | ||||||
|     siteHomeId: number; |     siteHomeId: number; | ||||||
| @ -75,6 +75,10 @@ export class CoreSiteHomeIndexComponent implements OnInit { | |||||||
|             promises.push(this.prefetchDelegate.invalidateModules(modules, this.siteHomeId)); |             promises.push(this.prefetchDelegate.invalidateModules(modules, this.siteHomeId)); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|  |         if (this.courseProvider.canGetCourseBlocks()) { | ||||||
|  |             promises.push(this.courseProvider.invalidateCourseBlocks(this.siteHomeId)); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|         Promise.all(promises).finally(() => { |         Promise.all(promises).finally(() => { | ||||||
|             this.loadContent().finally(() => { |             this.loadContent().finally(() => { | ||||||
|                 refresher.complete(); |                 refresher.complete(); | ||||||
| @ -126,33 +130,53 @@ export class CoreSiteHomeIndexComponent implements OnInit { | |||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         return this.courseProvider.getSections(this.siteHomeId, false, true).then((sections) => { |         return this.courseProvider.getSections(this.siteHomeId, false, true).then((sections) => { | ||||||
|  |             const promises = []; | ||||||
|  | 
 | ||||||
|             this.sectionsLoaded = Array.from(sections); |             this.sectionsLoaded = Array.from(sections); | ||||||
| 
 | 
 | ||||||
|             // Check "Include a topic section" setting from numsections.
 |             // Check "Include a topic section" setting from numsections.
 | ||||||
|             this.section = config.numsections && sections.length > 0 ? sections.pop() : false; |             this.section = config.numsections && sections.length > 0 ? sections.pop() : false; | ||||||
|             if (this.section) { |             if (this.section) { | ||||||
|                 this.section.hasContent = this.courseHelper.sectionHasContent(this.section); |                 this.section.hasContent = this.courseHelper.sectionHasContent(this.section); | ||||||
|  |                 this.hasContent = this.courseHelper.addHandlerDataForModules([this.section], this.siteHomeId) || this.hasContent; | ||||||
|             } |             } | ||||||
| 
 | 
 | ||||||
|             this.block = sections.length > 0 ? sections.pop() : false; |             const mainMenuBlock = sections.length > 0 ? sections.pop() : false; | ||||||
|             if (this.block) { |             this.mainMenuBlock = false; | ||||||
|                 this.block.hasContent = this.courseHelper.sectionHasContent(this.block); | 
 | ||||||
|  |             if (mainMenuBlock) { | ||||||
|  |                 // Check if the block can be viewed.
 | ||||||
|  |                 let promise; | ||||||
|  | 
 | ||||||
|  |                 if (this.courseProvider.canGetCourseBlocks()) { | ||||||
|  |                     promise = this.courseProvider.getCourseBlocks(this.siteHomeId).then((blocks) => { | ||||||
|  |                         // Search if the main menu block is enabled.
 | ||||||
|  |                         return !!blocks.find((block) => { return block.name == 'site_main_menu'; }); | ||||||
|  |                     }).catch(() => { | ||||||
|  |                         return true; | ||||||
|  |                     }); | ||||||
|  |                 } else { | ||||||
|  |                     // We don't know if it can be viewed, so always display it.
 | ||||||
|  |                     promise = Promise.resolve(true); | ||||||
|                 } |                 } | ||||||
| 
 | 
 | ||||||
|             this.hasContent = this.courseHelper.addHandlerDataForModules(this.sectionsLoaded, this.siteHomeId) || this.hasContent; |                 promises.push(promise.then((canView) => { | ||||||
|  |                     if (canView) { | ||||||
|  |                         // User can view the block, display it and calculate its data.
 | ||||||
|  |                         this.mainMenuBlock = mainMenuBlock; | ||||||
|  |                         this.mainMenuBlock.hasContent = this.courseHelper.sectionHasContent(this.mainMenuBlock); | ||||||
|  |                         this.hasContent = this.courseHelper.addHandlerDataForModules([mainMenuBlock], this.siteHomeId) || | ||||||
|  |                                 this.hasContent; | ||||||
| 
 | 
 | ||||||
|             // Add log in Moodle.
 |                         if (hasNewsItem && this.mainMenuBlock.modules) { | ||||||
|             this.courseProvider.logView(this.siteHomeId); |                             // Remove forum activity (news one only) from the main menu block to prevent duplicates.
 | ||||||
| 
 |  | ||||||
|             if (hasNewsItem && this.block && this.block.modules) { |  | ||||||
|                 // Remove forum activity (news one only) to prevent duplicates.
 |  | ||||||
|                             return this.siteHomeProvider.getNewsForum(this.siteHomeId).then((forum) => { |                             return this.siteHomeProvider.getNewsForum(this.siteHomeId).then((forum) => { | ||||||
|                                 // Search the module that belongs to site news.
 |                                 // Search the module that belongs to site news.
 | ||||||
|                     for (let i = 0; i < this.block.modules.length; i++) { |                                 for (let i = 0; i < this.mainMenuBlock.modules.length; i++) { | ||||||
|                         const module = this.block.modules[i]; |                                     const module = this.mainMenuBlock.modules[i]; | ||||||
| 
 | 
 | ||||||
|                                     if (module.modname == 'forum' && module.instance == forum.id) { |                                     if (module.modname == 'forum' && module.instance == forum.id) { | ||||||
|                             this.block.modules.splice(i, 1); |                                         this.mainMenuBlock.modules.splice(i, 1); | ||||||
|                                         break; |                                         break; | ||||||
|                                     } |                                     } | ||||||
|                                 } |                                 } | ||||||
| @ -160,6 +184,16 @@ export class CoreSiteHomeIndexComponent implements OnInit { | |||||||
|                                 // Ignore errors.
 |                                 // Ignore errors.
 | ||||||
|                             }); |                             }); | ||||||
|                         } |                         } | ||||||
|  |                     } | ||||||
|  |                 })); | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|  |             // Add log in Moodle.
 | ||||||
|  |             this.courseProvider.logView(this.siteHomeId).catch(() => { | ||||||
|  |                 // Ignore errors.
 | ||||||
|  |             }); | ||||||
|  | 
 | ||||||
|  |             return Promise.all(promises); | ||||||
|         }).catch((error) => { |         }).catch((error) => { | ||||||
|             this.domUtils.showErrorModalDefault(error, 'core.course.couldnotloadsectioncontent', true); |             this.domUtils.showErrorModalDefault(error, 'core.course.couldnotloadsectioncontent', true); | ||||||
|         }); |         }); | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user