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.
		
		
		
		
		
			
		
			
				
					
					
						
							105 lines
						
					
					
						
							5.0 KiB
						
					
					
				
			
		
		
	
	
							105 lines
						
					
					
						
							5.0 KiB
						
					
					
				<?php
 | 
						|
/* For licensing terms, see /license.txt */
 | 
						|
 | 
						|
/**
 | 
						|
 * Container for the scormMetadata class, setup to hold information about the <metadata> element in imsmanifest files
 | 
						|
 * @package chamilo.learnpath.scorm
 | 
						|
 */
 | 
						|
 | 
						|
/**
 | 
						|
 * scormMetadata class, handling each <metadata> element found in an imsmanifest file
 | 
						|
 */
 | 
						|
class scormMetadata {
 | 
						|
    public	$lom = '';
 | 
						|
    public $schema = '';
 | 
						|
    public $schemaversion = '';
 | 
						|
    public $location = '';
 | 
						|
    public $text = '';
 | 
						|
    public $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 Chamilo 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
 | 
						|
     */
 | 
						|
    public function __construct($type = 'manifest', &$element) {
 | 
						|
        if (isset($element)) {
 | 
						|
 | 
						|
            // 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->nodeValue;
 | 
						|
                                         }
 | 
						|
                                         break;
 | 
						|
                                     case 'schema':
 | 
						|
                                         $childchildren = $child->childNodes;
 | 
						|
                                         foreach ($childchildren as $childchild) {
 | 
						|
                                             // There is generally only one child here.
 | 
						|
                                             $this->schema = $childchild->nodeValue;
 | 
						|
                                         }
 | 
						|
                                         break;
 | 
						|
                                     case 'schemaversion':
 | 
						|
                                         $childchildren = $child->childNodes;
 | 
						|
                                         foreach ($childchildren as $childchild) {
 | 
						|
                                             // There is generally only one child here.
 | 
						|
                                             $this->schemaversion = $childchild->nodeValue;
 | 
						|
                                         }
 | 
						|
                                         break;
 | 
						|
                                     case 'location':
 | 
						|
                                         $childchildren = $child->childNodes;
 | 
						|
                                         foreach ($childchildren as $childchild) {
 | 
						|
                                             // There is generally only one child here.
 | 
						|
                                             $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;
 | 
						|
            }
 | 
						|
 | 
						|
            // End parsing using PHP5 DOMXML methods.
 | 
						|
 | 
						|
        }
 | 
						|
        return false;
 | 
						|
    }
 | 
						|
}
 | 
						|
 |