liquid_feedback_frontend

annotate model/unit.lua @ 1859:02c34183b6df

Fixed wrong filename in INSTALL file
author bsw
date Tue Nov 28 18:54:51 2023 +0100 (17 months ago)
parents 36e7c36da131
children
rev   line source
bsw@241 1 Unit = mondelefant.new_class()
bsw@241 2 Unit.table = 'unit'
bsw@241 3
bsw@241 4 Unit:add_reference{
bsw@241 5 mode = '1m',
bsw@241 6 to = "Area",
bsw@241 7 this_key = 'id',
bsw@241 8 that_key = 'unit_id',
bsw@241 9 ref = 'areas',
bsw/jbe@1309 10 back_ref = 'unit',
bsw/jbe@1309 11 default_order = "area.name, area.id"
bsw@241 12 }
bsw@241 13
bsw@281 14 Unit:add_reference{
bsw@281 15 mode = 'mm',
bsw@281 16 to = "Member",
bsw@281 17 this_key = 'id',
bsw@281 18 that_key = 'id',
bsw@281 19 connected_by_table = 'privilege',
bsw@281 20 connected_by_this_key = 'unit_id',
bsw@281 21 connected_by_that_key = 'member_id',
bsw@281 22 ref = 'members'
bsw@281 23 }
bsw@281 24
bsw@525 25 Unit:add_reference{
bsw@525 26 mode = "11",
bsw@525 27 to = mondelefant.class_prototype,
bsw@525 28 this_key = "id",
bsw@525 29 that_key = "unit_id",
bsw@525 30 ref = "delegation_info",
bsw@525 31 back_ref = "unit",
bsw@525 32 selector_generator = function(list, options)
bsw@525 33 assert(options.member_id, "member_id mandatory for delegation_info")
bsw@525 34 local ids = { sep = ", " }
bsw@525 35 for i, object in ipairs(list) do
bsw@525 36 local id = object.id
bsw@525 37 if id ~= nil then
bsw@525 38 ids[#ids+1] = {"?", id}
bsw@525 39 end
bsw@525 40 end
bsw@525 41 local sub_selector = Unit:get_db_conn():new_selector()
bsw@525 42 if #ids == 0 then
bsw@525 43 return sub_selector:empty_list_mode()
bsw@525 44 end
bsw@525 45 sub_selector:from("unit")
bsw@525 46 sub_selector:add_field("unit.id", "unit_id")
bsw@529 47 sub_selector:add_field{ '(delegation_info(?, unit.id, null, null, ?)).*', options.member_id, options.trustee_id }
bsw@525 48 sub_selector:add_where{ 'unit.id IN ($)', ids }
bsw@525 49
bsw@525 50 local selector = Unit:get_db_conn():new_selector()
bsw@525 51 selector:add_from(sub_selector, "delegation_info")
bsw@525 52 selector:left_join("member", "first_trustee", "first_trustee.id = delegation_info.first_trustee_id")
bsw@525 53 selector:left_join("member", "other_trustee", "other_trustee.id = delegation_info.other_trustee_id")
bsw@525 54 selector:add_field("delegation_info.*")
bsw@525 55 selector:add_field("first_trustee.name", "first_trustee_name")
bsw@525 56 selector:add_field("other_trustee.name", "other_trustee_name")
bsw@525 57 return selector
bsw@525 58 end
bsw@525 59 }
bsw@525 60
bsw@529 61 function Unit.list:load_delegation_info_once_for_member_id(member_id, trustee_id)
bsw@525 62 if self._delegation_info_loaded_for_member_id ~= member_id then
bsw@529 63 self:load("delegation_info", { member_id = member_id, trustee_id = trustee_id })
bsw@525 64 for i, unit in ipairs(self) do
bsw@525 65 unit._delegation_info_loaded_for_member_id = member_id
bsw@525 66 end
bsw@525 67 self._delegation_info_loaded_for_member_id = member_id
bsw@525 68 end
bsw@525 69 end
bsw@525 70
bsw@529 71 function Unit.object:load_delegation_info_once_for_member_id(member_id, trustee_id)
bsw@525 72 if self._delegation_info_loaded_for_member_id ~= member_id then
bsw@525 73 self:load("delegation_info", { member_id = member_id })
bsw@525 74 self._delegation_info_loaded_for_member_id = member_id
bsw@525 75 end
bsw@525 76 end
bsw@525 77
bsw@525 78
bsw@525 79
bsw@1145 80 local function recursive_add_child_units(units, parent_unit)
bsw@286 81 parent_unit.childs = {}
bsw@286 82 for i, unit in ipairs(units) do
bsw@286 83 if unit.parent_id == parent_unit.id then
bsw@286 84 parent_unit.childs[#(parent_unit.childs)+1] = unit
bsw@286 85 recursive_add_child_units(units, unit)
bsw@286 86 end
bsw@286 87 end
bsw@286 88 end
bsw@286 89
bsw@1145 90 local function recursive_get_child_units(units, parent_unit, depth)
bsw@286 91 for i, unit in ipairs(parent_unit.childs) do
bsw@286 92 unit.depth = depth
bsw@286 93 units[#units+1] = unit
bsw@286 94 recursive_get_child_units(units, unit, depth + 1)
bsw@286 95 end
bsw@286 96 end
bsw@241 97
bsw@831 98 function Unit:get_flattened_tree(args)
bsw@831 99 local units_selector = Unit:new_selector()
bsw@831 100 :add_order_by("name")
bsw@831 101 if not args or not args.include_inactive then
bsw@831 102 units_selector:add_where("active")
bsw@831 103 end
bsw@1504 104 if not args or not args.include_hidden then
bsw@1504 105 units_selector:add_where("attr->'hidden' ISNULL OR NOT (attr->'hidden' = 'true')")
bsw@1504 106 end
bsw@1831 107 if args and args.member_id then
bsw@1828 108 units_selector
bsw@1828 109 :left_join("privilege", nil, { "privilege.member_id = ? AND privilege.unit_id = unit.id", args.member_id })
bsw@1828 110 :add_field("privilege.voting_right", "voting_right")
bsw@1828 111 end
bsw@831 112 local units = units_selector:exec()
bsw@286 113 local unit_tree = {}
bsw@286 114 for i, unit in ipairs(units) do
bsw@286 115 if not unit.parent_id then
bsw@286 116 unit_tree[#unit_tree+1] = unit
bsw@286 117 recursive_add_child_units(units, unit)
bsw@286 118 end
bsw@286 119 end
bsw@286 120 local depth = 1
bsw@286 121 local units = {}
bsw@286 122 for i, unit in ipairs(unit_tree) do
bsw@286 123 unit.depth = depth
bsw@286 124 units[#units+1] = unit
bsw@286 125 recursive_get_child_units(units, unit, depth + 1)
bsw@286 126 end
bsw@286 127 return units
bsw@241 128 end

Impressum / About Us