Finish set_questions endpoint

This commit is contained in:
Thomas Rubini 2023-03-16 14:38:00 +01:00
parent 2968997381
commit 6c07221b7d
No known key found for this signature in database
GPG Key ID: C7D287C8C1CAC373
2 changed files with 53 additions and 14 deletions

View File

@ -1,5 +1,5 @@
import flask
from sqlalchemy import select
from sqlalchemy import select, delete, or_
from truthinquiry.ext.database.models import *
from truthinquiry.ext.database.fsa import db
@ -18,8 +18,8 @@ def get_questions():
select(QuestionType, Text)
.select_from(QuestionType)
.join(Locale)
.join(Text)
.filter(Text.LANG==lang)
.join(Text, isouter=True)
.filter(or_(Text.LANG==None, Text.LANG==lang))
.order_by(QuestionType.QUESTION_TYPE_ID)
)
@ -31,7 +31,8 @@ def get_questions():
old_question_type_id = question_type.QUESTION_TYPE_ID
data.append([])
data[-1].append({"text": locale.TEXT})
if locale:
data[-1].append({"text": locale.TEXT})
return data
@ -40,5 +41,33 @@ def set_questions():
if not flask.request.json:
return {"error": 1, "msg": "no json set"}
lang = flask.request.json["lang"]
questions = flask.request.json["questions"]
question_types = flask.request.json["questions"]
# Delete old questions
text_ids_requ = (
select(Locale.LID)
.join(Text).where(Text.LANG==lang)
.join(QuestionType)
)
db.session.execute(
delete(Text)
.where(Text.LID.in_(text_ids_requ.subquery()))
)
# get question LIDs in database
question_lids_requ = (
select(QuestionType.TEXT_LID)
.join(Locale)
)
question_lids = (data[0] for data in db.session.execute(question_lids_requ))
# set new questions
text_obs = []
for question_lid, questions in zip(question_lids, question_types):
for question in questions:
text_obs.append(Text(None, question_lid, lang, question["text"]))
db.session.add_all(text_obs)
db.session.commit()
return {"error": 0}

View File

@ -6,7 +6,8 @@
{%endfor%}
</select>
<form id="questionsTag">
<form id="questionsTag" action="javascript:void(0);">
</form>
<button onclick="saveForm()"> Save changes </button>
@ -24,13 +25,14 @@
<script src="/static/js/api.js"></script>
<script>
let lang = null;
function saveForm(){
var formData = new FormData(questionsTag);
let questionsJson = [];
for(let questionTypeTag of questionsTag.children){
for(let questionTypeTag of questionsTag.querySelectorAll("fieldset")){
let questionTypeJson = [];
questionsJson.push(questionTypeJson);
@ -59,16 +61,25 @@
let questionTypeTag = document.createElement("fieldset")
questionTypeTag.className = 'questionTypeTag';
questionsTag.appendChild(questionTypeTag);
let i = 0;
for(let question of questionType){
function addNewInput(value=""){
let questionTag = document.createElement("input");
questionTypeTag.appendChild(questionTag);
questionTag.value = question.text;
i++;
questionTag.value = value;
}
for(let question of questionType){
addNewInput(question.text);
}
let addNewTag = document.createElement("input")
addNewTag.type = 'button'
addNewTag.value = "Add new";
addNewTag.onclick = () => addNewInput();
questionsTag.appendChild(addNewTag);
}
lang = newLang;
@ -80,5 +91,4 @@
changeLang(langs.value);
</script>