forked from CIT/Vmeda.Online
		
	Merge pull request #1275 from crazyserver/MOBILE-2352
MOBILE-2352 url: Implement url activity
This commit is contained in:
		
						commit
						e7f55cfca2
					
				
							
								
								
									
										45
									
								
								src/addon/mod/url/components/components.module.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								src/addon/mod/url/components/components.module.ts
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,45 @@
 | 
				
			|||||||
 | 
					// (C) Copyright 2015 Martin Dougiamas
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// Licensed under the Apache License, Version 2.0 (the "License");
 | 
				
			||||||
 | 
					// you may not use this file except in compliance with the License.
 | 
				
			||||||
 | 
					// You may obtain a copy of the License at
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					//     http://www.apache.org/licenses/LICENSE-2.0
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// Unless required by applicable law or agreed to in writing, software
 | 
				
			||||||
 | 
					// distributed under the License is distributed on an "AS IS" BASIS,
 | 
				
			||||||
 | 
					// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
				
			||||||
 | 
					// See the License for the specific language governing permissions and
 | 
				
			||||||
 | 
					// limitations under the License.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import { NgModule } from '@angular/core';
 | 
				
			||||||
 | 
					import { CommonModule } from '@angular/common';
 | 
				
			||||||
 | 
					import { IonicModule } from 'ionic-angular';
 | 
				
			||||||
 | 
					import { TranslateModule } from '@ngx-translate/core';
 | 
				
			||||||
 | 
					import { CoreComponentsModule } from '@components/components.module';
 | 
				
			||||||
 | 
					import { CoreDirectivesModule } from '@directives/directives.module';
 | 
				
			||||||
 | 
					import { CoreCourseComponentsModule } from '@core/course/components/components.module';
 | 
				
			||||||
 | 
					import { AddonModUrlIndexComponent } from './index/index';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@NgModule({
 | 
				
			||||||
 | 
					    declarations: [
 | 
				
			||||||
 | 
					        AddonModUrlIndexComponent
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    imports: [
 | 
				
			||||||
 | 
					        CommonModule,
 | 
				
			||||||
 | 
					        IonicModule,
 | 
				
			||||||
 | 
					        TranslateModule.forChild(),
 | 
				
			||||||
 | 
					        CoreComponentsModule,
 | 
				
			||||||
 | 
					        CoreDirectivesModule,
 | 
				
			||||||
 | 
					        CoreCourseComponentsModule
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    providers: [
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    exports: [
 | 
				
			||||||
 | 
					        AddonModUrlIndexComponent
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    entryComponents: [
 | 
				
			||||||
 | 
					        AddonModUrlIndexComponent
 | 
				
			||||||
 | 
					    ]
 | 
				
			||||||
 | 
					})
 | 
				
			||||||
 | 
					export class AddonModUrlComponentsModule {}
 | 
				
			||||||
							
								
								
									
										25
									
								
								src/addon/mod/url/components/index/index.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								src/addon/mod/url/components/index/index.html
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,25 @@
 | 
				
			|||||||
 | 
					<!-- Buttons to add to the header. -->
 | 
				
			||||||
 | 
					<core-navbar-buttons end>
 | 
				
			||||||
 | 
					    <core-context-menu>
 | 
				
			||||||
 | 
					        <core-context-menu-item *ngIf="externalUrl" [priority]="900" [content]="'core.openinbrowser' | translate" [href]="externalUrl" [iconAction]="'open'"></core-context-menu-item>
 | 
				
			||||||
 | 
					        <core-context-menu-item *ngIf="description" [priority]="800" [content]="'core.moduleintro' | translate" (action)="expandDescription()" [iconAction]="'arrow-forward'"></core-context-menu-item>
 | 
				
			||||||
 | 
					        <core-context-menu-item [priority]="700" [content]="'core.refresh' | translate" (action)="doRefresh(null, $event)" [iconAction]="refreshIcon" [closeOnClick]="false"></core-context-menu-item>
 | 
				
			||||||
 | 
					    </core-context-menu>
 | 
				
			||||||
 | 
					</core-navbar-buttons>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<!-- Content. -->
 | 
				
			||||||
 | 
					<core-loading [hideUntil]="loaded" class="core-loading-center">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <core-course-module-description *ngIf="mode != 'iframe'" [description]="description" [component]="component" [componentId]="componentId"></core-course-module-description>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <ion-item text-wrap>
 | 
				
			||||||
 | 
					        <h2>{{ 'addon.mod_url.pointingtourl' | translate }}</h2>
 | 
				
			||||||
 | 
					        <p>{{ url }}</p>
 | 
				
			||||||
 | 
					    </ion-item>
 | 
				
			||||||
 | 
					    <div padding>
 | 
				
			||||||
 | 
					        <a ion-button block (click)="go()" icon-start>
 | 
				
			||||||
 | 
					            <ion-icon name="link" start></ion-icon>
 | 
				
			||||||
 | 
					            {{ 'addon.mod_url.accessurl' | translate }}
 | 
				
			||||||
 | 
					        </a>
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
 | 
					</core-loading>
 | 
				
			||||||
							
								
								
									
										112
									
								
								src/addon/mod/url/components/index/index.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										112
									
								
								src/addon/mod/url/components/index/index.ts
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,112 @@
 | 
				
			|||||||
 | 
					// (C) Copyright 2015 Martin Dougiamas
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// Licensed under the Apache License, Version 2.0 (the "License");
 | 
				
			||||||
 | 
					// you may not use this file except in compliance with the License.
 | 
				
			||||||
 | 
					// You may obtain a copy of the License at
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					//     http://www.apache.org/licenses/LICENSE-2.0
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// Unless required by applicable law or agreed to in writing, software
 | 
				
			||||||
 | 
					// distributed under the License is distributed on an "AS IS" BASIS,
 | 
				
			||||||
 | 
					// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
				
			||||||
 | 
					// See the License for the specific language governing permissions and
 | 
				
			||||||
 | 
					// limitations under the License.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import { Component } from '@angular/core';
 | 
				
			||||||
 | 
					import { TranslateService } from '@ngx-translate/core';
 | 
				
			||||||
 | 
					import { CoreDomUtilsProvider } from '@providers/utils/dom';
 | 
				
			||||||
 | 
					import { CoreTextUtilsProvider } from '@providers/utils/text';
 | 
				
			||||||
 | 
					import { CoreCourseProvider } from '@core/course/providers/course';
 | 
				
			||||||
 | 
					import { CoreCourseModuleMainResourceComponent } from '@core/course/classes/main-resource-component';
 | 
				
			||||||
 | 
					import { AddonModUrlProvider } from '../../providers/url';
 | 
				
			||||||
 | 
					import { AddonModUrlHelperProvider } from '../../providers/helper';
 | 
				
			||||||
 | 
					import { CoreCourseHelperProvider } from '@core/course/providers/helper';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Component that displays a url.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					@Component({
 | 
				
			||||||
 | 
					    selector: 'addon-mod-url-index',
 | 
				
			||||||
 | 
					    templateUrl: 'index.html',
 | 
				
			||||||
 | 
					})
 | 
				
			||||||
 | 
					export class AddonModUrlIndexComponent extends CoreCourseModuleMainResourceComponent {
 | 
				
			||||||
 | 
					    component = AddonModUrlProvider.COMPONENT;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    canGetUrl: boolean;
 | 
				
			||||||
 | 
					    url: string;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    constructor(private urlProvider: AddonModUrlProvider, private courseProvider: CoreCourseProvider,
 | 
				
			||||||
 | 
					            protected domUtils: CoreDomUtilsProvider, protected textUtils: CoreTextUtilsProvider,
 | 
				
			||||||
 | 
					            protected translate: TranslateService, private urlHelper: AddonModUrlHelperProvider,
 | 
				
			||||||
 | 
					            protected courseHelper: CoreCourseHelperProvider) {
 | 
				
			||||||
 | 
					        super(textUtils, courseHelper, translate, domUtils);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Component being initialized.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    ngOnInit(): void {
 | 
				
			||||||
 | 
					        super.ngOnInit();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        this.canGetUrl = this.urlProvider.isGetUrlWSAvailable();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        this.loadContent();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Perform the invalidate content function.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @return {Promise<any>} Resolved when done.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    protected invalidateContent(): Promise<any> {
 | 
				
			||||||
 | 
					        return this.urlProvider.invalidateContent(this.module.id, this.courseId);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Download url contents.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param {boolean} [refresh] Whether we're refreshing data.
 | 
				
			||||||
 | 
					     * @return {Promise<any>} Promise resolved when done.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    protected fetchContent(refresh?: boolean): Promise<any> {
 | 
				
			||||||
 | 
					        let canGetUrl = this.canGetUrl;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // Fetch the module data.
 | 
				
			||||||
 | 
					        let promise;
 | 
				
			||||||
 | 
					        if (canGetUrl) {
 | 
				
			||||||
 | 
					            promise = this.urlProvider.getUrl(this.courseId, this.module.id);
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					            promise = Promise.reject(null);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return promise.catch(() => {
 | 
				
			||||||
 | 
					            canGetUrl = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // Fallback in case is not prefetch or not avalaible.
 | 
				
			||||||
 | 
					            return this.courseProvider.getModule(this.module.id, this.courseId);
 | 
				
			||||||
 | 
					        }).then((url) => {
 | 
				
			||||||
 | 
					            if (!canGetUrl) {
 | 
				
			||||||
 | 
					                if (!url.contents.length) {
 | 
				
			||||||
 | 
					                    // If the data was cached maybe we don't have contents. Reject.
 | 
				
			||||||
 | 
					                    return Promise.reject(null);
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            this.description = url.intro || url.description;
 | 
				
			||||||
 | 
					            this.dataRetrieved.emit(url);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            this.url = canGetUrl ? url.externalurl :
 | 
				
			||||||
 | 
					                            ((url.contents[0] && url.contents[0].fileurl) ? url.contents[0].fileurl : undefined);
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Opens a file.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    go(): void {
 | 
				
			||||||
 | 
					        this.urlProvider.logView(this.module.instance).then(() => {
 | 
				
			||||||
 | 
					            this.courseProvider.checkModuleCompletion(this.courseId, this.module.completionstatus);
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					        this.urlHelper.open(this.url);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										4
									
								
								src/addon/mod/url/lang/en.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								src/addon/mod/url/lang/en.json
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,4 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
					    "accessurl": "Access the URL",
 | 
				
			||||||
 | 
					    "pointingtourl": "URL that the resource points to."
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										16
									
								
								src/addon/mod/url/pages/index/index.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								src/addon/mod/url/pages/index/index.html
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,16 @@
 | 
				
			|||||||
 | 
					<ion-header>
 | 
				
			||||||
 | 
					    <ion-navbar>
 | 
				
			||||||
 | 
					        <ion-title><core-format-text [text]="title"></core-format-text></ion-title>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        <ion-buttons end>
 | 
				
			||||||
 | 
					            <!-- The buttons defined by the component will be added in here. -->
 | 
				
			||||||
 | 
					        </ion-buttons>
 | 
				
			||||||
 | 
					    </ion-navbar>
 | 
				
			||||||
 | 
					</ion-header>
 | 
				
			||||||
 | 
					<ion-content>
 | 
				
			||||||
 | 
					    <ion-refresher [enabled]="urlComponent.loaded" (ionRefresh)="urlComponent.doRefresh($event)">
 | 
				
			||||||
 | 
					        <ion-refresher-content pullingText="{{ 'core.pulltorefresh' | translate }}"></ion-refresher-content>
 | 
				
			||||||
 | 
					    </ion-refresher>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <addon-mod-url-index [module]="module" [courseId]="courseId" (dataRetrieved)="updateData($event)"></addon-mod-url-index>
 | 
				
			||||||
 | 
					</ion-content>
 | 
				
			||||||
							
								
								
									
										33
									
								
								src/addon/mod/url/pages/index/index.module.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								src/addon/mod/url/pages/index/index.module.ts
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,33 @@
 | 
				
			|||||||
 | 
					// (C) Copyright 2015 Martin Dougiamas
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// Licensed under the Apache License, Version 2.0 (the "License");
 | 
				
			||||||
 | 
					// you may not use this file except in compliance with the License.
 | 
				
			||||||
 | 
					// You may obtain a copy of the License at
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					//     http://www.apache.org/licenses/LICENSE-2.0
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// Unless required by applicable law or agreed to in writing, software
 | 
				
			||||||
 | 
					// distributed under the License is distributed on an "AS IS" BASIS,
 | 
				
			||||||
 | 
					// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
				
			||||||
 | 
					// See the License for the specific language governing permissions and
 | 
				
			||||||
 | 
					// limitations under the License.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import { NgModule } from '@angular/core';
 | 
				
			||||||
 | 
					import { IonicPageModule } from 'ionic-angular';
 | 
				
			||||||
 | 
					import { TranslateModule } from '@ngx-translate/core';
 | 
				
			||||||
 | 
					import { CoreDirectivesModule } from '@directives/directives.module';
 | 
				
			||||||
 | 
					import { AddonModUrlComponentsModule } from '../../components/components.module';
 | 
				
			||||||
 | 
					import { AddonModUrlIndexPage } from './index';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@NgModule({
 | 
				
			||||||
 | 
					    declarations: [
 | 
				
			||||||
 | 
					        AddonModUrlIndexPage,
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    imports: [
 | 
				
			||||||
 | 
					        CoreDirectivesModule,
 | 
				
			||||||
 | 
					        AddonModUrlComponentsModule,
 | 
				
			||||||
 | 
					        IonicPageModule.forChild(AddonModUrlIndexPage),
 | 
				
			||||||
 | 
					        TranslateModule.forChild()
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					})
 | 
				
			||||||
 | 
					export class AddonModUrlIndexPageModule {}
 | 
				
			||||||
							
								
								
									
										48
									
								
								src/addon/mod/url/pages/index/index.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										48
									
								
								src/addon/mod/url/pages/index/index.ts
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,48 @@
 | 
				
			|||||||
 | 
					// (C) Copyright 2015 Martin Dougiamas
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// Licensed under the Apache License, Version 2.0 (the "License");
 | 
				
			||||||
 | 
					// you may not use this file except in compliance with the License.
 | 
				
			||||||
 | 
					// You may obtain a copy of the License at
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					//     http://www.apache.org/licenses/LICENSE-2.0
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// Unless required by applicable law or agreed to in writing, software
 | 
				
			||||||
 | 
					// distributed under the License is distributed on an "AS IS" BASIS,
 | 
				
			||||||
 | 
					// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
				
			||||||
 | 
					// See the License for the specific language governing permissions and
 | 
				
			||||||
 | 
					// limitations under the License.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import { Component, ViewChild } from '@angular/core';
 | 
				
			||||||
 | 
					import { IonicPage, NavParams } from 'ionic-angular';
 | 
				
			||||||
 | 
					import { AddonModUrlIndexComponent } from '../../components/index/index';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Page that displays a url.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					@IonicPage({ segment: 'addon-mod-url-index' })
 | 
				
			||||||
 | 
					@Component({
 | 
				
			||||||
 | 
					    selector: 'page-addon-mod-url-index',
 | 
				
			||||||
 | 
					    templateUrl: 'index.html',
 | 
				
			||||||
 | 
					})
 | 
				
			||||||
 | 
					export class AddonModUrlIndexPage {
 | 
				
			||||||
 | 
					    @ViewChild(AddonModUrlIndexComponent) urlComponent: AddonModUrlIndexComponent;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    title: string;
 | 
				
			||||||
 | 
					    module: any;
 | 
				
			||||||
 | 
					    courseId: number;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    constructor(navParams: NavParams) {
 | 
				
			||||||
 | 
					        this.module = navParams.get('module') || {};
 | 
				
			||||||
 | 
					        this.courseId = navParams.get('courseId');
 | 
				
			||||||
 | 
					        this.title = this.module.name;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Update some data based on the url instance.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param {any} url Url instance.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    updateData(url: any): void {
 | 
				
			||||||
 | 
					        this.title = url.name || this.title;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										44
									
								
								src/addon/mod/url/providers/helper.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								src/addon/mod/url/providers/helper.ts
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,44 @@
 | 
				
			|||||||
 | 
					// (C) Copyright 2015 Martin Dougiamas
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// Licensed under the Apache License, Version 2.0 (the "License");
 | 
				
			||||||
 | 
					// you may not use this file except in compliance with the License.
 | 
				
			||||||
 | 
					// You may obtain a copy of the License at
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					//     http://www.apache.org/licenses/LICENSE-2.0
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// Unless required by applicable law or agreed to in writing, software
 | 
				
			||||||
 | 
					// distributed under the License is distributed on an "AS IS" BASIS,
 | 
				
			||||||
 | 
					// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
				
			||||||
 | 
					// See the License for the specific language governing permissions and
 | 
				
			||||||
 | 
					// limitations under the License.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import { Injectable } from '@angular/core';
 | 
				
			||||||
 | 
					import { CoreSitesProvider } from '@providers/sites';
 | 
				
			||||||
 | 
					import { CoreDomUtilsProvider } from '@providers/utils/dom';
 | 
				
			||||||
 | 
					import { CoreContentLinksHelperProvider } from '@core/contentlinks/providers/helper';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Service that provides helper functions for urls.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					@Injectable()
 | 
				
			||||||
 | 
					export class AddonModUrlHelperProvider {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    constructor(private sitesProvider: CoreSitesProvider, private domUtils: CoreDomUtilsProvider,
 | 
				
			||||||
 | 
					        private contentLinksHelper: CoreContentLinksHelperProvider) { }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Opens a URL.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param {string} url The URL to go to.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    open(url: string): void {
 | 
				
			||||||
 | 
					        const modal = this.domUtils.showModalLoading();
 | 
				
			||||||
 | 
					        this.contentLinksHelper.handleLink(url).then((treated) => {
 | 
				
			||||||
 | 
					            if (!treated) {
 | 
				
			||||||
 | 
					                return this.sitesProvider.getCurrentSite().openInBrowserWithAutoLoginIfSameSite(url);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }).finally(() => {
 | 
				
			||||||
 | 
					            modal.dismiss();
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										30
									
								
								src/addon/mod/url/providers/link-handler.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								src/addon/mod/url/providers/link-handler.ts
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,30 @@
 | 
				
			|||||||
 | 
					// (C) Copyright 2015 Martin Dougiamas
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// Licensed under the Apache License, Version 2.0 (the "License");
 | 
				
			||||||
 | 
					// you may not use this file except in compliance with the License.
 | 
				
			||||||
 | 
					// You may obtain a copy of the License at
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					//     http://www.apache.org/licenses/LICENSE-2.0
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// Unless required by applicable law or agreed to in writing, software
 | 
				
			||||||
 | 
					// distributed under the License is distributed on an "AS IS" BASIS,
 | 
				
			||||||
 | 
					// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
				
			||||||
 | 
					// See the License for the specific language governing permissions and
 | 
				
			||||||
 | 
					// limitations under the License.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import { Injectable } from '@angular/core';
 | 
				
			||||||
 | 
					import { CoreContentLinksModuleIndexHandler } from '@core/contentlinks/classes/module-index-handler';
 | 
				
			||||||
 | 
					import { CoreCourseHelperProvider } from '@core/course/providers/helper';
 | 
				
			||||||
 | 
					import { AddonModUrlProvider } from './url';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Handler to treat links to url.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					@Injectable()
 | 
				
			||||||
 | 
					export class AddonModUrlLinkHandler extends CoreContentLinksModuleIndexHandler {
 | 
				
			||||||
 | 
					    name = 'AddonModUrlLinkHandler';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    constructor(courseHelper: CoreCourseHelperProvider) {
 | 
				
			||||||
 | 
					        super(courseHelper, AddonModUrlProvider.COMPONENT, 'url');
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										107
									
								
								src/addon/mod/url/providers/module-handler.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										107
									
								
								src/addon/mod/url/providers/module-handler.ts
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,107 @@
 | 
				
			|||||||
 | 
					// (C) Copyright 2015 Martin Dougiamas
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// Licensed under the Apache License, Version 2.0 (the "License");
 | 
				
			||||||
 | 
					// you may not use this file except in compliance with the License.
 | 
				
			||||||
 | 
					// You may obtain a copy of the License at
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					//     http://www.apache.org/licenses/LICENSE-2.0
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// Unless required by applicable law or agreed to in writing, software
 | 
				
			||||||
 | 
					// distributed under the License is distributed on an "AS IS" BASIS,
 | 
				
			||||||
 | 
					// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
				
			||||||
 | 
					// See the License for the specific language governing permissions and
 | 
				
			||||||
 | 
					// limitations under the License.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import { Injectable } from '@angular/core';
 | 
				
			||||||
 | 
					import { NavController, NavOptions } from 'ionic-angular';
 | 
				
			||||||
 | 
					import { AddonModUrlIndexComponent } from '../components/index/index';
 | 
				
			||||||
 | 
					import { CoreCourseModuleHandler, CoreCourseModuleHandlerData } from '@core/course/providers/module-delegate';
 | 
				
			||||||
 | 
					import { CoreCourseProvider } from '@core/course/providers/course';
 | 
				
			||||||
 | 
					import { AddonModUrlProvider } from './url';
 | 
				
			||||||
 | 
					import { AddonModUrlHelperProvider } from './helper';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Handler to support url modules.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					@Injectable()
 | 
				
			||||||
 | 
					export class AddonModUrlModuleHandler implements CoreCourseModuleHandler {
 | 
				
			||||||
 | 
					    name = 'url';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    constructor(private courseProvider: CoreCourseProvider, private urlProvider: AddonModUrlProvider,
 | 
				
			||||||
 | 
					        private urlHelper: AddonModUrlHelperProvider) { }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Check if the handler is enabled on a site level.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @return {boolean} Whether or not the handler is enabled on a site level.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    isEnabled(): boolean {
 | 
				
			||||||
 | 
					        return true;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Get the data required to display the module in the course contents view.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param {any} module The module object.
 | 
				
			||||||
 | 
					     * @param {number} courseId The course ID.
 | 
				
			||||||
 | 
					     * @param {number} sectionId The section ID.
 | 
				
			||||||
 | 
					     * @return {CoreCourseModuleHandlerData} Data to render the module.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    getData(module: any, courseId: number, sectionId: number): CoreCourseModuleHandlerData {
 | 
				
			||||||
 | 
					        const handlerData = {
 | 
				
			||||||
 | 
					            icon: this.courseProvider.getModuleIconSrc('url'),
 | 
				
			||||||
 | 
					            title: module.name,
 | 
				
			||||||
 | 
					            class: 'addon-mod_url-handler',
 | 
				
			||||||
 | 
					            showDownloadButton: false,
 | 
				
			||||||
 | 
					            action(event: Event, navCtrl: NavController, module: any, courseId: number, options: NavOptions): void {
 | 
				
			||||||
 | 
					                navCtrl.push('AddonModUrlIndexPage', {module: module, courseId: courseId}, options);
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					            buttons: [ {
 | 
				
			||||||
 | 
					                hidden: !(module.contents && module.contents[0] && module.contents[0].fileurl),
 | 
				
			||||||
 | 
					                icon: 'link',
 | 
				
			||||||
 | 
					                label: 'core.openinbrowser',
 | 
				
			||||||
 | 
					                action: (event: Event, navCtrl: NavController, module: any, courseId: number): void => {
 | 
				
			||||||
 | 
					                    this.hideLinkButton(module, courseId).then((hide) => {
 | 
				
			||||||
 | 
					                        if (!hide) {
 | 
				
			||||||
 | 
					                            this.urlProvider.logView(module.instance).then(() => {
 | 
				
			||||||
 | 
					                                this.courseProvider.checkModuleCompletion(courseId, module.completionstatus);
 | 
				
			||||||
 | 
					                            });
 | 
				
			||||||
 | 
					                            this.urlHelper.open(module.contents[0].fileurl);
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                    });
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            } ]
 | 
				
			||||||
 | 
					        };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        this.hideLinkButton(module, courseId).then((hideButton) => {
 | 
				
			||||||
 | 
					            handlerData.buttons[0].hidden = hideButton;
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return handlerData;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Returns if contents are loaded to show link button.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param {any} module The module object.
 | 
				
			||||||
 | 
					     * @param {number} courseId The course ID.
 | 
				
			||||||
 | 
					     * @return {Promise<boolean>} Resolved when done.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    protected hideLinkButton(module: any, courseId: number): Promise<boolean> {
 | 
				
			||||||
 | 
					        return this.courseProvider.loadModuleContents(module, courseId).then(() => {
 | 
				
			||||||
 | 
					            return !(module.contents && module.contents[0] && module.contents[0].fileurl);
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Get the component to render the module. This is needed to support singleactivity course format.
 | 
				
			||||||
 | 
					     * The component returned must implement CoreCourseModuleMainComponent.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param {any} course The course object.
 | 
				
			||||||
 | 
					     * @param {any} module The module object.
 | 
				
			||||||
 | 
					     * @return {any} The component to use, undefined if not found.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    getMainComponent(course: any, module: any): any {
 | 
				
			||||||
 | 
					        return AddonModUrlIndexComponent;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										146
									
								
								src/addon/mod/url/providers/url.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										146
									
								
								src/addon/mod/url/providers/url.ts
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,146 @@
 | 
				
			|||||||
 | 
					// (C) Copyright 2015 Martin Dougiamas
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// Licensed under the Apache License, Version 2.0 (the "License");
 | 
				
			||||||
 | 
					// you may not use this file except in compliance with the License.
 | 
				
			||||||
 | 
					// You may obtain a copy of the License at
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					//     http://www.apache.org/licenses/LICENSE-2.0
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// Unless required by applicable law or agreed to in writing, software
 | 
				
			||||||
 | 
					// distributed under the License is distributed on an "AS IS" BASIS,
 | 
				
			||||||
 | 
					// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
				
			||||||
 | 
					// See the License for the specific language governing permissions and
 | 
				
			||||||
 | 
					// limitations under the License.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import { Injectable } from '@angular/core';
 | 
				
			||||||
 | 
					import { CoreLoggerProvider } from '@providers/logger';
 | 
				
			||||||
 | 
					import { CoreSitesProvider } from '@providers/sites';
 | 
				
			||||||
 | 
					import { CoreUtilsProvider } from '@providers/utils/utils';
 | 
				
			||||||
 | 
					import { CoreCourseProvider } from '@core/course/providers/course';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Service that provides some features for urls.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					@Injectable()
 | 
				
			||||||
 | 
					export class AddonModUrlProvider {
 | 
				
			||||||
 | 
					    static COMPONENT = 'mmaModUrl';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    protected ROOT_CACHE_KEY = 'mmaModUrl:';
 | 
				
			||||||
 | 
					    protected logger;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    constructor(logger: CoreLoggerProvider, private sitesProvider: CoreSitesProvider, private courseProvider: CoreCourseProvider,
 | 
				
			||||||
 | 
					            private utils: CoreUtilsProvider) {
 | 
				
			||||||
 | 
					        this.logger = logger.getInstance('AddonModUrlProvider');
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Get cache key for url data WS calls.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param {number} courseId Course ID.
 | 
				
			||||||
 | 
					     * @return {string}         Cache key.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    protected getUrlCacheKey(courseId: number): string {
 | 
				
			||||||
 | 
					        return this.ROOT_CACHE_KEY + 'url:' + courseId;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Get a url data.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param {number} courseId Course ID.
 | 
				
			||||||
 | 
					     * @param {string} key     Name of the property to check.
 | 
				
			||||||
 | 
					     * @param {any}  value   Value to search.
 | 
				
			||||||
 | 
					     * @param {string} [siteId] Site ID. If not defined, current site.
 | 
				
			||||||
 | 
					     * @return {Promise<any>}  Promise resolved when the url is retrieved.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    protected getUrlDataByKey(courseId: number, key: string, value: any, siteId?: string): Promise<any> {
 | 
				
			||||||
 | 
					        return this.sitesProvider.getSite(siteId).then((site) => {
 | 
				
			||||||
 | 
					            const params = {
 | 
				
			||||||
 | 
					                    courseids: [courseId]
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					                preSets = {
 | 
				
			||||||
 | 
					                    cacheKey: this.getUrlCacheKey(courseId)
 | 
				
			||||||
 | 
					                };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            return site.read('mod_url_get_urls_by_courses', params, preSets).then((response) => {
 | 
				
			||||||
 | 
					                if (response && response.urls) {
 | 
				
			||||||
 | 
					                    const currentUrl = response.urls.find((url) => {
 | 
				
			||||||
 | 
					                        return url[key] == value;
 | 
				
			||||||
 | 
					                    });
 | 
				
			||||||
 | 
					                    if (currentUrl) {
 | 
				
			||||||
 | 
					                        return currentUrl;
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                return Promise.reject(null);
 | 
				
			||||||
 | 
					            });
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Get a url by course module ID.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param {number} courseId Course ID.
 | 
				
			||||||
 | 
					     * @param {number} cmId     Course module ID.
 | 
				
			||||||
 | 
					     * @param {string} [siteId] Site ID. If not defined, current site.
 | 
				
			||||||
 | 
					     * @return {Promise<any>}   Promise resolved when the url is retrieved.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    getUrl(courseId: number, cmId: number, siteId?: string): Promise<any> {
 | 
				
			||||||
 | 
					        return this.getUrlDataByKey(courseId, 'coursemodule', cmId, siteId);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Invalidate the prefetched content.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param  {number} moduleId The module ID.
 | 
				
			||||||
 | 
					     * @param  {number} courseId Course ID of the module.
 | 
				
			||||||
 | 
					     * @param  {string} [siteId] Site ID. If not defined, current site.
 | 
				
			||||||
 | 
					     * @return {Promise<any>}    Promise resolved when the data is invalidated.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    invalidateContent(moduleId: number, courseId: number, siteId?: string): Promise<any> {
 | 
				
			||||||
 | 
					        siteId = siteId || this.sitesProvider.getCurrentSiteId();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        const promises = [];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        promises.push(this.invalidateUrlData(courseId, siteId));
 | 
				
			||||||
 | 
					        promises.push(this.courseProvider.invalidateModule(moduleId, siteId));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return this.utils.allPromises(promises);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Invalidates url data.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @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.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    invalidateUrlData(courseId: number, siteId?: string): Promise<any> {
 | 
				
			||||||
 | 
					        return this.sitesProvider.getSite(siteId).then((site) => {
 | 
				
			||||||
 | 
					            return site.invalidateWsCacheForKey(this.getUrlCacheKey(courseId));
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Returns whether or not getUrl WS available or not.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @return {boolean} If WS is abalaible.
 | 
				
			||||||
 | 
					     * @since 3.3
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    isGetUrlWSAvailable(): boolean {
 | 
				
			||||||
 | 
					        return this.sitesProvider.wsAvailableInCurrentSite('mod_url_get_urls_by_courses');
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Report the url as being viewed.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param {number} id Module ID.
 | 
				
			||||||
 | 
					     * @return {Promise<any>}  Promise resolved when the WS call is successful.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    logView(id: number): Promise<any> {
 | 
				
			||||||
 | 
					        const params = {
 | 
				
			||||||
 | 
					            urlid: id
 | 
				
			||||||
 | 
					        };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return this.sitesProvider.getCurrentSite().write('mod_url_view_url', params);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										43
									
								
								src/addon/mod/url/url.module.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								src/addon/mod/url/url.module.ts
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,43 @@
 | 
				
			|||||||
 | 
					// (C) Copyright 2015 Martin Dougiamas
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// Licensed under the Apache License, Version 2.0 (the "License");
 | 
				
			||||||
 | 
					// you may not use this file except in compliance with the License.
 | 
				
			||||||
 | 
					// You may obtain a copy of the License at
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					//     http://www.apache.org/licenses/LICENSE-2.0
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// Unless required by applicable law or agreed to in writing, software
 | 
				
			||||||
 | 
					// distributed under the License is distributed on an "AS IS" BASIS,
 | 
				
			||||||
 | 
					// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
				
			||||||
 | 
					// See the License for the specific language governing permissions and
 | 
				
			||||||
 | 
					// limitations under the License.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import { NgModule } from '@angular/core';
 | 
				
			||||||
 | 
					import { AddonModUrlComponentsModule } from './components/components.module';
 | 
				
			||||||
 | 
					import { AddonModUrlModuleHandler } from './providers/module-handler';
 | 
				
			||||||
 | 
					import { AddonModUrlProvider } from './providers/url';
 | 
				
			||||||
 | 
					import { AddonModUrlLinkHandler } from './providers/link-handler';
 | 
				
			||||||
 | 
					import { AddonModUrlHelperProvider } from './providers/helper';
 | 
				
			||||||
 | 
					import { CoreContentLinksDelegate } from '@core/contentlinks/providers/delegate';
 | 
				
			||||||
 | 
					import { CoreCourseModuleDelegate } from '@core/course/providers/module-delegate';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@NgModule({
 | 
				
			||||||
 | 
					    declarations: [
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    imports: [
 | 
				
			||||||
 | 
					        AddonModUrlComponentsModule
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    providers: [
 | 
				
			||||||
 | 
					        AddonModUrlProvider,
 | 
				
			||||||
 | 
					        AddonModUrlModuleHandler,
 | 
				
			||||||
 | 
					        AddonModUrlHelperProvider,
 | 
				
			||||||
 | 
					        AddonModUrlLinkHandler
 | 
				
			||||||
 | 
					    ]
 | 
				
			||||||
 | 
					})
 | 
				
			||||||
 | 
					export class AddonModUrlModule {
 | 
				
			||||||
 | 
					    constructor(moduleDelegate: CoreCourseModuleDelegate, moduleHandler: AddonModUrlModuleHandler,
 | 
				
			||||||
 | 
					            contentLinksDelegate: CoreContentLinksDelegate, linkHandler: AddonModUrlLinkHandler) {
 | 
				
			||||||
 | 
					        moduleDelegate.registerHandler(moduleHandler);
 | 
				
			||||||
 | 
					        contentLinksDelegate.registerHandler(linkHandler);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -79,6 +79,7 @@ import { AddonModLabelModule } from '@addon/mod/label/label.module';
 | 
				
			|||||||
import { AddonModResourceModule } from '@addon/mod/resource/resource.module';
 | 
					import { AddonModResourceModule } from '@addon/mod/resource/resource.module';
 | 
				
			||||||
import { AddonModFolderModule } from '@addon/mod/folder/folder.module';
 | 
					import { AddonModFolderModule } from '@addon/mod/folder/folder.module';
 | 
				
			||||||
import { AddonModPageModule } from '@addon/mod/page/page.module';
 | 
					import { AddonModPageModule } from '@addon/mod/page/page.module';
 | 
				
			||||||
 | 
					import { AddonModUrlModule } from '@addon/mod/url/url.module';
 | 
				
			||||||
import { AddonMessagesModule } from '@addon/messages/messages.module';
 | 
					import { AddonMessagesModule } from '@addon/messages/messages.module';
 | 
				
			||||||
import { AddonPushNotificationsModule } from '@addon/pushnotifications/pushnotifications.module';
 | 
					import { AddonPushNotificationsModule } from '@addon/pushnotifications/pushnotifications.module';
 | 
				
			||||||
import { AddonRemoteThemesModule } from '@addon/remotethemes/remotethemes.module';
 | 
					import { AddonRemoteThemesModule } from '@addon/remotethemes/remotethemes.module';
 | 
				
			||||||
@ -162,6 +163,7 @@ export const CORE_PROVIDERS: any[] = [
 | 
				
			|||||||
        AddonModResourceModule,
 | 
					        AddonModResourceModule,
 | 
				
			||||||
        AddonModFolderModule,
 | 
					        AddonModFolderModule,
 | 
				
			||||||
        AddonModPageModule,
 | 
					        AddonModPageModule,
 | 
				
			||||||
 | 
					        AddonModUrlModule,
 | 
				
			||||||
        AddonMessagesModule,
 | 
					        AddonMessagesModule,
 | 
				
			||||||
        AddonPushNotificationsModule,
 | 
					        AddonPushNotificationsModule,
 | 
				
			||||||
        AddonRemoteThemesModule
 | 
					        AddonRemoteThemesModule
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user