bsw@10: local initiative = Initiative:by_id(param.get("initiative_id")) bsw@10: local initiator = Initiator:by_pk(initiative.id, app.session.member.id) bsw@10: bsw@10: -- TODO important m1 selectors returning result _SET_! bsw@10: local issue = initiative:get_reference_selector("issue"):for_share():single_object_mode():exec() bsw@10: bsw@10: if issue.closed then bsw@10: slot.put_into("error", _"This issue is already closed.") bsw@10: return false bsw@10: elseif issue.half_frozen then bsw@10: slot.put_into("error", _"This issue is already frozen.") bsw@10: return false bsw@10: end bsw@10: bsw@10: if initiative.revoked then bsw@10: slot.put_into("error", _"This initiative is revoked") bsw@10: return false bsw@10: end bsw@10: bsw@10: local initiator_todelete = Initiator:by_pk(initiative.id, param.get("member_id", atom.integer)) bsw@10: bsw@10: if not (initiator and initiator.accepted) and not (initiator.member_id == initiator_todelete.member_id) then bsw@10: error("access denied") bsw@10: end bsw@10: bsw@10: if initiator_todelete.accepted == false and initiator.member_id ~= initiator_todelete.member_id then bsw@10: error("access denied") bsw@10: end bsw@10: bsw@10: local initiators = initiative bsw@10: :get_reference_selector("initiators") bsw@10: :add_where("accepted") bsw@10: :for_update() bsw@10: :exec() bsw@10: bsw@10: if #initiators > 1 or initiator_todelete.accepted ~= true then bsw@10: initiator_todelete:destroy() bsw@10: slot.put_into("notice", _"Member has been removed from initiators") bsw@10: else bsw@10: slot.put_into("error", _"Can't remove last initiator") bsw@10: return false bsw@10: end bsw@10: bsw@10: