forked from ColibryDev/colibry
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathBorrow.js
executable file
·210 lines (174 loc) · 7.2 KB
/
Borrow.js
1
2
3
4
5
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
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
// On créé un index Easy Search pour la DB BOOKS_INFOS
// https://atmospherejs.com/matteodem/easy-search
BIIndex = new EasySearch.Index(
{
collection: BOOKS_INFOS,
fields: ['title', 'authors', 'publisher'],
engine: new EasySearch.MongoDB(),
defaultSearchOptions: {limit: 20}
}
);
if (Meteor.isClient) {
// Session pour savoir d'ou est effectuée la recherche. C'est lié au Radio box
Session.setDefault('SearchFrom', "fromHome");
Meteor.subscribe('allAvailableBooks');
Meteor.subscribe('UsersPublicInfos');
// Le code tout simple que je te propose pour afficher des cartes.
// Tout est là dans le package que j'ai ajouté : https://github.com/dburles/meteor-google-maps#examples
// A mon avis, on peut tout faire avec ca !
Template.mapUsers.helpers({
'usersCoordinates': function(){
// Récupère l'ID du livre choisi et sauvegarde dans un tableau les utilisateurs qui peuvent le prêter
// pour l'instant la fonction renvoie les coordonnées des utilisateurs qui peuvent prêter
// setting dans une session également au cas où une sytaxe paticulière demanderai l'appel d'une session plutôt que d'une fonction
var chosenBookId = Session.get('chosenBookSession');
console.log(chosenBookId);
// recupération des ID des users qui peuvent partager
var userWhoCanShare = [];
PHYSICAL_BOOKS.find({bookRef:chosenBookId, status:"1"}).forEach(function(element) {userWhoCanShare.push(element.bookOwner);});
Session.set('usersWhoShareSession',userWhoCanShare);
// recupération des coordonnées des users récupérés dans la ligne du dessus
var userWhoCanShareCoordinates = [];
Meteor.users.find({
_id: {
$in : userWhoCanShare
}
}).forEach(function(element) {
userWhoCanShareCoordinates.push({
lat : element.profile.address1.lat,
lng : element.profile.address1.lng
});
});
console.log(userWhoCanShareCoordinates);
Session.set('usersWhoShareCoordinatesSession',userWhoCanShareCoordinates);
return userWhoCanShareCoordinates;
},
mapUsersOptions: function() {
// Make sure the maps API has loaded
if (GoogleMaps.loaded()) {
// Map initialization options
return {
center: new google.maps.LatLng(45.498072,-73.570322),
zoom: 14
};
}
}
});
// https://developers.google.com/maps/documentation/javascript/examples/layer-fusiontables-simple
Template.mapUsers.onCreated(function(){
GoogleMaps.ready('mapUsers', function(map){
Session.get('usersWhoShareCoordinatesSession').forEach(function(coordinates){
new google.maps.Marker({
draggable: true,
animation: google.maps.Animation.DROP,
position: new google.maps.LatLng(coordinates.lat, coordinates.lng),
map: map.instance
});
});
});
});
Template.displayAvailableBooks.helpers({
// Fonctions pour montrer toutes les infos des livres de PHYSICAL_BOOKS qui ont un statut 1
'availableBooks': function(){
var differentBooks = [];
PHYSICAL_BOOKS.find({status:"1"}).forEach(function(element) {differentBooks.push(element.bookRef);});
// renvoi les infos des livres dont les id sont contenus dans le tableau précédent
return BOOKS_INFOS.find({_id:{ $in:differentBooks}});
}
});
Template.searchToBorrow.events({
// Recuperation de la valeur recherchée par l'utilisateur
'submit form': function(event){
event.preventDefault();
//passage à true de tryTosearch pour valider qu'une recherche est effectuée
Session.set('tryToSearch', true);
var tryToSearch = Session.get('tryToSearch');
console.log(tryToSearch);
var searchedBookVar1 = event.target.searchedBook.value;
// on met la valeur recherchée dans searchedBookSession pour ouvoir la rappeler ensuite avec un Get
Session.set('searchedBookSession',searchedBookVar1);
}
});
// Fonction qui renvoit l'index de BOOKS_INFOS. Cette fonction est utilisée dans la recherche
Template.searchToBorrow.helpers({
biIndex: function(){
return BIIndex;
},
//retourne les attributs de mon input easySearch
inputAttributes: function(){
return {'class':'form-control', 'placeholder':'Search for a book in your neighbourhood ...'};
},
//retourne les attributs de mon boutton EasySearch load more
moreButtonAttributes:function(){
return {'class':'btn btn-primary'};
},
// envoie l'information de quel radio button est sélectionné. Cette fonction permet à la carte de savoir ou centrer
fromWhere:function(){
var radioButtons = document.getElementsByName('borrowLoc');
for(var i = 0; i < 3; i++){
if(radioButtons[i].checked){
return radioButtons[i].id;}
}
}
});
Template.displaySearchedBooks.helpers({
searchInAllAvailableBooks: function() {
// Fonction pour montrer les llivres en base de donnée qui correspondent à la recherche par titre
// on récupère la valeur recherchée
var searchedBookVar2 = Session.get('searchedBookSession');
console.log(searchedBookVar2);
// on renvoie la liste des des livres dont le titre correspond
// la regex permet de ne pas tenir compte de la casse
return BOOKS_INFOS.find({title:{
$regex : new RegExp(searchedBookVar2, "i") }});
},
tryToSearch: function() {
return Session.get('tryToSearch');
}
});
Template.displaySearchedBooks.events({
'click .proposedBook': function(){
// si on clique sur un livre proposé suite à la recherche, la fonction met l'ID du livre de la DB informationBooks dans la variable selectedBook
var chosenBookId = this._id;
//Affiche l'ID BOOKS_INFOS du livre
console.log(chosenBookId);
Session.set('chosenBookSession',chosenBookId);
}
});
Template.displayChosenBook.helpers({
'myChosenBook': function(){
// Récupère l'ID du livre choisi par l'utilisateur (sur lequel on a cliqué)
var chosenBookId = Session.get('chosenBookSession');
// renvoie toutes les infos sur le livre
return BOOKS_INFOS.findOne({_id:chosenBookId});
},
'usersWhoShareIt': function(){
// Récupère l'ID du livre choisi par l'utilisateur (sur lequel on a cliqué) et renvoi la liste des physcal books correspondant
var chosenBookId = Session.get('chosenBookSession');
return PHYSICAL_BOOKS.find({bookRef:chosenBookId, status:"1"});
}
});
}
if (Meteor.isServer) {
// fonction publish qui renvoit la liste de tous les livres available, quel que soit l'utilisateur
Meteor.publish('allAvailableBooks',function(){
return PHYSICAL_BOOKS.find({status: "1"});
});
// Meteor Publish adresses (lat,lgn) des utillisateurs
Meteor.publish('UsersPublicInfos',function(){
/*Meteor.users.find().forEach(function(element) {
if (element.profile.address1 )
ADDRESSES.push({
_id : element._id
//add1Lat : element.profile.address1.lat,
//add1Lng : element.profile.address1.lng,
//add2Lat : element.profile.address2.lat,
//add2Lng : element.profile.address2.lng
});
});
console.log(ADDRESSES);*/
// Cela retourne tous les lat / lng des utilisateurs, sauf l'utilisateur actuel..
var currentUserId = this.userId;
return Meteor.users.find({_id:{$ne:currentUserId}},{fields:{'profile.address1.lat':1,'profile.address1.lng':1,'profile.address2.lat':1,'profile.address2.lng':1,}});
});
}