ILIAS  release_8 Revision v8.23
ilExerciseXMLParser Class Reference

This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Learning e.V. More...

+ Inheritance diagram for ilExerciseXMLParser:
+ Collaboration diagram for ilExerciseXMLParser:

Public Member Functions

 __construct (ilObjExercise $exercise, string $a_xml_data, int $obj_id=-1)
 
 setHandlers ($a_xml_parser)
 
 handlerBeginTag ($a_xml_parser, string $a_name, array $a_attribs)
 handler for begin of element More...
 
 handlerEndTag ($a_xml_parser, string $a_name)
 handler for end of element More...
 
 handlerCharacterData ($a_xml_parser, string $a_data)
 handler for character data More...
 
 start ()
 starts parsing an changes object by side effect. More...
 
 getAssignment ()
 
- Public Member Functions inherited from ilSaxParser
 __construct (?string $path_to_file='', ?bool $throw_exception=false)
 
 setXMLContent (string $a_xml_content)
 
 getXMLContent ()
 
 getInputType ()
 
 startParsing ()
 stores xml data in array More...
 
 createParser ()
 
 setHandlers ($a_xml_parser)
 
 parse ($a_xml_parser, $a_fp=null)
 

Data Fields

ilObjExercise $exercise
 
int $obj_id
 
bool $result
 
int $mode
 
ilExAssignment $assignment
 
ilFSStorageExercise $storage
 
- Data Fields inherited from ilSaxParser
string $xml_file
 
bool $throw_exception = false
 

Static Public Attributes

static int $CONTENT_NOT_COMPRESSED = 0
 
static int $CONTENT_GZ_COMPRESSED = 1
 
static int $CONTENT_ZLIB_COMPRESSED = 2
 

Protected Member Functions

 trimAndStripAttribs (array $attribs)
 
 trimAndStrip (string $input)
 
- Protected Member Functions inherited from ilSaxParser
 openXMLFile ()
 
 handleError (string $message)
 
 setThrowException (bool $throw_exception)
 

Protected Attributes

string $cdata
 
string $mark
 
string $notice
 
string $comment
 
string $file_content
 
string $file_name
 
string $status
 
string $file_action
 
int $usr_id
 
string $usr_action
 
- Protected Attributes inherited from ilSaxParser
ilLanguage $lng = null
 

Private Member Functions

 updateMember (int $user_id, string $action)
 update member object according to given action More...
 
 updateFile (string $filename, string $b64encodedContent, string $action)
 update file according to filename More...
 
 updateMarking (int $usr_id)
 update marking of member More...
 

Detailed Description

This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Learning e.V.

ILIAS is licensed with the GPL-3.0, see https://www.gnu.org/licenses/gpl-3.0.en.html You should have received a copy of said license along with the source code, too.

If this is not the case or you just want to try ILIAS, you'll find us at: https://www.ilias.de https://github.com/ILIAS-eLearning Exercise XML Parser which completes/updates a given exercise by an xml string.

Author
Roland Küstermann rolan.nosp@m.d@ku.nosp@m.ester.nosp@m.mann.nosp@m..com

Definition at line 23 of file class.ilExerciseXMLParser.php.

Constructor & Destructor Documentation

◆ __construct()

ilExerciseXMLParser::__construct ( ilObjExercise  $exercise,
string  $a_xml_data,
int  $obj_id = -1 
)

Definition at line 46 of file class.ilExerciseXMLParser.php.

References $exercise, $obj_id, ILIAS\GlobalScreen\Provider\__construct(), ilFSStorageExercise\create(), ilExAssignment\getAssignmentDataOfExercise(), ilObject\getId(), and ilSaxParser\setXMLContent().

50  {
51  // @todo: needs to be revised for multiple assignments per exercise
52 
54 
55  $this->exercise = $exercise;
56  // get all assignments and choose first one if exists, otherwise create
57  $assignments = ilExAssignment::getAssignmentDataOfExercise($exercise->getId());
58  if (count($assignments) > 0) {
59  $this->assignment = new ilExAssignment($assignments [0]["id"]);
60  } else {
61  $this->assignment = new ilExAssignment();
62  $this->assignment->setExerciseId($exercise->getId());
63  $this->assignment->save();
64  }
65 
66  $this->storage = new ilFSStorageExercise($this->exercise->getId(), $this->assignment->getId());
67  $this->storage->create();
68  $this->storage->init();
69 
70  $this->setXMLContent($a_xml_data);
71  $this->obj_id = $obj_id;
72  $this->result = false;
73  }
Exercise assignment.
static getAssignmentDataOfExercise(int $a_exc_id)
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
__construct(Container $dic, ilPlugin $plugin)
setXMLContent(string $a_xml_content)
+ Here is the call graph for this function:

Member Function Documentation

◆ getAssignment()

ilExerciseXMLParser::getAssignment ( )

Definition at line 306 of file class.ilExerciseXMLParser.php.

References $assignment.

307  {
308  return $this->assignment;
309  }
Exercise assignment.

◆ handlerBeginTag()

ilExerciseXMLParser::handlerBeginTag (   $a_xml_parser,
string  $a_name,
array  $a_attribs 
)

handler for begin of element

Parameters
resource$a_xml_parserxml parser
string$a_nameelement name
array$a_attribselement attributes array
Exceptions
ilExerciseExceptionwhen obj id != - 1 and if it it does not match the id in the xml

Definition at line 91 of file class.ilExerciseXMLParser.php.

References $CONTENT_GZ_COMPRESSED, $CONTENT_NOT_COMPRESSED, $CONTENT_ZLIB_COMPRESSED, ilExerciseException\$ID_DEFLATE_METHOD_MISMATCH, ilExerciseException\$ID_MISMATCH, ilExerciseXMLWriter\$STATUS_NOT_GRADED, ilExerciseXMLWriter\$STATUS_PASSED, ilUtil\__extractId(), IL_INST_ID, ILIAS\Repository\int(), and trimAndStripAttribs().

91  : void
92  {
93  $a_attribs = $this->trimAndStripAttribs($a_attribs);
94  switch ($a_name) {
95  case 'Exercise':
96  if (isset($a_attribs["obj_id"])) {
97  $read_obj_id = ilUtil::__extractId($a_attribs["obj_id"], IL_INST_ID);
98  if ($this->obj_id != -1 && (int) $read_obj_id != -1 && $this->obj_id !== (int) $read_obj_id) {
99  throw new ilExerciseException("Object IDs (xml $read_obj_id and argument " . $this->obj_id . ") do not match!", ilExerciseException::$ID_MISMATCH);
100  }
101  }
102  break;
103  case 'Member':
104  $this->usr_action = $a_attribs["action"];
105  $this->usr_id = (int) ilUtil::__extractId($a_attribs["usr_id"], IL_INST_ID);
106  break;
107 
108  case 'File':
109  $this->file_action = $a_attribs["action"];
110  break;
111  case 'Content':
113  if ($a_attribs["mode"] == "GZIP") {
114  if (!function_exists("gzdecode")) {
115  throw new ilExerciseException("Deflating with gzip is not supported", ilExerciseException::$ID_DEFLATE_METHOD_MISMATCH);
116  }
117 
119  } elseif ($a_attribs["mode"] == "ZLIB") {
120  if (!function_exists("gzuncompress")) {
121  throw new ilExerciseException("Deflating with zlib (compress/uncompress) is not supported", ilExerciseException::$ID_DEFLATE_METHOD_MISMATCH);
122  }
123 
125  }
126  break;
127  case 'Marking':
128  $this->status = $a_attribs["status"];
129  if ($this->status == ilExerciseXMLWriter::$STATUS_NOT_GRADED) {
130  $this->status = "notgraded";
131  } elseif ($this->status == ilExerciseXMLWriter::$STATUS_PASSED) {
132  $this->status = "passed";
133  } else {
134  $this->status = "failed";
135  }
136  break;
137 
138  }
139  }
const IL_INST_ID
Definition: constants.php:40
static __extractId(string $ilias_id, int $inst_id)
extract ref id from role title, e.g.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
+ Here is the call graph for this function:

◆ handlerCharacterData()

ilExerciseXMLParser::handlerCharacterData (   $a_xml_parser,
string  $a_data 
)

handler for character data

Parameters
resource$a_xml_parserxml parser
string$a_datacharacter data

Definition at line 204 of file class.ilExerciseXMLParser.php.

204  : void
205  {
206  if ($a_data != "\n") {
207  $this->cdata .= $a_data;
208  }
209  }

◆ handlerEndTag()

ilExerciseXMLParser::handlerEndTag (   $a_xml_parser,
string  $a_name 
)

handler for end of element

Parameters
resource$a_xml_parserxml parser
string$a_nameelement name

Definition at line 149 of file class.ilExerciseXMLParser.php.

References ILIAS\UI\examples\Symbol\Glyph\Comment\comment(), trimAndStrip(), updateFile(), updateMarking(), and updateMember().

149  : void
150  {
151  switch ($a_name) {
152  case 'Exercise':
153  $this->result = true;
154  break;
155  case 'Title':
156  $this->exercise->setTitle($this->trimAndStrip((string) $this->cdata));
157  $this->assignment->setTitle($this->trimAndStrip((string) $this->cdata));
158  break;
159  case 'Description':
160  $this->exercise->setDescription($this->trimAndStrip((string) $this->cdata));
161  break;
162  case 'Instruction':
163  $this->assignment->setInstruction($this->trimAndStrip((string) $this->cdata));
164  break;
165  case 'DueDate':
166  $this->assignment->setDeadLine($this->trimAndStrip((string) $this->cdata));
167  break;
168  case 'Member':
169  $this->updateMember($this->usr_id, $this->usr_action);
170  // update marking after update member.
171  $this->updateMarking($this->usr_id);
172  break;
173  case 'Filename':
174  $this->file_name = $this->trimAndStrip((string) $this->cdata);
175  break;
176  case 'Content':
177  $this->file_content = $this->trimAndStrip((string) $this->cdata);
178  break;
179  case 'File':
180  $this->updateFile($this->file_name, $this->file_content, $this->file_action);
181  break;
182  case 'Comment':
183  $this->comment = $this->trimAndStrip((string) $this->cdata);
184  break;
185  case 'Notice':
186  $this->notice = $this->trimAndStrip((string) $this->cdata);
187  break;
188  case 'Mark':
189  $this->mark = $this->trimAndStrip((string) $this->cdata);
190  break;
191  case 'Marking':
192  // see Member end tag
193  break;
194  }
195  $this->cdata = '';
196  }
updateMember(int $user_id, string $action)
update member object according to given action
updateFile(string $filename, string $b64encodedContent, string $action)
update file according to filename
updateMarking(int $usr_id)
update marking of member
+ Here is the call graph for this function:

◆ setHandlers()

ilExerciseXMLParser::setHandlers (   $a_xml_parser)

Definition at line 76 of file class.ilExerciseXMLParser.php.

76  : void
77  {
78  xml_set_object($a_xml_parser, $this);
79  xml_set_element_handler($a_xml_parser, 'handlerBeginTag', 'handlerEndTag');
80  xml_set_character_data_handler($a_xml_parser, 'handlerCharacterData');
81  }

◆ start()

ilExerciseXMLParser::start ( )

starts parsing an changes object by side effect.

Exceptions
ilExerciseExceptionwhen obj id != - 1 and if it it does not match the id in the xml
Returns
boolean true, if no errors happend.

Definition at line 271 of file class.ilExerciseXMLParser.php.

References ilSaxParser\startParsing().

271  : bool
272  {
273  $this->startParsing();
274  return $this->result > 0;
275  }
startParsing()
stores xml data in array
+ Here is the call graph for this function:

◆ trimAndStrip()

ilExerciseXMLParser::trimAndStrip ( string  $input)
protected

Definition at line 320 of file class.ilExerciseXMLParser.php.

References ilUtil\stripSlashes().

Referenced by handlerEndTag(), and trimAndStripAttribs().

320  : string
321  {
322  return ilUtil::stripSlashes(trim($input));
323  }
static stripSlashes(string $a_str, bool $a_strip_html=true, string $a_allow="")
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ trimAndStripAttribs()

ilExerciseXMLParser::trimAndStripAttribs ( array  $attribs)
protected

Definition at line 311 of file class.ilExerciseXMLParser.php.

References trimAndStrip().

Referenced by handlerBeginTag().

311  : array
312  {
313  $ret = [];
314  foreach ($attribs as $k => $v) {
315  $ret[$k] = $this->trimAndStrip((string) $v);
316  }
317  return $ret;
318  }
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ updateFile()

ilExerciseXMLParser::updateFile ( string  $filename,
string  $b64encodedContent,
string  $action 
)
private

update file according to filename

Parameters
string$filename
string$contentbase 64 encoded string
string$actioncan be Attach or Detach

Definition at line 238 of file class.ilExerciseXMLParser.php.

References $CONTENT_GZ_COMPRESSED, $CONTENT_ZLIB_COMPRESSED, and $filename.

Referenced by handlerEndTag().

242  : void {
243  if (strlen($filename) == 0) {
244  return;
245  }
246  $filename = $this->storage->getAbsolutePath() . "/" . $filename;
247 
248  if ($action == "Attach") {
249  $content = base64_decode($b64encodedContent);
250  if ($this->mode == ilExerciseXMLParser::$CONTENT_GZ_COMPRESSED) {
251  $content = gzdecode($content);
252  } elseif ($this->mode == ilExerciseXMLParser::$CONTENT_ZLIB_COMPRESSED) {
253  $content = gzuncompress($content);
254  }
255 
256  //echo $filename;
257  //$this->storage->writeToFile($content, $filename);
258  }
259  if ($action == "Detach") {
260  //$this->storage->deleteFile($filename);
261  }
262  }
$filename
Definition: buildRTE.php:78
+ Here is the caller graph for this function:

◆ updateMarking()

ilExerciseXMLParser::updateMarking ( int  $usr_id)
private

update marking of member

Parameters
int$usr_id

Definition at line 282 of file class.ilExerciseXMLParser.php.

References ILIAS\UI\examples\Symbol\Glyph\Comment\comment(), and ilUtil\stripSlashes().

Referenced by handlerEndTag().

282  : void
283  {
284  $member_status = $this->assignment->getMemberStatus($usr_id);
285  if (isset($this->mark)) {
286  $member_status->setMark(ilUtil::stripSlashes($this->mark));
287  }
288  if (isset($this->comment)) {
289  $member_status->setComment(ilUtil::stripSlashes($this->comment));
290  }
291  if (isset($this->status)) {
292  $member_status->setStatus(ilUtil::stripSlashes($this->status));
293  }
294  if (isset($this->notice)) {
295  $member_status->setNotice(ilUtil::stripSlashes($this->notice));
296  }
297  $member_status->update();
298 
299  // reset variables
300  $this->mark = null;
301  $this->status = null;
302  $this->notice = null;
303  $this->comment = null;
304  }
static stripSlashes(string $a_str, bool $a_strip_html=true, string $a_allow="")
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ updateMember()

ilExerciseXMLParser::updateMember ( int  $user_id,
string  $action 
)
private

update member object according to given action

Definition at line 215 of file class.ilExerciseXMLParser.php.

Referenced by handlerEndTag().

215  : void
216  {
217  if (!is_int($user_id) || $user_id <= 0) {
218  return;
219  }
220  $memberObject = new ilExerciseMembers($this->exercise);
221 
222  if ($action == "Attach" && !$memberObject->isAssigned($user_id)) {
223  $memberObject->assignMember($user_id);
224  }
225 
226  if ($action == "Detach" && $memberObject->isAssigned($user_id)) {
227  $memberObject->deassignMember($user_id);
228  }
229  }
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
+ Here is the caller graph for this function:

Field Documentation

◆ $assignment

ilExAssignment ilExerciseXMLParser::$assignment

Definition at line 43 of file class.ilExerciseXMLParser.php.

Referenced by getAssignment().

◆ $cdata

string ilExerciseXMLParser::$cdata
protected

Definition at line 28 of file class.ilExerciseXMLParser.php.

◆ $comment

string ilExerciseXMLParser::$comment
protected

Definition at line 31 of file class.ilExerciseXMLParser.php.

◆ $CONTENT_GZ_COMPRESSED

int ilExerciseXMLParser::$CONTENT_GZ_COMPRESSED = 1
static

Definition at line 26 of file class.ilExerciseXMLParser.php.

Referenced by handlerBeginTag(), and updateFile().

◆ $CONTENT_NOT_COMPRESSED

int ilExerciseXMLParser::$CONTENT_NOT_COMPRESSED = 0
static

Definition at line 25 of file class.ilExerciseXMLParser.php.

Referenced by handlerBeginTag().

◆ $CONTENT_ZLIB_COMPRESSED

int ilExerciseXMLParser::$CONTENT_ZLIB_COMPRESSED = 2
static

Definition at line 27 of file class.ilExerciseXMLParser.php.

Referenced by handlerBeginTag(), and updateFile().

◆ $exercise

ilObjExercise ilExerciseXMLParser::$exercise

Definition at line 39 of file class.ilExerciseXMLParser.php.

Referenced by __construct().

◆ $file_action

string ilExerciseXMLParser::$file_action
protected

Definition at line 35 of file class.ilExerciseXMLParser.php.

◆ $file_content

string ilExerciseXMLParser::$file_content
protected

Definition at line 32 of file class.ilExerciseXMLParser.php.

◆ $file_name

string ilExerciseXMLParser::$file_name
protected

Definition at line 33 of file class.ilExerciseXMLParser.php.

◆ $mark

string ilExerciseXMLParser::$mark
protected

Definition at line 29 of file class.ilExerciseXMLParser.php.

◆ $mode

int ilExerciseXMLParser::$mode

Definition at line 42 of file class.ilExerciseXMLParser.php.

◆ $notice

string ilExerciseXMLParser::$notice
protected

Definition at line 30 of file class.ilExerciseXMLParser.php.

◆ $obj_id

int ilExerciseXMLParser::$obj_id

Definition at line 40 of file class.ilExerciseXMLParser.php.

Referenced by __construct().

◆ $result

bool ilExerciseXMLParser::$result

Definition at line 41 of file class.ilExerciseXMLParser.php.

◆ $status

string ilExerciseXMLParser::$status
protected

Definition at line 34 of file class.ilExerciseXMLParser.php.

◆ $storage

ilFSStorageExercise ilExerciseXMLParser::$storage

Definition at line 44 of file class.ilExerciseXMLParser.php.

◆ $usr_action

string ilExerciseXMLParser::$usr_action
protected

Definition at line 37 of file class.ilExerciseXMLParser.php.

◆ $usr_id

int ilExerciseXMLParser::$usr_id
protected

Definition at line 36 of file class.ilExerciseXMLParser.php.


The documentation for this class was generated from the following file: