<?php

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

class DataMenuMatAusgInteresse extends DataMenuMainTopLeft
{
  private $expTeilnehmer;

  private $pflichtfeldFehlerArray = array();
  private $formatFehlerArray = array();

  public function __construct($pUrlparameter)
  {
    parent::__construct($pUrlparameter);
    $this->exportadapter = new ExpMatAusg();
    $this->expTeilnehmer = new \ExpTeilnehmerRekursiv();
    $this->expTeilnehmer->export->expCalculation->enforceParamForValueTeilnehmerEdit = true;
    $this->expTeilnehmer->export->expCalculation->isDataBinding = false;
  }

  public function getsight($pSightId = 731)
  {
    parent::getsight($pSightId);
  }

  public function _getClickPath($pName = 'Interessenbekundung')
  {
    $detailText = $this->toolsettings->clickMaterialAusgabeDetailText != '' ? $this->toolsettings->clickMaterialAusgabeDetailText : 'Materialausgabedetails';
    $uebersichtText = $this->toolsettings->clickMaterialAusgabeUebersichtText != '' ? $this->toolsettings->clickMaterialAusgabeUebersichtText : 'Materialausgabe Übersicht';

    DataMenuMainTopLeft::_getClickPath();
    
    if ($this->toolsettings->titleKursBereich != '') {
      $this->clickpfad = '<span class="clickadresse"> ' . CleanOperations::cleanStringForHtml(stripslashes($this->toolsettings->titleKursBereich)) . ' </span>' . PHP_EOL;
      $this->clickpfad .= '<span class="trennzeichen"> ' . CleanOperations::cleanStringContainingHtml($this->toolsettings->trennzeichenKategorie) . ' </span>' . PHP_EOL;
    }

    $this->clickpfad .= $this->getClickPathStep(
      $this->urlparameter->getEmptyStreamWith(
        array('kathaupt'),
        array('281')
      ),
      'Materialausgabe Übersicht öffnen',
      $uebersichtText
    );

    $this->clickpfad .= $this->getClickPathStep(
      $this->urlparameter->getEmptyStreamWith(
        array('kathaupt', 'material'),
        array('282', $this->getMaterial()->id)
      ),
      'Materialausgabe Details öffnen',
      $detailText
    );

    $stufe = $this->urlparameter->stufe;
    if ($stufe == 1) {
      $this->clickpfad .= '<span class="clickadrbold">' . CleanOperations::cleanStringForHtml($pName) . "</span>\n";
    } elseif ($stufe == 2) {
      $this->clickpfad .= '<span class="clickadresse">' . CleanOperations::cleanStringForHtml($pName) . "</span>\n";
      $this->clickpfad .= '<span class="trennzeichen"> ' . CleanOperations::cleanStringContainingHtml($this->toolsettings->trennzeichenKategorie) . ' </span>';
      $this->clickpfad .= '<span class="clickadrbold">' . CleanOperations::cleanStringForHtml('Kontrolle') . "</span>\n";
    } elseif ($stufe == 3) {
      $this->clickpfad .= '<span class="clickadresse">' . CleanOperations::cleanStringForHtml($pName) . "</span>\n";
      $this->clickpfad .= '<span class="trennzeichen"> ' . CleanOperations::cleanStringContainingHtml($this->toolsettings->trennzeichenKategorie) . ' </span>';
      $this->clickpfad .= '<span class="clickadrbold">' . CleanOperations::cleanStringForHtml('Bestätigung') . "</span>\n";
    }

    return $this->clickpfad;
  }

  public function mainmenu()
  {
    if ($this->toolsettings->showClickpfad) {
      echo $this->getClickPath();
    }
    echo '<div class="hauptseite_ohnestatus">' . "\n" . $this->getContentAnker();
    $this->internerContent();
    echo '</div>';
  }

  public function internerContent()
  {
    $this->getsight();

    $stufe = $this->urlparameter->stufe;

    if ($stufe == 1) {
      $this->showFormular();
    } elseif ($stufe == 2) {
      $this->showKontrollseite();
    } elseif ($stufe == 3) {
      $this->showBestaetigung();
      SessionOperations::clearEditTNFromSession('_matinteresse');
    } else {
      echo $this->getTechnischeProbleme();
    }
  }

  private function showFormular()
  {
    if ($this->urlparameter->material != '') {
      echo $this->getFormular();
    } else {
      echo $this->getTechnischeProbleme();
    }
  }

  private function showKontrollseite()
  {
    if (RequestOperations::isPost()) {
      SessionOperations::getTeilnehmerFromRequest2Session('tedit', 'matinteresse');
    }
    if (!$this->sindEingabenValide()) {
      echo $this->getFormular();
    } else {
      echo $this->getKontrollseite();
    }
  }

  private function showBestaetigung()
  {
    if (!$this->sindEingabenValide()) {
      echo $this->getFormular();
    } else {
      $retour = $this->sendMail();
      echo $retour ? $this->getBestaetigung() : $this->getTechnischeProbleme();
      SessionOperations::setVarValueIntern('matinteresse', array());
    }
  }

  private function sindEingabenValide()
  {
    $editedMa = SessionOperations::getTeilnehmerFromSession('matinteresse')[0];
    if ($editedMa != null) {
      $checkma = new WBAnmeldungCheckDatamodul();
      $this->getsight(731);
      $checkma->vorlage = $this->sight->body;
      $checkma->exportAdapter = $this->expTeilnehmer;
      $checkma->setDatamodul($editedMa);
      if (!$checkma->check('tedit')) {
        $this->pflichtfeldFehlerArray = $checkma->pflichtfeldFehlerArray;
        $this->formatFehlerArray = $checkma->formatFehlerArray;
      }
    }

    return count($this->pflichtfeldFehlerArray) === 0 && count($this->formatFehlerArray) === 0;
  }

  private function getFormular()
  {
    $tn = SessionOperations::getTeilnehmerFromSession('matinteresse')[0];
    $material = $this->getMaterial();
    $header = $this->getSightPart(731, WB_SIGHT_PART_HEADER, array($material));
    $footer = $this->getSightPart(731, WB_SIGHT_PART_FOOTER, array($material));

    $fehlerarray = array_merge($this->pflichtfeldFehlerArray, $this->formatFehlerArray);
    $error = '';
    if (!empty($fehlerarray)) {
      $error = $this->getError($fehlerarray);
    }

    $tmpExportAdapter = $this->exportadapter;
    $this->exportadapter = $this->expTeilnehmer;

    $isFehlerAufgetreten = (count($this->pflichtfeldFehlerArray) > 0 || count($this->formatFehlerArray) > 0);
    if ($isFehlerAufgetreten) {
      $this->exportadapter->setFehler($this->pflichtfeldFehlerArray, $this->formatFehlerArray);
    }
    $body = $this->getSightPart(731, WB_SIGHT_PART_BODY, array($tn));
    $this->exportadapter = $tmpExportAdapter;

    return $error . $header . $body . $footer;
  }

  private function getError($pflichtfeldFehlerArray)
  {
    $isBootstrap = KW_BOOTSTRAP && !SessionOperations::isKuferTools();
    $return = '<div class="';
    if ($isBootstrap) {
      $return .= 'alert alert-danger ';
    }
    $return .= 'warnung-pflicht-wrapper"><p class="warnung-pflicht-text">Bitte überprüfen Sie die rot markierten Datenfelder auf Vollständigkeit und Format:</p><ul class="warnung-pflicht-feld-ul';
    if ($isBootstrap) {
      $return .= ' row';
    }
    $return .= '">';
    foreach ($pflichtfeldFehlerArray as $meldung) {
      if ($meldung != '') {
        $return .= '<li class="warnung-pflicht-feld-li warnung-pflicht-feld-leer';
        if ($isBootstrap) {
          $return .= ' col-sm-4';
        }
        $return .= '">' . CleanOperations::cleanStringContainingHtml($meldung) . '</li>';
      }
    }

    $return .= '</ul></div>';

    return $return;
  }

  private function getMaterial()
  {
    $dbwmat = DBWorkMatAusg::getDefaultInstance();

    return $dbwmat->getMaterialById($this->urlparameter->material);
  }

  private function getTechnischeProbleme()
  {
    return $this->getSightPart(731, WB_SIGHT_PART_NODATA, array(new Datamodul()));
  }

  private function getKontrollseite()
  {
    return $this->getSicht4Interesse(732);
  }

  private function getBestaetigung()
  {
    return $this->getSicht4Interesse(733);
  }

  private function getMailInhalt()
  {
    return $this->getSicht4Interesse(734);
  }

  private function getSicht4Interesse($sicht)
  {
    $tn = SessionOperations::getTeilnehmerFromSession('matinteresse')[0];
    $material = $this->getMaterial();

    $header = $this->getSightPart($sicht, WB_SIGHT_PART_HEADER, array($material));
    $footer = $this->getSightPart($sicht, WB_SIGHT_PART_FOOTER, array($material));

    $tmpExportAdapter = $this->exportadapter;
    $this->exportadapter = $this->expTeilnehmer;
    $body = $this->getSightPart($sicht, WB_SIGHT_PART_BODY, array($tn));

    $this->exportadapter = $tmpExportAdapter;

    return $header . $body . $footer;
  }

  private function sendMail()
  {
    $allgsettings = AllgSettingsAPI::getAllgSettings();
    $vhsmail = CleanOperations::cleanStringForHtml($allgsettings->vhsemail);
    $eingegebeneMail = CleanOperations::cleanStringForHtml($this->toolsettings->matInteresseMail);
    $eingegebenerBetreff = CleanOperations::cleanStringForHtml($this->toolsettings->matInteresseBetreff);
    $standartbetreff = 'Automatisch generierte eMail - Interesse an Material' . $this->getMaterial()->text;
    $to = empty($eingegebeneMail) ? $vhsmail : $eingegebeneMail;
    $subject = empty($eingegebenerBetreff) ? $standartbetreff : $eingegebenerBetreff;

    $email = new smtpMail();
    $email->SetVar2Value('to', $to);
    $email->SetVar2Value('subject', $subject);
    $email->SetVar2Value('contenttype', SMTP_CONTENTTYPE_HTML);
    $email->SetVar2Value('body', $this->getMailInhalt());
    $retour = $email->sendMail();

    if (!$retour) {
      Logger::logg('Konnte eMail an ' . $to . ' nicht versenden', 8000);
    } else {
      Logger::logg('eMail an ' . $to . ' versendet', 5000);
    }

    return $retour;
  }
}