<?php
/**
 * @copyright (c) Kufer Software GmbH, Loisachstrasse 4, D-84453 Mühldorf
 */

define('ISWIZARDS', true);
include_once '..' . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . '..'
. DIRECTORY_SEPARATOR . 'classes' . DIRECTORY_SEPARATOR . 'constants.php';






class SaveSights extends Wizard
{
  public function __construct()
  {
    $this->wizardName = 'Save Sights';
    $quelle = 'der Datenbank';
    if (SIGHTS_LOADFROMFILE) {
      $quelle = 'dem Sichtenordner';
    }
    $this->wizardDescription = 'Dieser Wizard exportiert Sichten aus ' . $quelle . ' in .sgt Dateien '
        . 'oder spielt gesicherte .sgt Dateien in den Sichtenordner zurück.';
  }

  private function _wrapInP($pMessage)
  {
    return '<p class="wizardbody font">' . $pMessage . '</p>';
  }

  
  public function _getWizardBody()
  {
    $body = '';
    if (GetOperations::getVarValue('import') == '1') {
      $importname = GetOperations::getVarValue('importname');
      if ($importname != '') {
        $this->doRestore($importname);
        $body .= $this->_wrapInP('Die Sicherung ' . CleanOperations::cleanStringForHtml($importname) . ' wurde eingespielt.');
      }
      $deletename = GetOperations::getVarValue('deletename');
      if ($deletename != '') {
        try {
          FSOperations::removeDir($deletename);
          $body .= $this->_wrapInP('Die Sicherung ' . CleanOperations::cleanStringForHtml($deletename) . ' wurde gelöscht.');
        } catch (Exception $ex) {
          $body .= $this->_wrapInP('Beim Löschen der Sicherung ' . CleanOperations::cleanStringForHtml($deletename) . ' ist folgender Fehler aufgetreten: '
             . $ex->getMessage() . BR_WT . '<a href="index.php" class="link wizardbody font">zurück</a>');
        }
      }
    } else {
      if (GetOperations::getVarValue('doexport') == '1') {
        $body .= $this->exportSights();
      }

      $body
       .= "<p class='wizardbody font'>Bitte klicken Sie \n"
       . "<a href='index.php?doexport=1' class='link wizardbody font'>hier</a>\n"
       . " um den <b>Export der Sichten</b> zu starten.</p>\n";

      $subdirs = $this->readSubDirectories();
      if (false !== $subdirs) {
        $nachricht = '<b>In diesem Ordner befinden sich derzeit folgende Sicherungen:</b>' . BR_WT
           . 'Bei Klick auf importieren wird die Sicherung in den Ordner ' . CleanOperations::cleanStringForHtml(ConstantOperations::getPathForSights()) . ' eingespielt.';
        if (!SIGHTS_LOADFROMFILE) {
          $nachricht .= BR_WT . '<b>ACHTUNG!</b> Ihre Einstellungen werden noch aus der Datenbank gelesen. Stellen Sie im Webadmin ein,'
             . 'dass die Sichten aus Dateien gelesen werden ' . '(Einstellungen / Konstanten / Sichten und Settings: "Sichten aus Dateien auslesen") '
             . ', ansonsten wird die Rücksicherung keinen Effekt haben!';
        }
        $nachricht .= BR_WT . $subdirs;
        $body .= BR_WT . $this->_wrapInP($nachricht);
      }
    }

    return $body;
  }

  public function readSubDirectories()
  {
    $subdirs = FSOperations::getSubDirectories('.');

    if (count($subdirs) == 0) {
      return false;
    }

    $result = '';
    foreach ($subdirs as $item) {
      $result .= CleanOperations::cleanStringForHtml($item) . ' <a href="index.php?import=1&amp;'
       . 'importname=' . CleanOperations::cleanStringForHtml($item) . '" title="">[importieren]</a>'
       . '<a href="index.php?import=1&amp;deletename=' . CleanOperations::cleanStringForHtml($item)
       . '" title="">[l&ouml;schen]</a>' . BR_WT . "\r\n";
    }

    return $result;
  }

  public function doRestore($pDirName)
  {
    FSOperations::copyDir($pDirName, ConstantOperations::getPathForSights());
  }

  public function exportSights()
  {
    $dirname = date('YmdHis');
    if (!@mkdir($dirname)) {
      return 'Das Verzeichnis ' . CleanOperations::cleanStringForHtml($dirname) . ' konnte nicht angelegt werden. Bitte überprüfen Sie die Schreibrechte des Web-Servers auf das Verzeichnis ' . dirname(__FILE__);
    }


    try {
      SightsAPI::backupSights($dirname . '/', true);
    } catch (Exception $ex) {
      return $ex->getMessage();
    }
    $dir = @opendir($dirname);
    if ($dir === false) {
      return 'Beim Speichern ist ein Fehler aufgetreten.';
    }
    $fileCount = 0;
    while ((false !== ($file = readdir($dir)))) {
      if ($file !== '.' && $file != '..') {
        $fileCount++;
      }
    }
    closedir($dir);
    $aus = ' aus der Datenbank';
    if (SIGHTS_LOADFROMFILE) {
      $aus = ' aus dem Verzeichnis ' . CleanOperations::cleanStringForHtml(SIGHTS_PATH);
    }

    return $this->_wrapInP('Es wurden ' . $fileCount . ' Sicht' . ($fileCount != 1 ? 'en' : '') . $aus . ' exportiert.');
  }
}
$savesettings = new SaveSights();
$savesettings->start();