* * @extends ilSaxParser * @package common */ class Ilias3ObjectXMLParser extends Ilias3SaxParser { var $object_data = []; /** * 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; } } ?>