<?php
/**
 * @name:        DBExport <http://jeenaparadies.net/webdesign/jlog/>
 * @author:      Dennis Riehle <selfhtml@riehle-web.com>
 * @version:     1.1
 * @date:        2006-04-20
 * @last change: 2008-10-25 by Jeena Paradies <jlog@jeenaparadies.net>
 * @requires:    MySQLDBExport <http://tutorial.riehle-web.com/scripts/index.php#mysql> 
 */

class DBExport extends JlogPlugin {
  var $handling = "download";  ## "server" um Dump Files auf dem Server
                               ## zu speichern, "download" um die Dateien zum
                               ## Download anzubieten  
  function hook_adminContent($output) {
    $output = "";
    if(isset($_POST['dbexport-init']) AND
       $this->handling == "server")
    {
      $output .= "<pre>Verzeichnisse werden angelegt...\n";
      mkdir(JLOG_BASEPATH . "backup/");
      $output .= "Notwendige Dateien werden angelegt...\n";
      $fp = fopen(JLOG_BASEPATH . "backup/.htaccess", "x");
      flock($fp, LOCK_EX);
      fwrite($fp, "Order deny,allow\r\nDeny from All");
      fclose($fp);
      $output .= "Fertig.</pre>\n"
              .  "<p>Das Plugin wurde erfolgreich eingerichtet, sie es jetzt "
              .  "<a href=\"" . $_SERVER['REQUEST_URI'] . "\">nutzen</a></p>\n";
    }
    elseif((!is_dir(JLOG_BASEPATH . "backup/") OR !file_exists(JLOG_BASEPATH . "backup/.htaccess"))
           AND $this->handling == "server")
    {
      $output .= "<p>Dieses Plugin kann SQL-Dumps der MySQL Datenbank erstellen, "
              .  "damit im Zweifelsfall die Datenbank aus den Backupdateien wieder "
              .  "hergestellt werden kann.</p>\n"
              .  "<p>Das Plugin ist z.Z. so eingstellt, dass es die erzeugten "
              .  "Dumps auf dem Server im Verzeichnis <code>backup/</code> speichert.</p>\n"
              .  "<p>Es scheint, als w&auml;re das Plugin noch nicht initialisiert "
              .  "worden. Damit das DBExport Plugin genutzt werden kann, muss "
              .  "ein entsprechendes Backup-Verzeichnis angelegt werden.</p>\n"
              .  "<p>Wollen Sie DBExport jetzt einrichten?</p>\n"
              .  "<form action=\"" . $_SERVER['REQUEST_URI'] . "\" method=\"post\">\n"
              .  "<input type=\"submit\" name=\"dbexport-init\" value=\"Einrichten\">\n"
              .  "</form>\n";
    }
    else  {
      if(isset($_POST['dbexport-work'])) {
        if(!file_exists(JLOG_BASEPATH . "scripts/MySQLDBExport.class.php") AND
           !file_exists(JLOG_BASEPATH . "scripts/mysqldbexport.class.php")) {
          $output .= "<p><strong>Schwerwiegender Fehler:</strong> "
                  .  "Die Export-Library konnte nicht gefunden werden. "
                  .  "Diese Library wird ben&ouml;tigt und muss im <code>scripts/</code> Verzeichnis "
                  .  "unter dem Namen <code>MySQLDBExport.class.php</code> liegen. "
                  .  "Sie k&ouml;nnen sich die Library "
                  .  "<a href=\"http://tutorial.riehle-web.com/scripts/index.php#mysql\"> "
                  .  "hier</a> besorgen.</p>\n";
        }
        else {
          if(file_exists(JLOG_BASEPATH . "scripts/MySQLDBExport.class.php")) {
            require(JLOG_BASEPATH . "scripts/MySQLDBExport.class.php");
          }
          else {
            require(JLOG_BASEPATH . "scripts/mysqldbexport.class.php");
          }
          $tables = array(JLOG_DB_PREFIX . "attributes",
                          JLOG_DB_PREFIX . "catassign",
                          JLOG_DB_PREFIX . "categories",
                          JLOG_DB_PREFIX . "comments",
                          JLOG_DB_PREFIX . "content");
          $export = new MySQLDBExport();
          $export->set_db(JLOG_DB);
          $export->set_newline("\r\n");
          $dump = $export->make_dump($tables, true);
          if($dump === false) {
            $output .= "<p><strong>Fehler beim Export:</strong> "
                    .  $export->get_error();
          }
          else {
            $filename = "export_" . date("Y-m-d_H:i:s") . ".sql";
            if($this->handling != "server") {
              if(function_exists("gzencode")) {
                $filename .= ".gz";
                $dump = gzencode($dump, 9);
                $mime = "application/x-gzip";
              }
              else {
                $mime = "text/plain";
              }
              $this->senddata($dump, $filename, $mime);
              exit;
            }
            else {
              $fp = fopen(JLOG_BASEPATH . "backup/" . $filename, "w");
              flock($fp, LOCK_EX);
              fwrite($fp, $dump);
              fclose($fp);
              $output .= "<p>Export der Datenbank war erfolgreich, der Dump wurde in "
                      .  "<code>/backup/$filename</code> gespeichert.</p>\n";
            }
          }
        }
      }
      else {
        $output .= "<p>Dieses Plugin kann SQL-Dumps der MySQL Datenbank erstellen, "
                .  "damit im Zweifelsfall die Datenbank aus den Backupdateien wieder "
                .  "hergestellt werden kann.</p>\n";
        if($this->handling != "server") {
          $output .= "<p>Das Plugin ist z.Z. so eingestellt, dass es die erstellen "
                  .  "Dumps zum Download anbietet.</p>\n"
                  .  "<form action=\"" . $_SERVER['REQUEST_URI'] . "\" method=\"post\">\n"
                  .  "<input type=\"submit\" name=\"dbexport-work\" value=\"Dump downloaden\">\n"
                  .  "</form>\n";
        }
        else {
          $output .= "<p>Das Plugin ist z.Z. so eingstellt, dass es die erzeugten "
                  .  "Dumps auf dem Server im Verzeichnis <code>backup/</code> speichert.</p>\n"
                  .  "<form action=\"" . $_SERVER['REQUEST_URI'] . "\" method=\"post\">\n"
                  .  "<input type=\"submit\" name=\"dbexport-work\" value=\"DB jetzt exportieren\">\n"
                  .  "</form>\n";
        }
      }
    }
    return $output;
  }
  
  function senddata($data, $filename, $mime) {
    	$len = strlen($data);
          header("Content-Type: $mime");
          header("Content-Disposition: attachment; filename=\"$filename\"");
          header("Accept-Ranges: bytes");
          header("Content-Length: $len");
    	echo $data;
    	return true;
    }
}
?>
