diff --git a/src/vk_parser_app/admin.py b/src/vk_parser_app/admin.py index a02578b..9de54aa 100644 --- a/src/vk_parser_app/admin.py +++ b/src/vk_parser_app/admin.py @@ -2709,6 +2709,30 @@ async def fetch_single_editor_row(pool, post_id: int): post_id ) + +async def editor_post_update_response( + request: Request, + user: dict, + pool, + post_id: int, + action_message: str = "", + action_tone: str = "info", +): + row = await fetch_single_editor_row(pool, post_id) + if not row: + return HTMLResponse("", status_code=204) + return templates.TemplateResponse( + "editor_post_update.html", + base_context( + request, + user, + p=prepare_editor_post(row), + action_message=action_message, + action_tone=action_tone, + ), + ) + + @app.get("/editor", response_class=HTMLResponse) async def editor_feed( request: Request, @@ -2926,13 +2950,7 @@ async def editor_accept(request: Request, post_id: int, csrf_token: str = Form(. ) await audit(user["id"], "editor.accept", "raw_post", post_id) if request.headers.get("hx-request"): - row = await fetch_single_editor_row(pool, post_id) - if row: - categories = await writer_category_options() - return templates.TemplateResponse( - "editor_post.html", - base_context(request, user, p=prepare_editor_post(row), categories=categories) - ) + return await editor_post_update_response(request, user, pool, post_id, "Принято к публикации", "success") return redirect("/editor") @@ -2959,13 +2977,31 @@ async def editor_reject(request: Request, post_id: int, csrf_token: str = Form(. ) await audit(user["id"], "editor.reject", "raw_post", post_id) if request.headers.get("hx-request"): - row = await fetch_single_editor_row(pool, post_id) - if row: - categories = await writer_category_options() - return templates.TemplateResponse( - "editor_post.html", - base_context(request, user, p=prepare_editor_post(row), categories=categories) - ) + return await editor_post_update_response(request, user, pool, post_id, "Отклонено", "error") + return redirect("/editor") + + +@app.post("/editor/{post_id}/return") +async def editor_return_to_review(request: Request, post_id: int, csrf_token: str = Form(...)): + user = await get_current_user(request) + if not user: + return redirect("/login") + require_csrf(user, csrf_token) + pool = await get_pool() + await pool.execute( + """ + UPDATE raw_posts + SET editorial_status=NULL, + reviewed_by=NULL, + reviewed_at=NULL, + updated_at=NOW() + WHERE id=$1 AND rewrite_status='ready' + """, + post_id, + ) + await audit(user["id"], "editor.return_to_review", "raw_post", post_id) + if request.headers.get("hx-request"): + return await editor_post_update_response(request, user, pool, post_id, "Возвращено на проверку", "warning") return redirect("/editor") @@ -3094,13 +3130,8 @@ async def editor_save( ) await audit(user["id"], "editor.save" if status_value == "edited" else "editor.save_accept", "raw_post", post_id) if request.headers.get("hx-request"): - row = await fetch_single_editor_row(pool, post_id) - if row: - categories = await writer_category_options() - return templates.TemplateResponse( - "editor_post.html", - base_context(request, user, p=prepare_editor_post(row), categories=categories) - ) + message = "Принято к публикации" if status_value == "accepted" else "Сохранено как черновик" + return await editor_post_update_response(request, user, pool, post_id, message, "success") return redirect("/editor") diff --git a/src/vk_parser_app/templates/editor_post.html b/src/vk_parser_app/templates/editor_post.html index f5c3a98..caf3b83 100644 --- a/src/vk_parser_app/templates/editor_post.html +++ b/src/vk_parser_app/templates/editor_post.html @@ -1,4 +1,4 @@ -
+
@@ -6,23 +6,7 @@
#{{ p.id }} - {% if p.editorial_status == 'accepted' or p.editorial_status == 'published' %} -
- Принят -
- {% elif p.editorial_status == 'rejected' or p.editorial_status == 'publish_failed' %} -
- Отклонен -
- {% elif p.editorial_status == 'regenerating' %} -
- В работе -
- {% else %} -
- Ожидает -
- {% endif %} + {% include "editor_post_status.html" %}
@@ -190,37 +174,7 @@
- {% if p.editorial_status != 'published' %} -
- {% if p.editorial_status == 'rejected' %} -
- -
- {% else %} - -
- -
- -
- - -
- {% endif %} -
- {% endif %} + {% include "editor_post_actions.html" %}
diff --git a/src/vk_parser_app/templates/editor_post_actions.html b/src/vk_parser_app/templates/editor_post_actions.html new file mode 100644 index 0000000..dda31bb --- /dev/null +++ b/src/vk_parser_app/templates/editor_post_actions.html @@ -0,0 +1,36 @@ +{% if p.editorial_status != 'published' %} +
+
+ {% if action_message %} +
+ + {{ action_message }} +
+ {% endif %} + {% if p.editorial_status in ['rejected', 'accepted', 'publish_failed'] %} + + {% else %} + + {% endif %} +
+ + {% if p.editorial_status not in ['rejected', 'accepted', 'publish_failed'] %} +
+ + +
+ {% endif %} +
+{% endif %} diff --git a/src/vk_parser_app/templates/editor_post_status.html b/src/vk_parser_app/templates/editor_post_status.html new file mode 100644 index 0000000..4db7ee6 --- /dev/null +++ b/src/vk_parser_app/templates/editor_post_status.html @@ -0,0 +1,11 @@ +
+ {% if p.editorial_status == 'accepted' or p.editorial_status == 'published' %} + Принят + {% elif p.editorial_status == 'rejected' or p.editorial_status == 'publish_failed' %} + Отклонен + {% elif p.editorial_status == 'regenerating' %} + В работе + {% else %} + Ожидает + {% endif %} +
diff --git a/src/vk_parser_app/templates/editor_post_update.html b/src/vk_parser_app/templates/editor_post_update.html new file mode 100644 index 0000000..c56bd8e --- /dev/null +++ b/src/vk_parser_app/templates/editor_post_update.html @@ -0,0 +1,3 @@ +{% include "editor_post_actions.html" %} +{% set status_oob = true %} +{% include "editor_post_status.html" %}