From 0f8b87940512bbe70fe425e3db9a7f5fed639fd1 Mon Sep 17 00:00:00 2001 From: David Siegfried Date: Fri, 27 Feb 2026 15:18:29 +0100 Subject: move ilias-folder from vendor to lib/classes, fixes #6313 --- lib/classes/ilias/class.ilObjectXMLParser.php | 322 ++++++++++++++++++++++++++ lib/classes/ilias/class.ilSaxParser.php | 257 ++++++++++++++++++++ lib/ilias_interface/IliasSoap.php | 6 +- vendor/ilias/class.ilObjectXMLParser.php | 322 -------------------------- vendor/ilias/class.ilSaxParser.php | 257 -------------------- 5 files changed, 582 insertions(+), 582 deletions(-) create mode 100644 lib/classes/ilias/class.ilObjectXMLParser.php create mode 100644 lib/classes/ilias/class.ilSaxParser.php delete mode 100644 vendor/ilias/class.ilObjectXMLParser.php delete mode 100644 vendor/ilias/class.ilSaxParser.php diff --git a/lib/classes/ilias/class.ilObjectXMLParser.php b/lib/classes/ilias/class.ilObjectXMLParser.php new file mode 100644 index 0000000..f5e6368 --- /dev/null +++ b/lib/classes/ilias/class.ilObjectXMLParser.php @@ -0,0 +1,322 @@ + +* @version $Id$ +* +* @extends ilSaxParser +*/ + +//include_once './Services/Xml/classes/class.ilSaxParser.php'; +//include_once('./webservice/soap/classes/class.ilObjectXMLException.php'); + +class ilObjectXMLParser extends ilSaxParser +{ + var $object_data = array(); + + private $ref_id; + private $parent_id; + + /** + * 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 = '', $throwException = false) + { + parent::__construct('', $throwException); + $this->setXMLContent($a_xml_data); + } + + function getObjectData() + { + return $this->object_data ? $this->object_data : array(); + } + + /** + * parse xml file + * + * @access private + * @throws ilSaxParserException + * @throws ilObjectXMLException + */ + function parse($a_xml_parser,$a_fp = null) + { + parent::parse($a_xml_parser,$a_fp); + } + + + /** + * 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->addProperty__('type',$a_attribs['type']); + $this->addProperty__('obj_id',is_numeric($a_attribs['obj_id'])?(int) $a_attribs["obj_id"] : ilUtil::__extractId($a_attribs["obj_id"], IL_INST_ID)); + break; + + case 'Title': + break; + + case 'Description': + break; + + case 'Owner': + break; + + case 'CreateDate': + break; + + case 'LastUpdate': + break; + + case 'ImportId': + break; + + case 'References': + $this->time_target = array(); + $this->ref_id = $a_attribs["ref_id"]; + $this->parent_id = $a_attribs['parent_id']; + $this->operations = array(); + break; + + case 'TimeTarget': + $this->time_target['timing_type'] = $a_attribs['type']; + break; + + case 'Timing': + $this->time_target['timing_visibility'] = $a_attribs['visibility']; + if(isset($a_attribs['starting_time'])) + { + $this->time_target['starting_time'] = $a_attribs['starting_time']; + } + if(isset($a_attribs['ending_time'])) + { + $this->time_target['ending_time'] = $a_attribs['ending_time']; + } + + if($a_attribs['ending_time'] < $a_attribs['starting_time']) + throw new ilObjectXMLException('Starting time must be earlier than ending time.'); + break; + + case 'Suggestion': + $this->time_target['changeable'] = $a_attribs['changeable']; + + + if(isset($a_attribs['starting_time'])) + { + $this->time_target['suggestion_start'] = $a_attribs['starting_time']; + } + if(isset($a_attribs['ending_time'])) + { + $this->time_target['suggestion_end'] = $a_attribs['ending_time']; + } + if(isset($a_attribs['earliest_start'])) + { + $this->time_target['earliest_start'] = $a_attribs['earliest_start']; + } + if(isset($a_attribs['latest_end'])) + { + $this->time_target['latest_end'] = $a_attribs['latest_end']; + } + + if($a_attribs['latest_end'] < $a_attribs['earliest_start']) + throw new ilObjectXMLException('Earliest start time must be earlier than latest ending time.'); + if($a_attribs['ending_time'] < $a_attribs['starting_time']) + throw new ilObjectXMLException('Starting time must be earlier than ending time.'); + break; + + //////////////////////////////////////////// + ///////////// MODIFIED ///////////////////// + //////////////////////////////////////////// + case 'Operation': + $this->operations[] = $a_attribs['operations']; + 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__($this->ref_id,$this->parent_id,$this->time_target); + break; + //////////////////////////////////////////// + ///////////// MODIFIED ///////////////////// + //////////////////////////////////////////// + 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; + } + + /** + * @throws ilObjectXMLException + */ + function addReference__($a_ref_id,$a_parent_id,$a_time_target) + { + $reference['ref_id'] = $a_ref_id; + $reference['parent_id'] = $a_parent_id; + $reference['time_target'] = $a_time_target; + + if(isset($reference['time_target']['changeable']) and $reference['time_target']['changeable']) + { + if(!isset($reference['time_target']['earliest_start']) or !isset($reference['time_target']['latest_end'])) + { + throw new ilObjectXMLException('Missing attributes: "earliest_start" and "latest_end" required for attribute "changeable"'); + } + if(!isset($reference['time_target']['suggestion_start']) or !isset($reference['time_target']['suggestion_end'])) + { + throw new ilObjectXMLException('Missing attributes: "starting_time" and "ending_time" required for attribute "changeable"'); + } + if(($reference['time_target']['earliest_start'] < $reference['time_target']['suggestion_start']) or + ($reference['time_target']['earliest_start'] > $reference['time_target']['suggestion_end'])) + { + throw new ilObjectXMLException('Invalid attributes: "earliest_start" must be within "starting_time" and "ending_time"'); + } + if(($reference['time_target']['latest_end'] < $reference['time_target']['suggestion_start']) or + ($reference['time_target']['latest_end'] > $reference['time_target']['suggestion_end'])) + { + throw new ilObjectXMLException('Invalid attributes: "latest_end" must be within "starting_time" and "ending_time"'); + } + } + + $this->object_data[$this->curr_obj]['references'][] = $reference; + } + + //////////////////////////////////////////// + ///////////// MODIFIED ///////////////////// + //////////////////////////////////////////// + function addOperation__($a_value) + { + if($a_value) + $this->object_data[$this->curr_obj]['references'][$this->reference_count]["operations"][] = $a_value; + } + //////////////////////////////////////////// +} +?> diff --git a/lib/classes/ilias/class.ilSaxParser.php b/lib/classes/ilias/class.ilSaxParser.php new file mode 100644 index 0000000..a963f1b --- /dev/null +++ b/lib/classes/ilias/class.ilSaxParser.php @@ -0,0 +1,257 @@ + +* @version $Id$ +* +* @extends PEAR +*/ + + +class ilSaxParser +{ + /** + * XML-Content type 'file' or 'string' + * If you choose file set the filename in constructor + * If you choose 'String' call the constructor with no argument and use setXMLContent() + * @var string + * @access private + */ + var $input_type = null; + + /** + * XML-Content in case of content type 'string' + + * @var string + * @access private + */ + var $xml_content = ''; + + /** + * ilias object + * @var object ilias + * @access private + */ + var $ilias; + + /** + * language object + * @var object language + * @access private + */ + var $lng; + + /** + * xml filename + * @var filename + * @access private + */ + var $xml_file; + + /** + * error handler which handles error messages (used if parsers are called from soap) + * + * @var boolean + */ + var $throwException = false; + /** + * Constructor + * setup ILIAS global object + * @access public + */ + function __construct($a_xml_file = '', $throwException = false) + { + global $ilias, $lng; + + if($a_xml_file) + { + $this->xml_file = $a_xml_file; + $this->input_type = 'file'; + } + + $this->throwException = $throwException; + $this->ilias = &$ilias; + $this->lng = &$lng; + } + + function setXMLContent($a_xml_content) + { + $this->xml_content = $a_xml_content; + $this->input_type = 'string'; + } + + function getXMLContent() + { + return $this->xml_content; + } + + function getInputType() + { + return $this->input_type; + } + + /** + * stores xml data in array + * + * @access private + * @throws ilSaxParserException or ILIAS Error + */ + function startParsing() + { + $xml_parser = $this->createParser(); + $this->setOptions($xml_parser); + $this->setHandlers($xml_parser); + + switch($this->getInputType()) + { + case 'file': + $fp = $this->openXMLFile(); + $this->parse($xml_parser,$fp); + break; + + case 'string': + $this->parse($xml_parser); + break; + + default: + $this->handleError("No input type given. Set filename in constructor or choose setXMLContent()", + $this->ilias->error_obj->FATAL); + break; + } + $this->freeParser($xml_parser); + } + /** + * create parser + * + * @access private + * @throws ilSaxParserException or ILIAS Error + */ + function createParser() + { + $xml_parser = xml_parser_create("UTF-8"); + + if($xml_parser == false) + { + $this->handleError("Cannot create an XML parser handle",$this->ilias->error_obj->FATAL); + } + return $xml_parser; + } + /** + * set parser options + * + * @access private + */ + function setOptions($a_xml_parser) + { + xml_parser_set_option($a_xml_parser,XML_OPTION_CASE_FOLDING,false); + } + /** + * set event handler + * should be overwritten by inherited class + * @access private + */ + function setHandlers($a_xml_parser) + { + echo 'ilSaxParser::setHandlers() must be overwritten'; + } + /** + * open xml file + * + * @access private + * @throws ilSaxParserException or ILIAS Error + */ + function openXMLFile() + { + if(!($fp = fopen($this->xml_file,'r'))) + { + $this->handleError("Cannot open xml file \"".$this->xml_file."\"",$this->ilias->error_obj->FATAL); + } + return $fp; + } + /** + * parse xml file + * + * @access private + * @throws ilSaxParserException or ILIAS Error + */ + function parse($a_xml_parser,$a_fp = null) + { + switch($this->getInputType()) + { + case 'file': + + while($data = fread($a_fp,4096)) + { + $parseOk = xml_parse($a_xml_parser,$data,feof($a_fp)); + } + break; + + case 'string': + $parseOk = xml_parse($a_xml_parser,$this->getXMLContent()); + break; + } + if(!$parseOk + && (xml_get_error_code($a_xml_parser) != XML_ERROR_NONE)) + { + $errorCode = xml_get_error_code($a_xml_parser); + $line = xml_get_current_line_number($a_xml_parser); + $col = xml_get_current_column_number($a_xml_parser); + $this->handleError("XML Parse Error: ".xml_error_string($errorCode)." at line ".$line.", col ". $col . " (Code: ".$errorCode.")" ,$this->ilias->error_obj->FATAL); + } + return true; + + } + + /** + * use given error handler to handle error message or internal ilias error message handle + * + * @param string $message + * @param string $code + * @throws ilSaxParserException or ILIAS Error + */ + protected function handleError($message, $code) { + if ($this->throwException) { + require_once ('./Services/Xml/exceptions/class.ilSaxParserException.php'); + throw new ilSaxParserException ($message, $code); + } else { + if (is_object($this->ilias)) + { + $this->ilias->raiseError($message, $code); + } + else + { + die($message); + } + } + return false; + } + /** + * free xml parser handle + * + * @access private + */ + function freeParser($a_xml_parser) + { + if(!xml_parser_free($a_xml_parser)) + { + $this->ilias->raiseError("Error freeing xml parser handle ",$this->ilias->error_obj->FATAL); + } + } + + /** + * set error handling + * + * @param $error_handler + */ + public function setThrowException ($throwException) + { + $this->throwException = $throwException; + } +} +?> diff --git a/lib/ilias_interface/IliasSoap.php b/lib/ilias_interface/IliasSoap.php index 8b096cf..a250dfb 100644 --- a/lib/ilias_interface/IliasSoap.php +++ b/lib/ilias_interface/IliasSoap.php @@ -3,8 +3,8 @@ # Lifter003: TODO # Lifter010: TODO -require_once 'vendor/ilias/class.ilSaxParser.php'; -require_once 'vendor/ilias/class.ilObjectXMLParser.php'; +require_once 'lib/classes/ilias/class.ilSaxParser.php'; +require_once 'lib/classes/ilias/class.ilObjectXMLParser.php'; /** * class for ILIAS-SOAP-Webservice @@ -725,7 +725,7 @@ class IliasSoap extends StudipSoapClient * get roles * * gets roles of given type for given object - * + * * @param string $role_type type of role (global|local|user|user_login|template or empty) * @param string $id reference id, user id, or -1 for all available roles of given type * @return array|false role-objects diff --git a/vendor/ilias/class.ilObjectXMLParser.php b/vendor/ilias/class.ilObjectXMLParser.php deleted file mode 100644 index f5e6368..0000000 --- a/vendor/ilias/class.ilObjectXMLParser.php +++ /dev/null @@ -1,322 +0,0 @@ - -* @version $Id$ -* -* @extends ilSaxParser -*/ - -//include_once './Services/Xml/classes/class.ilSaxParser.php'; -//include_once('./webservice/soap/classes/class.ilObjectXMLException.php'); - -class ilObjectXMLParser extends ilSaxParser -{ - var $object_data = array(); - - private $ref_id; - private $parent_id; - - /** - * 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 = '', $throwException = false) - { - parent::__construct('', $throwException); - $this->setXMLContent($a_xml_data); - } - - function getObjectData() - { - return $this->object_data ? $this->object_data : array(); - } - - /** - * parse xml file - * - * @access private - * @throws ilSaxParserException - * @throws ilObjectXMLException - */ - function parse($a_xml_parser,$a_fp = null) - { - parent::parse($a_xml_parser,$a_fp); - } - - - /** - * 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->addProperty__('type',$a_attribs['type']); - $this->addProperty__('obj_id',is_numeric($a_attribs['obj_id'])?(int) $a_attribs["obj_id"] : ilUtil::__extractId($a_attribs["obj_id"], IL_INST_ID)); - break; - - case 'Title': - break; - - case 'Description': - break; - - case 'Owner': - break; - - case 'CreateDate': - break; - - case 'LastUpdate': - break; - - case 'ImportId': - break; - - case 'References': - $this->time_target = array(); - $this->ref_id = $a_attribs["ref_id"]; - $this->parent_id = $a_attribs['parent_id']; - $this->operations = array(); - break; - - case 'TimeTarget': - $this->time_target['timing_type'] = $a_attribs['type']; - break; - - case 'Timing': - $this->time_target['timing_visibility'] = $a_attribs['visibility']; - if(isset($a_attribs['starting_time'])) - { - $this->time_target['starting_time'] = $a_attribs['starting_time']; - } - if(isset($a_attribs['ending_time'])) - { - $this->time_target['ending_time'] = $a_attribs['ending_time']; - } - - if($a_attribs['ending_time'] < $a_attribs['starting_time']) - throw new ilObjectXMLException('Starting time must be earlier than ending time.'); - break; - - case 'Suggestion': - $this->time_target['changeable'] = $a_attribs['changeable']; - - - if(isset($a_attribs['starting_time'])) - { - $this->time_target['suggestion_start'] = $a_attribs['starting_time']; - } - if(isset($a_attribs['ending_time'])) - { - $this->time_target['suggestion_end'] = $a_attribs['ending_time']; - } - if(isset($a_attribs['earliest_start'])) - { - $this->time_target['earliest_start'] = $a_attribs['earliest_start']; - } - if(isset($a_attribs['latest_end'])) - { - $this->time_target['latest_end'] = $a_attribs['latest_end']; - } - - if($a_attribs['latest_end'] < $a_attribs['earliest_start']) - throw new ilObjectXMLException('Earliest start time must be earlier than latest ending time.'); - if($a_attribs['ending_time'] < $a_attribs['starting_time']) - throw new ilObjectXMLException('Starting time must be earlier than ending time.'); - break; - - //////////////////////////////////////////// - ///////////// MODIFIED ///////////////////// - //////////////////////////////////////////// - case 'Operation': - $this->operations[] = $a_attribs['operations']; - 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__($this->ref_id,$this->parent_id,$this->time_target); - break; - //////////////////////////////////////////// - ///////////// MODIFIED ///////////////////// - //////////////////////////////////////////// - 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; - } - - /** - * @throws ilObjectXMLException - */ - function addReference__($a_ref_id,$a_parent_id,$a_time_target) - { - $reference['ref_id'] = $a_ref_id; - $reference['parent_id'] = $a_parent_id; - $reference['time_target'] = $a_time_target; - - if(isset($reference['time_target']['changeable']) and $reference['time_target']['changeable']) - { - if(!isset($reference['time_target']['earliest_start']) or !isset($reference['time_target']['latest_end'])) - { - throw new ilObjectXMLException('Missing attributes: "earliest_start" and "latest_end" required for attribute "changeable"'); - } - if(!isset($reference['time_target']['suggestion_start']) or !isset($reference['time_target']['suggestion_end'])) - { - throw new ilObjectXMLException('Missing attributes: "starting_time" and "ending_time" required for attribute "changeable"'); - } - if(($reference['time_target']['earliest_start'] < $reference['time_target']['suggestion_start']) or - ($reference['time_target']['earliest_start'] > $reference['time_target']['suggestion_end'])) - { - throw new ilObjectXMLException('Invalid attributes: "earliest_start" must be within "starting_time" and "ending_time"'); - } - if(($reference['time_target']['latest_end'] < $reference['time_target']['suggestion_start']) or - ($reference['time_target']['latest_end'] > $reference['time_target']['suggestion_end'])) - { - throw new ilObjectXMLException('Invalid attributes: "latest_end" must be within "starting_time" and "ending_time"'); - } - } - - $this->object_data[$this->curr_obj]['references'][] = $reference; - } - - //////////////////////////////////////////// - ///////////// MODIFIED ///////////////////// - //////////////////////////////////////////// - function addOperation__($a_value) - { - if($a_value) - $this->object_data[$this->curr_obj]['references'][$this->reference_count]["operations"][] = $a_value; - } - //////////////////////////////////////////// -} -?> diff --git a/vendor/ilias/class.ilSaxParser.php b/vendor/ilias/class.ilSaxParser.php deleted file mode 100644 index a963f1b..0000000 --- a/vendor/ilias/class.ilSaxParser.php +++ /dev/null @@ -1,257 +0,0 @@ - -* @version $Id$ -* -* @extends PEAR -*/ - - -class ilSaxParser -{ - /** - * XML-Content type 'file' or 'string' - * If you choose file set the filename in constructor - * If you choose 'String' call the constructor with no argument and use setXMLContent() - * @var string - * @access private - */ - var $input_type = null; - - /** - * XML-Content in case of content type 'string' - - * @var string - * @access private - */ - var $xml_content = ''; - - /** - * ilias object - * @var object ilias - * @access private - */ - var $ilias; - - /** - * language object - * @var object language - * @access private - */ - var $lng; - - /** - * xml filename - * @var filename - * @access private - */ - var $xml_file; - - /** - * error handler which handles error messages (used if parsers are called from soap) - * - * @var boolean - */ - var $throwException = false; - /** - * Constructor - * setup ILIAS global object - * @access public - */ - function __construct($a_xml_file = '', $throwException = false) - { - global $ilias, $lng; - - if($a_xml_file) - { - $this->xml_file = $a_xml_file; - $this->input_type = 'file'; - } - - $this->throwException = $throwException; - $this->ilias = &$ilias; - $this->lng = &$lng; - } - - function setXMLContent($a_xml_content) - { - $this->xml_content = $a_xml_content; - $this->input_type = 'string'; - } - - function getXMLContent() - { - return $this->xml_content; - } - - function getInputType() - { - return $this->input_type; - } - - /** - * stores xml data in array - * - * @access private - * @throws ilSaxParserException or ILIAS Error - */ - function startParsing() - { - $xml_parser = $this->createParser(); - $this->setOptions($xml_parser); - $this->setHandlers($xml_parser); - - switch($this->getInputType()) - { - case 'file': - $fp = $this->openXMLFile(); - $this->parse($xml_parser,$fp); - break; - - case 'string': - $this->parse($xml_parser); - break; - - default: - $this->handleError("No input type given. Set filename in constructor or choose setXMLContent()", - $this->ilias->error_obj->FATAL); - break; - } - $this->freeParser($xml_parser); - } - /** - * create parser - * - * @access private - * @throws ilSaxParserException or ILIAS Error - */ - function createParser() - { - $xml_parser = xml_parser_create("UTF-8"); - - if($xml_parser == false) - { - $this->handleError("Cannot create an XML parser handle",$this->ilias->error_obj->FATAL); - } - return $xml_parser; - } - /** - * set parser options - * - * @access private - */ - function setOptions($a_xml_parser) - { - xml_parser_set_option($a_xml_parser,XML_OPTION_CASE_FOLDING,false); - } - /** - * set event handler - * should be overwritten by inherited class - * @access private - */ - function setHandlers($a_xml_parser) - { - echo 'ilSaxParser::setHandlers() must be overwritten'; - } - /** - * open xml file - * - * @access private - * @throws ilSaxParserException or ILIAS Error - */ - function openXMLFile() - { - if(!($fp = fopen($this->xml_file,'r'))) - { - $this->handleError("Cannot open xml file \"".$this->xml_file."\"",$this->ilias->error_obj->FATAL); - } - return $fp; - } - /** - * parse xml file - * - * @access private - * @throws ilSaxParserException or ILIAS Error - */ - function parse($a_xml_parser,$a_fp = null) - { - switch($this->getInputType()) - { - case 'file': - - while($data = fread($a_fp,4096)) - { - $parseOk = xml_parse($a_xml_parser,$data,feof($a_fp)); - } - break; - - case 'string': - $parseOk = xml_parse($a_xml_parser,$this->getXMLContent()); - break; - } - if(!$parseOk - && (xml_get_error_code($a_xml_parser) != XML_ERROR_NONE)) - { - $errorCode = xml_get_error_code($a_xml_parser); - $line = xml_get_current_line_number($a_xml_parser); - $col = xml_get_current_column_number($a_xml_parser); - $this->handleError("XML Parse Error: ".xml_error_string($errorCode)." at line ".$line.", col ". $col . " (Code: ".$errorCode.")" ,$this->ilias->error_obj->FATAL); - } - return true; - - } - - /** - * use given error handler to handle error message or internal ilias error message handle - * - * @param string $message - * @param string $code - * @throws ilSaxParserException or ILIAS Error - */ - protected function handleError($message, $code) { - if ($this->throwException) { - require_once ('./Services/Xml/exceptions/class.ilSaxParserException.php'); - throw new ilSaxParserException ($message, $code); - } else { - if (is_object($this->ilias)) - { - $this->ilias->raiseError($message, $code); - } - else - { - die($message); - } - } - return false; - } - /** - * free xml parser handle - * - * @access private - */ - function freeParser($a_xml_parser) - { - if(!xml_parser_free($a_xml_parser)) - { - $this->ilias->raiseError("Error freeing xml parser handle ",$this->ilias->error_obj->FATAL); - } - } - - /** - * set error handling - * - * @param $error_handler - */ - public function setThrowException ($throwException) - { - $this->throwException = $throwException; - } -} -?> -- cgit v1.0