123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203 |
- <?php //$id:$
- /**
- * Container for the scormMetadata class, setup to hold information about the <metadata> element in imsmanifest files
- * @package dokeos.scorm
- */
- /**
- * scormMetadata class, handling each <metadata> element found in an imsmanifest file
- */
- class scormMetadata {
- var $lom = '';
- var $schema = '';
- var $schemaversion = '';
- var $location = '';
- var $text = '';
- var $attribs = array();
- /**
- * Class constructor. Works in two different ways defined by the first element, being 'db' or 'manifest'.
- * If 'db', then it is built using the information available in the Dokeos database. If 'manifest', then it
- * is built using the element given as a parameter, expecting it to be a <metadata> element pointer from the
- * DOM parser.
- * @param string Type of creation required. Can be 'db' or 'manifest' (default)
- * @param mixed Depending on the type, can be the DB ID of the learnpath item or the pointer to the <metadata> element in the imsmanifest.xml file
- * @return boolean True on success, false on failure
- */
- function scormMetadata($type='manifest', &$element) {
- if(isset($element))
- {
- $v = substr(phpversion(),0,1);
- if($v == 4){
- switch($type){
- case 'db':
- //TODO implement this way of metadata object creation
- return false;
- //break;
- case 'manifest': //do the same as the default
- //if($first_item->type == XML_ELEMENT_NODE) this is already check prior to the call to this function
- $children = $element->children();
- foreach($children as $a => $dummy)
- {
- $child =& $children[$a];
- switch($child->type)
- {
- case XML_ELEMENT_NODE:
- //could be 'lom','schema','schemaversion' or 'location'
- switch($child->tagname){
- case 'lom':
- $childchildren = $child->children();
- foreach($childchildren as $index => $dummy)
- {
- $my_elem = $childchildren[$index];
- //there is generally only one child here
- //$this->lom[] = $my_elem->content;
- $this->lom = $my_elem->content;
- }
- break;
- case 'schema':
- $childchildren = $child->children();
- foreach($childchildren as $index => $dummy)
- {
- $my_elem = $childchildren[$index];
- //there is generally only one child here
- //$this->schema[] = $my_elem->content;
- $this->schema = $my_elem->content;
- }
- break;
- case 'schemaversion':
- $childchildren = $child->children();
- foreach($childchildren as $index => $dummy)
- {
- $my_elem = $childchildren[$index];
- //there is generally only one child here
- //$this->schemaversion[] = $my_elem->content;
- $this->schemaversion = $my_elem->content;
- }
- break;
- case 'location':
- $childchildren = $child->children();
- foreach($childchildren as $index => $dummy)
- {
- $my_elem = $childchildren[$index];
- //there is generally only one child here
- //$this->location[] = $my_elem->content;
- $this->location = $my_elem->content;
- }
- break;
- }
- break;
- case XML_TEXT_NODE:
- if(trim($child->content) != '')
- {
- if(count($children == 1)){
- //if this is the only child at this level and it is a content... save differently
- $this->text = $child->content;
- }else{
- $this->text[$element->tagname] = $child->content;
- }
- }
- break;
- }
- }
- $attributes = $element->attributes();
- //$keep_href = '';
- if(is_array($attributes)){
- foreach($attributes as $a1 => $dummy)
- {
- $attrib =& $attributes[$a1];
- if(trim($attrib->value) != ''){
- $this->attribs[$attrib->name] = $attrib->value;
- }
- }
- }
- return true;
- //break;
- }
- }elseif($v == 5){
- //parsing using PHP5 DOMXML methods
- switch($type){
- case 'db':
- //TODO implement this way of metadata object creation
- return false;
- //break;
- case 'manifest': //do the same as the default
- $children = $element->childNodes;
- foreach($children as $child)
- {
- switch($child->nodeType)
- {
- case XML_ELEMENT_NODE:
- //could be 'lom','schema','schemaversion' or 'location'
- switch($child->tagName){
- case 'lom':
- $childchildren = $child->childNodes;
- foreach($childchildren as $childchild)
- {
- //$this->lom = $childchild->textContent;
- $this->lom = $childchild->nodeValue;
- }
- break;
- case 'schema':
- $childchildren = $child->childNodes;
- foreach($childchildren as $childchild)
- {
- //there is generally only one child here
- //$this->schema = $childchildren[$index]->textContent;
- $this->schema = $childchild->nodeValue;
- }
- break;
- case 'schemaversion':
- $childchildren = $child->childNodes;
- foreach($childchildren as $childchild)
- {
- //there is generally only one child here
- //$this->schemaversion = $childchildren[$index]->textContent;
- $this->schemaversion = $childchild->nodeValue;
- }
- break;
- case 'location':
- $childchildren = $child->childNodes;
- foreach($childchildren as $childchild)
- {
- //there is generally only one child here
- //$this->location = $childchildren[$index]->textContent;
- $this->location = $childchild->nodeValue;
- }
- break;
- }
- break;
- case XML_TEXT_NODE:
- if(trim($child->textContent) != '')
- {
- if(count($children == 1)){
- //if this is the only child at this level and it is a content... save differently
- $this->text = $child->textContent;
- }else{
- $this->text[$element->tagName] = $child->textContent;
- }
- }
- break;
- }
- }
- $attributes = $element->attributes;
- //$keep_href = '';
- if(is_array($attributes)){
- foreach($attributes as $attrib)
- {
- if(trim($attrib->value) != ''){
- $this->attribs[$attrib->name] = $attrib->value;
- }
- }
- }
- return true;
- //break;
- }
- }else{
- //cannot parse because not PHP4 nor PHP5... We should not even be here anyway...
- return false;
- }
- }
- return false;
- }
- }
- ?>
|