forked from forks/microblog.pub
Support Update for Question/poll
This commit is contained in:
parent
be7648c9ed
commit
5536178139
3 changed files with 35 additions and 20 deletions
|
@ -416,6 +416,23 @@ class MicroblogPubBackend(Backend):
|
|||
{"activity.object.id": obj.id},
|
||||
{"$set": {"activity.object": obj.to_dict()}},
|
||||
)
|
||||
elif obj.has_type(ap.ActivityType.QUESTION):
|
||||
choices = obj._data.get("oneOf", obj.anyOf)
|
||||
total_replies = 0
|
||||
_set = {}
|
||||
for choice in choices:
|
||||
answer_key = _answer_key(choice["name"])
|
||||
cnt = choice["replies"]["totalItems"]
|
||||
total_replies += cnt
|
||||
_set[f"meta.question_answers.{answer_key}"] = cnt
|
||||
|
||||
_set["meta.question_replies"] = total_replies
|
||||
|
||||
DB.activities.update_one(
|
||||
{"box": Box.INBOX.value, "activity.object.id": obj.id},
|
||||
{"$set": _set},
|
||||
)
|
||||
|
||||
# FIXME(tsileo): handle update actor amd inbox_update_note/inbox_update_actor
|
||||
|
||||
@ensure_it_is_me
|
||||
|
|
18
app.py
18
app.py
|
@ -421,6 +421,12 @@ def is_img(filename):
|
|||
return _is_img(filename)
|
||||
|
||||
|
||||
@app.template_filter()
|
||||
def get_answer_count(choice, meta):
|
||||
print(choice, meta)
|
||||
return meta.get("question_answers", {}).get(_answer_key(choice), 0)
|
||||
|
||||
|
||||
def add_response_headers(headers={}):
|
||||
"""This decorator adds the headers passed in to the response"""
|
||||
|
||||
|
@ -823,9 +829,6 @@ def index():
|
|||
DB.activities, q, limit=25 - len(pinned)
|
||||
)
|
||||
|
||||
# FIXME(tsileo): add it on permakink too
|
||||
[_add_answers_to_questions(item) for item in outbox_data]
|
||||
|
||||
resp = render_template(
|
||||
"index.html",
|
||||
outbox_data=outbox_data,
|
||||
|
@ -937,9 +940,6 @@ def note_by_id(note_id):
|
|||
if data["meta"].get("deleted", False):
|
||||
abort(410)
|
||||
|
||||
# If it's a Question, add the answers from meta
|
||||
_add_answers_to_questions(data)
|
||||
|
||||
thread = _build_thread(data)
|
||||
app.logger.info(f"thread={thread!r}")
|
||||
|
||||
|
@ -1113,8 +1113,9 @@ def remove_context(activity: Dict[str, Any]) -> Dict[str, Any]:
|
|||
def _add_answers_to_questions(raw_doc: Dict[str, Any]) -> None:
|
||||
activity = raw_doc["activity"]
|
||||
if (
|
||||
"object" in activity
|
||||
and _to_list(activity["object"]["type"])[0] == ActivityType.QUESTION.value
|
||||
ap._has_type(activity["type"], ActivityType.CREATE)
|
||||
and "object" in activity
|
||||
and ap._has_type(activity["object"]["type"], ActivityType.QUESTION)
|
||||
):
|
||||
for choice in activity["object"].get("oneOf", activity["object"].get("anyOf")):
|
||||
choice["replies"] = {
|
||||
|
@ -1750,6 +1751,7 @@ def inbox():
|
|||
}
|
||||
),
|
||||
)
|
||||
print(data)
|
||||
activity = ap.parse_activity(data)
|
||||
logger.debug(f"inbox activity={activity}/{data}")
|
||||
post_to_inbox(activity)
|
||||
|
|
|
@ -71,19 +71,15 @@
|
|||
{% elif obj | has_type('Question') %}
|
||||
{{ obj.content | clean | safe }}
|
||||
|
||||
{% if obj.id | is_from_outbox %}
|
||||
{% if obj.id | is_from_outbox or (meta.question_replies and (obj.closed or meta.voted_for)) %}
|
||||
<ul style="list-style:none;padding:0;">
|
||||
{% set total_votes = [0] %}
|
||||
{% for oneOf in obj.oneOf %}
|
||||
{% if oneOf.replies %}
|
||||
{% if total_votes.append(total_votes.pop() + oneOf.replies.totalItems) %}{% endif %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
{% set total_votes = meta.question_replies %}
|
||||
|
||||
{% for oneOf in obj.oneOf %}
|
||||
{% set pct = 0 %}
|
||||
{% if total_votes[0] > 0 and oneOf.replies %}
|
||||
{% set pct = oneOf.replies.totalItems * 100.0 / total_votes[0] %}
|
||||
{% if total_votes > 0 %}
|
||||
{% set cnt = oneOf.name | get_answer_count(meta) %}
|
||||
{% set pct = cnt * 100.0 / total_votes %}
|
||||
{% endif %}
|
||||
<li class="answer">
|
||||
<span class="answer-bar color-menu-background" style="width:{{pct}}%;"></span>
|
||||
|
@ -95,10 +91,10 @@
|
|||
{% endfor %}
|
||||
</ul>
|
||||
<p><small>
|
||||
{% if obj.closed %}
|
||||
Ended {{ obj.endTime | format_timeago }} with <strong>{{ total_votes[0] }}</strong> vote{% if total_votes[0] | gtone %}s{% endif %}.
|
||||
{% if obj.closed or obj.endTime | gtnow %}
|
||||
Ended {{ obj.endTime | format_timeago }} with <strong>{{ total_votes }}</strong> vote{% if total_votes | gtone %}s{% endif %}.
|
||||
{% else %}
|
||||
Ends {{ obj.endTime | format_timeago }} (<strong>{{ total_votes[0] }}</strong> vote{% if total_votes[0] | gtone %}s{% endif %} as of now).
|
||||
Ends {{ obj.endTime | format_timeago }} (<strong>{{ total_votes }}</strong> vote{% if total_votes | gtone %}s{% endif %} as of now).
|
||||
{% endif %}
|
||||
</small></p>
|
||||
{% else %}
|
||||
|
|
Loading…
Reference in a new issue