liquid_feedback_frontend

annotate lib/ontomap/ontomap.lua @ 1527:802245716e0a

Fixed nil error when logging locations
author bsw
date Thu Aug 27 09:17:26 2020 +0200 (2020-08-27)
parents 056bccb61eee
children 0fce83763138
rev   line source
bsw/jbe@1309 1 function _G.ontomap_get_instances(event)
bsw/jbe@1309 2 if true then return {} end
bsw/jbe@1309 3 local url = config.ontomap.base_url .. "instances/Issue?geometries=true&descriptions=true"
bsw/jbe@1309 4 print("OnToMap>>")
bsw/jbe@1309 5
bsw/jbe@1309 6 local output, err, status = extos.pfilter(doc, "curl", "-X", "GET", "-H", "Content-Type: application/json", "--cert", config.ontomap.client_cert_file, "-d", "@-", url)
bsw/jbe@1309 7 print(output)
bsw/jbe@1309 8
bsw/jbe@1309 9 local data = json.import(output)
bsw/jbe@1309 10
bsw/jbe@1309 11 if not data then
bsw/jbe@1309 12 return {}
bsw/jbe@1309 13 end
bsw/jbe@1309 14
bsw/jbe@1309 15 if data.type ~= "FeatureCollection" or not data.features then
bsw/jbe@1309 16 return {}
bsw/jbe@1309 17 end
bsw/jbe@1309 18
bsw/jbe@1309 19 local instances = {}
bsw/jbe@1309 20 for i, feature in ipairs(data.features) do
bsw/jbe@1309 21 if feature.geometry then
bsw/jbe@1309 22 table.insert(instances, {
bsw/jbe@1309 23 application = feature.applicationName,
bsw/jbe@1309 24 title = feature.hasName,
bsw/jbe@1309 25 description = slot.use_temporary(function()
bsw/jbe@1309 26 ui.link{ external = feature.properties.external_url, text = feature.properties.hasName or "" }
bsw/jbe@1309 27 ui.container{ content = feature.hasDescription }
bsw/jbe@1309 28 end),
bsw/jbe@1309 29 lon = feature.geometry.coordinates[1],
bsw/jbe@1309 30 lat = feature.geometry.coordinates[2],
bsw/jbe@1309 31 label = "IMC" .. feature.properties.hasID,
bsw/jbe@1309 32 type = "Improve My City"
bsw/jbe@1309 33 })
bsw/jbe@1309 34 print(feature.applicationName, feature.properties.hasName, feature.properties.hasDescription)
bsw/jbe@1309 35 end
bsw/jbe@1309 36 end
bsw/jbe@1309 37 return instances
bsw/jbe@1309 38
bsw/jbe@1309 39 end
bsw/jbe@1309 40
bsw/jbe@1309 41
bsw/jbe@1309 42 local function new_log_event(event, actor, activity_type)
bsw/jbe@1309 43 local e = json.object{
bsw/jbe@1309 44 activity_type = activity_type,
bsw/jbe@1309 45 activity_objects = json.array(),
bsw/jbe@1309 46 references = json.array(),
bsw/jbe@1309 47 visibility_details = json.array(),
bsw/jbe@1309 48 details = json.object()
bsw/jbe@1309 49 }
bsw/jbe@1309 50 e.actor = actor
bsw/jbe@1309 51 e.timestamp = math.floor(event.occurrence_epoch * 1000)
bsw/jbe@1309 52 return e
bsw/jbe@1309 53 end
bsw/jbe@1309 54
bsw/jbe@1309 55 local function new_activity_object(attr)
bsw/jbe@1309 56 return json.object{
bsw/jbe@1309 57 type = "Feature",
bsw/jbe@1309 58 geometry = attr.geometry or json.null,
bsw/jbe@1309 59 properties = json.object{
bsw/jbe@1309 60 hasType = attr.type,
bsw/jbe@1309 61 external_url = attr.url
bsw/jbe@1309 62 }
bsw/jbe@1309 63 }
bsw/jbe@1309 64 end
bsw/jbe@1309 65
bsw@1519 66 local function new_reference_object(url, application, type)
bsw/jbe@1309 67 return json.object{
bsw/jbe@1309 68 application = application or config.ontomap.application_ident,
bsw@1519 69 external_url = url,
bsw@1519 70 type = type
bsw/jbe@1309 71 }
bsw/jbe@1309 72 end
bsw/jbe@1309 73
bsw/jbe@1309 74 local function log_to_ontomap(log_events)
bsw/jbe@1309 75 if json.type(log_events) == "object" then
bsw/jbe@1309 76 log_events = json.array{ log_events }
bsw/jbe@1309 77 end
bsw/jbe@1309 78 for i, log_event in ipairs(log_events) do
bsw/jbe@1309 79 if #(log_event.activity_objects) == 0 then
bsw/jbe@1309 80 log_event.activity_objects = nil
bsw/jbe@1309 81 end
bsw/jbe@1309 82 if #(log_event.references) == 0 then
bsw/jbe@1309 83 log_event.references = nil
bsw/jbe@1309 84 end
bsw/jbe@1309 85 if #(log_event.visibility_details) == 0 then
bsw/jbe@1309 86 log_event.visibility_details = nil
bsw/jbe@1309 87 end
bsw/jbe@1309 88 if not (next(log_event.details)) then -- TODO
bsw/jbe@1309 89 log_event.details = nil
bsw/jbe@1309 90 end
bsw/jbe@1309 91 end
bsw/jbe@1309 92
bsw/jbe@1309 93 local doc = json.export(json.object{
bsw/jbe@1309 94 event_list = log_events
bsw/jbe@1309 95 }, " ")
bsw/jbe@1309 96
bsw/jbe@1309 97 local url = config.ontomap.base_url .. "logger/events"
bsw/jbe@1309 98 print("OnToMap<<")
bsw/jbe@1309 99 print(doc)
bsw/jbe@1309 100
bsw/jbe@1309 101 local output, err, status = extos.pfilter(doc, "curl", "-X", "POST", "-H", "Content-Type: application/json", "--cert", config.ontomap.client_cert_file, "-d", "@-", url)
bsw/jbe@1309 102
bsw/jbe@1309 103 print("---------")
bsw/jbe@1309 104 print(output)
bsw/jbe@1309 105 print("---------")
bsw/jbe@1309 106
bsw/jbe@1309 107 if err then
bsw/jbe@1309 108 -- TODO log error
bsw/jbe@1309 109 end
bsw/jbe@1309 110 end
bsw/jbe@1309 111
bsw/jbe@1309 112 local function url_for(relation, id)
bsw/jbe@1309 113 return config.absolute_base_url .. relation .. "/show/" .. id .. ".html"
bsw/jbe@1309 114 end
bsw/jbe@1309 115
bsw/jbe@1309 116
bsw/jbe@1309 117 local function unit_updated(event, event_type)
bsw/jbe@1309 118 local log_event = new_log_event(event, 0, event_type == "created" and "object_created" or "object_updated")
bsw/jbe@1309 119 table.insert(log_event.activity_objects, new_activity_object{
bsw/jbe@1309 120 type = "unit",
bsw/jbe@1309 121 url = url_for("unit", event.unit_id)
bsw/jbe@1309 122 })
bsw/jbe@1309 123 log_event.details.active = event.unit.active
bsw/jbe@1309 124 log_event.details.name = event.unit.name
bsw/jbe@1309 125 log_event.details.description = event.unit.description
bsw/jbe@1309 126 log_event.details.external_reference = event.unit.external_reference
bsw/jbe@1309 127 log_event.details.region = event.unit.region
bsw/jbe@1309 128 log_to_ontomap(log_event)
bsw/jbe@1309 129 end
bsw/jbe@1309 130
bsw/jbe@1309 131 local function area_updated(event, event_type)
bsw/jbe@1309 132 local log_event = new_log_event(event, 0, event_type == "created" and "object_created" or "object_updated")
bsw/jbe@1309 133 table.insert(log_event.activity_objects, new_activity_object{
bsw/jbe@1309 134 type = "area",
bsw/jbe@1309 135 url = url_for("area", event.area_id)
bsw/jbe@1309 136 })
bsw/jbe@1309 137 table.insert(log_event.references, new_reference_object(
bsw/jbe@1309 138 url_for("unit", event.area.unit_id)
bsw/jbe@1309 139 ))
bsw/jbe@1309 140 log_event.details.active = event.area.active
bsw/jbe@1309 141 log_event.details.name = event.area.name
bsw/jbe@1309 142 log_event.details.description = event.area.description
bsw/jbe@1309 143 log_event.details.external_reference = event.area.external_reference
bsw/jbe@1309 144 log_event.details.region = event.area.region
bsw/jbe@1309 145 log_to_ontomap(log_event)
bsw/jbe@1309 146 end
bsw/jbe@1309 147
bsw/jbe@1309 148 local function policy_updated(event, event_type)
bsw/jbe@1309 149 local log_event = new_log_event(event, 0, event_type == "created" and "object_created" or "object_updated")
bsw/jbe@1309 150 table.insert(log_event.activity_objects, new_activity_object{
bsw/jbe@1309 151 type = "policy",
bsw/jbe@1309 152 url = url_for("policy", event.policy_id)
bsw/jbe@1309 153 })
bsw/jbe@1309 154 log_event.details.active = event.policy.active
bsw/jbe@1309 155 log_event.details.name = event.policy.name
bsw/jbe@1309 156 log_event.details.description = event.policy.description
bsw/jbe@1309 157 log_to_ontomap(log_event)
bsw/jbe@1309 158 end
bsw/jbe@1309 159
bsw/jbe@1309 160 local mapper = {
bsw/jbe@1309 161
bsw/jbe@1309 162 unit_created = function(event)
bsw/jbe@1309 163 unit_updated(event, "created")
bsw/jbe@1309 164 end,
bsw/jbe@1309 165
bsw/jbe@1309 166 unit_updated = function(event)
bsw/jbe@1309 167 unit_updated(event, "updated")
bsw/jbe@1309 168 end,
bsw/jbe@1309 169
bsw/jbe@1309 170 area_created = function(event)
bsw/jbe@1309 171 area_updated(event, "created")
bsw/jbe@1309 172 end,
bsw/jbe@1309 173
bsw/jbe@1309 174 area_updated = function(event)
bsw/jbe@1309 175 area_updated(event, "updated")
bsw/jbe@1309 176 end,
bsw/jbe@1309 177
bsw/jbe@1309 178 policy_created = function(event)
bsw/jbe@1309 179 policy_updated(event, "created")
bsw/jbe@1309 180 end,
bsw/jbe@1309 181
bsw/jbe@1309 182 policy_updated = function(event)
bsw/jbe@1309 183 policy_updated(event, "updated")
bsw/jbe@1309 184 end,
bsw/jbe@1309 185
bsw/jbe@1309 186 issue_state_changed = function(event)
bsw/jbe@1309 187 local log_event = new_log_event(event, 0, "issue_status_updated")
bsw/jbe@1309 188 table.insert(log_event.references, new_reference_object(
bsw/jbe@1309 189 url_for("issue", event.issue_id)
bsw/jbe@1309 190 ))
bsw/jbe@1309 191 log_event.details.new_issue_state = event.state
bsw/jbe@1309 192 log_to_ontomap(log_event)
bsw/jbe@1309 193 end,
bsw/jbe@1309 194
bsw/jbe@1309 195 initiative_created_in_new_issue = function(event)
bsw/jbe@1309 196 local log_events = json.array()
bsw/jbe@1309 197
bsw/jbe@1309 198 local log_event = new_log_event(event, 0, "object_created")
bsw/jbe@1309 199 table.insert(log_event.activity_objects, new_activity_object{
bsw/jbe@1309 200 type = "issue",
bsw/jbe@1309 201 url = url_for("issue", event.issue_id)
bsw/jbe@1309 202 })
bsw/jbe@1309 203 table.insert(log_event.references, new_reference_object(
bsw/jbe@1309 204 url_for("policy", event.issue.policy_id)
bsw/jbe@1309 205 ))
bsw/jbe@1309 206 log_event.details.new_issue_state = event.state
bsw/jbe@1309 207 table.insert(log_events, log_event)
bsw@1519 208
bsw/jbe@1309 209 local log_event = new_log_event(event, event.member_id, "object_created")
bsw@1519 210
bsw@1519 211 local location = event.initiative.location
bsw@1527 212 if location and location.marker_link then
bsw@1519 213 local marker_link = location.marker_link
bsw@1519 214 location.marker_link = nil
bsw@1519 215 table.insert(log_event.references, new_reference_object(
bsw@1519 216 marker_link, config.firstlife.application_ident, "BELONGS_TO"
bsw@1519 217 ))
bsw@1519 218 end
bsw@1519 219
bsw@1519 220 local activity_object = new_activity_object{
bsw/jbe@1309 221 type = "initiative",
bsw/jbe@1309 222 url = url_for("initiative", event.initiative_id),
bsw@1519 223 geometry = location
bsw@1519 224 }
bsw@1519 225 activity_object.properties.name = event.initiative.name
bsw@1519 226 table.insert(log_event.activity_objects, activity_object)
bsw/jbe@1309 227 table.insert(log_event.references, new_reference_object(
bsw/jbe@1309 228 url_for("issue", event.issue_id)
bsw/jbe@1309 229 ))
bsw/jbe@1309 230 table.insert(log_events, log_event)
bsw/jbe@1309 231
bsw/jbe@1309 232 log_to_ontomap(log_events)
bsw/jbe@1309 233 end,
bsw/jbe@1309 234
bsw/jbe@1309 235 initiative_created_in_existing_issue = function(event)
bsw/jbe@1309 236 local log_event = new_log_event(event, event.member_id, "object_created")
bsw@1519 237 local location = event.initiative.location
bsw@1519 238 if location and location.marker_link then
bsw@1519 239 local marker_link = location.marker_link
bsw@1519 240 location.marker_link = nil
bsw@1519 241 table.insert(log_event.references, new_reference_object(
bsw@1519 242 marker_link, config.firstlife.application_ident, "BELONGS_TO"
bsw@1519 243 ))
bsw@1519 244 end
bsw@1519 245 local activity_object = new_activity_object{
bsw/jbe@1309 246 type = "initiative",
bsw/jbe@1309 247 url = url_for("initiative", event.initiative_id),
bsw@1519 248 geometry = location
bsw@1519 249 }
bsw@1519 250 activity_object.properties.name = event.initiative.name
bsw@1519 251 table.insert(log_event.activity_objects, activity_object)
bsw/jbe@1309 252 table.insert(log_event.references, new_reference_object(
bsw/jbe@1309 253 url_for("issue", event.issue_id)
bsw/jbe@1309 254 ))
bsw/jbe@1309 255 log_to_ontomap(log_event)
bsw/jbe@1309 256 end,
bsw/jbe@1309 257
bsw/jbe@1309 258 initiative_revoked = function(event)
bsw/jbe@1309 259 -- TODO -> which activity?
bsw/jbe@1309 260 end,
bsw/jbe@1309 261
bsw/jbe@1309 262 new_draft_created = function(event)
bsw/jbe@1309 263 local log_event = new_log_event(event, event.member_id, "object_updated")
bsw/jbe@1309 264 table.insert(log_event.activity_objects, new_activity_object{
bsw/jbe@1309 265 type = "initiative",
bsw/jbe@1309 266 url = url_for("initiative", event.issue_id)
bsw/jbe@1309 267 })
bsw/jbe@1309 268 table.insert(log_event.references, new_reference_object(
bsw/jbe@1309 269 url_for("issue", event.issue_id)
bsw/jbe@1309 270 ))
bsw/jbe@1309 271 log_event.details.name = event.initiative.name
bsw/jbe@1309 272 log_event.details.location = event.initiative.current_draft.location
bsw/jbe@1309 273 log_to_ontomap(log_event)
bsw/jbe@1309 274 end,
bsw/jbe@1309 275
bsw/jbe@1309 276 interest = function(event)
bsw/jbe@1309 277 local activity_type = event.boolean_value and "interest_added" or "interest_removed"
bsw/jbe@1309 278 local log_event = new_log_event(event, event.member_id, activity_type)
bsw/jbe@1309 279 table.insert(log_event.references, new_reference_object(
bsw/jbe@1309 280 url_for("issue", event.issue_id)
bsw/jbe@1309 281 ))
bsw/jbe@1309 282 log_to_ontomap(log_event)
bsw/jbe@1309 283 end,
bsw/jbe@1309 284
bsw/jbe@1309 285 initiator = function(event)
bsw/jbe@1309 286 local activity_type = event.boolean_value and "initiator_added" or "initiator_removed"
bsw/jbe@1309 287 local log_event = new_log_event(event, event.member_id, activity_type)
bsw/jbe@1309 288 table.insert(log_event.references, new_reference_object(
bsw/jbe@1309 289 url_for("initiative", event.initiative_id)
bsw/jbe@1309 290 ))
bsw/jbe@1309 291 log_to_ontomap(log_event)
bsw/jbe@1309 292 end,
bsw/jbe@1309 293
bsw/jbe@1309 294 support = function(event)
bsw/jbe@1309 295 local activity_type = event.boolean_value and "support_added" or "support_removed"
bsw/jbe@1309 296 local log_event = new_log_event(event, event.member_id, activity_type)
bsw/jbe@1309 297 table.insert(log_event.references, new_reference_object(
bsw/jbe@1309 298 url_for("initiative", event.initiative_id)
bsw/jbe@1309 299 ))
bsw/jbe@1309 300 log_event.details.draft_id = event.draft_id
bsw/jbe@1309 301 log_to_ontomap(log_event)
bsw/jbe@1309 302 end,
bsw/jbe@1309 303
bsw/jbe@1309 304 support_updated = function(event)
bsw/jbe@1309 305 local log_event = new_log_event(event, event.member_id, "support_updated")
bsw/jbe@1309 306 table.insert(log_event.references, new_reference_object(
bsw/jbe@1309 307 url_for("initiative", event.initiative_id)
bsw/jbe@1309 308 ))
bsw/jbe@1309 309 log_event.details.draft_id = event.draft_id
bsw/jbe@1309 310 log_to_ontomap(log_event)
bsw/jbe@1309 311 end,
bsw/jbe@1309 312
bsw/jbe@1309 313 suggestion_created = function(event)
bsw/jbe@1309 314 local log_event = new_log_event(event, event.member_id, "object_created")
bsw/jbe@1309 315 table.insert(log_event.activity_objects, new_activity_object{
bsw/jbe@1309 316 type = "suggestion",
bsw/jbe@1309 317 url = url_for("suggestion", event.suggestion_id)
bsw/jbe@1309 318 })
bsw/jbe@1309 319 table.insert(log_event.references, new_reference_object(
bsw/jbe@1309 320 url_for("initiative", event.initiative_id)
bsw/jbe@1309 321 ))
bsw/jbe@1309 322 log_to_ontomap(log_event)
bsw/jbe@1309 323 end,
bsw/jbe@1309 324
bsw/jbe@1309 325 suggestion_removed = function(event)
bsw/jbe@1309 326 local log_event = new_log_event(event, 0, "object_removed")
bsw/jbe@1309 327 table.insert(log_event.activity_objects, new_activity_object{
bsw/jbe@1309 328 type = "suggestion",
bsw/jbe@1309 329 url = url_for("suggestion", event.suggestion_id)
bsw/jbe@1309 330 })
bsw/jbe@1309 331 table.insert(log_event.references, new_reference_object(
bsw/jbe@1309 332 url_for("initiative", event.initiative_id)
bsw/jbe@1309 333 ))
bsw/jbe@1309 334 log_to_ontomap(log_event)
bsw/jbe@1309 335 end,
bsw/jbe@1309 336
bsw/jbe@1309 337 suggestion_rated = function(event)
bsw/jbe@1309 338 local log_event = new_log_event(event, event.member_id, "suggestion_rated")
bsw/jbe@1309 339 table.insert(log_event.references, new_reference_object(
bsw/jbe@1309 340 url_for("suggestion", event.suggestion_id)
bsw/jbe@1309 341 ))
bsw/jbe@1309 342 log_event.details.degree = event.numeric_value
bsw/jbe@1309 343 log_event.details.fulfilled = event.boolean_value or json.null
bsw/jbe@1309 344 log_to_ontomap(log_event)
bsw/jbe@1309 345 end,
bsw/jbe@1309 346
bsw/jbe@1309 347 delegation = function(event)
bsw/jbe@1309 348 -- TODO
bsw/jbe@1309 349 end,
bsw/jbe@1309 350
bsw/jbe@1309 351 member_activated = function(event)
bsw/jbe@1309 352 local log_event = new_log_event(event, event.member_id, "account_registered")
bsw/jbe@1309 353 log_to_ontomap(log_event)
bsw/jbe@1309 354 end,
bsw/jbe@1309 355
bsw/jbe@1309 356 member_removed = function(event)
bsw/jbe@1309 357 -- TODO -> which activity to log?
bsw/jbe@1309 358 end,
bsw/jbe@1309 359
bsw/jbe@1309 360 member_active = function(event)
bsw/jbe@1309 361 -- TODO -> which activity to log?
bsw/jbe@1309 362 end,
bsw/jbe@1309 363
bsw/jbe@1309 364 member_name_updated = function(event)
bsw/jbe@1309 365 local log_event = new_log_event(event, event.member_id, "screen_name_changed")
bsw/jbe@1309 366 log_event.details.screen_name = event.text_value
bsw/jbe@1309 367 log_to_ontomap(log_event)
bsw/jbe@1309 368 end,
bsw/jbe@1309 369
bsw/jbe@1309 370 member_profile_updated = function(event)
bsw/jbe@1309 371 local log_event = new_log_event(event, event.member_id, "profile_updated")
bsw/jbe@1309 372 log_to_ontomap(log_event)
bsw/jbe@1309 373 end,
bsw/jbe@1309 374
bsw/jbe@1309 375 member_image_updated = function(event)
bsw/jbe@1309 376 local log_event = new_log_event(event, event.member_id, "avatar_changed")
bsw/jbe@1309 377 log_to_ontomap(log_event)
bsw/jbe@1309 378 end,
bsw/jbe@1309 379
bsw/jbe@1309 380 contact = function(event)
bsw/jbe@1309 381 local activity_type = event.boolean_value and "contact_published" or "contact_unpublished"
bsw/jbe@1309 382 local log_event = new_log_event(event, event.member_id, activity_type)
bsw/jbe@1309 383 log_event.details.other_member_id = event.other_member_id
bsw/jbe@1309 384 log_to_ontomap(log_event)
bsw/jbe@1309 385 end
bsw/jbe@1309 386
bsw/jbe@1309 387 }
bsw/jbe@1309 388
bsw/jbe@1309 389 function _G.ontomap_log_event(event)
bsw/jbe@1309 390
bsw/jbe@1309 391 if mapper[event.event] then
bsw/jbe@1309 392 local e = Event:new_selector()
bsw/jbe@1309 393 :add_where{ "id = ?", event.id }
bsw/jbe@1309 394 :add_field("extract(epoch from occurrence)", "occurrence_epoch")
bsw/jbe@1309 395 :optional_object_mode()
bsw/jbe@1309 396 :exec()
bsw/jbe@1309 397 if e then
bsw/jbe@1309 398 mapper[event.event](e)
bsw/jbe@1309 399 end
bsw/jbe@1309 400 end
bsw/jbe@1309 401
bsw/jbe@1309 402
bsw/jbe@1309 403 end

Impressum / About Us