Chamilo is a learning management system focused on ease of use and accessibility
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
chamilo-lms/main/newscorm/scormMetadata.class.php

203 lines
7.2 KiB

<?php //$id:$
/**
* Container for the scormMetadata class, setup to hold information about the <metadata> element in imsmanifest files
* @package dokeos.learnpath.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;
}
}
?>