<?php

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


class WBAnmeldungFpBc extends WBAnmeldungNormal
{
  private $expTeilnehmer;
  private $webSettings;
  private $sightIdEingabe = 573;
  private $sightIdKontrolle = 574;
  private $sightIdBestaetigungHtml = 575;
  private $sightIdBestaetigungEmail = 576;

  public function __construct($urlparameter)
  {
    $this->anmeldeart = ANMELDEART_URL_FERIENPROGRAMM;
    $this->expTeilnehmer = new ExpTeilnehmer();
    $this->expTeilnehmer->export->expCalculation->enforceParamForValueTeilnehmerEdit = true;
    $this->webSettings = ToolSettingsAPI::getToolSettings(4);

    parent::__construct($urlparameter); 
  }

  
  public function _checkStep($ziel, $geprueft = 0)
  {
    if (!is_numeric($ziel) || $ziel <= 0) {
      $ziel = 1;
    }

    if ($ziel >= 1 && $geprueft < 1) {
      $this->setStepAndValidated(1);
    }

    if ($ziel >= 2 && $geprueft < 2) {
      $this->setStepAndValidated(2);
    }
    if ($ziel >= 3 && $geprueft < 3) {
      $tmpurlparam = new URLParameterAnmeldungZusatzPerson();
      $this->getSight($this->sightIdEingabe);
      
      if ($ziel == 3 && RequestOperations::isPost() && $tmpurlparam->schrittback == '') {
        SessionOperations::setVarValueAnm(ANMELDEART, ANMELDEART_INTERN_NORMAL);
        $this->getTeilnehmerFromRequest2Session(); 
        $this->getBelegungFromRequest2Session();
      }

      
      $check = new WBAnmeldungCheckHauptTN();
      $check->suppressInfoMail = true;
      $this->checkEingaben($check);
      if (count($this->pflichtfeldFehlerArray) > 0 || count($this->formatFehlerArray) > 0) {
        $this->step = 2;
        SessionOperations::setVarValueWk('last_validated_step', 2);
        $this->setBackToStep(2);

        return;
      }

      $this->setStepAndValidated(3);
    }
    if ($ziel >= 4 && $geprueft <= 4) {
      if (SessionOperations::getVarValueWk('last_validated_step') == 3) {
        $this->setStepAndValidated(4);
      } else {
        $this->setBackToStep(2);
      }
    }
  }

  protected function setStepAndValidated($pStep)
  {
    $this->step = $pStep;
    SessionOperations::setVarValueWk('last_validated_step', $pStep);
  }

  public function getBelegungFromRequest2Session($pRequestPraefix = 'bedit', $pSessionSuffix = '')
  {
    
    parent::getBelegungFromRequest2Session($pRequestPraefix, $pSessionSuffix);
    $email = SessionOperations::getVarValueWk('w_abw_email_b', '');
    SessionOperations::setVarValueWk('w_email', $email);
  }

  
  public function content()
  {
    $isFehlerAufgetreten = (count($this->pflichtfeldFehlerArray) > 0 || count($this->formatFehlerArray) > 0);
    switch ($this->step) {
      default:
      case 1:
      case 2: 
        $this->dataarraybody = SessionOperations::getTeilnehmerFromSession();
        if ($isFehlerAufgetreten) {
          $this->warnungpflichtfelder($this->sightIdEingabe, $this->expTeilnehmer);
        } else {
          $this->showsightcomplete($this->sightIdEingabe, $this->expTeilnehmer);
        }
        break;
      case 3:
        $this->dataarrayheader = SessionOperations::getTeilnehmerFromSession();
        $this->anmeldungbestaetigen();
        break;
      case 4: 
        $this->anmeldungabschliessen();
        if ($this->webSettings->tnDatenBeiAnmeldungBehalten == 0) {
          SessionOperations::setVarValueAnm(ANMELDEART, null);
        }
        break;
    }
  }

  public function _anmeldungbestaetigenPersonenPart()
  {
    return '';
    
  }

  public function _anmeldungbestaetigenKursPart($pKurse)
  {
    $retour = '';
    $this->dataarrayfooter = $this->dataarrayheader = SessionOperations::getTeilnehmerFromSession();
    $this->dataarraybody = $pKurse;
    $retour .= $this->getsightcomplete($this->sightIdKontrolle, new ExpKursuebersicht(), $this->expTeilnehmer);

    return $retour;
  }

  protected function _anmeldungbestaetigenFusszeile()
  {
    return '';
  }

  
  public function getTeilnehmerFromRequest2Session($pRequestPraefix = 'tedit', $pSessionSuffix = '')
  {
    parent::getTeilnehmerFromRequest2Session($pRequestPraefix, $pSessionSuffix);
  }

  public function anmeldungabschliessen($pMessage = '', $pSplitAnmeldungKurs = false)
  {
    
    if ($this->anmeldungNichtAbsendbarAbbruch($this->_getNichtAbsendbarSightID())) {
      return false;
    }

    $anmeld = new BuchungsvorgangWEBBASys();

    

    $anmeld->createTNInfo();
    $anmeld->setKurseBySession();

    $anmeld->setBuchungsVars(); 

    $anmeld->buchungStep1(); 
    


    $erfolgreich = $anmeld->buchungStep2();
    $this->kurse_anmstatus = $anmeld->kurse_anmstatus;

    $htmlbest = $this->getHtmlBestaetigung($erfolgreich);

    echo $htmlbest;

    if ($erfolgreich) {
      $this->sendEmailBestaetigung();
    }

    
    $firma = SessionOperations::getVarValueWk('w_fp_firma_b');
    $anmeld->cleanUp();
    SessionOperations::setVarValueWk('w_fp_firma_b', $firma);

    
    SessionOperations::setVarValueDruck('druckversion', $htmlbest);
    if (!$erfolgreich) {
      return false;
    }

    return true;
  }

  public function getHtmlBestaetigung($pSuccess = true)
  {
    return $this->getBestaetigung($this->sightIdBestaetigungHtml, $pSuccess);
  }

  protected function getBestaetigung($pSightId, $pSuccess)
  {
    $expKurse = new ExpKursuebersicht();
    $this->dataarrayfooter = $this->dataarrayheader = SessionOperations::getTeilnehmerFromSession();
    $this->dataarraybody = $this->getKurseFromWarenkorb();
    $status = '0';
    if ($pSuccess) {
      $status = '1';
    }
    $this->expTeilnehmer->setSightInfo('status', $status);

    return $this->getsightcomplete($pSightId, $expKurse, $this->expTeilnehmer, $this->expTeilnehmer);
  }

  
  public function sendEmailBestaetigung()
  {
    $to = SessionOperations::getVarValueWk('w_abw_email_b');
    $text = $this->getEmailBestaetigung();
    $subject = StringOperations::getBestaetigungSubject($text);
    $body = StringOperations::getBestaetigungBody($text);

    return smtpMail::sendStandardHtmlMail($to, $subject, $body);
  }

  public function getEmailBestaetigung($pSuccess = true)
  {
    return $this->getBestaetigung($this->sightIdBestaetigungEmail, $pSuccess);
  }
}