Subversion Repositories personal-webbase

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
1 daniel-mar 1
<?php
2
 
3
if (!defined('WBLEGAL')) die('Kann nicht ohne Personal WebBase ausgef&uuml;hrt werden.');
4
 
5
if (!headers_sent()) header("Pragma: public");
6
if (!headers_sent()) header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
7
if (!headers_sent()) header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
8
if (!headers_sent()) header("Cache-Control: private", false);
9
if (!headers_sent()) header("Content-type: application/octet-stream");
10
if (!headers_sent()) header("Content-Disposition: attachment; filename=\"Personal WebBase-Dump.xml\"");
11
if (!headers_sent()) header("Content-Transfer-Encoding: binary");
12
 
13
flush();
14
 
15
// Kleinsten Datensatz finden, um Exportdatei übersichtlich zu halten (kleinster Wert bekommt id=1)
16
 
17
$min = 'x';
18
foreach ($tables_modules as $m1 => $m2)
19
{
20
        $rs = db_query("SELECT MIN(`id`) AS `mi` FROM `$m1`");
21
        $rw = db_fetch($rs);
22
        if ((($rw['mi'] < $min) || ($min == 'x')) && ($rw['mi'] != ''))
23
                $min = $rw['mi'];
24
}
25
unset($m1);
26
unset($m2);
27
if ($min == 'x') $min = 0;
28
 
29
function binaere_daten($inp)
30
{
31
        $res = false;
32
        for ($i=0; $i<=31; $i++)
33
        {
34
                // Ausnahme: 09h, 0Ah, 0Dh
35
                if ((strpos($inp, chr($i)) !== false) && ($i != 9) && ($i != 10) && ($i != 13))
36
                {
37
                        $res = true;
38
                }
39
        }
40
        return $res;
41
}
42
 
43
// Exportieren
44
 
45
$webbasedump = new XmlElement;
46
 
47
$webbasedump->name                                      = 'webbasedump';
48
$webbasedump->attributes['xmlns']       = 'http://www.personal-webbase.de/';
49
$webbasedump->attributes['version'] = '1.0';
50
$webbasedump->attributes['server']      = $configuration['common_links_notifier']['wb_system_url'];
51
$webbasedump->attributes['account'] = $wb_user_username;
52
$webbasedump->attributes['date']        = date('Y-m-d');
53
$webbasedump->attributes['time']        = date('H:i:s');
54
 
55
function is_cnid($fieldname)
56
{
57
        if (strlen($fieldname) < strlen('_cnid'))
58
        {
59
                return false;
60
        }
61
        else
62
        {
63
                return (substr(strtolower($fieldname), strlen($fieldname)-strlen('_cnid'), strlen('_cnid')) == '_cnid');
64
        }
65
}
66
 
67
foreach ($tables_modules as $n1 => $n2)
68
{
69
        if (isset($tables_database[$n1]['user_cnid']))
70
        {
71
                $res = db_query("SELECT * FROM `$n1` WHERE `user_cnid` = '".$benutzer['id']."'");
72
                if (db_num($res) > 0)
73
                {
74
                        $table = new XmlElement;
75
                        $table->name                                                     = 'table';
76
                        $table->attributes['name'] = substr(strtolower($n1), strlen($WBConfig->getMySQLPrefix()), strlen($n1)-strlen($WBConfig->getMySQLPrefix()));
77
 
78
                        while ($row = db_fetch($res))
79
                        {
80
                                $element = new XmlElement;
81
                                $element->name = 'element';
82
 
83
                                $i = 0;
84
                                foreach ($row as $m1 => $m2)
85
                                {
86
                                        $i++;
87
                                        if ($i % 2 == 0)
88
                                        {
89
                                                if (strtolower($m1) != 'user_cnid')
90
                                                {
91
                                                        $value = new XmlElement;
92
                                                        $value->name                                                     = 'value';
93
                                                        $value->attributes['name'] = strtolower($m1);
94
 
95
                                                        if ((($m1 == 'id') || (is_cnid($m1))) && ((strtolower($m1) != 'folder_cnid') || ($m2 != '0')))
96
                                                        {
97
                                                                // Datensatz-Wert (ID-Nummer) im Datensatz anpassen
98
                                                                // Bedingung: Feldname = "ID" oder Postfix "_CNID" vorhanden
99
                                                                // Ausnahme:    Feld "FOLDER_CNID" hat den legalen Wert "0"
100
                                                                $value->content = $m2-$min+1;
101
                                                        }
102
                                                        else
103
                                                        {
104
                                                                if (binaere_daten($m2))
105
                                                                {
106
                                                                        $value->content = base64_encode($m2);
107
                                                                        $value->attributes['encode'] = 'base64';
108
                                                                }
109
                                                                else
110
                                                                {
111
                                                                        $value->content = $m2;
112
                                                                }
113
                                                        }
114
 
115
                                                        $element->children[] = $value;
116
                                                }
117
                                        }
118
                                }
119
                                $table->children[] = $element;
120
 
121
                                unset($m1);
122
                                unset($m2);
123
                        }
124
                        $webbasedump->children[] = $table;
125
                }
126
        }
127
}
128
 
129
unset($n1);
130
unset($n2);
131
 
132
$xml = new xml();
133
$output = $xml->object_to_xml_code($webbasedump);
134
 
135
$buffersize = 1024*8;
136
for ($i=0; $i<strlen($output); $i=$i+$buffersize)
137
{
138
        if (strlen($output) < $i+$buffersize)
139
        {
140
                $tmp = substr($output, $i, strlen($output)-$i-1);
141
        }
142
        else
143
        {
144
                $tmp = substr($output, $i, $buffersize);
145
        }
146
        echo $tmp;
147
        flush();
148
}
149
 
150
?>