예제 #1
0
    /**
     *   Export-Function.
     *   creates xml out of nested-set-structure   
     *
     *   @param  int     obj_id  book-id
     *   @param  string  type    Object-Type of XML-Struktur
     *
     *   @return String  xml-Structur
     *   @access    public
     */
    function export($obj_id, $type)
    {
        // {{{
        $result = $this->db->queryF('
			SELECT * FROM xmlnestedset,xmltags 
			WHERE ns_tag_fk = tag_pk 
			AND ns_book_fk = %s
			AND ns_type = %s 
			ORDER BY ns_l', array('integer', 'text'), array($obj_id, $type));
        if (ilDB::isDbError($result)) {
            die($this->className . "::checkTable(): " . $result->getMessage() . ":<br>" . $q);
        }
        $xml = "";
        $lastDepth = -1;
        while (is_array($row = $this->db->fetchAssoc($result))) {
            // {{{ tags
            $Anfang = "<" . $row[tag_name];
            $result_param = $this->db->queryF('SELECT * FROM xmlparam WHERE tag_fk = %s', array('integer'), array($row[tag_pk]));
            while (is_array($row_param = $this->db->fetchAssoc($result_param))) {
                $param_value = $row_param[param_value];
                if (is_object($this->param_modifier)) {
                    $obj =& $this->param_modifier;
                    $method = $this->param_modifier_method;
                    $param_value = $obj->{$method}($row[tag_name], $row_param[param_name], $param_value);
                }
                $Anfang .= " " . $row_param[param_name] . "=\"" . $param_value . "\"";
            }
            $Anfang .= ">";
            $Ende = "</" . $row[tag_name] . ">";
            // }}}
            // {{{ TagValue
            if ($row[tag_name] == "TAGVALUE") {
                $result_value = $this->db->queryF('SELECT * FROM xmlvalue WHERE tag_fk = %s', array('integer'), array($row[tag_pk]));
                $row_value = $this->db->fetchAssoc($result_value);
                $Anfang = $row_value["tag_value"];
                $Ende = "";
                $Anfang = htmlspecialchars($Anfang);
                // $Anfang = utf8_encode($Anfang);
            }
            // }}}
            $D = $row[tag_depth];
            if ($D == $lastDepth) {
                $xml .= $xmlE[$D];
                $xml .= $Anfang;
                $xmlE[$D] = $Ende;
            } else {
                if ($D > $lastDepth) {
                    $xml .= $Anfang;
                    $xmlE[$D] = $Ende;
                } else {
                    for ($i = $lastDepth; $i >= $D; $i--) {
                        $xml .= $xmlE[$i];
                    }
                    $xml .= $Anfang;
                    $xmlE[$D] = $Ende;
                }
            }
            $lastDepth = $D;
        }
        for ($i = $lastDepth; $i > 0; $i--) {
            $xml .= $xmlE[$i];
        }
        return $xml;
        // }}}
    }