Merge pull request #101 from ThomasRubini/traits
This commit is contained in:
commit
a945eb9f6b
@ -159,7 +159,10 @@ class Trait(Base):
|
|||||||
self.DESC_LID = DESC_LID
|
self.DESC_LID = DESC_LID
|
||||||
|
|
||||||
def __str__(self) -> str:
|
def __str__(self) -> str:
|
||||||
return f"{self.TRAIT_ID} {self.NAME_LID}"
|
return f"Trait(TRAIT_ID={self.TRAIT_ID}, NAME_LID={self.NAME_LID}, DESC_LID={self.DESC_LID})"
|
||||||
|
|
||||||
|
def __repr__(self) -> str:
|
||||||
|
return self.__str__()
|
||||||
|
|
||||||
|
|
||||||
class Reaction(Base):
|
class Reaction(Base):
|
||||||
|
@ -40,3 +40,9 @@ def places():
|
|||||||
places_objs = db.session.query(Place).all()
|
places_objs = db.session.query(Place).all()
|
||||||
places_dicts = [{"id": place_obj.PLACE_ID, "name": place_obj.LOCALE.TEXTS[0].TEXT} for place_obj in places_objs]
|
places_dicts = [{"id": place_obj.PLACE_ID, "name": place_obj.LOCALE.TEXTS[0].TEXT} for place_obj in places_objs]
|
||||||
return flask.render_template("admin/places.html", places=places_dicts)
|
return flask.render_template("admin/places.html", places=places_dicts)
|
||||||
|
|
||||||
|
@routes_admin.route("/traits")
|
||||||
|
def traits():
|
||||||
|
traits_objs = db.session.query(Trait).all()
|
||||||
|
traits_dicts = [{"id": trait_obj.TRAIT_ID, "name": trait_obj.Name.TEXTS[0].TEXT, "desc": trait_obj.Desc.TEXTS[0].TEXT} for trait_obj in traits_objs]
|
||||||
|
return flask.render_template("admin/traits.html", traits=traits_dicts)
|
||||||
|
@ -71,3 +71,45 @@ def set_questions():
|
|||||||
db.session.commit()
|
db.session.commit()
|
||||||
|
|
||||||
return {"error": 0}
|
return {"error": 0}
|
||||||
|
|
||||||
|
@routes_api_admin.route("/setTraits", methods=["GET", "POST"])
|
||||||
|
def set_traits():
|
||||||
|
input_lang = flask.request.json["lang"]
|
||||||
|
input_traits = flask.request.json["traits"]
|
||||||
|
|
||||||
|
|
||||||
|
db_traits = db.session.query(Trait).all()
|
||||||
|
|
||||||
|
modified_db_traits = []
|
||||||
|
for input_trait in input_traits:
|
||||||
|
if input_trait["id"]:
|
||||||
|
# modify
|
||||||
|
db_trait = list(filter(lambda db_trait: db_trait.TRAIT_ID == int(input_trait["id"]), db_traits))[0]
|
||||||
|
|
||||||
|
db.session.delete(db_trait.Name.TEXTS[0])
|
||||||
|
db.session.delete(db_trait.Desc.TEXTS[0])
|
||||||
|
db_trait.Name.TEXTS = [Text(None, None, input_lang, input_trait["name"])]
|
||||||
|
db_trait.Desc.TEXTS = [Text(None, None, input_lang, input_trait["desc"])]
|
||||||
|
|
||||||
|
db.session.add(db_trait)
|
||||||
|
modified_db_traits.append(db_trait)
|
||||||
|
else:
|
||||||
|
# add
|
||||||
|
new_trait = Trait(None, None, None)
|
||||||
|
|
||||||
|
new_trait.Name = Locale(None)
|
||||||
|
new_trait.Desc = Locale(None)
|
||||||
|
|
||||||
|
new_trait.Name.TEXTS.append(Text(None, None, input_lang, input_trait["name"]))
|
||||||
|
new_trait.Desc.TEXTS.append(Text(None, None, input_lang, input_trait["desc"]))
|
||||||
|
|
||||||
|
db.session.add(new_trait)
|
||||||
|
|
||||||
|
# delete
|
||||||
|
for db_trait in db_traits:
|
||||||
|
if db_trait not in modified_db_traits:
|
||||||
|
db.session.remove()
|
||||||
|
|
||||||
|
db.session.commit()
|
||||||
|
|
||||||
|
return {"error": 0}
|
@ -2,7 +2,7 @@
|
|||||||
<br>
|
<br>
|
||||||
<a href="/admin/places"> Places </a>
|
<a href="/admin/places"> Places </a>
|
||||||
<br>
|
<br>
|
||||||
<a href="/admin/reactions"> Reactions </a>
|
<a href="/admin/traits"> Traits </a>
|
||||||
<section>
|
<section>
|
||||||
<p> NPC list :</p>
|
<p> NPC list :</p>
|
||||||
{%for npc in npcs%}
|
{%for npc in npcs%}
|
||||||
|
@ -1 +0,0 @@
|
|||||||
<a href="/admin"> go Back </a> <br>
|
|
41
truthinquiry/templates/admin/traits.html
Normal file
41
truthinquiry/templates/admin/traits.html
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
<a href="/admin"> go Back </a> <br>
|
||||||
|
|
||||||
|
<section id="traits">
|
||||||
|
{%for trait in traits%}
|
||||||
|
<section id="{{trait['id']}}">
|
||||||
|
<p> Name: </p>
|
||||||
|
<input class="name_input" value="{{trait['name']}}">
|
||||||
|
<p> Description: </p>
|
||||||
|
<input class="desc_input" value="{{trait['desc']}}">
|
||||||
|
</section>
|
||||||
|
{%endfor%}
|
||||||
|
</section>
|
||||||
|
<button onclick="addNewInput()">Add new</button>
|
||||||
|
<button onclick="saveForm()">Save changes</button>
|
||||||
|
|
||||||
|
<p>Images are viewable in the npc views</p>
|
||||||
|
|
||||||
|
<script src="/static/js/api.js"></script>
|
||||||
|
<script>
|
||||||
|
|
||||||
|
function addNewInput(){
|
||||||
|
let newTrait = traits.lastElementChild.cloneNode(true);
|
||||||
|
newTrait.id = "";
|
||||||
|
newTrait.querySelector(".name_input").value = "";
|
||||||
|
newTrait.querySelector(".desc_input").value = "";
|
||||||
|
traits.appendChild(newTrait);
|
||||||
|
}
|
||||||
|
|
||||||
|
function saveForm(){
|
||||||
|
let data = [];
|
||||||
|
for(let section of traits.querySelectorAll("section")){
|
||||||
|
let trait = {};
|
||||||
|
trait["id"] = section.id
|
||||||
|
trait["name"] = section.querySelector(".name_input").value
|
||||||
|
trait["desc"] = section.querySelector(".desc_input").value
|
||||||
|
data.push(trait);
|
||||||
|
}
|
||||||
|
makeAPIRequest("admin/setTraits", {"traits": data, "lang": "FR"}, {"content": "json"})
|
||||||
|
}
|
||||||
|
|
||||||
|
</script>
|
Loading…
Reference in New Issue
Block a user