ILIAS  release_7 Revision v7.30-3-g800a261c036
All Data Structures Namespaces Files Functions Variables Modules Pages
ilExerciseXMLParser Class Reference

Exercise XML Parser which completes/updates a given exercise by an xml string. More...

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

Public Member Functions

 __construct ($exercise, $a_xml_data, $obj_id=-1)
 Constructor. More...
 
 setHandlers ($a_xml_parser)
 set event handlers More...
 
 handlerBeginTag ($a_xml_parser, $a_name, $a_attribs)
 handler for begin of element More...
 
 handlerEndTag ($a_xml_parser, $a_name)
 handler for end of element More...
 
 handlerCharacterData ($a_xml_parser, $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 ($a_xml_file='', $throwException=false)
 Constructor setup ILIAS global object public. More...
 
 setXMLContent ($a_xml_content)
 
 getXMLContent ()
 
 getInputType ()
 
 startParsing ()
 stores xml data in array More...
 
 createParser ()
 create parser More...
 
 setOptions ($a_xml_parser)
 set parser options More...
 
 setHandlers ($a_xml_parser)
 set event handler should be overwritten by inherited class private More...
 
 openXMLFile ()
 open xml file More...
 
 parse ($a_xml_parser, $a_fp=null)
 parse xml file More...
 
 freeParser ($a_xml_parser)
 free xml parser handle More...
 
 setThrowException ($throwException)
 set error handling More...
 
- Public Member Functions inherited from PEAR
 __construct ($error_class=null)
 Constructor. More...
 
 _PEAR ()
 Destructor (the emulated type of...). More...
 
 registerShutdownFunc ($func, $args=array())
 Use this function to register a shutdown method for static classes. More...
 
 isError ($data, $code=null)
 Tell whether a value is a PEAR error. More...
 
 expectError ($code=' *')
 This method is used to tell which errors you expect to get. More...
 
 popExpect ()
 This method pops one element off the expected error codes stack. More...
 
 _checkDelExpect ($error_code)
 This method checks unsets an error code if available. More...
 
 delExpect ($error_code)
 This method deletes all occurences of the specified element from the expected error codes stack. More...
 
raiseError ($message=null, $code=null, $mode=null, $options=null, $userinfo=null, $error_class=null, $skipmsg=false)
 This method is a wrapper that returns an instance of the configured error class with this object's default error handling applied. More...
 
throwError ($message=null, $code=null, $userinfo=null)
 Simpler form of raiseError with fewer options. More...
 
 staticPushErrorHandling ($mode, $options=null)
 
 staticPopErrorHandling ()
 
 pushErrorHandling ($mode, $options=null)
 Push a new error handler on top of the error handler options stack. More...
 
 popErrorHandling ()
 Pop the last error handler used. More...
 
 loadExtension ($ext)
 OS independant PHP extension load. More...
 

Data Fields

 $exercise
 
 $obj_id
 
 $result
 
 $mode
 
 $assignment
 
 $storage
 
- Data Fields inherited from ilSaxParser
 $input_type = null
 
 $xml_content = ''
 
 $ilias
 
 $lng
 
 $xml_file
 
 $throwException = false
 
- Data Fields inherited from PEAR
 $_debug = false
 
 $_default_error_mode = null
 
 $_default_error_options = null
 
 $_default_error_handler = ''
 
 $_error_class = 'PEAR_Error'
 
 $_expected_errors = array()
 

Static Public Attributes

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

Protected Member Functions

 trimAndStripAttribs (array $attribs)
 
 trimAndStrip (string $input)
 
- Protected Member Functions inherited from ilSaxParser
 handleError ($message, $code)
 use given error handler to handle error message or internal ilias error message handle More...
 

Private Member Functions

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

Additional Inherited Members

- Static Public Member Functions inherited from PEAR
static & getStaticProperty ($class, $var)
 If you have a class that's mostly/entirely static, and you need static properties, you can use this method to simulate them. More...
 
static setErrorHandling ($mode=null, $options=null)
 Sets how errors generated by this object should be handled. More...
 

Detailed Description

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 13 of file class.ilExerciseXMLParser.php.

Constructor & Destructor Documentation

◆ __construct()

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

Constructor.

Parameters
ilExercise$exerciseexisting exercise object
string$a_xml_filexml data
int$obj_idobj id of exercise which is to be updated public

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

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

70  {
71  // @todo: needs to be revised for multiple assignments per exercise
72 
74 
75  $this->exercise = $exercise;
76  // get all assignments and choose first one if exists, otherwise create
78  if (count($assignments) > 0) {
79  $this->assignment = new ilExAssignment($assignments [0]["id"]);
80  } else {
81  $this->assignment = new ilExAssignment();
82  $this->assignment->setExerciseId($exercise->getId());
83  $this->assignment->save();
84  }
85 
86  $this->storage = new ilFSStorageExercise($this->exercise->getId(), $this->assignment->getId());
87  $this->storage->create();
88  $this->storage->init();
89 
90  $this->setXMLContent($a_xml_data);
91  $this->obj_id = $obj_id;
92  $this->result = false;
93  }
static getAssignmentDataOfExercise($a_exc_id)
Get assignments data of an exercise in an array.
Exercise assignment.
__construct(Container $dic, ilPlugin $plugin)
setXMLContent($a_xml_content)
+ Here is the call graph for this function:

Member Function Documentation

◆ getAssignment()

ilExerciseXMLParser::getAssignment ( )

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

References $assignment.

336  {
337  return $this->assignment;
338  }

◆ handlerBeginTag()

ilExerciseXMLParser::handlerBeginTag (   $a_xml_parser,
  $a_name,
  $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 117 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, and trimAndStripAttribs().

118  {
119  $a_attribs = $this->trimAndStripAttribs($a_attribs);
120  switch ($a_name) {
121  case 'Exercise':
122  if (isset($a_attribs["obj_id"])) {
123  $read_obj_id = ilUtil::__extractId($a_attribs["obj_id"], IL_INST_ID);
124  if ($this->obj_id != -1 && (int) $read_obj_id != -1 && (int) $this->obj_id != (int) $read_obj_id) {
125  throw new ilExerciseException("Object IDs (xml $read_obj_id and argument " . $this->obj_id . ") do not match!", ilExerciseException::$ID_MISMATCH);
126  }
127  }
128  break;
129  case 'Member':
130  $this->usr_action = $a_attribs["action"];
131  $this->usr_id = ilUtil::__extractId($a_attribs["usr_id"], IL_INST_ID);
132  break;
133 
134  case 'File':
135  $this->file_action = $a_attribs["action"];
136  break;
137  case 'Content':
139  if ($a_attribs["mode"] == "GZIP") {
140  if (!function_exists("gzdecode")) {
141  throw new ilExerciseException("Deflating with gzip is not supported", ilExerciseException::$ID_DEFLATE_METHOD_MISMATCH);
142  }
143 
145  } elseif ($a_attribs["mode"] == "ZLIB") {
146  if (!function_exists("gzuncompress")) {
147  throw new ilExerciseException("Deflating with zlib (compress/uncompress) is not supported", ilExerciseException::$ID_DEFLATE_METHOD_MISMATCH);
148  }
149 
151  }
152  break;
153  case 'Marking':
154  $this->status = $a_attribs["status"];
155  if ($this->status == ilExerciseXMLWriter::$STATUS_NOT_GRADED) {
156  $this->status = "notgraded";
157  } elseif ($this->status == ilExerciseXMLWriter::$STATUS_PASSED) {
158  $this->status = "passed";
159  } else {
160  $this->status = "failed";
161  }
162  break;
163 
164  }
165  }
const IL_INST_ID
Definition: constants.php:38
static __extractId($ilias_id, $inst_id)
extract ref id from role title, e.g.
Exercise exceptions class.
+ Here is the call graph for this function:

◆ handlerCharacterData()

ilExerciseXMLParser::handlerCharacterData (   $a_xml_parser,
  $a_data 
)

handler for character data

Parameters
resource$a_xml_parserxml parser
string$a_datacharacter data

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

234  {
235  if ($a_data != "\n") {
236  $this->cdata .= $a_data;
237  }
238  }

◆ handlerEndTag()

ilExerciseXMLParser::handlerEndTag (   $a_xml_parser,
  $a_name 
)

handler for end of element

Parameters
resource$a_xml_parserxml parser
string$a_nameelement name

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

References comment(), trimAndStrip(), updateFile(), updateMarking(), and updateMember().

176  {
177  switch ($a_name) {
178  case 'Exercise':
179  $this->result = true;
180  break;
181  case 'Title':
182  $this->exercise->setTitle($this->trimAndStrip((string) $this->cdata));
183  $this->assignment->setTitle($this->trimAndStrip((string) $this->cdata));
184  break;
185  case 'Description':
186  $this->exercise->setDescription($this->trimAndStrip((string) $this->cdata));
187  break;
188  case 'Instruction':
189  $this->assignment->setInstruction($this->trimAndStrip((string) $this->cdata));
190  break;
191  case 'DueDate':
192  $this->assignment->setDeadLine($this->trimAndStrip((string) $this->cdata));
193  break;
194  case 'Member':
195  $this->updateMember($this->usr_id, $this->usr_action);
196  // update marking after update member.
197  $this->updateMarking($this->usr_id);
198  break;
199  case 'Filename':
200  $this->file_name = $this->trimAndStrip((string) $this->cdata);
201  break;
202  case 'Content':
203  $this->file_content = $this->trimAndStrip((string) $this->cdata);
204  break;
205  case 'File':
206  $this->updateFile($this->file_name, $this->file_content, $this->file_action);
207  break;
208  case 'Comment':
209  $this->comment = $this->trimAndStrip((string) $this->cdata);
210  break;
211  case 'Notice':
212  $this->notice = $this->trimAndStrip((string) $this->cdata);
213  break;
214  case 'Mark':
215  $this->mark = $this->trimAndStrip((string) $this->cdata);
216  break;
217  case 'Marking':
218  // see Member end tag
219  break;
220  }
221 
222  $this->cdata = '';
223 
224  return;
225  }
updateMarking($usr_id)
update marking of member
updateFile($filename, $b64encodedContent, $action)
update file according to filename
comment()
Definition: comment.php:2
updateMember($user_id, $action)
update member object according to given action
+ Here is the call graph for this function:

◆ setHandlers()

ilExerciseXMLParser::setHandlers (   $a_xml_parser)

set event handlers

Parameters
resourcereference to the xml parser private

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

103  {
104  xml_set_object($a_xml_parser, $this);
105  xml_set_element_handler($a_xml_parser, 'handlerBeginTag', 'handlerEndTag');
106  xml_set_character_data_handler($a_xml_parser, 'handlerCharacterData');
107  }

◆ 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 300 of file class.ilExerciseXMLParser.php.

References ilSaxParser\startParsing().

301  {
302  $this->startParsing();
303  return $this->result > 0;
304  }
startParsing()
stores xml data in array
+ Here is the call graph for this function:

◆ trimAndStrip()

ilExerciseXMLParser::trimAndStrip ( string  $input)
protected

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

References ilUtil\stripSlashes().

Referenced by handlerEndTag(), and trimAndStripAttribs().

349  : string
350  {
351  return ilUtil::stripSlashes(trim($input));
352  }
static stripSlashes($a_str, $a_strip_html=true, $a_allow="")
strip slashes if magic qoutes is enabled
+ 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 340 of file class.ilExerciseXMLParser.php.

References $ret, and trimAndStrip().

Referenced by handlerBeginTag().

340  : array
341  {
342  $ret = [];
343  foreach ($attribs as $k => $v) {
344  $ret[$k] = $this->trimAndStrip((string) $v);
345  }
346  return $ret;
347  }
$ret
Definition: parser.php:6
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ updateFile()

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

update file according to filename

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

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

References $CONTENT_GZ_COMPRESSED, $CONTENT_ZLIB_COMPRESSED, and $filename.

Referenced by handlerEndTag().

271  {
272  if (strlen($filename) == 0) {
273  return;
274  }
275  $filename = $this->storage->getAbsolutePath() . "/" . $filename;
276 
277  if ($action == "Attach") {
278  $content = base64_decode((string) $b64encodedContent);
279  if ($this->mode == ilExerciseXMLParser::$CONTENT_GZ_COMPRESSED) {
280  $content = gzdecode($content);
281  } elseif ($this->mode == ilExerciseXMLParser::$CONTENT_ZLIB_COMPRESSED) {
282  $content = gzuncompress($content);
283  }
284 
285  //echo $filename;
286  $this->storage->writeToFile($content, $filename);
287  }
288  if ($action == "Detach") {
289  $this->storage->deleteFile($filename);
290  }
291  }
$filename
Definition: buildRTE.php:89
+ Here is the caller graph for this function:

◆ updateMarking()

ilExerciseXMLParser::updateMarking (   $usr_id)
private

update marking of member

Parameters
int$usr_id

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

References comment(), and ilUtil\stripSlashes().

Referenced by handlerEndTag().

312  {
313  $member_status = $this->assignment->getMemberStatus($usr_id);
314  if (isset($this->mark)) {
315  $member_status->setMark(ilUtil::stripSlashes($this->mark));
316  }
317  if (isset($this->comment)) {
318  $member_status->setComment(ilUtil::stripSlashes($this->comment));
319  }
320  if (isset($this->status)) {
321  $member_status->setStatus(ilUtil::stripSlashes($this->status));
322  }
323  if (isset($this->notice)) {
324  $member_status->setNotice(ilUtil::stripSlashes($this->notice));
325  }
326  $member_status->update();
327 
328  // reset variables
329  $this->mark = null;
330  $this->status = null;
331  $this->notice = null;
332  $this->comment = null;
333  }
comment()
Definition: comment.php:2
static stripSlashes($a_str, $a_strip_html=true, $a_allow="")
strip slashes if magic qoutes is enabled
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ updateMember()

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

update member object according to given action

Parameters
int$user_id
string$actioncan be Attach or Detach

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

Referenced by handlerEndTag().

248  {
249  if (!is_int($user_id) || $user_id <= 0) {
250  return;
251  }
252  $memberObject = new ilExerciseMembers($this->exercise);
253 
254  if ($action == "Attach" && !$memberObject->isAssigned($user_id)) {
255  $memberObject->assignMember($user_id);
256  }
257 
258  if ($action == "Detach" && $memberObject->isAssigned($user_id)) {
259  $memberObject->deassignMember($user_id);
260  }
261  }
Class ilExerciseMembers.
+ Here is the caller graph for this function:

Field Documentation

◆ $assignment

ilExerciseXMLParser::$assignment

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

Referenced by getAssignment().

◆ $CONTENT_GZ_COMPRESSED

ilExerciseXMLParser::$CONTENT_GZ_COMPRESSED = 1
static

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

Referenced by handlerBeginTag(), and updateFile().

◆ $CONTENT_NOT_COMPRESSED

ilExerciseXMLParser::$CONTENT_NOT_COMPRESSED = 0
static

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

Referenced by handlerBeginTag().

◆ $CONTENT_ZLIB_COMPRESSED

ilExerciseXMLParser::$CONTENT_ZLIB_COMPRESSED = 2
static

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

Referenced by handlerBeginTag(), and updateFile().

◆ $exercise

ilExerciseXMLParser::$exercise

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

Referenced by __construct().

◆ $mode

ilExerciseXMLParser::$mode

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

◆ $obj_id

ilExerciseXMLParser::$obj_id

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

Referenced by __construct().

◆ $result

ilExerciseXMLParser::$result

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

◆ $storage

ilExerciseXMLParser::$storage

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


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