forked from CIT/Vmeda.Online
		
	MOBILE-2502 course: Support stealth modules as students
This commit is contained in:
		
							parent
							
								
									ff08501397
								
							
						
					
					
						commit
						f56b7cfd3c
					
				| @ -69,7 +69,7 @@ | |||||||
| 
 | 
 | ||||||
| <!-- Template to render a section. --> | <!-- Template to render a section. --> | ||||||
| <ng-template #sectionTemplate let-section="section"> | <ng-template #sectionTemplate let-section="section"> | ||||||
|     <section ion-list *ngIf="!section.hiddenbynumsections && section.id != allSectionsId"> |     <section ion-list *ngIf="!section.hiddenbynumsections && section.id != allSectionsId && section.id != stealthModulesSectionId"> | ||||||
|         <!-- Title is only displayed when viewing all sections. --> |         <!-- Title is only displayed when viewing all sections. --> | ||||||
|         <ion-item-divider text-wrap color="light" *ngIf="selectedSection.id == allSectionsId && section.name"> |         <ion-item-divider text-wrap color="light" *ngIf="selectedSection.id == allSectionsId && section.name"> | ||||||
|             <core-format-text [text]="section.name"></core-format-text> |             <core-format-text [text]="section.name"></core-format-text> | ||||||
|  | |||||||
| @ -70,6 +70,7 @@ export class CoreCourseFormatComponent implements OnInit, OnChanges, OnDestroy { | |||||||
|     previousSection: any; |     previousSection: any; | ||||||
|     nextSection: any; |     nextSection: any; | ||||||
|     allSectionsId: number = CoreCourseProvider.ALL_SECTIONS_ID; |     allSectionsId: number = CoreCourseProvider.ALL_SECTIONS_ID; | ||||||
|  |     stealthModulesSectionId: number = CoreCourseProvider.STEALTH_MODULES_SECTION_ID; | ||||||
|     selectOptions: any = {}; |     selectOptions: any = {}; | ||||||
|     loaded: boolean; |     loaded: boolean; | ||||||
| 
 | 
 | ||||||
| @ -151,13 +152,20 @@ export class CoreCourseFormatComponent implements OnInit, OnChanges, OnDestroy { | |||||||
|                         const section = this.sections[i]; |                         const section = this.sections[i]; | ||||||
|                         if ((section.id && section.id == this.initialSectionId) || |                         if ((section.id && section.id == this.initialSectionId) || | ||||||
|                                 (section.section && section.section == this.initialSectionNumber)) { |                                 (section.section && section.section == this.initialSectionNumber)) { | ||||||
|                             this.loaded = true; | 
 | ||||||
|                             this.sectionChanged(section); |                             // Don't load the section if it cannot be viewed by the user.
 | ||||||
|  |                             if (this.canViewSection(section)) { | ||||||
|  |                                 this.loaded = true; | ||||||
|  |                                 this.sectionChanged(section); | ||||||
|  |                             } | ||||||
|                             break; |                             break; | ||||||
|                         } |                         } | ||||||
|                     } |                     } | ||||||
|                 } else { | 
 | ||||||
|                     // No section specified, get current section.
 |                 } | ||||||
|  | 
 | ||||||
|  |                 if (!this.loaded) { | ||||||
|  |                     // No section specified, not found or not visible, get current section.
 | ||||||
|                     this.cfDelegate.getCurrentSection(this.course, this.sections).then((section) => { |                     this.cfDelegate.getCurrentSection(this.course, this.sections).then((section) => { | ||||||
|                         this.loaded = true; |                         this.loaded = true; | ||||||
|                         this.sectionChanged(section); |                         this.sectionChanged(section); | ||||||
| @ -176,9 +184,12 @@ export class CoreCourseFormatComponent implements OnInit, OnChanges, OnDestroy { | |||||||
| 
 | 
 | ||||||
|                 if (!newSection) { |                 if (!newSection) { | ||||||
|                     // Section not found, calculate which one to use.
 |                     // Section not found, calculate which one to use.
 | ||||||
|                     newSection = this.cfDelegate.getCurrentSection(this.course, this.sections); |                     this.cfDelegate.getCurrentSection(this.course, this.sections).then((section) => { | ||||||
|  |                         this.sectionChanged(section); | ||||||
|  |                     }); | ||||||
|  |                 } else { | ||||||
|  |                     this.sectionChanged(newSection); | ||||||
|                 } |                 } | ||||||
|                 this.sectionChanged(newSection); |  | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
| @ -262,14 +273,14 @@ export class CoreCourseFormatComponent implements OnInit, OnChanges, OnDestroy { | |||||||
| 
 | 
 | ||||||
|             let j; |             let j; | ||||||
|             for (j = i - 1; j >= 1; j--) { |             for (j = i - 1; j >= 1; j--) { | ||||||
|                 if (this.sections[j].uservisible !== false && !this.sections[j].hiddenbynumsections) { |                 if (this.canViewSection(this.sections[j])) { | ||||||
|                     break; |                     break; | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|             this.previousSection = j >= 1 ? this.sections[j] : null; |             this.previousSection = j >= 1 ? this.sections[j] : null; | ||||||
| 
 | 
 | ||||||
|             for (j = i + 1; j < this.sections.length; j++) { |             for (j = i + 1; j < this.sections.length; j++) { | ||||||
|                 if (this.sections[j].uservisible !== false && !this.sections[j].hiddenbynumsections) { |                 if (this.canViewSection(this.sections[j])) { | ||||||
|                     break; |                     break; | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
| @ -437,4 +448,15 @@ export class CoreCourseFormatComponent implements OnInit, OnChanges, OnDestroy { | |||||||
|             component.callComponentFunction('ionViewDidLeave'); |             component.callComponentFunction('ionViewDidLeave'); | ||||||
|         }); |         }); | ||||||
|     } |     } | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * Check whether a section can be viewed. | ||||||
|  |      * | ||||||
|  |      * @param {any} section The section to check. | ||||||
|  |      * @return {boolean} Whether the section can be viewed. | ||||||
|  |      */ | ||||||
|  |     canViewSection(section: any): boolean { | ||||||
|  |         return section.uservisible !== false && !section.hiddenbynumsections && | ||||||
|  |                 section.id != CoreCourseProvider.STEALTH_MODULES_SECTION_ID; | ||||||
|  |     } | ||||||
| } | } | ||||||
|  | |||||||
| @ -10,7 +10,7 @@ | |||||||
| </ion-header> | </ion-header> | ||||||
| <ion-content> | <ion-content> | ||||||
|     <ng-container *ngFor="let section of sections"> |     <ng-container *ngFor="let section of sections"> | ||||||
|         <a ion-item *ngIf="!section.hiddenbynumsections" text-wrap (click)="selectSection(section)" [class.core-primary-item]="selected.id == section.id" [class.item-dimmed]="section.visible === 0 || section.uservisible === false" detail-none> |         <a ion-item *ngIf="!section.hiddenbynumsections && section.id != stealthModulesSectionId" text-wrap (click)="selectSection(section)" [class.core-primary-item]="selected.id == section.id" [class.item-dimmed]="section.visible === 0 || section.uservisible === false" detail-none> | ||||||
|             <core-icon name="fa-folder" item-start></core-icon> |             <core-icon name="fa-folder" item-start></core-icon> | ||||||
|             <h2><core-format-text [text]="section.formattedName || section.name"></core-format-text></h2> |             <h2><core-format-text [text]="section.formattedName || section.name"></core-format-text></h2> | ||||||
|             <ion-badge color="secondary" *ngIf="section.visible === 0 && section.uservisible !== false">{{ 'core.course.hiddenfromstudents' | translate }}</ion-badge> |             <ion-badge color="secondary" *ngIf="section.visible === 0 && section.uservisible !== false">{{ 'core.course.hiddenfromstudents' | translate }}</ion-badge> | ||||||
|  | |||||||
| @ -15,6 +15,7 @@ | |||||||
| import { Component } from '@angular/core'; | import { Component } from '@angular/core'; | ||||||
| import { IonicPage, NavParams, ViewController } from 'ionic-angular'; | import { IonicPage, NavParams, ViewController } from 'ionic-angular'; | ||||||
| import { CoreCourseHelperProvider } from '../../providers/helper'; | import { CoreCourseHelperProvider } from '../../providers/helper'; | ||||||
|  | import { CoreCourseProvider } from '../../providers/course'; | ||||||
| 
 | 
 | ||||||
| /** | /** | ||||||
|  * Page that displays course section selector. |  * Page that displays course section selector. | ||||||
| @ -26,6 +27,7 @@ import { CoreCourseHelperProvider } from '../../providers/helper'; | |||||||
| }) | }) | ||||||
| export class CoreCourseSectionSelectorPage { | export class CoreCourseSectionSelectorPage { | ||||||
| 
 | 
 | ||||||
|  |     stealthModulesSectionId = CoreCourseProvider.STEALTH_MODULES_SECTION_ID; | ||||||
|     sections: any; |     sections: any; | ||||||
|     selected: number; |     selected: number; | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -29,7 +29,8 @@ import { CoreCourseOfflineProvider } from './course-offline'; | |||||||
|  */ |  */ | ||||||
| @Injectable() | @Injectable() | ||||||
| export class CoreCourseProvider { | export class CoreCourseProvider { | ||||||
|     static ALL_SECTIONS_ID = -1; |     static ALL_SECTIONS_ID = -2; | ||||||
|  |     static STEALTH_MODULES_SECTION_ID = -1; | ||||||
|     static ACCESS_GUEST = 'courses_access_guest'; |     static ACCESS_GUEST = 'courses_access_guest'; | ||||||
|     static ACCESS_DEFAULT = 'courses_access_default'; |     static ACCESS_DEFAULT = 'courses_access_default'; | ||||||
| 
 | 
 | ||||||
| @ -266,9 +267,14 @@ export class CoreCourseProvider { | |||||||
|             // We have courseId, we can use core_course_get_contents for compatibility.
 |             // We have courseId, we can use core_course_get_contents for compatibility.
 | ||||||
|             this.logger.debug(`Getting module ${moduleId} in course ${courseId}`); |             this.logger.debug(`Getting module ${moduleId} in course ${courseId}`); | ||||||
| 
 | 
 | ||||||
|             const params = { |             const params: any = { | ||||||
|                     courseid: courseId, |                     courseid: courseId, | ||||||
|                     options: [] |                     options: [ | ||||||
|  |                         { | ||||||
|  |                             name: 'includestealthmodules', | ||||||
|  |                             value: 1 | ||||||
|  |                         } | ||||||
|  |                     ] | ||||||
|                 }, |                 }, | ||||||
|                 preSets: any = { |                 preSets: any = { | ||||||
|                     omitExpires: preferCache |                     omitExpires: preferCache | ||||||
| @ -501,10 +507,11 @@ export class CoreCourseProvider { | |||||||
|      * @param {boolean} [excludeContents] Do not return module contents (i.e: files inside a resource). |      * @param {boolean} [excludeContents] Do not return module contents (i.e: files inside a resource). | ||||||
|      * @param {CoreSiteWSPreSets} [preSets] Presets to use. |      * @param {CoreSiteWSPreSets} [preSets] Presets to use. | ||||||
|      * @param {string} [siteId] Site ID. If not defined, current site. |      * @param {string} [siteId] Site ID. If not defined, current site. | ||||||
|  |      * @param {boolean} [includeStealthModules] Whether to include stealth modules. Defaults to true. | ||||||
|      * @return {Promise}                The reject contains the error message, else contains the sections. |      * @return {Promise}                The reject contains the error message, else contains the sections. | ||||||
|      */ |      */ | ||||||
|     getSections(courseId?: number, excludeModules?: boolean, excludeContents?: boolean, preSets?: CoreSiteWSPreSets, |     getSections(courseId?: number, excludeModules?: boolean, excludeContents?: boolean, preSets?: CoreSiteWSPreSets, | ||||||
|         siteId?: string): Promise<any[]> { |         siteId?: string, includeStealthModules: boolean = true): Promise<any[]> { | ||||||
| 
 | 
 | ||||||
|         return this.sitesProvider.getSite(siteId).then((site) => { |         return this.sitesProvider.getSite(siteId).then((site) => { | ||||||
|             preSets = preSets || {}; |             preSets = preSets || {}; | ||||||
| @ -521,6 +528,10 @@ export class CoreCourseProvider { | |||||||
|                     { |                     { | ||||||
|                         name: 'excludecontents', |                         name: 'excludecontents', | ||||||
|                         value: excludeContents ? 1 : 0 |                         value: excludeContents ? 1 : 0 | ||||||
|  |                     }, | ||||||
|  |                     { | ||||||
|  |                         name: 'includestealthmodules', | ||||||
|  |                         value: includeStealthModules ? 1 : 0 | ||||||
|                     } |                     } | ||||||
|                 ] |                 ] | ||||||
|             }; |             }; | ||||||
|  | |||||||
| @ -5,6 +5,7 @@ information provided here is intended especially for developers. | |||||||
| 
 | 
 | ||||||
| - gulp was updated to v4. In order for gulp to work, you need to install gulp-cli: npm install -g gulp-cli | - gulp was updated to v4. In order for gulp to work, you need to install gulp-cli: npm install -g gulp-cli | ||||||
|   It's also recommended to update ionic cli to v4, otherwise some errors could be raised while building: npm install -g ionic |   It's also recommended to update ionic cli to v4, otherwise some errors could be raised while building: npm install -g ionic | ||||||
|  | - The value of the constant CoreCourseProvider.ALL_SECTIONS_ID has changed from -1 to -2. | ||||||
| 
 | 
 | ||||||
| === 3.5.2 === | === 3.5.2 === | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user