Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 19 additions & 4 deletions moodle_questions/questions/abstract/question.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,22 +2,26 @@
from xml.etree import ElementTree as et

from moodle_questions.utils import cdata_str, estr

import os
from base64 import b64encode

class Question(metaclass=ABCMeta):
"""
This is an abstract class Question used as a parent for specific types of Questions.
"""

def __init__(self, name, question_text, default_mark, general_feedback=None, id_number=None, shuffle=False, *args,
def __init__(self, name, question_text, default_mark, image_name=None, general_feedback=None, id_number=None, shuffle=False, *args,
**kwargs):
"""
:type name: str
:param name: name of the question

:type question_text: str
:param question_text: text of the question


:type image_name:str
:param image_name: name/path of optional image aside the text of the question

:type default_mark: float
:param default_mark: the default mark

Expand All @@ -32,6 +36,7 @@ def __init__(self, name, question_text, default_mark, general_feedback=None, id_
"""
self.name = name
self.question_text = question_text
self.image_name = image_name
self.default_mark = float(default_mark)
self.general_feedback = general_feedback
self.id_number = id_number
Expand Down Expand Up @@ -110,8 +115,15 @@ def _to_xml_element(self):

questiontext = et.SubElement(question, "questiontext", {"format": "html"})
text = et.SubElement(questiontext, "text")
if self.image_name:
self.question_text = self.question_text+'<p><img src="@@PLUGINFILE@@/' + self.image_name.split(os.sep)[-1]+'"></p>'
text.text = cdata_str(self.question_text)


if self.image_name:
file = et.SubElement(questiontext, "file", {"name": self.image_name.split(os.sep)[-1], "path": "/","encoding": "base64"})
with open(self.image_name, "rb") as f:
file.text = str(b64encode(f.read()), "utf-8")

defaultgrade = et.SubElement(question, "defaultgrade")
defaultgrade.text = str(self.default_mark)

Expand All @@ -124,6 +136,9 @@ def _to_xml_element(self):

idnumber = et.SubElement(question, "idnumber")
idnumber.text = estr(self.id_number)

shuffleanswers=et.SubElement(question, "shuffleanswers")
shuffleanswers.text = 'true' if self.shuffle else 'false'
return question

@classmethod
Expand Down