111 lines
3.8 KiB
Lua
111 lines
3.8 KiB
Lua
--- Remove a process
|
|
-- @module remove_process
|
|
|
|
local remove_process = {
|
|
name = "Remove process",
|
|
slug = "remove_process",
|
|
desc = "User can remove own processes, approval required for those of others",
|
|
hide = false;
|
|
}
|
|
|
|
remove_process.data = {
|
|
}
|
|
|
|
remove_process.config = {
|
|
approval_module = "consent"
|
|
}
|
|
|
|
--- Initiate function
|
|
-- @function remove_process:initiate
|
|
-- @param result Callback if this module is embedded in other modules
|
|
function remove_process:initiate(result)
|
|
-- prepare process options
|
|
local available_processes = {}
|
|
for k,process in pairs(self.org.processes) do
|
|
if process ~= "deleted" then
|
|
available_processes[process.id] = process
|
|
end
|
|
end
|
|
local process_list = {}
|
|
local process_count = 0
|
|
for k,v in pairs(available_processes) do
|
|
local mine = ""
|
|
if v.initiator == self.initiator then mine = "*" end
|
|
table.insert(process_list,"["..v.id.."] "..v.slug..mine)
|
|
process_count = process_count + 1
|
|
end
|
|
-- abort if no processes to remove
|
|
if process_count == 0 then
|
|
modpol.interactions.message(
|
|
self.initiator, "Org has no modules")
|
|
modpol.interactions.org_dashboard(
|
|
self.initiator, self.org.id)
|
|
if result then result() end
|
|
self.org:delete_process(self.id)
|
|
return
|
|
end
|
|
table.sort(process_list)
|
|
-- now ask which to remove
|
|
modpol.interactions.dropdown_query(
|
|
self.initiator, "Choose a process to remove (* marks yours, no consent required):",
|
|
process_list,
|
|
function(process_choice)
|
|
-- confirm choice
|
|
local process_id = tonumber(
|
|
string.match(process_choice, "%d+"))
|
|
local process_mine = string.match(process_choice,
|
|
"%*")
|
|
modpol.interactions.binary_poll_user(
|
|
self.initiator,
|
|
"Confirm: Remove process \""..
|
|
process_choice .. "\"?",
|
|
function(input)
|
|
if input == "Yes" then
|
|
if process_mine then
|
|
self.org:delete_process_tree(process_id)
|
|
modpol.interactions.message(
|
|
self.initiator,
|
|
"Removed process: "..process_choice)
|
|
modpol.interactions.org_dashboard(
|
|
self.initiator, self.org.id)
|
|
if result then result() end
|
|
self.org:delete_process(self.id)
|
|
else
|
|
self:call_module(
|
|
self.config.approval_module,
|
|
self.initiator,
|
|
{
|
|
prompt =
|
|
"Approve removal of process "
|
|
..process_choice.."?"
|
|
},
|
|
function(input)
|
|
modpol.interactions.message_org(
|
|
self.initiator,
|
|
self.org.id,
|
|
"Removing process: "..
|
|
process_choice)
|
|
self.org:delete_process_tree(process_id)
|
|
modpol.interactions.org_dashboard(
|
|
self.initiator, self.org.id)
|
|
if result then result() end
|
|
self.org:delete_process(self.id)
|
|
end
|
|
)
|
|
end
|
|
modpol.interactions.org_dashboard(
|
|
self.initiator, self.org.id)
|
|
else
|
|
modpol.interactions.org_dashboard(
|
|
self.initiator, self.org.id)
|
|
if result then result() end
|
|
self.org:delete_process(self.id)
|
|
end
|
|
end
|
|
)
|
|
end
|
|
)
|
|
end
|
|
|
|
modpol.modules.remove_process = remove_process
|