diff options
author | rinpatch <rinpatch@sdf.org> | 2019-05-21 14:12:10 +0300 |
---|---|---|
committer | rinpatch <rinpatch@sdf.org> | 2019-05-21 14:12:10 +0300 |
commit | aafe30d94e68ccf251c56139d07bda154dde3af9 (patch) | |
tree | eb9044a1cb6878f15225f0a7fddb32f5cb886c27 /lib/pleroma/object.ex | |
parent | 3f96b3e4b8114ec1cf924d452907b17c2aea2003 (diff) | |
download | pleroma-aafe30d94e68ccf251c56139d07bda154dde3af9.tar.gz |
Handle poll votes
Diffstat (limited to 'lib/pleroma/object.ex')
-rw-r--r-- | lib/pleroma/object.ex | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/lib/pleroma/object.ex b/lib/pleroma/object.ex index 740d687a3..a0f7659eb 100644 --- a/lib/pleroma/object.ex +++ b/lib/pleroma/object.ex @@ -188,4 +188,34 @@ defmodule Pleroma.Object do _ -> {:error, "Not found"} end end + + def increase_vote_count(ap_id, name) do + with %Object{} = object <- Object.normalize(ap_id), + "Question" <- object.data["type"] do + multiple = Map.has_key?(object.data, "anyOf") + + options = + (object.data["anyOf"] || object.data["oneOf"] || []) + |> Enum.map(fn + %{"name" => ^name} = option -> + Kernel.update_in(option["replies"]["totalItems"], &(&1 + 1)) + + option -> + option + end) + + data = + if multiple do + Map.put(object.data, "anyOf", options) + else + Map.put(object.data, "oneOf", options) + end + + object + |> Object.change(%{data: data}) + |> update_and_set_cache() + else + _ -> :noop + end + end end |