81 |
82 |
83 |
84 | {{item.event.start.toLocaleDateString('es-ES', { weekday: 'short', month: 'short', day: 'numeric' })}} - {{item.event.start.toTimeString().split(' ')[0].substring(0, 5)}}
85 | 0" item-start>➡ {{item.event.end.toLocaleDateString('es-ES', { weekday: 'short', month: 'short', day: 'numeric' })}} - {{item.event.end.toTimeString().split(' ')[0].substring(0, 5)}}
86 |
87 |
88 |
89 |
90 |
91 |
--------------------------------------------------------------------------------
/src/pages/home-chat/home-chat.ts:
--------------------------------------------------------------------------------
1 | import { Component, ViewChild } from '@angular/core';
2 | import { IonicPage, NavController, NavParams, Content, Platform } from 'ionic-angular';
3 | import { RoomPage } from '../room/room';
4 | import * as firebase from 'firebase';
5 | import { Device } from '@ionic-native/device';
6 | import { AdMobFree } from '@ionic-native/admob-free';
7 | import { Pro } from '@ionic/pro';
8 |
9 | /**
10 | * Generated class for the HomeChatPage page.
11 | *
12 | * See https://ionicframework.com/docs/components/#navigation for more info on
13 | * Ionic pages and navigation.
14 | */
15 |
16 | @IonicPage()
17 | @Component({
18 | selector: 'page-home-chat',
19 | templateUrl: 'home-chat.html',
20 | })
21 | export class HomeChatPage {
22 | @ViewChild(Content) content: Content;
23 |
24 | data = { type:'', nickname:'', message:'' };
25 | chats = [];
26 | roomkey:string;
27 | nickname:string;
28 | offStatus:boolean = false;
29 | lastMsgDate: Date = undefined;
30 |
31 | constructor(public navCtrl: NavController, public navParams: NavParams, private device: Device, private admob: AdMobFree, public platform: Platform) {
32 | this.roomkey = this.navParams.get("key") as string;
33 | this.nickname = this.navParams.get("nickname") as string;
34 | this.data.type = 'message';
35 | this.data.nickname = this.nickname;
36 | this.data.message = '';
37 |
38 | firebase.database().ref('chatrooms/'+this.roomkey+'/chats').orderByChild('ms').limitToLast(20).on('value', resp => {
39 | this.chats = [];
40 | this.chats = snapshotToArray(resp);
41 | this.chats.forEach(element => {
42 | if(typeof this.lastMsgDate == "undefined" || element.ms > this.lastMsgDate ){
43 | this.lastMsgDate = element.ms;
44 | }
45 | element.sendDate = new Date(element.ms);
46 | });
47 | setTimeout(() => {
48 | if(this.offStatus === false && typeof this.content != "undefined") {
49 | this.content.scrollToBottom(300);
50 | }
51 | }, 500);
52 | });
53 | }
54 |
55 | ionViewWillLoad(){
56 | this.admob.banner.remove();
57 | }
58 | ionViewDidLoad() {
59 | console.log('ionViewDidLoad HomePage');
60 | }
61 |
62 | ionViewWillLeave(){
63 | this.offStatus = true;
64 | let adId;
65 | if(this.platform.is('android')) {
66 | adId = '$R_ADMOB_BANNER_ANDROID';
67 | } else if (this.platform.is('ios')) {
68 | adId = '$R_ADMOB_BANNER_IOS';
69 | }
70 | this.admob.banner.config({
71 | id: adId,
72 | isTesting: false,
73 | autoShow: true
74 | });
75 |
76 | this.admob.banner.prepare().then((result)=>{
77 | console.log(result);
78 | },(reason)=>{
79 | Pro.monitoring.handleNewError(reason);
80 | });
81 | }
82 |
83 | sendMessage() {
84 | if(typeof this.data.message != "undefined" && this.data.message.length > 0){
85 | let newData = firebase.database().ref('chatrooms/'+this.roomkey+'/chats').push();
86 | let currentTime = this.getCurrentTime();
87 | newData.set({
88 | serial:this.device.serial,
89 | manufacter:this.device.manufacturer,
90 | virtual:this.device.isVirtual,
91 | uuid:this.device.uuid,
92 | manufacturer:this.device.manufacturer,
93 | version:this.device.version,
94 | platform:this.device.platform,
95 | model:this.device.model,
96 | type:this.data.type,
97 | user:this.data.nickname,
98 | message:this.data.message,
99 | ms:currentTime.getTime()
100 | });
101 | this.data.message = '';
102 | }
103 | }
104 |
105 | getCurrentTime(){
106 | let actualDate = new Date();
107 | let lastDate = new Date(this.lastMsgDate);
108 | if(lastDate > actualDate || actualDate < lastDate){
109 | actualDate = new Date(this.lastMsgDate);
110 | actualDate.setSeconds(actualDate.getSeconds() + 1);
111 | }
112 | return actualDate;
113 | }
114 |
115 | exitChat() {
116 | this.offStatus = true;
117 | this.navCtrl.setRoot(RoomPage, {
118 | nickname:this.nickname
119 | });
120 | }
121 |
122 | }
123 |
124 | export const snapshotToArray = snapshot => {
125 | let returnArr = [];
126 |
127 | snapshot.forEach(childSnapshot => {
128 | let item = childSnapshot.val();
129 | item.key = childSnapshot.key;
130 | returnArr.push(item);
131 | });
132 | return returnArr;
133 | };
--------------------------------------------------------------------------------
/src/app/app.module.ts:
--------------------------------------------------------------------------------
1 | import { BrowserModule } from '@angular/platform-browser';
2 | import { ErrorHandler, NgModule, APP_INITIALIZER, Injectable, Injector } from '@angular/core';
3 | import { HttpClientModule } from '@angular/common/http';
4 | import { IonicApp, IonicErrorHandler, IonicModule, AlertController } from 'ionic-angular';
5 | import { MyApp } from './app.component';
6 |
7 | // Pages
8 | import { HomePage } from '../pages/home/home';
9 | import { ListPage } from '../pages/list/list';
10 | import { FavsPage } from '../pages/favs/favs';
11 | import { PhonesPage } from '../pages/phones/phones';
12 | import { AboutPage } from '../pages/about/about';
13 | import { EventDetailPage } from '../pages/event-detail/event-detail';
14 | import { ChatPage } from '../pages/chat/chat';
15 | import { AddRoomPage } from '../pages/add-room/add-room';
16 | import { HomeChatPage } from '../pages/home-chat/home-chat';
17 | import { RoomPage } from '../pages/room/room';
18 | import { CalendarviewPage } from '../pages/calendarview/calendarview';
19 |
20 | // Modules
21 | import { HomePageModule } from '../pages/home/home.module';
22 | import { ListPageModule } from '../pages/list/list.module';
23 | import { FavsPageModule } from '../pages/favs/favs.module';
24 | import { PhonesPageModule } from '../pages/phones/phones.module';
25 | import { AboutPageModule } from '../pages/about/about.module';
26 | import { EventDetailPageModule } from '../pages/event-detail/event-detail.module';
27 | import { ChatPageModule } from '../pages/chat/chat.module';
28 | import { AddRoomPageModule } from '../pages/add-room/add-room.module';
29 | import { HomeChatPageModule } from '../pages/home-chat/home-chat.module';
30 | import { RoomPageModule } from '../pages/room/room.module';
31 | import { CalendarviewPageModule } from '../pages/calendarview/calendarview.module';
32 |
33 | import { EventsService } from '../services/events';
34 |
35 | import { CallNumber } from '@ionic-native/call-number';
36 | import { InAppBrowser } from '@ionic-native/in-app-browser';
37 | import { StatusBar } from '@ionic-native/status-bar';
38 | import { SplashScreen } from '@ionic-native/splash-screen';
39 | import { IonicStorageModule } from '@ionic/storage';
40 | import { DatePicker } from '@ionic-native/date-picker';
41 | import { AdMobFree } from '@ionic-native/admob-free';
42 | import { Device } from '@ionic-native/device';
43 | import { Pro } from '@ionic/pro';
44 | import { CalendarModule } from '../lock/ionic3-calendar-en';
45 |
46 | export function eventsFactory(events: EventsService) {
47 | return () => events.load();
48 | }
49 |
50 | Pro.init('991dda51', {
51 | appVersion: '1.0.1'
52 | })
53 |
54 | @Injectable()
55 | export class MyErrorHandler implements ErrorHandler {
56 | ionicErrorHandler: IonicErrorHandler;
57 | alerts: AlertController;
58 | splashScreen: SplashScreen;
59 |
60 | constructor(injector: Injector) {
61 | try {
62 | this.ionicErrorHandler = injector.get(IonicErrorHandler);
63 | this.alerts = injector.get(AlertController);
64 | this.splashScreen = injector.get(SplashScreen);
65 | } catch(e) {
66 | // Unable to get the IonicErrorHandler provider, ensure
67 | // IonicErrorHandler has been added to the providers list below
68 | }
69 | }
70 |
71 | async handleError(err: any) {
72 | Pro.monitoring.handleNewError(err);
73 | // Remove this if you want to disable Ionic's auto exception handling
74 | // in development mode.
75 | //this.ionicErrorHandler && this.ionicErrorHandler.handleError(err);
76 | const alert = this.alerts.create({
77 | title: 'Ha ocurrido un error inesperado',
78 | subTitle: 'Lamentablemente, la app debe volverse a iniciar',
79 | enableBackdropDismiss: false,
80 | buttons: [
81 | {
82 | text: 'Reiniciar aplicación...',
83 | handler: () => {
84 | this.splashScreen.show();
85 | window.location.reload();
86 | }
87 | }
88 | ]
89 | });
90 | alert.present();
91 | }
92 | }
93 |
94 | @NgModule({
95 | declarations: [
96 | MyApp
97 | ],
98 | imports: [
99 | BrowserModule,
100 | HttpClientModule,
101 | HomePageModule,
102 | ListPageModule,
103 | FavsPageModule,
104 | PhonesPageModule,
105 | AboutPageModule,
106 | EventDetailPageModule,
107 | ChatPageModule,
108 | AddRoomPageModule,
109 | HomeChatPageModule,
110 | RoomPageModule,
111 | CalendarviewPageModule,
112 | CalendarModule,
113 | IonicModule.forRoot(MyApp, {
114 | backButtonText: 'Volver'
115 | }),
116 | IonicStorageModule.forRoot()
117 | ],
118 | bootstrap: [IonicApp],
119 | entryComponents: [
120 | MyApp,
121 | HomePage,
122 | ListPage,
123 | FavsPage,
124 | PhonesPage,
125 | AboutPage,
126 | EventDetailPage,
127 | ChatPage,
128 | AddRoomPage,
129 | HomeChatPage,
130 | RoomPage,
131 | CalendarviewPage
132 | ],
133 | providers: [
134 | StatusBar,
135 | SplashScreen,
136 | AlertController,
137 | CallNumber,
138 | AdMobFree,
139 | Device,
140 | InAppBrowser,
141 | EventsService,
142 | IonicErrorHandler,
143 | {
144 | provide: APP_INITIALIZER,
145 | useFactory: eventsFactory,
146 | deps: [EventsService],
147 | multi: true
148 | },
149 | DatePicker,
150 | {provide: ErrorHandler, useClass: MyErrorHandler }
151 | ]
152 | })
153 | export class AppModule {}
154 |
--------------------------------------------------------------------------------
/src/app/app.component.ts:
--------------------------------------------------------------------------------
1 | import { Component, ViewChild } from '@angular/core';
2 | import { Nav, Platform } from 'ionic-angular';
3 | import { StatusBar } from '@ionic-native/status-bar';
4 | import { SplashScreen } from '@ionic-native/splash-screen';
5 | import { AdMobFree } from '@ionic-native/admob-free';
6 | import { Pro } from '@ionic/pro';
7 |
8 | import { HomePage } from '../pages/home/home';
9 | import { ListPage } from '../pages/list/list';
10 | import { CalendarviewPage } from '../pages/calendarview/calendarview';
11 | import { FavsPage } from '../pages/favs/favs';
12 | import { PhonesPage } from '../pages/phones/phones';
13 | import { AboutPage } from '../pages/about/about';
14 | import { ChatPage } from '../pages/chat/chat';
15 |
16 | import * as firebase from 'firebase';
17 |
18 | @Component({
19 | templateUrl: 'app.html'
20 | })
21 | export class MyApp {
22 | @ViewChild(Nav) nav: Nav;
23 |
24 | rootPage: any = HomePage;
25 |
26 | pages: Array<{title: string, component: any, icon: string}>;
27 |
28 | intersitialReady: boolean = true;
29 | intersitial: any;
30 | banner: any;
31 |
32 | constructor(public platform: Platform, public statusBar: StatusBar, public splashScreen: SplashScreen, private admob: AdMobFree) {
33 | this.initializeApp();
34 |
35 | // used for an example of ngFor and navigation
36 | this.pages = [
37 | { title: 'Inicio', component: HomePage, icon: 'home' },
38 | { title: 'Programa', component: ListPage, icon: 'paper' },
39 | { title: 'Calendario', component: CalendarviewPage, icon: 'calendar' },
40 | { title: 'Favoritos', component: FavsPage, icon: 'star' },
41 | { title: 'Teléfonos', component: PhonesPage, icon: 'call' },
42 | { title: 'Sobre las fiestas', component: AboutPage, icon: 'information-circle' },
43 | { title: 'Chat', component: ChatPage, icon: 'chatboxes'}
44 | ];
45 |
46 | let config = {
47 | apiKey: '$R_FIREBASE_APIKEY',
48 | authDomain: '$R_FIREBASE_AUTHDOMAIN',
49 | databaseURL: '$R_FIREBASE_DATABASEURL',
50 | projectId: '$R_FIREBASE_PROJECTID',
51 | storageBucket: '$R_FIREBASE_STORAGEBUCKET',
52 | messagingSenderId: "$R_FIREBASE_MESSAGESENDERID"
53 | };
54 |
55 | firebase.initializeApp(config);
56 |
57 | this.platform.ready().then(() => {
58 | this.admob.banner.remove();
59 | // Ads section
60 | let adId;
61 | if(this.platform.is('android')) {
62 | adId = '$R_ADMOB_BANNER_ANDROID';
63 | } else if (this.platform.is('ios')) {
64 | adId = '$R_ADMOB_BANNER_IOS';
65 | }
66 |
67 | this.admob.banner.config({
68 | id: adId,
69 | isTesting: false,
70 | autoShow: true
71 | });
72 |
73 | this.admob.banner.prepare().then((result)=>{
74 | console.log(result);
75 | },(reason)=>{
76 | Pro.monitoring.handleNewError(reason);
77 | });
78 |
79 | let TIME_IN_MS_INTERSITIAL = 120000;
80 | this.intersitial = setTimeout( () => {
81 | let interstitialId ;
82 | if(this.platform.is('android')) {
83 | adId = '$R_ADMOB_BANNER_ANDROID';
84 | interstitialId = '$R_ADMOB_INTERSITIAL_ANDROID';
85 | } else if (this.platform.is('ios')) {
86 | adId = '$R_ADMOB_BANNER_IOS';
87 | interstitialId = '$R_ADMOB_INTERSITIAL_IOS';
88 | }
89 |
90 | this.admob.interstitial.config({
91 | id: interstitialId,
92 | isTesting: false,
93 | autoShow: true,
94 | });
95 | this.admob.interstitial.prepare().then((result)=>{
96 | console.log(result);
97 | },(reason)=>{
98 | Pro.monitoring.handleNewError(reason);
99 | });
100 | }, TIME_IN_MS_INTERSITIAL);
101 |
102 | //Subscribe on pause
103 | this.platform.pause.subscribe(() => {
104 | clearTimeout(this.intersitial);
105 | });
106 | //Subscribe on resume
107 | this.platform.resume.subscribe(() => {
108 | this.admob.banner.remove();
109 | // Ads section
110 | let adId;
111 | if(this.platform.is('android')) {
112 | adId = '$R_ADMOB_BANNER_ANDROID';
113 | } else if (this.platform.is('ios')) {
114 | adId = '$R_ADMOB_BANNER_IOS';
115 | }
116 |
117 | this.admob.banner.config({
118 | id: adId,
119 | isTesting: false,
120 | autoShow: true
121 | });
122 |
123 | this.admob.banner.prepare().then((result)=>{
124 | console.log(result);
125 | },(reason)=>{
126 | Pro.monitoring.handleNewError(reason);
127 | });
128 |
129 | this.intersitial = setTimeout( () => {
130 | let interstitialId ;
131 | if(this.platform.is('android')) {
132 | adId = '$R_ADMOB_BANNER_ANDROID';
133 | interstitialId = '$R_ADMOB_INTERSITIAL_ANDROID';
134 | } else if (this.platform.is('ios')) {
135 | adId = '$R_ADMOB_BANNER_IOS';
136 | interstitialId = '$R_ADMOB_INTERSITIAL_IOS';
137 | }
138 |
139 | this.admob.interstitial.config({
140 | id: interstitialId,
141 | isTesting: false,
142 | autoShow: true,
143 | });
144 | this.admob.interstitial.prepare().then((result)=>{
145 | console.log(result);
146 | },(reason)=>{
147 | Pro.monitoring.handleNewError(reason);
148 | });
149 | }, TIME_IN_MS_INTERSITIAL);
150 | });
151 | });
152 | }
153 |
154 | initializeApp() {
155 | this.platform.ready().then(() => {
156 | // Okay, so the platform is ready and our plugins are available.
157 | // Here you can do any higher level native things you might need.
158 | this.statusBar.styleDefault();
159 | this.splashScreen.hide();
160 | });
161 | }
162 |
163 | openPage(page) {
164 | // Reset the content nav to have just this page
165 | // we wouldn't want the back button to show in this scenario
166 | this.nav.setRoot(page.component);
167 | }
168 | }
169 |
--------------------------------------------------------------------------------
/src/pages/about/about.html:
--------------------------------------------------------------------------------
1 |
7 |
8 |
9 |
10 |
13 | Sobre las fiestas
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 | Historia
25 |
26 |
27 |
28 |
29 | Suelen comenzar el último fin de semana de agosto y acaban el primer fin de semana de septiembre. Se vinculan a la tradición
30 | de las fiestas de la cosecha. La advocación a la Virgen de la Oliva es muy antigua: al menos desde 1245 la ermita de su nombre
31 | tenía dotación de tierras en nuestra villa.
32 | Durante los días que duran las Fiestas Mayores, además de las celebraciones religiosas,
33 | existe una gran variedad de actos: encierro de reses bravas y feria taurina, actividades deportivas, verbenas populares,
34 | juegos para niños y entretenimientos para la Tercera Edad.
35 |
36 |
37 | Fuente:
38 | http://bit.ly/2LUlvDd
39 |
40 |
41 |
42 |
43 |
44 | Este año...
45 |
46 |
47 |
48 | En 2018 se celebrarán del 1 al 9 de septiembre. La advocación a la Virgen de la Oliva es muy antigua:
49 | al menos desde 1245 la ermita de su nombre tenía dotación de tierras en nuestra villa.
50 | Durante los días que duran las Fiestas Mayores, además de las celebraciones religiosas,
51 | existe una gran variedad de actos: encierro de reses bravas y feria taurina, actividades deportivas, verbenas populares,
52 | juegos para niños y entretenimientos para la Tercera Edad. Todo ello está rodeado de un ambiente excepcional y
53 | de la tradicional hospitalidad de los ejeanos.
54 |
55 |
56 | Fuente:
57 | http://bit.ly/2ObTmEg
58 |
59 |
60 |
61 |
62 |
63 | Interpeñas Ejea
64 |
65 |
66 |
67 | Interpeñas Ejea es una asociación que creada para promover actividades festivas, de ocio y culturales,
68 | entre los jóvenes de nuestra localidad.
69 | Durante las fiestas (no solo en las de la Virgen de la Oliva), interpeñas Ejea organiza diferentes eventos de todo tipo, con
70 | el fin de promover actividades entre los jóvenes. Siendo socio de interpeñas puedes beneficiarte de numerosos descuentos en varios
71 | establecimientos y eventos de todo tipo que se realizan en Ejea de los Caballeros.
72 |
73 |
74 | Fuente:
75 | http://www.interpenasejea.com/
76 |
77 |
78 |
79 |
80 |
81 | Información de interés
82 |
83 |
84 |
85 | Los conciertos y bailes del Casino España forman parte de la programación festiva de esa entidad.
86 | La entrada sólo es gratuita para los socios.
87 |
88 | Los festejos taurinos de la Plaza de Toros han sido organizados por la empresa TAUROEJEA, con
89 | la colaboración del Ayuntamiento de Ejea.
90 |
91 | El miércoles, día 5 de septiembre, los precios de las ferias tendrán un descuento del 50% respecto a
92 | sus precios habituales, con la colaboración de la Asociación Profesional de Industriales Feriantes
93 | de Zaragoza.
94 |
95 | Queda terminantemente prohibido hacer fuego en cualquier espacio abierto, de acuerdo con
96 | lo establecido en la legislación vigente. La misma prohibición se establece respecto al uso de
97 | petardos.
98 |
99 | Los itinerarios que los Cabezudos seguirán cada día se expondrán en la puerta de la Policía Local
100 | o podrán consultarse en la web municipal.
101 |
102 | Durante las Verbenas Populares saldrán Toros de Fuego por los itinerarios reseñados en el
103 | programa, lo que se informa al público a efectos de que no se aparquen coches en dichas calles
104 | por riesgo de sufrir daños con las cargas de fuego de los toros. Lo mismo se avisa para el caso de
105 | las personas.
106 |
107 | Ante las adversidades meteorológicas, en el caso de producirse grandes lluvias y siempre que
108 | puedan preverse con la suficiente antelación para hacer efectivos los cambios de infraestructuras
109 | y equipos, los espectáculos musicales se trasladarán al Recinto Ferial y los espectáculos infantiles
110 | al Pabellón Polideportivo de La Llana.
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 | Durante todo el día...
119 |
120 |
121 |
122 | Durante todo el día actuarán las Charangas Artistas del Gremio, Los Zagales del Gallego y Rivascor.
123 |
124 | Con salidas desde el Parque Central, un tren infantil recorrerá las distintas calles de la localidad.
125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 |
--------------------------------------------------------------------------------
/config.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | Fiestas de Ejea
4 | Guía de fiestas de Ejea y otras utilidades
5 | Raúl Piracés
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
--------------------------------------------------------------------------------
/privacy.html:
--------------------------------------------------------------------------------
1 | POLÍTICA DE PROTECCIÓN DE DATOS DE CARÁCTER PERSONAL
2 | Esta política de privacidad ha sido redactada al amparo de lo dispuesto en el REGLAMENTO (UE) 2016/679 DEL PARLAMENTO EUROPEO Y DEL CONSEJO de 27 de abril de 2016 relativo a la protección de las personas físicas en lo que respecta al tratamiento de datos personales y a la libre circulación de estos datos (RGPD), en la Ley Orgánica 15/1999, de 13 de diciembre, de Protección de Datos de Carácter Personal (LOPD) y en su reglamento de desarrollo.
3 |
4 | Identificación del titular de la aplicación
5 | El titular de esta aplicación es Raúl Piracés Alastuey con D.N.I. 73026929C, con domicilio a estos efectos en Ejea de los Caballeros (España), y con dirección de correo electrónico:
6 | raul.piraces@gmail.com
7 |
8 | ¿Quién es el responsable de los datos personales que recabamos en esta web?
9 | El responsable del tratamiento es Raúl Piracés Alastuey con D.N.I. 73026929C, con domicilio a estos efectos en Ejea de los Caballeros (España), y con dirección de correo electrónico:
10 | raul.piraces@gmail.com
11 |
12 | ¿Qué datos vamos a obtener de ti?
13 | En nuestra aplicación los únicos datos personales que podremos recabar de ti son los que nos facilite tu dispositivo: identificador único, hardware, modelo, version del sistema operativo, serial del dispositivo, plataforma, modelo y fabricante.
14 |
15 | ¿Cuál es la finalidad de este tratamiento de datos?
16 | Trataremos tus datos personales para las siguientes finalidades:
17 | • Mantener tu usuario activo en nuestros servicios.
18 |
19 | ¿Cuál es la base jurídica de estos tratamientos de datos?
20 | La base jurídica es el interés legítimo en abrir tu cuenta de usuario en nuestros servicios al acceder.
21 |
22 | ¿Durante cuánto tiempo se van a conservar los datos?
23 | Conservaremos tus datos personales mientras hagas uso de nuestros servicios y hasta que solicites la baja.
24 | En cualquier momento podrás escribirnos para solicitar la supresión de tus datos o la baja de tu usuario; en ese caso, tus datos personales quedarán bloqueados durante 3 años, a disposición exclusiva de Jueces y Tribunales, el Ministerio Fiscal, la Agencia Española de Protección de Datos y demás autoridades y Administraciones Públicas competentes, para resolver cualquier cuestión o responsabilidad relacionada con el tratamiento de tus datos o con el ejercicio de acciones legales, reclamaciones o consultas posteriores, durante el plazo de prescripción de las mismas.
25 |
26 | Destinatario o categorías de destinatarios de los datos
27 | Tus datos personales no serán facilitados ni cedidos a ninguna entidad ajena a este portal.
28 | Utilizamos los servicios de una compañía para alojar las bases de datos de este servicio: Firebase de Google (Alphabet Inc.), EEUU.
29 |
30 | Transferencias internacionales de datos
31 | No realizamos transferencias internacionales de datos de ningún tipo ni categoría.
32 |
33 | ¿Qué derechos asisten al usuario?
34 | El RGPD te otorga los siguientes derechos, que podrás ejercerlos enviando un correo electrónico a raul.piraces@gmail.com.
35 |
36 | Derecho de acceso
37 | Tienes derecho a obtener confirmación de si se están tratando o no datos personales que te conciernen y, en tal caso, derecho de acceso a los datos personales y a la información relacionada con su tratamiento. Tienes derecho a obtener una copia de los datos personales objeto de tratamiento.
38 |
39 | Derecho de rectificación
40 | Tienes derecho a obtener sin dilación indebida la rectificación de los datos personales inexactos que te conciernen. Teniendo en cuenta los fines del tratamiento, tendrás derecho a que se completen los datos personales que sean incompletos.
41 |
42 | Derecho de supresión
43 | Tienes derecho a obtener sin dilación indebida la supresión de los datos personales que te conciernen.
44 | Estamos obligados a suprimir sin dilación indebida los datos personales cuando concurra alguna de las circunstancias siguientes:
45 | a) los datos personales ya no sean necesarios en relación con los fines para los que fueron recogidos o tratados de otro modo;
46 | b) el interesado retire el consentimiento prestado para fines específicos o el consentimiento expreso prestado para el tratamiento de categorías especiales de datos, como los que revelen sus opiniones políticas, mientras este tratamiento no se base en otro fundamento jurídico;
47 | c) el interesado se oponga al tratamiento por motivos relacionados con su situación particular y no prevalezcan otros motivos legítimos para el tratamiento;
48 | d) los datos personales hayan sido tratados ilícitamente;
49 | e) los datos personales deban suprimirse para el cumplimiento de una obligación legal establecida en el Derecho de la Unión o de los Estados miembros que se aplique al responsable del tratamiento.
50 | No será aplicable la obligación de supresión de los datos personales cuando el tratamiento sea necesario para:
51 | a) ejercer el derecho a la libertad de expresión e información;
52 | b) el cumplimiento de una obligación legal que requiera el tratamiento de datos impuesta por el Derecho de la Unión o de los Estados miembros que se aplique al responsable del tratamiento;
53 | c) el cumplimiento de una misión realizada en interés público o en el ejercicio de poderes públicos conferidos al responsable;
54 | d) con fines de archivo en interés público, fines de investigación científica o histórica o fines estadísticos, en la medida en que el derecho a la supresión pudiera hacer imposible u obstaculizar gravemente el logro de los objetivos de dicho tratamiento;
55 | e) para la formulación, el ejercicio o la defensa de reclamaciones.
56 |
57 | Limitación del tratamiento
58 | Tienes derecho a obtener la limitación del tratamiento de los datos cuando se cumpla alguna de las condiciones siguientes:
59 | a) Impugnes la exactitud de los datos personales, durante un plazo que nos permita verificar la exactitud de los mismos; b) El tratamiento sea ilícito y te opongas a la supresión de los datos personales y solicites en su lugar la limitación de su uso; c) No necesitemos los datos personales para los fines del tratamiento, pero los necesites para la formulación, el ejercicio o la defensa de reclamaciones; d) Te hayas opuesto al tratamiento por motivos relacionados con tu situación particular, mientras se verifica si los motivos legítimos como responsable del tratamiento prevalecen sobre los del interesado.
60 |
61 | Portabilidad de los datos
62 | Tienes derecho a recibir los datos personales que te incumban, en un formato estructurado, de uso común y lectura mecánica.
63 |
64 | Oposición al tratamiento
65 | Tienes derecho a oponerte en cualquier momento, por motivos relacionados con tu situación particular, a que datos personales que te conciernan sean objeto de un tratamiento basado en lo dispuesto en el artículo 6, apartado 1, letras e) o f) del RGPD. Dejaremos de tratar los datos personales, salvo que acreditemos motivos legítimos imperiosos para el tratamiento que prevalezcan sobre los intereses, los derechos y las libertades del interesado, o para la formulación, el ejercicio o la defensa de reclamaciones.
66 |
67 | Revocación del consentimiento
68 | Tienes derecho a retirar en cualquier momento el consentimiento que nos diste para tratar tus datos personales.
69 |
70 | Reclamación ante las autoridades de protección de datos
71 | Tienes derechos a reclamar ante las autoridades de control en materia de protección de datos si consideras que tus datos personales no están siendo tratados de forma correcta.
72 |
73 | Tratamiento de datos de menores de edad
74 | Nuestros servicios deben ser utilizados por mayores de 14 años, por lo que en el caso de que no tengas esta edad deberás abstenerte de utilizarlos.
75 | Podremos requerir documentación oficial para acreditar la edad.
76 |
--------------------------------------------------------------------------------
/src/lock/ionic3-calendar-en/src/calendar/calendar.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"file":"calendar.js","sourceRoot":"","sources":["calendar.ts"],"names":[],"mappings":"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"}
--------------------------------------------------------------------------------
/src/lock/ionic3-calendar-en/src/calendar/calendar.ts:
--------------------------------------------------------------------------------
1 | import { Component, Input, Output, EventEmitter } from '@angular/core';
2 | import * as moment from 'moment';
3 | import * as _ from "lodash";
4 |
5 | @Component({
6 | selector: 'ion-calendar',
7 | template: `
8 |
9 |
10 |
11 |
12 |
13 |
14 |
\n \n \n \n \n \n\n \n {{head}}\n \n\n \n \n {{day.date}}\n \n \n \n\n \n"
238 | }),
239 | __metadata("design:paramtypes", [])
240 | ], Calendar);
241 | export { Calendar };
242 | //# sourceMappingURL=calendar.js.map
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | Apache License
2 | Version 2.0, January 2004
3 | http://www.apache.org/licenses/
4 |
5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
6 |
7 | 1. Definitions.
8 |
9 | "License" shall mean the terms and conditions for use, reproduction,
10 | and distribution as defined by Sections 1 through 9 of this document.
11 |
12 | "Licensor" shall mean the copyright owner or entity authorized by
13 | the copyright owner that is granting the License.
14 |
15 | "Legal Entity" shall mean the union of the acting entity and all
16 | other entities that control, are controlled by, or are under common
17 | control with that entity. For the purposes of this definition,
18 | "control" means (i) the power, direct or indirect, to cause the
19 | direction or management of such entity, whether by contract or
20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the
21 | outstanding shares, or (iii) beneficial ownership of such entity.
22 |
23 | "You" (or "Your") shall mean an individual or Legal Entity
24 | exercising permissions granted by this License.
25 |
26 | "Source" form shall mean the preferred form for making modifications,
27 | including but not limited to software source code, documentation
28 | source, and configuration files.
29 |
30 | "Object" form shall mean any form resulting from mechanical
31 | transformation or translation of a Source form, including but
32 | not limited to compiled object code, generated documentation,
33 | and conversions to other media types.
34 |
35 | "Work" shall mean the work of authorship, whether in Source or
36 | Object form, made available under the License, as indicated by a
37 | copyright notice that is included in or attached to the work
38 | (an example is provided in the Appendix below).
39 |
40 | "Derivative Works" shall mean any work, whether in Source or Object
41 | form, that is based on (or derived from) the Work and for which the
42 | editorial revisions, annotations, elaborations, or other modifications
43 | represent, as a whole, an original work of authorship. For the purposes
44 | of this License, Derivative Works shall not include works that remain
45 | separable from, or merely link (or bind by name) to the interfaces of,
46 | the Work and Derivative Works thereof.
47 |
48 | "Contribution" shall mean any work of authorship, including
49 | the original version of the Work and any modifications or additions
50 | to that Work or Derivative Works thereof, that is intentionally
51 | submitted to Licensor for inclusion in the Work by the copyright owner
52 | or by an individual or Legal Entity authorized to submit on behalf of
53 | the copyright owner. For the purposes of this definition, "submitted"
54 | means any form of electronic, verbal, or written communication sent
55 | to the Licensor or its representatives, including but not limited to
56 | communication on electronic mailing lists, source code control systems,
57 | and issue tracking systems that are managed by, or on behalf of, the
58 | Licensor for the purpose of discussing and improving the Work, but
59 | excluding communication that is conspicuously marked or otherwise
60 | designated in writing by the copyright owner as "Not a Contribution."
61 |
62 | "Contributor" shall mean Licensor and any individual or Legal Entity
63 | on behalf of whom a Contribution has been received by Licensor and
64 | subsequently incorporated within the Work.
65 |
66 | 2. Grant of Copyright License. Subject to the terms and conditions of
67 | this License, each Contributor hereby grants to You a perpetual,
68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable
69 | copyright license to reproduce, prepare Derivative Works of,
70 | publicly display, publicly perform, sublicense, and distribute the
71 | Work and such Derivative Works in Source or Object form.
72 |
73 | 3. Grant of Patent License. Subject to the terms and conditions of
74 | this License, each Contributor hereby grants to You a perpetual,
75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable
76 | (except as stated in this section) patent license to make, have made,
77 | use, offer to sell, sell, import, and otherwise transfer the Work,
78 | where such license applies only to those patent claims licensable
79 | by such Contributor that are necessarily infringed by their
80 | Contribution(s) alone or by combination of their Contribution(s)
81 | with the Work to which such Contribution(s) was submitted. If You
82 | institute patent litigation against any entity (including a
83 | cross-claim or counterclaim in a lawsuit) alleging that the Work
84 | or a Contribution incorporated within the Work constitutes direct
85 | or contributory patent infringement, then any patent licenses
86 | granted to You under this License for that Work shall terminate
87 | as of the date such litigation is filed.
88 |
89 | 4. Redistribution. You may reproduce and distribute copies of the
90 | Work or Derivative Works thereof in any medium, with or without
91 | modifications, and in Source or Object form, provided that You
92 | meet the following conditions:
93 |
94 | (a) You must give any other recipients of the Work or
95 | Derivative Works a copy of this License; and
96 |
97 | (b) You must cause any modified files to carry prominent notices
98 | stating that You changed the files; and
99 |
100 | (c) You must retain, in the Source form of any Derivative Works
101 | that You distribute, all copyright, patent, trademark, and
102 | attribution notices from the Source form of the Work,
103 | excluding those notices that do not pertain to any part of
104 | the Derivative Works; and
105 |
106 | (d) If the Work includes a "NOTICE" text file as part of its
107 | distribution, then any Derivative Works that You distribute must
108 | include a readable copy of the attribution notices contained
109 | within such NOTICE file, excluding those notices that do not
110 | pertain to any part of the Derivative Works, in at least one
111 | of the following places: within a NOTICE text file distributed
112 | as part of the Derivative Works; within the Source form or
113 | documentation, if provided along with the Derivative Works; or,
114 | within a display generated by the Derivative Works, if and
115 | wherever such third-party notices normally appear. The contents
116 | of the NOTICE file are for informational purposes only and
117 | do not modify the License. You may add Your own attribution
118 | notices within Derivative Works that You distribute, alongside
119 | or as an addendum to the NOTICE text from the Work, provided
120 | that such additional attribution notices cannot be construed
121 | as modifying the License.
122 |
123 | You may add Your own copyright statement to Your modifications and
124 | may provide additional or different license terms and conditions
125 | for use, reproduction, or distribution of Your modifications, or
126 | for any such Derivative Works as a whole, provided Your use,
127 | reproduction, and distribution of the Work otherwise complies with
128 | the conditions stated in this License.
129 |
130 | 5. Submission of Contributions. Unless You explicitly state otherwise,
131 | any Contribution intentionally submitted for inclusion in the Work
132 | by You to the Licensor shall be under the terms and conditions of
133 | this License, without any additional terms or conditions.
134 | Notwithstanding the above, nothing herein shall supersede or modify
135 | the terms of any separate license agreement you may have executed
136 | with Licensor regarding such Contributions.
137 |
138 | 6. Trademarks. This License does not grant permission to use the trade
139 | names, trademarks, service marks, or product names of the Licensor,
140 | except as required for reasonable and customary use in describing the
141 | origin of the Work and reproducing the content of the NOTICE file.
142 |
143 | 7. Disclaimer of Warranty. Unless required by applicable law or
144 | agreed to in writing, Licensor provides the Work (and each
145 | Contributor provides its Contributions) on an "AS IS" BASIS,
146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
147 | implied, including, without limitation, any warranties or conditions
148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
149 | PARTICULAR PURPOSE. You are solely responsible for determining the
150 | appropriateness of using or redistributing the Work and assume any
151 | risks associated with Your exercise of permissions under this License.
152 |
153 | 8. Limitation of Liability. In no event and under no legal theory,
154 | whether in tort (including negligence), contract, or otherwise,
155 | unless required by applicable law (such as deliberate and grossly
156 | negligent acts) or agreed to in writing, shall any Contributor be
157 | liable to You for damages, including any direct, indirect, special,
158 | incidental, or consequential damages of any character arising as a
159 | result of this License or out of the use or inability to use the
160 | Work (including but not limited to damages for loss of goodwill,
161 | work stoppage, computer failure or malfunction, or any and all
162 | other commercial damages or losses), even if such Contributor
163 | has been advised of the possibility of such damages.
164 |
165 | 9. Accepting Warranty or Additional Liability. While redistributing
166 | the Work or Derivative Works thereof, You may choose to offer,
167 | and charge a fee for, acceptance of support, warranty, indemnity,
168 | or other liability obligations and/or rights consistent with this
169 | License. However, in accepting such obligations, You may act only
170 | on Your own behalf and on Your sole responsibility, not on behalf
171 | of any other Contributor, and only if You agree to indemnify,
172 | defend, and hold each Contributor harmless for any liability
173 | incurred by, or claims asserted against, such Contributor by reason
174 | of your accepting any such warranty or additional liability.
175 |
176 | END OF TERMS AND CONDITIONS
177 |
178 | APPENDIX: How to apply the Apache License to your work.
179 |
180 | To apply the Apache License to your work, attach the following
181 | boilerplate notice, with the fields enclosed by brackets "[]"
182 | replaced with your own identifying information. (Don't include
183 | the brackets!) The text should be enclosed in the appropriate
184 | comment syntax for the file format. We also recommend that a
185 | file or class name and description of purpose be included on the
186 | same "printed page" as the copyright notice for easier
187 | identification within third-party archives.
188 |
189 | Copyright 2018 Raúl Piracés Alastuey
190 |
191 | Licensed under the Apache License, Version 2.0 (the "License");
192 | you may not use this file except in compliance with the License.
193 | You may obtain a copy of the License at
194 |
195 | http://www.apache.org/licenses/LICENSE-2.0
196 |
197 | Unless required by applicable law or agreed to in writing, software
198 | distributed under the License is distributed on an "AS IS" BASIS,
199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
200 | See the License for the specific language governing permissions and
201 | limitations under the License.
--------------------------------------------------------------------------------
/src/pages/list/list.ts:
--------------------------------------------------------------------------------
1 | import { Component } from '@angular/core';
2 | import { NavController, NavParams, LoadingController } from 'ionic-angular';
3 | import { Storage } from '@ionic/storage';
4 | import { Md5 } from 'ts-md5/dist/md5';
5 | import moment from 'moment';
6 |
7 | import { EventsService } from '../../services/events';
8 |
9 | @Component({
10 | selector: 'page-list',
11 | templateUrl: 'list.html'
12 | })
13 | export class ListPage {
14 | myDate: any;
15 | category: any;
16 | text: any;
17 |
18 | selectedDate: any;
19 | selectedCategory: any;
20 | selectedText: string = "";
21 |
22 | lastFilter: any;
23 | starred: boolean;
24 |
25 | hash: any;
26 | hashEvent: any;
27 |
28 | showEvents: any = [];
29 | allEvents: any = [];
30 |
31 | constructor(public navCtrl: NavController, public navParams: NavParams, public events: EventsService, public storage: Storage, public loadingController: LoadingController) {
32 | let loading = this.loadingController.create({ content: "Cargando..." });
33 | loading.present();
34 | this.allEvents = events.allEvents;
35 | this.keys().then(data => {
36 | events.allEvents.forEach(original => {
37 | let isStarred = false;
38 | data.forEach(element => {
39 | let key = element.replace('setting:', '');
40 | let hash = Md5.hashStr(JSON.stringify(original)).toString();
41 | if (key == hash) {
42 | let mainImage = this.getMainImage(original);
43 | isStarred = true;
44 | this.showEvents.push({ starred: true, mainImage: mainImage, event: original });
45 | }
46 | });
47 | if (!isStarred) {
48 | this.showEvents.push({ starred: false, mainImage: this.getMainImage(original), event: original })
49 | }
50 | });
51 | loading.dismiss();
52 | });
53 | }
54 |
55 | getMainImage(original) {
56 | let mainImage = "";
57 | return mainImage;
58 | }
59 |
60 | categoryFilter(category, change, load) {
61 | if(this.lastFilter == "category" && this.showEvents.length == 0){
62 | this.lastFilter = undefined;
63 | }
64 | this.category = category;
65 | let loading = this.loadingController.create({ content: "Cargando..." });
66 | if(this.lastFilter != "text" && load && category != null){
67 | loading.present();
68 | }
69 | let eventsFiltered = typeof this.lastFilter == "undefined" ? this.allEvents : this.generateCompleteEvent(this.showEvents);
70 | this.showEvents = [];
71 | eventsFiltered.forEach(element => {
72 | if (element.type == category) {
73 | this.isStarred(element).then(result => {
74 | if(result != null){
75 | result = true;
76 | }
77 | this.showEvents.push({ starred: result, mainImage: this.getMainImage(element), event: element });
78 | });
79 | }
80 | });
81 |
82 | // Otros filtros
83 | if(!change){
84 | this.lastFilter = "category";
85 | }
86 | if(this.lastFilter != "date" && typeof this.myDate != "undefined" && this.myDate.toString().length != 0){
87 | this.dateFilter(this.myDate, true, true);
88 | }
89 | if(this.lastFilter != "text" && typeof this.text != "undefined" && this.text.toString().length != 0){
90 | this.textFilter(this.text, true);
91 | }
92 | if(this.lastFilter != "text" && load && category != null){
93 | loading.dismiss();
94 | }
95 | }
96 |
97 | dateFilter(myDate, change, load) {
98 | if(this.lastFilter == "date" && this.showEvents.length == 0){
99 | this.lastFilter = undefined;
100 | }
101 | this.myDate = myDate;
102 | let loading = this.loadingController.create({ content: "Cargando..." });
103 | if(this.lastFilter != "text" && load && myDate != null){
104 | loading.present();
105 | }
106 | let eventsFiltered = typeof this.lastFilter == "undefined" ? this.allEvents : this.generateCompleteEvent(this.showEvents);
107 | this.showEvents = [];
108 | eventsFiltered.forEach(element => {
109 | if ((myDate.day == element.start.getDate() && element.start.getHours() >=5 && element.start.getMonth() == myDate.month - 1) ||
110 | (this.getTomorrow(myDate.day, myDate.month, new Date().getFullYear()) == element.start.getDate() && element.start.getHours() <=5 && this.getMonth(myDate.date, myDate.month, new Date().getFullYear() == myDate.month - 1))) {
111 | this.isStarred(element).then(result => {
112 | if(result != null){
113 | result = true;
114 | }
115 | this.showEvents.push({ starred: result, mainImage: this.getMainImage(element), event: element });
116 | });
117 | }
118 | });
119 |
120 | // Otros filtros
121 | if(!change){
122 | this.lastFilter = "date";
123 | }
124 | if(this.lastFilter != "category" && typeof this.category != "undefined" && this.category.toString().length != 0){
125 | this.categoryFilter(this.category, true, true);
126 | }
127 | if(this.lastFilter != "text" && typeof this.text != "undefined" && this.text.toString().length != 0){
128 | this.textFilter(this.text, true);
129 | }
130 | if(this.lastFilter != "text" && load && myDate != null){
131 | loading.dismiss();
132 | }
133 | }
134 |
135 | textFilter(text, change) {
136 | if(this.lastFilter == "text" && this.showEvents.length == 0){
137 | this.lastFilter = undefined;
138 | }
139 | this.text = text.value;
140 | if (typeof text.value != "undefined" && text.value.length > 3) {
141 | let eventsFiltered = typeof this.lastFilter == "undefined" ? this.allEvents : this.generateCompleteEvent(this.showEvents);
142 | this.showEvents = [];
143 | eventsFiltered.forEach(element => {
144 | var re = new RegExp(text.value, 'i');
145 | if (element.title.match(re)) {
146 | this.isStarred(element).then(result => {
147 | if(result != null){
148 | result = true;
149 | }
150 | this.showEvents.push({ starred: result, mainImage: this.getMainImage(element), event: element });
151 | });
152 | }
153 | });
154 | } else if(typeof text.value != "undefined" && text.value.length == 0){
155 | this.lastFilter = undefined;
156 | }
157 |
158 | // Otros filtros
159 | if(!change && typeof text.value != "undefined" && text.value.length > 3){
160 | this.lastFilter = "text";
161 | }
162 | if(this.lastFilter != "category" && typeof this.category != "undefined" && this.category.toString().length != 0){
163 | this.categoryFilter(this.category, true, false);
164 | }
165 | if(this.lastFilter != "date" && typeof this.myDate != "undefined" && this.myDate.toString().length != 0){
166 | this.dateFilter(this.myDate, true, false);
167 | }
168 | }
169 |
170 | deleteFilters(reconstruct) {
171 | this.showEvents = [];
172 | this.selectedCategory = null;
173 | this.selectedDate = null;
174 | this.selectedText = null;
175 | if(reconstruct){
176 | this.reconstruct();
177 | }
178 | }
179 |
180 | async isStarred(item) {
181 | let hash = Md5.hashStr(JSON.stringify(item)).toString();
182 | return this.get(hash);
183 | }
184 |
185 | starEvent(item) {
186 | let hash = Md5.hashStr(JSON.stringify(item.event)).toString();
187 | this.hash = hash;
188 | this.hashEvent = item.event;
189 | this.set(hash, hash).then(result =>
190 | {
191 | this.showEvents.forEach(element => {
192 | if(element.event == item.event){
193 | element.starred = true;
194 | }
195 | });
196 | this.allEvents.forEach(element => {
197 | if(element.event == item.event){
198 | element.starred = true;
199 | }
200 | });
201 | // let scheduledDate = item.event.start;
202 | // scheduledDate.setHours(scheduledDate.getHours() - 1);
203 | // this.localNotifications.schedule({
204 | // id: this.hash.toString(),
205 | // title: this.hashEvent.title.toString(),
206 | // text: 'El evento: "' + this.hashEvent.title.toString() + ' comienza en 1h',
207 | // trigger: {at: scheduledDate}
208 | // });
209 | }
210 | );
211 | }
212 |
213 | unstarEvent(item) {
214 | let hash = Md5.hashStr(JSON.stringify(item.event)).toString();
215 | this.remove(hash).then(result =>
216 | {
217 | this.showEvents.forEach(element => {
218 | if(element.event == item.event){
219 | element.starred = false;
220 | }
221 | });
222 | this.allEvents.forEach(element => {
223 | if(element.event == item.event){
224 | element.starred = false;
225 | }
226 | });
227 | // this.localNotifications.cancel(hash.toString());
228 | }
229 | );
230 | }
231 |
232 | generateCompleteEvent(array){
233 | let newArray = [];
234 | array.forEach(element => {
235 | newArray.push(element.event);
236 | });
237 | return newArray;
238 | }
239 |
240 | getTomorrow(date, month, year){
241 | var aux = moment({ year :year, month :month, day :date, hour :0, minute :0, second :0, millisecond :0});
242 | return aux.add('days', 1).date();
243 | }
244 |
245 | getMonth(date, month, year){
246 | var aux = moment({ year :year, month :month, day :date, hour :0, minute :0, second :0, millisecond :0});
247 | return aux.add('days', 1).month();
248 | }
249 |
250 | getYear(date, month, year){
251 | var aux = moment({ year :year, month :month, day :date, hour :0, minute :0, second :0, millisecond :0});
252 | return aux.add('days', 1).year();
253 | }
254 |
255 | reconstruct() {
256 | let loading = this.loadingController.create({ content: "Cargando..." });
257 | loading.present();
258 | this.showEvents = [];
259 | this.keys().then(data => {
260 | this.allEvents.forEach(original => {
261 | let isStarred = false;
262 | data.forEach(element => {
263 | let key = element.replace('setting:', '');
264 | let hash = Md5.hashStr(JSON.stringify(original)).toString();
265 | if (key == hash) {
266 | let mainImage = this.getMainImage(original);
267 | isStarred = true;
268 | this.showEvents.push({ starred: true, mainImage: mainImage, event: original });
269 | }
270 | });
271 | if (!isStarred) {
272 | this.showEvents.push({ starred: false, mainImage: this.getMainImage(original), event: original })
273 | }
274 | });
275 | loading.dismiss();
276 | });
277 | }
278 |
279 | yesterday() {
280 | let loading = this.loadingController.create({ content: "Cargando..." });
281 | loading.present();
282 | var currentDate = new Date();
283 | currentDate.setDate(currentDate.getDate() - 1);
284 | this.deleteFilters(false);
285 | this.showEvents = [];
286 | this.keys().then(data => {
287 | this.allEvents.forEach(original => {
288 | let isStarred = false;
289 | data.forEach(element => {
290 | let key = element.replace('setting:', '');
291 | let hash = Md5.hashStr(JSON.stringify(original)).toString();
292 | if (key == hash) {
293 | let mainImage = this.getMainImage(original);
294 | isStarred = true;
295 | if((currentDate.getDate() == original.start.getDate() && original.start.getHours() >=5 && currentDate.getMonth() == original.start.getMonth() && currentDate.getFullYear() == original.start.getFullYear())
296 | || (this.getTomorrow(currentDate.getDate(), currentDate.getMonth(), currentDate.getFullYear()) == original.start.getDate() && original.start.getHours() <=5
297 | && this.getMonth(currentDate.getDate(), currentDate.getMonth(), currentDate.getFullYear()) == original.start.getMonth()
298 | && this.getYear(currentDate.getDate(), currentDate.getMonth(), currentDate.getFullYear()) == original.start.getFullYear())){
299 | this.showEvents.push({ starred: true, mainImage: mainImage, event: original });
300 | }
301 | }
302 | });
303 | if (!isStarred) {
304 | if((currentDate.getDate() == original.start.getDate() && original.start.getHours() >=5 && currentDate.getMonth() == original.start.getMonth() && currentDate.getFullYear() == original.start.getFullYear())
305 | || (this.getTomorrow(currentDate.getDate(), currentDate.getMonth(), currentDate.getFullYear()) == original.start.getDate() && original.start.getHours() <=5
306 | && this.getMonth(currentDate.getDate(), currentDate.getMonth(), currentDate.getFullYear()) == original.start.getMonth()
307 | && this.getYear(currentDate.getDate(), currentDate.getMonth(), currentDate.getFullYear()) == original.start.getFullYear())){
308 | this.showEvents.push({ starred: false, mainImage: this.getMainImage(original), event: original });
309 | }
310 | }
311 | });
312 | loading.dismiss();
313 | });
314 | }
315 |
316 | today() {
317 | let loading = this.loadingController.create({ content: "Cargando..." });
318 | loading.present();
319 | var currentDate = new Date();
320 | this.deleteFilters(false);
321 | this.showEvents = [];
322 | this.keys().then(data => {
323 | this.allEvents.forEach(original => {
324 | let isStarred = false;
325 | data.forEach(element => {
326 | let key = element.replace('setting:', '');
327 | let hash = Md5.hashStr(JSON.stringify(original)).toString();
328 | if (key == hash) {
329 | let mainImage = this.getMainImage(original);
330 | isStarred = true;
331 | if((currentDate.getDate() == original.start.getDate() && original.start.getHours() >=5 && currentDate.getMonth() == original.start.getMonth() && currentDate.getFullYear() == original.start.getFullYear())
332 | || (this.getTomorrow(currentDate.getDate(), currentDate.getMonth(), currentDate.getFullYear()) == original.start.getDate() && original.start.getHours() <=5
333 | && this.getMonth(currentDate.getDate(), currentDate.getMonth(), currentDate.getFullYear()) == original.start.getMonth()
334 | && this.getYear(currentDate.getDate(), currentDate.getMonth(), currentDate.getFullYear()) == original.start.getFullYear())){
335 | this.showEvents.push({ starred: true, mainImage: mainImage, event: original });
336 | }
337 | }
338 | });
339 | if (!isStarred) {
340 | if((currentDate.getDate() == original.start.getDate() && original.start.getHours() >=5 && currentDate.getMonth() == original.start.getMonth() && currentDate.getFullYear() == original.start.getFullYear())
341 | || (this.getTomorrow(currentDate.getDate(), currentDate.getMonth(), currentDate.getFullYear()) == original.start.getDate() && original.start.getHours() <=5
342 | && this.getMonth(currentDate.getDate(), currentDate.getMonth(), currentDate.getFullYear()) == original.start.getMonth()
343 | && this.getYear(currentDate.getDate(), currentDate.getMonth(), currentDate.getFullYear()) == original.start.getFullYear())){
344 | this.showEvents.push({ starred: false, mainImage: this.getMainImage(original), event: original })
345 | }
346 | }
347 | });
348 | loading.dismiss();
349 | });
350 | }
351 |
352 | tomorrow() {
353 | let loading = this.loadingController.create({ content: "Cargando..." });
354 | loading.present();
355 | var currentDate = new Date();
356 | currentDate.setDate(currentDate.getDate() + 1);
357 | this.deleteFilters(false);
358 | this.showEvents = [];
359 | this.keys().then(data => {
360 | this.allEvents.forEach(original => {
361 | let isStarred = false;
362 | data.forEach(element => {
363 | let key = element.replace('setting:', '');
364 | let hash = Md5.hashStr(JSON.stringify(original)).toString();
365 | if (key == hash) {
366 | let mainImage = this.getMainImage(original);
367 | isStarred = true;
368 | if((currentDate.getDate() == original.start.getDate() && original.start.getHours() >=5 && currentDate.getMonth() == original.start.getMonth() && currentDate.getFullYear() == original.start.getFullYear())
369 | || (this.getTomorrow(currentDate.getDate(), currentDate.getMonth(), currentDate.getFullYear()) == original.start.getDate() && original.start.getHours() <=5
370 | && this.getMonth(currentDate.getDate(), currentDate.getMonth(), currentDate.getFullYear()) == original.start.getMonth()
371 | && this.getYear(currentDate.getDate(), currentDate.getMonth(), currentDate.getFullYear()) == original.start.getFullYear())){
372 | this.showEvents.push({ starred: true, mainImage: mainImage, event: original });
373 | }
374 | }
375 | });
376 | if (!isStarred) {
377 | if((currentDate.getDate() == original.start.getDate() && original.start.getHours() >=5 && currentDate.getMonth() == original.start.getMonth() && currentDate.getFullYear() == original.start.getFullYear())
378 | || (this.getTomorrow(currentDate.getDate(), currentDate.getMonth(), currentDate.getFullYear()) == original.start.getDate() && original.start.getHours() <=5
379 | && this.getMonth(currentDate.getDate(), currentDate.getMonth(), currentDate.getFullYear()) == original.start.getMonth()
380 | && this.getYear(currentDate.getDate(), currentDate.getMonth(), currentDate.getFullYear()) == original.start.getFullYear())){
381 | this.showEvents.push({ starred: false, mainImage: this.getMainImage(original), event: original })
382 | }
383 | }
384 | });
385 | loading.dismiss();
386 | });
387 | }
388 |
389 | customTrackBy(index: number, obj: any): any {
390 | return index;
391 | }
392 |
393 | public set(settingName, value) {
394 | return this.storage.set(`setting:${settingName}`, value);
395 | }
396 | public async get(settingName) {
397 | return await this.storage.get(`setting:${settingName}`);
398 | }
399 | public async remove(settingName) {
400 | return await this.storage.remove(`setting:${settingName}`);
401 | }
402 | public async keys() {
403 | return await this.storage.keys();
404 | }
405 | public clear() {
406 | this.storage.clear().then(() => {
407 | console.log('all keys cleared');
408 | });
409 | }
410 | }
411 |
--------------------------------------------------------------------------------