liquid_feedback_frontend

annotate lib/firstlife/groups.lua @ 1532:3c15fea3f1c0

Added FirstLife group mirroring
author bsw
date Sun Oct 04 16:31:47 2020 +0200 (2020-10-04)
parents
children d432f85e868e
rev   line source
bsw@1532 1 local function firstlife_mirror_group_users(unit)
bsw@1532 2 local url = config.firstlife_groups.api_base_url .. "v6/fl/Things/" .. unit.attr.firstlife_id .. "/participants"
bsw@1532 3
bsw@1532 4 local output, err, status = extos.pfilter(doc, "curl", "-X", "GET", "-H", "Content-Type: application/json", "-d", "@-", url)
bsw@1532 5
bsw@1532 6 local data = json.import(output)
bsw@1532 7
bsw@1532 8 local old_privileges_list = Privilege:new_selector()
bsw@1532 9 :add_where{ "unit_id = ?", unit.id }
bsw@1532 10 :exec()
bsw@1532 11
bsw@1532 12 local old_privileges = {}
bsw@1532 13 for i, old_privilege in ipairs(old_privileges_list) do
bsw@1532 14 old_privileges[old_privilege.member_id] = old_privilege
bsw@1532 15 end
bsw@1532 16
bsw@1532 17 local new_user_hash = {}
bsw@1532 18
bsw@1532 19 for i, user in ipairs(data) do
bsw@1532 20 print(" Processing user ID " .. user.id)
bsw@1532 21 local user_id = tonumber(string.match(user.id, "^(.+)@"))
bsw@1532 22 new_user_hash[user_id] = user
bsw@1532 23 if old_privileges[user_id] then
bsw@1532 24 print(" Privilege entry exists")
bsw@1532 25 else
bsw@1532 26 print(" Creating new privilege")
bsw@1532 27 local privilege = Privilege:new()
bsw@1532 28 privilege.unit_id = unit.id
bsw@1532 29 privilege.member_id = user_id
bsw@1532 30 privilege.initiative_right = true
bsw@1532 31 privilege.voting_right = true
bsw@1532 32 privilege.weight = 1
bsw@1532 33 privilege:save()
bsw@1532 34 end
bsw@1532 35 end
bsw@1532 36
bsw@1532 37 for i, old_privilege in ipairs(old_privileges_list) do
bsw@1532 38 if not new_user_hash[old_privilege.member_id] then
bsw@1532 39 print(" Destroying privilege for user ID " .. old_privilege.member_id)
bsw@1532 40 old_privilege:destroy()
bsw@1532 41 end
bsw@1532 42 end
bsw@1532 43
bsw@1532 44 end
bsw@1532 45
bsw@1532 46 function _G.firstlife_mirror_groups()
bsw@1532 47
bsw@1532 48
bsw@1532 49 local url = config.firstlife_groups.api_base_url .. "v6/fl/Things/search?types=CO3_ACA"
bsw@1532 50
bsw@1532 51 local output, err, status = extos.pfilter(doc, "curl", "-X", "GET", "-H", "Content-Type: application/json", "-d", "@-", url)
bsw@1532 52
bsw@1532 53 local data = json.import(output)
bsw@1532 54
bsw@1532 55 if not data then return end
bsw@1532 56 if not data.things then return end
bsw@1532 57 if data.things.type ~= "FeatureCollection" then return end
bsw@1532 58 if not data.things.features then return end
bsw@1532 59 if json.type(data.things.features) ~= "array" then return end
bsw@1532 60
bsw@1532 61 local units_new = {}
bsw@1532 62
bsw@1532 63 for i, feature in ipairs(data.things.features) do
bsw@1532 64 print(feature.id, feature.properties.name)
bsw@1532 65 units_new[feature.id] = feature
bsw@1532 66 end
bsw@1532 67
bsw@1532 68 local old_units_list = Unit:new_selector()
bsw@1532 69 :add_where("attr->'firstlife_id' NOTNULL")
bsw@1532 70 :exec()
bsw@1532 71
bsw@1532 72 local old_units = {}
bsw@1532 73
bsw@1532 74 for i, old_unit in ipairs(old_units_list) do
bsw@1532 75 old_units[old_unit.attr.firstlife_id] = old_unit
bsw@1532 76 end
bsw@1532 77
bsw@1532 78 for id, unit_new in pairs(units_new) do
bsw@1532 79 local name_new = unit_new.properties.name
bsw@1532 80 local unit
bsw@1532 81 print("Processing unit ID " .. id .. " with name " .. name_new)
bsw@1532 82 if old_units[id] then
bsw@1532 83 unit = old_units[id]
bsw@1532 84 print(" Unit already exists")
bsw@1532 85 if old_units[id].name == name_new then
bsw@1532 86 print(" Name not changed")
bsw@1532 87 else
bsw@1532 88 print(" Name changed, updating")
bsw@1532 89 old_units[id].name = name_new
bsw@1532 90 old_units[id]:save()
bsw@1532 91 end
bsw@1532 92 else
bsw@1532 93 print(" Creating as new unit")
bsw@1532 94 local u = Unit:new()
bsw@1532 95 u.name = name_new
bsw@1532 96 u.attr = json.object()
bsw@1532 97 u.attr.firstlife_id = id
bsw@1532 98 u:save()
bsw@1532 99 local area = Area:new()
bsw@1532 100 area.unit_id = u.id
bsw@1532 101 area.name = config.firstlife_groups.area_name
bsw@1532 102 area:save()
bsw@1532 103 local allowed_policy = AllowedPolicy:new()
bsw@1532 104 allowed_policy.area_id = area.id
bsw@1532 105 allowed_policy.policy_id = config.firstlife_groups.policy_id
bsw@1532 106 allowed_policy.default_policy = true
bsw@1532 107 allowed_policy:save()
bsw@1532 108 unit = u
bsw@1532 109 end
bsw@1532 110 firstlife_mirror_group_users(unit)
bsw@1532 111 end
bsw@1532 112
bsw@1532 113 end
bsw@1532 114
bsw@1532 115

Impressum / About Us