<?php
/*
This file generates an XML file in the AVM standard. 
*/

function generate_ns_tags ( $xmlns ) {
    include ('php/namespaces.php5');
    
    if ( $xmlns == $rdf_ns )
        $tag = "rdf";
    
    if ( $xmlns == $iptc_ns )
        $tag = "Iptc4xmpCore";
    
    if ( $xmlns == $photoshop_ns )
        $tag = "photoshop";
    
    if ( $xmlns == $dc_ns )
        $tag = "dc";
    
    if ( $xmlns == $avm_ns )
        $tag = "avm";
    
    if ( $xmlns == $xaprights_ns )
        $tag = "xapRights";
        
    $tags = array($tag, "<" . $tag . ":", "</" . $tag . ":");
    return $tags;
}

function write_tabs ( $level ) {
    while ( $level > 0 ) {
        echo ( "\t" );
        --$level;
    }
}

function write_namespace ( $xmlns ) {
    $tags = generate_ns_tags ( $xmlns );
    $namespace = "xmlns:" . $tags[0] . "=\"" . $xmlns . "\"";
    echo ( $namespace );
} 

function write_header ( ) {
    include ( 'php/variables.php5' );
    $level = 0;
    
    echo ( $packetOpen . "\n");
    
    ++$level;
    write_tabs ( $level );
    
    echo ( $xmpMetaOpen . "\n" );
    
    ++$level;
    write_tabs ( $level );
    
    echo ( $rdfNamespaceOpen . "\n" );
}

function write_closer ( ) {
    include ( 'php/variables.php5' );
    $level = 2;
    
    write_tabs ( $level );
    echo ( $rdfNamespaceClose . "\n" );
    
    --$level;
    write_tabs ( $level );
    
    echo ( $xmpMetaClose . "\n" );
    
    --$level;
    write_tabs ( $level );
    
    echo ( $packetClose . "\n");
}

function write_data ( $xmlData, $xmlns ) {

    include ( 'php/variables.php5' );
    include ( 'php/namespaces.php5' );
    $level = 3;
    
    $tags = generate_ns_tags ( $xmlns );
    
    write_tabs ( $level );
    echo ( $rdfDescriptionOpen . " xmlns:" . $tags[0] . "=\"" . $xmlns . "\" " . $rdfAbout . "\n" );
    
    if ( $xmlns == $iptc_ns ) {
        ++$level;
        write_tabs ( $level );
        echo ( $iptcCreatorContactOpen . "\n" );
    }
    
    if ( $xmlns == $xaprights_ns ) {
        ++$level;
        write_tabs ( $level );
        echo ( $xapRightsOpen . "\n" );
        
        ++$level;
        write_tabs ( $level );
        echo ( $rdfAltOpen . "\n" );
    }

    foreach ( $xmlData as $key => $data ) {
        if ( !empty($data) ) {
            if ( is_array ( $data ) ) {
                if ( !empty($data[0] ) ){
                    ++$level;
                    write_tabs ( $level );
                    echo ( $tags[1] . $key . ">\n" );
        
                    ++$level;
                    write_tabs ( $level );
                    echo ( $rdfSeqOpen . "\n" );
        
                    foreach ( $data as $listelement ) {
                        if ( !empty($listelement) ) {
                            ++$level;
                            write_tabs ( $level );
                            echo ( $rdfliOpen . $listelement . $rdfliClose . "\n" );
                            --$level;
                        }
                    }
                    write_tabs ( $level );
                    echo ( $rdfSeqClose . "\n" );
                    --$level;
                    write_tabs ( $level );
                    echo ( $tags[2] . $key . ">\n" );
                    --$level;
                }
            } else {
                if ( $xmlns == $xaprights_ns ) {
                    ++$level;
                    write_tabs ( $level );
                    echo ( "<rdf:li xml:lang=\"x-default\">" . $data . "</rdf:li>" . "\n" );
                    --$level;        
                }
                else {
                    ++$level;
                    write_tabs ( $level );
                    echo ( $tags[1] . $key . ">" . $data . $tags[2] . $key . ">\n" );
                    --$level;
                }
            }
        }
    }
    if ( $xmlns == $iptc_ns ) {
        write_tabs ( $level );
        --$level;
        echo ( $iptcCreatorContactClose . "\n" );
    }
    
    if ( $xmlns == $xaprights_ns ) {
        write_tabs ( $level );
        echo ( $rdfAltClose . "\n" );
        
        --$level;
        write_tabs ( $level );
        echo ( $xapRightsClose . "\n" );
    }
    
    write_tabs ( $level );
    echo ( $rdfDescriptionClose . "\n" );
}
?>