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


class ToolDoz extends ToolBase
{
  
  private $_user;
  private $_dbwkurse;
  
  
  protected $_isRefresh;

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

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

    $dbwkurse->setOrderBySettings($this->toolSettings);

    
    if (! (GetOperations::getVarValue('toolsection_id') == 334 && GetOperations::isDefined('fromOtherTool'))) {
      $searchAPI = new KurssuchAPIwSearch(false);
      if (GetOperations::getVarValue('toolsection_id') == 1) {
        $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;
  }

  
  protected function doByBrowserRefresh()
  {
    $this->_isRefresh = true;
    $_POST = array();
    $_SERVER['REQUEST_METHOD'] = 'GET';
  }

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

    $page = null;
    
    switch ($pPageId) {
      default:
      case 1: 
        $page = $this->_handleKursuebersicht();
        break;

      case 2: 
        break;
      case 226: 
        $knr = GetOperations::getVarValue('nr');
        $page = PageHandlerAPI::handleKursAnw($this, $pPageId, $knr, $pPageId . '.0.2', $pPageId . '.0.3', true, null, $this->toolSettings->anwFilterVonDatum);
        break;
      case 334: 
        $page = $this->_handleKursdetails($pPageId);
        break;
      case 345: 
        $page = $this->_handleTerminStorno($pPageId);
        break;
    }
    if ($page == null) {
      throw new Exception('ungültige PageId');
    }

    $this->currentPage = $page;
  }

  

  
  private function _handleKursuebersicht()
  {
    $pageId = 1;

    
    
    $this->updateAndGetSelectedIds();

    $pageLinks = array();

    
    $alleIds = $this->getAlleIdsKurse($this->_dbwkurse);
    $this->setTotalData($alleIds);
    $anzKurseProSeite = ($this->toolSettings->kurseproseite > 0) ? $this->toolSettings->kurseproseite : 10;
    $data = $this->getData($this->_dbwkurse, $alleIds, $anzKurseProSeite);
    $kursanzahl = count($alleIds);

    $vonDate = $this->_dbwkurse->fromobject->beginn_dat;
    
    $bisDate = $this->_dbwkurse->toobject->beginn_dat;

    if ($vonDate == '' || $bisDate == '') {
      $dbwSemester = new DBWorkHLSemester();
      $zeitraum = $dbwSemester->getZeitraum($this->toolSettings->semlist);
      if ($vonDate == '') {
        $vonDate = $zeitraum['von'];
      }
      if ($bisDate == '') {
        $bisDate = $zeitraum['bis'];
      }
    }

    $userid = $this->_user->getIdentifier();

    
    
    $pageLinks['kursdetails'] = (\SecurityOperations::privilegAllowed($userid, $this->getToolId(), $pageId . '.0.1') == 2
                                 && $this->rechteOR(array('334.1.1', '334.1.2', '334.1.3', '334.1.4',
                                 '334.1.5', '334.1.6', '334.1.7')));
    
    
    $pageLinks['listen'] = (\SecurityOperations::privilegAllowed($userid, $this->getToolId(), $pageId . '.0.6')
                            && $this->rechteOR(array('246.0.2', '246.0.4', '246.0.6', '246.0.8', '246.0.10')));
    $pageLinks['honlisten'] = (\SecurityOperations::privilegAllowed($userid, $this->getToolId(), $pageId . '.0.7')
                                && $this->rechteOR(array('247.0.2', '247.0.4', '247.0.6', '247.0.8', '247.0.10', '247.0.12', '247.0.14', '247.0.16')));
    $pageLinks['grafiken'] = (\SecurityOperations::privilegAllowed($userid, $this->getToolId(), $pageId . '.0.8')
                              && $this->rechteOR(array('248.0.2', '248.0.4', '248.0.6', '248.0.8', '248.0.10', '248.0.12')));
    $pageLinks['anderelisten'] = (\SecurityOperations::privilegAllowed($userid, $this->getToolId(), $pageId . '.0.9')
                                  && $this->rechteOR(array('249.0.2', '249.0.4')));
    $pageLinks['teilnehmer'] = (\SecurityOperations::privilegAllowed($userid, $this->getToolId(), $pageId . '.0.15')
                                && $this->rechteOR(array('237.0.2', '237.0.4', '237.0.6', '237.0.8', '237.0.10', '237.0.12', '237.0.14')));

    $pageLinks['termineics'] = \SecurityOperations::privilegAllowed($userid, $this->getToolId(), $pageId . '.0.16');



    $aktDate = DateTimeOperations::getDateNow();
    $aktuellesJahr = DateTimeOperations::getYearFromValidDate($aktDate);
    
    


    
    
    if (\SecurityOperations::privilegAllowed($userid, $this->getToolId(), $pageId . '.0.17')) {
      $pageLinks['famitteilung'] = $this->getUrlParamsForFile(array('fastprint' => 'FinanzamtVorlage', 'zahljahr' => $aktuellesJahr - 1,
                                                                    'noIDs4Mark' => true), 'printDruckListe.php');
      
    }

    
    $hasButton4Checkbox = ($pageLinks['listen'] || $pageLinks['honlisten'] || $pageLinks['grafiken']
                          || $pageLinks['anderelisten'] || $pageLinks['teilnehmer'] || $pageLinks['termineics']
                          || isset($pageLinks['famitteilung']));
    
    $pageLinks['markieren'] = (\SecurityOperations::privilegAllowed($userid, $this->getToolId(), $pageId . '.0.14') && $hasButton4Checkbox);
    $pageLinks['checkboxen'] = $hasButton4Checkbox;

    
    $pageLinks['filter'] = 2;
    $pageLinks['print'] = true;

    $pageLinks['self'] = $this->getUrlParamsForFile(array('toolsection_id' => 1));
    $page = new PageDozentMeineKurseUebersicht($this, $data, $vonDate, $bisDate, $kursanzahl, $anzKurseProSeite);
    $page->setLinks($pageLinks);

    return $page;
  }

  
  public function getAjaxResponse()
  {
    $result = '';

    

    $kurse4download = RequestOperations::getVarValue('kurse4download');
    
    if ($kurse4download != '') {
      return DokuUploadUserAPI::getKursdata4AjaxForm($this);
    }

    
    if (RequestOperations::isDefined('changeTnInfo')) {

      
      $belid = RequestOperations::getVarValue('belid', -1);

      $dbwBelegung = new DBWorkBelegung(1, true);
      $dbwBelegung->newSearch();
      $dbwBelegung->fromobject->kurs = $this->_dbwkurse->fromobject;
      $dbwBelegung->toobject->kurs = $this->_dbwkurse->toobject;
      $belegung = $dbwBelegung->getBelegung($belid);

      $success = true;
      $message = 'Die &Auml;nderung wurde erfolgreich &uuml;bernommen.';

      $dbwdoz = new DBWorkDozenten(1, true);

      
      if ($belegung->knr == RequestOperations::getVarValue('nr', -1) && $dbwdoz->hasDozentKurs(SessionOperations::getCurrentWebToolsUser()->dnr, $belegung->knr)) {
        $newValue = RequestOperations::getVarValue('newValue');

        
        $varname = '';
        switch (RequestOperations::getVarValue('tnFieldToChange')) {
          case 'bemerkung':
            $belegung->bemerkung = $newValue;
            $varname = 'bemerkung';
            break;
          case 'bemerk_ext':
            $belegung->bemerk_ext = $newValue;
            $varname = 'bemerk_ext';
            break;
          case 'info':
            $belegung->info = $newValue;
            $varname = 'info';
            break;
          default: 
            $success = false;
            $message = 'Das zu &Auml;ndernde Feld konnte nicht gefunden werden.';
            break;
        }

        try {
          if (SessionOperations::isReplikat()) {
            $status5 = true;
            if ($this->allgSettings->dmzEnabled) { 

              $belegungNode = new XMLNode('belegung');
              $belegungNode->addChild(new XMLNode('id', $belegung->id));
              
              $attribut = '';
              if (trim($newValue) == '') {
                $attribut = 'leer="true"';
                $newValue = '-';
              }
              $belegungNode->addChild(new XMLNode($varname, $newValue, $attribut));
              $xmlNode = new XMLNode('belegungen');
              $xmlNode->addChild($belegungNode);


              $abgleichApi = new AbgleichAPI();
              $abgleichApi->sendeNachricht(
                AbgleichAPI::ABGLEICH_BELEGUNG_OLD,
                new Nutzlast($xmlNode)
              );
            } else { 
              $status5 = false;
            }
          }
          $dbwBelegung->updateBelegung($belegung, $status5);
        } catch (AbgleichApiException $aae) {
          $success = false;
          $message = 'Beim Abgleich der &Auml;nderungen ist ein Fehler aufgetreten. Bitte versuchen Sie es erneut, oder wenden Sie sich an die Einrichtung.';
        } catch (Exception $e) {
          $success = false;
          $message = 'Beim &Uuml;bernehmen der &Auml;nderungen ist ein Fehler aufgetreten. Bitte versuchen Sie es erneut, oder wenden Sie sich an die Einrichtung.';
        }
      } else {
        $success = false;
        $message = 'Die angegebene Belegung konnte nicht im Kurs gefunden werden.';
      }

      return JsonOperations::encode4Ajax(array(
                                               'message' => $message, 
                                               'success' => $success 
                                               ));
    }


    
    if (RequestOperations::isDefined('action')) {
      switch (RequestOperations::getVarValue('action')) {
        
        case 'einstell4List':
          $toolsection = RequestOperations::getVarValue('toolsection_id');
          $result = $this->_handleAjaxListSettings($toolsection);
          break;
      }
    }
    $ziel = RequestOperations::getVarValue('zielListe', '##');
    if ($ziel != '##') {
      $result = $this->_handleAjaxDrucklisten($ziel);
    } 

    elseif (RequestOperations::isDefined('infoAnVHS')) {
      $succes = $this->_infoAnVHS(GetOperations::getVarValue('toolsection_id'), GetOperations::getVarValue('liste'), explode(':', GetOperations::getVarValue('selnr', array())));
      if ($succes) {
        return 'Die Info an die Einrichtung wurde erfolgreich versendet.';
      } else {
        return 'Beim Versenden der Info an die Einrichtung ist ein Fehler aufgetreten. '
               . 'Bitte versuchen Sie es sp&auml;ter erneut.';
      }
    } 

    return $result;
  }

  

  
  private function _handleAjaxDrucklisten($pZielListe)
  {
    $moeglicheListen = array('listen' => 246, 'honorar' => 247, 'grafiken' => 248, 'sonstige' => 249, 'tnListen' => 237);
    $ziel = $moeglicheListen[$pZielListe];

    $selnrstr = RequestOperations::getVarValue('nr');

    if ($selnrstr == '') {
      
      $selnrstr = implode(':', $this->updateAndGetSelectedIds());
    }

    return $this->_getAjaxDrucklistDialog($ziel, $selnrstr);
  }

  

  
  private function _handleAjaxListSettings($pToolSection)
  {
    
    if ($pToolSection == 237) {
      $selnrstr = RequestOperations::getVarValue('nr');
    } else {
      $selnrstr = GetOperations::getVarValue('selnr');
    }

    return $this->_getAjaxDrucklistDialog($pToolSection, $selnrstr);
  }

  
  private function _getAjaxDrucklistDialog($pToolSection, $pSelnrstr)
  {
    $moeglListenNamen = array(237 => 'Teilnehmerlisten', 246 => 'Listen', 247 => 'Honorarlisten', 248 => 'Grafiklisten',
                             249 => 'Verträge');
    $listName = $moeglListenNamen[$pToolSection];
    if ($pToolSection == 237) {
      $url4Selnr = '&nr=' . $pSelnrstr;
    } 
    else {
      $url4Selnr = '&selnr=' . $pSelnrstr;
    }
    
    if (empty($pSelnrstr)) {
      
      $alleIds = $this->getAlleIdsKurse($this->_dbwkurse);
      $pSelnrstr = implode(':', $alleIds);
      
      if (empty($pSelnrstr)) {
        return DruckListen::ausgabeNoDruckliste($listName, false);
      }
      $url4Selnr .= $pSelnrstr;
    }

    $action = '&action=einstell4List';
    $drucklistpar = 'usertools.php?tool_id=' . $this->getToolId() . "&toolsection_id=$pToolSection" . $action . $url4Selnr;


    $mayOverrideHL = \SecurityOperations::privilegAllowed($this->_user->getIdentifier(), $this->getToolId(), $pToolSection . '.0.1') > 1;
    switch ($pToolSection) {
      case 246: 
        $drucklisten = new DruckListen($drucklistpar, $this->getToolId(), $pToolSection, false, $mayOverrideHL);
        $drucklisten->selektierteIds = $pSelnrstr;
        $result = $drucklisten->getContent(true);
      break;
      case 247: 
        
        
         
         $selIds4Zahlung = $this->getTotalData(); 
         
        
        
         $hasAllNrAry = false;
         $drucklisten = new HonorarDruckListen($drucklistpar, $this->getToolId(), $pToolSection, false, $mayOverrideHL, -1, $selIds4Zahlung, $hasAllNrAry);
         $drucklisten->selektierteIds = $pSelnrstr;

         $result = $drucklisten->getContent(true);
       break;
       case 248: 
        
         $drucklisten = new GrafikDruckListen($drucklistpar, $this->getToolId(), $pToolSection, false, $mayOverrideHL);
         $drucklisten->selektierteIds = $pSelnrstr;
         $result = $drucklisten->getContent(true);
       break;
       case 249: 
         
           $drucklisten = new OtherDruckListen($drucklistpar, $this->getToolId(), $pToolSection, false, $mayOverrideHL);
           $drucklisten->selektierteIds = $pSelnrstr;
           $result = $drucklisten->getContent(true);
         break;
       case 237: 
         
           
           $mitAnwListeMitDozAnschrift = true;
           $tnlisten = new TNListen4MehrereKurse($drucklistpar, $this->getToolId(), $pToolSection, false, $mayOverrideHL, -1, $mitAnwListeMitDozAnschrift);
           $tnlisten->selektierteIds = $pSelnrstr;
           $result = $tnlisten->getContent(true);
      }

    return $result;
  }

  

  
  private function _infoAnVHS($pSight_Id, $pListe, $pKnrAry)
  {



    
    switch ($pSight_Id) {
      case 246: 

        $listeObj = new DruckListen('', '', '');
        break;
      case 247: 

        $listeObj = new HonorarDruckListen('', '', '');
        break;
      case 248: 

        $listeObj = new GrafikDruckListen('', '', '');
        break;
      case 249: 

        $listeObj = new OtherDruckListen('', '', '');
        break;
      case 237: 

        $listeObj = new TNListen('', '', '', false, false, -1, true);
        break;
    }


    if (in_array($pSight_Id, array(246, 247, 248, 249))) {
      $listenBezeichnungAry = $listeObj->getListAry();
    } elseif ($pSight_Id == 237) {
      $listenBezeichnungAry = $listeObj->listen;
    }

    $listenName = $listenBezeichnungAry[$pListe];
    $user = SessionOperations::getCurrentWebToolsUser();

    $nameVorname = ($user->name_titel != '') ? $user->name_titel . ' ' : '';
    $nameVorname .= ($user->name != '') ? $user->name : '';
    $nameVorname .= ($user->vorname != '') ? ' ' . $user->vorname : '';

    
    
    $betreff = 'KuferTools Listendruck: Dozent ' . $nameVorname . ' hat die PDF-Liste "' . $listenName . '" gedruckt';
    
    $inhalt = 'Zeitpunkt: ' . DateTimeOperations::getDateTimeNow() . "\r\n";
    $inhalt .= 'Dozent: ' . $nameVorname . ' (' . $user->dnr . ')' . "\r\n";
    $inhalt .= 'PDF-Liste: ' . $listenName . "\r\n\r\n";
    $inhalt .= 'Für Kurse:' . "\r\n";

    $dbwkurse = new DBWorkKurseWT(1, true);

    foreach ($pKnrAry as $knr) {
      $kurs = $dbwkurse->getKurs($knr);
      $kurzbez = $kurs->kurzbez;
      str_replace("\r\n", ' ', $kurzbez);
      $inhalt .= $knr . ': ' . $kurzbez . "\r\n";
    }

    $listenName = StringOperations::html_entity_decode($listenName);
    $inhalt = StringOperations::html_entity_decode($inhalt);


    $protDruckListen = new ProtDruckListen();
    $protDruckListen->nr = $user->dnr;
    $protDruckListen->typ = 'D';
    $protDruckListen->datum = DateTimeOperations::getDateNow();
    $protDruckListen->listenr = 0;
    $protDruckListen->listebezeichnung = $listenName;
    $protDruckListen->mailtext = $inhalt;
    $protDruckListen->bearbeiter = $this->tool0Settings->direktMaKuerzel;
    $protDruckListen->bearbdatum = DateTimeOperations::getDateTimeNow();
    $protDruckListen->erfasstvon = $this->tool0Settings->direktMaKuerzel;
    $protDruckListen->erfasstam = DateTimeOperations::getDateTimeNow();

    if (SessionOperations::isDMZBetrieb() && $this->toolSettings->dozHatListeGedruckt_uebertragungper == HATLISTEGEDRUCKT_DMZ) {
      
      $success = $this->_infoAnVHSDMZ($protDruckListen);
    } elseif ((!SessionOperations::isReplikat()) && $this->toolSettings->dozHatListeGedruckt_uebertragungper == HATLISTEGEDRUCKT_DIREKT) {
      
      $success = $this->_infoAnVHSDirekt($protDruckListen);
    } else {
      
      $success = $this->_infoAnVHSMail($betreff, $inhalt);
    }

    return $success;
  }

  
  private function _infoAnVHSMail($pBetreff, $pBody)
  {
    $user = SessionOperations::getCurrentWebToolsUser();

    $mailAdress = EmailOperations::getToolEmailAddressForVhs($this->toolSettings->dozHatListeGeduruckt_email);

    
    $dozent = SessionOperations::getCurrentWebToolsDozent();
    $senderEmailData = ToolsAPI::getSenderEmailAddressAndName($dozent);

    $email = new smtpMailTools();
    $email->SetVar2Value('from', $senderEmailData['email']);
    $email->SetVar2Value('sendername', $senderEmailData['name']);
    $email->SetVar2Value('reply', $senderEmailData['reply']);
    $email->SetVar2Value('replyname', $senderEmailData['replyname']);
    $email->SetVar2Value('to', $mailAdress);
    $email->SetVar2Value('contenttype', SMTP_CONTENTTYPE_TEXT);
    $email->SetVar2Value('doNotSplitHTMLBody', true);
    $email->subject = $pBetreff;
    $email->body = $pBody;
    $email->setFooter('Druck von PDF-Listen', $user);

    return $email->sendMail();
  }

  
  private function _infoAnVHSDirekt($pProtDruckListen)
  {
    $dbwProtDruckListen = new DBWorkProtDruckListen();
    $protDruckListen = $dbwProtDruckListen->insertProtDruckListen($pProtDruckListen);

    return $protDruckListen->id > 0;
  }

  
  private function _infoAnVHSDMZ($pProtDruckListen)
  {
    $infoNode = new XMLNode();
    $infoNode = $infoNode->getXMLNode($pProtDruckListen, 'protdrucklisten', array(), true);

    try {
      $abgleichApi = new AbgleichAPI();
      
      $abgleichApi->sendeNachricht(
        AbgleichAPI::ABGLEICH_PROTDRUCKLISTEN,
        new Nutzlast($infoNode)
      );
    } catch (Exception $e) {
      Logger::logg('Anwesenheiten eintragen - folgende Exception ist aufgetreten: ' . $e->getMessage() . ' [' . $e->getTraceAsString() . ']', 200);

      return false;
    }

    return true;
  }

  private function _handleTerminStorno($pPageId = 345)
  {
    $knr = GetOperations::getVarValue('nr');
    $data = $this->_dbwkurse->getKurs($knr);
    $pageLinks = array();
    $pageLinks['back'] = ToolsAPI::getLastHistoryEntry();

    if (GetOperations::getVarValue('sendInfo', '') === '') {

     
      $selectedIds = GetOperations::getVarValue('idsToMark');

      $pageLinks['action'] = $this->getUrlParamsForFile(array('toolsection_id' => $pPageId, 'nr' => $knr, 'sendInfo' => 'vhs'));
      $page = new PageDozentStornoTermine($this, $data, $selectedIds);
      $page->setLinks($pageLinks);
    }
    

    else {
      $pageTitle = 'Meine Kurse';
      $versendet = array();
      $nichtVersendet = array();
      $mailAddress = EmailOperations::getToolEmailAddressForVhs($this->toolSettings->vhsEmailTool1Section345);

      
      $dozent = SessionOperations::getCurrentWebToolsDozent();
      $senderEmailData = ToolsAPI::getSenderEmailAddressAndName($dozent);

      $email = new smtpMailTools();
      $email->SetVar2Value('from', $senderEmailData['email']);
      $email->SetVar2Value('sendername', $senderEmailData['name']);
      $email->SetVar2Value('reply', $senderEmailData['reply']);
      $email->SetVar2Value('replyname', $senderEmailData['replyname']);
      $email->SetVar2Value('to', $mailAddress);
      $email->SetVar2Value('contenttype', SMTP_CONTENTTYPE_TEXT);
      $email->SetVar2Value('doNotSplitHTMLBody', true);
      $email->subject = PostOperations::getVarValue('betreff');
      $email->body = PostOperations::getVarValue('info');
      $email->setFooter('Verlegung/Stornierung von Kurstagen', SessionOperations::getCurrentWebToolsUser(), $data);
      if ($email->sendMail()) {
        $versendet[] = $this->allgSettings->vhsname;
      } else {
        $nichtVersendet[] = $this->allgSettings->vhsname;
      }
      
      $page = new PageNachrichtErfolgreichGesendetStornoDozent($pageTitle, $pPageId, $this, $data, 'Stornobestätigung', $versendet, $nichtVersendet);
      $page->setLinks($pageLinks);
    }

    return $page;
  }

  
  private function _handleKursdetails($pPageId = 334)
  {
    $alleIds = $this->getAlleIdsKurse($this->_dbwkurse);
    
    
    $data = $this->getData($this->_dbwkurse, $alleIds, 1, GetOperations::getVarValue('nr', -1));

    $data = $data[0]; 
    $knr = $data->id;

    if (!GetOperations::isDefined('currentIndex') && GetOperations::isDefined('fromOtherTool')) {
      $knr = GetOperations::getVarValue('nr');
      $this->setTotalData(array($knr));
    }

    $pageTitle = 'meine Kurse';
    
    
    if (GetOperations::getVarValue('showFormular', '') == 'sammelsms'
        || GetOperations::getVarValue('sendInfo', '') == 'teilnehmersms') {
      return SmsUserAPI::getSMSPage($data, $this, $pageTitle, $pPageId, $knr);
    }

    
    
    if (GetOperations::getVarValue('showFormular', '') == 'nachricht') {
      return KontaktUserAPI::buildKontaktForm($data, $this, $pageTitle, $pPageId, $knr, 'teilnehmer');
    }

    
    elseif (GetOperations::getVarValue('showFormular', '') == 'feedback') {
      return FeedbackUserAPI::buildFeedbackForm($data, $this, $pageTitle, $pPageId, $knr);
    }

    
    elseif (GetOperations::getVarValue('showFormular', '') == 'bescheinigung') {
      $belegungIDs = GetOperations::getVarValue('belids');

      return BescheinigungUserAPI::getBescheinigung($data, $this, $pageTitle, $pPageId, $knr, $belegungIDs);
    }

    
    elseif (GetOperations::getVarValue('showFormular', '') == 'kursortsms') {
      
      
      $tab = GetOperations::getVarValue('tab', '');

      return SmsUserAPI::getSMSPage4Kursort(
        $data,
        $this,
        $pageTitle,
        $pPageId,
        $this->tool0Settings->showSmsBetreff,
        $tab,
        false,
        RequestOperations::getVarValue('currentIndex')
      );
    }

    
    elseif (GetOperations::getVarValue('sendInfo', '') != '') {
      
      if (GetOperations::getVarValue('sendInfo', '') == 'teilnehmer') {
        return KontaktUserAPI::postKontaktForm($data, $this, $pageTitle, $pPageId, 'teilnehmer');
      }
      
      elseif (GetOperations::getVarValue('sendInfo', '') == 'vhs') {
        return FeedbackUserAPI::postFeedback($data, $this, $pageTitle, $pPageId);
      }
      
      elseif (GetOperations::getVarValue('sendInfo', '') == 'kursortsms') {
        $tab = GetOperations::getVarValue('tab', '');

        return SmsUserAPI::getSMSPage4Kursort(
          $data,
          $this,
          $pageTitle,
          $pPageId,
          $this->tool0Settings->showSmsBetreff,
          $tab,
          true,
          RequestOperations::getVarValue('currentIndex')
        );
      }
    } 

    
    if ($this->_user->dnr <= 0 && !$this->_user->isAdmin()) {
      $page = new PageWTDefault($pageTitle, $pPageId, $this);
      $page->setContent('<h2>Sie sind nicht berechtigt sich diese Informationen anzusehen!</h2>');
    } elseif 
      
      (PostOperations::getVarValue('upload', '') == 1 && PostOperations::isDefined('dokInfo_1')) {
      $sightId = 318; 
      
      $restrictDownloadFuer = $this->_getRestrictedDownloadFuer();
      $processResult = DokuUploadUserAPI::performDokuUpload($_FILES, $this->getToolId(), $data, $sightId, $restrictDownloadFuer);
      
      
      $statusMessage = '<div id="statusMessage">' . $processResult['message'] . '</div>';
      $page = $this->_showKursdetails(
        $data,
        $pPageId,
        $processResult['process'],
        $processResult['message'],
        $statusMessage
      );
    }  

    
    elseif (PostOperations::getVarValue('releaseDoku', '') == 1 && PostOperations::isDefined('kurse4release')) {
      
      $selectedKursnrAry = explode(':', PostOperations::getVarValue('kurse4release', ''));
      
      $processResult = DokuUploadUserAPI::performDokuRelease($this, $selectedKursnrAry);
      $statusMessage = '<div id="statusMessage">' . $processResult['message'] . '</div>';
      
      
      
      $page = $this->_showKursdetails(
        $data,
        $pPageId,
        $processResult['process'],
        $processResult['message'],
        $statusMessage
      );
    }

    
    else {
      $page = $this->_showKursdetails($data, $pPageId, NO_UPLOAD);
    }

    return $page;
  }

  
  private function _getRestrictedDownloadFuer()
  {
    $restrictDownloadFuer = array();
    $downloadFuer = SerializeOperations::unserialize($this->toolSettings->downloadFuer);
    if (is_array($downloadFuer) && count($downloadFuer) > 0) {
      if (in_array(ToolKurseDozentSettings::DOWNLOAD_ALLE_TN, $downloadFuer)) {
        $restrictDownloadFuer[] = 1;
      }
      if (in_array(ToolKurseDozentSettings::DOWNLOAD_TN_MIT_LOGIN, $downloadFuer)) {
        $restrictDownloadFuer[] = 2;
      }
      if (in_array(ToolKurseDozentSettings::DOWNLOAD_TN_IM_KURS, $downloadFuer)) {
        $restrictDownloadFuer[] = 3;
      }
    }

    return $restrictDownloadFuer;
  }

  public static function getUserPart4Path($pUser)
  {
    $userKuerzel = '';
    
    
    if ($pUser->dnr > 0) {
      $userKuerzel .= 'doz_' . $pUser->dnr;
    }

    return $userKuerzel;
  }

  

  
  private function _showKursdetails($pData, $pPageId = 334, $pUploadResult = NO_UPLOAD, $pUploadMeldung = '', $pStatusMessage = '')
  {
    $userId = $this->getUser()->getIdentifier();
    $detailSightId = 2;
    $data = $pData;
    
    $boolShowTeilnehmer = BelegungAPI::isUserAllowedToSeeTn($pData, $this->toolId);

    $searchkurs = ((GetOperations::getVarValue('searchkurs', false)) ? '&amp;searchkurs=1' : '');

    
    $reiterSeite = new ReiterSeite($pPageId, $this->toolSettings->reiterBeschriftung);
    $sprachsettings = new SprachSettingsObject();

    
    
    
    $anzahlAllerKurse = 0;
    $allKnrs = $this->getTotalData('##');
    $anzahlKurseProSeite = 1;
    if ($allKnrs != '##') {
      $anzahlAllerKurse = count($allKnrs);
    }

    $tabPage = new TabCollectionKursdetails(
      'meine ' . $sprachsettings->Kurs['Plural']['Nominativ'],
      $pPageId,
      $this,
      'mein ' . $sprachsettings->Kurs['Singular']['Nominativ'] . ' ' . $data->id . ': ' . $data->getVarValue('titel_zeile1'),
      $data,
      $data->id,
      237,
      $anzahlAllerKurse,
      $anzahlKurseProSeite,
      $pStatusMessage
    );
    $pageLinks = array();

    
    if (\SecurityOperations::privilegAllowed($userId, $this->getToolId(), $reiterSeite->getRecht('Kursdetails'))) {
      $tabPage->addTabPage(new TabPageSightBuilderUebersicht($reiterSeite->getLabel('Kursdetails'), $data, $this->getToolId(), $detailSightId));
    }
    
    if (\SecurityOperations::privilegAllowed($userId, $this->getToolId(), $reiterSeite->getRecht('Inhalt'))) {
      $tabPage->addTabPage(new TabKursDetailsInhalt($reiterSeite->getLabel('Inhalt'), $data, $this->toolSettings->benutzteinfo));
    }

    
    $tabPage = $this->_getTerminReiter4Tab($tabPage, $data, $reiterSeite->getLabel('Termine'), $reiterSeite->getRecht('Termine'));
    
    
    if (\SecurityOperations::privilegAllowed($userId, $this->getToolId(), $reiterSeite->getRecht('Termine'))) {
      if (DBWorkBASysSettings::isBFI()) {
        $pageLinks['druckarbeitsbericht'] = 'printDruckListe.php?fastprint=KurstageArbeitsbericht&tool_id=' . \ToolsAPI::TOOL_KURSUEBERSICHT_DOZ
                                            . '&selnr=' . $pData->id;
      }
    }

    
    $tabPage = $this->_getTeilnehmerReiter4Tab(
      $tabPage,
      $data,
      $pPageId,
      $reiterSeite->getLabel('Teilnehmer'),
      $reiterSeite->getRecht('Teilnehmer'),
      $boolShowTeilnehmer
    );

    
    $tabPage = $this->_getHonorarReiter4Tab(
      $tabPage,
      $data,
      $reiterSeite->getLabel('Honorar'),
      $reiterSeite->getRecht('Honorar')
    );

    
    $tabPage = $this->_getDownloadsReiter4Tab(
      $tabPage,
      $data,
      $reiterSeite->getLabel('Downloads'),
      $reiterSeite->getRecht('Downloads'),
      $pUploadResult,
      $pUploadMeldung
    );

    
    if (\SecurityOperations::privilegAllowed($userId, $this->getToolId(), $reiterSeite->getRecht('Fotos'))) {
      $tabPage->addTabPage(new TabKursDetailsFotos($reiterSeite->getLabel('Fotos'), $data->id));
    }

    $pageLinks['back'] = ToolsAPI::getLastHistoryEntry();

    if (\SecurityOperations::privilegAllowed($this->getUser()->getIdentifier(), $this->getToolId(), $pPageId . '.0.1')) {
      $sprachSettings = SettingsFactory::getSettings('SprachSettingsObject');
      
      $pageLinks['anmeldenDoz'] = 'javascript: showMessage(\'Hier kann ' . CleanOperations::cleanStringForJs($sprachSettings->Dozent['Singular_mit_Artikel']['Nominativ']) . ' '
      . CleanOperations::cleanStringForJs($sprachSettings->Teilnehmer['Singular_mit_Artikel']['Akkusativ']) . ' zu diesem ' . CleanOperations::cleanStringForJs($sprachSettings->Kurs['Singular']['Dativ'])
      . ' anmelden. Diese Funktion ist aktuell im Rechtesystem nicht freigeschaltet.\', \'Anmeldung\');';  
    }

    
    if (\SecurityOperations::privilegAllowed($this->getUser()->getIdentifier(), $this->getToolId(), $pPageId . '.0.2')) {
      $pageLinks['forum'] = 'javascript: showMessage(\'Hier könnte der Link zu Ihrem Forum stehen - vgl. Teilnehmer.\', \'Ihr Forum\');';
    }
    
    
    if (\SecurityOperations::privilegAllowed($this->getUser()->getIdentifier(), $this->getToolId(), $pPageId . '.0.5')) {
      $pageLinks['druck_small'] = $this->getUrlParamsForFile(array('fastprint' => 'Kursstammblattliste', 'nureinenr' => $data->id), 'printDruckListe.php') . $searchkurs;
    }

    $pageLinks['tnlisten'] = ($boolShowTeilnehmer && \SecurityOperations::privilegAllowed($this->getUser()->getIdentifier(), 1, $pPageId . '.0.3') == 2);

    
    $dbwKTage = new DBWorkKurseTageWT();
    $dbwKTage->newSearch();
    $dbwKTage->toobject->datum = DateTimeOperations::getDateNow();
    $ktage = $dbwKTage->getKurstagebyKursNR($data->id, -1, true);
    $termindatum = DateTimeOperations::getDateNow();
    
    if (count($ktage) > 0) {
      $termindatum = $ktage[count($ktage) - 1]->datum;
    }
    
    if ($boolShowTeilnehmer && \SecurityOperations::privilegAllowed($this->getUser()->getIdentifier(), $this->getToolId(), $pPageId . '.0.4')) {
      $pageLinks['anwesenheiten'] = $this->getUrlParamsForFile(array('tool_id' => 18, 'toolsection_id' => 291, 'datum' => $termindatum));
    }

    
    if ($boolShowTeilnehmer && \SecurityOperations::privilegAllowed($this->getUser()->getIdentifier(), $this->getToolId(), $pPageId . '.0.7')) {
      $pageLinks['anwesenheiten4kurs'] = $this->getUrlParamsForFile(array('toolsection_id' => 226, 'nr' => $data->id)) . $searchkurs;
    }

    
    if (\SecurityOperations::privilegAllowed($this->getUser()->getIdentifier(), $this->getToolId(), $pPageId . '.0.8')) {
      $pageLinks['icsTermine'] = $this->getUrlParamsForFile(array('usertype' => 'Doz', 'nr' => $data->id), 'ics.php');
    }

    
    if (\SecurityOperations::privilegAllowedCurrentUser($this->getToolId(), $pPageId . '.0.6')) {
      $pageLinks['feedback'] = $this->getUrlParamsForFile(array('toolsection_id' => $pPageId, 'nr' => $data->id, 'showFormular' => 'feedback')) . $searchkurs;
    }
    $tabPage->setLinks($pageLinks);

    return $tabPage;
  }

  

  
  private function _getTerminReiter4Tab($pTabPage, $pData, $pReiterLabel, $pReiterRecht)
  {
    $searchkurs = ((GetOperations::getVarValue('searchkurs', false)) ? '&amp;searchkurs=1' : '');
    $userid = $this->getUser()->getIdentifier();
    
    if (\SecurityOperations::privilegAllowed($this->getUser()->getIdentifier(), $this->getToolId(), $pReiterRecht)) {
      
      
      $sight4Termine = 4;
      $sight4TerminStorno = 345;
      
      
      $addUrlPart = 'nr=' . $pData->id . '&amp;currentIndex=' . RequestOperations::getVarValue('currentIndex');

      $ktStatus = $this->toolSettings->ktstatus;
      $orderBy = $this->toolSettings->sortkt;
      $orderByAsc = $this->toolSettings->sortktasc;

      $termineTab = new TabKursDetailsTermine($pReiterLabel, $pData, $sight4Termine, $addUrlPart, $ktStatus, false, $orderBy, $orderByAsc);
      $termineTab->ktStatusHighlight = $this->toolSettings->ktstatus;
      $termineTab->ktStatusHighlightColor = $this->toolSettings->colorktstatus;
      $pageLinksTermine = array();

      
      $pageLinksTermine['drucktermine'] = '';
      if (\SecurityOperations::privilegAllowed($userid, \ToolsAPI::TOOL_KURSUEBERSICHT_DOZ, $sight4Termine . '.0.1') === 2) {
        $pageLinksTermine['drucktermine'] = 'javascript:window.print();';
      }
      
      

      $stornoAllowed = (\SecurityOperations::privilegAllowed($userid, \ToolsAPI::TOOL_KURSUEBERSICHT_DOZ, $sight4Termine . '.0.2') === 2);
      
      $pageLinksTermine['stornotermine'] = '';
      
      if ($stornoAllowed) {
        
        $pageLinksTermine['stornotermine'] = $this->getUrlParamsForFile(array('tool_id' => \ToolsAPI::TOOL_KURSUEBERSICHT_DOZ, 'toolsection_id' => $sight4TerminStorno,
        'nr' => $pData->id), 'usertools.php') . $searchkurs;
      }

      $termineTab->setLinks($pageLinksTermine);
      $pTabPage->addTabPage($termineTab);
      
    }

    return $pTabPage;
  }

  

  
  private function _getTeilnehmerReiter4Tab($pTabPage, $pData, $pPageId, $pReiterLabel, $pReiterRecht, $pShowTeilnehmer)
  {
    $searchkurs = ((GetOperations::getVarValue('searchkurs', false)) ? '&amp;searchkurs=1' : '');
    $userid = $this->getUser()->getIdentifier();
    
    $sight4TN = 3;
    
    if ($pShowTeilnehmer && \SecurityOperations::privilegAllowed($userid, $this->getToolId(), $pReiterRecht)) {
      $dbwBelegung = new DBWorkBelegung(1, true);
      $dbwBelegung->newSearch();
      $dbwBelegung->setPersonenOrderBySettings($this->toolSettings, 'tn');
      $dbwBelegung->fromobject->status = $this->toolSettings->tnstatus;
      $belegungAry = $dbwBelegung->getBelegungenByKursNR($pData->id);

      
      
      $addUrlPart = 'showFormular=nachricht&amp;nr=' . $pData->id . '&amp;currentIndex=' . RequestOperations::getVarValue('currentIndex');

      $tnStatusHighLightAry = array($this->toolSettings->tnstatus, $this->toolSettings->colortnstatus);
      $teilnehmerTab = new TabKursTeilnehmer($pReiterLabel, $belegungAry, $pData, $sight4TN, $tnStatusHighLightAry, $addUrlPart);
      $teilnehmerTab->showTnPictures = $this->toolSettings->showTnPictures;

      $pageLinksTeilnehmer = array();

      
      $pageLinksTeilnehmer['bescheinigung'] = $this->getUrlParamsForFile(array('nr' => $pData->id, 'tool_id' => \ToolsAPI::TOOL_KURSUEBERSICHT_DOZ,
                                              'toolsection_id' => $pPageId, 'showFormular' => 'bescheinigung')) . $searchkurs;

      $pageLinksTeilnehmer['emailallowed'] = (\SecurityOperations::privilegAllowed($userid, \ToolsAPI::TOOL_KURSUEBERSICHT_DOZ, $sight4TN . '.0.1') == 2);
      $pageLinksTeilnehmer['bescheinigungallowed'] = (\SecurityOperations::privilegAllowed($userid, \ToolsAPI::TOOL_KURSUEBERSICHT_DOZ, $sight4TN . '.0.2') == 2);

      
      $pageLinksTeilnehmer['nachricht'] = $this->getUrlParamsForFile(array('nr' => $pData->id, 'tool_id' => \ToolsAPI::TOOL_KURSUEBERSICHT_DOZ,
                                          'toolsection_id' => $pPageId, 'showFormular' => 'nachricht')) . $searchkurs;

      $pageLinksTeilnehmer['nachrichtallowed'] = (\SecurityOperations::privilegAllowed($userid, \ToolsAPI::TOOL_KURSUEBERSICHT_DOZ, $sight4TN . '.0.3') == 2);

      
      $pageLinksTeilnehmer['sammelsms'] = $this->getUrlParamsForFile(array('nr' => $pData->id, 'tool_id' => \ToolsAPI::TOOL_KURSUEBERSICHT_DOZ,
                                            'toolsection_id' => $pPageId, 'showFormular' => 'sammelsms')) . $searchkurs;

      $pageLinksTeilnehmer['sammelsmsallowed'] = (\SecurityOperations::privilegAllowed($userid, $this->getToolId(), $sight4TN . '.0.4') === 2);

      
      
      


      
      
      $pageLinksTeilnehmer['terminkalender'] = $this->getUrlParamsForFile(
        array('fastprint' => 'TerminKalenderTN', 'noIDs4Mark' => 1, 'nureinenr' => $pData->id),
        'printDruckListe.php'
      );
      
      $pageLinksTeilnehmer['terminkalenderallowed'] = (\SecurityOperations::privilegAllowed($userid, $this->getToolId(), $sight4TN . '.0.5') === 2);


      
      
      $pageLinksTeilnehmer['anwhauptunterkurse'] = $this->getUrlParamsForFile(
        array('fastprint' => 'AnwHauptUnterKurse', 'noIDs4Mark' => 1, 'nureinenr' => $pData->id),
        'printDruckListe.php'
      );
      
      $pageLinksTeilnehmer['anwhauptunterkurseallowed'] = (\SecurityOperations::privilegAllowed($userid, $this->getToolId(), $sight4TN . '.0.6') === 2 && DBWorkBASysSettings::isBFI());


      
      $pageLinksTeilnehmer['verhaltensliste'] = $this->getUrlParamsForFile(
        array('fastprint' => 'VerhaltensListe', 'noIDs4Mark' => 1, 'nureinenr' => $pData->id),
        'printDruckListe.php'
      );
      
      $toolAnwSettings = ToolSettingsAPI::getToolSettings(18);
      $pageLinksTeilnehmer['verhaltenslisteallowed'] = (\SecurityOperations::privilegAllowed($userid, $this->getToolId(), $sight4TN . '.0.7') === 2
                                                       && $toolAnwSettings->useVerhaltenseintraege);

      $teilnehmerTab->setLinks($pageLinksTeilnehmer);
      $pTabPage->addTabPage($teilnehmerTab);
    }

    return $pTabPage;
  }

  

  
  private function _getHonorarReiter4Tab($pTabPage, $pData, $pReiterLabel, $pReiterRecht)
  {
    $searchkurs = ((GetOperations::getVarValue('searchkurs', false)) ? '&amp;searchkurs=1' : '');
    $userDnr = $this->getUser()->dnr;
    $sight4Hon = 320;
    $sight4HonJournal = 321;

    
    if (\SecurityOperations::privilegAllowed($this->getUser()->getIdentifier(), $this->getToolId(), $pReiterRecht)) {
      $dbwDozHon = new DBWorkDozentenHonorar();
      $honObj = $dbwDozHon->getHonorarbyKNRDozentNR($pData->id, $userDnr);

      
      
      if (empty($honObj->dnr)) {
        $pTabPage->addTabPage(new TabPageDefault($pReiterLabel, 'Der Inhalt dieses Reiters kann nur vom zust&auml;ndigen Dozenten 
        angesehen werden.'));
      } else {
        $tabHonorar = new TabKursDetailsDozHonorar(
          $pReiterLabel,
          $honObj,
          $this->getToolId(),
          $sight4Hon,
          $sight4HonJournal,
          'dozhonorar',
          $this->toolSettings->zusatz_vertrag_anzeigen,
          $this->toolSettings->honorar_nur_gesamtbetrag,
          $this->toolSettings->fahrtkosten_nur_gesamtbetrag,
          $this->toolSettings->spesen_nur_gesamtbetrag
        );

        $pageLinksHonorar = array();
        
        if (\SecurityOperations::privilegAllowed($this->getUser()->getIdentifier(), $this->getToolId(), '247.0.10')) {
          $pageLinksHonorar['honorarjournal'] = $this->getUrlParamsForFile(array('fastprint' => 'GesamtHonorarjournal',
                                                        'nureinenr' => $pData->id), 'printDruckListe.php') . $searchkurs;
        }
        $tabHonorar->setLinks($pageLinksHonorar);

        $pTabPage->addTabPage($tabHonorar);
      }
    } 

    return $pTabPage;
  }

  

  
  private function _getDownloadsReiter4Tab($pTabPage, $pData, $pReiterLabel, $pReiterRecht, $pUploadResult, $pUploadMeldung)
  {
    $userid = $this->getUser()->getIdentifier();
    

    if (\SecurityOperations::privilegAllowed($userid, $this->getToolId(), $pReiterRecht)) {
      $sight4downloads = 318;
      $downloadTab = new TabKursDetailsDownloads4Dozenten(
        $pReiterLabel,
        $pData->id,
        $this->getToolId(),
        $sight4downloads,
        $this->toolSettings->freigabeDokuByMA,
        $pUploadResult,
        $pUploadMeldung
      );

      $pageLinksDownloads = array();
      
      $uploadAllowed = (\SecurityOperations::privilegAllowed($userid, $this->getToolId(), $sight4downloads . '.0.1') === 2);
      $pageLinksDownloads['upload'] = '';
      if ($uploadAllowed) {
        $pageLinksDownloads['upload'] = '#';
      }

      
      $releaseDokuAllowed = (\SecurityOperations::privilegAllowed($userid, $this->getToolId(), $sight4downloads . '.0.2') === 2);
      $pageLinksDownloads['releaseDoku'] = '';
      if ($releaseDokuAllowed) {
        $pageLinksDownloads['releaseDoku'] = '#';
      }
      $pageLinksDownloads['downloadFuer'] = SerializeOperations::unserialize($this->toolSettings->downloadFuer);

      $downloadTab->setLinks($pageLinksDownloads);
      $pTabPage->addTabPage($downloadTab);
    }

    return $pTabPage;
  }

  

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