MOBILE-2317 user: Solve PR errors and lints

main
Pau Ferrer Ocaña 2018-01-25 13:19:11 +01:00
parent 96d548e706
commit debfb5c6c6
54 changed files with 158 additions and 135 deletions

View File

@ -46,7 +46,7 @@ export class AddonCalendarModule {
localNotificationsProvider.registerClick(AddonCalendarProvider.COMPONENT, (data) => {
if (data.eventid) {
initDelegate.ready().then(() => {
calendarProvider.isDisabled(data.siteId).then(function(disabled) {
calendarProvider.isDisabled(data.siteId).then((disabled) => {
if (disabled) {
// The calendar is disabled in the site, don't open it.
return;

View File

@ -45,10 +45,10 @@ export class AddonCalendarEventPage {
courseName: string;
notificationsEnabled = false;
constructor(private translate: TranslateService, private calendarProvider: AddonCalendarProvider, private navParams: NavParams,
constructor(private translate: TranslateService, private calendarProvider: AddonCalendarProvider, navParams: NavParams,
private domUtils: CoreDomUtilsProvider, private coursesProvider: CoreCoursesProvider,
private calendarHelper: AddonCalendarHelperProvider, private sitesProvider: CoreSitesProvider,
private localNotificationsProvider: CoreLocalNotificationsProvider, private courseProvider: CoreCourseProvider) {
private calendarHelper: AddonCalendarHelperProvider, sitesProvider: CoreSitesProvider,
localNotificationsProvider: CoreLocalNotificationsProvider, private courseProvider: CoreCourseProvider) {
this.eventId = navParams.get('id');
this.notificationsEnabled = localNotificationsProvider.isAvailable();

View File

@ -63,11 +63,11 @@ export class AddonCalendarListPage implements OnDestroy {
course: this.allCourses
};
constructor(private translate: TranslateService, private calendarProvider: AddonCalendarProvider, private navParams: NavParams,
constructor(private translate: TranslateService, private calendarProvider: AddonCalendarProvider, navParams: NavParams,
private domUtils: CoreDomUtilsProvider, private coursesProvider: CoreCoursesProvider, private utils: CoreUtilsProvider,
private calendarHelper: AddonCalendarHelperProvider, private sitesProvider: CoreSitesProvider,
private localNotificationsProvider: CoreLocalNotificationsProvider, private popoverCtrl: PopoverController,
private eventsProvider: CoreEventsProvider, private navCtrl: NavController, private appProvider: CoreAppProvider) {
private calendarHelper: AddonCalendarHelperProvider, sitesProvider: CoreSitesProvider,
localNotificationsProvider: CoreLocalNotificationsProvider, private popoverCtrl: PopoverController,
eventsProvider: CoreEventsProvider, private navCtrl: NavController, appProvider: CoreAppProvider) {
this.siteHomeId = sitesProvider.getCurrentSite().getSiteHomeId();
this.notificationsEnabled = localNotificationsProvider.isAvailable();

View File

@ -14,7 +14,6 @@
import { Injectable } from '@angular/core';
import { CoreLoggerProvider } from '../../../providers/logger';
import { CoreSitesProvider } from '../../../providers/sites';
import { CoreCourseProvider } from '../../../core/course/providers/course';
/**
@ -32,7 +31,7 @@ export class AddonCalendarHelperProvider {
'category': 'albums'
};
constructor(logger: CoreLoggerProvider, private sitesProvider: CoreSitesProvider, private courseProvider: CoreCourseProvider) {
constructor(logger: CoreLoggerProvider, private courseProvider: CoreCourseProvider) {
this.logger = logger.getInstance('AddonCalendarHelperProvider');
}

View File

@ -14,6 +14,7 @@
import { Component, Input, OnInit } from '@angular/core';
import { FormGroup, FormBuilder, Validators } from '@angular/forms';
import { CoreUtilsProvider } from '../../../../providers/utils/utils';
/**
* Directive to render a checkbox user profile field.
@ -28,7 +29,7 @@ export class AddonUserProfileFieldCheckboxComponent implements OnInit {
@Input() disabled?: boolean = false; // True if disabled. Defaults to false.
@Input() form?: FormGroup; // Form where to add the form control.
constructor(private fb: FormBuilder) {}
constructor(private fb: FormBuilder, protected utils: CoreUtilsProvider) {}
/**
* Component being initialized.
@ -41,10 +42,11 @@ export class AddonUserProfileFieldCheckboxComponent implements OnInit {
// Initialize the value.
let formData = {
value: field.defaultdata && field.defaultdata !== '0' && field.defaultdata !== 'false',
value: this.utils.isTrueOrOne(field.defaultdata),
disabled: this.disabled
};
this.form.addControl(field.modelName, this.fb.control(formData, field.required && !field.locked ? Validators.requiredTrue : null));
this.form.addControl(field.modelName, this.fb.control(formData,
field.required && !field.locked ? Validators.requiredTrue : null));
}
}

View File

@ -13,7 +13,8 @@
// See the License for the specific language governing permissions and
// limitations under the License.
import { Injectable } from '@angular/core';
import { CoreUserProfileFieldHandler, CoreUserProfileFieldHandlerData } from '../../../../core/user/providers/user-profile-field-delegate';
import { CoreUserProfileFieldHandler, CoreUserProfileFieldHandlerData } from
'../../../../core/user/providers/user-profile-field-delegate';
import { AddonUserProfileFieldCheckboxComponent } from '../component/checkbox';
/**

View File

@ -15,6 +15,7 @@
import { Component, Input, OnInit } from '@angular/core';
import { FormGroup, FormBuilder, Validators } from '@angular/forms';
import { CoreTimeUtilsProvider } from '../../../../providers/utils/time';
import { CoreUtilsProvider } from '../../../../providers/utils/utils';
/**
* Directive to render a datetime user profile field.
@ -29,7 +30,7 @@ export class AddonUserProfileFieldDatetimeComponent implements OnInit {
@Input() disabled?: boolean = false; // True if disabled. Defaults to false.
@Input() form?: FormGroup; // Form where to add the form control.
constructor(private fb: FormBuilder, private timeUtils: CoreTimeUtilsProvider) {}
constructor(private fb: FormBuilder, private timeUtils: CoreTimeUtilsProvider, protected utils: CoreUtilsProvider) {}
/**
* Component being initialized.
@ -41,7 +42,7 @@ export class AddonUserProfileFieldDatetimeComponent implements OnInit {
field.modelName = 'profile_field_' + field.shortname;
// Check if it's only date or it has time too.
let hasTime = field.param3 && field.param3 !== '0' && field.param3 !== 'false';
let hasTime = this.utils.isTrueOrOne(field.param3);
field.format = hasTime ? this.timeUtils.getLocalizedDateFormat('LLL') : this.timeUtils.getLocalizedDateFormat('LL');
// Check min value.
@ -64,7 +65,8 @@ export class AddonUserProfileFieldDatetimeComponent implements OnInit {
value: field.defaultdata,
disabled: this.disabled
};
this.form.addControl(field.modelName, this.fb.control(formData, field.required && !field.locked ? Validators.required : null));
this.form.addControl(field.modelName, this.fb.control(formData,
field.required && !field.locked ? Validators.required : null));
}
}

View File

@ -13,9 +13,9 @@
// See the License for the specific language governing permissions and
// limitations under the License.
import { Injectable } from '@angular/core';
import { CoreUserProfileFieldHandler, CoreUserProfileFieldHandlerData } from '../../../../core/user/providers/user-profile-field-delegate';
import { CoreUserProfileFieldHandler, CoreUserProfileFieldHandlerData } from
'../../../../core/user/providers/user-profile-field-delegate';
import { AddonUserProfileFieldDatetimeComponent } from '../component/datetime';
import { Platform } from 'ionic-angular';
/**
* Datetime user profile field handlers.
@ -24,7 +24,7 @@ import { Platform } from 'ionic-angular';
export class AddonUserProfileFieldDatetimeHandler implements CoreUserProfileFieldHandler {
name = 'datetime';
constructor(private platform: Platform) {}
constructor() {}
/**
* Whether or not the handler is enabled on a site level.

View File

@ -51,7 +51,8 @@ export class AddonUserProfileFieldMenuComponent implements OnInit {
disabled: this.disabled
};
// Initialize the value using default data.
this.form.addControl(field.modelName, this.fb.control(formData, field.required && !field.locked ? Validators.required : null));
this.form.addControl(field.modelName, this.fb.control(formData,
field.required && !field.locked ? Validators.required : null));
}
}

View File

@ -13,7 +13,8 @@
// See the License for the specific language governing permissions and
// limitations under the License.
import { Injectable } from '@angular/core';
import { CoreUserProfileFieldHandler, CoreUserProfileFieldHandlerData } from '../../../../core/user/providers/user-profile-field-delegate';
import { CoreUserProfileFieldHandler, CoreUserProfileFieldHandlerData } from
'../../../../core/user/providers/user-profile-field-delegate';
import { AddonUserProfileFieldMenuComponent } from '../component/menu';
/**

View File

@ -14,6 +14,7 @@
import { Component, Input, OnInit } from '@angular/core';
import { FormGroup, FormBuilder, Validators } from '@angular/forms';
import { CoreUtilsProvider } from '../../../../providers/utils/utils';
/**
* Directive to render a text user profile field.
@ -28,7 +29,7 @@ export class AddonUserProfileFieldTextComponent implements OnInit {
@Input() disabled?: boolean = false; // True if disabled. Defaults to false.
@Input() form?: FormGroup; // Form where to add the form control.
constructor(private fb: FormBuilder) {}
constructor(private fb: FormBuilder, protected utils: CoreUtilsProvider) {}
/**
* Component being initialized.
@ -45,14 +46,15 @@ export class AddonUserProfileFieldTextComponent implements OnInit {
}
// Check if it's a password or text.
field.inputType = field.param3 && field.param3 !== '0' && field.param3 !== 'false' ? 'password' : 'text';
field.inputType = this.utils.isTrueOrOne(field.param3) ? 'password' : 'text';
let formData = {
value: field.defaultdata,
disabled: this.disabled
};
// Initialize the value using default data.
this.form.addControl(field.modelName, this.fb.control(formData, field.required && !field.locked ? Validators.required : null));
this.form.addControl(field.modelName, this.fb.control(formData,
field.required && !field.locked ? Validators.required : null));
}
}

View File

@ -13,7 +13,8 @@
// See the License for the specific language governing permissions and
// limitations under the License.
import { Injectable } from '@angular/core';
import { CoreUserProfileFieldHandler, CoreUserProfileFieldHandlerData } from '../../../../core/user/providers/user-profile-field-delegate';
import { CoreUserProfileFieldHandler, CoreUserProfileFieldHandlerData } from
'../../../../core/user/providers/user-profile-field-delegate';
import { AddonUserProfileFieldTextComponent } from '../component/text';
import { CoreTextUtilsProvider } from '../../../../providers/utils/text';

View File

@ -40,15 +40,15 @@ export class AddonUserProfileFieldTextareaComponent implements OnInit {
if (field && this.edit && this.form) {
field.modelName = 'profile_field_' + field.shortname;
let formData = {
value: field.defaultdata,
disabled: this.disabled
};
this.control = new FormControl(formData, field.required && !field.locked ? Validators.required : null);
this.form.addControl(field.modelName, this.control);
}
let formData = {
value: field.defaultdata,
disabled: this.disabled
};
this.control = new FormControl(formData, field.required && !field.locked ? Validators.required : null);
this.form.addControl(field.modelName, this.control);
}
}

View File

@ -13,7 +13,8 @@
// See the License for the specific language governing permissions and
// limitations under the License.
import { Injectable } from '@angular/core';
import { CoreUserProfileFieldHandler, CoreUserProfileFieldHandlerData } from '../../../../core/user/providers/user-profile-field-delegate';
import { CoreUserProfileFieldHandler, CoreUserProfileFieldHandlerData } from
'../../../../core/user/providers/user-profile-field-delegate';
import { AddonUserProfileFieldTextareaComponent } from '../component/textarea';
import { CoreTextUtilsProvider } from '../../../../providers/utils/text';

View File

@ -39,7 +39,7 @@ export class CoreDelegate {
/**
* Logger instance get from CoreLoggerProvider.
* @type {function}
* @type {any}
*/
protected logger;
@ -84,7 +84,6 @@ export class CoreDelegate {
constructor(delegateName: string, protected loggerProvider: CoreLoggerProvider, protected sitesProvider: CoreSitesProvider,
protected eventsProvider: CoreEventsProvider) {
this.logger = this.loggerProvider.getInstance(delegateName);
this.sitesProvider = sitesProvider;
// Update handlers on this cases.
eventsProvider.on(CoreEventsProvider.LOGIN, this.updateHandlers.bind(this));
@ -151,9 +150,9 @@ export class CoreDelegate {
*
* @param {string} name The handler name.
* @param {boolean} [enabled] Only enabled, or any.
* @return {boolean} If the controller is installed or not.
* @return {boolean} If the handler is registered or not.
*/
hasHandler(name: string, enabled = false) : boolean {
hasHandler(name: string, enabled = false): boolean {
return enabled ? typeof this.enabledHandlers[name] !== 'undefined' : typeof this.handlers[name] !== 'undefined';
}
@ -172,9 +171,12 @@ export class CoreDelegate {
}
/**
* Register a profile handler.
* Register a handler.
*
* @param {CoreDelegateHandler} handler The handler delegate object to register.
* @return {boolean} True when registered, false if already registered.
*/
registerHandler(handler: CoreDelegateHandler) {
registerHandler(handler: CoreDelegateHandler): boolean {
if (typeof this.handlers[handler.name] !== 'undefined') {
this.logger.log(`Addon '${handler.name}' already registered`);
return false;

View File

@ -26,7 +26,7 @@ export class CoreCoursePickerMenuPopoverComponent {
courses: any[];
courseId = -1;
constructor(private navParams: NavParams, private viewCtrl: ViewController) {
constructor(navParams: NavParams, private viewCtrl: ViewController) {
this.courses = navParams.get('courses') || [];
this.courseId = navParams.get('courseId') || -1;
}

View File

@ -29,8 +29,7 @@ import { Keyboard } from '@ionic-native/keyboard';
* could be easily broken.
*
* Example:
* <core-rich-text-editor model="newpost" placeholder="{{ 'mma.mod_forum.message' | translate }}" scroll-handle="mmaScrollHandle">
* </core-rich-text-editor>
* <core-rich-text-editor item-content [control]="control" [placeholder]="field.name"></core-rich-text-editor>
*
* In the example above, the text written in the editor will be stored in newpost.text.
*/

View File

@ -14,9 +14,8 @@
// Code based on https://github.com/martinpritchardelevate/ionic-split-pane-demo
import { Component, ViewChild, Injectable, Input, ElementRef, OnInit } from '@angular/core';
import { Component, ViewChild, Input, ElementRef, OnInit } from '@angular/core';
import { NavController, Nav } from 'ionic-angular';
import { CoreSplitViewPlaceholderPage } from './placeholder/placeholder';
/**
* Directive to create a split view layout.

View File

@ -12,8 +12,7 @@
// See the License for the specific language governing permissions and
// limitations under the License.
import { Component, Input, Output, OnInit, OnDestroy, ElementRef, EventEmitter, ContentChild, TemplateRef,
ViewChild } from '@angular/core';
import { Component, Input, Output, OnInit, OnDestroy, ElementRef, EventEmitter, ContentChild, TemplateRef } from '@angular/core';
import { CoreTabsComponent } from './tabs';
import { Content } from 'ionic-angular';

View File

@ -13,7 +13,7 @@
// limitations under the License.
import { Component, Input, Output, EventEmitter, OnInit, OnChanges, AfterViewInit, ViewChild, ElementRef,
SimpleChange } from '@angular/core';
SimpleChange } from '@angular/core';
import { CoreTabComponent } from './tab';
import { Content } from 'ionic-angular';

View File

@ -72,7 +72,7 @@ export class CoreContentLinksHelperProvider {
*/
goInSite(navCtrl: NavController, pageName: string, pageParams: any, siteId?: string) : void {
siteId = siteId || this.sitesProvider.getCurrentSiteId();
if (siteId == this.sitesProvider.getCurrentSiteId()) {
if (navCtrl && siteId == this.sitesProvider.getCurrentSiteId()) {
navCtrl.push(pageName, pageParams);
} else {
this.loginHelper.redirect(pageName, pageParams, siteId);

View File

@ -13,9 +13,6 @@
// limitations under the License.
import { Component, Input, OnInit } from '@angular/core';
import { IonicPage, NavParams } from 'ionic-angular';
import { TranslateService } from '@ngx-translate/core';
import { CoreTextUtilsProvider } from '../../../../providers/utils/text';
import { CoreCourseProvider } from '../../providers/course';
import { CoreCourseModuleDelegate } from '../../providers/module-delegate';
@ -34,8 +31,7 @@ export class CoreCourseUnsupportedModuleComponent implements OnInit {
isSupportedByTheApp: boolean;
moduleName: string;
constructor(navParams: NavParams, private translate: TranslateService, private textUtils: CoreTextUtilsProvider,
private courseProvider: CoreCourseProvider, private moduleDelegate: CoreCourseModuleDelegate) {}
constructor(private courseProvider: CoreCourseProvider, private moduleDelegate: CoreCourseModuleDelegate) {}
/**
* Component being initialized.

View File

@ -13,7 +13,7 @@
// limitations under the License.
import { Component } from '@angular/core';
import { IonicPage, NavParams, NavController } from 'ionic-angular';
import { IonicPage, NavParams } from 'ionic-angular';
import { TranslateService } from '@ngx-translate/core';
import { CoreTextUtilsProvider } from '../../../../providers/utils/text';
@ -28,8 +28,7 @@ import { CoreTextUtilsProvider } from '../../../../providers/utils/text';
export class CoreCourseUnsupportedModulePage {
module: any;
constructor(navParams: NavParams, private translate: TranslateService, private textUtils: CoreTextUtilsProvider,
private navCtrl: NavController) {
constructor(navParams: NavParams, private translate: TranslateService, private textUtils: CoreTextUtilsProvider) {
this.module = navParams.get('module') || {};
}

View File

@ -25,7 +25,7 @@ import { CoreCoursesDelegate, CoreCoursesHandlerToDisplay } from '../../courses/
import { CoreSiteHomeProvider } from '../../sitehome/providers/sitehome';
import { CoreCourseProvider } from './course';
import { CoreCourseModuleDelegate } from './module-delegate';
import { CoreCourseModulePrefetchDelegate, CoreCourseModulePrefetchHandler } from './module-prefetch-delegate';
import { CoreCourseModulePrefetchDelegate } from './module-prefetch-delegate';
import { CoreLoginHelperProvider } from '../../login/providers/helper';
import { CoreConstants } from '../../constants';
import { CoreSite } from '../../../classes/site';

View File

@ -13,7 +13,6 @@
// limitations under the License.
import { Injectable } from '@angular/core';
import { NavController } from 'ionic-angular';
import { CoreEventsProvider } from '../../../providers/events';
import { CoreFileProvider } from '../../../providers/file';
import { CoreFilepoolProvider } from '../../../providers/filepool';
@ -957,8 +956,7 @@ export class CoreCourseModulePrefetchDelegate {
* @return {Promise<boolean>} Promise resolved with true if downloadable, false otherwise.
*/
isModuleDownloadable(module: any, courseId: number) : Promise<boolean> {
let handler = this.getPrefetchHandlerFor(module),
promise;
let handler = this.getPrefetchHandlerFor(module);
if (handler) {
if (typeof handler.isDownloadable == 'function') {

View File

@ -31,7 +31,8 @@ import { CoreCoursesProvider } from '../../providers/courses';
export class CoreCoursesCourseListItemComponent implements OnInit {
@Input() course: any; // The course to render.
constructor(private navCtrl: NavController, private translate: TranslateService, private coursesProvider: CoreCoursesProvider) {}
constructor(private navCtrl: NavController, private translate: TranslateService, private coursesProvider: CoreCoursesProvider) {
}
/**
* Component being initialized.

View File

@ -14,7 +14,6 @@
import { Component, Input, OnInit, OnDestroy } from '@angular/core';
import { NavController } from 'ionic-angular';
import { TranslateService } from '@ngx-translate/core';
import { CoreEventsProvider } from '../../../../providers/events';
import { CoreSitesProvider } from '../../../../providers/sites';
import { CoreDomUtilsProvider } from '../../../../providers/utils/dom';
@ -45,7 +44,7 @@ export class CoreCoursesCourseProgressComponent implements OnInit, OnDestroy {
protected isDestroyed = false;
protected courseStatusObserver;
constructor(private navCtrl: NavController, private translate: TranslateService, private courseHelper: CoreCourseHelperProvider,
constructor(private navCtrl: NavController, private courseHelper: CoreCourseHelperProvider,
private courseFormatDelegate: CoreCourseFormatDelegate, private domUtils: CoreDomUtilsProvider,
private courseProvider: CoreCourseProvider, eventsProvider: CoreEventsProvider, sitesProvider: CoreSitesProvider) {
// Listen for status change in course.

View File

@ -16,7 +16,6 @@ import { Injectable } from '@angular/core';
import { CoreContentLinksHandlerBase } from '../../contentlinks/classes/base-handler';
import { CoreContentLinksAction } from '../../contentlinks/providers/delegate';
import { CoreLoginHelperProvider } from '../../login/providers/helper';
import { CoreCoursesProvider } from './courses';
/**
* Handler to treat links to my overview.
@ -27,7 +26,7 @@ export class CoreCoursesMyOverviewLinkHandler extends CoreContentLinksHandlerBas
featureName = '$mmSideMenuDelegate_mmCourses';
pattern = /\/my\/?$/;
constructor(private coursesProvider: CoreCoursesProvider, private loginHelper: CoreLoginHelperProvider) {
constructor(private loginHelper: CoreLoginHelperProvider) {
super();
}

View File

@ -384,7 +384,8 @@ export class FileMock extends File {
* @param {string} dirName The source directory name.
* @param {string} newPath The destionation path to the directory.
* @param {string} newDirName The destination directory name.
* @returns {Promise<DirectoryEntry|Entry>} Returns a Promise that resolves to the new DirectoryEntry object or rejects with an error.
* @returns {Promise<DirectoryEntry|Entry>} Returns a Promise that resolves to the new DirectoryEntry object or rejects with
* an error.
*/
moveDir(path: string, dirName: string, newPath: string, newDirName: string): Promise<DirectoryEntry | Entry> {
return this.resolveDirectoryUrl(path).then((fse) => {
@ -421,7 +422,8 @@ export class FileMock extends File {
* Read file and return data as an ArrayBuffer.
* @param {string} path Base FileSystem.
* @param {string} file Name of file, relative to path.
* @returns {Promise<ArrayBuffer>} Returns a Promise that resolves with the contents of the file as ArrayBuffer or rejects with an error.
* @returns {Promise<ArrayBuffer>} Returns a Promise that resolves with the contents of the file as ArrayBuffer or rejects
* with an error.
*/
readAsArrayBuffer(path: string, file: string): Promise<ArrayBuffer> {
return this.readFileMock<ArrayBuffer>(path, file, 'ArrayBuffer');
@ -444,7 +446,8 @@ export class FileMock extends File {
* @param {string} path Base FileSystem.
* @param {string} file Name of file, relative to path.
* @returns {Promise<string>} Returns a Promise that resolves with the contents of the file as data URL or rejects with an error.
* @returns {Promise<string>} Returns a Promise that resolves with the contents of the file as data URL or rejects
* with an error.
*/
readAsDataURL(path: string, file: string): Promise<string> {
return this.readFileMock<string>(path, file, 'DataURL');

View File

@ -712,7 +712,8 @@ export class LocalNotificationsMock extends LocalNotifications {
let tileNotif = new this.winNotif.TileNotification({
tag: notification.id + '',
template: this.tileTemplate,
strings: [notification.title, notification.text, notification.title, notification.text, notification.title, notification.text],
strings: [notification.title, notification.text, notification.title, notification.text, notification.title,
notification.text],
expirationTime: new Date(Date.now() + CoreConstants.SECONDS_HOUR * 1000) // Expire in 1 hour.
})

View File

@ -65,7 +65,8 @@ export class CoreFileUploaderHelperProvider {
}
wifiThreshold = typeof wifiThreshold == 'undefined' ? CoreFileUploaderProvider.WIFI_SIZE_WARNING : wifiThreshold;
limitedThreshold = typeof limitedThreshold == 'undefined' ? CoreFileUploaderProvider.LIMITED_SIZE_WARNING : limitedThreshold;
limitedThreshold = typeof limitedThreshold == 'undefined' ?
CoreFileUploaderProvider.LIMITED_SIZE_WARNING : limitedThreshold;
if (size < 0) {
return this.domUtils.showConfirm(this.translate.instant('core.fileuploader.confirmuploadunknownsize'));

View File

@ -229,7 +229,8 @@ export class CoreLoginEmailSignupPage {
}
// Get the data for the custom profile fields.
this.userProfileFieldDelegate.getDataForFields(this.settings.profilefields, true, 'email', this.signupForm.value).then((fieldsData) => {
this.userProfileFieldDelegate.getDataForFields(this.settings.profilefields, true, 'email', this.signupForm.value).then(
(fieldsData) => {
params.customprofilefields = fieldsData;
this.wsProvider.callAjax('auth_email_signup_user', params, {siteUrl: this.siteUrl}).then((result) => {

View File

@ -88,7 +88,7 @@ export class CoreMainMenuDelegate extends CoreDelegate {
protected handlers: {[s: string]: CoreMainMenuHandler} = {};
protected enabledHandlers: {[s: string]: CoreMainMenuHandler} = {};
protected loaded = false;
protected siteHandlers: Subject<CoreMainMenuHandlerToDisplay[]> = new BehaviorSubject<CoreMainMenuHandlerData[]>([]);
protected siteHandlers: Subject<CoreMainMenuHandlerToDisplay[]> = new BehaviorSubject<CoreMainMenuHandlerToDisplay[]>([]);
protected featurePrefix = '$mmSideMenuDelegate_';
constructor(protected loggerProvider: CoreLoggerProvider, protected sitesProvider: CoreSitesProvider,

View File

@ -12,8 +12,7 @@
// See the License for the specific language governing permissions and
// limitations under the License.
import { Component, Input } from '@angular/core';
import { IonicPage } from 'ionic-angular';
import { Component } from '@angular/core';
import { CoreCoursesProvider } from '../../../courses/providers/courses';
/**

View File

@ -12,8 +12,7 @@
// See the License for the specific language governing permissions and
// limitations under the License.
import { Component, Input } from '@angular/core';
import { IonicPage } from 'ionic-angular';
import { Component } from '@angular/core';
import { CoreCoursesProvider } from '../../../courses/providers/courses';
/**

View File

@ -12,8 +12,7 @@
// See the License for the specific language governing permissions and
// limitations under the License.
import { Component, Input } from '@angular/core';
import { IonicPage } from 'ionic-angular';
import { Component } from '@angular/core';
import { CoreCoursesProvider } from '../../../courses/providers/courses';
/**

View File

@ -12,8 +12,7 @@
// See the License for the specific language governing permissions and
// limitations under the License.
import { Component, Input, OnInit } from '@angular/core';
import { IonicPage } from 'ionic-angular';
import { Component, OnInit } from '@angular/core';
import { CoreCoursesProvider } from '../../../courses/providers/courses';
/**

View File

@ -12,8 +12,7 @@
// See the License for the specific language governing permissions and
// limitations under the License.
import { Component, OnInit, Input } from '@angular/core';
import { IonicPage } from 'ionic-angular';
import { Component, OnInit } from '@angular/core';
import { CoreSitesProvider } from '../../../../providers/sites';
import { CoreDomUtilsProvider } from '../../../../providers/utils/dom';
import { CoreCourseProvider } from '../../../course/providers/course';

View File

@ -12,8 +12,7 @@
// See the License for the specific language governing permissions and
// limitations under the License.
import { Component, OnInit, Input } from '@angular/core';
import { IonicPage } from 'ionic-angular';
import { Component, OnInit } from '@angular/core';
import { CoreSitesProvider } from '../../../../providers/sites';
/**

View File

@ -12,7 +12,7 @@
// See the License for the specific language governing permissions and
// limitations under the License.
import { Component, Input, ViewChild, ViewContainerRef, ComponentFactoryResolver, ComponentRef, OnInit } from '@angular/core';
import { Component, Input, ViewChild, ViewContainerRef, ComponentFactoryResolver, OnInit } from '@angular/core';
import { CoreLoggerProvider } from '../../../../providers/logger';
import { CoreUserProfileFieldDelegate } from '../../providers/user-profile-field-delegate';
import { CoreUtilsProvider } from '../../../../providers/utils/utils';

View File

@ -7,7 +7,7 @@
<ion-refresher [enabled]="userLoaded" (ionRefresh)="refreshUser($event)">
<ion-refresher-content pullingText="{{ 'core.pulltorefresh' | translate }}"></ion-refresher-content>
</ion-refresher>
<core-loading [hideUntil]="userLoaded" class="core-loading-center">
<core-loading [hideUntil]="userLoaded">
<div *ngIf="user">
<ion-item-group *ngIf="hasContact">
<ion-item-divider color="light">{{ 'core.user.contact' | translate}}</ion-item-divider>
@ -20,13 +20,13 @@
<ion-item text-wrap *ngIf="user.phone1">
<h2>{{ 'core.user.phone1' | translate}}</h2>
<p><a href="tel:{{user.phone1}}" core-link auto-login="no">
<core-format-text [text]="user.phone1"></core-format-text>
<core-format-text [text]="user.phone1"></core-format-text>
</a></p>
</ion-item>
<ion-item text-wrap *ngIf="user.phone2">
<h2>{{ 'core.user.phone2' | translate}}</h2>
<p><a href="tel:{{user.phone2}}" core-link auto-login="no">
<core-format-text [text]="user.phone2"></core-format-text>
<core-format-text [text]="user.phone2"></core-format-text>
</a></p>
</ion-item>
<ion-item text-wrap *ngIf="user.address">
@ -36,7 +36,8 @@
</a>
<a *ngIf="!isAndroid" href="http://maps.google.com?q={{user.encodedAddress}}" core-link auto-login="no">
<core-format-text [text]="user.address"></core-format-text>
</a></p>
</a>
</p>
</ion-item>
<ion-item text-wrap *ngIf="user.city && !user.address">
<h2>{{ 'core.user.city' | translate}}</h2>
@ -52,7 +53,7 @@
<ion-item text-wrap *ngIf="user.url">
<h2>{{ 'core.user.webpage' | translate}}</h2>
<p><a href="{{user.url}}" core-link>
<core-format-text [text]="user.url"></core-format-text>
<core-format-text [text]="user.url"></core-format-text>
</a></p>
</ion-item>
<ion-item text-wrap *ngIf="user.interests">

View File

@ -17,7 +17,6 @@ import { IonicPage, NavParams, Platform } from 'ionic-angular';
import { CoreUserProvider } from '../../providers/user';
import { CoreUserHelperProvider } from '../../providers/helper';
import { CoreDomUtilsProvider } from '../../../../providers/utils/dom';
import { CoreCoursesProvider } from '../../../courses/providers/courses';
import { CoreEventsProvider } from '../../../../providers/events';
import { CoreSitesProvider } from '../../../../providers/sites';
@ -41,7 +40,7 @@ export class CoreUserAboutPage {
user: any = {};
title: string;
constructor(private navParams: NavParams, private userProvider: CoreUserProvider, private userHelper: CoreUserHelperProvider,
constructor(navParams: NavParams, private userProvider: CoreUserProvider, private userHelper: CoreUserHelperProvider,
private domUtils: CoreDomUtilsProvider, private eventsProvider: CoreEventsProvider,
private sitesProvider: CoreSitesProvider, private platform: Platform) {

View File

@ -7,7 +7,7 @@
<ion-refresher [enabled]="userLoaded" (ionRefresh)="refreshUser($event)">
<ion-refresher-content pullingText="{{ 'core.pulltorefresh' | translate }}"></ion-refresher-content>
</ion-refresher>
<core-loading [hideUntil]="userLoaded" class="core-loading-center">
<core-loading [hideUntil]="userLoaded">
<ion-list *ngIf="user && !isDeleted">
<ion-item text-center>
<div class="item-avatar-center">
@ -51,7 +51,7 @@
</a>
<ion-item *ngIf="actionHandlers && actionHandlers.length">
<button *ngFor="let actHandler of actionHandlers" ion-button block outline [ngClass]="['core-user-profile-handler', actHandler.class]" (click)="actHandler.action($event)" [hidden]="actHandler.hidden" title="{{ actHandler.title | translate }}">
<button *ngFor="let actHandler of actionHandlers" ion-button block outline [ngClass]="['core-user-profile-handler', actHandler.class]" (click)="actHandler.action($event, user, courseId)" [hidden]="actHandler.hidden" title="{{ actHandler.title | translate }}">
<ion-icon *ngIf="actHandler.icon" [name]="actHandler.icon" item-start></ion-icon>
{{ actHandler.title | translate }}
<ion-spinner *ngIf="actHandler.spinner" item-end></ion-spinner>

View File

@ -49,7 +49,7 @@ export class CoreUserProfilePage {
newPageHandlers = [];
communicationHandlers = [];
constructor(private navParams: NavParams, private userProvider: CoreUserProvider, private userHelper: CoreUserHelperProvider,
constructor(navParams: NavParams, private userProvider: CoreUserProvider, private userHelper: CoreUserHelperProvider,
private domUtils: CoreDomUtilsProvider, private translate: TranslateService, private eventsProvider: CoreEventsProvider,
private coursesProvider: CoreCoursesProvider, private sitesProvider: CoreSitesProvider,
private mimetypeUtils: CoreMimetypeUtilsProvider, private fileUploaderHelper: CoreFileUploaderHelperProvider,
@ -81,7 +81,7 @@ export class CoreUserProfilePage {
ionViewDidLoad() {
this.fetchUser().then(() => {
return this.userProvider.logView(this.userId, this.courseId).catch((error) => {
this.isDeleted = error === this.translate.instant('core.userdeleted');
this.isDeleted = error.errorcode === 'userdeleted';
});
}).finally(() => {
this.userLoaded = true;
@ -142,10 +142,11 @@ export class CoreUserProfilePage {
let modal = this.domUtils.showModalLoading('core.sending', true);
return this.userProvider.changeProfilePicture(result.itemid, this.userId).then((profileImageURL) => {
this.eventsProvider.trigger(CoreUserProvider.PROFILE_PICTURE_UPDATED, {userId: this.userId, picture: profileImageURL});
this.eventsProvider.trigger(CoreUserProvider.PROFILE_PICTURE_UPDATED, {userId: this.userId,
picture: profileImageURL});
this.sitesProvider.updateSiteInfo(this.site.getId());
this.refreshUser();
}).finally(function() {
}).finally(() => {
modal.dismiss();
});
}).catch((message) => {

View File

@ -72,7 +72,7 @@ export interface CoreUserProfileHandlerData {
* Additional class to add to the HTML.
* @type {string}
*/
class: string;
class?: string;
/**
* If enabled, element will be hidden. Only for TYPE_NEW_PAGE and TYPE_ACTION.
@ -135,7 +135,7 @@ export class CoreUserDelegate extends CoreDelegate {
* @param {number} courseId The course ID.
* @return {Promise<any>} Resolved with an array of objects containing 'priority', 'data' and 'type'.
*/
getProfileHandlersFor(user: any, courseId): Promise<any> {
getProfileHandlersFor(user: any, courseId: number): Promise<any> {
let handlers = [],
promises = [];
@ -147,7 +147,7 @@ export class CoreUserDelegate extends CoreDelegate {
return this.coursesProvider.getCoursesOptions(courseIds).then((options) => {
// For backwards compatibility we don't modify the courseId.
let courseIdForOptions = courseId || this.sitesProvider.getSiteHomeId(),
let courseIdForOptions = courseId || this.sitesProvider.getCurrentSiteHomeId(),
navOptions = options.navOptions[courseIdForOptions],
admOptions = options.admOptions[courseIdForOptions];
@ -165,7 +165,7 @@ export class CoreUserDelegate extends CoreDelegate {
} else {
return Promise.reject(null);
}
}).catch(function() {
}).catch(() => {
// Nothing to do here, it is not enabled for this user.
});
promises.push(promise);
@ -175,7 +175,7 @@ export class CoreUserDelegate extends CoreDelegate {
return handlers;
});
});
}).catch(function() {
}).catch(() => {
// Never fails.
return handlers;
});

View File

@ -63,7 +63,7 @@ export class CoreUserProfileMailHandler implements CoreUserProfileHandler {
action: ($event, user, courseId) => {
$event.preventDefault();
$event.stopPropagation();
window.location.href = "mailto:" + user.email;
window.open("mailto:" + user.email, '_blank');
}
};
}

View File

@ -15,7 +15,7 @@
import { Injectable } from '@angular/core';
import { CoreContentLinksHandlerBase } from '../../contentlinks/classes/base-handler';
import { CoreContentLinksAction } from '../../contentlinks/providers/delegate';
import { CoreLoginHelperProvider } from '../../login/providers/helper';
import { CoreContentLinksHelperProvider } from '../../contentlinks/providers/helper';
/**
* Handler to treat links to user profiles.
@ -26,7 +26,7 @@ export class CoreUserProfileLinkHandler extends CoreContentLinksHandlerBase {
// Match user/view.php and user/profile.php but NOT grade/report/user/.
pattern = /((\/user\/view\.php)|(\/user\/profile\.php)).*([\?\&]id=\d+)/;
constructor(private loginHelper: CoreLoginHelperProvider) {
constructor(private linkHelper: CoreContentLinksHelperProvider) {
super();
}
@ -43,12 +43,12 @@ export class CoreUserProfileLinkHandler extends CoreContentLinksHandlerBase {
CoreContentLinksAction[]|Promise<CoreContentLinksAction[]> {
return [{
action: (siteId, navCtrl?) => {
let stateParams = {
let pageParams = {
courseId: params.course,
userId: parseInt(params.id, 10)
};
// Always use redirect to make it the new history root (to avoid "loops" in history).
this.loginHelper.redirect('CoreUserProfilePage', stateParams, siteId);
this.linkHelper.goInSite(navCtrl, 'CoreUserProfilePage', pageParams, siteId);
}
}];
}

View File

@ -61,10 +61,10 @@ export class CoreUserProvider {
* Change the given user profile picture.
*
* @param {number} draftItemId New picture draft item id.
* @param {number} id User ID.
* @return {Promise<any>} Promise resolve with the new profileimageurl
* @param {number} userId User ID.
* @return {Promise<string>} Promise resolve with the new profileimageurl
*/
changeProfilePicture(draftItemId: number, userId: number): Promise<any> {
changeProfilePicture(draftItemId: number, userId: number): Promise<string> {
var data = {
'draftitemid': draftItemId,
'delete': 0,
@ -83,7 +83,7 @@ export class CoreUserProvider {
* Store user basic information in local DB to be retrieved if the WS call fails.
*
* @param {number} userId User ID.
* @param {string} [siteId] ID of the site the event belongs to. If not defined, use current site.
* @param {string} [siteId] ID of the site. If not defined, use current site.
* @return {Promise<any>} Promise resolve when the user is deleted.
*/
deleteStoredUser(userId: number, siteId?: string): Promise<any> {
@ -111,24 +111,24 @@ export class CoreUserProvider {
* @param {number} userId User's ID.
* @param {number} [courseId] Course ID to get course profile, undefined or 0 to get site profile.
* @param {boolean} [forceLocal] True to retrieve the user data from local DB, false to retrieve it from WS.
* @param {string} [siteId] ID of the site the event belongs to. If not defined, use current site.
* @param {string} [siteId] ID of the site. If not defined, use current site.
* @return {Promise<any>} Promise resolved with the user data.
*/
getProfile(userId: number, courseId: number, forceLocal = false, siteId?: string): Promise<any> {
getProfile(userId: number, courseId?: number, forceLocal = false, siteId?: string): Promise<any> {
siteId = siteId || this.sitesProvider.getCurrentSiteId();
if (forceLocal) {
return this.getUserFromLocalDb(userId, siteId).catch(function() {
return this.getUserFromLocalDb(userId, siteId).catch(() => {
return this.getUserFromWS(userId, courseId, siteId);
});
}
return this.getUserFromWS(userId, courseId, siteId).catch(function() {
return this.getUserFromWS(userId, courseId, siteId).catch(() => {
return this.getUserFromLocalDb(userId, siteId);
});
}
/**
* Invalidates user WS calls.
* Get cache key for a user WS call.
*
* @param {number} userId User ID.
* @return {string} Cache key.
@ -141,7 +141,7 @@ export class CoreUserProvider {
* Get user basic information from local DB.
*
* @param {number} userId User ID.
* @param {string} [siteId] ID of the site the event belongs to. If not defined, use current site.
* @param {string} [siteId] ID of the site. If not defined, use current site.
* @return {Promise<any>} Promise resolve when the user is retrieved.
*/
protected getUserFromLocalDb(userId: number, siteId?: string): Promise<any> {
@ -158,7 +158,7 @@ export class CoreUserProvider {
* @param {string} [siteId] ID of the site. If not defined, use current site.
* @return {Promise<any>} Promise resolve when the user is retrieved.
*/
protected getUserFromWS(userId: number, courseId: number, siteId?: string): Promise<any> {
protected getUserFromWS(userId: number, courseId?: number, siteId?: string): Promise<any> {
return this.sitesProvider.getSite(siteId).then((site) => {
let presets = {
cacheKey: this.getUserCacheKey(userId)
@ -218,7 +218,7 @@ export class CoreUserProvider {
* @return {boolean} True if disabled, false otherwise.
*/
isUpdatePictureDisabledInSite(site?: CoreSite) : boolean {
site = site || this.sitesProvider.getCurrentSite();
site = site || this.sitesProvider.getCurrentSite();
return site.isFeatureDisabled('$mmUserDelegate_picture');
};
@ -226,14 +226,18 @@ export class CoreUserProvider {
/**
* Log User Profile View in Moodle.
* @param {number} userId User ID.
* @param {number} courseId Course ID.
* @param {number} [courseId] Course ID.
* @return {Promise<any>} Promise resolved when done.
*/
logView(userId: number, courseId?: number) : Promise<any> {
return this.sitesProvider.getCurrentSite().write('core_user_view_user_profile', {
userid: userId,
courseid: courseId
});
let params = {
userid: userId
};
if (courseId) {
params['courseid'] = courseId;
}
return this.sitesProvider.getCurrentSite().write('core_user_view_user_profile', params);
}
/**
@ -242,10 +246,10 @@ export class CoreUserProvider {
* @param {number} userId User ID.
* @param {string} fullname User full name.
* @param {string} avatar User avatar URL.
* @param {string} [siteId] ID of the site the event belongs to. If not defined, use current site.
* @param {string} [siteId] ID of the site. If not defined, use current site.
* @return {Promise<any>} Promise resolve when the user is stored.
*/
protected storeUser(userId: number, fullname: string, avatar: string, siteId?: string) {
protected storeUser(userId: number, fullname: string, avatar: string, siteId?: string): Promise<any> {
return this.sitesProvider.getSite(siteId).then((site) => {
let userRecord = {
id: userId,

View File

@ -46,7 +46,8 @@ export class CoreFormatTextDirective implements OnChanges {
@Input() componentId?: string|number; // Component ID to use in conjunction with the component.
@Input() adaptImg?: boolean|string = true; // Whether to adapt images to screen width.
@Input() clean?: boolean|string; // Whether all the HTML tags should be removed.
@Input() singleLine?: boolean|string; // Whether new lines should be removed (all text in single line). Only valid if clean=true.
@Input() singleLine?: boolean|string; // Whether new lines should be removed (all text in single line). Only valid if
// clean=true.
@Input() maxHeight?: number; // Max height in pixels to render the content box. It should be 50 at least to make sense.
// Using this parameter will force display: block to calculate height better. If you want to
// avoid this use class="inline" at the same time to use display: inline-block.
@ -253,7 +254,8 @@ export class CoreFormatTextDirective implements OnChanges {
site = siteInstance;
// Apply format text function.
return this.textUtils.formatText(this.text, this.utils.isTrueOrOne(this.clean), this.utils.isTrueOrOne(this.singleLine));
return this.textUtils.formatText(this.text, this.utils.isTrueOrOne(this.clean),
this.utils.isTrueOrOne(this.singleLine));
}).then((formatted) => {
let div = document.createElement('div'),
canTreatVimeo = site && site.isVersionGreaterEqualThan(['3.3.4', '3.4']),

View File

@ -15,7 +15,7 @@
import { Directive, Input, OnInit, ElementRef } from '@angular/core';
import { NavController } from 'ionic-angular';
/**
* Directive to open a link in external browser.
* Directive to go to user profile on click.
*/
@Directive({
selector: '[core-user-link]'

View File

@ -664,6 +664,20 @@ export class CoreSitesProvider {
}
}
/**
* Get the site home ID of the current site.
*
* @return {number} Current site home ID.
*/
getCurrentSiteHomeId() : number {
if (this.currentSite) {
return this.currentSite.getSiteHomeId();
} else {
return 1;
}
}
/**
* Check if the user is logged in a site.
*

View File

@ -14,7 +14,7 @@
import { Injectable } from '@angular/core';
import { LoadingController, Loading, ToastController, Toast, AlertController, Alert, Platform, Content,
NavController, ModalController } from 'ionic-angular';
ModalController } from 'ionic-angular';
import { TranslateService } from '@ngx-translate/core';
import { CoreTextUtilsProvider } from './text';
import { CoreAppProvider } from '../app';

View File

@ -13,7 +13,7 @@
// limitations under the License.
import { Injectable } from '@angular/core';
import { NavController, ModalController } from 'ionic-angular';
import { ModalController } from 'ionic-angular';
import { TranslateService } from '@ngx-translate/core';
import { CoreLangProvider } from '../lang';

View File

@ -144,7 +144,8 @@ export class CoreWSProvider {
* @param {string} siteUrl Complete site url to perform the call.
* @param {any} ajaxData Arguments to pass to the method.
* @param {CoreWSPreSets} preSets Extra settings and information.
* @return {Promise<any>} Deferred promise resolved with the response data in success and rejected with the error message if it fails.
* @return {Promise<any>} Deferred promise resolved with the response data in success and rejected with the error message
* if it fails.
*/
protected addToRetryQueue(method: string, siteUrl: string, ajaxData: any, preSets: CoreWSPreSets) : Promise<any> {
let call = {