1 2class EventDb { 3 4 5 constructor (username, password) { 6 this.username = username 7 this.password = password 8 this.id = '' 9 } 10 11 12 auth () { 13 var data = JSON.stringify({ 14 "email": this.username, 15 "password": this.password 16 }) 17 18 var xhr = new XMLHttpRequest() 19 xhr.withCredentials = true 20 21 xhr.open("POST", "https://api.ionis.io/api/ionis/login", false) 22 xhr.setRequestHeader("Content-Type", "application/json") 23 24 xhr.send(data) 25 26 if (xhr.status === 200) { 27 let response = JSON.parse(xhr.responseText) 28 this.id = response.id 29 30 } 31 } 32 33 getCampus(schoolId) { 34 var xhr = new XMLHttpRequest() 35 36 let filter = { 37 where: { 38 schoolId: schoolId 39 }, 40 include: ['city'] 41 } 42 43 filter = encodeURIComponent(JSON.stringify(filter)) 44 45 xhr.open("GET", "https://api.ionis.io/api/establishments?access_token=" + this.id + "&filter=" + filter, false) 46 47 xhr.setRequestHeader("Content-Type", "application/json") 48 49 xhr.send() 50 51 if (xhr.status === 200) { 52 let response = JSON.parse(xhr.responseText) 53 return response 54 } 55 } 56 57 getEstablishments(schoolId, campus) { 58 var xhr = new XMLHttpRequest() 59 60 let arrayFilter = [] 61 62 if (campus.length > 0) { 63 for (let i = 0; i < campus.length; i++) { 64 arrayFilter.push( 65 { and: [{ schoolId: schoolId }, { cityId: campus[i] }] } 66 ) 67 } 68 } else { 69 arrayFilter.push( 70 { and: [{ schoolId: schoolId }] } 71 ) 72 } 73 74 let filter = { 75 where: { 76 or: arrayFilter 77 } 78 } 79 80 filter = encodeURIComponent(JSON.stringify(filter)) 81 82 xhr.open("GET", "https://api.ionis.io/api/establishments?access_token=" + this.id + "&filter=" + filter, false) 83 84 xhr.setRequestHeader("Content-Type", "application/json") 85 86 xhr.send() 87 88 if (xhr.status === 200) { 89 let response = JSON.parse(xhr.responseText) 90 return response 91 } 92 } 93 94 getEvents(count = 2, schoolId = '', campus = [], types = [], labels = []) { 95 96 let establishments = this.getEstablishments(schoolId, campus) 97 var xhr = new XMLHttpRequest() 98 99 let arrayFilter = [] 100 101 for (let i = 0; i < establishments.length; i++) { 102 for (let j = 0; j < types.length; j++) { 103 let today = new Date() 104 let newDate = new Date() 105 let typeId = '' 106 if (typeof(types[j]) === 'object') { 107 typeId = types[j].id 108 newDate.setDate(today.getDate()+types[j].max) 109 } else { 110 typeId = types[j] 111 newDate.setDate(today.getDate()+365) 112 } 113 arrayFilter.push( 114 { and: [{ establishmentId: establishments[i].id }, { typeId: typeId }, { start_date: { lt: newDate } }] } 115 ) 116 } 117 for (let j = 0; j < labels.length; j++) { 118 arrayFilter.push( 119 { and: [{ establishmentId: establishments[i].id }, { labelId: labels[j] }] } 120 ) 121 } 122 if (types.length === 0 && labels.length === 0) { 123 arrayFilter.push( 124 { and: [{ establishmentId: establishments[i].id }] } 125 ) 126 } 127 } 128 129 var date = new Date(); 130 date.setHours(0, 0, 0, 0); 131 132 let filter = { 133 where: { 134 or: arrayFilter, 135 and: [ 136 { 137 or: [ 138 { start_date: { gt: date } }, 139 { 140 and: [ 141 { end_date: { gt: date } }, 142 { end_date: { neq: null }} 143 ] 144 } 145 ] 146 } 147 ], 148 active: true 149 }, 150 include: [{ establishment: ['city', 'school']}, 'image', 'label', 'link', 'type'], 151 order: 'start_date ASC', 152 limit: count 153 } 154 155 // console.log(filter); 156 157 filter = encodeURIComponent(JSON.stringify(filter)) 158 159 xhr.open("GET", "https://api.ionis.io/api/events?access_token=" + this.id + '&filter=' + filter, false) 160 xhr.setRequestHeader("Content-Type", "application/json") 161 162 xhr.send() 163 164 if (xhr.status === 200) { 165 let response = JSON.parse(xhr.responseText) 166 if (types.length > 0 && typeof(types[0]) === 'object') { 167 let finalResponse = [] 168 for (let i = 0; i < types.length; i++) { 169 let typeId = types[i].id 170 let limit = types[i].limit 171 let typeLimit = types[i].typeLimit 172 // console.log('==========', limit) 173 if (limit !== undefined) { 174 if (typeLimit === 'campus') { 175 for (let j = 0; j < establishments.length; j++) { 176 let filterArray = response.filter( 177 (event) => { 178 return event.typeId == typeId && event.establishmentId == establishments[j].id 179 } 180 ) 181 182 filterArray.splice(limit, filterArray.length - 1) 183 184 finalResponse = finalResponse.concat(filterArray) 185 } 186 } else { 187 let filterArray = response.filter( 188 (event) => { 189 return event.typeId == typeId 190 } 191 ) 192 193 filterArray.splice(limit, filterArray.length - 1) 194 195 finalResponse = finalResponse.concat(filterArray) 196 } 197 } 198 } 199 200 finalResponse = finalResponse.sort(this.compare) 201 202 return finalResponse 203 } else { 204 return response 205 } 206 } 207 } 208 209 getLabels(schoolId) { 210 var xhr = new XMLHttpRequest() 211 212 let filter = { 213 where: { 214 schoolId: schoolId 215 }, 216 order: 'name ASC' 217 } 218 219 filter = encodeURIComponent(JSON.stringify(filter)) 220 221 xhr.open("GET", "https://api.ionis.io/api/labels?access_token=" + this.id + "&filter=" + filter, false) 222 223 xhr.setRequestHeader("Content-Type", "application/json") 224 225 xhr.send() 226 227 if (xhr.status === 200) { 228 let response = JSON.parse(xhr.responseText) 229 return response 230 } 231 } 232 233 compare(a, b) { 234 if (a.start_date > b.start_date) { 235 return 1 236 } else { 237 return -1 238 } 239 } 240}
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.