* * @extends ilSaxParser * @package common */ class Ilias3ObjectXMLParser extends Ilias3SaxParser { var $object_data = []; var $curr_obj; var $reference_count; var $cdata = ''; /** * Constructor * * @param object $a_content_object must be of type ilObjContentObject * ilObjTest or ilObjQuestionPool * @param string $a_xml_file xml data * @param string $a_subdir subdirectory in import directory * * @access public */ function __construct($a_xml_data = '') { parent::__construct(); $this->setXMLContent($a_xml_data); } function getObjectData() { return $this->object_data ? $this->object_data : []; } /** * set event handlers * * @param resource reference to the xml parser * * @access private */ function setHandlers($a_xml_parser) { xml_set_object($a_xml_parser, $this); xml_set_element_handler($a_xml_parser, 'handlerBeginTag', 'handlerEndTag'); xml_set_character_data_handler($a_xml_parser, 'handlerCharacterData'); } /** * handler for begin of element * * @param resource $a_xml_parser xml parser * @param string $a_name element name * @param array $a_attribs element attributes array */ function handlerBeginTag($a_xml_parser, $a_name, $a_attribs) { switch ($a_name) { case 'Objects': $this->curr_obj = -1; break; case 'Object': ++$this->curr_obj; $this->reference_count = -1; $this->addProperty__('type', $a_attribs['type']); $this->addProperty__('obj_id', $a_attribs['obj_id']); break; case 'Title': break; case 'Description': break; case 'Owner': break; case 'CreateDate': break; case 'LastUpdate': break; case 'ImportId': break; case 'References': ++$this->reference_count; $this->addReference__($a_attribs['ref_id'], $a_attribs['accessInfo']); break; case 'Operation': break; } } /** * handler for end of element * * @param resource $a_xml_parser xml parser * @param string $a_name element name */ function handlerEndTag($a_xml_parser, $a_name) { switch ($a_name) { case 'Objects': break; case 'Object': break; case 'Title': $this->addProperty__('title', trim($this->cdata)); break; case 'Description': $this->addProperty__('description', trim($this->cdata)); break; case 'Owner': $this->addProperty__('owner', trim($this->cdata)); break; case 'CreateDate': $this->addProperty__('create_date', trim($this->cdata)); break; case 'LastUpdate': $this->addProperty__('last_update', trim($this->cdata)); break; case 'ImportId': $this->addProperty__('import_id', trim($this->cdata)); break; case 'References': $this->addReference__(trim($this->cdata)); break; case 'Operation': $this->addOperation__(trim($this->cdata)); break; } $this->cdata = ''; return; } /** * handler for character data * * @param resource $a_xml_parser xml parser * @param string $a_data character data */ function handlerCharacterData($a_xml_parser, $a_data) { if ($a_data != "\n") { // Replace multiple tabs with one space $a_data = preg_replace("/\t+/", " ", $a_data); $this->cdata .= $a_data; } } // PRIVATE function addProperty__($a_name, $a_value) { $this->object_data[$this->curr_obj][$a_name] = $a_value; /*/ if (is_array($this->object_data[$this->curr_obj][$a_name])) $this->object_data[$this->curr_obj][$a_name][] = $a_value; elseif ($this->object_data[$this->curr_obj][$a_name] != "") { $old_value = $this->object_data[$this->curr_obj][$a_name]; $this->object_data[$this->curr_obj][$a_name] = array($old_value); $this->object_data[$this->curr_obj][$a_name][] = $a_value; } else $this->object_data[$this->curr_obj][$a_name] = $a_value; /**/ } function addReference__($a_value, $a_accessinfo = "") { if ($a_value) { $this->object_data[$this->curr_obj]['references'][$this->reference_count]["ref_id"] = $a_value; $this->object_data[$this->curr_obj]['references'][$this->reference_count]["accessInfo"] = $a_accessinfo; } } function addOperation__($a_value) { if ($a_value) { $this->object_data[$this->curr_obj]['references'][$this->reference_count]["operations"][] = $a_value; } } }