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 ($aktion == 'dest')
  6. {
  7.         if (isset($pwd) && ($pwd != $wb_user_password) && ($wb_user_type == 1))
  8.                 die($header.'<h1>'.$module_information->caption.'</h1>Es wurde ein falsches Passwort eingegeben.'.$footer);
  9.  
  10.         if (strtoupper($sic) != 'OK')
  11.                 die($header.'<h1>'.$module_information->caption.'</h1>Sie m&uuml;ssen das Sicherheitsfeld ausf&uuml;llen!'.$footer);
  12.  
  13.         foreach ($tables_modules as $m1 => $m2)
  14.         {
  15.                 if (isset($tables_modules[$m1]['user_cnid']))
  16.                 {
  17.                         db_query("DELETE FROM `$m1` WHERE `user_cnid` = '".$benutzer['id']."'");
  18.                         if (db_affected_rows() > 0)
  19.                                 db_query("OPTIMIZE TABLE `$m1`");
  20.                 }
  21.         }
  22.  
  23.         unset($m1);
  24.         unset($m2);
  25.  
  26.         echo $header.'<h1>'.$module_information->caption.'</h1>Es wurden alle Datens&auml;tze entfernt.'.$footer;
  27. }
  28.  
  29. if ($aktion == 'dump')
  30. {
  31.         // Datenbank vor Cleaner-Funktion schützen (beim Hochladen können ungültige Ordner- oder sonstige Bezüge entstehen)
  32.  
  33.         if (isset($configuration[$modul]['lock_cleaner_hours']))
  34.         {
  35.                 $hours = $configuration[$modul]['lock_cleaner_hours'];
  36.         }
  37.         else
  38.         {
  39.                 $hours = '';
  40.         }
  41.  
  42.         if (($hours != '') && (is_numeric($hours)))
  43.         {
  44.                 $res = db_query("SELECT DATE_ADD(NOW(), INTERVAL $hours HOUR)");
  45.                 $row = db_fetch($res);
  46.  
  47.                 wb_change_config('lock_cleaner_until', $row[0], 'common_cleaner');
  48.         }
  49.  
  50.         // Problem: Wenn man ZUR SELBEN SEKUNDE wie der Cleaner im Cronjob das Hochladen startet, hat man ggf. gelitten
  51.  
  52.         // Nun beginnen
  53.  
  54.         if (isset($pwd) && ($pwd != $wb_user_password) && ($wb_user_type == 1))
  55.         {
  56.                 echo $header.'<h1>'.$module_information->caption.'</h1>Es wurde ein falsches Passwort eingegeben.'.$footer;
  57.         }
  58.         else
  59.         {
  60.                 if($_FILES['dfile']['tmp_name'])
  61.                 {
  62.                                 $queries = array();
  63.                                 $m = '';
  64.  
  65.                                 // Größten Datensatz finden, um Dateiduplikate zu verhindern
  66.  
  67.                                 $max = 0;
  68.                                 foreach ($tables_modules as $m1 => $m2)
  69.                                 {
  70.                                         $rs = db_query("SELECT MAX(`id`) AS `ma` FROM `$m1`");
  71.                                         $rw = db_fetch($rs);
  72.                                         if ($rw['ma'] > $max)
  73.                                                 $max = $rw['ma'];
  74.                                 }
  75.  
  76.                                 unset($m1);
  77.                                 unset($m2);
  78.  
  79.                                 $xml = new xml();
  80.                                 $array = $xml->xml_file_to_object($_FILES['dfile']['tmp_name']);
  81.  
  82.                                 // Anmerkung: XML-Datei wird nur oberflächlich auf Malformation untersucht. Zusätzliche Attribute oder zusätzliche Knotenpunkte werden ignoriert
  83.  
  84.                                 function is_cnid($fieldname)
  85.                                 {
  86.                                         if (strlen($fieldname) < strlen('_cnid'))
  87.                                         {
  88.                                                 return false;
  89.                                         }
  90.                                         else
  91.                                         {
  92.                                                 return (substr(strtolower($fieldname), strlen($fieldname)-strlen('_cnid'), strlen('_cnid')) == '_cnid');
  93.                                         }
  94.                                 }
  95.  
  96.                                 if (($array->name != 'webbasedump') || ($array->attributes['version'] != '1.0'))
  97.                                 {
  98.                                         echo '<b>Fehler</b><br><br>Dies ist keine g&uuml;ltige Personal WebBase-Datensicherung oder sie ist veraltet.';
  99.                                 }
  100.                                 else
  101.                                 {
  102.                                         foreach ($array->children as $x1 => $x2)
  103.                                         {
  104.                                                 $table = $array->children[$x1];
  105.                                                 if ($table->name == 'table')
  106.                                                 {
  107.                                                         if (!isset($table->attributes['name']))
  108.                                                         {
  109.                                                                 // Fehlermeldung: Malformatierte XML-Struktur
  110.                                                         }
  111.                                                         else if (!isset($tables_modules[$WBConfig->getMySQLPrefix().$table->attributes['name']]))
  112.                                                         {
  113.                                                                 // Fehlermeldung: Tabelle ist nicht vorhanden
  114.                                                         }
  115.                                                         else if (!isset($tables_modules[$WBConfig->getMySQLPrefix().$table->attributes['name']]['user_cnid']))
  116.                                                         {
  117.                                                                 // Fehlermeldung: Tabelle hat kein Benutzerfeld
  118.                                                         }
  119.                                                         else
  120.                                                         {
  121.                                                                 foreach ($table->children as $y1 => $y2)
  122.                                                                 {
  123.                                                                         $element = $table->children[$y1];
  124.                                                                         if ($element->name == 'element')
  125.                                                                         {
  126.                                                                                 $s_namen = '`user_cnid`, ';
  127.                                                                                 $s_werte = "'".$benutzer['id']."', ";
  128.                                                                                 foreach ($element->children as $z1 => $z2)
  129.                                                                                 {
  130.                                                                                         $value = $element->children[$z1];
  131.                                                                                         if ($value->name == 'value')
  132.                                                                                         {
  133.                                                                                                 $name = $value->attributes['name'];
  134.                                                                                                 if (strtolower($name) == 'user_cnid')
  135.                                                                                                 {
  136.                                                                                                         // Fehlermeldung: Versuch, Benutzer zu setzen
  137.                                                                                                 }
  138.                                                                                                 else if ((strtolower($name) == 'folder_cnid') && ($value->content < 0))
  139.                                                                                                 {
  140.                                                                                                         // Fehlermeldung: Ordner-ID im negativen Bereich
  141.                                                                                                 }
  142.                                                                                                 else if ((is_cnid($name)) && ($value->content < 1))
  143.                                                                                                 {
  144.                                                                                                         // Fehlermeldung: Connected-ID kleiner gleich 0.
  145.                                                                                                 }
  146.                                                                                                 else if ((strtolower($name) == 'id') && ($value->content < 1))
  147.                                                                                                 {
  148.                                                                                                         // Fehlermeldung: ID kleiner gleich 0.
  149.                                                                                                 }
  150.                                                                                                 else if (!isset($tables_modules[$WBConfig->getMySQLPrefix().$table->attributes['name']][$name]))
  151.                                                                                                 {
  152.                                                                                                         // Fehlermeldung: Feld nicht vorhanden in Tabelle
  153.                                                                                                 }
  154.                                                                                                 else
  155.                                                                                                 {
  156.                                                                                                         $s_namen .= '`'.$name.'`, ';
  157.                                                                                                         if (isset($value->content))
  158.                                                                                                         {
  159.                                                                                                                 if (isset($value->attributes['encode']) && (strtolower($value->attributes['encode']) == 'base64'))
  160.                                                                                                                 {
  161.                                                                                                                         if ((strtolower($name) == 'id') || (is_cnid($name)))
  162.                                                                                                                         {
  163.                                                                                                                                 $s_werte .= '0x'.string2hex(base64_decode($value->content+$max)).', ';
  164.                                                                                                                         }
  165.                                                                                                                         else
  166.                                                                                                                         {
  167.                                                                                                                                 if ((strtolower($name) == 'folder_cnid') && ($value->content != '0'))
  168.                                                                                                                                 {
  169.                                                                                                                                         $s_werte .= '0x'.string2hex(base64_decode($value->content+$max)).', ';
  170.                                                                                                                                 }
  171.                                                                                                                                 else
  172.                                                                                                                                 {
  173.                                                                                                                                         $s_werte .= '0x'.string2hex(base64_decode($value->content)).', ';
  174.                                                                                                                                 }
  175.                                                                                                                         }
  176.                                                                                                                 }
  177.                                                                                                                 else
  178.                                                                                                                 {
  179.                                                                                                                         if ((strtolower($name) == 'id') || (is_cnid($name)))
  180.                                                                                                                         {
  181.                                                                                                                                 $s_werte .= "'".db_escape($value->content+$max)."', ";
  182.                                                                                                                         }
  183.                                                                                                                         else
  184.                                                                                                                         {
  185.                                                                                                                                 if ((strtolower($name) == 'folder_cnid') && ($value->content != '0'))
  186.                                                                                                                                 {
  187.                                                                                                                                         $s_werte .= "'".db_escape($value->content+$max)."', ";
  188.                                                                                                                                 }
  189.                                                                                                                                 else
  190.                                                                                                                                 {
  191.                                                                                                                                         $aesc = $value->content;
  192.                                                                                                                                         $s_werte .= "'".db_escape($aesc)."', ";
  193.                                                                                                                                 }
  194.                                                                                                                         }
  195.                                                                                                                 }
  196.                                                                                                         }
  197.                                                                                                         else
  198.                                                                                                         {
  199.                                                                                                                 $s_werte .= "'', ";
  200.                                                                                                         }
  201.                                                                                                 }
  202.                                                                                         }
  203.                                                                                 }
  204.                                                                                 unset($z1);
  205.                                                                                 unset($z2);
  206.                                                                                 $s_namen = substr($s_namen, 0, strlen($s_namen)-2);
  207.                                                                                 $s_werte = substr($s_werte, 0, strlen($s_werte)-2);
  208.                                                                                 $queries[] = "INSERT INTO `".$WBConfig->getMySQLPrefix().db_escape($table->attributes['name'])."` ($s_namen) VALUES ($s_werte)";
  209.                                                                         }
  210.                                                                 }
  211.                                                                 unset($y1);
  212.                                                                 unset($y2);
  213.                                                         }
  214.                                                 }
  215.                                         }
  216.                                         unset($x1);
  217.                                         unset($x2);
  218.                                 }
  219.                                 echo $header;
  220.                                 echo '<h1>'.$module_information->caption.'</h1>';
  221.                                 if ($m != '')
  222.                                 {
  223.                                         echo '<b>Bei der Daten&uuml;bertragung sind einige Fehler aufgetreten. Sie sind hier aufgelistet.</b><br><br>'.$m;
  224.                                 }
  225.                                 else
  226.                                 {
  227.                                         foreach ($queries as $q1 => $q2)
  228.                                         {
  229.                                                 db_query($q2);
  230.                                                 //echo $q2.'<br>';
  231.                                         }
  232.                                         unset($q1);
  233.                                         unset($q2);
  234.                                         echo '<b>Die Daten&uuml;bertragung wurde erfolgreich beendet!</b>';
  235.                                 }
  236.                                 echo $footer;
  237.                 }
  238.                 else
  239.                 {
  240.                         echo "$headerBitte geben Sie eine Datei an!$footer";
  241.                 }
  242.         }
  243.  
  244.         // Cleaner wieder aktivieren
  245.  
  246.         wb_change_config('lock_cleaner_until', '0000-00-00 00:00:00', 'common_cleaner');
  247. }
  248.  
  249. ?>