{"version":3,"file":"main.js","mappings":"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G,CAAC,GAAG,CAAC,CAAC,CAAC;;;;;;;;;;;ACXlC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;;;;;;;;;;;;;;;AC9OA,iEAAe,sMAAsM,wJAAwJ,wCAAwC,gBAAgB,yCAAyC,oCAAoC,g2BAAg2B,4bAA4b,6YAA6Y,UAAU,meAAme;;;;;;;;;;ACAxoF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;ACnSA","sources":["./$_lazy_route_resources|lazy|groupOptions: {}|namespace object","./src/app/app-routing.module.ts","./src/app/app.component.ts","./src/app/app.module.ts","./src/app/pipes/month-name.pipe.ts","./src/app/pipes/safe-html.pipe.ts","./src/app/services/events-service.service.ts","./src/app/services/settings.service.ts","./src/app/services/update.service.ts","./src/environments/environment.ts","./src/main.ts","./node_modules/@ionic/core/dist/esm|lazy|/^\\.\\/.*\\.entry\\.js$/|include: /\\.entry\\.js$/|exclude: /\\.system\\.entry\\.js$/|groupOptions: {}|namespace object","./src/app/app.component.html","/builds/project-0/node_modules/moment/locale|sync|/^\\.\\/.*$/","ignored|/builds/project-0/node_modules/crypto-js|crypto"],"sourcesContent":["function webpackEmptyAsyncContext(req) {\n\t// Here Promise.resolve().then() is used instead of new Promise() to prevent\n\t// uncaught exception popping up in devtools\n\treturn Promise.resolve().then(() => {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t});\n}\nwebpackEmptyAsyncContext.keys = () => ([]);\nwebpackEmptyAsyncContext.resolve = webpackEmptyAsyncContext;\nwebpackEmptyAsyncContext.id = 98255;\nmodule.exports = webpackEmptyAsyncContext;","import { NgModule } from '@angular/core';\nimport { PreloadAllModules, RouterModule, Routes } from '@angular/router';\n\nconst routes: Routes = [\n {\n path: 'home',\n loadChildren: () => import('./pages/home/home.module').then( m => m.HomePageModule)\n },\n {\n path: '',\n redirectTo: 'splash',\n pathMatch: 'full'\n },\n {\n path: 'settings',\n loadChildren: () => import('./pages/settings/settings.module').then( m => m.SettingsPageModule)\n },\n {\n path: 'dynamic/:id',\n loadChildren: () => import('./pages/dynamic/dynamic.module').then( m => m.DynamicPageModule)\n },\n {\n path: 'authorise-add-pin',\n loadChildren: () => import('./pages/authorise-add-pin/authorise-add-pin.module').then( m => m.AuthoriseAddPinPageModule)\n },\n {\n path: 'authorise-email',\n loadChildren: () => import('./pages/authorise-email/authorise-email.module').then( m => m.AuthoriseEmailPageModule)\n },\n {\n path: 'authorise-key',\n loadChildren: () => import('./pages/authorise-key/authorise-key.module').then( m => m.AuthoriseKeyPageModule)\n },\n {\n path: 'login',\n loadChildren: () => import('./pages/login/login.module').then( m => m.LoginPageModule)\n },\n {\n path: 'terms-and-conditions',\n loadChildren: () => import('./pages/terms-and-conditions/terms-and-conditions.module').then( m => m.TermsAndConditionsPageModule)\n },\n {\n path: 'settings-troubleshooting',\n loadChildren: () => import('./pages/settings-troubleshooting/settings-troubleshooting.module').then( m => m.SettingsTroubleshootingPageModule)\n },\n {\n path: 'notifications-inbox',\n loadChildren: () => import('./pages/notifications-inbox/notifications-inbox.module').then( m => m.NotificationsInboxPageModule)\n },\n {\n path: 'notifications-archive',\n loadChildren: () => import('./pages/notifications-archive/notifications-archive.module').then( m => m.NotificationsArchivePageModule)\n },\n {\n path: 'search',\n loadChildren: () => import('./pages/search/search.module').then( m => m.SearchPageModule)\n },\n {\n path: 'notification-modal',\n loadChildren: () => import('./pages/notification-modal/notification-modal.module').then( m => m.NotificationModalPageModule)\n },\n {\n path: 'content-update',\n loadChildren: () => import('./pages/content-update/content-update.module').then( m => m.ContentUpdatePageModule)\n },\n {\n path: 'quote-request-add',\n loadChildren: () => import('./pages/quote-request-add/quote-request-add.module').then( m => m.QuoteRequestAddPageModule)\n },\n {\n path: 'quote-requests/:timing',\n loadChildren: () => import('./pages/quote-requests/quote-requests.module').then( m => m.QuoteRequestsPageModule)\n },\n {\n path: 'quote-request/:id',\n loadChildren: () => import('./pages/quote-request/quote-request.module').then( m => m.QuoteRequestPageModule)\n },\n {\n path: 'quotes/:timing',\n loadChildren: () => import('./pages/quotes/quotes.module').then( m => m.QuotesPageModule)\n },\n {\n path: 'quote/:id',\n loadChildren: () => import('./pages/quote/quote.module').then( m => m.QuotePageModule)\n }, \n {\n path: 'quote-add/:id',\n loadChildren: () => import('./pages/quote-add/quote-add.module').then( m => m.QuoteAddPageModule)\n },\n {\n path: 'orders/:timing',\n loadChildren: () => import('./pages/orders/orders.module').then( m => m.OrdersPageModule)\n },\n {\n path: 'order/:id',\n loadChildren: () => import('./pages/order/order.module').then( m => m.OrderPageModule)\n },\n {\n path: 'order-add/:id',\n loadChildren: () => import('./pages/order-add/order-add.module').then( m => m.OrderAddPageModule)\n },\n {\n path: 'information-requests',\n loadChildren: () => import('./pages/information-requests/information-requests.module').then( m => m.InformationRequestsPageModule)\n },\n {\n path: 'connect-auto-data',\n loadChildren: () => import('./pages/connect-auto-data/connect-auto-data.module').then( m => m.ConnectAutoDataPageModule)\n },\n {\n path: 'reviews/:id',\n loadChildren: () => import('./pages/reviews/reviews.module').then( m => m.ReviewsPageModule)\n },\n {\n path: 'splash',\n loadChildren: () => import('./pages/splash/splash.module').then( m => m.SplashPageModule)\n },\n {\n path: 'rate-seller/:id',\n loadChildren: () => import('./pages/rate-seller/rate-seller.module').then( m => m.RateSellerPageModule)\n },\n {\n path: 'rate-buyer/:id',\n loadChildren: () => import('./pages/rate-buyer/rate-buyer.module').then( m => m.RateBuyerPageModule)\n },\n {\n path: 'review/:id',\n loadChildren: () => import('./pages/review/review.module').then( m => m.ReviewPageModule)\n },\n\n\n\n\n];\n\n@NgModule({\n imports: [\n RouterModule.forRoot(routes, { useHash: true, preloadingStrategy: PreloadAllModules })\n ],\n exports: [RouterModule]\n})\nexport class AppRoutingModule { }\n","import { Component } from '@angular/core';\nimport { SplashScreen } from '@ionic-native/splash-screen/ngx';\n\nimport { SettingsService } from 'src/app/services/settings.service';\nimport { UpdateService } from 'src/app/services/update.service';\n\n@Component({\n selector: 'app-root',\n templateUrl: 'app.component.html',\n styleUrls: ['app.component.scss']\n})\nexport class AppComponent {\n\n pages: Array<{title: string, staticpageurl: string, id: string, rating: string}>;\n \n constructor(\n private splashScreen: SplashScreen,\n public settings: SettingsService,\n private update: UpdateService\n ) {\n this.settings.log(1,'app.components: constructor');\n this.initializeApp();\n // used for an example of ngFor and navigation\n this.pages = [\n { title: 'Home', staticpageurl: '/home', id : '', rating: '1'}, \n { title: 'Login', staticpageurl: '/login', id : '', rating: '2'}, \n ]; \n }\n\n ngOnInit() {\n this.settings.log(1,'app.components: ngOnInit');\n //this.initializeApp();\n }\n\n initializeApp() {\n //this.splashScreen.show();\n let s = this.settings;\n s.log(1,'app.components: initializeApp start');\n s.router.navigateByUrl('/splash');\n //this.update.pageIsReady('appcomponent').then((ready) => {\n //s.platform.ready().then(() => {\n // Okay, so the platform is ready and our plugins are available.\n // Here you can do any higher level native things you might need.\n //s.log(1,'initializeApp this.rootPage=' + this.rootPage);\n //s.getCoreModulesData(this.server).then(() => {\n s.log(1,'initializeApp page is ready s.appType=' + s.appType);\n //if (s.appType == 'public') {\n // s.openPage('/home');\n //} else {\n // s.openPage('/login');\n //} \n //this.statusBar.styleDefault();\n //this.splashScreen.hide();\n // GR this.matomoInjector.init is calling trackPageView automatically - which we don't want because it results in crazy URLs\n // GR 20200702 - trying to use it again (was it changed?). Set 0 siteid here in order to replace it with real one later. \n // That should hopefully avoid strange pageview event\n //this.matomoInjector.init(this.settings.matomoUrl, 0);\n //this.setupMenu();\n // do not use that method if multiple calls have negative effect (e.g. to start some heavy process)\n // it will be triggered multiple times!\n s.events.getObservable().subscribe((data) => {\n s.log(1,\"appcomponent Updatefinished event. data.updatefinished=\" + data.updatefinished);\n if (data.updatefinished) {\n data.updatefinished = false;\n this.setupMenu();\n }\n });\t\n //}).catch((error)=>{\n // s.log(2,\"getCoreModulesData: error \" + error.message);\n //}); \n //}).catch((error)=>{\n // this.settings.log(1,\"appcomponents pageIsReady error \" + error.message);\n // if (s.appType == 'public') {\n // s.openPage('/home');\n // } else {\n // s.openPage('/login');\n // } \n //});\n }\n\n setupMenu() {\n let s = this.settings;\n s.log(1,'setupMenu s.userAuthenticated=' + s.userAuthenticated + ' s.currentUserRole=' + s.currentUserRole);\n this.pages = s.getCapMarketplaceMenuPages();\n /*\n s.getMenuPages().then((result) => {\n // reads current CurrentAppJson and finds pages marked to be displayed on main menu \n s.log(1,'setupMenu getMenuPages() result.length=' + result.length);\n this.pages = result;\n }).catch((error)=>{\n s.log(2,'setupMenu error in getMenuPages: ' + error);\n });\n */\n }\n}\n","import { NgModule } from '@angular/core';\nimport { BrowserModule } from '@angular/platform-browser';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { RouteReuseStrategy } from '@angular/router';\nimport { IonicModule, IonicRouteStrategy } from '@ionic/angular';\nimport { IonicStorageModule } from '@ionic/storage-angular';\n\nimport { AppVersion } from '@ionic-native/app-version/ngx';\nimport { AutocompleteLibModule } from 'angular-ng-autocomplete';\nimport { Camera } from '@awesome-cordova-plugins/camera/ngx';\nimport { CrystalLightboxModule } from '@crystalui/angular-lightbox';\nimport { Device } from '@ionic-native/device/ngx';\nimport { Dialogs } from '@ionic-native/dialogs/ngx';\nimport { Drivers } from '@ionic/storage';\nimport { File } from '@ionic-native/file/ngx';\nimport { FingerprintAIO } from '@ionic-native/fingerprint-aio/ngx';\nimport { HttpClientModule } from '@angular/common/http'; \nimport { InAppBrowser } from '@ionic-native/in-app-browser/ngx';\nimport { MatomoModule } from 'ngx-matomo';\nimport { Network } from '@ionic-native/network/ngx';\nimport { PinDialog } from '@ionic-native/pin-dialog/ngx';\nimport { Platform } from '@ionic/angular';\nimport { SplashScreen } from '@ionic-native/splash-screen/ngx';\nimport * as CordovaSQLiteDriver from 'localforage-cordovasqlitedriver';\nimport { WebView } from '@ionic-native/ionic-webview/ngx';\n\nimport { AppComponent } from './app.component';\nimport { AppRoutingModule } from './app-routing.module';\nimport { MonthNamePipe } from './pipes/month-name.pipe';\nimport { SafeHtmlPipe } from './pipes/safe-html.pipe';\n\n@NgModule({\n declarations: [AppComponent, MonthNamePipe, SafeHtmlPipe],\n entryComponents: [],\n imports: [BrowserModule, CrystalLightboxModule, IonicModule.forRoot({\n mode: 'md',\n backButtonText: ''\n }), AppRoutingModule, \n HttpClientModule, MatomoModule, FormsModule, ReactiveFormsModule,\n IonicStorageModule.forRoot({\n name: '__mycapdb',\n driverOrder: [CordovaSQLiteDriver._driver, Drivers.LocalStorage],\n })\n ],\n providers: [\n AppVersion,\n AutocompleteLibModule,\n Camera,\n Device,\n Dialogs,\n File,\n FingerprintAIO,\n InAppBrowser,\n Network,\n PinDialog,\n Platform, \n SplashScreen,\n WebView,\n { provide: RouteReuseStrategy, useClass: IonicRouteStrategy }\n ],\n bootstrap: [AppComponent],\n})\nexport class AppModule {}\n","import { Pipe, PipeTransform } from '@angular/core';\n// may be we should use https://www.npmjs.com/package/safe-pipe instead?\n\n@Pipe({\n name: 'monthName'\n})\nexport class MonthNamePipe implements PipeTransform {\n\n transform(value: number, ...args: unknown[]): unknown {\n var monthNames = [ 'January', 'February', 'March', 'April', 'May', 'June',\n 'July', 'August', 'September', 'October', 'November', 'December' ];\n return monthNames[value - 1];\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\n\n@Pipe({\n name: 'safeHtml'\n})\nexport class SafeHtmlPipe implements PipeTransform {\n constructor(private sanitized: DomSanitizer) {\n\n }\n transform(value: string, ...args: unknown[]): unknown {\n return this.sanitized.bypassSecurityTrustHtml(value);\n }\n\n}\n","import {Injectable} from '@angular/core';\nimport {Subject} from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\n// taken mostly from http://paulsec.github.io/posts/ionic-5-events/ as substitute for events\nexport class EventsService {\n private fooSubject = new Subject();\n\n publishData(data: any) {\n this.fooSubject.next(data);\n }\n\n getObservable(): Subject {\n return this.fooSubject;\n }\n}","import { Injectable } from '@angular/core';\n\nimport { ActivatedRoute , Router } from '@angular/router';\nimport { AppVersion } from '@ionic-native/app-version/ngx';\nimport { Device } from '@ionic-native/device/ngx';\nimport { Dialogs } from '@ionic-native/dialogs/ngx';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { File, DirectoryEntry } from '@ionic-native/file/ngx';\nimport { HttpClient, HttpHeaders } from \"@angular/common/http\";\nimport { InAppBrowser } from '@ionic-native/in-app-browser/ngx';\nimport { MatomoInjector } from 'ngx-matomo';\nimport { MatomoTracker } from 'ngx-matomo';\nimport { Network } from '@ionic-native/network/ngx';\nimport { Platform } from '@ionic/angular';\nimport { Storage } from '@ionic/storage-angular';\nimport { LoadingController, AlertController } from '@ionic/angular';\nimport { WebView } from '@ionic-native/ionic-webview/ngx';\n\nimport * as CordovaSQLiteDriver from 'localforage-cordovasqlitedriver';\nimport { SecureStorageEcho, SecureStorageEchoObject } from '@ionic-native/secure-storage-echo/ngx';\nimport * as CryptoJS from 'crypto-js';\nimport * as moment from 'moment';\n\nimport { EventsService } from './events-service.service';\nimport { Quote, toTypeScript } from '@angular/compiler';\n//import { UpdateService } from './update.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class SettingsService {\n\n // Note that for now PRIVATE site is set on https://gregr2app.whitesite.lab.cm3cms.com URL \n // For private site one can use https://whiteapp.whitesite.dev.cm3cms.com\n // Note that you may need to update your host file to access those sites when on office VPN !!!\n public sourceHost = 'https://marketplace.connectautoparts.com.au'; //'https://marketplace.connectautoparts.com.au'; //'https://marketplace.connectautoparts.dev.ddsn.net'; 'https://marketplace.connectautoparts.com.au'; \n public appTextId = \"marketplace\"; \n private serverApiUrl = \"\";\n private serverApiUrl2 = \"\";\n public serverApiUrl2A = \"\";\n public WebAppVersion: string = \"0.8.0.1\";\n\n // set of variables below will be overwritten from values coming from app \"Module Settings\" aricles on sourceHost server!\n public staticPageMap = {};\n public appSiteHost = '';\n public appType = 'private'; // 'private' or 'public'\n public forcePrivateAndroidAppToSetScreenLock = true; // when true then Android users must set screen lock before authentication otherwise encryption key will be stored and read from the server\n // note that dev analytics server 'https://old.intranet.ddsn.com/piwik/' is not accessible any more (:)\n public matomoUrl = 'https://analytics.ddsn.net/'; \n public matomoSiteId: number = 54; // 54 is for live Marketplace & 57 for test\n public passwordAuthenticationInBrowserEnabled = true;\n private useFirebase = false;\n private trackFirebaseAnalytics = false;\n public trackMatomoAnalytics = true;\n public sessionTimeInMinutes: number = 10; // time before app PIN authentication session expires\n public passwordSessionTimeInMinutes: number = 600; // time before browser u/p authenticated session expires\n private errorLogMaxEntriesToKeep = 200;\n private errorLogMinLogLevelToKeep = 1;\n public checkForUpdatesTimeInMinutes: number = 10; //90; // minimum time between checking for updates \n public homePageNotificationsLimit = 2;\n // logDisplayLevel is used to change what one can see on console when app is running\n // level 0 - is for all data, 1 - basic data, 2 - errors & important info, 3 - nothing \n // change it to 2 or 3 for live app\n public logDisplayLevel = 1;\n\n private firebaseHasPermissions = false;\n public currentVersionIsOld = false;\n public oldVersionBehaviourDefaultId = 'DoNothing'; // 'DoNothing', 'InformOnStart', 'SomeFunctionsMayNotWork', 'ForceUpdate'\n public oldVersionBehaviourMessages = {\n 'InformOnStart': 'Newer version of App was published. Please update it.',\n 'SomeFunctionsMayNotWork': 'Your App version is old and not supported. Some functions may stop working or do not function correctly. App update is strongly suggested',\n 'ForceUpdate': 'Your App version requires update.'};\n\n public lastClickedUrl = \"\";\n public previousUrl = \"\";\n public lastClickedUserRole = \"\";\n public lastClickedUserId = \"\";\n public currentUserRole = \"\";\n public userIsAdmin: boolean = false;\n public switchRolesEnabled = false;\n public passwordAuthentication = false;\n private firebase: any = null;\n public appsettings: any = {};\n public companyName: string = 'your organisation';\n public userToken: string='';\n public deviceId: string='';\n public currentPin: string='';\n public currentPrivateKey: string='';\n public currentActivationEmail: string='';\n public currentCryptoKey: string='';\n public coremodulesdata: any = null;\n public othermodulesdata: any = null;\n public updateAllModules: boolean = false;\n public currentAppData: any = null;\n public currentRosterData: any = null;\n public notifications = [];\n public notificationsNewCount: number = 0;\n public notificationCheck: ExternalProcess = new ExternalProcess();\n public lastNotificationChecked: Date = null;\n public userNavigationLists: any = {'quoterequests':[],'quotes':[],'orders':[],'informationrequests':[]};\n public userNavigationListUrl = null;\n\n public currentVideo: any = null;\n public lastActivationKeyReceivedDate: any=null;\n public initialStartup: boolean=true;\n public initialStartupTime: any=null;\n private errorLogQueue = [];\n\n public currentUserData: UserData = new UserData();\n public currentUserDataChanged: boolean = false;\n public updateIsRunning: boolean = false;\n\n private _authorised: any=null;\n private _authenticated: boolean=false;\n private _gaTrackerStarted: boolean=false;\n private _appTappedId: string='';\n private _jwtsk: any = [];\n private _matomoInitialised: boolean=false; \n private _matomoConfigured: boolean=false;\n\n public acceptedTC: boolean=false;\n public deviceToken: string='';\n\n public platformIsReady: boolean=false;\n public platformIsCordova: boolean=false;\n\n public initialiseSecureStorageError: boolean = false;\n public authorisationErrorMessage: string = \"\";\n private ss: any = null;\n private secureStorageInitialising: boolean = false;\n private storage: Storage;\n private lastAccessed: Date = new Date(2019,1,1);\n public lastUpdateChecked: Date = null; \n public rosterAgendaStartDate: any = null;\n public allowRosterCalendarMultiselect: boolean = true;\n public calendarTmpIdVal: string = \"111\";\n public calendarSelectedDays: any = {};\n public rosterShiftTypes = [{name:'Rostered On',value:'RO',eventIconClass:'DefaultEvent'},\n {name:'Overtime',value:'OT',eventIconClass:'DefaultEvent'},\n {name:'Re Called',value:'RC',eventIconClass:'DefaultEvent'},\n {name:'Court',value:'CRT',eventIconClass:'DefaultEvent'},\n {name:'Training',value:'TR',eventIconClass:'DefaultEvent'},\n {name:'Other',value:'OTR',eventIconClass:'OtherEvent'},\n {name:'On Call',value:'OC',eventIconClass:'OncallEvent'},\n {name:'Sick/Carers Leave',value:'SL/CL',eventIconClass:'LeaveEvent'},\n {name:'Annual Leave',value:'AL',eventIconClass:'LeaveEvent'},\n {name:'Rostered Leave Day',value:'RLD',eventIconClass:'LeaveEvent'},\n {name:'Rest Day',value:'RD',eventIconClass:'LeaveEvent'}];\n\n constructor(\n private appVersion: AppVersion,\n private device: Device,\n private dialogs: Dialogs, \n private domSanitizer: DomSanitizer,\n public events: EventsService,\n private file: File,\n private inAppBrowser: InAppBrowser,\n public http: HttpClient, \n public matomoTracker: MatomoTracker,\n private matomoInjector: MatomoInjector,\n private network: Network,\n public platform: Platform,\n public router: Router,\n private strg: Storage,\n private alertController: AlertController,\n private webView: WebView \n ) { \n if (this.appType == 'public') {\n this._authorised = true;\n this._authenticated = true;\n }\n this.appsettings.appName = 'Connect Auto Parts';\n this.storageInit();\n //document.addEventListener(\"deviceready\", this.onDeviceReady, false);\n this.platform.ready().then(() => {\n this.platformIsReady = true;\n this.log(1,'Settings platform is \"ready\" 1 platforms=' + this.platform.platforms());\n\n this.platform.pause.subscribe(\n (result) => {\n // app is put in the background\n this.log(1,'SettingsProvider on pause success result=' + JSON.stringify(result));\n this.trackMatomoEvent(\"Interaction\", \"Pause\", \"App Pause\", null);\n }, (error) => {\n this.log(2,'SettingsProvider on pause error=' + JSON.stringify(error));\n }); \n\n this.platform.resume.subscribe(\n (result) => {\n // app is put in the foreground\n this.log(1,'SettingsProvider on resume success result=' + JSON.stringify(result));\n this.trackMatomoEvent(\"Interaction\", \"Resume\", \"App Resume\", null);\n\n this.log(1,'SettingsProvider on resume success appType=' + this.appType + ' _authorised=' + this._authorised + \n ' lastActivationKeyReceivedDate=' + this.lastActivationKeyReceivedDate +\n ' userAuthenticated=' + this.userAuthenticated + ' url=' + this.router.url);\n if (this.appType == 'public') {\n // do we want to go to HomePage on resume or stay on whatever page? For now go to home screen because\n // check for update will happen there\n this.log(1,'SettingsProvider on resume: 1 current url=' + this.router.url);\n if (this.router.url != '/home') {\n this.router.navigateByUrl('/home');\n } \n } if (!this._authorised) {\n if (this.platformIsCordova) {\n if (this.lastActivationKeyReceivedDate)\n this.log(1,'SettingsProvider on resume now=' + Date.now() + ' timeDiffInMinutes=' + this.timeDiffInMinutes(Date.now(),this.lastActivationKeyReceivedDate));\n if (this.lastActivationKeyReceivedDate && \n this.timeDiffInMinutes(Date.now(),this.lastActivationKeyReceivedDate) < 61) {\n this.router.navigateByUrl('/authorise-key');\n } else {\n this.router.navigateByUrl('/authorise-email');\n }\n } else {\n if (this.router.url != '/login') {\n this.router.navigateByUrl('/login');\n }\n }\n } else if (this.currentAppData && !this.userAuthenticated) {\n this.log(1,'SettingsProvider on resume: 2 current url=' + this.router.url);\n if (this.router.url != '/login') {\n this.router.navigateByUrl('/login');\n }\n }\n }, (error) => {\n this.log(2,'SettingsProvider on resume error=' + JSON.stringify(error));\n }); \n\n // GR deviceToken should be define on registration ready event for push notification. \n // Should we store it localy or always get from that event?\n // https://stackoverflow.com/questions/36717556/retrieve-device-token-from-device-using-ionic-framework\n // https://github.com/phonegap/phonegap-plugin-push/issues/1938\n this.deviceToken = 'nopushnotificationsconfigured';\n //this.platformIsCordova = this.platform.is('cordova')\n // GR. It is probably not good name but we use this setting to find out if we work from browser.\n this.platformIsCordova = (this.platform.is('ios') || this.platform.is('android'));\n this.setUserDeviceDetails();\n if (this.device && this.platform.is(\"desktop\") ) {\n this.platformIsCordova = false;\n }\n\n if (this.device && this.platform.is(\"mobileweb\")) {\n this.platformIsCordova = false;\n }\n if (this.platformIsCordova) {\n this.passwordAuthentication = false;\n //this.setUserDeviceDetails();\n if (this.useFirebase) {\n //this.setupFcmNotifications();\n }\n } else if (this.passwordAuthenticationInBrowserEnabled) {\n this.passwordAuthentication = true;\n this._authorised = true; // - do not require email authorisation\n }\n this.log(1,'Settings platform is \"ready\" 2 platforms=' + this.platform.platforms() + ' this.platformIsCordova=' + this.platformIsCordova + ' this.passwordAuthenticationInBrowserEnabled=' + this.passwordAuthenticationInBrowserEnabled + ' this.passwordAuthentication=' + this.passwordAuthentication);\n \n }); \n this.serverApiUrl = this.sourceHost + '/App_Sites/' + this.appTextId + '/Javascript/Ajax/external.aspx';\n this.serverApiUrl2 = this.sourceHost + '/App_Sites/' + this.appTextId + '/Javascript/Ajax/external.ashx';\n this.serverApiUrl2A = this.sourceHost + '/App_Sites/' + this.appTextId + '/Javascript/Ajax/externalA.ashx';\n this.log(1,'SettingsProvider Provider constructor end');\n }\n\n async storageInit() {\n await this.strg.defineDriver(CordovaSQLiteDriver);\n const storage = await this.strg.create();\n this.storage = storage;\n }\n\n // execute predefined cms command on the server by sending POST request and receive JSON\n // structure like that: {\"Success\":false, \"Message\":\"No account found\", \"Data\":{}};\n // commandParametersQS is \"QS\" like string e.g. \"email=test@gamil.com&phone=04229988\"\n // Note that values in commandParametersQS should be encoded with encodeURIComponent()\n executeCommand(commandName: string, commandParametersQS?: string, reqestOptions?: object) {\n if (!reqestOptions) {\n reqestOptions = {\n headers: new HttpHeaders({\n 'Content-Type': 'application/x-www-form-urlencoded'\n })\n };\n }\n let body: any = \"c=\" + commandName + \"&t=\" + this.userToken + \"&did=\" + this.deviceId + \"&ati=\" + this.appTextId;\n if (commandParametersQS) {\n body += \"&\" + commandParametersQS;\n }\n this.log(1,'executeCommand before post serverApiUrl=' + this.serverApiUrl + \" body=\" + this.abbreviate(body,50));\n return this.http.post(this.serverApiUrl, body, reqestOptions); \n }\n\n // execute predefined cms command on the server by sending POST request to serverApiUrl2 and receive JSON\n // structure like that: {\"Success\":false, \"Message\":\"No account found\", \"Data\":{}};\n // commandParametersQS is \"QS\" like string e.g. \"email=test@gamil.com&phone=04229988\"\n // Note that values in commandParametersQS should be encoded with encodeURIComponent()\n // Note that unlike executeCommand command is authenticated by sending sid (sessionid) It is supposed to be\n // valid current session. If not then function will try to \"reauthenticate\" user as a part of this call\n executeCustomCommand(commandName: string, commandParametersQS?: string, reqestOptions?: object, callcounter: number = 1) {\n let t = this;\n return new Promise(\n function (resolve, reject) {\n if (!reqestOptions) {\n reqestOptions = {\n headers: new HttpHeaders({\n 'Content-Type': 'application/x-www-form-urlencoded'\n })\n };\n }\n t.log(1,'executeCustomCommand callcounter=' + callcounter + \" sid=\" + t.currentUserData.SessionId);\n if (!t.currentUserData.SessionId) {\n if (!t.currentUserData.SessionId) {\n // reauthenticate and repeate the process\n t.reAuthenticateUser().then((au:boolean)=>{\n t.log(1,'reAuthenticateUser: au=' + au + ' 1 sid=' + t.currentUserData.SessionId);\n t._authenticated = au;\n t.executeCustomCommand(commandName,commandParametersQS, reqestOptions, 2).then((result)=>{\n resolve(result);\n }).catch(error=>{\n t.log(1,'executeCustomCommand error after reAuthenticateUser 1 error=' + JSON.stringify(error));\n reject(error);\n });\n }).catch(error=>{\n t.log(2,'executeCustomCommand error in reAuthenticateUser 1 error=' + JSON.stringify(error));\n reject(error);\n }); \n } else {\n // that's an error\n reject(new Error(\"Problem with user authentication\"));\n }\n }\n let body: any = \"c=\" + commandName + \"&sid=\" + t.currentUserData.SessionId + \"&userid=\" + t.currentUserData.Userid + \"&companyid=\" + t.currentUserData.CompanyId;\n if (commandParametersQS) {\n body += \"&\" + commandParametersQS;\n }\n t.log(1,'executeCustomCommand before post serverApiUrl=' + t.serverApiUrl2 + \" body=\" + t.abbreviate(body,50));\n //return t.http.post(t.serverApiUrl2, body, reqestOptions); \n t.http.post(t.serverApiUrl2, body, reqestOptions)\n .subscribe((result: any) => { \n if (!result) {\n t.log(2,'executeCustomCommand - empty result from the server');\n reject('empty result from the server'); \n } else if (!result.Success && callcounter == 1 && result.Message == 'Unautheticated Call') {\n t.log(1,'executeCustomCommand Unautheticated Call response - try to reauthenticate');\n t.reAuthenticateUser().then((au:boolean)=>{\n t.log(1,'reAuthenticateUser: au=' + au + ' 2 sid=' + t.currentUserData.SessionId);\n t._authenticated = au;\n t.executeCustomCommand(commandName,commandParametersQS, reqestOptions, 2).then((result)=>{\n resolve(result);\n }).catch(error=>{\n t.log(1,'executeCustomCommand error after reAuthenticateUser 2 error=' + JSON.stringify(error));\n reject(error);\n });\n }).catch(error=>{\n t.log(2,'executeCustomCommand error in reAuthenticateUser 2 error=' + JSON.stringify(error));\n reject(error);\n }); \n } else {\n t.log(1,'executeCustomCommand result=' + t.abbreviate(JSON.stringify(result),200));\n resolve(result);\n }\n }, error => {\n t.log(2,'executeCustomCommand error=' + JSON.stringify(error));\n reject(error);\n });\n });\n } \n\n\n // execute predefined cms command on the server by sending POST request to serverApiUrl2 and receive JSON\n // structure like that: {\"Success\":false, \"Message\":\"No account found\", \"Data\":{}};\n // commandParametersQS is \"QS\" like string e.g. \"email=test@gamil.com&phone=04229988\"\n // Note that values in commandParametersQS should be encoded with encodeURIComponent()\n // Note that unlike executeCommand command is authenticated by sending sid (sessionid) It is supposed to be\n // valid current session. If not then function will try to \"reauthenticate\" user as a part of this call\n submitFormData(commandName: string, formData: FormData, callcounter: number = 1) {\n let t = this;\n return new Promise(\n function (resolve, reject) {\n //let reqestOptions = {\n // headers: new HttpHeaders({\n // 'Content-Type': 'multipart/form-data'\n // })\n //};\n t.log(1,'submitFormData callcounter=' + callcounter + \" sid=\" + t.currentUserData.SessionId);\n if (!t.currentUserData.SessionId) {\n if (!t.currentUserData.SessionId) {\n // reauthenticate and repeate the process\n t.reAuthenticateUser().then((au:boolean)=>{\n t.log(1,'reAuthenticateUser: au=' + au + ' 1 sid=' + t.currentUserData.SessionId);\n t._authenticated = au;\n t.submitFormData(commandName,formData, 2).then((result)=>{\n resolve(result);\n }).catch(error=>{\n t.log(1,'submitFormData error after reAuthenticateUser 1 error=' + JSON.stringify(error));\n reject(error);\n });\n }).catch(error=>{\n t.log(2,'submitFormData error in reAuthenticateUser 1 error=' + JSON.stringify(error));\n reject(error);\n }); \n } else {\n // that's an error\n reject(new Error(\"Problem with user authentication\"));\n }\n }\n //let body: any = \"c=\" + commandName + \"&sid=\" + t.currentUserData.SessionId + \"&uid=\" + t.currentUserData.Userid + \"&cid=\" + t.currentUserData.CompanyId;\n formData.append('c', commandName);\n formData.append('sid', t.currentUserData.SessionId);\n formData.append('userid', t.currentUserData.Userid);\n formData.append('companyid', t.currentUserData.CompanyId);\n\n t.log(1,'submitFormData before post serverApiUrl=' + t.serverApiUrl2 + \" c=\" + commandName);\n //return t.http.post(t.serverApiUrl2, body, reqestOptions); \n t.http.post(t.serverApiUrl2, formData)\n .subscribe((result: any) => { \n if (!result.Success && callcounter == 1 && result.Message == 'Unautheticated Call') {\n t.log(1,'submitFormData Unautheticated Call response - try to reauthenticate');\n t.reAuthenticateUser().then((au:boolean)=>{\n t.log(1,'reAuthenticateUser: au=' + au + ' 2 sid=' + t.currentUserData.SessionId);\n t._authenticated = au;\n t.submitFormData(commandName,formData, 2).then((result)=>{\n resolve(result);\n }).catch(error=>{\n t.log(1,'submitFormData error after reAuthenticateUser 2 error=' + JSON.stringify(error));\n reject(error);\n });\n }).catch(error=>{\n t.log(2,'submitFormData error in reAuthenticateUser 2 error=' + JSON.stringify(error));\n reject(error);\n }); \n } else {\n t.log(1,'submitFormData result=' + t.abbreviate(JSON.stringify(result),200));\n resolve(result);\n }\n }, error => {\n t.log(2,'submitFormData error=' + JSON.stringify(error));\n reject(error);\n });\n });\n } \n\n getBinaryFile(fileUrl) {\n return this.http.get(fileUrl, {responseType: 'blob'});\n }\n\n\tconfigureMatomoAndFirebase() {\n\t\tif (this.isConnected() && this.trackMatomoAnalytics) {\n this.log(1,'configureMatomoAndFirebase _matomoInitialised=' + this._matomoInitialised + ' matomoUrl=' + this.matomoUrl + ' matomoSiteId=' + this.matomoSiteId);\n\t\t\tif (!this._matomoInitialised) {\n\t\t\t\tthis.matomoInjector.init(this.matomoUrl, 0);\n\t\t\t\tthis.matomoTracker.setTrackerUrl(this.matomoUrl + 'piwik.php'); \n\t\t\t\tthis.matomoTracker.setSiteId(this.matomoSiteId); \n\t\t\t\tthis._matomoInitialised = true;\n\t\t\t}\n\t\t\tif (!this._matomoConfigured) {\n\t\t\t\tthis.matomoTracker.enableCrossDomainLinking();\n\t\t\t\tthis.matomoTracker.setCookieDomain(this.getHostname(this.sourceHost)); // do we consider web site as \"local\" ? Probably not.\n\t\t\t\tthis.matomoTracker.setDomains([this.appTextId + \".app\",this.getHostname(this.sourceHost)]); // do we consider web site as \"local\" ? Probably not.\n\t\t\t\tthis.matomoTracker.enableLinkTracking(true); // it tracks \"standard\" clicks by default \n\t\t\t\tthis._matomoConfigured = true;\n\t\t\t}\n } \n if (this.useFirebase) { \n // this.firebase.setAnalyticsCollectionEnabled(this.trackFirebaseAnalytics);\n }\n this.configureMatomoUser();\n\t}\n\n configureMatomoUser() {\n let t = this;\n if (t.isConnected() && t.trackMatomoAnalytics) { \n // GR we use deviceId as matomo UserId. *** That changed - see below\n //t.matomoTracker.setUserId(t.deviceId);\n t.matomoTracker.setCustomVariable(1,\"deviceid\",t.deviceId,\"visit\");\n if (t.userAuthenticated) {\n // GR. 2021-09-03 set up useid the same way as on a site\n t.matomoTracker.setUserId(t.currentUserData.Username + '_' + t.currentUserData.Userid);\n //t.matomoTracker.setCustomVariable(2,\"userid\",t.currentUserData.Userid,\"visit\"); \n }\n if (t.currentUserData && t.currentUserData.DeviceModel) {\n t.matomoTracker.setCustomVariable(3,\"devicemodel\",t.currentUserData.DeviceModel,\"visit\"); \n } \n let source = \"web\";\n if (t.platformIsCordova) {\n source = \"app\";\n }\n t.matomoTracker.setCustomVariable(4,\"source\",source,\"visit\"); \n t.matomoTracker.setCustomVariable(5,\"role\",t.currentUserRole,\"page\"); // role can change during a visit \n //t.matomoTracker.disableCookies();\n this.log(1,'configureMatomoUser t.userAuthenticated=' + t.userAuthenticated + ' source=' + source);\n } \n }\n\n // get new or stored deviceId and return promise - used for the public app\n getDeviceId() {\n\t\tvar t = this;\t\n\t\treturn new Promise(\n\t\t function (resolve, reject) { \n t.platform.ready().then(() => {\n t.getKey('deviceid').then((deviceid:string)=>{\n t.log(1,\"deviceid from storage deviceid=\" + deviceid);\n t.deviceId = deviceid;\n if (!deviceid) {\n t.deviceId = t.generateUUID(); \n t.log(1,\"Create new deviceId=\" + t.deviceId); \n t.setKey('deviceid',t.deviceId); \n }\n resolve(t.deviceId);\n }).catch((error)=>{\n t.deviceId = t.generateUUID();\n t.log(1,\"Can not read deviceid from storage \" + JSON.stringify(error) + \" created deviceId=\" + t.deviceId); \n t.setKey('deviceid',t.deviceId);\n resolve(t.deviceId);\n });\n\t\t\t });\n }\n )\n }\n\n // setting up device info. It must be done after device ready. We do it on successful login.\n setUserDeviceDetails() {\n this.log(1,\"setUserDeviceDetails this.device=\" + this.device + \" cordova=\" + this.platform.is('cordova'));\n if (this.device) {\n this.log(1,\"setUserDeviceDetails this.device.model=\" + this.device.model);\n }\n // GR those values below are supposed to be taken from device object after\n // ionic cordova plugin add cordova-plugin-device &\n // import { Device } from '@ionic-native/device/ngx' constructor(private device: Device);\n if (this.device && this.platform.is('cordova')) {\n this.currentUserData.DeviceManufacturer = this.device.manufacturer;\n this.currentUserData.DeviceModel = this.device.model;\n this.currentUserData.DevicePlatform = this.device.platform;\n this.currentUserData.DeviceVersion = this.device.version;\n this.log(1,\"setUserDeviceDetails this.device.platform=\" + this.device.platform);\n }\n }\n\n // this should be called when Authorisation process starts first or next time\n // so one will HAVE TO enter key sent in email to become authorised again\n authorisationStarted() {\n this._authorised = false;\n }\n\n // creates a html string with options for dropdowns\n GetOptionsFromPipeSeparatedString(capPartCategories) { \n let options = '';\n if (capPartCategories) {\n let parts = capPartCategories.split('|');\n for (var i=0;i'+p+'\\n';\n } \n }\n this.log(1,'GetOptionsFromPipeSeparatedString: capPartCategories=' + capPartCategories);\n return options;\n }\n\n // creates dropdown array\n GetDropdownFromPipeSeparatedString(capPartCategories,currentValue='') { \n let arr = [];\n if (capPartCategories) {\n let parts = capPartCategories.split('|');\n for (var i=0;i -1)};\n checkboxes.push(category);\n } \n }\n this.log(1,'GetCheckboxesFromPipeSeparatedString: capPartCategories=' + capPartCategories + ' length=' + checkboxes.length);\n return checkboxes;\n }\n \n handleClick(event) {\n let s = this;\n let t = event.target;\n if (t.tagName != \"A\") {\n t = event.target.parentNode;\n if (t.tagName != \"A\") {\n t = event.target.parentNode;\n }\n }\n s.log(1,'*** handleClick t.tagName=' + t.tagName + ' href=' + t.href);\n if (t.tagName == \"A\") { \n //let href = event.target.href.replace(/https?\\:\\/\\/localhost\\:\\d+\\//,'');\n let href = t.href;\n let currentHost = this.getHostname(window.location.href);\n if (href.indexOf('file:') > -1 || (currentHost && href.indexOf(currentHost) > -1)) {\n let parts = href.split('/');\n href = parts[parts.length-1];\n }\n s.log(1,'*** handleClick href=' + href + ' s.sourceHost=' + s.sourceHost + ' s.appSiteHost=' + s.appSiteHost + ' currentHost=' + currentHost);\n if (href.indexOf('/') == 0) { \n // that's relative link which now will be transformed to the main site!\n href = s.appSiteHost + href;\n }\n if (href.indexOf('http') == 0) { \n // GR Do we want to manually call matomo functions here? \n let extRegex = /.*\\.(7z|aac|arc|arj|apk|asf|asx|avi|bin|bz|bz2|csv|deb|dmg|doc|exe|flv|gif|gz|gzip|hqx|jar|jpg|jpeg|js|mp2|mp3|mp4|mpg|mpeg|mov|movie|msi|msp|odb|odf|odg|odp|ods|odt|ogg|ogv|pdf|phps|png|ppt|qt|qtm|ra|ram|rar|rpm|sea|sit|tar|tbz|tbz2|tgz|torrent|txt|wav|wma|wmv|wpd|xls|xml|z|zip)/;\n if (href.match(extRegex)) {\n s.trackMatomoDownload(href);\n } else {\n s.trackMatomoLink(href);\n } \n }\n if ((href.indexOf(s.sourceHost) == 0 || href.indexOf(s.appSiteHost) == 0) && href.indexOf('autologin=1') > -1) {\n s.getJwtToken(href).then(token=>{\n let url = href.replace('autologin=1','jwt=' + token)\n s.log(1,'clicked link: ' + href + ' url=' + url);\n this.openExternalUrl(url);\n //window.open(url, '_system', 'location=yes');\n return false;\n }).catch(error=>{\n s.log(2,'error getting Jwt token: ' + error);\n //window.open(href, '_system', 'location=yes');\n this.openExternalUrl(href);\n return false; \n }) \n } else if (href.indexOf('#') == 0) {\n let el = document.getElementById(href.substring(1));\n s.log(1,'*** handleClick local anchor link id=' + href.substring(1) + ' el=' + el);\n if (el) {\n el.scrollIntoView(); \n }\n } else if (href.indexOf('http') == -1 && href.indexOf('Page') > -1) {\n // we assume that this is a reference to local page which may have form NameOfStaticPage or DynamicPage.id\n let parts = href.split('.');\n if (parts.length == 1) {\n s.openPageByStaticUrlAndId(parts[0],'');\n } else {\n s.openPageByStaticUrlAndId('',parts[1]);\n }\n } else {\n //this.iab.create(href, \"_system\");\n //window.open(href,'_system', 'location=yes');\n this.openExternalUrl(href);\n }\n return false;\n }\n }\n\n logout() {\n this.userAuthenticated = false;\n if (!this.platformIsCordova) {\n this.setCookie('iobsid', '', this.passwordSessionTimeInMinutes);\n this.setCookie('iobrole', '', this.passwordSessionTimeInMinutes);\n } \n this.openPage('/login');\n }\n\n openExternalUrl(url) {\n this.log(1,'openExternalUrl: url=' + url);\n if ((url.indexOf(this.sourceHost) > -1 || url.indexOf(this.appSiteHost) > -1) && url.indexOf('autologin=1') > -1) {\n this.getJwtToken(url).then(token=>{\n url = url.replace('autologin=1','jwt=' + token);\n this.log(1,'openExternalUrl: new url=' + url);\n this.openExternalUrl(url);\n }).catch(error=>{\n this.log(2,'openExternalUrl: error getting Jwt token: ' + error);\n url = url.replace('autologin=1','');\n this.openExternalUrl(url); \n }) \n } else {\n this.log(1,'openExternalUrl: this.platformIsCordova=' + this.platformIsCordova);\n if (!this.platformIsCordova) {\n // click from website. We want it to behave as \"normal click on a link\" does\n Object.assign(document.createElement('a'), {\n target: '_blank',\n href: url,\n }).click(); \n //window.open(url,'_blank');\n } else if (this.platform.is('ios')) {\n this.log(1,'openExternalUrl: ios open url in inAppBrowser');\n this.inAppBrowser.create(url, '_system');\n } else {\n this.log(1,'openExternalUrl: cordova open url with window.open');\n window.open(url,'_system', 'location=yes');\n } \n }\n return false;\n }\n\n openPageByStaticUrlAndId(staticpageurl, pageid = '') {\n this.log(1,'openPageByStaticUrlAndId: staticpageurl=' + staticpageurl + ' pageid=' + pageid);\n let pageUrl = \"DynamicPage\";\n let params = {};\n if (staticpageurl) {\n pageUrl = staticpageurl;\n } else {\n params = {id: pageid};\n }\n this.openPage(pageUrl, params);\n }\n\n getDynamicIdForStaticPage(staticpageurl) {\n let pageid = '';\n for (let id in this.staticPageMap) { \n if (this.staticPageMap[id] == staticpageurl) {\n pageid = id;\n }\n }\n return pageid;\n }\n\n openPage(pageName, pageParams: any = {}) {\n this.log(1,'settings openPage this.userAuthenticated=' + this.userAuthenticated);\n this.log(1,'settings openPage pageName=' + pageName + ' pageParams=' + JSON.stringify(pageParams) \n + ' current url=' + this.router.url + ' href=' + window.location.href);\n if (pageName.indexOf('http') == 0) {\n this.openExternalUrl(pageName);\n } else if (this.router) {\n this.previousUrl = this.router.url;\n if (pageParams && pageParams.id && this.staticPageMap[pageParams.id]) {\n pageName = this.staticPageMap[pageParams.id];\n if (pageName.substring(0,1) != \"/\") {\n pageName = \"/\" + pageName;\n }\n // Should we also convert URLs like AuthoriseEmailPage to authorise-email automatically? Do it below\n if (pageName.endsWith('Page')) { \n pageName = pageName.substring(0,pageName.length-4).replace(/([A-Z])/g,\"\\-$1\").toLowerCase().replace('/-','/');\n } \n this.log(1,'settings openPage staticPageMap[pageParams.id]=' + this.staticPageMap[pageParams.id] + ' url=' + pageName);\n // GR 20210219 - shouldn't we push id of \"original\" page to mapped static page as well (see below)? That will allow\n // to display \"other data\" like body passed dynamically. We are doing it more hard coded way on a home page already.\n // this.navCtrl.push(this.staticPageMap[pageParams.id], pageParams);\n } else {\n if (pageName.substring(0,1) != \"/\") {\n pageName = \"/\" + pageName;\n }\n // Should we also convert URLs like AuthoriseEmailPage to authorise-email automatically? Do it below\n if (pageName.endsWith('Page')) { \n pageName = pageName.substring(0,pageName.length-4).replace(/([A-Z])/g,\"\\-$1\").toLowerCase().replace('/-','/');\n } \n if (pageParams && pageParams.id) {\n pageName = pageName + \"/\" + pageParams.id;\n } \n this.log(1,'settings openPage url=' + pageName);\n }\n if (this.appType == 'public' || this.userAuthenticated || pageName.toLowerCase().indexOf('authorise') >= 0 || pageName.toLowerCase().indexOf('terms') >= 0) {\n this.lastClickedUrl = \"\"; \n if (pageName.startsWith('/quote-request-add') && (pageName.indexOf('extraid') > -1 || (pageParams && pageParams.extraid))) {\n if (this.router.url.startsWith('/quote-requests')) {\n this.trackMatomoEvent(\"Marketplace Trading\", \"Relist Quote Request\", \"Relist button on Quotes Recived screen\", null);\n } else if (this.router.url.startsWith('/orders/current')) {\n this.trackMatomoEvent(\"Marketplace Trading\", \"Relist Quote Request\", \"Relist button on Current Orders screen\", null);\n } else if (this.router.url.startsWith('/orders/archived')) {\n this.trackMatomoEvent(\"Marketplace Trading\", \"Relist Quote Request\", \"Relist button on Past Orders screen\", null);\n }\n }\n if (pageParams && (pageParams.extraid || pageParams.role)) {\n if (pageParams.id) {\n delete pageParams.id;\n }\n this.router.navigate([pageName, pageParams])\n } else {\n if (this.router.url != '/login' && this.router.url != '/splash') {\n this.lastClickedUrl = pageName;\n this.lastClickedUserId = this.currentUserData.Userid;\n if (this.currentUserRole) {\n this.lastClickedUserRole = this.currentUserRole;\n }\n if (this.currentUserRole == 'buyer' && this.switchRolesEnabled) {\n this.lastClickedUrl = pageName + ';role=buyer'; \n }\n }\n this.log(1,'settings openPage 1 lastClickedUrl=' + this.lastClickedUrl + ' this.lastClickedUserId=' + this.lastClickedUserId + ' this.lastClickedUserRole=' + this.lastClickedUserRole);\n this.router.navigateByUrl(pageName);\n }\n } else {\n //if (pageName != '/login' && !pageParams.extraid) {\n // this.lastClickedUrl = pageName;\n //} else \n if (this.router.url != '/login' && this.router.url != '/splash') {\n if (this.router.url == '/' && window.location.href && window.location.href.indexOf('#') > -1) {\n this.lastClickedUrl = window.location.href.split('#')[1];\n } else {\n this.lastClickedUrl = this.router.url;\n }\n //this.lastClickedUserId = this.currentUserData.Userid;\n //this.lastClickedUserRole = this.currentUserRole; \n }\n this.log(1,'settings openPage 2 lastClickedUrl=' + this.lastClickedUrl + ' this.lastClickedUserId=' + this.lastClickedUserId + ' this.lastClickedUserRole=' + this.lastClickedUserRole);\n this.router.navigateByUrl(\"/login\");\n } \n }\n } \n\n \n openLinkFromModalPage(pageurl) {\n let s = this; \n if (pageurl.indexOf(\"http\") == 0) {\n // that is external link\n if ((pageurl.indexOf(s.sourceHost) == 0 || pageurl.indexOf(s.appSiteHost) == 0) && pageurl.indexOf('autologin=1') > -1) {\n s.getJwtToken(pageurl).then(token=>{\n let url = pageurl.replace('autologin=1','jwt=' + token)\n s.log(1,'clicked link: url=' + url);\n window.open(url, '_system');\n }).catch(error=>{\n s.log(2,'error getting Jwt token: ' + error);\n window.open(pageurl, '_system'); \n }); \n } else {\n window.open(pageurl, '_system'); \n }\n } else if (pageurl.indexOf(\"Page\") == pageurl.length - 4) {\n // that's a bit brutal but we consider that page a static page\n s.openPage(pageurl, {});\n } else {\n // must be dynamic page\n s.openPage(\"DynamicPage\", {id: pageurl});\n }\n }\n\n sanitize(html) {\n return this.domSanitizer.bypassSecurityTrustHtml(html);\n }\n\n sanitizeUrl(url) {\n //let newUrl = this.domSanitizer.bypassSecurityTrustUrl(url);\n this.log(0,\"sanitizeUrl: url=\" + url);\n return this.domSanitizer.bypassSecurityTrustUrl(url);\n }\n\n GetQuoteRequestImages(images,CompanyID,QuoteRequestID) {\n ///images/marketplace/companies/cid/quoterequest_id/resized/unique_name.jpg\n var arrImages = [];\n this.log(1,'GetQuoteRequestImages: images=' + images + ' CompanyID=' + CompanyID + ' QuoteRequestID=' + QuoteRequestID);\n if (images) {\n // create list of image tags to display images from the server\n let parts = images.split(',');\n let url0 = this.sourceHost + '/images/marketplace/companies/' + CompanyID + '/quoterequest_' + QuoteRequestID + '/resized/';\n for (let i=0;iJust before you accept this quote... \n
Please check the quote details accurately reflects what you like to order.\n
\n
\n If you need to request changes, please go to REQUEST UPDATE before accepting the quote.\n
`\n ,\n animated: true,\n cssClass: 'lightBox',\n buttons: [{\n text: 'Accept Quote',\n handler: () => {\n let screen = \"Quote\";\n if (s.router.url.indexOf('quote-requests') > 0) {\n screen = 'Quote Received';\n }\n s.trackMatomoEvent(\"Marketplace Trading\", \"Accept Quote\", \"Accept button on \" + screen + \" screen\", null);\n s.executeCustomCommand('AcceptQuote','quoteid=' + id ).then((result: any)=>{\n s.log(1,'acceptQuote: result.Success=' + result?.Success + ' getUserNavigationListUrl=' + s.getUserNavigationListUrl());\n if (result && result.Success) {\n // redirect to home page or request list view\n let rurl = s.getUserNavigationListUrl();\n if (this.router.url != rurl) {\n s.openPage(s.getUserNavigationListUrl());\n } else if (p) {\n p.ionViewWillEnter();\n }\n } else {\n s.displayServerError(result.Message);\n }\n }).catch(error=>{\n s.displayServerError(\"Error happened during Quote Acceptance operation. Please try again later.\");\n s.log(2,'*** error returned from acceptQuote\" call error: ' + JSON.stringify(error));\n }); \n }\n }, \n {\n text: 'Cancel'\n }\n ]\n }).then(alert=> {\n alert.present();\n }); \n }\n\n rejectQuote(id, p: any = null) {\n let s = this;\n s.log(1,'rejectQuote');\n const alert = this.alertController.create({\n //header: 'Request Info',\n message: `

Confirm that you would like to reject this quote

\n
What a shame!\n
\n
\n Please confirm that you would like to reject this Quote?\n
\n
\n An email will be sent to the Seller letting them know.\n
`\n ,\n animated: true,\n cssClass: 'lightBox',\n buttons: [{\n text: 'Reject Quote',\n handler: () => {\n let screen = \"Quote\";\n if (s.router.url.indexOf('quote-requests') > 0) {\n screen = 'Quote Received';\n }\n s.trackMatomoEvent(\"Marketplace Trading\", \"Reject Quote\", \"Reject button on \" + screen + \" screen\", null); \n s.executeCustomCommand('RejectQuote','quoteid=' + id ).then((result: any)=>{\n s.log(1,'rejectQuote: result.Success=' + result?.Success + ' getUserNavigationListUrl=' + s.getUserNavigationListUrl());\n if (result && result.Success) {\n // redirect to home page or request list view\n let rurl = s.getUserNavigationListUrl();\n if (this.router.url != rurl) {\n s.openPage(s.getUserNavigationListUrl());\n } else if (p) {\n p.ionViewWillEnter();\n }\n } else {\n s.displayServerError(result.Message);\n }\n }).catch(error=>{\n s.displayServerError(\"Error happened during Bid Rejection operation. Please try again later.\");\n s.log(2,'*** error returned from rejectQuote\" call error: ' + JSON.stringify(error));\n }); \n }\n }, \n {\n text: 'Cancel'\n }\n ]\n }).then(alert=> {\n alert.present();\n }); \n }\n\n rejectRemainingQuotes(quoteRequest, p: any = null) {\n let s = this;\n s.log(1,'rejectRemainingQuotes: quoteRequest.ID=' + quoteRequest.ID);\n const alert = this.alertController.create({\n //header: 'Request Info',\n message: `

Finish Auction

\n
\n That action will reject all 'not accepted' Bids for the Quote Request\n
`\n ,\n animated: true,\n cssClass: 'lightBox',\n buttons: [{\n text: 'Confirm',\n handler: () => {\n let screen = 'Quote Request';\n if (s.router.url.indexOf('/quote-requests/') > -1) {\n screen = \"Quotes Received\";\n }\n s.trackMatomoEvent(\"Marketplace Trading\", \"Complete Quote Request\", \"Complete button on \" + screen + \" screen\", null);\n \n s.executeCustomCommand('rejectremainingquotes','quoterequestid=' + quoteRequest.ID ).then((result: any)=>{\n s.log(1,'rejectremainingquotes: result.Success=' + result?.Success + ' getUserNavigationListUrl=' + s.getUserNavigationListUrl());\n if (result && result.Success) {\n if (p) {\n //execute 'refresh' function if page object was provided\n p.ionViewWillEnter();\n } else {\n s.openPage(s.getUserNavigationListUrl());\n }\n } else {\n s.displayServerError(result.Message);\n }\n }).catch(error=>{\n s.displayServerError(\"Error happened during Reject Remaining Quote operation. Please try again later.\");\n s.log(2,'*** error returned from rejectQuote\" call error: ' + JSON.stringify(error));\n }); \n }\n }, \n {\n text: 'Cancel'\n }\n ]\n }).then(alert=> {\n alert.present();\n });\n }\n\n addOrderNote(id, p: any = null) {\n let s = this;\n s.log(1,'addOrderNote id=' + id);\n const alert = s.alertController.create({\n header: 'Order Note',\n message: `\n
`,\n animated: true,\n cssClass: 'lightBox',\n buttons: [{\n text: 'Add Note',\n handler: () => {\n let ele: any = document.getElementById('AlertErrorBox');\n let elm: any = document.getElementById('infomessage');\n var body = 'id=' + id + '&role=' + s.currentUserRole + '&message=' + encodeURIComponent(elm.value);\n s.trackMatomoEvent(\"Marketplace Trading\", \"Add Note to Order\", \"Add Note button on Order screen\", null); \n s.executeCustomCommand('addordernote',body).then((result)=>{\n s.log(1,'*** \"addOrderNote\" returns: ' + JSON.stringify(result));\n if (p) {\n //execute 'refresh' function if page object was provided\n p.ionViewWillEnter();\n } \n }).catch(error=>{\n s.log(2,'*** error returned from addOrderNote\" call error: ' + JSON.stringify(error));\n if (ele) {\n ele.innerHTML = \"Error happened during adding note. Please try again later.\";\n return false; \n }\n }); \n }\n },\n {\n text: 'Cancel'\n }]\n }).then(alert=> {\n alert.present();\n }); \n }\n\n changeOrderStatus(id, status='', p: any = null) {\n let s = this;\n let statuses = s.coremodulesdata.autopartsmarketplace['OrderStatuses' + s.capitalize(s.currentUserRole)];\n let m = `

Please select the updated status from the list bellow

\n
\n `;\n if (status) {\n m = 'Please confirm that order is ' + status;\n }\n s.log(1,'changeOrderStatus id=' + id);\n const alert = s.alertController.create({\n header: 'Change Order Status',\n message: m + `\n
`,\n animated: true,\n cssClass: 'lightBox',\n buttons: [{\n text: 'Change Status',\n handler: () => {\n let eli: any = document.getElementById('infotype');\n let ele: any = document.getElementById('AlertErrorBox');\n let elm: any = document.getElementById('infomessage');\n if (ele && !status) {\n s.log(1,'infotype=' + eli.options[eli.selectedIndex].value);\n status = eli.options[eli.selectedIndex].value;\n }\n let screen = 'Order';\n if (s.router.url.indexOf('/orders/') > -1) {\n screen = \"Current Orders\";\n }\n s.trackMatomoEvent(\"Marketplace Trading\", \"Change Order Status\", \"Change Status button on \" + screen + \" screen\", null);\n\n var body = 'id=' + id + '&status=' + encodeURIComponent(status) + '&role=' + s.currentUserRole + '&message=' + encodeURIComponent(elm.value);\n s.executeCustomCommand('updateorderstatus',body).then((result)=>{\n s.log(1,'*** \"changeOrderStatus\" returns: ' + JSON.stringify(result));\n if (p) {\n //execute 'refresh' function if page object was provided\n p.ionViewWillEnter();\n } \n }).catch(error=>{\n s.log(2,'*** error returned from changeOrderStatus\" call error: ' + JSON.stringify(error));\n if (ele) {\n ele.innerHTML = \"Error happened during changing status. Please try again later.\";\n return false; \n }\n }); \n }\n },\n {\n text: 'Cancel'\n }]\n }).then(alert=> {\n alert.present();\n }); \n }\n\n cancelObject(id, objecttype, p: any = null) {\n let s = this;\n s.log(1,'cancelObject ' + objecttype + ' id=' + id);\n let ctext = 'Order and may negatively impact your rating.';\n if (objecttype.toLowerCase() == 'quoterequest') {\n ctext = 'Quote Request and all related Quotes/Orders (if they exsist). It may negatively impact your rating.';\n } else if (objecttype.toLowerCase() == 'quote') {\n ctext = 'Bid and Order (if Bid was accepted). It may negatively impact your rating.';\n }\n let categories = s.coremodulesdata.autopartsmarketplace['CancelCategories' + s.getDefaultObjectName(objecttype) + s.capitalize(s.currentUserRole)];\n const alert = this.alertController.create({\n message: '

Why are you choosing to cancel?

' + \n '
' + \n '\n NOTE: This will cancel ` + ctext + `\n
\n `\n ,\n animated: true,\n cssClass: 'lightBox',\n buttons: [{\n text: 'Submit',\n handler: () => {\n let eli: any = document.getElementById('infotype');\n let ele: any = document.getElementById('AlertErrorBox');\n s.log(1,'infotype=' + eli.value);\n let screen = \"Order\";\n if (s.router.url.indexOf('/quotes/') > -1) {\n screen = \"Active Bids\";\n } else if (s.router.url.indexOf('/quote-add/') > -1) {\n screen = \"Bid\";\n } else if (s.router.url.indexOf('/orders/') > -1) {\n screen = \"Current Orders\";\n } else if (s.router.url.indexOf('/quote-requests/') > -1) {\n screen = \"for Quote Request on Received Quotes\";\n }\n s.trackMatomoEvent(\"Marketplace Trading\", \"Cancel\", \"Cancel button on \" + screen + \" screen\", null);\n var body = objecttype.toLowerCase() + 'id=' + id + '&reason=' + encodeURIComponent(eli.value);\n s.executeCustomCommand('cancel' + objecttype.toLowerCase(),body).then((result)=>{\n s.log(1,'*** \"cancelObject\" returns: ' + JSON.stringify(result) + ' url=' + s.getUserNavigationListUrl() + ' p=' + p);\n if (p) {\n //execute 'refresh' function if page object was provided\n p.ionViewWillEnter();\n } else {\n // redirect to home page or corresponding list view\n s.openPage(s.getUserNavigationListUrl()); \n }\n }).catch(error=>{\n s.log(2,'*** error returned from cancelObject\" call error: ' + JSON.stringify(error));\n if (ele) {\n ele.innerHTML = \"Error happened during cancellation submission. Please try again later.\";\n return false; \n }\n }); \n }\n },\n {\n text: 'Cancel'\n }\n ]\n }).then(alert=> {\n alert.present();\n }); \n }\n\n getDefaultObjectName(objecttype) {\n let name = '';\n if (objecttype) {\n name = objecttype.toLowerCase().replace(/s*$/,'');\n if (name == 'quoterequest') {\n name = 'QuoteRequest';\n } else if (name == 'quote') {\n name = 'Quote';\n } else if (name == 'order') {\n name = 'Order';\n }\n }\n return name;\n }\n\n // objecttype is one of: quoterequest, quote, order\n requestToDeleteData(username,containerElementId) {\n let s = this;\n let header = 'My Details';\n const alert = this.alertController.create({\n message: '

' + header + `

\n
Please confirm that you would like to request your data to be deleted?

\n
If you request that your data to be deleted, we will be in contact to arrange this for you.
\n
Note that you will no longer be able to access the app after your data is deleted.
\n `,\n animated: true,\n cssClass: 'lightBox',\n buttons: [{\n text: 'Confirm Request',\n handler: () => {\n let elm: any = document.getElementById(containerElementId);\n if (elm) {\n var commandParameters = 'info=' + s.getUserAndDeviceInfoJson();\n s.log(1,'requestToDeleteData: before call to requesttodeletedata');\n s.executeCommand('requesttodeletedata',commandParameters).subscribe((result: any) => { \n if (result.Success) {\n elm.className = \"informationMessage\";\n s.log(1,'*** \"requestToDeleteData\" returns: ' + JSON.stringify(result));\n elm.innerHTML = \"Your request to delete data has been submitted.\";\n s.trackMatomoEvent(\"Interaction\", \"Run\", \"Request To Delete Data\", \"1\");\n } else {\n // display error message\n elm.className = \"error\";\n elm.innerHTML = \"Error happened during request to delete data submission. Please try again later \"; \n s.log(2,'requestToDeleteData error message=' + result.Message);\n s.trackMatomoEvent(\"Interaction\", \"Run\", \"Request To Delete Data\", \"0\");\n } \n }, error => {\n elm.className = \"error\";\n s.log(2,'*** error returned from requestToDeleteData\" call error: ' + JSON.stringify(error));\n elm.innerHTML = \"Error happened during request to delete data submission. Please try again later. \"; \n s.trackMatomoEvent(\"Interaction\", \"Run\", \"Request To Delete Data\", \"0\"); \n }); \n } else {\n s.log(2,'*** requestToDeleteData: no containerElement found');\n return false; \n }\n }\n },\n {\n text: 'Cancel'\n }\n ]\n }).then(alert=> {\n alert.present();\n }); \n }\n \n\n // objecttype is one of: quoterequest, quote, order\n requestInfo(id, objecttype, recipientCompanyId, requestForUpdate=false, p: any = null) {\n let s = this;\n let header = 'What is your question';\n if (requestForUpdate) {\n header = 'What is your request to change this quote';\n }\n let categoryName = 'QuestionCategories' + s.getDefaultObjectName(objecttype) + s.capitalize(s.currentUserRole);\n let categories = s.coremodulesdata.autopartsmarketplace[categoryName];\n s.log(1,'requestInfo categoryName=' + categoryName);\n const alert = this.alertController.create({\n //header: 'Request Info',\n message: '

' + header + '

' + \n '
' + \n '' +\n ''+\n '
'\n ,\n animated: true,\n cssClass: 'lightBox',\n buttons: [{\n text: 'Submit',\n handler: () => {\n let eli: any = document.getElementById('infotype');\n let elm: any = document.getElementById('infomessage');\n let ele: any = document.getElementById('AlertErrorBox');\n s.log(1,'infotype=' + eli.options[eli.selectedIndex].value + ' infomessage=' + elm.value);\n if (elm.value) {\n let forobj = '';\n let screen = 'Order';\n if (s.router.url.indexOf('quote-request') > -1) {\n screen = 'Quote Received';\n } else if (s.router.url.indexOf('quote/') > -1) {\n screen = 'Quote';\n } else if (s.router.url.indexOf('quote-add') > -1) {\n if (objecttype == 'quoterequest') {\n forobj = 'for a Quote Request';\n } else {\n forobj = 'for a Bid';\n }\n screen = 'Bid';\n }\n if (requestForUpdate) {\n s.trackMatomoEvent(\"Marketplace Trading\", \"Request Update on Quote\", \"Request Update button on \" + screen + \" screen\", null); \n } else {\n s.trackMatomoEvent(\"Marketplace Trading\", \"Ask a Question\", \"Ask a Question button \" + forobj + \" on \" + screen + \" screen\", null); \n }\n var com = encodeURIComponent(eli.value);\n if (requestForUpdate) {\n com = \"Request for Update: \" + com + '&requestForUpdate=1';\n }\n var body = objecttype + 'id=' + id + '&recipientCompany=' + recipientCompanyId +\n '&CommunicationType=' + com + \n '&QuestionText=' + encodeURIComponent(elm.value) + '&AskingUserRole=' + s.currentUserRole;\n s.log(1,'body=' + body);\n s.executeCustomCommand('SubmitInformationRequest',body).then((result)=>{\n s.log(1,'*** \"SubmitInformationRequest\" returns: ' + JSON.stringify(result));\n if (p) {\n //execute 'refresh' function if page object was provided\n p.ionViewWillEnter();\n }\n }).catch(error=>{\n s.log(2,'*** error returned from SubmitInformationRequest\" call error: ' + JSON.stringify(error));\n if (ele) {\n ele.innerHTML = \"Error happened during information request submission. Please try again later.\";\n return false; \n }\n }); \n } else {\n if (ele) {\n ele.innerHTML = \"Please enter request message\";\n return false; \n }\n }\n }\n },\n {\n text: 'Cancel'\n }\n ]\n }).then(alert=> {\n alert.present();\n }); \n }\n\n // qs below is one of: quoterequestid=NN or quoteid=NN or orderid=NN\n answerQuestion(questionId, recipientCompanyId, qs, p: any = null) {\n let s = this;\n s.log(1,'answerQuestion');\n const alert = this.alertController.create({\n //header: 'Request Info',\n message: '

Answer Question

' + \n '
' + \n ''+\n '
'\n ,\n animated: true,\n cssClass: 'lightBox',\n buttons: [{\n text: 'Submit Answer',\n handler: () => {\n let elm: any = document.getElementById('infomessage');\n let ele: any = document.getElementById('AlertErrorBox');\n if (elm.value) {\n let screen = 'Order';\n if (s.router.url.indexOf('quote-request') > -1) {\n screen = 'Quote Request';\n } else if (s.router.url.indexOf('quote/') > -1 || s.router.url.indexOf('quote-add') > -1) {\n screen = 'Quote';\n }\n s.trackMatomoEvent(\"Marketplace Trading\", \"Answer Question\", \"Answer button on \" + screen + \" screen\", null);\n var body = qs + '&id=' + questionId + '&recipientCompany=' + recipientCompanyId +'&AnswerText=' + encodeURIComponent(elm.value) + \n '&role=' + s.currentUserRole;\n //s.log(1,'answerQuestion body=' + body);\n s.executeCustomCommand('SubmitInformationRequest',body).then((result)=>{\n s.log(1,'*** \"answerQuestion\" returns: ' + JSON.stringify(result));\n if (p) {\n //execute 'refresh' function if page object was provided\n p.ionViewWillEnter();\n }\n }).catch(error=>{\n s.log(2,'*** error returned from answerQuestion\" call error: ' + JSON.stringify(error));\n if (ele) {\n ele.innerHTML = \"Error happened during information request submission. Please try again later.\";\n return false; \n }\n }); \n } else {\n if (ele) {\n ele.innerHTML = \"Please enter an answer\";\n return false; \n }\n }\n }\n },\n {\n text: 'Cancel'\n }\n ]\n }).then(alert=> {\n alert.present();\n }); \n }\n\n quoteRequestNotInStock(id) {\n return this.executeCustomCommand('SellerQuoteRequestNotInStock','id=' + id );\n }\n \nroundRating(rating) {\n return (Math.floor(2*rating + 0.4))/2;\n}\n\n GetQuoteRowImages(images,CompanyID,QuoteID,RowID) {\n ///images/marketplace/companies/cid/quote_id/rid/resized/unique_name.jpg\n this.log(1,'GetQuoteRowImages: images=' + images + ' CompanyID=' + CompanyID + ' QuoteID=' + QuoteID + ' RowID=' + RowID);\n var arrImages = [];\n if (images) {\n // create list of image tags to display images from the server\n let parts = images.split(',');\n let url0 = this.sourceHost + '/images/marketplace/companies/' + CompanyID + '/quote_' + QuoteID + '/' + RowID + '/resized/';\n for (let i=0;i{\n if (!this.firebaseHasPermissions) {\n //this.firebase.grantPermission();\n let t = this;\n this.firebaseMessaging.requestPermission().then(result => {\n this.firebaseHasPermissions = true;\n t.log(1, \"setupFcmNotifications: grantPermission result=\" + result);\n // it doesn't look like result actually has any information about user choice\n //t.firebase.hasPermission().then(data=>{\n // if (!data.isEnabled) {\n t.trackMatomoEvent(\"Interaction\", \"Notification\", \"Push Notification Permission Granted\", null);\n // } else {\n // t.trackMatomoEvent(\"Interaction\", \"Notification\", \"Push Notification Permission Refused\", null);\n // }\n //})\n }).catch(error => {\n t.trackMatomoEvent(\"Interaction\", \"Notification\", \"Push Notification Permission Granting Error\", null);\n t.log(2, \"setupFcmNotifications: grantPermission - ERROR:\" + error);\n });\n }\n //})\n this.fcmSubscribe('ios');\n } else if (this.platform.is('android')) {\n this.fcmSubscribe('android');\n }\n\n this.firebaseMessaging.getToken().then(token=>{\n if (token) this.deviceToken = token;\n this.log(1, \"setupFcmNotifications: getToken token=\" + token);\n });\n\n this.firebaseMessaging.onTokenRefresh().subscribe(data=>{\n this.log(1, \"Device token updated\");\n this.firebaseMessaging.getToken().then(token=>{\n if (token) this.deviceToken = token;\n this.log(1, \"setupFcmNotifications: getToken token=\" + token);\n }); \n });\n\n this.firebaseMessaging.onBackgroundMessage().subscribe(data=>{\n // message received when app was in background\n this.trackMatomoEvent(\"Interaction\", \"Notification\", \"Push Notification Opened\", null);\n let currentTime = new Date();\n this.log(1, \"firebase onBackgroundMessage: this.server=\" + this.server + \" this.lastNotificationChecked=\" + this.lastNotificationChecked);\n if (this.server && (this.lastNotificationChecked == null || this.timeDiffInMinutes(currentTime,this.lastNotificationChecked) > 1)) {\n this.checkServerForNotifications();\n } \n this.log(1, \"setupFcmNotifications: FCM notification received in background \" + JSON.stringify(data) );\n });\n\n this.firebaseMessaging.onMessage().subscribe(data=>{\n // message received when app was in foreground\n //\n //Notification flow:\n //App is in foreground:\n // User receives the notification data in the JavaScript callback \n // without any notification on the device itself \n // (this is the normal behaviour of push notifications, it is up to you, the developer, to notify the user)\n //App is in background:\n // User receives the notification message in its device notification bar\n // User taps the notification and the app opens\n // User receives the notification data in the JavaScript callback\n //\n this.log(1, \"FCM notification received data.wasTapped=\" + data.wasTapped);\n this.trackMatomoEvent(\"Interaction\", \"Notification\", \"Push Notification Opened\", null);\n let currentTime = new Date();\n this.log(1, \"firebase onMessage: this.server=\" + this.server + \" this.lastNotificationChecked=\" + this.lastNotificationChecked);\n if (this.server && (this.lastNotificationChecked == null || this.timeDiffInMinutes(currentTime,this.lastNotificationChecked) > 2)) {\n this.checkServerForNotifications();\n }\n //if(data.wasTapped){\n // //Notification was received on device tray and tapped by the user.\n // this.log(1, \"setupFcmNotifications: FCM notification received in background \" + JSON.stringify(data) );\n // this._appTappedId = data.gcm_message_id; // this is to not show Apple message again\n //}else{\n //Notification was received in foreground. Maybe the user needs to be notified.\n if (data.gcm) {\n // android message\n this.dialogs.alert(\"App Notification:\\n\\n\" + data.gcm.title + \"\\n\" + data.gcm.body)\n .then(() => this.log(1, 'Dialog dismissed'))\n .catch(e => this.log(1, 'Error displaying dialog ' + e)); \n } else if (data.aps && data.aps.alert) {\n //} else if (data.aps && data.aps.alert && data.gcm_message_id && data.gcm_message_id != this._appTappedId) {\n // ios message\n this.dialogs.alert(\"App Notification:\\n\\n\" + data.apps.alert.title + \"\\n\" + data.apps.alert.body)\n .then(() => this.log(1, 'Dialog dismissed'))\n .catch(e => this.log(1, 'Error displaying dialog ' + e)); \n } \n this.log(1, \"setupFcmNotifications: FCM notification received in foreground \" + JSON.stringify(data) );\n //} \n })\n //\n //end notifications.\n //statusBar.styleDefault();\n //splashScreen.hide(); \n }\n*/\n\n // Checks availability of internet connection.\n // It always returns true during browser testing. It allows both wifi and varioud data connection. \n // That this function should be called after platform is ready\n isConnected(): boolean {\n let conntype = \"unknown\";\n this.log(0,'Settings isConnected: this.platformIsReady=' + this.platformIsReady + \n ' this.platformIsCordova=' + this.platformIsCordova);\n let connected = false;\n if (this.platformIsCordova) {\n conntype = this.network.type;\n // check that we have internet/data connection. Should we check for wifi connection instead?\n if ((conntype && conntype !== 'none')) {\n // for check in browser set connected to true when platform is not cordova\n connected = true;\n }\n } else {\n connected = true;\n } \n \n this.log(1,'isConnected: connected=' + connected + ' conntype=' + conntype); \n return connected;\n }\n\n // Checks availability of wifi internet connection.\n // It always returns true during browser testing. \n isWifiConnected(): boolean {\n let conntype = this.network.type;\n this.log(0,'Settings isWifiConnected: this.platformIsReady=' + this.platformIsReady + \n ' this.platformIsCordova=' + this.platformIsCordova);\n let connected = false;\n // check that we have internet/data connection. Should we check for wifi connection instead?\n if ((conntype == 'wifi') || !this.platformIsCordova) {\n // for check in browser set connected to true when platform is not cordova\n connected = true;\n }\n this.log(1,'isWifiConnected: connected=' + connected + ' conntype=' + conntype); \n return connected;\n }\n\n log(logLevel, message) {\n if(logLevel >= this.logDisplayLevel) {\n console.log(this.formatDateTime(\"YYYY-MM-DD HH:mm:ss.SSS\") + \": \" + message);\n }\n if (logLevel >= this.errorLogMinLogLevelToKeep) {\n if (this.errorLogQueue.length >= this.errorLogMaxEntriesToKeep) {\n this.errorLogQueue.shift();\n //this.autoNotifyDeveloper();\n }\n this.errorLogQueue.push(this.formatDateTime(\"YYYY-MM-DD HH:mm:ss.SSS\") + \": \" + message);\n }\n }\n\n autoNotifyDeveloper() {\n // send email\n let msg = \"Automatic Notification\";\n let log = this.HtmlEncode(this.getLastErrorsAndCleanLog());\n let info = this.getUserAndDeviceInfoJson();\n\n let commandParameters = 'info=' + encodeURIComponent(info) +\n '&log=' + encodeURIComponent(log.replace(/"/g,\"'\")) +\n '&msg=' + encodeURIComponent(msg);\n this.executeCommand('notifydeveloper', commandParameters)\n .subscribe((result: any) => { \n this.log(1,'autoNotifyDeveloper http post result=' + JSON.stringify(result));\n if (result && result.Success) {\n this.trackMatomoEvent(\"Interaction\", \"Run\", \"Auto Notify Developers\", \"1\");\n } else {\n this.log(2,'autoNotifyDeveloper error message=' + result.Message);\n this.trackMatomoEvent(\"Interaction\", \"Run\", \"Auto Notify Developers\", \"0\");\n }\n }, error => {\n this.log(2,'autoNotifyDeveloper server error ' + JSON.stringify(error));\n }); \n } \n\n public getLastErrorsAndCleanLog() {\n let errors = this.errorLogQueue.join(\"\\n\");\n this.errorLogQueue = [];\n return errors;\n }\n\n private initAnalytics(callback) {\n this.log(1,'initAnalytics: window=' + (window));\n (window).FirebasePlugin.initAnalytics();\n this.log(1,'initAnalytics: FirebasePlugin=' + (window).FirebasePlugin);\n setTimeout(() => {\n if (callback) callback();\n }, 100);\n }\n\n trackMatomoEvent(category, action, name, someVal?) {\n if (this.isConnected() && this.trackMatomoAnalytics) { \n this.matomoTracker.trackEvent(category, action, name, someVal);\n this.log(1,'trackMatomoEvent category=' + category + ' action=' + action + ' name=' + name);\n } else {\n this.log(0,'trackMatomoEvent - no analytics tracking');\n }\n }\n\n trackMatomoSearch(keywords, category) {\n if (this.isConnected() && this.trackMatomoAnalytics) { \n this.matomoTracker.trackSiteSearch(keywords,category);\n this.log(1,'trackSiteSearch category=' + category + ' keywords=' + keywords);\n } else {\n this.log(0,'trackSiteSearch - no analytics tracking');\n }\n }\n\n trackMatomoLink(url) {\n if (this.isConnected() && this.trackMatomoAnalytics) {\n if (url && url.indexOf('#') > -1 && url.indexOf(this.sourceHost) == 0) {\n // restore format used in trackMatomoPageView\n url = this.sourceHost + url.split('#')[1];\n } \n this.matomoTracker.trackLink(url,\"link\"); \n this.log(1,'trackMatomoLink url=' + url);\n } else {\n //this.log(0,'trackMatomoLink - no analytics tracking');\n } \n }\n\n trackMatomoDownload(url) {\n if (this.isConnected() && this.trackMatomoAnalytics) {\n if (url && url.indexOf('#') > -1 && url.indexOf(this.sourceHost) == 0) {\n // restore format used in trackMatomoPageView\n url = this.sourceHost + url.split('#')[1];\n }\n this.matomoTracker.trackLink(url,\"download\"); \n this.log(1,'trackMatomoDownload url=' + url);\n } else {\n //this.log(0,'trackMatomoLink - no analytics tracking');\n } \n }\n\n trackMatomoPageView(pageName) {\n if (this.isConnected() && this.trackMatomoAnalytics) {\n //let url = \"https://\" + this.appTextId + \".app/\" + pageName.toLowerCase().replace(\" (dynamic page)\",\"\").replace(/[^a-z0-9\\s]+/g,\" \").trim().replace(/\\s+/g,\"_\");\n let url = this.router.url;\n if (window.location.href && window.location.href.indexOf('#') > -1) {\n url = window.location.href.split('#')[1];\n }\n url = this.sourceHost + url;\n this.matomoTracker.setCustomUrl(url);\n this.matomoTracker.setDocumentTitle(pageName);\n //this.matomoTracker.setGenerationTimeMs(0);\n this.matomoTracker.trackPageView(); \n this.log(1,'trackMatomoPageView pageName=' + pageName + ' url=' + url);\n } else {\n this.log(0,'trackMatomoPageView - no analytics tracking');\n }\n }\n\n trackPageView(pageName) {\n this.trackMatomoPageView(pageName);\n if (this.isConnected() && this.platformIsCordova && this.trackFirebaseAnalytics) {\n this.firebase.setScreenName(pageName).then((result)=>{\n this.log(0,'trackPageView firebase setScreenName: ' + pageName + ' result=' + result)\n })\n .catch(e => {\n this.log(0,'trackPageView 1 Error in firebase.setScreenName ' + e);\n if (e == \"Analytics isn't initialised\") {\n this.initAnalytics(() => this.trackPageView(pageName));\n } else {\n this.log(2,'trackPageView 2 Error in firebase.setScreenName ' + e);\n } \n });\n } else {\n this.log(0,'trackPageView - no firebase analytics tracking');\n }\n }\n\n abbreviate(text, len) {\n let abbr = ' -empty- ';\n if (text) {\n abbr = text;\n if (text.length > len) {\n abbr = text.substring(0, len) + '...';\n }\n }\n return abbr;\n }\n\n capitalize(text) {\n let cap = \"\";\n if (text) {\n cap = text.replace(/(?:^|\\s)\\S/g, function (a) { \n return a.toUpperCase(); \n });\n }\n return cap;\n }\n\n //\n public getSecureStorage(id?) {\n var t = this;\n t.log(1,'getSecureStorage: t.secureStorageInitialising=' + t.secureStorageInitialising + \" id=\" + id);\n // GR 202000415 Secure Storage commands below behaves crazy. If there are multiple calls to\n // this function at the same time only one returns anything. Also very first call to \n // secureStorage.create returns not a promise but null. So we work around those problems by\n // making sure that only first calls to the function proceeds and others are waiting in a loop.\n // Also there is a special code to check for returning nulls here and in getSecureKey\n if (t.secureStorageInitialising) {\n return new Promise(\n function (resolve, reject) {\n setTimeout(function() {\n t.log(1,'getSecureStorage: timeout for id=' + id);\n resolve(t.getSecureStorage(id));\n }, 300); \n }) \n } else {\n t.log(1,'getSecureStorage: new Promise t.ss=' + t.ss + ' t.secureStorageInitialising=' + t.secureStorageInitialising);\n return new Promise(\n function (resolve, reject) {\n t.secureStorageInitialising = true;\n if (t.ss == null) {\n t.platform.ready().then(() => {\n //t.storage.ready().then(() => {\n //t.platformIsCordova = (t.platform.is('ios') || t.platform.is('android'));\n t.log(1,'getSecureStorage: storage ready driver=' + t.storage.driver + ' t.platformIsCordova=' + t.platformIsCordova);\n if (t.platformIsCordova) {\n //t.platformIsCordova = true;\n let secureStorage = new SecureStorageEcho(); \n t.log(1,'getSecureStorage before create t.ss=' + t.ss + \" id=\" + id); \n let ssPromise = secureStorage.create(t.appTextId + '_app_sec');\n t.log(1,'settings getSecureStorage ssPromise=' + ssPromise); \n if (ssPromise) { \n ssPromise.then((secStorage: SecureStorageEchoObject) => {\n t.log(1,'getSecureStorage Storage Created');\n t.ss = secStorage;\n t.initialiseSecureStorageError = false;\n t.secureStorageInitialising = false;\n resolve(t.ss);\n }).catch((error)=>{\n // should we either use plain storage here (easy - see 'Not Cordova' below) \n // or try to use server automatically (may be trickier)?\n t.initialiseSecureStorageError = true;\n t.log(2,'Settings: getSecureStorage create error ' + JSON.stringify(error, Object.getOwnPropertyNames(error)));\n t.secureStorageInitialising = false;\n reject(new Error('secure storage error ' + JSON.stringify(error, Object.getOwnPropertyNames(error))));\n }); \n } else {\n t.initialiseSecureStorageError = true;\n t.secureStorageInitialising = false;\n reject(new Error('secureStorage.create returns null'));\n }\n } else {\n // this is for browser testing only\n t.log(1,'Not Cordova: Loading plain storage instead of secure one');\n t.ss = t.storage;\n t.initialiseSecureStorageError = false;\n t.secureStorageInitialising = false;\n resolve(t.ss);\n }\n //}).catch((error)=>{\n // t.log(2,'Settings: storage ready error ' + JSON.stringify(error, Object.getOwnPropertyNames(error)));\n // t.secureStorageInitialising = false;\n // reject(new Error('storage error ' + JSON.stringify(error, Object.getOwnPropertyNames(error))));\n //});\n });\n } else {\n t.secureStorageInitialising = false;\n resolve(t.ss);\n }\n }\n ); \n } \n }\n\n // authorise user after login to web site\n // GR 20200413 - we have some logic bellow when if appkeys stored in secure storage have the same usertoken then deviceid stored there\n // (not the one which was passed to the function!) will be used. We will need to send app update request after we know deviceid. \n // That is why we pass update object.\n authoriseUser(cryptokey, usertoken, deviceid, update) {\n this._authorised = true;\n // GR we want to do it because in case when we authorise user again we want to\n // allow using app without forcing to reset PIN\n this._authenticated = true; \n this.lastAccessed = new Date();\n this.userToken = usertoken; \n this.log(1,'authoriseUser: user authorised and authenticated! this.deviceId=' + this.deviceId + ' deviceid=' + deviceid); \n if (!this.deviceId) {\n this.deviceId = deviceid;\n }\n this.currentCryptoKey = cryptokey;\n this.log(1,'authoriseUser: user authorised and authenticated! this.lastAccessed=' + this.lastAccessed + ' deviceid=' + deviceid); \n // save data and redirect to next step. That is required only for the first authorisation !\n var t = this;\n var appKeys = usertoken + ';' + deviceid; \n if (!t.initialiseSecureStorageError) {\n this.saveEncryptionKey(cryptokey);\n this.log(0,'authorise after saveEncryptionKey');\n } else {\n this.setKey('plainappkeys',appKeys);\n this.log(0,'authorise after setKey appkeys');\n }\n this.setKey('userwasauthorised','1');\n t.log(1,'authoriseUser deviceid=' + deviceid + ' initialiseSecureStorageError=' + t.initialiseSecureStorageError);\n \n //t.configureMatomoUser();\n \n t.fcmSubscribe('authorised');\n t.fcmUnsubscribe('unauthorised'); \n if (!t.platformIsCordova) {\n let topic = 'browser';\n // that is a \"hack\" to be able to choose \"browser\" for in app notifications (push will not work!)\n if (t.currentUserData.SubsribedToFirebaseTopics.indexOf(topic) == -1) {\n t.log(1,'1 \"subscribe\" to topic: ' + topic);\n //this.firebase.subscribe(topic);\n t.currentUserData.SubsribedToFirebaseTopics.push(topic);\n t.currentUserDataChanged = true;\n } \n t.log(1,'SubsribedToFirebaseTopics.indexOf=' + t.currentUserData.SubsribedToFirebaseTopics.indexOf(topic));\n } \n \n this.getSecureKey('appkeys').then((appkeys:string)=>{\n let needToStoreKeys = true;\n t.log(0,'authoriseUser: got appkeys');\n if (appkeys && appkeys.indexOf(';') > -1) { \n let parts = appkeys.split(';');\n let storedUsertoken = parts[0];\n let storedDeviceid = parts[1];\n if (storedUsertoken == usertoken) {\n needToStoreKeys = false;\n this.deviceId = storedDeviceid;\n }\n }\n t.log(1,'authoriseUser needToStoreKeys=' + needToStoreKeys + ' deviceid=' + deviceid + ' this.deviceId=' + this.deviceId);\n if (needToStoreKeys) {\n this.deviceId = deviceid; \n this.setSecureKey('appkeys', appKeys);\n t.log(1,'authoriseUser after setSecureKey 1');\n }\n if (update) {\n update.checkAppUpdatesInBackground();\n }\n }).catch((error)=>{\n t.log(2,'authoriseUser: getSecureKey error reading keys ' + JSON.stringify(error));\n if (update) {\n update.checkAppUpdatesInBackground();\n } \n t.deviceId = deviceid; \n t.setSecureKey('appkeys', appKeys);\n t.log(1,'authoriseUser after setSecureKey 2'); \n }); \n }\n\n userAuthorised() {\n var t = this;\n return new Promise(\n function (resolve, reject) {\n if (t.appType == 'public') {\n t._authorised = true;\n } \n t.log(1,'userAuthorised: t.appType=' + t.appType + ' t._authorised=' + t._authorised + ' t.initialiseSecureStorageError=' + t.initialiseSecureStorageError);\n if (t._authorised == null) {\n t.authorisationErrorMessage = \"\";\n if (t.initialiseSecureStorageError) {\n t._authorised = false;\n resolve(t._authorised);\n } else {\n return t.getSecureKey('appkeys').then((appkeys:string)=>{\n t.log(1,'userAuthorised: appkeys=' + appkeys);\n if (appkeys && appkeys.indexOf(';') > -1) {\n let parts = appkeys.split(';'); \n t.userToken = parts[0];\n t.deviceId = parts[1]; \n t._authorised = true;\n t.log(1,'userAuthorised: t.deviceId=' + t.deviceId);\n\n return t.getSecureKey('userdata').then((userdata:string)=>{\n t.log(1,'userAuthorised: userdata=' + userdata);\n if (userdata && userdata.indexOf('{') == 0) {\n t.log(1,'userAuthorised: set currentUserData platformIsCordova=' + t.platformIsCordova);\n t.currentUserData = JSON.parse(userdata);\n\n if (!t.platformIsCordova) {\n let topic = 'browser';\n // that is a \"hack\" to be able to choose \"browser\" for in app notifications (push will not work!)\n if (t.currentUserData.SubsribedToFirebaseTopics.indexOf(topic) == -1) {\n t.log(1,'2 \"subscribe\" to topic: ' + topic);\n //t.firebase.subscribe(topic);\n t.currentUserData.SubsribedToFirebaseTopics.push(topic);\n t.currentUserDataChanged = true;\n } \n t.log(1,'SubsribedToFirebaseTopics.indexOf=' + t.currentUserData.SubsribedToFirebaseTopics.indexOf(topic));\n } \n\n t.getAppVersion();\n //t.configureMatomoUser(); \n }\n t.log(1,'userAuthorised: before resolve 1 t._authorised=' + t._authorised);\n resolve(t._authorised);\n }).catch((error)=>{\n // GR - we should not get to here ! - that's old storage place\n t.log(2,'userAuthorised: error getting userdata: ' + JSON.stringify(error));\n // GR this may happen for the first access after updates\n return t.getSecureKey('userproperties').then((userproperties:string)=>{\n t.log(1,'userAuthorised: userproperties=' + userproperties);\n if (userproperties && userproperties.indexOf(';') > -1) {\n let parts = userproperties.split(';'); \n t.currentUserData.Firstname = parts[0];\n t.currentUserData.Lastname = parts[1]; \n t.currentUserData.Email = parts[2]; \n if (parts.length > 3) {\n t.currentUserData.Username = parts[3];\n } \n if (parts.length > 4) {\n t.currentUserData.Userid = parts[4];\n } \n // save user data in new format\n t.setSecureKey('userdata', JSON.stringify(t.currentUserData));\n t.currentUserDataChanged = false;\n t.log(1,'userAuthorised: before resolve 2 t._authorised=' + t._authorised);\n resolve(t._authorised);\n }\n }).catch((error)=>{\n t.log(1,'userAuthorised: error getting userproperties: ' + JSON.stringify(error));\n resolve(t._authorised);\n }); \n });\n\n } else {\n // appkeys read from storage are blank or not valid\n t._authorised = false;\n t.authorisationErrorMessage = \"Can not read data from the storage. Please reauthenticate the App.\";\n t.log(1,'userAuthorised: before resolve 3 t._authorised=' + t._authorised);\n resolve(t._authorised);\n }\n //resolve(t._authorised);\n }).catch((error)=>{\n // can not read apkey \n let strError = JSON.stringify(error);\n t.log(1,'userAuthorised: error: ' + strError + ' authorisationErrorMessage=' + t.authorisationErrorMessage);\n if (strError.indexOf('plainappkeys') == -1) { // that will come on initial App install (for some phones). We don't want to show it.\n t.authorisationErrorMessage = strError;\n }\n t.log(1,'userAuthorised: indexOf=' + strError.indexOf('plainappkeys') + ' authorisationErrorMessage=' + t.authorisationErrorMessage);\n //reject(error);\n t._authorised = false;\n t.log(1,'userAuthorised: before resolve 4 t._authorised=' + t._authorised);\n t.getKey('userwasauthorised').then((value:string)=>{\n if (!value) {\n // Do NOT display storage error message until user is authorised\n t.authorisationErrorMessage = '';\n }\n resolve(t._authorised);\n }).catch((error)=>{\n t.authorisationErrorMessage = '';\n resolve(t._authorised);\n })\n });\n }\n } else { \n // return existing value\n t.log(1,'userAuthorised: before resolve 5 t._authorised=' + t._authorised);\n resolve(t._authorised);\n } \n }\n );\n }\n\n get userAuthenticated():boolean{\n let currentTime = new Date();\n let timeDiff = this.timeDiffInMinutes(currentTime, this.lastAccessed);\n this.log(1,'userAuthenticated: timeDiff=' + timeDiff + ' currentTime=' + currentTime + ' lastAccessed=' + this.lastAccessed + ' sessionTimeInMinutes=' + this.sessionTimeInMinutes);\n this.log(1,'userAuthenticated: this.passwordAuthentication=' + this.passwordAuthentication + ' passwordSessionTimeInMinutes=' + this.passwordSessionTimeInMinutes);\n if (timeDiff > this.passwordSessionTimeInMinutes || (!this.passwordAuthentication && timeDiff > this.sessionTimeInMinutes)) {\n this._authenticated = false;\n } else {\n //this.userAuthenticated = true;\n }\n if (this.appType == 'public') {\n this._authenticated = true;\n } \n this.log(1,'userAuthenticated: this.appType=' + this.appType + ' this._authenticated=' + this._authenticated);\n return this._authenticated;\n }\n\n set userAuthenticated(au){\n this._authenticated = au;\n if (this._authenticated) {\n this.lastAccessed = new Date();\n }\n this.log(1,'userAuthenticated: this._authenticated=' + this._authenticated + ' this.lastAccessed=' + this.lastAccessed);\n }\n\n // save key to secure storage (and temporary variable)\n saveEncryptionKey(keyvalue) {\n this.currentCryptoKey = keyvalue;\n this.log(1,'saveEncryptionKey this.ss=' + this.ss);\n this.getSecureStorage().then((secstor: Storage)=>{\n secstor.set('cryptokey', keyvalue);\n }) \n }\n\n // this function is to run from real cordova app after user session expire (600 minutes as default). It will create new user session\n // on the server and send back new sessionid and other user data. It emulates user session brhaviour on a site except that authentication\n // from the app is authomatic with the help of JWT token.\n reAuthenticateUser() {\n let t = this;\n return new Promise(\n function (resolve, reject) { \n let reqestOptions = {\n headers: new HttpHeaders({\n 'Content-Type': 'application/x-www-form-urlencoded'\n })\n };\n let body: any = \"c=reauthorise&t=\" + t.userToken;\n t.log(1,'reAuthenticateUser before post serverApiUrl=' + t.serverApiUrl + \" t.platformIsCordova=\" + t.platformIsCordova);\n t.getJwtToken(t.serverApiUrl,'').then(token=>{\n let url = t.serverApiUrl + '?jwt=' + token;\n t.http.post(url, body, reqestOptions).subscribe((result: any) => { \n t.log(1,'reAuthenticateUser: authorise http post result=' + JSON.stringify(result));\n if (result && result.Success) {\n t.trackMatomoEvent(\"Management\", \"ReAuthenticate\", \"App Authentication Success\", null);\n t.updateCurrentUserData(result);\n\n t.userAuthenticated = true; \n resolve(true);\n } else {\n t.trackMatomoEvent(\"Management\", \"ReAuthenticate\", \"App Authentication Failure\", null);\n resolve(false);\n }\n }, error => {\n t.trackMatomoEvent(\"Management\", \"ReAuthenticate\", \"App Authentication Error\", null);\n t.log(2,'reAuthenticateUser server error ' + error);\n reject(new Error('Can not communicate with the server. Check network connection.'));\n });\n }).catch(error=>{\n reject(new Error('reAuthenticateUser Can not create JWT token.')); \n })\n });\n }\n\n setCookie(cname, cvalue, exminutes) {\n const d = new Date();\n d.setTime(d.getTime() + (exminutes*60*1000));\n let expires = \"expires=\"+ d.toUTCString();\n document.cookie = cname + \"=\" + cvalue + \";\" + expires + \";path=/\";\n }\n\n getCookie(cname) {\n let name = cname + \"=\";\n let decodedCookie = decodeURIComponent(document.cookie);\n let ca = decodedCookie.split(';');\n for(let i = 0; i { \n t.log(1,'checkBrowserAuthentication: authorise http post result=' + JSON.stringify(result));\n if (result && result.Success) {\n t.trackMatomoEvent(\"Management\", \"Authenticate After Browser Reset\", \"App Authentication Success\", null);\n t.log(1,\"before authoriseUser: result.Data.sid=\" + result.Data.sid);\n if (!t.deviceId) {\n // we don't update deviceid if it was set before\n t.deviceId = result.Data.deviceid;\n }\n let urole = t.getCookie('iobrole');\n if (urole) {\n t.currentUserRole = urole;\n }\n // save keys and authorise user. Do we need to run it if cryptokey, usertocken, deviceid didn't change (after first login) ?\n t.authoriseUser(result.Data.cryptokey, result.Data.usertoken, t.deviceId, update);\n t.updateCurrentUserData(result);\n \n //this.navCtrl.setRoot('AuthoriseAddPinPage');\n t.userAuthenticated = true; \n let url = '/home';\n if (t.lastClickedUrl) {\n url = t.lastClickedUrl;\n }\n t.log(1,'checkBrowserAuthentication url=' + url + ' t.lastClickedUrl=' + t.lastClickedUrl); \n t.openPage(url);\n resolve(true);\n } else {\n t.trackMatomoEvent(\"Management\", \"Authenticate With Username\", \"App Authentication Failure\", null);\n resolve(false);\n }\n }, error => {\n t.trackMatomoEvent(\"Management\", \"Authenticate After Browser Reset\", \"App Authentication Error\", null);\n t.log(2,'checkUserAuthentication server error ' + error);\n reject(new Error('Can not communicate with the server. Check network connection.'));\n }); \n } else {\n resolve(false);\n }\n } else {\n resolve(false);\n }\n });\n }\n\n\n // check provided u & p\n checkUserAuthentication(email,password,update) {\n let t = this;\n return new Promise(\n function (resolve, reject) { \n t.executeCommand('authorise', \"u=\" + encodeURIComponent(email) + \"&p=\" + \n encodeURIComponent(password)).subscribe((result: any) => { \n t.log(1,'checkUserAuthentication: authorise http post result=' + JSON.stringify(result));\n if (result && result.Success) {\n t.trackMatomoEvent(\"Management\", \"Authenticate With Username\", \"App Authentication Success\", null);\n t.log(1,\"before authoriseUser: result.Data.firstname=\" + result.Data.firstname);\n if (!t.deviceId) {\n // we don't update deviceid if it was set before\n t.deviceId = result.Data.deviceid;\n }\n if (!t.platformIsCordova) {\n // save cookie value which may be used in case of browser reload\n t.setCookie('iobsid', result.Data.sid, t.passwordSessionTimeInMinutes);\n }\n // save keys and authorise user. Do we need to run it if cryptokey, usertocken, deviceid didn't change (after first login) ?\n t.authoriseUser(result.Data.cryptokey, result.Data.usertoken, t.deviceId, update);\n t.updateCurrentUserData(result);\n\n //this.navCtrl.setRoot('AuthoriseAddPinPage');\n t.userAuthenticated = true;\n t.log(1,'checkUserAuthentication authentication success for email=' + email); \n resolve(true);\n } else {\n t.trackMatomoEvent(\"Management\", \"Authenticate With Username\", \"App Authentication Failure\", null);\n resolve(false);\n }\n }, error => {\n t.trackMatomoEvent(\"Management\", \"Authenticate With Username\", \"App Authentication Error\", null);\n t.log(2,'checkUserAuthentication server error ' + error);\n reject(new Error('Can not communicate with the server. Check network connection.'));\n });\n });\n }\n\n updateCurrentUserData(result) {\n let t = this;\n t.currentCryptoKey = result.Data.cryptokey;\n\n t.currentUserData.Firstname = result.Data.firstname;\n t.currentUserData.Lastname = result.Data.lastname;\n t.currentUserData.Username = result.Data.username;\n t.currentUserData.Userid = result.Data.userid;\n if (t.currentActivationEmail) {\n t.currentUserData.Email = t.currentActivationEmail;\n } else {\n t.currentUserData.Email = result.Data.email;\n }\n\n t.currentUserData.SessionId = result.Data.sid;\n t.currentUserData.CompanyId = result.Data.CompanyId;\n t.currentUserData.CompanyName = result.Data.CompanyName;\n t.currentUserData.ABN = result.Data.ABN;\n t.currentUserData.CompanyLogo = result.Data.CompanyLogo;\n t.currentUserData.CompanyAddress = result.Data.CompanyAddress;\n t.currentUserData.CompanyCity = result.Data.CompanyCity;\n t.currentUserData.CompanyPostcode = result.Data.CompanyPostcode;\n t.currentUserData.CompanyState = result.Data.CompanyState;\n t.currentUserData.CompanyCountry = result.Data.CompanyCountry;\n t.currentUserData.CompanyPhone = result.Data.CompanyPhone;\n t.currentUserData.CompanyEmail = result.Data.CompanyEmail;\n t.currentUserData.capRole = result.Data.CapRole;\n if (t.currentUserData.capRole && t.currentUserData.capRole.toLowerCase() == 'public') {\n t.currentUserData.capRole = 'buyer';\n t.currentUserData.capPublicUser = true;\n }\n if (result.Data.SecurityLevel && result.Data.SecurityLevel == \"2\") {\n t.userIsAdmin = true;\n } else {\n t.userIsAdmin = false;\n }\n t.log(1,\"updateCurrentUserData: result.Data.CapRole=\" + result.Data.CapRole + \" t.currentUserData.capRole=\" + t.currentUserData.capRole + \" t.currentUserData.Email=\" + t.currentUserData.Email);\n t.log(1,\"updateCurrentUserData: result.Data.SecurityLevel=\" + result.Data.SecurityLevel + \" t.userIsAdmin=\" + t.userIsAdmin + \" sid=\" + t.currentUserData.SessionId);\n\n t.setCurrentUserRole();\n\n t.events.publishData({updatefinished: true});\n\n t.currentUserData.capPromoted = t.getBoolean(result.Data.CapPromoted);\n t.currentUserData.capDatalookup = t.getBoolean(result.Data.CapDatalookup);\n t.currentUserData.capCompanyDisplayName = result.Data.CapCompanyDisplayName;\n t.currentUserData.capCompanyInfo = result.Data.CapCompanyInfo;\n t.currentUserData.capFeatureImage = result.Data.CapFeatureImage;\n t.currentUserData.capImages = result.Data.CapImages;\n t.currentUserData.capMemberSince = result.Data.CapMemberSince;\n t.currentUserData.capPurchases = result.Data.CapPurchases;\n t.currentUserData.capSales = result.Data.CapSales;\n t.currentUserData.capCancellations = result.Data.CapCancellations;\n t.currentUserData.capAverageReplyTime = result.Data.CapAverageReplyTime;\n\n t.log(1,\"updateCurrentUserData: result.Data.CapDatalookup=\" + result.Data.CapDatalookup + \" t.currentUserData.capDatalookup=\" + t.currentUserData.capDatalookup);\n t.log(1,\"updateCurrentUserData: result.Data.CapPromoted=\" + result.Data.CapPromoted + \" t.currentUserData.capPromoted=\" + t.currentUserData.capPromoted);\n\n t.currentUserData.capConditions = result.Data.CapConditions;\n t.currentUserData.capMakes = result.Data.CapMakes;\n t.currentUserData.capContactAfterAuction = result.Data.CapContactAfterAuction;\n t.currentUserData.capCompanyRating = result.Data.CapCompanyRating; \n \n t.currentUserData.UserDataLastUpdated = new Date();\n \n t.log(0,\"before setSecureKey: result.Data.firstname=\" + result.Data.firstname + \" t.currentUserData.Firstname=\" + t.currentUserData.Firstname);\n t.setSecureKey('userdata', JSON.stringify(t.currentUserData));\n t.log(1,\"after setSecureKey: result.Data.firstname=\" + result.Data.firstname + \" t.currentUserData.Firstname=\" + t.currentUserData.Firstname + ' t.currentUserRole=' + t.currentUserRole + ' t.switchRolesEnabled=' + t.switchRolesEnabled);\n t.currentUserDataChanged = false;\n }\n\n setCurrentUserRole() {\n let t = this;\n t.log(1,\"setCurrentUserRole: capRole=\" + t.currentUserData.capRole);\n if (t.currentUserData.capRole == 'trader') {\n if (!t.currentUserRole) {\n t.currentUserRole = 'seller';\n if (!t.platformIsCordova) {\n t.setCookie('iobrole', t.currentUserRole, t.passwordSessionTimeInMinutes);\n }\n }\n t.switchRolesEnabled = true;\n } else {\n t.currentUserRole = t.currentUserData.capRole;\n t.switchRolesEnabled = false;\n } \n }\n\n switchType() {\n let prevrole = this.currentUserRole;\n if (this.currentUserRole == \"buyer\") {\n this.currentUserRole = \"seller\";\n this.trackMatomoEvent(\"Marketplace Trading\", \"Switch View\", \"Switch to Seller view button\", null);\n } else {\n this.currentUserRole = \"buyer\";\n this.trackMatomoEvent(\"Marketplace Trading\", \"Switch View\", \"Switch to Buyer view button\", null);\n }\n if (this.isConnected() && this.trackMatomoAnalytics) { \n this.matomoTracker.setCustomVariable(5,\"role\",this.currentUserRole,\"page\"); \n } \n if (!this.platformIsCordova) {\n this.setCookie('iobrole', this.currentUserRole, this.passwordSessionTimeInMinutes);\n }\n this.log(1,'switchType: currentUserRole=' + this.currentUserRole);\n this.events.publishData({updatefinished: true});\n //this.events.publishData({userroleswitchedfrom: prevrole}); \n if (this.router.url != '/home') {\n this.openPage('/home');\n } else{\n this.openPage('/home;role=' + this.currentUserRole);\n } \n }\n\n pageReload(p) {\n var els = document.querySelectorAll('.mainPartialContent,.mainContent');\n if (els && els.length > 0) {\n for (let i=0; i{els[i].className = els[i].className.replace(' hidden',' visible');},200);\n }\n }\n p.ionViewWillEnter(); \n }\n\n/*\n return this.getSecureKey('userpin').then(\n (storedpin:string)=>{\n if (storedpin == pin) {\n this._authenticated = true; \n this.lastAccessed = new Date(); \n //this.fcmSubscribe('authorised');\n //this.fcmUnsubscribe('unauthorised');\n } else {\n this._authenticated = false;\n }\n //this.log(1,'checkAuthentication pin=' + this.abbreviate(pin,1) + \" stored=\" + this.abbreviate(storedpin,1) + \"... _authenticated=\" + this._authenticated);\n this.log(1,'checkAuthentication _authenticated=' + this._authenticated);\n return this._authenticated;\n }\n ).catch((error)=>{\n this.log(1,'*** checkAuthentication getSecureKey error: ' + error.message);\n });\n } */\n \n // check provided pin with previously stored one\n checkAuthentication(pin) {\n\n let t = this;\n return new Promise(\n function (resolve, reject) { \n t.getSecureKey('userpin').then((storedpin:string)=>{\n if (storedpin == pin) {\n t._authenticated = true; \n t.lastAccessed = new Date(); \n //t.fcmSubscribe('authorised');\n //t.fcmUnsubscribe('unauthorised');\n \n let currentTime = new Date();\n let timeDiff = null; \n if (t.currentUserData.UserDataLastUpdated != null) {\n timeDiff = t.timeDiffInMinutes(currentTime, t.currentUserData.UserDataLastUpdated);\n }\n t.log(1,'checkAuthentication t.passwordSessionTimeInMinutes=' + t.passwordSessionTimeInMinutes + ' timeDiff=' + timeDiff);\n if (timeDiff != null && timeDiff > t.passwordSessionTimeInMinutes) {\n t.log(1,'checkAuthentication before call to reAuthenticateUser');\n t.reAuthenticateUser().then((au: boolean)=>{\n t.log(1,'reAuthenticateUser: au=' + au);\n t._authenticated = au;\n resolve(au);\n }).catch(error=>{\n // GR. We have occasional COM errors with authentication. If PIN authentication will fail here\n // it will look very strange. Should we ignore the error (if it happens) below?\n t.log(2,'checkAuthentication reAuthenticateUser error=' + JSON.stringify(error));\n resolve(false);\n });\n } else {\n resolve(true);\n }\n } else {\n t._authenticated = false;\n resolve(false);\n }\n //t.log(1,'checkAuthentication pin=' + t.abbreviate(pin,1) + \" stored=\" + t.abbreviate(storedpin,1) + \"... _authenticated=\" + t._authenticated);\n t.log(1,'checkAuthentication _authenticated=' + t._authenticated);\n //return t._authenticated;\n }, error => {\n t.log(1,'*** checkAuthentication getSecureKey error: ' + error.message);\n reject(new Error('Can not find stored PIN. You may need to reauthenticate.'));\n });\n });\n }\n\n readCurrentAppJson() {\n var t = this;\n return new Promise((resolve, reject) => {\n if (t.currentAppData) {\n t.log(1,'readCurrentAppJson got appdata from memory'); // appdata=' + t.currentAppData + ' s=' + JSON.stringify(t.currentAppData));\n resolve(t.currentAppData);\n } else {\n t.log(1,'readCurrentAppJson before reading appdata from key');\n t.getSecureKey('appdata').then((appdata:string)=>{\n //let needToStoreKeys = true;\n if (appdata) {\n t.log(1,'readCurrentAppJson got appdata from secure key appdata=' + t.abbreviate(appdata,500));\n t.currentAppData = JSON.parse(appdata);\n } else {\n t.log(2,'*** readCurrentAppJson EMPTY appdata from secure key');\n //t.currentAppData = {};\n }\n resolve(t.currentAppData);\n }).catch((error)=>{\n t.log(1,'readCurrentAppJson can not read appdata from secure key. Try reading from file platformIsCordova=' + t.platformIsCordova); \n if (t.platformIsCordova) {\n // GR This is the first time when app runs. We subscribe to \"unauthorised\" topic here\n // and we will unsubscribe to that topic after authorisation or authentication\n // Note that it will not work for people who already installed App (: before\n t.fcmSubscribe('unauthorised'); \n t.trackMatomoEvent(\"Management\", \"Install\", \"App Install\", null);\n \n let mydir = t.file.applicationDirectory + 'www/assets/data';\n t.log(1,'readCurrentAppJson read from file: ' + mydir + '/data.json');\n t.currentAppData = {\"pages\":{\"home\":{\"title\":\"Home\"}}};\n resolve(t.currentAppData);\n\n } else {\n t.currentAppData = {\"pages\":{\"title\":\"Home\",\"id\":\"\",\"staticpageurl\":\"/home\",\"rating\":\"0\"}};\n resolve(t.currentAppData);\n /* \n let url = '../assets/data/data.json';\n t.log(0,'readCurrentAppJson url=' + url);\n t.http.get(url).toPromise().then((appdata:string)=>{\n t.log(0,'readCurrentAppJson got appdata from url appdata=' + appdata);\n t.currentAppData = appdata;\n resolve(t.currentAppData); \n }).catch((e2)=>{\n t.log(1,'readCurrentAppJson error 2 ' + JSON.stringify(e2));\n reject(e2);\n });\n */\n }\n });\n }\n })\n } \n\n writeCurrentAppJson(data) {\n if (data) {\n this.currentAppData = data;\n let sdata = JSON.stringify(data);\n this.log(1,\"writeCurrentAppJson data.length=\" + sdata.length + \" this.currentAppData=\" + this.abbreviate(sdata,40));\n this.setSecureKey('appdata', sdata);\n }\n } \n \n // filter (search) pages by title and summary\n filterPages(searchTerm) {\n let items = [];\n let currentAppData = this.currentAppData;\n this.log(0,'filterPages searchTerm=' + searchTerm);\n \n if (searchTerm) {\n for (let pageid in currentAppData[\"pages\"]) {\n searchTerm = searchTerm.toLowerCase();\n if (currentAppData[\"pages\"].hasOwnProperty(pageid)) {\n this.log(0,'filterPages pageid=' + pageid + ' displayoptions=' + currentAppData[\"pages\"][pageid][\"displayoptions\"]);\n if (currentAppData[\"pages\"][pageid][\"displayoptions\"] && currentAppData[\"pages\"][pageid][\"displayoptions\"].indexOf(\"displayinsearch\") > -1 &&\n (currentAppData[\"pages\"][pageid][\"title\"].toLowerCase().indexOf(searchTerm) > -1 || \n currentAppData[\"pages\"][pageid][\"summary\"].toLowerCase().indexOf(searchTerm) > -1 )) {\n items.push(currentAppData[\"pages\"][pageid]);\n }\n }\n }\n }\n this.log(1,'filterPages returned items.length=' + items.length);\n return items; \n }\n\n // filter contacts by ?? title and summary - that should be updated when contact structure is clear\n filterContacts(searchTerm) {\n let items = [];\n let currentAppData = this.currentAppData;\n this.log(0,'filterContacts searchTerm=' + searchTerm);\n \n if (searchTerm) {\n for (let pageid in currentAppData[\"pages\"]) {\n searchTerm = searchTerm.toLowerCase();\n if (currentAppData[\"pages\"].hasOwnProperty(pageid)) {\n this.log(0,'filterContacts pageid=' + pageid + ' displayoptions=' + currentAppData[\"pages\"][pageid][\"displayoptions\"]);\n if (currentAppData[\"pages\"][pageid][\"displayoptions\"] && currentAppData[\"pages\"][pageid][\"displayoptions\"].indexOf(\"displayinsearch\") > -1 &&\n currentAppData[\"pages\"][pageid][\"section\"] && currentAppData[\"pages\"][pageid][\"section\"] == 'Contacts Database' &&\n (currentAppData[\"pages\"][pageid][\"title\"].toLowerCase().indexOf(searchTerm) > -1 || \n currentAppData[\"pages\"][pageid][\"summary\"].toLowerCase().indexOf(searchTerm) > -1 )) {\n items.push(currentAppData[\"pages\"][pageid]);\n }\n }\n }\n }\n this.log(1,'filterContacts returned items.length=' + items.length);\n return items; \n }\n\n getAllPageData(){\n var t = this;\n return this.readCurrentAppJson().then((currentAppData)=>{\n return t.getJsonPropertyByPath(currentAppData, \"pages\");\n });\n }\n\n // creates fixed menu for CAP Marketplace App\n getCapMarketplaceMenuPages() {\n let pages = [];\n if (this.userAuthenticated) {\n let page: any = new Object();\n let count = 0;\n if (this.currentUserRole == 'buyer') {\n page.title = 'Dashboard';\n page.staticpageurl = '/home';\n page.id = count++;\n pages.push(page);\n page = new Object();\n page.title = 'Received Quotes';\n page.staticpageurl = '/quote-requests/current';\n page.id = count++;\n pages.push(page);\n page = new Object();\n page.title = 'Past Quotes';\n page.staticpageurl = '/quote-requests/archived';\n page.id = count++;\n pages.push(page);\n page = new Object();\n page.title = 'Current Orders';\n page.staticpageurl = '/orders/current';\n page.id = count++;\n pages.push(page); \n page = new Object();\n page.title = 'Past Orders';\n page.staticpageurl = '/orders/archived';\n page.id = count++;\n pages.push(page);\n page = new Object();\n page.title = 'Questions & Answers';\n page.staticpageurl = '/information-requests';\n page.id = count++;\n pages.push(page);\n page = new Object();\n page.title = 'Notifications';\n page.staticpageurl = '/notifications-inbox';\n page.id = count++;\n pages.push(page);\n page = new Object();\n page.title = 'Ratings & Reviews';\n page.staticpageurl = '/reviews/' + this.currentUserData.CompanyId;\n page.id = count++;\n pages.push(page);\n page = new Object();\n page.title = 'Account & Settings';\n page.staticpageurl = '/settings';\n page.id = count++;\n pages.push(page);\n } else if (this.currentUserRole == 'seller') {\n page.title = 'Dashboard';\n page.staticpageurl = '/home';\n page.id = count++;\n pages.push(page);\n page = new Object();\n page.title = 'Current Requests';\n page.staticpageurl = '/quote-requests/current';\n page.id = count++;\n pages.push(page);\n page = new Object();\n page.title = 'Active Bids';\n page.staticpageurl = '/quotes/current';\n page.id = count++;\n pages.push(page);\n page = new Object();\n page.title = 'Past Bids';\n page.staticpageurl = '/quotes/archived';\n page.id = count++;\n pages.push(page);\n page = new Object();\n page.title = 'Current Orders';\n page.staticpageurl = '/orders/current';\n page.id = count++;\n pages.push(page); \n page = new Object();\n page.title = 'Past Orders';\n page.staticpageurl = '/orders/archived';\n page.id = count++;\n pages.push(page); \n page = new Object();\n page.title = 'Questions & Answers';\n page.staticpageurl = '/information-requests';\n page.id = count++;\n pages.push(page); \n page = new Object();\n page.title = 'Notifications';\n page.staticpageurl = '/notifications-inbox';\n page.id = count++;\n pages.push(page); \n // page = new Object();\n // page.title = 'Archived Requests';\n // page.staticpageurl = '/quote-requests/archived';\n // page.id = count++;\n // pages.push(page);\n page = new Object();\n page.title = 'Ratings & Reviews';\n page.staticpageurl = '/reviews/' + this.currentUserData.CompanyId;\n page.id = count++;\n pages.push(page);\n page = new Object();\n page.title = 'Account & Settings';\n page.staticpageurl = '/settings';\n page.id = count++;\n pages.push(page);\n }\n }\n this.log(1,'getCapMarketplaceMenuPages userAuthenticated=' + this.userAuthenticated + ' currentUserRole=' + this.currentUserRole + ' pages.length=' + pages.length);\n return pages;\n }\n\n getMenuPages(){\n var t = this;\n return this.readCurrentAppJson().then((currentAppData)=>{\n let pages = [];\n if (currentAppData[\"pages\"]) {\n t.log(1,'getMenuPages length=' + currentAppData[\"pages\"].length);\n for (let pageid in currentAppData[\"pages\"]) {\n let p = currentAppData[\"pages\"][pageid];\n t.log(0,'getMenuPages pageid=' + pageid + ' p.title=' + p.title + ' p.displayoptions=' + p.displayoptions);\n if (p.displayoptions && p.displayoptions.indexOf('displayinmenu') > -1) {\n let pageTitle = p.title;\n if (!pageTitle || pageTitle == '-') {\n pageTitle = p.label;\n }\n t.log(0,'getMenuPages adding pageTitle=' + pageTitle + ' p.id=' + p.id + ' p.staticpageurl=' + p.staticpageurl);\n pages.push({title:pageTitle,id:p.id,staticpageurl:p.staticpageurl,rating:p.rating});\n }\n }\n pages.sort(function(a, b) { \n t.log(0,'pages sort: a.rating=' + a.rating + ' a.title=' + a.title + ' b.rating=' + b.rating + ' b.title=' + b.title); \n let s: number = Number(a.rating) - Number(b.rating);\n if (s == 0) {\n s = a.title.charCodeAt(0) - b.title.charCodeAt(0);\n }\n return s;\n }) \n } \n return pages;\n });\n }\n\n // get current page data from application JSON\n getPageData(pageUrl) {\n var t = this;\n return this.readCurrentAppJson().then((currentAppData)=>{\n t.log(0,'getPageData read from currentAppData pageUrl=' + pageUrl);\n //t.log(1,'getPageData read from currentAppData=' + JSON.stringify(currentAppData)); \n t.log(0,'getPageData read from currentAppData page=' + JSON.stringify(t.getJsonPropertyByPath(currentAppData, pageUrl))); \n // GR added parse/stringify 20181012 to avoid possibility of circular data references\n let page: any = t.getJsonPropertyByPath(currentAppData, pageUrl); \n if (typeof page == 'undefined' || !page) {\n page = {'title': 'Page not found'};\n } else if (page.id) {\n //page = JSON.parse(JSON.stringify(t.getJsonPropertyByPath(currentAppData, pageUrl)));\n let currentpage = page.id;\n let parent = page.parentid;\n t.log(0,'getPageData currentpage=' + currentpage + ' parent=' + parent + ' displaysubpages=' + page.displaysubpages);\n let children = [];\n let siblings = [];\n if (page.displaysubpages != \"no\") {\n for (let pageid in currentAppData[\"pages\"]) {\n if (currentAppData[\"pages\"].hasOwnProperty(pageid)) {\n let cp = currentAppData[\"pages\"][pageid];\n t.log(0,'getPageData pageid=' + pageid + ' parentid=' + cp[\"parentid\"]);\n if (cp[\"parentid\"] == currentpage) {\n children.push(cp);\n } else if (cp[\"parentid\"] == parent) {\n siblings.push({id:pageid,label:cp['label'],statticpageurl:cp['staticpageurl'],rating:cp['rating'],title:cp['title'],parentid:cp['parentid']});\n }\n }\n }\n }\n t.log(0,'getPageData currentpage=' + currentpage + ' siblings.length=' + siblings.length);\n page.children = children;\n // GR added 2018-07-17\n if (siblings) {\n siblings.sort(function(a, b) { \n t.log(0,'siblings sort: a.rating=' + a.rating + ' a.title=' + a.title + ' b.rating=' + b.rating + ' b.title=' + b.title); \n let s: number = Number(a.rating) - Number(b.rating);\n if (s == 0) {\n s = a.label.charCodeAt(0) - b.label.charCodeAt(0);\n }\n return s;\n }) \n } \n page.siblings = siblings;\n if (currentAppData[\"pages\"][parent]) {\n page.parentSection = currentAppData[\"pages\"][parent][\"section\"];\n } else {\n page.parentSection = '';\n }\n }\n //t.log(0,'getPageData page=' + this.abbreviate(JSON.stringify(page),40));\n return page; \n });\n } \n\n // get array of curent user's roster data\n getRosterData() {\n return new Promise((resolve, reject) => {\n if (this.currentRosterData) {\n this.currentRosterData = this.cleanRosterData(this.currentRosterData);\n this.log(0,'getRosterData got rosterdata from memory rosterdata=' + JSON.stringify(this.currentRosterData));\n resolve(this.currentRosterData);\n } else {\n this.getSecureKey('rosterdata').then((rosterdata:string)=>{\n let needToStoreKeys = true;\n this.log(0,'getRosterData got rosterdata from secure key rosterdata=' + rosterdata);\n if (!rosterdata) {\n this.log(2,'*** getRosterData EMPTY rosterdata from secure key');\n }\n this.currentRosterData = JSON.parse(rosterdata);\n this.currentRosterData = this.cleanRosterData(this.currentRosterData);\n resolve(this.currentRosterData);\n }).catch((error)=>{\n this.log(1,'getRosterData can not read rosterdata from secure key. Create empty data ');\n this.currentRosterData = [];\n resolve(this.currentRosterData);\n //reject({'reason':'just a test'});\n });\n }\n })\n }\n\n cleanRosterData(rosterData) {\n let newData = [];\n if (rosterData && rosterData.length > 0) {\n for (let i=0; i{\n this.log(1,'settings 2 setSecureKey key=' + key + ' cryptokey=' + this.abbreviate(cryptokey,6));\n if (cryptokey != null) {\n this.setKeyEncrypted(key, value, cryptokey);\n } \n }).catch((error)=>{\n this.log(2,'setSecureKey: can not save key beccause cryptokey is not defined');\n });\n });\n }\n }\n }\n\n // saving key/value to local storage. Not encrypted version of setKeyEncrypted\n public setKey(key, value) {\n this.log(0,'=== setKey key=' + key);\n //this.storage.ready().then(() => {\n this.storage.set(key, value).then(() => {\n this.log(1,'setKey: key ' + key + ' saved');\n }).catch((error) => {\n this.log(2,'setKey error saving key: ' + JSON.stringify(error));\n });\n //}); \n }\n\n // reading value of given key from local storage. Not encrypted version of getSecureKey\n public getKey(key) {\n let t = this;\n return new Promise(\n function (resolve, reject) { \n t.log(0,'=== getKey key=' + key);\n //t.storage.ready().then(() => {\n t.storage.get(key).then((value:string) => {\n t.log(1,'getKey: key ' + key + ' read value=' + value);\n // getSecureKey fails on not existing key. Do the same here\n if (value == null) {\n reject(new Error('getKey: ' + key + ' key not found'));\n } else {\n resolve(value);\n }\n }).catch((error) => {\n t.log(2,'getKey error reading key: ' + JSON.stringify(error));\n reject(error);\n });\n //}); \n }) \n }\n\n // to check if secure storage is supported on given divice. It is not supported on android devices version 10 and up\n\n\n // to read deviceid from storage (it is supposed to be saved there) and use it to get encryption key from the server.\n // it is alternative to read that value from secure storage\n getKeyEncryptedUsingServer(key) {\n let t = this;\n return new Promise(\n function (resolve, reject) { \n t.getKey('plainappkeys').then((value:string)=> {\n if (value) {\n let parts = value.split(';'); \n t.userToken = parts[0];\n t.deviceId = parts[1];\n t.log(1,'getKeyEncryptedUsingServer deviceid=' + t.deviceId);\n t.executeCommand('getckey', \"\").subscribe((result: any) => { \n if (result && result.Success) {\n t.currentCryptoKey = result.Message;\n t.log(1,'getKeyEncryptedUsingServer server result=' + t.currentCryptoKey); \n return t.getKeyEncrypted(key, t.currentCryptoKey).then((keyVal)=>{\n t.log(1,'getKeyEncryptedUsingServer keyVal=' + keyVal);\n resolve(keyVal);\n }).catch((error)=>{\n t.log(2,'getKeyEncryptedUsingServer can not get read key');\n reject('Can not read data. You may need to re-authenticate the App'); \n }); \n } else {\n t.log(2,'getKeyEncryptedUsingServer can not get ckey from the server ' + result.Message);\n reject('Can not communicate with the server to check authentication. Please check network connection and try to restart or reauthenticate the App later.'); \n }\n }, error => {\n t.log(2,'getKeyEncryptedUsingServer server error ' + error);\n reject('Can not communicate with the server to check authentication. Please check network connection and try to restart or reauthenticate the App later'); \n });\t\t\n } else {\n t.log(2,'getKeyEncryptedUsingServer no value for appkeys is stored');\n reject('Can not read data. You may need to reauthenticate the App.');\t\t\n }\n }).catch((error)=>{\n t.log(2,\"getKeyEncryptedUsingServer: getKey error\" + error.message);\n reject('No plainappkeys data');\n });\n })\n }\n\n private setKeyEncrypted(key, value, cryptokey) {\n this.log(1,'setKeyEncrypted before encrypt value=' + this.abbreviate(value,5) + ' cryptokey=' + this.abbreviate(cryptokey,5));\n let encryptedValue = CryptoJS.AES.encrypt(value, cryptokey).toString();\n this.log(1,'=== setKeyEncrypted key=' + key + ' encryptedValue=' + this.abbreviate(encryptedValue,10));\n //this.storage.ready().then(() => {\n this.storage.set(key, encryptedValue).then(() => {\n this.log(1,'setKeyEncrypted: key ' + key + ' saved');\n }).catch((error) => {\n this.log(2,'setKeyEncrypted error saving key: ' + JSON.stringify(error));\n });\n //}); \n }\n\n // read value for given key from the storage and decrypt it.\n // It should be exact equivalent of getSecureKey1 but without use of async/await\n // in fact using async/await makes handling exceptions (catch) more complicated \n public getSecureKey(key) {\n let t = this;\n t.log(1,'settings getSecureKey t.appType=' + t.appType + ' key=' + key + ' t.currentCryptoKey=' + t.abbreviate(t.currentCryptoKey,5)); \n if (t.appType == 'public') {\n // we do not encrypt data for public apps\n return t.getKey(key);\n } else if (t.currentCryptoKey) {\n return t.getKeyEncrypted(key, t.currentCryptoKey);\n } else {\n return new Promise(\n function (resolve, reject) { \n if (!t.initialiseSecureStorageError) {\n // \"normal call to secure storage\"\n t.log(1,'settings getSecureKey getting cryptokey ss=' + t.ss + ' key=' + key);\n let ssPromise = t.getSecureStorage(key);\n t.log(1,'settings getSecureKey ssPromise=' + ssPromise + ' key=' + key);\n if (ssPromise) {\n resolve(ssPromise.then((secstor: any)=>{\n t.log(1,'settings getSecureKey secstor=' + secstor + ' key=' + key);\n let ckPromise = secstor.get('cryptokey');\n t.log(1,'settings getSecureKey ckPromise=' + ckPromise);\n if (ckPromise) {\n return ckPromise.then((cryptokey)=>{\n t.log(1,'settings getSecureKey cryptokey=' + t.abbreviate(cryptokey,5) + ' key=' + key);\n t.currentCryptoKey = cryptokey;\n return t.getKeyEncrypted(key, cryptokey); \n }).catch((error)=>{\n t.log(1,'*** getSecureKey secstor.get ERROR ' + error.message);\n reject('Can not read data from secure storage. Possibly it is caused by screen lock changes on your device. You may need to reauthenticate the App.');\n });\n } else {\n reject('Can not read data from secure storage. Possibly it is caused by screen lock changes on your device. You may need to reauthenticate the App.');\n }\n }).catch((error)=>{\n t.log(1,'*** getSecureKey getSecureStorage key=' + key + ' ERROR ' + error.message + \" initialiseSecureStorageError=\" + t.initialiseSecureStorageError);\n // That is likely to be a first call after restart. We may want to read cryptokey from the server here\n //reject(error);\n return t.getKeyEncryptedUsingServer(key).then((keyVal)=>{\n t.log(1,'getSecureKey 1 after getKeyEncryptedUsingServer key=' + key + ' value=' + keyVal);\n resolve(keyVal);\n }).catch((error)=>{\n reject(error);\n })\n }));\n } else {\n t.log(1,'*** getSecureKey getSecureStorage returns null for key=' + key);\n return t.getKeyEncryptedUsingServer(key).then((keyVal)=>{\n t.log(1,'getSecureKey 2 after getKeyEncryptedUsingServer key=' + key + ' value=' + keyVal);\n resolve(keyVal);\n }).catch((error)=>{\n reject(error);\n }) \n }\n } else {\n return t.getKeyEncryptedUsingServer(key).then((keyVal)=>{\n t.log(1,'getSecureKey 3 after getKeyEncryptedUsingServer key=' + key + ' value=' + keyVal);\n resolve(keyVal);\n }).catch((error)=>{\n reject(error);\n })\n }\n });\n }\n }\n\n // internal function to read value for given key from the storage and decrypt it with \n // provided cryptokey\n private getKeyEncrypted(key, cryptokey) {\n var t = this;\n return new Promise(\n function (resolve, reject) {\n //t.storage.ready().then(() => {\n t.log(1,'settings getKeyEncrypted storage ready driver=' + t.storage.driver + ' key=' + key);\n t.storage.get(key).then((value) => {\n t.log(1,'getKeyEncrypted got value from storage');\n if (cryptokey == null || !cryptokey) {\n reject('No cryptokey defined');\n } else if (value == null) {\n t.log(1,'getKeyEncrypted No data for given key ' + key + ' is stored');\n reject('getKeyEncrypted: No data for given key ' + key + ' is stored');\n } else {\n t.log(1,'getKeyEncrypted before decrypt value=' + t.abbreviate(value,5) + ' cryptokey=' + t.abbreviate(cryptokey,5));\n let decrypted = CryptoJS.AES.decrypt(value, cryptokey).toString(CryptoJS.enc.Utf8);\n t.log(1,'getKeyEncrypted value decrypted for key=' + key);\n if (decrypted) {\n resolve(decrypted);\n } else {\n t.log(1,'getKeyEncryptedCan not decrypt value');\n reject('Can not decrypt value');\n }\n }\n }).catch((error)=>{\n t.log(1,'getKeyEncrypted Error getting data from storage: ' + error);\n reject('getKeyEncrypted Error getting data from storage: ' + error)\n });\n //});\n }\n );\n } \n\n checkServerForNotifications() {\n this.log(1,'checkServerForNotifications');\n this.notificationCheck.isRunning = true;\n this.executeCommand('getdevicenotificationjson', \"\")\n .subscribe((result: any) => { \n this.lastNotificationChecked = new Date();\n this.log(1,'getdevicenotificationjson http post result=' + result + \" o=\" + JSON.stringify(result));\n //this.notifications = this.dedupArrayById(this.notifications); \n //this.log(1,'getdevicenotificationjson notifications.length=' + result.notifications.length);\n if (result.notifications && result.notifications.length > 0) {\n this.trackMatomoEvent(\"Interaction\", \"Notification\", result.notifications.length + \" new notification(s) received from the server\", result.notifications.length);\n // somehow we managed to get the same notification twice so below we compare ids to avoid it \n for(var i=0;i e.id !== result.notifications[i].id)) {\n this.notifications.push(result.notifications[i]);\n }\n }\n //this.notifications = result.notifications.concat(this.notifications);\n this.saveNotifications();\n this.notificationsNewCount = this.getNewNotificationsCount();\n }\n this.log(1,'getdevicenotificationjson this.notifications.length=' + this.notifications.length + \" notificationsNewCount=\" + this.notificationsNewCount); \n this.notificationCheck.isRunning = false;\n // GR We need to \"clear up\" saved JWT keys periodically in case if they will be updated on the server. \n // Do it here when notification are read from the server;\n this._jwtsk = [];\n }, error => {\n this.log(2,'getdevicenotificationjson server error ' + error);\n this.notificationCheck.isRunning = false;\n }); \n }\n\n getNewNotificationsCount() {\n let count = 0;\n if (this.notifications) {\n for (let i=0; i (bprefix + b.sent) ) {\n val = -1;\n } else if ((aprefix + a.sent) < (bprefix + b.sent)) {\n val = 1;\n } \n //console.log(\"compareNotifications a=\" + (aprefix + a.sent) + \" b=\" + (bprefix + b.sent) + \" val=\" + val); \n return val;\n }\n\n getNotificationById(id) {\n let notification = {};\n if (this.notifications) {\n for (let i=0; i((resolve, reject) => { \n if (t.notifications && t.notifications.length > 0) {\n t.log(1,'getNotifications read notifications from memory');\n resolve(t.notifications);\n } else {\n t.getSecureKey('notifications').then((value:string)=> {\n t.log(1,'getNotifications read notifications from storage');\n t.notifications = JSON.parse(value);\n resolve(t.notifications);\n }).catch((error)=>{\n t.log(1,'getNotifications no notifications found in storage');\n t.notifications = [];\n resolve(t.notifications);\n });\n }\n })\n }\t\n\n getShiftName(shifttype: string){\n let name = '';\n let index = this.rosterShiftTypes.findIndex(x => x.value==shifttype);\n this.log(0,'getShiftName shifttype=' + shifttype + ' index=' + index);\n if (index > -1) {\n name = this.rosterShiftTypes[index].name;\n }\n return name;\n }\n \n // get JSON property by path like 'data/body'\n getJsonPropertyByPath(jsonObj, path) {\n let property = null;\n this.log(0,\"getJsonPropertyByPath path=\" + path);\n if (jsonObj) {\n if (path && path.substr(0,1) == '/') {\n path = path.substr(1);\n }\n if (path) {\n let parts = path.split('/');\n this.log(0,\"getJsonPropertyByPath parts.length=\" + parts.length);\n if (parts.length == 1){\n property = jsonObj[parts[0]];\n } else {\n property = this.getJsonPropertyByPath(jsonObj[parts[0]], parts.slice(1).join('/'));\n }\n this.log(0,\"getJsonPropertyByPath parts.length=\" + parts.length + \" path=\" + path + \" property=\" + this.abbreviate(JSON.stringify(property),100));\n } else {\n property = jsonObj;\n }\n }\n //this.log(0,\"getJsonPropertyByPath *** path=\" + path + \" property=\" + this.abbreviate(JSON.stringify(property),50));\n return property;\n }\n\n // get integer number of minutes between 2 date objects\n public timeDiffInMinutes(endDate, startDate) {\n let diff = 0;\n this.log(0,'timeDiffInMinutes: endDate=' + endDate + ' startDate=' + startDate);\n if (endDate instanceof Date && startDate instanceof Date) {\n diff = (endDate.getTime() - startDate.getTime()) / 1000;\n this.log(0,'timeDiffInMinutes: a seconds diff=' + diff);\n diff = Math.abs(Math.round(diff/60));\n } else if (!isNaN(startDate) && !isNaN(endDate)) {\n diff = (Number(endDate) - Number(startDate)) / 1000;\n this.log(0,'timeDiffInMinutes: b seconds diff=' + diff);\n diff = Math.abs(Math.round(diff/60));\n } else {\n this.log(0,'*** timeDiffInMinutes: ERROR endDate or/and startDate is not date'); \n }\n this.log(0,'timeDiffInMinutes: diff=' + diff); \n return diff;\n } \n\n // set various settings variables from appsettings\n setConfigVariables(appsettings) {\n let s = this;\n\n s.appType = appsettings.appType;\n if (s.appType == 'public') {\n s.userToken = '--';\n }\n if (appsettings.appSiteHost && appsettings.appSiteHost.substring(0,4) != \"http\") {\n //protocol should be added\n appsettings.appSiteHost = \"https://\" + appsettings.appSiteHost;\n }\n s.appSiteHost = appsettings.appSiteHost;\n s.log(1,'setConfigVariables appType=' + s.appType + ' appSiteHost=' + s.appSiteHost + ' userToken=' + s.userToken + ' appsettings.companyName=' + appsettings.companyName);\n\n if (appsettings.piwikServerUrl) {\n if (appsettings.piwikServerUrl.substring(0,4) != \"http\") {\n appsettings.piwikServerUrl = \"https://\" + appsettings.piwikServerUrl;\n }\n if (appsettings.piwikServerUrl.substr(-1) != \"/\") {\n // we assume later that matomoUrl ends with \"/\"\n appsettings.piwikServerUrl = appsettings.piwikServerUrl + \"/\";\n }\n }\n let matomoUrl = appsettings.piwikServerUrl;\n\n if (s.matomoUrl != matomoUrl || s.matomoSiteId != appsettings.piwikSiteId) {\n this._matomoInitialised = false;\n } \n s.matomoUrl = matomoUrl;\n s.matomoSiteId = appsettings.piwikSiteId;\n s.trackMatomoAnalytics = s.getBoolean(appsettings.piwikEnabled);\n s.trackFirebaseAnalytics = s.getBoolean(appsettings.firebaseAnalyticsEnabled);\n if (appsettings.sessionTimeInMinutes) {\n s.sessionTimeInMinutes = 1*appsettings.sessionTimeInMinutes;\n }\n if (appsettings.passwordSessionTimeInMinutes) {\n s.passwordSessionTimeInMinutes = 1*appsettings.passwordSessionTimeInMinutes;\n } \n s.log(1,'setConfigVariables 1a appsettings.passwordAuthenticationInBrowserEnabled=' + appsettings.passwordAuthenticationInBrowserEnabled + ' s.passwordAuthenticationInBrowserEnabled=' + s.passwordAuthenticationInBrowserEnabled);\n\n if (appsettings.passwordAuthenticationInBrowserEnabled == \"true\") {\n s.passwordAuthenticationInBrowserEnabled = true;\n if (!s.platformIsCordova) {\n s.passwordAuthentication = true;\n s._authorised = true; // - do not require email authorisation\n }\n } else if (appsettings.passwordAuthenticationInBrowserEnabled == \"false\" && s.passwordAuthenticationInBrowserEnabled) {\n s.passwordAuthenticationInBrowserEnabled = false;\n if (!s.platformIsCordova) {\n s.passwordAuthentication = false;\n s._authorised = false; // - require email authorisation\n }\n }\n s.log(2,'setConfigVariables 1b s.passwordAuthentication=' + s.passwordAuthentication + ' s.platformIsCordova=' + s.platformIsCordova + ' s.passwordAuthenticationInBrowserEnabled=' + s.passwordAuthenticationInBrowserEnabled);\n\n if (appsettings.errorLogMaxEntriesToKeep) {\n s.errorLogMaxEntriesToKeep = 1*appsettings.errorLogMaxEntriesToKeep;\n }\n if (appsettings.errorLogMinLogLevelToKeep) {\n s.errorLogMinLogLevelToKeep = 1*appsettings.errorLogMinLogLevelToKeep;\n }\n if (appsettings.checkForUpdatesTimeInMinutes) {\n s.checkForUpdatesTimeInMinutes = 1*appsettings.checkForUpdatesTimeInMinutes;\n }\n if (appsettings.homePageNotificationsLimit) {\n s.homePageNotificationsLimit = 1*appsettings.homePageNotificationsLimit;\n }\n if (appsettings.logDisplayLevel) {\n s.logDisplayLevel = 1*appsettings.logDisplayLevel;\n }\n if (appsettings.companyName) {\n s.companyName = appsettings.companyName;\n }\n }\n\n // after switching from cordova-ios v 6 our local images are not loaded\n normalizeURL2(entry) {\n let newUrl = entry.toURL();\n if (this.platform.is('ios')) {\n // GR. Does below always work? app & localhost below must correspond to scheme and hostname preferences defined in config.xml\n // 2021-07-14 GR it seems that using custom scheme breaks app working in android. When I removed \n // from config.xml app build worked but not with it (: May be will try to add it to ios section?\n //newUrl = newUrl.replace(\"file://\",\"app://localhost/_app_file_\");\n newUrl = this.webView.convertFileSrc(newUrl);\n //newUrl = window.WkWebView.convertFilePath(url);\n } else if (this.platform.is('android')) {\n newUrl = this.webView.convertFileSrc(newUrl); \n }\n return newUrl;\n }\n\n // this function is supposed to grab image from given full URL, save it to the local file and return\n // it's location in \"local URL format\" e.g. /assets/imgs/some_image.jpg\"\n getExternalImage(host,imageUrl) {\n var imageRelativeUrl = imageUrl;\n if (imageUrl && imageUrl.length > 10 && imageUrl.substring(0,4) == \"http\" && imageUrl.indexOf(\"//\") > -1) {\n var hostItems = imageUrl.split(\"//\");\n var urlItems = hostItems[1].split(\"/\");\n host = hostItems + \"//\" + urlItems[0];\n imageRelativeUrl = hostItems[1].replace(urlItems[0] + \"/\",\"\");\n }\t\n this.log(0,'getExternalImage host=' + host + ' imageUrl=' + imageUrl + ' imageRelativeUrl=' + imageRelativeUrl + \n ' this.platformIsCordova=' + this.platformIsCordova);\n var url = host + imageRelativeUrl;\n var t = this;\n return new Promise(function(resolve){\n if (imageUrl && imageUrl.length > 10 && imageUrl.substring(0,5) == \"data:\") {\n t.log(1,'getExternalImage: inline image'); \n // GR we should check for existance of image at t.sourceHost + imageUrl and substitute it with\n // spacer image if it doesn't exist but this is just for browser testing so it can wait\n resolve({\"old\": imageUrl, \"new\": imageUrl}); \n } else if (imageRelativeUrl && t.platformIsCordova) {\n let urlItems = imageRelativeUrl.split(\"/\");\n var fileName = urlItems[urlItems.length - 1];\n\n var prefix = imageRelativeUrl.replace(fileName,\"\").replace(\"/images/\",\"\").replace(/\\//g,\"_\");\n if (prefix) {\n prefix += '_';\n fileName = prefix + fileName;\n }\n t.log(0,'getExternalImage prefix=' + prefix);\n\n var fullDirectory = t.file.dataDirectory; //t.file.applicationDirectory + 'www/assets/imgs';\n\n t.log(0,'fullDirectory=' + fullDirectory + ' fileName=' + fileName);\n t.file.resolveLocalFilesystemUrl(fullDirectory).then((entry: DirectoryEntry) => {\n let dirUrl = t.normalizeURL2(entry);\n t.log(1,'resolveLocalFileSystemURL image folder: ' + dirUrl);\n\n entry.getDirectory('images', { create: true }, function (dirEntry) {\n //t.createDirectoryPath(entry, directory, function(){\n t.log(1,'checkFile dir=' + fullDirectory + 'images/' + ' url=' + dirUrl + ' file=' + fileName);\n t.file.resolveLocalFilesystemUrl(fullDirectory + 'images/' + fileName).then((fe: DirectoryEntry)=>{\n t.log(1,'local image file already exists url=' + t.normalizeURL2(fe));\n resolve({\"old\": imageUrl, \"new\": t.normalizeURL2(fe)});\n\n }).catch((error)=>{\n // for some reason we are coming here when file doesn't exist\n t.log(0,'checkFile error: ' + JSON.stringify(error) + ' file=' + fileName);\n t.log(1,'start getBinaryFile 2 url=' + url);\n //\n t.getBinaryFile(url).subscribe(function(response){\n t.log(1,'checkFile getBinaryFile download complete 2 url=' + url + ' before write to fullDirectory=' + fullDirectory);\n // response is arrayBuffer\n var blob = new Blob([response], { type: 'image/' + fileName.substr(fileName.length - 5) });\n t.log(0,\"blob=\" + blob);\n //t.saveFile(dirEntry, blob, fileName,t);\n \n //\n t.file.writeFile(fullDirectory + 'images/', fileName, blob, { replace: true }).then((entry)=>{\n t.log(1,'getExternalImage save downloaded file complete: ' + entry.toURL() + ' normalize=' + t.normalizeURL2(entry)); \n resolve({\"old\": imageUrl, \"new\": t.normalizeURL2(entry)}); \n }).catch((error)=>{\n t.log(2,'getExternalImage save downloaded file error: ' + JSON.stringify(error) + ' url=' + url);\n });\n //\n }, function(error) {\n t.log(2,'getExternalImage download error: ' + JSON.stringify(error) + ' url=' + url);\n // if we are here then external image doesn't exist or we can't get it. Use spacer image instead:\n let spacer = t.file.applicationDirectory + 'www/assets/imgs/spacer.gif';\n t.file.resolveLocalFilesystemUrl(spacer).then((se: DirectoryEntry) => {\n // add existing spacer instead of missing image\n resolve({\"old\": imageUrl, \"new\": t.normalizeURL2(se)});\n }).catch((error)=>{\n t.log(2,'can not find spacer');\n resolve({\"old\": imageUrl, \"new\": imageUrl}); \n });\n }); \n // \n });\n }, function(error) {\n t.log(2,'Error creating directory ' + JSON.stringify(error));\n resolve({\"old\": imageUrl, \"new\": t.sourceHost + imageUrl});\n });\n }).catch((error)=>{\n console.log('resolveLocalFilesystemUrl error resolving directory=' + fullDirectory + ' error: ' + error);\n resolve({\"old\": imageUrl, \"new\": t.sourceHost + imageUrl});\n });\n } else {\n t.log(1,'work around not cordova app'); \n // GR we should check for existance of image at t.sourceHost + imageUrl and substitute it with\n // spacer image if it doesn't exist but this is just for browser testing so it can wait\n resolve({\"old\": imageUrl, \"new\": t.sourceHost + imageUrl});\n }\n }); \n }\n\n // save all modules data which came from the server and update local variables\n setModulesData(modulesdata) {\n if (!this.coremodulesdata) {\n // this should never happen!\n this.coremodulesdata = {};\n }\n if (!this.othermodulesdata) {\n this.othermodulesdata = {};\n }\n var callNow = true;\n if (modulesdata && modulesdata.appsettings && modulesdata.appsettings.appType) {\n this.log(1,'setModulesData companyLogo=' + modulesdata.appsettings.companyLogo + ' appsettings=' + this.appsettings + ' appVersionChanged=' + this.currentUserData.appVersionChanged);\n if (modulesdata.appsettings.companyLogo && (this.currentUserData.appVersionChanged || !this.appsettings || \n !this.appsettings.companyLogoLocal || modulesdata.appsettings.companyLogo != this.appsettings.companyLogo)) {\n callNow = false;\n this.getExternalImage(this.sourceHost,modulesdata.appsettings.companyLogo).then((result: any) => {\n this.log(1,\"setModulesData companyLogo old=\" + result.old + \" new=\" + result.new);\n modulesdata.appsettings.companyLogoLocal = result.new;\n this.appsettings.companyLogoLocal = result.new;\n this.coremodulesdata.appsettings.companyLogoLocal = result.new;\n this.setModulesData2(modulesdata);\n })\n } else if (this.appsettings.companyLogoLocal) {\n modulesdata.appsettings.companyLogoLocal = this.appsettings.companyLogoLocal;\n } \n \n // update individual config variables\n this.appsettings = modulesdata.appsettings;\n this.coremodulesdata.appsettings = modulesdata.appsettings;\n this.log(1,'setModulesData callNow=' + callNow + ' appsettings=' + JSON.stringify(this.appsettings));\n this.setConfigVariables(modulesdata.appsettings);\n }\n if (callNow) {\n this.setModulesData2(modulesdata);\n }\n }\n\n setModulesData2(modulesdata) { \n if (modulesdata && modulesdata.staticpagesmap) {\n // update staticPageMap\n this.staticPageMap = modulesdata.staticpagesmap;\n this.log(1,'setModulesData2 staticPageMap=' + JSON.stringify(this.staticPageMap));\n } \n\n let moduleIds = \"\";\n let sep = \"\";\n let coreModuleIds = \"\";\n let csep = \"\";\n this.log(1,'setModulesData2 modulesdata=' + this.abbreviate(JSON.stringify(modulesdata),100));\n for (let moduleId in modulesdata) {\n this.log(1,'setModulesData2 moduleId=' + moduleId + ' modulesdata[moduleId]=' + this.abbreviate(JSON.stringify(modulesdata[moduleId]),100) + \n ' LoadBeforeAuthentication=' + this.getBoolean(modulesdata[moduleId].LoadBeforeAuthentication));\n if (this.getBoolean(modulesdata[moduleId].LoadBeforeAuthentication)) {\n this.coremodulesdata[moduleId] = modulesdata[moduleId];\n coreModuleIds += csep + moduleId;\n csep = \",\";\n } else { \n this.othermodulesdata[moduleId] = modulesdata[moduleId];\n moduleIds += sep + moduleId;\n sep = \",\";\n }\n }\n this.log(1,'setModulesData2 setting data for coreModuleIds=' + coreModuleIds + ' modules=' + moduleIds);\n if (coreModuleIds) {\n this.setKey('coremodulesdata',JSON.stringify(this.coremodulesdata));\n }\n if (moduleIds) {\n this.setSecureKey('othermodulesdata',JSON.stringify(this.othermodulesdata));\n }\n }\n\n // check if any modules need to be updated and update them from the server\n updateModulesFromServer(serverModuleslastmodified) {\n let moduleIds = this.findModulesToUpdate(serverModuleslastmodified, this.currentAppData.moduleslastmodified);\n this.log(1,'updateModulesFromServer serverModuleslastmodified=' + JSON.stringify(serverModuleslastmodified) + ' app moduleslastmodified=' + \n JSON.stringify(this.currentAppData.moduleslastmodified) + \" moduleIds=\" + moduleIds);\n if (moduleIds) {\n this.getUpdatedModulesDataFromServer(moduleIds);\n if (this.currentAppData.moduleslastmodified) {\n for (let moduleId in serverModuleslastmodified) {\n this.currentAppData.moduleslastmodified[moduleId] = serverModuleslastmodified[moduleId];\n } \n } else {\n this.currentAppData.moduleslastmodified = {serverModuleslastmodified};\n }\n }\n }\n\n // returns comma separated list of moduleIds for modules which has new or updated data on the server\n findModulesToUpdate(serverModuleslastmodified, appModuleslastmodified) {\n let moduleIds = \"\";\n let sep = \"\";\n if (serverModuleslastmodified) {\n for (let moduleId in serverModuleslastmodified) {\n // lastModified times are stored in yyyymmddHHMMSS format\n let serverLastModified = 1*serverModuleslastmodified[moduleId];\n let appLastModified = 0;\n if (appModuleslastmodified && appModuleslastmodified[moduleId]) {\n appLastModified = 1*appModuleslastmodified[moduleId];\n }\n this.log(1,'findModulesToUpdate moduleId=' + moduleId + ' serverLastModified=' + serverLastModified + ' appLastModified=' + appLastModified + \" updateAllModules=\" + this.updateAllModules);\n if (this.othermodulesdata) {\n this.log(1,'findModulesToUpdate 2 moduleId=' + moduleId + ' coremodules=' + this.coremodulesdata[moduleId] + ' othermodules=' + this.othermodulesdata[moduleId]);\n } else {\n this.log(1,'findModulesToUpdate 1 moduleId=' + moduleId + ' coremodules=' + this.coremodulesdata[moduleId] + ' this.othermodulesdata=' + this.othermodulesdata);\n }\n //if ((serverLastModified > appLastModified || this.updateAllModules)) {\n if ((serverLastModified > appLastModified || this.updateAllModules) || \n (!this.coremodulesdata[moduleId] && !this.othermodulesdata) || \n (!this.coremodulesdata[moduleId] && !this.othermodulesdata[moduleId])) {\n moduleIds += sep + moduleId;\n sep = \",\"; \n }\n }\n this.updateAllModules = false;\n }\n this.log(1,'findModulesToUpdate moduleIds=' + moduleIds);\n return moduleIds;\n }\n \n // read updated (or new) data for given app modules from the server\n getUpdatedModulesDataFromServer(moduleIds) {\n let s = this;\n s.log(1,'getUpdatedModulesData moduleIds=' + moduleIds);\n if (moduleIds) {\n let commandParameters = 'm=' + encodeURIComponent(moduleIds) + '&userid=' + s.currentUserData.Userid;\n s.executeCommand('getmodulesdata', commandParameters).subscribe((result: any) => { \n if (result && result.Success) {\n s.log(1,'getUpdatedModulesData server success result=' + this.abbreviate(JSON.stringify(result.modulesdata),50)); \n s.setModulesData(result.modulesdata);\n } else {\n s.log(1,'getUpdatedModulesData can not get data from the server result=' + JSON.stringify(result)); \n }\n }, error => {\n s.log(2,'getUpdatedModulesData server error ' + JSON.stringify(error));\n });\n }\n }\n\n // get data from \"not core\" modules either from local variable (memory) or from storage\n // run it after user is authenticated and after reading currentAppData\n getOtherModulesData() {\n let s = this;\n return new Promise((resolve, reject) => { \n this.currentAppData.moduleslastmodified\n if (s.othermodulesdata && Object.keys(s.othermodulesdata).length > 0) { \n s.log(1,'getOtherModulesData read othermodulesdata from memory s.othermodulesdata=' + JSON.stringify(s.othermodulesdata));\n resolve(s.othermodulesdata);\n } else {\n s.getSecureKey('othermodulesdata').then((value:string)=> {\n s.log(1,'getOtherModulesData read othermodulesdata from storage');\n resolve(JSON.parse(value));\n }).catch((error)=>{\n\t\t // probably no modules data were stored\n s.log(1,\"getOtherModulesData: getKey error \" + error);\n resolve({\"emptymodule\":{}});\n //reject(error);\n });\n }\n })\n }\n\n // get core data either from local variable or from storage or from the server\n // run on application load\n getCoreModulesData() {\n let s = this;\n return new Promise((resolve, reject) => { \n if (s.coremodulesdata && s.coremodulesdata.appsettings) {\n s.appsettings = s.coremodulesdata.appsettings;\n resolve(s.coremodulesdata);\n } else {\n s.getKey('coremodulesdata').then((value:string)=> {\n s.coremodulesdata = JSON.parse(value);\n s.appsettings = s.coremodulesdata.appsettings;\n s.setConfigVariables(s.coremodulesdata.appsettings);\n if (s.coremodulesdata && s.coremodulesdata.staticpagesmap) {\n // update staticPageMap\n s.staticPageMap = s.coremodulesdata.staticpagesmap;\n } \n resolve(s.coremodulesdata);\n }).catch((error)=>{\n s.log(1,'getCoreModulesData no value for coremodulesdata is stored');\n s.executeCommand('getcoremodulesdata', \"\").subscribe((result: any) => { \n if (result && result.Success) {\n s.setModulesData(result.modulesdata);\n s.log(1,'getCoreModulesData server result=' + JSON.stringify(result.modulesdata)); \n s.setConfigVariables(result.modulesdata.appsettings); \n resolve(result.modulesdata);\n } else {\n s.log(2,'getcoremodulesdata can not get data from the server');\n reject(new Error('getcoremodulesdata can not get data from the server')); \n }\n }, error => {\n s.log(2,'getCoreModulesData server error ' + error);\n reject(error);\n });\t\t\t\n });\n }\n })\n }\n\n // get boolean value from the string or use default value (false by default)\n public getBoolean(str: string, defaultValue=false) {\n let bln = defaultValue;\n if (str) {\n str = str.toLowerCase();\n if (defaultValue) {\n if (str == \"0\" || str == \"f\" || str == \"false\" || str == \"n\" || str == \"no\") {\n bln = false;\n }\n } else {\n if (str == \"1\" || str == \"t\" || str == \"true\" || str == \"y\" || str == \"yes\") {\n bln = true;\n }\n }\n }\n return bln;\n }\n \n // get \"pseudo random\" string of given length and possibly with characters from provided \"alphabet\" only\n public getRandomString(stringLength, alphabet='') {\n if (!alphabet) {\n alphabet = '23456789abcdegjkmnpqrstvwxyz';\n }\n let rst = '';\n for (let i = 0; i < stringLength; i++) {\n rst += alphabet.charAt(Math.floor(Math.random() * alphabet.length));\n }\n return rst;\n }\n\n // get jwt key from the server\n private getJwtSK(host) {\n let t = this;\n return new Promise((resolve, reject) => {\n if (t._jwtsk[host]) {\n t.log(1,'getJwtSK key already exists');\n resolve(t._jwtsk[host]); \n } else {\n let commandParameters = 'host=' + host;\n // GR 20200630 server side updates are required!\n t.executeCommand('getjwtkey',commandParameters)\n .subscribe((result: any) => { \n if (result && result.Success) {\n t._jwtsk[host] = result.jwtkey;\n resolve(t._jwtsk[host]);\n } else {\n t.log(2,'getJwtSK error message=' + result.Message);\n reject(result.Message);\n }\n }, error => {\n t.log(2,'getJwtSK error: ' + JSON.stringify(error));\n reject(JSON.stringify(error));\n });\n }\n }) \n }\n\n // Attention! getJwtToken was updated and base64url was created on 2020-03-11 Updated versions are required for auto login on new site!\n // get hostname from URL\n public getHostname(url) {\n return new URL(url).hostname;\n }\n\n // if one adds jwt=token to QS in a link to \"master\" site then he will be authomatically authenticated\n public getJwtToken(url='',redirectAfterLogin='self') {\n if (this.appType == 'public') {\n this.log(1,'getJwtToken do not produce jwt token for the public app');\n return Promise.reject(new Error('do not produce jwt token for the public app'));\n } else {\n let host = this.getHostname(this.sourceHost);\n if (url) {\n host = this.getHostname(url);\n }\n this.log(1,\"getJwtToken: url=\" + url + \" host=\" + host);\n return this.getJwtSK(host).then((sk:string)=>{\n let payload = CryptoJS.enc.Latin1.parse(JSON.stringify({\n \"username\": this.currentUserData.Username,\n \"email\": this.currentUserData.Email,\n \"RedirectAfterLogin\": redirectAfterLogin,\n \"exp\": String(Math.floor(this.getJwtExpirationTimestamp(10)/1000)), \n \"host\": host,\n \"jti\": this.generateUUID().replace(/\\-/g,'')\n }));\n let header = CryptoJS.enc.Latin1.parse(JSON.stringify({\n \"typ\": \"JWT\", \n \"alg\": \"HS256\"\n }));\n var token = this.base64url(header) + \".\" + this.base64url(payload);\n\n let sig = CryptoJS.HmacSHA256(token, sk);\n let signature = this.base64url(sig);\n\n //this.log(1,\"getJwtToken: signature=\" + signature);\n let jwt = token + \".\" + signature; //encodeURIComponent(header + \".\" + payload + '.' + signature);\n //this.currentJwtToken = jwt;\n this.log(1,\"getJwtToken: jwt=\" + jwt);\n return jwt;\n }); \n }\n }\n\n //https://www.jonathan-petitcolas.com/2014/11/27/creating-json-web-token-in-javascript.html\n public base64url(source) {\n // Encode in classical base64\n var encodedSource = CryptoJS.enc.Base64.stringify(source);\n \n // Remove padding equal characters\n encodedSource = encodedSource.replace(/=+$/, '');\n \n // Replace characters according to base64url specifications\n encodedSource = encodedSource.replace(/\\+/g, '-');\n encodedSource = encodedSource.replace(/\\//g, '_');\n \n return encodedSource;\n }\n \n\n // GR encoding & is causing problems on c# HtmlDecode\n public HtmlEncode(str) {\n return String(str)\n .replace(/\"/g, '"')\n .replace(/'/g, ''')\n .replace(//g, '>');\n //.replace(/&/g, '&');\n }\n\n // generate UUID formatted random string taken from https://stackoverflow.com/questions/105034/create-guid-uuid-in-javascript\n public generateUUID() { // Public Domain/MIT\n var d = new Date().getTime();\n if (typeof performance !== 'undefined' && typeof performance.now === 'function'){\n d += performance.now(); //use high-precision timer if available\n }\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\n var r = (d + Math.random() * 16) % 16 | 0;\n d = Math.floor(d / 16);\n return (c === 'x' ? r : (r & 0x3 | 0x8)).toString(16);\n });\n }\n\n // GR. That function was to read images from \"assets/img\" folder. Doesn't look like it is used\n getAppImageSrc(imageName) {\n let t = this;\n return new Promise(\n function (resolve, reject) { \n var fullDirectory = t.file.applicationDirectory + 'www/assets/imgs/';\n let src = '';\n if (t.platformIsCordova) {\n t.file.resolveLocalFilesystemUrl(fullDirectory + imageName).then((fe: DirectoryEntry)=>{\n let src = t.normalizeURL2(fe); \n t.log(0,'getAppImageSrc src=' + src);\n resolve(src);\n }).catch((error)=>{\n t.log(2,'getAppImageSrc can not read image ' + JSON.stringify(error));\n reject(error);\n });\n } else {\n src = './assets/imgs/' + imageName;\n resolve(src);\n }\n }\n )\n }\n\n getAppVersion() {\n let t = this;\n return new Promise(\n function (resolve, reject) {\n t.log(1,'getAppVersion t.platformIsCordova=' + t.platformIsCordova + ' currentUserData.ActiveAppVersion=' + t.currentUserData.ActiveAppVersion);\n if (t.platformIsCordova) {\n t.appVersion.getVersionNumber().then((v)=>{\n t.log(1,'getAppVersion v=' + v);\n\n if (v && v != t.currentUserData.ActiveAppVersion) {\n t.currentUserData.appVersionChanged = true;\n let numVer = 0;\n let arrVer = v.split('.');\n for (let n=0; n{\n t.log(2,'getAppVersion error in getVersionNumber: ' + JSON.stringify(error));\n reject('getAppVersion error=' + JSON.stringify(error));\n });\n } else {\n if (t.WebAppVersion != t.currentUserData.ActiveAppVersion) {\n t.currentUserData.appVersionChanged = true;\n t.currentUserData.ActiveAppVersion = t.WebAppVersion;\n }\n resolve(t.WebAppVersion);\n }\n }\n )\n }\n\n// ====================\n// Function: FormatCurrency\n// Simple currency formatter without 1,000,000 pattern (not true any more)\n//\n// Input:\n// - amount - numerical value to display\n// - currencySign - optional currency sign ($ is default)\n// - roundAmount - minimal rounding amount\n// roundAmount = 0.01 - to keep single cents (default); roundAmount = 0.05 - round to 5 cents\n//\n// Output:\n// - formatted currency string (\"\" for not valid or empty amount)\n//\n// History:\n// - 2014-12-02 GR transferred from Vinylsolution\n// - 2016-11-09 GR added stripping commas and first \"currency\" symbol if they exist from original amount before formatting\n// - 2017-05-10 GR added special handling of 0 amount\n// - 2017-06-08 GR added code for \"potentially\" adding commas\n// ====================\nFormatCurrency(amount, currencySign = '$', roundAmount: number = 0.01) {\n var s = \"\", roundTo: number = 0.05, amount2 = amount;\n if (amount2 && isNaN(amount2)) {\n amount2 = amount2.replace(\",\", \"\");\n if (amount2 && isNaN(amount2)) {\n amount2 = amount2.substring(1);\n }\n }\n if ((amount2 && !isNaN(amount2)) || 1 * amount2 == 0) {\n if (roundAmount && roundAmount < 1 && !isNaN(roundAmount)) {\n roundTo = roundAmount;\n }\n var i = parseFloat(amount2);\n this.log(0,'FormatCurrency: amount=' + amount + ' amount2=' + amount2 + ' i=' + i);\n var intFactor: number = 1 / roundTo;\n var minus = (i < 0) ? '-' : \"\";\n i = Math.round(Math.abs(i) * intFactor) / intFactor; // round value to (roundTo * 100) cents\n s = (i).toLocaleString();\n //this.log(1,'FormatCurrency: 1 s=' + s + ' i=' + i);\n if (s.indexOf('.') < 0) s += \".00\";\n //this.log(1,'FormatCurrency: 2 s=' + s );\n if (s.indexOf('.') == (s.length - 2)) s += \"0\";\n //this.log(1,'FormatCurrency: 3 s=' + s); \n if (!currencySign) currencySign = \"$\"; // $ is default currency sign\n // GR 2017-06-08 update s to (1 * s).toLocaleString() for \"potentially\" adding commas \n s = minus + currencySign + s;\n }\n return s;\n} \n\n // format time string originally presented in HH:mm\n formatTime(dateformat: string, timeString: any) {\n var date = moment(timeString, 'HH:mm');\n return moment(date).format(dateformat);\n }\n\n formatDateTime(dateformat: string, date?: any) {\n if (!date) {\n date = Date.now();\n }\n return moment(date).format(dateformat);\n }\n\n sameWeek(date1: Date, date2: Date) {\n return moment(date1).isSame(date2,\"week\");\n }\n\n sameDay(date1: Date, date2: Date) {\n return moment(date1).isSame(date2,\"day\");\n }\n\n // get time difference in hours between 2 dates (first one more recent)\n getDateDiff(date1: Date, date2: Date) {\n var d1 = moment(date1); // newer date\n var d2 = moment(date2); // older date\n var duration = moment.duration(d1.diff(d2));\n return duration.asDays(); \n }\n \n // get time difference in hours between 2 dates (first one more recent)\n getTimeDiffInHours(date1: Date, date2: Date) {\n var d1 = moment(date1); // newer date\n var d2 = moment(date2); // older date\n var duration = moment.duration(d1.diff(d2));\n return duration.asHours(); \n }\n\n // get time difference in milliseconds between 2 dates (first one more recent)\n getTimeDiffInMilliseconds(date1: Date, date2: Date) {\n var d1 = moment(date1); // newer date\n var d2 = moment(date2); // older date\n var duration = moment.duration(d1.diff(d2));\n return duration.asMilliseconds(); \n } \n\n getEndOfWeek(date?: any) {\n if (!date) {\n date = Date.now();\n }\n return moment(date).endOf('week').toDate(); \n }\n\n addDays(daysToAdd: number, date?: any) {\n if (!date) {\n date = Date.now();\n }\n // moment doesn't work properly with negative numbers !?\n //if (daysToAdd < 0) {\n // return moment(date).subtract(Math.abs(daysToAdd),'days').toDate();\n //} else {\n return moment(date).add(daysToAdd,'days').toDate();\n //}\n }\n\n formatDateTime2(dateformat: string, year: any, month: any, date: any) {\n let dateObj = new Date(year, month, date);\n return moment(dateObj).format(dateformat);\n }\n\n // create expiration timestamp for JWT token ac UTC timestamp minutesToExpiry from now\n getJwtExpirationTimestamp(minutesToExpiry: number) {\n return moment(Date.now()).add(minutesToExpiry,'minutes').utc().valueOf();\n }\n\n displayServerError(errorText) {\n const alert = this.alertController.create({\n header: 'Submission Errors',\n message: 'Error happened during bid submission:
' + errorText + '
',\n animated: true,\n cssClass: 'errorBox',\n buttons: ['OK']\n }).then(alert=> {\n alert.present(); \n });\n }\n\n // get fomatted expiration time as 'current time' + provided period where period\n // must be given in format like '1 hour','2 days' or '3 weeks'\n getExpirationTime(period) {\n let exp = moment(Date.now()).format('YYYY-MM-DD HH:mm:ss'); \n if (period && period.indexOf(' ') > -1) {\n let items = period.split(' ');\n exp = moment(Date.now()).add(items[0],items[1]).format('YYYY-MM-DD HH:mm:ss');\n }\n this.log(1,'getExpirationTime: period=' + period + ' expiration=' + exp);\n return exp;\n }\n\n // convert given string in datetime object. By default 'YYYY-MM-DD HH:mm' format is expected\n getDateTime(dateTimeString: string, dateTimeFomat?: string) {\n if (!dateTimeFomat) {\n dateTimeFomat = 'YYYY-MM-DD HH:mm';\n }\n return moment(dateTimeString,dateTimeFomat).toDate(); \n }\n\n // pass page data to setup user Navigation List\n setUserNavigationLists(navList,reset = true) {\n if (reset) this.resetUserNavigationLists();\n if (!this.userNavigationLists['qrqs']) {\n this.userNavigationLists['qrqs'] = [];\n }\n for (let type in navList) {\n let ltype = type.toLocaleLowerCase();\n if (ltype == 'communication') {\n ltype = 'informationrequests';\n }\n if ('quoterequests,quotes,orders,informationrequests'.indexOf(ltype) > -1) {\n for (let i=0; i 0 && index < len) {\n prevId = list[index-1];\n }\n }\n }\n this.log(0,'getPrevPageId: type=' + type.toLowerCase() + ' id=' + id + ' index=' + index + ' prevId=' + prevId + ' userNavigationLists=' + JSON.stringify(this.userNavigationLists));\n return prevId;\n }\n\n getNextPageId(type, id) {\n let nextId = '';\n let list: any = [];\n let index = -1;\n if (type && id) {\n if (!type.endsWith('s')) {\n type += 's';\n }\n let list = this.userNavigationLists[type.toLowerCase()];\n if (list) {\n let len = list.length;\n index = list.indexOf(id);\n if (index > -1 && index < len - 1) {\n nextId = list[index+1];\n }\n }\n }\n return nextId;\n }\n\n getNumber(val) {\n let num: number = 0;\n if (!isNaN(val)) {\n num = Number(val);\n }\n return num;\n }\n\n // it expects an argument of array with single entry having summary details about communication\n getQuestionsIcon(communication) {\n let path = '';\n if (communication && communication[0]) {\n let questions: number = Number(communication[0].Questions);\n let questionsViewed: number = Number(communication[0].QuestionsViewed);\n let answers: number = Number(communication[0].Answers);\n let answersViewed: number = Number(communication[0].AnswersViewed);\n // do we want to show when answers were viewed in some cases?\n this.log(0,'getQuestionsIcon: questions=' + questions + ' questionsViewed=' + questionsViewed + \n ' answers=' + answers + ' answersViewed=' + answersViewed);\n if (answers > 0) {\n path = './assets/imgs/question_answered.png';\n } else if (questionsViewed > 0) {\n path = './assets/imgs/question_read.png';\n } else if (questions > 0) {\n path = './assets/imgs/question_unread.png';\n } else if (questions <= 0) {\n path = './assets/imgs/question_empty.png';\n }\n this.log(0,'getQuestionsIcon: questions=' + questions + ' questionsViewed=' + questionsViewed + \n ' answers=' + answers + ' answersViewed=' + answersViewed + ' path=' + path);\n }\n return path; \n }\n\n // unlike getQuestionsIcon this function has argument with details about single communication\n getSingleQuestionsIcon(singlecom) {\n let path = '';\n if (singlecom) {\n\n if (singlecom.Status) {\n if (singlecom.Status == '* Asked Question' || singlecom.Status == 'Answered Question') {\n path = './assets/imgs/question_answered.png'; //green\n } else if (singlecom.Status == '* Viewed Answer' || singlecom.Status == 'Viewed Question') {\n path = './assets/imgs/question_read.png'; //yellow\n } else if (singlecom.Status.indexOf('New') > -1) {\n path = './assets/imgs/question_unread.png'; //red\n }\n } else { \n if (singlecom.AnsweredByCompanyID) {\n path = './assets/imgs/question_answered.png';\n } else if (singlecom.QuestionRead) {\n path = './assets/imgs/question_read.png';\n } else {\n path = './assets/imgs/question_unread.png';\n }\n }\n }\n return path; \n }\n\n // filter array of items (orders,quotes,quoterequests) by matching provided value with\n // values in comma separated list of properties. Note that property names are case sensitive!\n filterItems(existingItems, properties, value) {\n this.log(0,'filterItems: properties=' + properties + ' value=' + value);\n let newItems: any = [];\n if (value) {\n value = value.toLowerCase();\n }\n if (properties) {\n let arrProperties = properties.split(/,\\s*/g);\n for (let i=0; i -1) {\n matched = true;\n }\n //this.settings.log(1,'filterItems: j=' + j + ' p=' + item[arrProperties[j]] + ' matched=' + matched);\n }\n } else {\n matched = true;\n }\n //this.settings.log(1,'filterItems: i=' + i + ' matched=' + matched);\n if (matched) {\n newItems.push(item);\n }\n }\n } else {\n for (let i=0; i (a[sortProperty] > b[sortProperty]) ? 1 : -1);\n } else {\n items.sort((a, b) => (a[sortProperty] < b[sortProperty]) ? 1 : -1);\n }\n } else {\n this.log(1,'sortItems: sortProperty=' + sortProperty + ' does not exist!'); \n }\n }\n }\n\n openInformationRequestLink(ir) {\n let link = '';\n if (ir.QuoteRequestID) {\n if (this.currentUserRole == 'buyer') {\n link = '/quote-request/' + ir.QuoteRequestID + ';a=qa';\n } else {\n link = '/quote-add/' + ir.QuoteRequestID + ';a=qa';\n }\n } else if (ir.QuoteID) {\n link = '/quote/' + ir.QuoteID + ';a=qa';\n } else if (ir.OrderID) {\n link = '/order/' + ir.OrderID + ';a=qa';\n }\n this.openPage(link);\n }\n\n // returns formatted \"time before expiration\"\n getTimeBeforeExpiration(expirationDateTime, expiredMessage='Closed', numbers=3, label='short') {\n let timeDiff = '';\n if (expirationDateTime) {\n timeDiff = this.getTimeDifference(expirationDateTime, this.formatDateTime('YYYY-MM-DD HH:mm:ss'), numbers, label);\n if (!timeDiff || timeDiff.indexOf('-') == 0) {\n timeDiff = expiredMessage;\n }\n }\n return timeDiff;\n }\n\n // returns formatted \"time difference between start and end time\n // when numbers=3 (d 'd' hh:mm), 2 (d 'd' h 'h') or 1 (d 'd') format\n getTimeDifference(endDateTime, startDateTime, numbers=3, label='short') {\n let d = 'd';\n let h = 'h';\n let m = 'm'\n let s = 's';\n let d1 = 'd';\n let h1 = 'h';\n let m1 = 'm'\n let s1 = 's';\n if (label == 'long') {\n d = ' days';\n h = ' hours';\n m = ' min';\n s = ' sec';\n d1 = ' day';\n h1 = ' hour';\n m1 = ' min';\n s1 = ' sec';\n }\n let timeDiff = '';\n let sign = '';\n let timeBefore: any = '';\n this.log(0,'getTimeDifference: endDateTime=' + endDateTime + ' startDateTime=' + startDateTime + ' numbers=' + numbers);\n if (endDateTime && startDateTime) {\n let start = moment(startDateTime);\n var end = moment(endDateTime);\n if (end < start) {\n sign = '-';\n let t = startDateTime;\n startDateTime = endDateTime;\n endDateTime = t;\n } \n timeBefore = moment.duration(end.diff(start)); \n let timeD = this.getTimeBit(timeBefore.days(), d1, d);\n let timeH = this.getTimeBit(timeBefore.hours(), h1, h);\n let timeM = this.getTimeBit(timeBefore.minutes(), m1, m);\n let timeS = this.getTimeBit(timeBefore.seconds(), s1, s); \n if (numbers == 1) {\n if (timeBefore.hours() > 0) {\n timeDiff = timeH;\n } else if (timeBefore.minutes() > 0) {\n timeDiff = timeM;\n } else {\n timeDiff = timeS;\n }\n } else if (numbers == 2) {\n if (timeBefore.hours() > 0) {\n timeDiff = timeH + ' ' + timeM;\n } else if (timeBefore.minutes() > 0) {\n timeDiff = timeM + ' ' + timeS;\n } else {\n timeDiff = timeS;\n }\n } else {\n timeDiff = (100 + timeBefore.hours() + '').slice(-2) + ':' + (100 + timeBefore.minutes() + '').slice(-2);\n }\n if (timeBefore.days() > 0) {\n if (numbers == 1) {\n timeDiff = timeD;\n } else if (numbers == 2) {\n timeDiff = timeD + ' ' + timeH;\n } else {\n timeDiff = timeD + ' ' + timeDiff;\n }\n } \n }\n this.log(0,'getTimeDifference: timeDiff=' + timeDiff + ' days=' + timeBefore.days());\n return timeDiff; \n }\n\n getTimeBit(timeVal,singleLabel,multiLabel) {\n let bit = '';\n if (timeVal == 1) {\n bit = timeVal + singleLabel;\n } else if (timeVal > 1) {\n bit = timeVal + multiLabel;\n }\n return bit;\n }\n\n // create JSON string with app & user & device information to provide e.g. for error reports\n getUserAndDeviceInfoJson() {\n let udInfo = [];\n udInfo.push({\"name\":\"Username\",\"value\":this.currentUserData.Username});\n udInfo.push({\"name\":\"User ID\",\"value\":this.currentUserData.Userid});\n udInfo.push({\"name\":\"User Full Name\",\"value\":this.currentUserData.Firstname + \" \" + this.currentUserData.Lastname});\n udInfo.push({\"name\":\"User Email\",\"value\":this.currentUserData.Email});\n udInfo.push({\"name\":\"App Name\",\"value\":this.appsettings.appName});\n udInfo.push({\"name\":\"Active App Version\",\"value\":this.currentUserData.ActiveAppVersion});\n udInfo.push({\"name\":\"Touch Id Enabled\",\"value\":this.currentUserData.TouchIdEnabled});\n udInfo.push({\"name\":\"Calendar Integration Enabled\",\"value\":this.currentUserData.RosterSettings.CalendarIntegrationEnabled});\n udInfo.push({\"name\":\"Device Manufacturer\",\"value\":this.currentUserData.DeviceManufacturer});\n udInfo.push({\"name\":\"Device Platform\",\"value\":this.currentUserData.DevicePlatform});\n udInfo.push({\"name\":\"Device Version\",\"value\":this.currentUserData.DeviceVersion});\n udInfo.push({\"name\":\"Device Model\",\"value\":this.currentUserData.DeviceModel});\n udInfo.push({\"name\":\"Device Token\",\"value\":this.deviceToken});\n udInfo.push({\"name\":\"Device Id\",\"value\":this.deviceId});\n udInfo.push({\"name\":\"Web Site\",\"value\":this.sourceHost});\n udInfo.push({\"name\":\"App TextId\",\"value\":this.appTextId});\n udInfo.push({\"name\":\"Matomo Url\",\"value\":this.matomoUrl}); \n udInfo.push({\"name\":\"Track Matomo Analytics\",\"value\":this.trackMatomoAnalytics}); \n udInfo.push({\"name\":\"Matomo Site Id\",\"value\":this.matomoSiteId}); \n udInfo.push({\"name\":\"Update Interval in minutes\",\"value\":this.checkForUpdatesTimeInMinutes}); \n let info = {};\n info[\"data\"] = udInfo;\n return JSON.stringify(info);\n } \n}\n\n// Class to get data for auto updated count down clock. \n// One can either display clock.formattedCountDown or use other properties like clock.hours, clock.minutes ...\n// if more control is required. Simplest usage looks like that:\n// clock = countdownClock(endTime);\n// clock.start();\n// clock.stop(); \n// Note that clock will stop updating when time reaches endTime (and display special expiredText in that case)\n// Clock also has 2 modes: \"normal\" when clock is updated every minute and clock.formattedCountDown is not showing seconds \n// and \"verbose\" (last 30 minutes by default) when clock updates every second.\n// One can also pass functions which will be run on start on verbose period (onVerbosePeriodStart) and on expiry (onExpiry)\nexport class CountdownClock {\n\tpublic expiredText: string = 'Closed'; // text which formattedCountDown will have after expiration\n\tpublic verbosePeriodInMinutes: number = 30; // period when clock will be updated each second instead of each minute\n\tpublic dayLabel = 'd';\n\tpublic verbosePeriod: boolean = false;\n\tpublic total: number = 0;\n\tpublic days: number = 0;\n\tpublic hours: number = 0;\n\tpublic minutes: number = 0;\n\tpublic seconds: number = 0;\n\tpublic formattedCountDown: string = '';\n\t\n\tprivate clockIsStopped: boolean = true;\n\tprivate firstRun: boolean = true;\n\n // endTime is a datetime string (in yyyy-mm-dd HH:MM:SS format)\n constructor(private endTime) {\n\t\tconsole.log('countdownClock: endTime=' + endTime);\n\t}\n\t\n \tstart() {\n\t\tthis.clockIsStopped = false;\n\t\tthis.updateClock(this);\n\t}\n\t\n\tstop() {\n\t\tthis.clockIsStopped = true;\n\t}\n\t\n\t// on can pass a function which will run when countdown gets to 0\n\tpublic onExpiry: any = null;\n\n\t// on can pass a function which will run when verbose period starts\n\tpublic onVerbosePeriodStart: any = null;\n\n\tprivate pad0(num, len) {\n\t\treturn(1e15 + num + '').slice(-len);\n\t}\n\t\n\tprivate updateClock(t) {\n\t\t//console.log('updateClock: t.endTime=' + t.endTime + ' t.clockIsStopped=' + t.clockIsStopped + ' t.firstRun=' + t.firstRun);\n\t\tif (t.endTime) {\n\t\t t.total = Date.parse(t.endTime) - Date.now();\n\t\t t.seconds = Math.floor((t.total / 1000) % 60);\n\t\t t.minutes = Math.floor((t.total / 1000 / 60) % 60);\n\t\t t.hours = Math.floor((t.total / (1000 * 60 * 60)) % 24);\n\t\t t.days = Math.floor(t.total / (1000 * 60 * 60 * 24));\n\t\t if (t.total <= 0) {\n // to stop rising event when clock was already started after expiration time\n if (t.onExpiry && typeof t.onExpiry == 'function' && !t.firstRun) {\n console.log('CountdownClock: before onExpiry');\n t.onExpiry();\n }\n t.formattedCountDown = t.expiredText;\n t.clockIsStopped = true;\n\t\t }\n\t\t if (!t.clockIsStopped) {\n if ( (t.total /1000) < t.verbosePeriodInMinutes*60 ) {\n if (t.onVerbosePeriodStart && typeof t.onVerbosePeriodStart == 'function' && !t.firstRun && !t.verbosePeriod) {\n console.log('CountdownClock: before onVerbosePeriodStart');\n t.onVerbosePeriodStart();\n }\n t.verbosePeriod = true;\n } else {\n t.verbosePeriod = false;\n }\n let interval = 60*1000; // \"default\" update interval is one minute\n t.formattedCountDown = ''; \n let dayLabel = t.dayLabel; \n if (t.days == 1) {\n if (dayLabel.length > 1 && dayLabel.endsWith('s')) {\n dayLabel = dayLabel.slice(0, -1);\n }\n t.formattedCountDown += t.days + dayLabel;\n } else if (t.days > 0) {\n if (dayLabel.length > 1 && !dayLabel.endsWith('s')) {\n dayLabel = dayLabel + 's';\n }\n t.formattedCountDown += t.days + dayLabel;\n }\n t.formattedCountDown += ' ' + t.pad0(t.hours,2) + ':' + t.pad0(t.minutes,2);\n\n if (t.verbosePeriod) {\n interval = 1000;\n t.formattedCountDown += ':' + t.pad0(t.seconds,2);\n }\n t.firstRun = false;\n //console.log('updateClock: t.endTime=' + t.endTime + ' interval=' + interval + ' t.formattedCountDown=' + t.formattedCountDown);\n setTimeout(() => {t.updateClock(t)}, interval);\n\t\t }\n\t\t}\n\t}\n}\n\n// **** Class used to fire events when value was set or changed somewhere else\n// **** Example of usage is below. Functionally similar to ExternalProcess but\n// **** syntax is different and multiple onChange/onSet \"events\"\n// **** can be added and removed\n// *********************************************************************************\n// var m = new moitoredValue(55);\n// var key = m.onChange(v=>{\n//\t console.log(\"monitored value changed to \" + v);\n// });\n// m.onSet(v=>{\n//\t console.log(\"monitored value set to \" + v);\n// m.stopFurtherOnSet(); // Further onSet (if they exist) will not run\n// });\n// m.value = 55; // fires onSet but not onChange\n// m.value = 15; // fires onSet and onChange. \n// m.dropOnChange(key); // removed above onChange event. It will not be called on further changes\nexport class monitoredValue {\n private _value = null;\n private _onSets: any = {};\n private _onChanges: any = {};\n private _onChangeStopped: boolean = false;\n private _onSetStopped: boolean = false;\n \n constructor(val) {\n this._value = val;\n }\n\n // get value\n get value() {\n return this._value; \n }\n \n // set value and execute corresponding events\n set value(val) {\n var prevValue = this._value;\n this._value = val;\n for(var key in this._onSets) {\n if (!this._onSetStopped) {\n var onSet: any = this._onSets[key];\n if (typeof onSet == 'function') {\n onSet(val);\n }\n }\n }\n this._onSetStopped = false;\n for(var key in this._onChanges) {\n if (!this._onChangeStopped) {\n var onChange: any = this._onChanges[key];\n if (prevValue != val && typeof onChange == 'function') {\n onChange(val);\n }\n }\n }\n this._onChangeStopped = false;\n }\n\n // remove all events\n clearEvents() {\n this._onChanges = {};\n this._onChangeStopped = false;\n this._onSets = {};\n this._onSetStopped = false;\n }\n\n // to drop given onChange function so that it will not be called for any future events\n dropOnChange(key) {\n delete this._onChanges[key];\n }\n \n // to drop given onSet function so that it will not be called for any future events\n dropOnSet(key) {\n delete this._onSets[key];\n }\n\n // to stop executing later onChange functions for one particular value change\n stopFurtherOnChange() {\n this._onChangeStopped = true;\n }\n \n // to stop executing later onSet functions for one particular value set\n stopFurtherOnSet() {\n this._onSetStopped = true;\n }\n \n // execute provided function when value changes. It returns a key which can be used to drop onChange event later\n onChange(func: any) {\n let key = this.generateUUID();\n this._onChanges[key] = func;\n return key;\n } \n \n // execute provided function when new value is set doesn't matter if it changed or not\n onSet(func: any) {\n let key = this.generateUUID();\n this._onSets[key] = func;\n return key;\n } \n\n // generate UUID formatted random string taken from https://stackoverflow.com/questions/105034/create-guid-uuid-in-javascript\n private generateUUID() { // Public Domain/MIT\n var d = new Date().getTime();\n if (typeof performance !== 'undefined' && typeof performance.now === 'function'){\n d += performance.now(); //use high-precision timer if available\n }\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\n var r = (d + Math.random() * 16) % 16 | 0;\n d = Math.floor(d / 16);\n return (c === 'x' ? r : (r & 0x3 | 0x8)).toString(16);\n });\n }\n\n}\n\nexport class ExternalProcess {\n private _isRunning: boolean = false;\n private _listener(value: boolean) {\n //console.log(\"ExternalProcess _listener value=\" + value);\n }\n get isRunning() {\n return this._isRunning; \n };\n set isRunning(value: boolean) {\n this._isRunning = value;\n //console.log(\"ExternalProcess: set isRunning to \" + value);\n this._listener(value);\n };\n registerListener(listener: any) {\n //console.log(\"ExternalProcess: registerListener listener\" + listener);\n this._listener = listener;\n } \n}\n\nexport class Result {\n public \"Success\": boolean = false; \n public \"Message\": string = \"\"; \n public \"Data\": any = {};\n};\n\nexport class UserData {\n public Firstname: string = \"\";\n public Lastname: string = \"\";\n public Username: string = \"\";\n public Userid: string = \"\";\n public Email: string = \"\";\n\n public SessionId: string = \"\";\n public CompanyId: string = \"\";\n public CompanyName: string = \"\";\n public ABN: string = \"\";\n public CompanyLogo: string = \"\";\n public CompanyAddress: string = \"\";\n public CompanyCity: string = \"\";\n public CompanyPostcode: string = \"\";\n public CompanyState: string = \"\";\n public CompanyCountry: string = \"\";\n public CompanyPhone: string = \"\";\n public CompanyEmail: string = \"\";\n public capRole: string = \"\";\n //public capExtras: string = \"\";\n public capPromoted: boolean = false;\n public capPublicUser: boolean = false;\n public capDatalookup: boolean = false;\n public capConditions: string = \"\";\n public capMakes: string = \"\";\n public capContactAfterAuction: string = \"\";\n public capCompanyRating: string = \"\";\n public capCompanyDisplayName: string = \"\";\n public capCompanyInfo: string = \"\";\n public capFeatureImage: string = \"\";\n public capImages: string = \"\";\n public capMemberSince: string = \"\";\n public capPurchases: string = \"\";\n public capSales: string = \"\";\n public capCancellations: string = \"\";\n public capAverageReplyTime: string = \"\";\n\n public UserDataLastUpdated: Date;\n\n public ActiveAppVersion: string = \"0.0.0\";\n public appVersionChanged: boolean = false;\n public TouchIdEnabled: boolean = false;\n public RosterSettings: RosterSettings = new RosterSettings();\n public SubsribedToFirebaseTopics: string[] = [];\n public DeviceManufacturer: string = \"\";\n public DevicePlatform: string = \"\";\n public DeviceVersion: string = \"\";\n public DeviceModel: string = \"\";\n}\n\nexport class RosterSettings {\n public CalendarIntegrationEnabled = false;\n public FirstReminderHoursBeforeStart = 24; \n public SecondReminderHoursBeforeStart = 2;\n public ShiftStartEndTimes: Array = []; \n}\n\nexport class RosterTimes {\n public startTime: string = \"00:00\";\n public endTime: string = \"00:00\";\n}","import { Injectable } from '@angular/core';\nimport { SettingsService } from './settings.service';\n\nclass UrlMap {\n public old: string = '';\n public new: string = '';\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class UpdateService {\n public updateMessage: string = '';\n private allUrls: any = [];\n\n constructor(private settings: SettingsService) { \n this.settings.log(0,'UpdateService constructor');\n }\n pageIsReady(staticPageUrl, pageId='', timing='current', extraid='') {\n let t = this;\n let s = t.settings;\n s.log(1,'pageIsReady staticPageUrl=' + staticPageUrl);\n // GR 20210504 function updated to return page data for authenticated user of private app or empty object otherwise\n return new Promise((resolve, reject) => { \t\n let empty = {\"numbers\":{},\"quoteRequests\":[],\"quotes\":[],\"orders\":[]};\n s.platform.ready().then(() => {\n s.log(1,'pageIsReady platform.ready staticPageUrl=' + staticPageUrl);\n s.getCoreModulesData().then(() => {\n s.log(1,'pageIsReady s.appType=' + s.appType + ' staticPageUrl=' + staticPageUrl + ' s.passwordAuthenticationInBrowserEnabled=' + s.passwordAuthenticationInBrowserEnabled + ' s.passwordAuthentication=' + s.passwordAuthentication);\n if (staticPageUrl != 'appcomponent' && staticPageUrl != 'SplashPage') {\n s.configureMatomoAndFirebase();\n }\n // Private - deviceid is coming from the server when authorised and stored in secure storage getSecureKey('appkeys')\n // Public - deviceid is generated on device and stored in storage getKey('deviceid')\n if (s.appType == 'public') {\n s.readCurrentAppJson().then((currentData: any)=>{\n s.getDeviceId().then((deviceid: any)=>{\n s.getNotifications().then(()=>{\n t.checkAppUpdatesInBackground();\t\n s.log(1,'pageIsReady true public');\n if (staticPageUrl == 'LoginPage') s.openPage('HomePage'); \n resolve(empty);\n }).catch((error)=>{\n s.log(1,'pageIsReady 1 can not read notifications: ' + error.message);\n resolve(empty);\n });\n });\n }).catch((error)=>{\n s.currentAppData = {};\n s.log(1,'pageIsReady 1 error getting readCurrentAppJson: ' + error.message);\n reject(error);\n });\t\t\t\n } else {\n s.userAuthorised().then((authorised:boolean)=>{\n s.log(1,'pageIsReady authorised=' + authorised + ' userAuthenticated=' + s.userAuthenticated);\n if (authorised) {\n if (s.userAuthenticated) {\n if (s.isConnected() && s.trackMatomoAnalytics && staticPageUrl != 'appcomponent' && staticPageUrl != 'SplashPage') { \n s.matomoTracker.setCustomVariable(5,\"role\",s.currentUserRole,\"page\"); \n s.matomoTracker.setUserId(s.currentUserData.Username + '_' + s.currentUserData.Userid); \n } \n s.readCurrentAppJson().then((currentData: any)=>{\n s.getNotifications().then(()=>{\n t.checkAppUpdatesInBackground();\n let pageName = staticPageUrl;\n if (pageName && pageName.endsWith('Page')) { \n pageName = pageName.substring(0,pageName.length-4).replace('/','').replace(/\\-/g,'');\n } \n if (!extraid || extraid == 'null') {\n extraid = '';\n } \n s.log(1,'pageIsReady true private extraid=' + extraid);\n //if (!extraid) {\n // extraid = s.currentUserData.Userid;\n //}\n //GetPageData\t\t\t\t (page, utype, cid, capmakes)\n //GetPageDataFromServer\t(page, utype, cid, id, 'current', capmakes) \n this.settings.executeCustomCommand('GetPageDataFromServer','page=' + pageName + \n '&utype=' + s.currentUserRole + '&id=' + pageId + '&timing=' + timing + \n '&capMakes=' + encodeURIComponent(s.currentUserData.capMakes) + \n '&capconditions=' + encodeURIComponent(s.currentUserData.capConditions) + \n '&extraid=' + extraid ).then((result)=>{\n this.settings.log(1,'*** \"GetPageDataFromServer\" returns: ' + JSON.stringify(result));\n resolve(result);\n }).catch(error=>{\n reject(error);\n this.settings.log(2,'*** error returned from GetPageDataFromServer\" call error: ' + JSON.stringify(error));\n }); \n }).catch((error)=>{\n s.log(1,'pageIsReady 2 can not read notifications: ' + error.message);\n resolve(empty);\n });\n }).catch((error)=>{\n s.currentAppData = {};\n s.log(1,'pageIsReady 2 error getting readCurrentAppJson: ' + error.message);\n reject(error);\n });\t\t\n } else {\n // extra check here for the case when browser is refreshed\n this.settings.checkBrowserAuthentication(this).then((result)=>{\n if (!result && staticPageUrl != 'TermsAndConditionsPage') {\n if (staticPageUrl != 'LoginPage') s.openPage('LoginPage');\n }\n resolve(empty);\n });\n }\n } else {\n if (staticPageUrl != 'TermsAndConditionsPage' && staticPageUrl != 'SplashPage') {\n let page = 'LoginPage';\n if (s.lastActivationKeyReceivedDate && s.timeDiffInMinutes(Date.now(),s.lastActivationKeyReceivedDate) < 61) {\n if (staticPageUrl != 'AuthoriseKeyPage') page = 'AuthoriseKeyPage';\n } else {\n if (staticPageUrl != 'AuthoriseEmailPage') page = 'AuthoriseEmailPage';\n }\t\n s.log(1,'pageIsReady: not authorised staticPageUrl=' + staticPageUrl + ' about to open page: ' + page);\n s.openPage(page);\n }\t\t\t\t\t\t\n resolve(empty);\n }\n });\n }\n }).catch((error) => {\n s.log(1,\"Error catched in getCoreModulesData: \" + error.message);\n reject(error);\n });\n }).catch((error) => {\n reject(error);\n })\n })\n }\n \n checkAppUpdatesInBackground() {\n let timeDiff = null;\n let currentTime = new Date(); \n if (this.settings.lastUpdateChecked != null) {\n timeDiff = this.settings.timeDiffInMinutes(currentTime, this.settings.lastUpdateChecked);\n this.settings.log(0,'checkAppUpdatesInBackground: timeDiff=' + timeDiff + ' checkForUpdatesTimeInMinutes=' + this.settings.checkForUpdatesTimeInMinutes);\n }\n let wifiConnected = this.settings.isWifiConnected();\n let isConnected = this.settings.isConnected();\n this.settings.log(1,'checkAppUpdatesInBackground: isWifiConnected=' + wifiConnected + ' isConnected=' + isConnected + ' timeDiff=' + timeDiff + ' checkForUpdatesTimeInMinutes=' + this.settings.checkForUpdatesTimeInMinutes + ' updateIsRunning=' + this.settings.updateIsRunning);\n // run auto updates only on WiFi ! - nop change to general connected check after talk to Rob\n if (isConnected && (timeDiff == null || timeDiff > this.settings.checkForUpdatesTimeInMinutes) && !this.settings.updateIsRunning) {\n // get app notifications - time check is to avoid running check twice when push link is clicked\n this.settings.log(1,'checkAppUpdatesInBackground: lastNotificationChecked=' + this.settings.lastNotificationChecked);\n if (this.settings.lastNotificationChecked == null || this.settings.timeDiffInMinutes(currentTime,this.settings.lastNotificationChecked) > 10) {\n this.settings.checkServerForNotifications();\n }\n // start background update process\n this.appUpdate(this.settings.sourceHost).then((result)=>{\n this.settings.log(1,'checkAppUpdatesInBackground: result: App updates successfully finished!');\n this.updateMessage = 'App updates successfully finished!';\n this.settings.trackMatomoEvent(\"Management\", \"Update\", \"App Update Content (Automatic)\", 1);\n this.settings.lastUpdateChecked = new Date();\n }).catch((error)=>{\n this.settings.trackMatomoEvent(\"Management\", \"Update\", \"App Update Content (Automatic)\", 0);\n this.settings.log(2,'checkAppUpdatesInBackground: result: Error ' + error);\n this.updateMessage = error;\n // should we update lastUpdateChecked after errors too? May be do it for now.\n this.settings.lastUpdateChecked = new Date();\n })\n } \n }\n \n appUpdate(sourceHost, getAllContent = false) {\n var t = this;\n t.settings.updateIsRunning = true; \n t.allUrls = [];\n //this.settings.logDisplayLevel = 0;\n var currentJsonData = null;\n return new Promise((resolve, reject) => {\n // GR. We temporary use startappupdate below to allow access old style function\n let params = 'nt=' + t.settings.currentUserData.SubsribedToFirebaseTopics.join() + \n '&dp=' + this.settings.platform.platforms() + '&dt=' + this.settings.deviceToken + \n '&appv=' + t.settings.currentUserData.ActiveAppVersion;\n if (getAllContent || t.settings.currentUserData.appVersionChanged) {\n params += '&ac=1'; \n }\n t.settings.executeCommand('startappupdate', params).subscribe((result: any)=>{\n if (!result) {\n // it seems that we ocassionally getting empty result from the server. Is it timeout?\n result.Success = false;\n result.Message = \"Empty resposnse from the server\";\n }\n t.settings.log(1,\"appUpdate startappupdate appVersionChanged=\" + t.settings.currentUserData.appVersionChanged + \" result.Success=\" + result.Success);\n if (result.Success) {\n //let patch = result.Data[\"patch\"];\n let patch = result.patch;\n if (patch) {\n t.settings.log(1,\"appUpdate patch.length=\" + patch.length); \n }\n let moduleslastmodified = {};\n let updateSuccess = true;\n let updateMessage = \"error during update\";\n let blnNameChanged = false;\n if (patch && patch.length > 0) {\n // get current JSON from the file. Do we want to store whole thing in one file?\n t.settings.readCurrentAppJson().then((currentData)=>{\n currentJsonData = currentData;\n t.settings.log(1,\"after readCurrentAppJson: getAllContent=\" + getAllContent);\n if (getAllContent) {\n // we want to remove all pages and reset them\n currentJsonData.pages = {};\n } \n \n let updatePromises = [];\n for (let i=0; i{\n t.settings.log(0,\"processUpdateFields \" + patch[i].op + \" path=\" + patch[i].path + \" newvalue=\" + t.settings.abbreviate(JSON.stringify(newvalue),50));\n let pp = t.splitPath(patch[i].path);\n // set data to the current JSON\n let currentParent = t.settings.getJsonPropertyByPath(currentJsonData, pp.pathParent); \n if (typeof currentParent == 'undefined' || currentParent == null) {\n currentParent = {};\n }\n t.settings.log(0,\"processUpdateFields after splitPath pp.pathParent=\" + pp.pathParent + \" pp.pathLeaf=\" + pp.pathLeaf + ' currentParent=' + currentParent);\n \n if ((pp.pathParent == '' && pp.pathLeaf == 'userfirstname') || \n (pp.pathParent == 'userfirstname' && pp.pathLeaf == '')) {\n t.settings.log(0,\"=== appUpdate CURRENT userfirstname=\" + t.settings.currentUserData.Firstname + \" newvalue=\" + newvalue);\n if (t.settings.currentUserData.Firstname != newvalue) {\n t.settings.log(1,\"*** appUpdate userfirstname updated to \" + newvalue);\n t.settings.currentUserData.Firstname = newvalue;\n blnNameChanged = true;\n }\n } \n if ((pp.pathParent == '' && pp.pathLeaf == 'userlastname') || \n (pp.pathParent == 'userlastname' && pp.pathLeaf == '')) {\n t.settings.log(0,\"=== appUpdate CURRENT userlastname=\" + t.settings.currentUserData.Lastname + \" newvalue=\" + newvalue);\n if (t.settings.currentUserData.Lastname != newvalue) {\n t.settings.log(0,\"*** appUpdate userlastname updated to \" + newvalue);\n t.settings.currentUserData.Lastname = newvalue;\n blnNameChanged = true;\n }\n }\n // GR added 2018-06-20\n if ((pp.pathParent == '' && pp.pathLeaf == 'username') || \n (pp.pathParent == 'username' && pp.pathLeaf == '')) {\n t.settings.log(0,\"=== appUpdate CURRENT username=\" + t.settings.currentUserData.Username + \" newvalue=\" + newvalue);\n if (t.settings.currentUserData.Username != newvalue) {\n t.settings.log(0,\"*** appUpdate username updated to \" + newvalue);\n t.settings.currentUserData.Username = newvalue;\n blnNameChanged = true;\n }\n }\n if ((pp.pathParent == '' && pp.pathLeaf == 'userid') || \n (pp.pathParent == 'userid' && pp.pathLeaf == '')) {\n t.settings.log(0,\"=== appUpdate CURRENT userid=\" + t.settings.currentUserData.Userid + \" newvalue=\" + newvalue);\n if (t.settings.currentUserData.Userid != newvalue) {\n t.settings.log(0,\"*** appUpdate userid updated to \" + newvalue);\n t.settings.currentUserData.Userid = newvalue;\n blnNameChanged = true;\n }\n } \n if (pp.pathParent.indexOf('moduleslastmodified') == 0) {\n t.settings.log(0,\"*** appUpdate moduleslastmodified pathLeaf=\" + pp.pathLeaf + \" newvalue=\" + newvalue);\n if (pp.pathLeaf) {\n moduleslastmodified[pp.pathLeaf] = newvalue;\n } else {\n moduleslastmodified = newvalue;\n }\n } \n if (pp.pathLeaf) {\n if (pp.pathParent.indexOf('moduleslastmodified') != 0) { \n t.settings.log(0,\"processUpdateFields currentParent=\" + currentParent); \n t.settings.log(1,\"processUpdateFields moduleslastmodified currentParent[pp.pathLeaf]=\" + currentParent['' + pp.pathLeaf]); \n currentParent['' + pp.pathLeaf] = newvalue;\n }\n } else {\n t.settings.log(0,\"processUpdateFields pathParent=\" + pp.pathParent);\n currentJsonData[pp.pathParent] = newvalue;\n //t.settings.log(0,\"processUpdateFields 2 SET currentJsonData for \" + pp.pathParent + \" to: \" + t.settings.abbreviate(JSON.stringify(newvalue),50));\n }\n t.settings.log(0,\"processUpdateFields \" + patch[i].op + \" i=\" + i + \" FINISH APPLYING\");\n }).catch((error)=>{\n updateSuccess = false;\n t.settings.log(2,\"error in updates for patch i=\" + i + \" \" + JSON.stringify(error, Object.getOwnPropertyNames(error)));\n updateMessage = \"error in updates for patch i=\" + i + \" \" + error.message;\n }));\t\t\t\t\t\t\t\t\t\n } else if(patch[i].op == \"remove\") {\n // delete existing item: path\n t.settings.log(1,\"processUpdateFields \" + patch[i].op + \" path=\" + patch[i].path);\n let pp = t.splitPath(patch[i].path);\n // delete data from the current JSON\n let currentParent = t.settings.getJsonPropertyByPath(currentJsonData, pp.pathParent); \n if (currentParent && pp.pathLeaf) {\n t.deleteDataItem(currentParent, pp.pathLeaf);\t\t\t\n }\t\t\t\t\n } else if(patch[i].op == \"move\") {\n // move existing item: path, from. Can we have that at all?\n } else if(patch[i].op == \"copy\") {\n // copy existing item: path, from. We shouldn't have that\n }\n }\n }\n t.settings.log(1,\"---appUpdate updatePromises.length=\" + updatePromises.length + \" updateSuccess=\" + updateSuccess);\n if (updatePromises.length == 0) {\n // success\n //let ppath = \"/pages/app_news\";\n //t.settings.log(1 ,\"*** appUpdate updates success 1 app_news=\" + t.settings.abbreviate(t.settings.getJsonPropertyByPath(currentJsonData, ppath),50));\n t.settings.writeCurrentAppJson(currentJsonData);\n t.settings.executeCommand('finishappupdate','status=success').subscribe((result: any)=>{\n // ***** That's a success *****\n t.settings.log(1,'finishappupdate done 1');\n t.settings.updateIsRunning = false; \n //t.settings.events.publishData({updatefinished: true});\n // check and possibly update modules\n t.settings.updateModulesFromServer(moduleslastmodified);\n resolve('success'); \n },function(error) {\n t.settings.log(2,\"Error running finishappupdate 1 \" + JSON.stringify(error));\n t.settings.updateIsRunning = false; \n //t.settings.events.publishData({updatefinished: false});\n reject('Error running finishappupdate ' + JSON.stringify(error)); \n }) \n } else {\n Promise.all(updatePromises).then(() => {\n t.settings.log(0,\"*** updateSuccess=\" + updateSuccess + \" updateMessage=\" + updateMessage);\n if (updateSuccess) {\n //success\n t.settings.writeCurrentAppJson(currentJsonData);\n // GR - do version related things later\n let oldversion = t.settings.currentUserData.ActiveAppVersion;\n t.settings.getAppVersion().then((version:string)=>{\n t.settings.log(1,\"appUpdate blnNameChanged=\" + blnNameChanged + \" AppVersion=\" + version + \" old ActiveAppVersion=\" + t.settings.currentUserData.ActiveAppVersion);\n if (blnNameChanged || t.settings.currentUserDataChanged || version != oldversion || t.settings.currentUserData.appVersionChanged != (version != oldversion)) {\n t.settings.currentUserData.appVersionChanged = (version != oldversion);\n t.settings.log(1,\"appUpdate saving currentUserData appVersionChanged=\" + t.settings.currentUserData.appVersionChanged); \n t.settings.setSecureKey('userdata', JSON.stringify(t.settings.currentUserData));\n t.settings.currentUserDataChanged = false;\n }\n }).catch((e) => {\n t.settings.log(2,\"*** appUpdate getAppVersion error e=\" + e);\n }) \n t.settings.executeCommand('finishappupdate','status=success').subscribe((result: any)=>{\n // ***** That's a success *****\n t.settings.log(1,'finishappupdate done 2');\n t.settings.updateIsRunning = false; \n //t.settings.events.publishData({updatefinished: true}); \n // check and possibly update modules\n t.settings.updateModulesFromServer(moduleslastmodified); \n resolve('success'); \n },function(error) {\n t.settings.log(2,\"Error running finishappupdate 2 \" + JSON.stringify(error));\n t.settings.updateIsRunning = false; \n //t.settings.events.publishData({updatefinished: false}); \n reject('Error running finishappupdate ' + JSON.stringify(error)); \n }) \n } else {\n //error. Can we be here ?\n t.settings.log(0,\"*** appUpdate updates error\");\n t.settings.executeCommand('finishappupdate','status=failure&message=' + \n encodeURIComponent(updateMessage)).subscribe((result: any)=>{\n t.settings.log(1,'finishappupdate after error done');\n t.settings.updateIsRunning = false; \n //t.settings.events.publishData({updatefinished: false}); \n reject('appUpdate updates error'); \n },function(error) {\n t.settings.log(2,'Error running finishappupdate 3 ' + JSON.stringify(error));\n t.settings.updateIsRunning = false; \n //t.settings.events.publishData({updatefinished: false}); \n reject('Error running finishappupdate ' + JSON.stringify(error)); \n }); \n }\n }).catch((e) => {\n // handle errors here\n t.settings.log(1,\"*** appUpdate error 3: \" + JSON.stringify(e));\n updateMessage = JSON.stringify(\"appUpdate error 3\");\n t.settings.executeCommand('finishappupdate','status=failure&message=' + \n encodeURIComponent(updateMessage)).subscribe((result: any)=>{\n t.settings.log(1,'finishappupdate done 3');\n t.settings.updateIsRunning = false; \n //t.settings.events.publishData({updatefinished: false}); \n reject('appUpdate error 3: ' + JSON.stringify(e)); \n },function(error) {\n t.settings.log(2,'Error running finishappupdate 4 ' + JSON.stringify(error));\n t.settings.updateIsRunning = false; \n //t.settings.events.publishData({updatefinished: false}); \n reject('Error running finishappupdate ' + JSON.stringify(error)); \n }); \n }); \n } \n }).catch((error)=>{\n t.settings.log(0,\"Error reading current App Json data \" + JSON.stringify(error));\n updateMessage = JSON.stringify(\"Error reading current App Json data\");\n t.settings.executeCommand('finishappupdate','status=failure&message=' + \n encodeURIComponent(updateMessage)).subscribe((result: any)=>{\n t.settings.log(1,'finishappupdate after update 2 done');\n t.settings.updateIsRunning = false; \n //t.settings.events.publishData({updatefinished: false}); \n reject(\"Error reading current App Json data \" + JSON.stringify(error)); \n },function(e) {\n t.settings.log(2,'Error running finishappupdate 2 ' + JSON.stringify(e));\n t.settings.updateIsRunning = false; \n //t.settings.events.publishData({updatefinished: false}); \n reject('Error running finishappupdate ' + JSON.stringify(e)); \n }); \n });\n } else {\n t.settings.log(0,\"*** appUpdate updates success -- NOTHING TO UPDATE\");\n t.settings.executeCommand('finishappupdate','status=success').subscribe((result: any)=>{\n // ***** That's a success *****\n t.settings.log(1,'finishappupdate (NOTHING TO UPDATE) done');\n t.settings.updateIsRunning = false; \n //t.settings.events.publishData({updatefinished: false}); \n resolve('success'); \n },function(error) {\n t.settings.log(2,\"Error running finishappupdate \" + JSON.stringify(error));\n t.settings.updateIsRunning = false; \n //t.settings.events.publishData({updatefinished: false}); \n reject('Error running finishappupdate ' + JSON.stringify(error)); \n }) \n }\n } else {\n t.settings.log(2,\"Error getting updates from the server 1 \" + result.Message + \" params=\" + params);\n t.settings.updateIsRunning = false; \n //t.settings.events.publishData({updatefinished: false}); \n reject(result.Message);\n } \n },function(error) {\n t.settings.log(2,\"Error getting updates from the server 2 \" + JSON.stringify(error) + \" params=\" + params);\n t.settings.updateIsRunning = false; \n //t.settings.events.publishData({updatefinished: false}); \n reject(JSON.stringify(\"Error getting updates from the server 2 \" + JSON.stringify(error))); \n })\n });\n }\n \n \n deleteDataItem(currentParent, pathLeaf) {\n // we should remove related files too - do it later\n this.settings.log(1,\"deleteDataItem currentParent=\" + currentParent + \" pathLeaf=\" + pathLeaf + \" el=\" + currentParent[pathLeaf]);\n if (currentParent[pathLeaf]) {\n delete currentParent[pathLeaf];\n }\n }\n \n splitPath(path) {\n var pp: any = {'pathParent':'','pathLeaf':''};\n if (path) {\n if (path.substr(0,1) == '/') {\n path = path.substr(1);\n } \n var indx = path.lastIndexOf('/');\n if (indx == -1) {\n pp.pathParent = path;\n } else {\n pp.pathParent = path.substring(0, indx);\n pp.pathLeaf = path.substring(indx + 1);\n }\n this.settings.log(0,\"splitPath indx=\" + indx + \" path=\" + path + \" pathParent=\" + pp.pathParent + \" pathLeaf=\" + pp.pathLeaf);\n }\n return pp;\n }\n \n // process JSON object or string value in order to extract images, upload them and change \n // references to point to local image urls\n processUpdateFields(sourceHost, updateItem) {\n var t = this;\n t.settings.log(0,\"*** processUpdateFields start\");\n if (updateItem.parentid) {\n // this is item object\n var urlPromises = [];\n t.settings.log(0,\"processUpdateFields processing summary\");\n urlPromises.push(this.getLocalHtml(sourceHost, updateItem.summary).then((newhtml)=>{\n updateItem.summary = newhtml;\n }));\n if (updateItem.body) {\n t.settings.log(0,\"processUpdateFields processing body\");\n urlPromises.push(this.getLocalHtml(sourceHost, updateItem.body).then((newhtml)=>{\n updateItem.body = newhtml;\n }));\n }\n t.settings.log(0,\"processUpdateFields processing thumbnail=\" + updateItem.thumbnail);\n if (updateItem.thumbnail) {\n urlPromises.push(this.getLocalHtml(sourceHost, updateItem.thumbnail).then((newhtml)=>{\n t.settings.log(0,\"processUpdateFields new thumbnail=\" + newhtml);\n updateItem.thumbnail = newhtml;\n }));\n }\n t.settings.log(0,\"processUpdateFields processing videotitle=\" + updateItem.videotitle);\n if (updateItem.videotitle) {\n urlPromises.push(this.getLocalHtml(sourceHost, updateItem.videotitle).then((newhtml)=>{\n t.settings.log(0,\"processUpdateFields new videotitle=\" + newhtml);\n updateItem.videotitle = newhtml;\n }));\n }\n t.settings.log(0,\"processUpdateFields processing videosummary=\" + updateItem.videosummary);\n if (updateItem.videosummary) {\n urlPromises.push(this.getLocalHtml(sourceHost, updateItem.videosummary).then((newhtml)=>{\n t.settings.log(0,\"processUpdateFields new videosummary=\" + newhtml);\n updateItem.videosummary = newhtml;\n }));\n } \n t.settings.log(0,\"processUpdateFields processing videothumbnail=\" + updateItem.videothumbnail);\n if (updateItem.videothumbnail) {\n urlPromises.push(this.getLocalHtml(sourceHost, updateItem.videothumbnail).then((newhtml)=>{\n t.settings.log(0,\"processUpdateFields new videothumbnail=\" + newhtml);\n updateItem.videothumbnail = newhtml;\n }));\n } \n \n \n return Promise.all(urlPromises).then(() => {\n this.settings.log(0,\"*** processUpdateFields finish\");\n return updateItem;\n }).catch((error) => {\n // handle errors here\n this.settings.log(2,\"*** processUpdateFields error 1: \" + JSON.stringify(error)); \n }); \n } else if (updateItem.attachments) {\n this.settings.log(1,\"*** processUpdateFields processing attachments\");\n return new Promise((resolve) => {\n resolve(updateItem);\n });\t \n } else {\n // this is string item e.g. updated body\n this.settings.log(0,\"*** processUpdateFields processing string element updateItem=\" + updateItem + \" typeof=\" + typeof(updateItem));\n if (typeof(updateItem) == 'string') {\n return this.getLocalHtml(sourceHost, updateItem).then((newhtml)=>{\n updateItem = newhtml;\n return updateItem;\n }).catch((error) => {\n // handle errors here\n this.settings.log(2,\"*** processUpdateFields error 2: \" + JSON.stringify(error));\n }); \n } else {\n return new Promise((resolve) => {\n resolve(updateItem);\n });\t \n }\n }\n }\n \n // process html from sourceHost in order to extract images, upload them and change \n // references in resulting html to point to local image urls\n getLocalHtml(sourceHost, html) {\n //this.settings.log(0,\"getLocalHtml start sourceHost=\" + sourceHost);\n var urls = this.GetImgUrlsFromHtml(html);\n //this.settings.log(0,\"getLocalHtml urls.length=\" + urls.length + \" html=\" + html);\n \n let t = this;\n if (urls && urls.length > 0) {\n var urlMap = [];\n var urlPromises = [];\n for (var i=0; i {\n t.settings.log(0,\"Images i=\" + i + \" old=\" + result.old + \" new=\" + result.new);\n urlMap.push(result);\n }));\n }\n \n return Promise.all(urlPromises).then(() => {\n // we should have all map data defined here\n var newHtml = t.UpdateImageReferences(html,urlMap);\n t.settings.log(0,\"*** getLocalHtml 1 newHtml=\" + newHtml);\n newHtml = t.UpdateLocalLinks(sourceHost, newHtml);\n t.settings.log(0,\"*** getLocalHtml 2 newHtml=\" + newHtml);\n return newHtml;\n }).catch((e) => {\n // handle errors here\n t.settings.log(2,\"*** getLocalHtml error: \" + e);\n });\n \n } else {\n return new Promise((resolve) => {\n var newHtml = this.UpdateLocalLinks(sourceHost, html);\n resolve(newHtml);\n });\t\t\n }\n }\n \n onErrorCreateFile (e) {\n this.settings.log(2,\"Failed to create file: \" + JSON.stringify(e));\n }\n \n saveFile(dirEntry, fileData, fileName, t) {\n this.settings.log(0,\"saveFile saving file \" + fileName);\n dirEntry.getFile(fileName, { create: true, exclusive: false }, function (fileEntry) {\n t.writeFile(fileEntry, fileData);\n }, t.onErrorCreateFile);\n }\n \n writeFile(fileEntry, dataObj, isAppend) {\n fileEntry.createWriter(function (fileWriter) {\n fileWriter.onwriteend = function() {\n this.settings.log(0,\"writeFile Successful file write...\");\n } \n fileWriter.onerror = function(e) {\n this.settings.log(2,\"writeFile Failed file write: \" + e.toString());\n };\n fileWriter.write(dataObj);\n });\n }\n \n GetImgUrlsFromHtml(html) {\n var currentHost = window.location.protocol + '//' + window.location.hostname;\n if (window.location.port && window.location.port != '80' && window.location.port != '443') {\n currentHost += ':' + window.location.port;\n }\n var urls = [];\n //if (html && (html.substr(0,1) == '/' || html.substr(0,4) == 'http') && \n // GR 20180411 - we do NOT want to get full urls !\n if (html && (html.substr(0,1) == '/') && \n html.indexOf('\"') == -1 && html.indexOf('<') == -1 && html.substr(-1).match(/[a-z]/i)) {\n // we consider this as \"image\" or \"thumbnal\" field where whole html is an URL\n urls.push(html);\n } else {\n var el = document.createElement('div');\n el.innerHTML = html;\n var tags = el.getElementsByTagName('img');\n //this.settings.log(0,\"GetImgUrlsFromHtml: tags.length=\" + tags.length);\n if (tags) {\n for (var i=0; i 0) {\n this.settings.log(0,\"UpdateImageReferences: urlMap.length=\" + urlMap.length);\n for (var i=0; i console.log(err));\n","var map = {\n\t\"./ion-accordion_2.entry.js\": [\n\t\t83750,\n\t\t\"common\",\n\t\t\"node_modules_ionic_core_dist_esm_ion-accordion_2_entry_js\"\n\t],\n\t\"./ion-action-sheet.entry.js\": [\n\t\t90733,\n\t\t\"common\",\n\t\t\"node_modules_ionic_core_dist_esm_ion-action-sheet_entry_js\"\n\t],\n\t\"./ion-alert.entry.js\": [\n\t\t20985,\n\t\t\"common\",\n\t\t\"node_modules_ionic_core_dist_esm_ion-alert_entry_js\"\n\t],\n\t\"./ion-app_8.entry.js\": [\n\t\t93899,\n\t\t\"common\",\n\t\t\"node_modules_ionic_core_dist_esm_ion-app_8_entry_js\"\n\t],\n\t\"./ion-avatar_3.entry.js\": [\n\t\t5121,\n\t\t\"node_modules_ionic_core_dist_esm_ion-avatar_3_entry_js\"\n\t],\n\t\"./ion-back-button.entry.js\": [\n\t\t52960,\n\t\t\"common\",\n\t\t\"node_modules_ionic_core_dist_esm_ion-back-button_entry_js\"\n\t],\n\t\"./ion-backdrop.entry.js\": [\n\t\t45473,\n\t\t\"node_modules_ionic_core_dist_esm_ion-backdrop_entry_js\"\n\t],\n\t\"./ion-breadcrumb_2.entry.js\": [\n\t\t57951,\n\t\t\"common\",\n\t\t\"node_modules_ionic_core_dist_esm_ion-breadcrumb_2_entry_js\"\n\t],\n\t\"./ion-button_2.entry.js\": [\n\t\t19787,\n\t\t\"node_modules_ionic_core_dist_esm_ion-button_2_entry_js\"\n\t],\n\t\"./ion-card_5.entry.js\": [\n\t\t66165,\n\t\t\"node_modules_ionic_core_dist_esm_ion-card_5_entry_js\"\n\t],\n\t\"./ion-checkbox.entry.js\": [\n\t\t69569,\n\t\t\"node_modules_ionic_core_dist_esm_ion-checkbox_entry_js\"\n\t],\n\t\"./ion-chip.entry.js\": [\n\t\t35119,\n\t\t\"node_modules_ionic_core_dist_esm_ion-chip_entry_js\"\n\t],\n\t\"./ion-col_3.entry.js\": [\n\t\t90799,\n\t\t\"node_modules_ionic_core_dist_esm_ion-col_3_entry_js\"\n\t],\n\t\"./ion-datetime-button.entry.js\": [\n\t\t16519,\n\t\t\"default-node_modules_ionic_core_dist_esm_data-caf38df0_js-node_modules_ionic_core_dist_esm_th-3ec348\",\n\t\t\"node_modules_ionic_core_dist_esm_ion-datetime-button_entry_js\"\n\t],\n\t\"./ion-datetime_3.entry.js\": [\n\t\t68918,\n\t\t\"default-node_modules_ionic_core_dist_esm_data-caf38df0_js-node_modules_ionic_core_dist_esm_th-3ec348\",\n\t\t\"common\",\n\t\t\"node_modules_ionic_core_dist_esm_ion-datetime_3_entry_js\"\n\t],\n\t\"./ion-fab_3.entry.js\": [\n\t\t94028,\n\t\t\"common\",\n\t\t\"node_modules_ionic_core_dist_esm_ion-fab_3_entry_js\"\n\t],\n\t\"./ion-img.entry.js\": [\n\t\t98107,\n\t\t\"node_modules_ionic_core_dist_esm_ion-img_entry_js\"\n\t],\n\t\"./ion-infinite-scroll_2.entry.js\": [\n\t\t72178,\n\t\t\"common\",\n\t\t\"node_modules_ionic_core_dist_esm_ion-infinite-scroll_2_entry_js\"\n\t],\n\t\"./ion-input.entry.js\": [\n\t\t20123,\n\t\t\"common\",\n\t\t\"node_modules_ionic_core_dist_esm_ion-input_entry_js\"\n\t],\n\t\"./ion-item-option_3.entry.js\": [\n\t\t18706,\n\t\t\"common\",\n\t\t\"node_modules_ionic_core_dist_esm_ion-item-option_3_entry_js\"\n\t],\n\t\"./ion-item_8.entry.js\": [\n\t\t12099,\n\t\t\"common\",\n\t\t\"node_modules_ionic_core_dist_esm_ion-item_8_entry_js\"\n\t],\n\t\"./ion-loading.entry.js\": [\n\t\t84868,\n\t\t\"node_modules_ionic_core_dist_esm_ion-loading_entry_js\"\n\t],\n\t\"./ion-menu_3.entry.js\": [\n\t\t54377,\n\t\t\"common\",\n\t\t\"node_modules_ionic_core_dist_esm_ion-menu_3_entry_js\"\n\t],\n\t\"./ion-modal.entry.js\": [\n\t\t15678,\n\t\t\"common\",\n\t\t\"node_modules_ionic_core_dist_esm_ion-modal_entry_js\"\n\t],\n\t\"./ion-nav_2.entry.js\": [\n\t\t16735,\n\t\t\"common\",\n\t\t\"node_modules_ionic_core_dist_esm_ion-nav_2_entry_js\"\n\t],\n\t\"./ion-picker-column-internal.entry.js\": [\n\t\t42322,\n\t\t\"common\",\n\t\t\"node_modules_ionic_core_dist_esm_ion-picker-column-internal_entry_js\"\n\t],\n\t\"./ion-picker-internal.entry.js\": [\n\t\t57754,\n\t\t\"node_modules_ionic_core_dist_esm_ion-picker-internal_entry_js\"\n\t],\n\t\"./ion-popover.entry.js\": [\n\t\t87686,\n\t\t\"common\",\n\t\t\"node_modules_ionic_core_dist_esm_ion-popover_entry_js\"\n\t],\n\t\"./ion-progress-bar.entry.js\": [\n\t\t48555,\n\t\t\"node_modules_ionic_core_dist_esm_ion-progress-bar_entry_js\"\n\t],\n\t\"./ion-radio_2.entry.js\": [\n\t\t30568,\n\t\t\"node_modules_ionic_core_dist_esm_ion-radio_2_entry_js\"\n\t],\n\t\"./ion-range.entry.js\": [\n\t\t6231,\n\t\t\"common\",\n\t\t\"node_modules_ionic_core_dist_esm_ion-range_entry_js\"\n\t],\n\t\"./ion-refresher_2.entry.js\": [\n\t\t45772,\n\t\t\"common\",\n\t\t\"node_modules_ionic_core_dist_esm_ion-refresher_2_entry_js\"\n\t],\n\t\"./ion-reorder_2.entry.js\": [\n\t\t14977,\n\t\t\"common\",\n\t\t\"node_modules_ionic_core_dist_esm_ion-reorder_2_entry_js\"\n\t],\n\t\"./ion-ripple-effect.entry.js\": [\n\t\t42886,\n\t\t\"node_modules_ionic_core_dist_esm_ion-ripple-effect_entry_js\"\n\t],\n\t\"./ion-route_4.entry.js\": [\n\t\t54990,\n\t\t\"node_modules_ionic_core_dist_esm_ion-route_4_entry_js\"\n\t],\n\t\"./ion-searchbar.entry.js\": [\n\t\t13810,\n\t\t\"common\",\n\t\t\"node_modules_ionic_core_dist_esm_ion-searchbar_entry_js\"\n\t],\n\t\"./ion-segment_2.entry.js\": [\n\t\t2446,\n\t\t\"common\",\n\t\t\"node_modules_ionic_core_dist_esm_ion-segment_2_entry_js\"\n\t],\n\t\"./ion-select_3.entry.js\": [\n\t\t47619,\n\t\t\"node_modules_ionic_core_dist_esm_ion-select_3_entry_js\"\n\t],\n\t\"./ion-slide_2.entry.js\": [\n\t\t28393,\n\t\t\"node_modules_ionic_core_dist_esm_ion-slide_2_entry_js\"\n\t],\n\t\"./ion-spinner.entry.js\": [\n\t\t56281,\n\t\t\"common\",\n\t\t\"node_modules_ionic_core_dist_esm_ion-spinner_entry_js\"\n\t],\n\t\"./ion-split-pane.entry.js\": [\n\t\t35932,\n\t\t\"node_modules_ionic_core_dist_esm_ion-split-pane_entry_js\"\n\t],\n\t\"./ion-tab-bar_2.entry.js\": [\n\t\t57970,\n\t\t\"common\",\n\t\t\"node_modules_ionic_core_dist_esm_ion-tab-bar_2_entry_js\"\n\t],\n\t\"./ion-tab_2.entry.js\": [\n\t\t80298,\n\t\t\"common\",\n\t\t\"node_modules_ionic_core_dist_esm_ion-tab_2_entry_js\"\n\t],\n\t\"./ion-text.entry.js\": [\n\t\t71006,\n\t\t\"node_modules_ionic_core_dist_esm_ion-text_entry_js\"\n\t],\n\t\"./ion-textarea.entry.js\": [\n\t\t74783,\n\t\t\"node_modules_ionic_core_dist_esm_ion-textarea_entry_js\"\n\t],\n\t\"./ion-toast.entry.js\": [\n\t\t62749,\n\t\t\"node_modules_ionic_core_dist_esm_ion-toast_entry_js\"\n\t],\n\t\"./ion-toggle.entry.js\": [\n\t\t55404,\n\t\t\"common\",\n\t\t\"node_modules_ionic_core_dist_esm_ion-toggle_entry_js\"\n\t],\n\t\"./ion-virtual-scroll.entry.js\": [\n\t\t39043,\n\t\t\"node_modules_ionic_core_dist_esm_ion-virtual-scroll_entry_js\"\n\t]\n};\nfunction webpackAsyncContext(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\treturn Promise.resolve().then(() => {\n\t\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\t\te.code = 'MODULE_NOT_FOUND';\n\t\t\tthrow e;\n\t\t});\n\t}\n\n\tvar ids = map[req], id = ids[0];\n\treturn Promise.all(ids.slice(1).map(__webpack_require__.e)).then(() => {\n\t\treturn __webpack_require__(id);\n\t});\n}\nwebpackAsyncContext.keys = () => (Object.keys(map));\nwebpackAsyncContext.id = 50863;\nmodule.exports = webpackAsyncContext;","export default \"\\n \\n \\n\\n \\n \\n \\n
{{settings.currentUserData.Firstname}}
\\n
\\n \\n \\n Request a Quote\\n \\n \\n \\n \\n Connect Auto Data\\n \\n \\n \\n \\n Switch to Buyer View\\n \\n \\n \\n \\n \\n Switch to Seller View\\n \\n \\n \\n \\n {{ p.title }}\\n \\n
\\n
\\n \\n \\n \\n Logout\\n \\n \\n \\n
\\n
\\n \\n
\\n\";","var map = {\n\t\"./af\": 62275,\n\t\"./af.js\": 62275,\n\t\"./ar\": 90857,\n\t\"./ar-dz\": 11218,\n\t\"./ar-dz.js\": 11218,\n\t\"./ar-kw\": 14754,\n\t\"./ar-kw.js\": 14754,\n\t\"./ar-ly\": 66680,\n\t\"./ar-ly.js\": 66680,\n\t\"./ar-ma\": 92178,\n\t\"./ar-ma.js\": 92178,\n\t\"./ar-sa\": 56522,\n\t\"./ar-sa.js\": 56522,\n\t\"./ar-tn\": 95682,\n\t\"./ar-tn.js\": 95682,\n\t\"./ar.js\": 90857,\n\t\"./az\": 70164,\n\t\"./az.js\": 70164,\n\t\"./be\": 79774,\n\t\"./be.js\": 79774,\n\t\"./bg\": 60947,\n\t\"./bg.js\": 60947,\n\t\"./bm\": 21832,\n\t\"./bm.js\": 21832,\n\t\"./bn\": 89650,\n\t\"./bn-bd\": 74477,\n\t\"./bn-bd.js\": 74477,\n\t\"./bn.js\": 89650,\n\t\"./bo\": 66005,\n\t\"./bo.js\": 66005,\n\t\"./br\": 98492,\n\t\"./br.js\": 98492,\n\t\"./bs\": 70534,\n\t\"./bs.js\": 70534,\n\t\"./ca\": 52061,\n\t\"./ca.js\": 52061,\n\t\"./cs\": 84737,\n\t\"./cs.js\": 84737,\n\t\"./cv\": 61167,\n\t\"./cv.js\": 61167,\n\t\"./cy\": 77996,\n\t\"./cy.js\": 77996,\n\t\"./da\": 9528,\n\t\"./da.js\": 9528,\n\t\"./de\": 14540,\n\t\"./de-at\": 49430,\n\t\"./de-at.js\": 49430,\n\t\"./de-ch\": 67978,\n\t\"./de-ch.js\": 67978,\n\t\"./de.js\": 14540,\n\t\"./dv\": 83426,\n\t\"./dv.js\": 83426,\n\t\"./el\": 6616,\n\t\"./el.js\": 6616,\n\t\"./en-au\": 63816,\n\t\"./en-au.js\": 63816,\n\t\"./en-ca\": 32162,\n\t\"./en-ca.js\": 32162,\n\t\"./en-gb\": 83305,\n\t\"./en-gb.js\": 83305,\n\t\"./en-ie\": 61954,\n\t\"./en-ie.js\": 61954,\n\t\"./en-il\": 43060,\n\t\"./en-il.js\": 43060,\n\t\"./en-in\": 59923,\n\t\"./en-in.js\": 59923,\n\t\"./en-nz\": 13540,\n\t\"./en-nz.js\": 13540,\n\t\"./en-sg\": 16505,\n\t\"./en-sg.js\": 16505,\n\t\"./eo\": 41907,\n\t\"./eo.js\": 41907,\n\t\"./es\": 86640,\n\t\"./es-do\": 41246,\n\t\"./es-do.js\": 41246,\n\t\"./es-mx\": 56131,\n\t\"./es-mx.js\": 56131,\n\t\"./es-us\": 36430,\n\t\"./es-us.js\": 36430,\n\t\"./es.js\": 86640,\n\t\"./et\": 62551,\n\t\"./et.js\": 62551,\n\t\"./eu\": 32711,\n\t\"./eu.js\": 32711,\n\t\"./fa\": 54572,\n\t\"./fa.js\": 54572,\n\t\"./fi\": 33390,\n\t\"./fi.js\": 33390,\n\t\"./fil\": 87860,\n\t\"./fil.js\": 87860,\n\t\"./fo\": 48216,\n\t\"./fo.js\": 48216,\n\t\"./fr\": 99291,\n\t\"./fr-ca\": 98527,\n\t\"./fr-ca.js\": 98527,\n\t\"./fr-ch\": 58407,\n\t\"./fr-ch.js\": 58407,\n\t\"./fr.js\": 99291,\n\t\"./fy\": 47054,\n\t\"./fy.js\": 47054,\n\t\"./ga\": 49540,\n\t\"./ga.js\": 49540,\n\t\"./gd\": 73917,\n\t\"./gd.js\": 73917,\n\t\"./gl\": 51486,\n\t\"./gl.js\": 51486,\n\t\"./gom-deva\": 56245,\n\t\"./gom-deva.js\": 56245,\n\t\"./gom-latn\": 48868,\n\t\"./gom-latn.js\": 48868,\n\t\"./gu\": 59652,\n\t\"./gu.js\": 59652,\n\t\"./he\": 89019,\n\t\"./he.js\": 89019,\n\t\"./hi\": 42040,\n\t\"./hi.js\": 42040,\n\t\"./hr\": 63402,\n\t\"./hr.js\": 63402,\n\t\"./hu\": 79322,\n\t\"./hu.js\": 79322,\n\t\"./hy-am\": 27609,\n\t\"./hy-am.js\": 27609,\n\t\"./id\": 57942,\n\t\"./id.js\": 57942,\n\t\"./is\": 98275,\n\t\"./is.js\": 98275,\n\t\"./it\": 73053,\n\t\"./it-ch\": 4378,\n\t\"./it-ch.js\": 4378,\n\t\"./it.js\": 73053,\n\t\"./ja\": 46176,\n\t\"./ja.js\": 46176,\n\t\"./jv\": 679,\n\t\"./jv.js\": 679,\n\t\"./ka\": 92726,\n\t\"./ka.js\": 92726,\n\t\"./kk\": 72953,\n\t\"./kk.js\": 72953,\n\t\"./km\": 86957,\n\t\"./km.js\": 86957,\n\t\"./kn\": 59181,\n\t\"./kn.js\": 59181,\n\t\"./ko\": 47148,\n\t\"./ko.js\": 47148,\n\t\"./ku\": 27752,\n\t\"./ku.js\": 27752,\n\t\"./ky\": 65675,\n\t\"./ky.js\": 65675,\n\t\"./lb\": 41263,\n\t\"./lb.js\": 41263,\n\t\"./lo\": 65746,\n\t\"./lo.js\": 65746,\n\t\"./lt\": 11143,\n\t\"./lt.js\": 11143,\n\t\"./lv\": 38753,\n\t\"./lv.js\": 38753,\n\t\"./me\": 44054,\n\t\"./me.js\": 44054,\n\t\"./mi\": 31573,\n\t\"./mi.js\": 31573,\n\t\"./mk\": 30202,\n\t\"./mk.js\": 30202,\n\t\"./ml\": 68523,\n\t\"./ml.js\": 68523,\n\t\"./mn\": 79794,\n\t\"./mn.js\": 79794,\n\t\"./mr\": 56681,\n\t\"./mr.js\": 56681,\n\t\"./ms\": 56975,\n\t\"./ms-my\": 39859,\n\t\"./ms-my.js\": 39859,\n\t\"./ms.js\": 56975,\n\t\"./mt\": 3691,\n\t\"./mt.js\": 3691,\n\t\"./my\": 5152,\n\t\"./my.js\": 5152,\n\t\"./nb\": 7607,\n\t\"./nb.js\": 7607,\n\t\"./ne\": 21526,\n\t\"./ne.js\": 21526,\n\t\"./nl\": 86368,\n\t\"./nl-be\": 40076,\n\t\"./nl-be.js\": 40076,\n\t\"./nl.js\": 86368,\n\t\"./nn\": 68420,\n\t\"./nn.js\": 68420,\n\t\"./oc-lnc\": 51906,\n\t\"./oc-lnc.js\": 51906,\n\t\"./pa-in\": 94504,\n\t\"./pa-in.js\": 94504,\n\t\"./pl\": 54721,\n\t\"./pl.js\": 54721,\n\t\"./pt\": 74645,\n\t\"./pt-br\": 54548,\n\t\"./pt-br.js\": 54548,\n\t\"./pt.js\": 74645,\n\t\"./ro\": 71977,\n\t\"./ro.js\": 71977,\n\t\"./ru\": 26042,\n\t\"./ru.js\": 26042,\n\t\"./sd\": 78849,\n\t\"./sd.js\": 78849,\n\t\"./se\": 27739,\n\t\"./se.js\": 27739,\n\t\"./si\": 50084,\n\t\"./si.js\": 50084,\n\t\"./sk\": 92449,\n\t\"./sk.js\": 92449,\n\t\"./sl\": 23086,\n\t\"./sl.js\": 23086,\n\t\"./sq\": 33139,\n\t\"./sq.js\": 33139,\n\t\"./sr\": 30607,\n\t\"./sr-cyrl\": 30063,\n\t\"./sr-cyrl.js\": 30063,\n\t\"./sr.js\": 30607,\n\t\"./ss\": 40131,\n\t\"./ss.js\": 40131,\n\t\"./sv\": 21665,\n\t\"./sv.js\": 21665,\n\t\"./sw\": 5642,\n\t\"./sw.js\": 5642,\n\t\"./ta\": 33622,\n\t\"./ta.js\": 33622,\n\t\"./te\": 74825,\n\t\"./te.js\": 74825,\n\t\"./tet\": 48336,\n\t\"./tet.js\": 48336,\n\t\"./tg\": 39238,\n\t\"./tg.js\": 39238,\n\t\"./th\": 99463,\n\t\"./th.js\": 99463,\n\t\"./tk\": 39986,\n\t\"./tk.js\": 39986,\n\t\"./tl-ph\": 29672,\n\t\"./tl-ph.js\": 29672,\n\t\"./tlh\": 40043,\n\t\"./tlh.js\": 40043,\n\t\"./tr\": 51212,\n\t\"./tr.js\": 51212,\n\t\"./tzl\": 50110,\n\t\"./tzl.js\": 50110,\n\t\"./tzm\": 80482,\n\t\"./tzm-latn\": 38309,\n\t\"./tzm-latn.js\": 38309,\n\t\"./tzm.js\": 80482,\n\t\"./ug-cn\": 42495,\n\t\"./ug-cn.js\": 42495,\n\t\"./uk\": 54157,\n\t\"./uk.js\": 54157,\n\t\"./ur\": 80984,\n\t\"./ur.js\": 80984,\n\t\"./uz\": 64141,\n\t\"./uz-latn\": 43662,\n\t\"./uz-latn.js\": 43662,\n\t\"./uz.js\": 64141,\n\t\"./vi\": 12607,\n\t\"./vi.js\": 12607,\n\t\"./x-pseudo\": 66460,\n\t\"./x-pseudo.js\": 66460,\n\t\"./yo\": 92948,\n\t\"./yo.js\": 92948,\n\t\"./zh-cn\": 62658,\n\t\"./zh-cn.js\": 62658,\n\t\"./zh-hk\": 39352,\n\t\"./zh-hk.js\": 39352,\n\t\"./zh-mo\": 38274,\n\t\"./zh-mo.js\": 38274,\n\t\"./zh-tw\": 98451,\n\t\"./zh-tw.js\": 98451\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 46700;","/* (ignored) */"],"names":[],"sourceRoot":"webpack:///"}