<?php

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

class ToolMaAnmeld extends ToolBase
{
  private $_dbwkurse;
  private $_dbwteilnehm;

  
  private $_user;

  public function __construct()
  {
    parent::__construct();
    $this->toolTitle = 'Anmeldung';

    
    $dbwkurse = new DBWorkKurseWT();
    
    $dbwkurse->newSearch();
    $dbwkurse->fromobject->semester = $this->toolSettings->semlist;
    $dbwkurse->toobject->semester = '';
    $dbwkurse->justNoAusfall = $this->toolSettings->keineAusgefallenenKurse;
    $dbwkurse->setOrderBySettings($this->toolSettings);

    
    $searchAPI = new KurssuchAPIwSearch(false);
    if (GetOperations::getVarValue('toolsection_id') == 26) {
      $searchAPI->getSearchParamsFromReqToSession('tool' . $this->toolId);
    }

    $dbwkurse->fromobject = $searchAPI->getFromObjectBySession($dbwkurse->fromobject, 'tool' . $this->toolId);
    $dbwkurse->toobject = $searchAPI->getToObjectBySession($dbwkurse->toobject, 'tool' . $this->toolId);

    $this->_user = SessionOperations::getCurrentWebToolsUser();
    $this->_dbwkurse = $dbwkurse;

    $this->_dbwteilnehm = new DBWorkTeilnehmer();
    $this->_dbwteilnehm->newSearch();

    $searchAPI = new TeilnehmersuchAPI();
    $searchAPI->getSearchParamsFromReqToSession('tool' . $this->toolId, 'searchteilnehmer');

    $this->_dbwteilnehm->fromobject = $searchAPI->getFromObjectBySession($this->_dbwteilnehm->fromobject, 'tool' . $this->toolId);
    $this->_dbwteilnehm->toobject = $searchAPI->getToObjectBySession($this->_dbwteilnehm->toobject, 'tool' . $this->toolId);
    $this->_dbwteilnehm->orderby = $this->toolSettings->sorttn;
    $this->_dbwteilnehm->orderbyasc = $this->toolSettings->sorttnasc;
  }

  
  public function init($pPageId)
  {
    
    
    
    
    $this->checkBrowserReload();

    switch ($pPageId) {
      default:
      case 434:
        
        $pPageId = 434;

        $statusMessage = '';
        if (PostOperations::getVarValue('action') === 'newTeilnehmer') {
          
          $statusMessage .= $this->_handleTeilnehmerInsert();
        }

        $page = $this->_handleAnmeldeDialog($pPageId, false, false, $statusMessage);
        break;
      case 145:
       $page = $this->_handleAnmeldung($pPageId);
       break;
    }
    if ($page == null) {
      throw new Exception('ungültige PageId');
    }
    $this->currentPage = $page;
  }

  
  protected function doByBrowserRefresh()
  {
    
    $_POST = array_intersect_key($_POST, array('postId' => ''));
    $_SERVER['REQUEST_METHOD'] = 'GET';
  }

  
  private function _handleTeilnehmerInsert()
  {
    $message = '';
    
    if (PostOperations::getVarValue('action') === 'newTeilnehmer') {
      if (Xsrf::KEY_OK != Xsrf::checkAndUseXsrfFromGet('wt_ma_tnneu')) {
        return HTMLOperations::getAlertBox('Der Teilnehmer konnte aus technischen Gründen nicht angelegt werden.', 'Fehler beim Anlegen des Teilnehmers');
      }


      
      $saveSight = 42;
      $saveTool = 11;

      $teilnehmer = $this->_dbwteilnehm->getNewObject();
      $builder = new SightBuilder($saveTool, $saveSight, $teilnehmer);
      $messageArray = TeilnehmerAPI::saveTeilnehmerBySightBuilder($builder);
      $message = $messageArray['statusMessage'];

      if (!GetOperations::isDefined('keepCurrentTnr')) {
        
        SessionOperations::setVarValueWTIntern('tnr', $teilnehmer->id);
      }
    }

    return $message;
  }

  

  public function getJS()
  {
    $result = parent::getJS();

    return array_merge($result, array('js/MATool/personendetails.js'));
    
  }

  public function getJSDeclarations()
  {
    $result = parent::getJSDeclarations();

    $result .= '<script type="text/javascript">' . "\n";
    $result .= JsOperations::getDeclarationInt('KuferTools.TeilnehmerProSeite', ($this->toolSettings->teilnehmerproseite > 0) ? $this->toolSettings->teilnehmerproseite : 20);
    $result .= JsOperations::getDeclarationInt('KuferTools.KurseProSeite', ($this->toolSettings->kurseproseite > 0) ? $this->toolSettings->kurseproseite : 20);
    $knr = GetOperations::getVarValue('knr', SessionOperations::getVarValueWTIntern('knr', -1));
    $tnr = GetOperations::getVarValue('tnr', SessionOperations::getVarValueWTIntern('tnr', -1));
    $result .= 'registerNamespace("KuferTools.Anmeldung");' . "\n";

    if ($knr != -1 && $tnr > 0) {
      $gebuehr = APIGebuehren::getGebuehren($tnr, $knr);
      $result .= JsOperations::getDeclarationFloatMitKomma('KuferTools.Anmeldung.AktGebuehr', $gebuehr);
      $result .= JsOperations::getDeclarationFloatMitKomma('KuferTools.Anmeldung.BasisGebuehr', $gebuehr);
    }
    $result .= JsOperations::getDeclarationJson('KuferTools.Anmeldung.AusgewaehlteOptionen', SessionOperations::getVarValueWTIntern('choosedOptions'));
    $result .= 'registerNamespace("KuferTools.PersonDetails"); ' . "\n";
    $result .= '</script>' . "\n";

    return $result;
  }

  
  private function _getTnData()
  {
    
    if (GetOperations::isDefined('history')) {
      $tnr = SessionOperations::getVarValueWTIntern('tnr', -1);
    } else {
      $tnr = GetOperations::getVarValue('tnr', SessionOperations::getVarValueWTIntern('tnr', -1));
    }
    if ($tnr > 0) {
      return $this->_dbwteilnehm->getTeilnehm($tnr, true);
    } else {
      return $this->_dbwteilnehm->getNewObject();
    }
  }

  
  private function _getKursData()
  {
    
    if (GetOperations::isDefined('history')) {
      $knr = SessionOperations::getVarValueWTIntern('knr', -1);
    } else {
      $knr = GetOperations::getVarValue('knr', SessionOperations::getVarValueWTIntern('knr', -1));
    }
    if ($knr != -1) {
      return $this->_dbwkurse->getKurs($knr);
    } else {
      return $this->_dbwkurse->getNewObject();
    }
  }

  
  private function _handleAnmeldeDialog($pPageId, $pIsAnmSend = false, $pIsAnmSuccess = false, $pStatusMessage = '', $pInfoMailSentArray = array())
  {
    
    if (GetOperations::isDefined('einstieg')) {
      SessionOperations::setVarValueWTIntern('knr', -1);
      SessionOperations::setVarValueWTIntern('tnr', -1);
      SessionOperations::setVarValueWTIntern('choosedOptions', '');
      SessionOperations::setVarValueWTIntern('knr_before', '');
      SessionOperations::setVarValueWTIntern('tnr_before', '');
      SessionOperations::setVarValueWTIntern('knr_changed', 0);
      SessionOperations::setVarValueWTIntern('tnr_changed', 0);

      
      
      $fromTool = GetOperations::getVarValue('link2AnmeldfromTool');
      SessionOperations::setVarValueWTIntern('link2AnmeldfromTool', $fromTool);
    }

    $kursData = $this->_getKursData();
    if (isset($kursData->id) && AnmeldevorgangAdapter::getUebermittlungsart() == ANMELDUNG_MATOOL_DMZ) {
      try {
        $kursData = AnmeldeAPI::updateKursData($kursData);
      } catch (Exception $e) {
        $pStatusMessage .= HTMLOperations::getWarningBox('Es konnte nicht überprüft werden, ob die Kursdaten aktuell sind.', '', 'anmAktAnmStatusMsg in_background');
      }
    }
    $tnData = $this->_getTnData();
    SessionOperations::setVarValueWTIntern('knr', $kursData->id);
    SessionOperations::setVarValueWTIntern('tnr', $tnData->id);

    
    if ((SessionOperations::getVarValueWTIntern('knr_before')
            && SessionOperations::getVarValueWTIntern('knr_before') != SessionOperations::getVarValueWTIntern('knr'))
            || (SessionOperations::getVarValueWTIntern('tnr_before')
                    && SessionOperations::getVarValueWTIntern('tnr_before') != SessionOperations::getVarValueWTIntern('tnr'))) {
      SessionOperations::setVarValueWTIntern('choosedOptions', '');
    }

    SessionOperations::setVarValueWTIntern('knr_before', $kursData->id);
    SessionOperations::setVarValueWTIntern('tnr_before', $tnData->id);

    $dbwFreiFeld = new DBWorkFreiWaehlbareEingabefelder4Belegung(1, true);
    $freiWaehlbareFelder = $dbwFreiFeld->getFreiWaehlbareFelder();

    $page = new PageMaAnmeldung($this, $pPageId, $tnData, $kursData, $freiWaehlbareFelder, $pIsAnmSend, $pIsAnmSuccess, $pStatusMessage, $pInfoMailSentArray);
    $userId = SessionOperations::getUserIdentifier();

    $kursLink = '';
    if (\SecurityOperations::privilegAllowed($userId, $this->getToolId(), $pPageId . '.0.1')) {
      if ($this->toolSettings->kursDetailsIgnoreTool8Settings || $this->_kannMaKursInTool8Aufrufen($kursData->id)) {
        $kursLink = $this->_getLinkZuDetailsEinesAnderenTools(\ToolsAPI::TOOL_KURSPLANUNG_MA, 377, $kursData->id);
      }
    }

    $tnLink = '';
    if (\SecurityOperations::privilegAllowed($userId, $this->getToolId(), $pPageId . '.0.2')) {
      
      
      $tnAryMa = ToolTeilnehmerInfo::getTeilnehmerNummern();
      if (in_array($tnData->id, $tnAryMa)) {
        $tnLink = $this->_getLinkZuDetailsEinesAnderenTools(\ToolsAPI::TOOL_TEILNEHMERINFO_MA, 411, $tnData->id, 'tnr');
      }
    }

    
    $tnAnlegenAllowed = \SecurityOperations::privilegAllowed($userId, $this->getToolId(), $pPageId . '.0.3') == 2;

    
    $detailsAllowed = \SecurityOperations::privilegAllowed($userId, $this->getToolId(), $pPageId . '.0.4') == 2;

    
    $abwZahlwegAllowed = \SecurityOperations::privilegAllowed($userId, $this->getToolId(), $pPageId . '.0.5') == 2;

    
    $elternKindAnmAllowed = \SecurityOperations::privilegAllowed($userId, $this->getToolId(), $pPageId . '.0.6') == 2;

    
    $mehrfachAnmAllowed = \SecurityOperations::privilegAllowed($userId, $this->getToolId(), $pPageId . '.0.7') == 2;

    
    $faAnmAllowed = \SecurityOperations::privilegAllowed($userId, $this->getToolId(), $pPageId . '.0.8') == 2;

    
    $newsletterAllowed = \SecurityOperations::privilegAllowed($userId, $this->getToolId(), $pPageId . '.0.9') == 2;

    
    $zahlartAllowed = \SecurityOperations::privilegAllowed($userId, $this->getToolId(), $pPageId . '.0.10') == 2;

    
    $bemerkungAllowed = \SecurityOperations::privilegAllowed($userId, $this->getToolId(), $pPageId . '.0.11') == 2;

    
    $anmeldeartAllowed = \SecurityOperations::privilegAllowed($userId, $this->getToolId(), $pPageId . '.0.12') == 2;

    
    $uebermittlungsArt = AnmeldevorgangAdapter::getUebermittlungsart();
    $nachlassAllowed = (\SecurityOperations::privilegAllowed($userId, $this->getToolId(), $pPageId . '.0.13') == 2
            && ($uebermittlungsArt == ANMELDUNG_MATOOL_DMZ || $uebermittlungsArt == ANMELDUNG_MATOOL_ONLINE));

    $belegungsStatusAllowed = \SecurityOperations::privilegAllowed($userId, $this->getToolId(), $pPageId . '.0.14') == 2;

    $eintrittAllowed = APIGebuehren::hasKursFortlaufendeGebuehren($kursData->id);

    
    
    $link2AnmeldfromTool = SessionOperations::getVarValueWTIntern('link2AnmeldfromTool');

    
    
    $backLink = '';
    if ($link2AnmeldfromTool != '') {
      switch ($link2AnmeldfromTool) {
        case \ToolsAPI::TOOL_KURSPLANUNG_MA:
          $toolsectId = 26;
          $searchPart = 'searchkurs';
          $page->setBackLinkTitle('Zurück zur Kursübersicht');
          break;
        case \ToolsAPI::TOOL_TEILNEHMERINFO_MA:
          $toolsectId = 41;
          $searchPart = 'searchteilnehmer';
          $page->setBackLinkTitle('Zurück zur Teilnehmerübersicht');
          break;
      }
      $backLink = $this->getUrlParamsForFile(array('tool_id' => $link2AnmeldfromTool, 'toolsection_id' => $toolsectId, $searchPart => 1));
    } 

    $page->setLinks(array(
      'tnDetails' => $tnLink,
      'kursDetails' => $kursLink,
      'backLink' => $backLink,
       
      'anmEndeErreicht' => $this->toolSettings->anmEndeErreicht,
      
      'anmKursBeginnErreicht' => $this->toolSettings->anmKursBeginnErreicht,
      'tnAnlegenAllowed' => $tnAnlegenAllowed,
      'detailsAllowed' => $detailsAllowed,
      'abwZahlwegAllowed' => $abwZahlwegAllowed,
      'elternKindAnmAllowed' => $elternKindAnmAllowed,
      'mehrfachAnmAllowed' => $mehrfachAnmAllowed,
      'faAnmAllowed' => $faAnmAllowed,
      'newsletterAllowed' => $newsletterAllowed,
      'zahlartAllowed' => $zahlartAllowed,
      'bemerkungAllowed' => $bemerkungAllowed,
      'anmeldeartAllowed' => $anmeldeartAllowed,
      'nachlassAllowed' => $nachlassAllowed,
      'belegungsStatusAllowed' => $belegungsStatusAllowed,
      'eintrittAllowed' => $eintrittAllowed,
      
      
    ));

    return $page;
  }

  private function _kannMaKursInTool8Aufrufen($pKnr)
  {
    return in_array($pKnr, ToolMitarbeiter::getKursnummern4Ma());
  }

  
  private function _getLinkZuDetailsEinesAnderenTools($pToolId, $pToolSectionId, $pDataId, $pNr = 'nr')
  {
    $url = URL::loadCurrent();
    $url->cleanParameter();
    $url->setParameterValue('tool_id', $pToolId);
    $url->setParameterValue('toolsection_id', $pToolSectionId);
    $url->setParameterValue($pNr, $pDataId);
    $url->setParameterValue('fromOtherTool', 1);
    if ($url->hasParameter('history')) {
      $url->removeParameter('history');
    }

    return $url->toString();
  }

  
  private function _handleAnmeldung($pPageId)
  {
    $success = true;
    $infoMailSent = true;

    
    $kursData = $this->_getKursData();
    $tnData = $this->_getTnData();
    
    
    $post_id = PostOperations::getVarValue('postId');
    if (SessionOperations::getVarValueWTIntern('anm_bestaetigung_' . $post_id, 'XX') !== 'XX') {
      $sucessInfoMailSentAr = SessionOperations::getVarValueWTIntern('anm_bestaetigung_' . $post_id);
      $success = $sucessInfoMailSentAr[0];
      $infoMailSent = $sucessInfoMailSentAr[1];
    }
    
    
    elseif ($post_id === '') {
      $sucessInfoMailSentAr = SessionOperations::getVarValueWTIntern('anm_bestaetigung_last');
      $success = $sucessInfoMailSentAr[0];
      $infoMailSent = $sucessInfoMailSentAr[1];
    } elseif (Xsrf::KEY_OK != Xsrf::checkAndUseXsrfFromGet('wt_ma_anmeldung', $tnData->id . '_' . $kursData->id)) {
      
      $success = false;
      $infoMailSent = false;
    } else {

      
      
      
      
      if (is_null($kursData->id) || is_null($tnData->id)) {
        Logger::logg('Anmeldung durch Mitarbeiter - Anmeldung durchführen - Kurs- oder Teilnehmer-Daten nicht gefunden. (Knr: ' . $kursData->id . ', Tnr: ' . $tnData->id . ')', 260);
        $message = HTMLOperations::getAlertBox(
          'Die Daten zum Kurs oder zum Teilnehmer wurden nicht gefunden. Bitte wählen Sie die fehlenden Daten erneut aus.',
          'Kurs- oder Teilnehmerdaten fehlen',
          'in_background anmErrorMsg'
        );

        return $this->_handleAnmeldeDialog(434, true, false, $message);
      }

      SessionOperations::setVarValueAnm(ANMELDEART, ''); 

      
      $anmSettings = JsonOperations::getFromStringBase64(PostOperations::getVarValue('anmSettings'));
      
      $anmSettings = (isset($anmSettings->ausgewaehlteOptionen) ? $anmSettings->ausgewaehlteOptionen : '');
      
      SessionOperations::setVarValueWTIntern('choosedOptions', $anmSettings);

      
      $zahlart = (isset($anmSettings->InputsSettingsBar->Zahlart) ? $anmSettings->InputsSettingsBar->Zahlart : '');
      SessionOperations::setVarValueIntern('w_zahlart', $zahlart);

      $bemerkung = (isset($anmSettings->InputsSettingsBar->Bemerkung) ? $anmSettings->InputsSettingsBar->Bemerkung : '');
      SessionOperations::setVarValueIntern('w_bemerkung', $bemerkung);

      $newsl_erlaubt = (isset($anmSettings->InputsSettingsBar->Newsl_erlaubt) ? $anmSettings->InputsSettingsBar->Newsl_erlaubt : '');
      if ($newsl_erlaubt == 'W') {
        SessionOperations::setVarValueIntern('w_newsl_erlaubt', 'J');
      } else {
        SessionOperations::setVarValueIntern('w_newsl_erlaubt', '');
      }

      
      SessionOperations::setVarValueIntern('w_anmeldeart', (isset($anmSettings->InputsSettingsBar->anmeldeArt) ? $anmSettings->InputsSettingsBar->anmeldeArt : $this->toolSettings->anmeldeArt));

      
      $belegungsStatus = (isset($anmSettings->InputsSettingsBar->belegungsStatus) ? $anmSettings->InputsSettingsBar->belegungsStatus : '');
      SessionOperations::setVarValueIntern('w_belegungsstatus', $belegungsStatus);
      
      
      
      SessionOperations::setVarValueWTIntern('w_belegungsstatus', $belegungsStatus);

      
      $eintritt = (isset($anmSettings->InputsSettingsBar->eintritt) ? $anmSettings->InputsSettingsBar->eintritt : '');
      SessionOperations::setVarValueIntern('w_eintritt', $eintritt);
      
      SessionOperations::setVarValueWTIntern('w_eintritt', $eintritt);

      
      $detailsObj = (isset($anmSettings->Details) ? $anmSettings->Details : '');
      
      for ($i = 0; $i < 16; $i++) {
        $var = ('beleghistorie' . ($i + 1));
        if (isset($detailsObj->{$var}) && trim($detailsObj->{$var}) != '') {
          SessionOperations::setVarValueIntern('w_beleghistorie' . ($i + 1), $detailsObj->{$var});
        }
      }

      
      
      $abwObj = (isset($anmSettings->AbwZahlweg) ? $anmSettings->AbwZahlweg : '');

      if (isset($abwObj->abw_bank, $abwObj->abw_inhaber, $abwObj->abw_iban, $abwObj->abw_zahler)) {
        SessionOperations::setVarValueIntern('w_abw_bankbez', $abwObj->abw_bank);
        SessionOperations::setVarValueIntern('w_abw_kontoinh', $abwObj->abw_inhaber);
        SessionOperations::setVarValueIntern('w_abw_iban', $abwObj->abw_iban);
        SessionOperations::setVarValueIntern('w_abw_bic', $abwObj->abw_bic);
        if (trim($abwObj->abw_iban) !== '') {
          SessionOperations::setVarValueIntern('w_abw_kontoverwenden', true);
        }
        SessionOperations::setVarValueIntern('w_abw_zahler', $abwObj->abw_zahler);
      }

      
      
      $nachlassObj = (isset($anmSettings->Nachlass) ? $anmSettings->Nachlass : '');
      if (isset($nachlassObj->nachlassBetrag)) {
        $nachlassBetrag = str_replace(',', '.', $nachlassObj->nachlassBetrag);
        if ((float)$nachlassBetrag != 0) {
          $nachlassBetrag *= -1;
          
          
          SessionOperations::setVarValueIntern('w_nachlassbetrag', round($nachlassBetrag, 2));

          
          if ($nachlassObj->nachlass === 'W') { 
            $nachlassGrund = trim($nachlassObj->nachlassGrund); 
          } else { 
            $nachlassGrund = trim($nachlassObj->nachlassArt); 
          }
          SessionOperations::setVarValueIntern('w_nachlassgrund', $nachlassGrund);

          
          SessionOperations::setVarValueIntern('w_nachlassart', $nachlassObj->nachlassArt);
        }
      }


      
      $weitereAry = (isset($anmSettings->WeitereAnmeldungen) ? $anmSettings->WeitereAnmeldungen : '');
      
      $anmArt = (isset($anmSettings->AnmForm) ? $anmSettings->AnmForm : '');

      
      if ($anmArt == 1) {
        $this->_setKinderToSession($weitereAry);
      } elseif ($anmArt == 2) {
        $this->_setFirmenmitarbeiterToSession($weitereAry);
      } elseif ($anmArt == 4) {
        $this->_setWeitereTeilnehmerToSession($weitereAry);
      }

      
      

      $anmeldeStaticSight = new AnmeldeStaticSight();
      $anmeldevorgangAr = $anmeldeStaticSight->doAnmeldung($tnData->id, $kursData->id);
      $success = $anmeldevorgangAr[0];
      $infoMailSent = $anmeldevorgangAr[1];
      
      
      SessionOperations::setVarValueWTIntern('anm_bestaetigung_' . $post_id, $anmeldevorgangAr);
      SessionOperations::setVarValueWTIntern('anm_bestaetigung_last', $anmeldevorgangAr);
    }

    
    
    
    SessionOperations::session_destroy_kufertools_warenkorb();

    if ($success) {
      
      return $this->_handleAnmeldeDialog(434, true, true, '', $infoMailSent);
    } else {
      
      return $this->_handleAnmeldeDialog(434, true, false);
    }
  }

  
  private function _setKinderToSession($pKinderAry)
  {
    if (is_array($pKinderAry)) {
      SessionOperations::setVarValueAnm(ANMELDEART, 1); 
      $kinderAnzahl = count($pKinderAry);
      SessionOperations::setVarValueWk('gAnzahl_Kinder', $kinderAnzahl);

      for ($i = 0; $i < $kinderAnzahl; $i++) {
        if (isset($pKinderAry[$i]->name, $pKinderAry[$i]->vorname, $pKinderAry[$i]->geburtsdatum, $pKinderAry[$i]->bemerkung)
                     ) {
          SessionOperations::setVarValueIntern('w_vorname_k' . ($i + 1), $pKinderAry[$i]->vorname);
          
          SessionOperations::setVarValueIntern('w_name_k' . ($i + 1), $pKinderAry[$i]->name);
          SessionOperations::setVarValueIntern('w_nachname_k' . ($i + 1), $pKinderAry[$i]->name);
          SessionOperations::setVarValueIntern('w_gebdat_k' . ($i + 1), $pKinderAry[$i]->geburtsdatum);
          SessionOperations::setVarValueIntern('w_info_k' . ($i + 1), $pKinderAry[$i]->bemerkung);
        }
      }
    }
  }

  
  private function _setFirmenmitarbeiterToSession($pMitarbeiterAry)
  {
    if (is_array($pMitarbeiterAry)) {
      SessionOperations::setVarValueAnm(ANMELDEART, 2); 
      $mitarbeiterAnzahl = count($pMitarbeiterAry);
      SessionOperations::setVarValueWk('gAnzahl_Mitarbeiter', $mitarbeiterAnzahl);

      for ($i = 0; $i < $mitarbeiterAnzahl; $i++) {
        if (isset($pMitarbeiterAry[$i]->tnr, $pMitarbeiterAry[$i]->name, $pMitarbeiterAry[$i]->vorname, $pMitarbeiterAry[$i]->ort, $pMitarbeiterAry[$i]->strasse, $pMitarbeiterAry[$i]->telefon, $pMitarbeiterAry[$i]->email, $pMitarbeiterAry[$i]->geschlecht)

                          ) {
          SessionOperations::setVarValueIntern('w_tnr_ma' . ($i + 1), $pMitarbeiterAry[$i]->tnr);
          
          SessionOperations::setVarValueIntern('w_name_ma' . ($i + 1), $pMitarbeiterAry[$i]->name);
          SessionOperations::setVarValueIntern('w_nachname_ma' . ($i + 1), $pMitarbeiterAry[$i]->name);
          SessionOperations::setVarValueIntern('w_vorname_ma' . ($i + 1), $pMitarbeiterAry[$i]->vorname);
          SessionOperations::setVarValueIntern('w_geschlecht_ma' . ($i + 1), $pMitarbeiterAry[$i]->geschlecht);
          SessionOperations::setVarValueIntern('w_ort_ma' . ($i + 1), $pMitarbeiterAry[$i]->ort);
          SessionOperations::setVarValueIntern('w_strasse_ma' . ($i + 1), $pMitarbeiterAry[$i]->strasse);
          SessionOperations::setVarValueIntern('w_tel_ma' . ($i + 1), $pMitarbeiterAry[$i]->telefon);
          SessionOperations::setVarValueIntern('w_email_ma' . ($i + 1), $pMitarbeiterAry[$i]->email);
        }
      }
    }
  }

  
  private function _setWeitereTeilnehmerToSession($pMehrfachAry)
  {
    if (is_array($pMehrfachAry)) {
      SessionOperations::setVarValueAnm(ANMELDEART, 4); 
      $teilnehmerAnzahl = count($pMehrfachAry);
      SessionOperations::setVarValueWk('gAnzahl_Mehrfach', $teilnehmerAnzahl);

      for ($i = 0; $i < $teilnehmerAnzahl; $i++) {
        if (isset($pMehrfachAry[$i]->tnr, $pMehrfachAry[$i]->vorname, $pMehrfachAry[$i]->name, $pMehrfachAry[$i]->telefon, $pMehrfachAry[$i]->email, $pMehrfachAry[$i]->geschlecht)
                       ) {
          SessionOperations::setVarValueIntern('w_tnr_me' . ($i + 1), $pMehrfachAry[$i]->tnr);
          
          SessionOperations::setVarValueIntern('w_name_me' . ($i + 1), $pMehrfachAry[$i]->name);
          SessionOperations::setVarValueIntern('w_nachname_me' . ($i + 1), $pMehrfachAry[$i]->name);
          SessionOperations::setVarValueIntern('w_vorname_me' . ($i + 1), $pMehrfachAry[$i]->vorname);
          SessionOperations::setVarValueIntern('w_geschlecht_me' . ($i + 1), $pMehrfachAry[$i]->geschlecht);
          SessionOperations::setVarValueIntern('w_ort_me' . ($i + 1), $pMehrfachAry[$i]->ort);
          SessionOperations::setVarValueIntern('w_strasse_me' . ($i + 1), $pMehrfachAry[$i]->strasse);
          SessionOperations::setVarValueIntern('w_tel_me' . ($i + 1), $pMehrfachAry[$i]->telefon);
          SessionOperations::setVarValueIntern('w_email_me' . ($i + 1), $pMehrfachAry[$i]->email);
        }
      }
    }
  }

  public function getAjaxResponse()
  {
    $pageId = GetOperations::getVarValue('toolsection_id');
    if ($pageId == 19) {
      $action = '';  
      if (GetOperations::isDefined('action')) {
        
        $action = GetOperations::getVarValue('action');
      }

      
      return $this->_handleKursDataTable($pageId, $action);
    } elseif ($pageId == 21) {
      
      
      if (GetOperations::isDefined('getTn')) {
        $tnr = GetOperations::getVarValue('getTn');

        return $this->_handleGetTn($tnr);
      } else {
        
        if (GetOperations::isDefined('firmenAnm') || GetOperations::isDefined('mehrfachAnm')) {
          return $this->_handleTnDataTable($pageId, false, false);
        
        } elseif (GetOperations::isDefined('firmenAnmRestricted')) {
          return $this->_handleTnDataTable($pageId, false, true);
        
        } else {
          return $this->_handleTnDataTable($pageId, true, false);
        }
      }
    }
    
    elseif ($pageId == 145) {
      
      $dmEmailAnmBest = new DataMenuEmailAnmeldungBestaetigung();

      $knr = SessionOperations::getVarValueWTIntern('knr');
      $tnr = SessionOperations::getVarValueWTIntern('tnr');
      $dmEmailAnmBest->id = $knr;
      $dmEmailAnmBest->tnr = $tnr;

      $dmEmailAnmBest->entgelt = AnmeldeStaticSight::getGebuehrenByActualSession($tnr, $knr);
      $dmEmailAnmBest->belegungsStatus = SessionOperations::getVarValueWTIntern('w_belegungsstatus');
      $dmEmailAnmBest->eintritt = SessionOperations::getVarValueWTIntern('w_eintritt');

      $uebermittlungsArt = AnmeldevorgangAdapter::getUebermittlungsart();
      if ($uebermittlungsArt == ANMELDUNG_MATOOL_MAIL || $uebermittlungsArt == ANMELDUNG_MATOOL_FILE) {
        $dmEmailAnmBest->anmPerDateiOderEmail = '1';
      } else {
        $dmEmailAnmBest->anmPerDateiOderEmail = '0';
      }

      $dmEmailAnmBest->getdataarrayheader();
      $dmEmailAnmBest->getdataarraybody();
      $dmEmailAnmBest->getdataarrayfooter();
      $dmEmailAnmBest->getdataarraynodata();
      $dmEmailAnmBest->getdataarraynocolumn();
      $sightText = $dmEmailAnmBest->getsightcomplete($pageId, new ExpBelegung());

      $subject = StringOperations::getBestaetigungSubject($sightText);

      $body = StringOperations::getBestaetigungBody($sightText);

      $emailInhalttext = "<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01//EN'><html><body>\n";
      $emailInhalttext .= $subject;
      $emailInhalttext .= $body;
      $emailInhalttext .= "\n</body></html>";

      return JsonOperations::encode4Ajax($emailInhalttext);
    } elseif ($pageId == 434) {
      if (GetOperations::isDefined('getGebuehr')) {
        return $this->_handleGetGebuehr4Ajax(GetOperations::getVarValue('anmForm', 0), GetOperations::getVarValue('weitereTN', 0), GetOperations::getVarValue('nachlass', 0.0));
      } elseif (GetOperations::isDefined('savesettings')) {
        
        
        SessionOperations::setVarValueWTIntern('choosedOptions', PostOperations::getVarValue('ausgewaehlteOptionen'));

        return true;
      } elseif (GetOperations::getVarValue('action') === 'validate') {
        return JsonOperations::encode4Ajax($this->_handleAjaxValidateBankData());
      }
    }
  }

  
  private function _handleGetGebuehr4Ajax($pAnmForm, $pAnzahlWeitere, $pNachlass)
  {
    $tn = $this->_getTnData();
    $kurs = $this->_getKursData();

    $gebuehr = APIGebuehren::getGebuehren($tn->id, $kurs->id, $pAnmForm, $pAnzahlWeitere);
    $isNachlassAufteilbar = APIGebuehren::isNachlassAufteilbarInEinzelpreise($pNachlass, $tn->id, $kurs->id, $pAnmForm, $pAnzahlWeitere);

    return JsonOperations::encode4Ajax(array($gebuehr, $isNachlassAufteilbar));
  }

  
  private function _handleGetTn($pTnr)
  {
    $teilnehmer = $this->_dbwteilnehm->getTeilnehm($pTnr);
    $result = (object)array(
      'tnr' => $pTnr,
      'name' => $teilnehmer->name,
      'vorname' => $teilnehmer->vorname,
      'geschlecht' => $teilnehmer->geschlecht,
      'strasse' => $teilnehmer->strasse,
      'ort' => $teilnehmer->ort,
      'telefon' => $teilnehmer->tel_anzeige,
      'email' => $teilnehmer->email_anzeige
    );

    return JsonOperations::encode4Ajax($result);
  }

  
  private function _handleTnDataTable($pPageId, $pBuchenLink = true, $pOnlyFirmenTn = false)
  {
    
    
    $dbwwss = new DBWorkSightsSettings(1, true);
    $dbwwss->justallowedColumns = true;
    $columns = $dbwwss->getColumns($pPageId);

    $extraColumn = new Column();
    $extraColumn->fieldname = 'id';
    $extraColumn->datamodul = 'teilnehmer';
    $extraColumn->title = '';
    $extraColumn->width = '20';

    array_unshift($columns, $extraColumn);

    
    if (RequestOperations::isDefined('iSortCol_0')) {
      
      $iSortingCols = intval(RequestOperations::getVarValue('iSortingCols'));
      for ($i = 0; $i < $iSortingCols; $i++) {
        $iSortCol = intval(RequestOperations::getVarValue('iSortCol_' . $i));
        if (RequestOperations::getVarValue('bSortable_' . $iSortCol) == 'true') {
          $this->_dbwteilnehm->orderby = $columns[$iSortCol]->fieldname;
          $this->_dbwteilnehm->orderbyasc = RequestOperations::getVarValue('sSortDir_' . $i) === 'asc';
        }
      } 
    }

    
    $filterName = RequestOperations::getVarValue('filterName', '');
    if (trim($filterName) !== '') {
      $this->_dbwteilnehm->fromobject->name = $filterName;
    }

    $filterVorname = RequestOperations::getVarValue('filterVorname', '');
    if (trim($filterVorname) !== '') {
      $this->_dbwteilnehm->fromobject->vorname = $filterVorname;
    }

    $filterNr = RequestOperations::getVarValue('filterNr', '');
    if (trim($filterNr) !== '') {
      $this->_dbwteilnehm->fromobject->id = $filterNr;
    }

    
    $teilnehmerProSeite = ($this->toolSettings->teilnehmerproseite > 0) ? $this->toolSettings->teilnehmerproseite : 20;
    $iDisplayStart = RequestOperations::getVarValue('iDisplayStart', 0);
    $currentPage = $iDisplayStart / $teilnehmerProSeite + 1;

    $stammBvAry = array();
    $dbwStammBv = new DBWorkStammBv();

    
    if (!$pOnlyFirmenTn) {
      
      if ($this->toolSettings->useBereichsRechteTeilnehmer) {
        $alleTeilnehmerNummern = $this->_dbwteilnehm->getTeilnehmerIdsbyFilter($this->_user->getIdentifier());
      } else {
        $alleTeilnehmerNummern = $this->_dbwteilnehm->getTeilnehmerIdsbyFilter();
      }

      
      $this->setTotalData($alleTeilnehmerNummern);
      $tnAnzahl = count($alleTeilnehmerNummern);

      $_REQUEST['currentIndex'] = $currentPage;
      $tnNummernDerSeite = ToolsAPI::getDataForCurrentPage($alleTeilnehmerNummern, $teilnehmerProSeite);

      
      $data = $this->_dbwteilnehm->getTeilnehmByIdArray($tnNummernDerSeite);

      if (GetOperations::isDefined('tnAuswahlForAbwZahlweg')) {
        $stammBvAry = $dbwStammBv->getHauptStammBvsByTnrs($tnNummernDerSeite);
        $stammBvAryAssoc = array();
        foreach ($stammBvAry as $stammBv) {
          $stammBvAryAssoc[$stammBv->nr] = $stammBv;
        }
      }

      
    } else {
      $tnr = GetOperations::getVarValue('tnr', SessionOperations::getVarValueWTIntern('tnr', -1));
      $data = $this->_dbwteilnehm->getTeilnehmerByFirmaKurs($tnr);
      $tnAnzahl = count($data);
      $data = array_slice($data, $iDisplayStart, $teilnehmerProSeite);
    }

    
    $aaData = $this->_datamodulToDataTable($data, $columns);

    
    $tnAnzahlSeite = count($data);
    for ($i = 0; $i < $tnAnzahlSeite; $i++) {
      $tnr = CleanOperations::cleanInt($aaData[$i][0]); 
      if (GetOperations::isDefined('tnAuswahlForAbwZahlweg')) {
        $stammBv = isset($stammBvAryAssoc[$tnr]) ? $stammBvAryAssoc[$tnr] : $dbwStammBv->getNewObject();
        if ($stammBv->inhaber !== '') {
          $inhaber = CleanOperations::cleanStringForHtml($stammBv->inhaber);
        } else {
          $inhaber = $data[$i]->name . ' ' . $data[$i]->vorname;
        }
        $bankbez = CleanOperations::cleanStringForHtml($stammBv->bankbez);
        $bic = CleanOperations::cleanStringForHtml($stammBv->bic);
        $iban = CleanOperations::cleanStringForHtml($stammBv->iban);
        $aaData[$i][0] = '<img class="abw_zahlweg_auswahl" src="images/buchen.gif" alt="Ausw&auml;hlen" title="Ausw&auml;hlen" '
                . 'onclick="setAbwZahlweg(\'' . $inhaber . '\', \'' . $bankbez . '\', \'' . $bic . '\', \'' . $iban . '\', \'' . $tnr . '\')">';
      } else {
        
        $href = ($pBuchenLink) ? 'usertools.php?tool_id=6&toolsection_id=434&tnr=' . $tnr : '#';
        $aaData[$i][0] = '<a href="' . $href . '" class="tnBuchen">'
                  . '<input type="hidden" value="' . $tnr . '" class="hiddenTnr">'
                  . '<img src="images/buchen.gif" alt="Buchen" title="Buchen"></a>';
      }
    }

    
    $output = array(
      'sEcho' => intval(RequestOperations::getVarValue('sEcho')),
      'iTotalRecords' => $tnAnzahl,
      'iTotalDisplayRecords' => $tnAnzahl,
      'aaData' => $aaData
    );

    return JsonOperations::encode($output);
  }

  
  private function _datamodulToDataTable($pDatamodulAry, $pColumns)
  {
    $data4Datatable = array();

    foreach ($pDatamodulAry as $datamodul) {
      $row = array();

      foreach ($pColumns as $column) {
        $row[] = $datamodul->getVarValueEx($column->fieldname, $column->datamodul);
      }

      $data4Datatable[] = $row;
    }

    return $data4Datatable;
  }

  
  private function _handleKursDataTable($pPageId, $pAction = '')
  {
    
    
    $dbwwss = new DBWorkSightsSettings(1, true);
    $dbwwss->justallowedColumns = true;
    $columns = $dbwwss->getColumns($pPageId);

    $extraColumn = new Column();
    $extraColumn->fieldname = 'id';
    $extraColumn->datamodul = 'kurse';
    $extraColumn->title = '';
    $extraColumn->width = '30';

    array_unshift($columns, $extraColumn);

    
    if (RequestOperations::isDefined('iSortCol_0')) {
      
      $iSortingCols = intval(RequestOperations::getVarValue('iSortingCols'));
      for ($i = 0; $i < $iSortingCols; $i++) {
        $iSortCol = intval(RequestOperations::getVarValue('iSortCol_' . $i));
        if (RequestOperations::getVarValue('bSortable_' . $iSortCol) == 'true') {
          $this->_dbwkurse->orderby = $columns[$iSortCol]->fieldname;
          $this->_dbwkurse->orderbyasc = RequestOperations::getVarValue('sSortDir_' . $i) === 'asc';
        }
      } 
    }

    $filterKursnummer = RequestOperations::getVarValue('filterKursnummer', '');
    if (trim($filterKursnummer) !== '') {
      $this->_dbwkurse->fromobject->id = StringOperations::replaceWildcards($filterKursnummer);
      if (StringOperations::strpos($filterKursnummer, '?') !== false || StringOperations::strpos($filterKursnummer, '*') !== false) {
        $this->_dbwkurse->toobject->id = '';
      } else {
        $this->_dbwkurse->toobject->id = $this->_dbwkurse->fromobject->id . 'ZZ';
      }
    }

    $filterTitel = RequestOperations::getVarValue('filterTitel', '');
    if (trim($filterTitel) !== '') {
      $this->_dbwkurse->fromobject->kurzbez = StringOperations::replaceWildcards($filterTitel);
    }

    
    
    if ($this->toolSettings->sameAussenst) {
      
      $dbwben = new DBWorkBASysUser();
      $ben = $dbwben->getBASysUser($this->_user->ben);
      if ($ben && !($this->_user->isAdmin())) {
        $this->_dbwkurse->setDBObject4Ast($ben->aussenstelle);
      }
    }

    if ($this->toolSettings->useBereichsRechte) {
      $alleKursnummernDesMitarbeiters = $this->_dbwkurse->getKursIdsByBereichsrechte($this->_user->getIdentifier());
    } else {
      $alleKursnummernDesMitarbeiters = $this->_dbwkurse->getKurseNr4BenutzerNr($this->_user->getIdentifier());
    }
    
    
    $this->setTotalData($alleKursnummernDesMitarbeiters);
    $kursanzahl = count($alleKursnummernDesMitarbeiters);
    $kurseProSeite = ($this->toolSettings->kurseproseite > 0) ? $this->toolSettings->kurseproseite : 20;
    $iDisplayStart = RequestOperations::getVarValue('iDisplayStart', 0);
    $currentPage = $iDisplayStart / $kurseProSeite + 1;

    $_REQUEST['currentIndex'] = $currentPage;
    $kursnummernDerSeite = ToolsAPI::getDataForCurrentPage($alleKursnummernDesMitarbeiters, $kurseProSeite);
    
    $data = $this->_dbwkurse->getKurse($kursnummernDerSeite);
    
    $aaData = $this->_datamodulToDataTable($data, $columns);

    
    foreach ($aaData as $key => $row) {
      
      
      if ($pAction === 'Ummelden') {
        $row[0] = '<img id="' . CleanOperations::cleanStringForHtml($row[0]) . '" class="ummeldeKurs" src="images/buchen.gif" alt="Buchen" title="Buchen">';
      } elseif ($pAction === 'Weitermelden') {
        $row[0] = '<img id="' . CleanOperations::cleanStringForHtml($row[0]) . '" class="weitermeldeKurs" src="images/buchen.gif" alt="Buchen" title="Buchen">';
      } else { 
        $row[0] = '<a href="usertools.php?tool_id=6&toolsection_id=434&knr=' . CleanOperations::cleanStringForHtml($row[0]) . '">'
                . '<img src="images/buchen.gif" alt="Buchen" title="Buchen"></a>';
      }

      $aaData[$key] = $row;
    } 

    
    $output = array(
      'sEcho' => intval(RequestOperations::getVarValue('sEcho')),
      'iTotalRecords' => $kursanzahl,
      'iTotalDisplayRecords' => $kursanzahl,
      'aaData' => $aaData
    );

    return JsonOperations::encode($output);
  }

  

  public function getToolId()
  {
    return \ToolsAPI::TOOL_ANMELDUNGBUCHEN_MA;
  }
}