Subversion Repositories personal-webbase

Rev

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

  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. ?>