<?php
/**
 * @copyright (c) Kufer Software GmbH, Oderstraße 7, D-84453 Mühldorf
 */


class ToolDozAnwesenheit extends ToolBase
{
  

  private $_user;

  
  protected $dateRangeBack;

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

    $this->dateRangeBack = $this->toolSettings->restrictKt;
    $this->_user = SessionOperations::getCurrentWebToolsUser();
  }

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

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

    
    switch ($pPageId) {
      default:
      case 273: 
      case 291: 
        $page = $this->_handleEinstiegByKurstag();
        break;
      case 274: 
        $knr = GetOperations::getVarValue('nr');
        
        
        $this->setTotalData($knr);
        $ktId = RequestOperations::getVarValue('ktid');
        $vonDat = DateTimeOperations::getDateNow();
        $bisDat = DateTimeOperations::getDateNow();

        $page = $this->_handleKurstagAnw($knr, $vonDat, $bisDat, $ktId);

        break;
      case 288: 
        $knr = GetOperations::getVarValue('nr');
        $ktId = RequestOperations::getVarValue('ktid');
        $page = $this->_handleNotenUebersicht($knr, $ktId);
    }

    if ($page == null) {
      throw new Exception('ungültige PageId');
    }

    $this->currentPage = $page;
  }

  private function _handleEinstiegByKurstag()
  {
    $datum = RequestOperations::getVarValue('datum', DateTimeOperations::getDateNow());

    $filter = new InputfilterTools();
    $datum = $filter->getValidDate($datum);
    
    $dbwKT = new DBWorkKurseTageWT(1, false);
    $dbwKT->newSearch();
    $dbwKT->fromobject->ausfall = $this->toolSettings->ktstatus_ktuebersicht;
    $dbwKT->toobject->ausfall = $this->toolSettings->ktstatus_ktuebersicht;
    $dbwKT->orderby = $this->toolSettings->sortkt_ktuebersicht;
    $dbwKT->orderbyasc = $this->toolSettings->sortktasc_ktuebersicht;

    $maxDaysBack = $this->toolSettings->aktKurstageBackScroll;
    $maxDayBack = DateTimeOperations::getNextDate(DateTimeOperations::getDateNow(), (-1 * $maxDaysBack));

    $dozentIsLeiter = false;
    $anzahlTage = DateTimeOperations::getAnzTage($maxDayBack, $datum);
    
    
    if ($this->toolSettings->showKurstage === 'leiter') {
      $maxDaysBack4Leiter = max($this->toolSettings->aktKurstageBackScroll4Leiter, $maxDaysBack);
      $maxDayBack4Leiter = DateTimeOperations::getNextDate(DateTimeOperations::getDateNow(), (-1 * $maxDaysBack4Leiter));
      
      $dozentIsLeiter = $dbwKT->isDozentLeiterFuerKTinZeitraum($this->_user->dnr, $maxDayBack4Leiter, DateTimeOperations::getDateNow());
      
      
      if ($dozentIsLeiter) {
        $anzahlTage = DateTimeOperations::getAnzTage($maxDayBack4Leiter, $datum);
      }
    }
    if (!$dozentIsLeiter) {
      $maxDaysBack4Leiter = $maxDaysBack;
    }
    $dateOutOfRange = false;
    $dateOuter = '';
    if ($anzahlTage < 1 || $anzahlTage > max($maxDaysBack, $maxDaysBack4Leiter) + 1) {
      $dateOutOfRange = true;
      
      $dateOuter = $datum;
      
      $datum = DateTimeOperations::getDateNow();
      
      $anzahlTage = DateTimeOperations::getAnzTage($maxDayBack, $datum);
    }

    if (GetOperations::getVarValue('showFormular') == 'feedback') {
      $data = $dbwKT->getKurstag(GetOperations::getVarValue('ktid'));

      return $this->_handleNachrichtAnEinrichtung(291, $data, $datum);
    } elseif (GetOperations::getVarValue('sendInfo', '') == 'vhs') {
      $data = $dbwKT->getKurstag(GetOperations::getVarValue('ktid'));

      return $this->_sendNachrichtAnEinrichtung(291, $data, $datum);
    }

    if ($dozentIsLeiter && $this->toolSettings->showKurstage === 'leiter') {
      
      
      
      $tagIstImNormalZeitraum = (DateTimeOperations::getAnztage($maxDayBack, $datum) >= 1);
      $data = $dbwKT->getKurstagebyDozentNRAndDate4Leiter($this->_user->dnr, $datum, !$tagIstImNormalZeitraum);
    } elseif ($this->toolSettings->showKurstage === 'alle4kurs') {
      
      $data = $dbwKT->getKurstage4DozentOfKursbyDateRange($this->_user->dnr, $datum, $datum);
    } else { 
      
      $data = $dbwKT->getKurstagebyDozentNRAndDateRange($this->_user->id, $datum, $datum);
    }

    
    
    $knrKtidArray = array();
    foreach ($data as $kurstag) {
      $knrKtidArray[] = array('ktid' => $kurstag->id, 'knr' => $kurstag->knr);
    }
    SessionOperations::setVarValueWTIntern('anwesenheiten_uebersicht', $knrKtidArray);

    $page = new PageAnwesenheitKurstageUebersicht($this, $data, $datum, $dateOutOfRange, $dateOuter);
    $pageLinks = array();
    if (\SecurityOperations::privilegAllowed($this->getUser()->getIdentifier(), $this->getToolId(), '273.0.3')) {
      $pageLinks['anweintragen']
        = $this->getUrlParamsForFile(array('toolsection_id' => 274));
    }
    if (\SecurityOperations::privilegAllowed($this->getUser()->getIdentifier(), $this->getToolId(), '273.0.4')) {
      $pageLinks['noteneintragen'] = $this->getUrlParamsForFile(array('toolsection_id' => 288));
    }
    if (\SecurityOperations::privilegAllowed($this->getUser()->getIdentifier(), $this->getToolId(), '273.0.5')) {
      $pageLinks['nachricht'] = $this->getUrlParamsForFile(array('toolsection_id' => 291, 'datum' => $datum));
    }
    if ($anzahlTage > 1) {
      $pageLinks['backward'] = $this->getUrlParamsForFile(array('toolsection_id' => 291, 'datum' => DateTimeOperations::getNextDate($datum, -1)));
    }
    
    if (DateTimeOperations::getAnzTage($datum, DateTimeOperations::getDateNow()) > 1) {
      $pageLinks['forward'] = $this->getUrlParamsForFile(array('toolsection_id' => 291, 'datum' => DateTimeOperations::getNextDate($datum, 1)));
    }
    $pageLinks['self'] = $this->getUrlParamsForFile(array('toolsection_id' => 291));

    $page->setLinks($pageLinks);

    return $page;
  }

  private function _handleNachrichtAnEinrichtung($pPageId, $pKurstag, $pDatum)
  {
    $pageLinks = array();
    $pageLinks['back'] = ToolsAPI::getLastHistoryEntry();
    $pageLinks['action'] = $this->getUrlParamsForFile(array('toolsection_id' => $pPageId, 'datum' => $pDatum, 'ktid' => $pKurstag->id, 'sendInfo' => 'vhs'));
    $betreff = $pKurstag->kurs->getVarValue('titel_zeile1') . ' (' . $pKurstag->datum . ', ' . $pKurstag->zeit_beg . ' - ' . $pKurstag->zeit_ende . ') - '
               . $this->_user->vorname . ' ' . $this->_user->name;
    $page = new PageKontakt('Feedback', $pPageId, $this, 'Nachricht an Einrichtung', $betreff);
    $page->setLinks($pageLinks);

    return $page;
  }

  private function _sendNachrichtAnEinrichtung($pPageId, $pKursTag, $pDatum)
  {
    $pageLinks = array();
    $pageLinks['back'] = ToolsAPI::getLastHistoryEntry();
    $versendet = array();
    $nichtVersendet = array();

    
    $allgsettings = AllgSettingsAPI::getAllgSettings();

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

    $mailAnMaAry = array();
    $mailAnMaAry['VerwMa'] = $this->toolSettings->stornoBenachrichtigungsMailAnVerwMa;

    $mailAdressAry = ToolsAPI::getEmailAdressForKursMA($pKursTag->kurs, $this->toolId, $pPageId, $mailAnMaAry);
    $mailAdress = \ArrayOperations::firstValue($mailAdressAry);
    $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 = PostOperations::getVarValue('betreff');
    $email->body = PostOperations::getVarValue('info');
    $email->setFooter('Feedback zu einem Kurstag', $this->_user, $pKursTag);

    if ($email->sendMail()) {
      $versendet[] = $allgsettings->vhsname;
    } else {
      $nichtVersendet[] = $allgsettings->vhsname;
    }

    $page = new PageNachrichtErfolgreichGesendetFeedback('Feedback', $pPageId, $this, 'Feedback', $versendet, $nichtVersendet);
    $page->setLinks($pageLinks);

    return $page;
  }

  
  private function _anwDMZSubmit($pKnr, $pKtID)
  {
    $dbwAnw = new DBWorkAnwesenheit2();

    $dbwKTage = new DBWorkKurseTageWT();
    $kurstag = $dbwKTage->getKurstag($pKtID);
    
    $kurstag->bemerkungen = PostOperations::getVarValue('BemerkungSlashLehrinhaltOrig');
    $kurstag->klassenbuchtext = PostOperations::getVarValue('klassenbuchtextOrig');
    $kurstag->klassenbuchueok = PostOperations::getVarValue('klassenbuchueokOrig');
    $kurstag->klassenbuchabwue = PostOperations::getVarValue('klassenbuchabwueOrig');
    $kurstag->klassenbuchgrund = PostOperations::getVarValue('klassenbuchgrundOrig');

    $kurstagOrig = clone $kurstag;

    $aenderungNoetig = false;

    $stati = AnwesenheitenDurchschreibenAPI::getStatusArray($this->getToolId());

    $anwesenheitInfoFromDb = $dbwAnw->getAnwesenheiten($pKnr, $kurstag->datum, $kurstag->datum, $stati, $pKtID);

    $anwErfolgreichEingetragen = false;
    $unterrichtsMittelErfolgreichEingetragen = false;
    $klassenBuchErfolgreichEingetragen = false;
    $verhaltenErfolgreichEingetragen = false;
    $error = false;

    $statusMessage = '';
    $statusResult = '';

    try {
      if ($pKtID == '') {
        throw new Exception('kein Kurstag als Parameter übergeben');
      }


      
      $veraenderteEigenschaften = array();

      if ($this->toolSettings->useLehrinhaltErf) {
        $klassenbuchtext = PostOperations::getVarValue('klassenbuchtext', '');
        if ($this->toolSettings->ueNichtErfassen) {
          $klassenbuchueok = $kurstag->klassenbuchueok;
          $klassenbuchabwue = $kurstag->klassenbuchabwue;
          $klassenbuchgrund = $kurstag->klassenbuchgrund;
        } else {
          $klassenbuchueok = (PostOperations::getVarValue('klassenbuchueok', '') === '1') ? 1 : 2;
          $klassenbuchabwue = PostOperations::getVarValue('klassenbuchabwue', '');
          $klassenbuchgrund = PostOperations::getVarValue('klassenbuchgrund', '');
        }
        if ($klassenbuchtext != $kurstag->klassenbuchtext || $klassenbuchueok != $kurstag->klassenbuchueok
            || $klassenbuchgrund != $kurstag->klassenbuchgrund
            || MathOperations::stringToFloat($klassenbuchabwue) != MathOperations::stringToFloat($kurstag->klassenbuchabwue)) {
          $aenderungNoetig = true;
          $veraenderteEigenschaften['klassenbuchtext'] = $klassenbuchtext;
          $veraenderteEigenschaften['klassenbuchueok'] = $klassenbuchueok;
          $veraenderteEigenschaften['klassenbuchabwue'] = $klassenbuchabwue;
          $veraenderteEigenschaften['klassenbuchgrund'] = $klassenbuchgrund;
        }
      }


      
      if ($this->toolSettings->useBemerkungSlashLehrinhalt) {
        $postBemerkungSlashLehrinhalt = PostOperations::getVarValue('BemerkungSlashLehrinhalt');

        if ($kurstag->bemerkungen != $postBemerkungSlashLehrinhalt) {
          $aenderungNoetig = true;
          $veraenderteEigenschaften['bemerkungen'] = $postBemerkungSlashLehrinhalt;
        }
      }

      
      if (!NewAnwesenheitAPI::updateKtKBuch($kurstag, $veraenderteEigenschaften)) {
        $statusMessage = '<div class="alertbox_text">Es wurden keine Änderungen bei den Anwesenheiten durchgeführt.</div>';
        $statusMessage = HTMLOperations::getWarningBox($statusMessage, 'Achtung', 'in_background');
      } else {
        $statusMessage = '<div class="successbox_text">Die Änderungen am Klassenbuch wurden erfolgreich eingetragen.</div>';
        $statusMessage = HTMLOperations::getSuccessBox($statusMessage, 'Eintragung erfolgreich', 'in_background');
        $klassenBuchErfolgreichEingetragen = true;
      }

      
      if ($this->toolSettings->useUnterrichtsMittelErf) {
        $postUmittel = PostOperations::getVarValue('unterrichtsMittel');
        if ($postUmittel != '') {
          $aenderungNoetig = true;

          $neueUmittel = JsonOperations::getFromString($postUmittel);
          $neueUmittelDatamodul = array();
          foreach ($neueUmittel as $neueUmittelAusRequest) {
            $neuesUmittelDatamodul = Datamodul::toDatamodul('Unterrichtsmittel', $neueUmittelAusRequest);
            $neueUmittelDatamodul[] = $neuesUmittelDatamodul;
            $neuesUmittelDatamodul->erfasstam = DateTimeOperations::getDateNow();
            $neuesUmittelDatamodul->erfasstvon = SessionOperations::getCurrentWebToolsUserKennung();
            $neuesUmittelDatamodul->bearbdatum = DateTimeOperations::getDateNow();
            $neuesUmittelDatamodul->bearbeiter = SessionOperations::getCurrentWebToolsUserKennung();
          }
          if (count($neueUmittelDatamodul) > 0) {
            NewAnwesenheitAPI::unterrichtsmittelEintragen($neueUmittelDatamodul);
          }
          $unterrichtsMittelErfolgreichEingetragen = true;
        }
      }
      
      

      
      
      $verhaltensEntries = JsonOperations::getFromStringBase64(PostOperations::getVarValue('verhaltenseintrag_hidden'));
      if (!is_null($verhaltensEntries) && count($verhaltensEntries) > 0) {
        $aenderungNoetig = true;
        $verhaltensApi = new VerhaltenAPI(SessionOperations::getUserIdentifier(), $this->toolSettings->showVerhEntriesDays);

        try {
          
          if ($verhaltensApi->aktualisiereVerhalten($verhaltensEntries, false)) {
            $statusMessage = '<div class="successbox_text">Die Änderungen zu den Verhaltenseinträgen konnten erfolgreich gespeichert werden.</div>';
            $statusMessage = HTMLOperations::getSuccessBox($statusMessage, 'Eintragung erfolgreich', 'in_background');
            $verhaltenErfolgreichEingetragen = true;
          }
        } 
        catch (Exception $e) {
          $meldung = 'Die Verhaltenseinträge konnten nicht gespeichert werden!';

          throw new Exception('<h2 class="headline" id="ktform_message">' . $meldung . '</h2>');
        }
      } 


      $anwInfo = JsonOperations::getFromString(PostOperations::getVarValue('anwesenheitsInfo'));

      if (is_array($anwInfo) && count($anwInfo) > 0) {
        
        $anwInfoDatamodul = array();
        foreach ($anwInfo as $anwInfoAusRequest) {
          $anwInfoDatamodul[] = Datamodul::toDatamodul('Anwesenheit', $anwInfoAusRequest, array('_eanws' => 'AnwesenheitExtra'));
        }
        
        if (count($anwInfoDatamodul) > 0 && $anwInfoDatamodul != $anwesenheitInfoFromDb) {
          
          $anwesenheitenDieGeaendertWurden = array();
          foreach ($anwInfoDatamodul as $anw) {
            $oldAnw = NewAnwesenheitAPI::getAnwesenheit4Belegung($anwesenheitInfoFromDb, $anw->abelegid);
            if (false === $oldAnw || $oldAnw != $anw) {
              $aenderungNoetig = true;
              $anwesenheitenDieGeaendertWurden[] = $anw;
            }
          }

          
          
          if ($aenderungNoetig && $this->toolSettings->schreibeAnwesenheitenDurch) {
            $anwDruchschreibenObj = new AnwesenheitenDurchschreibenAPI($this->getToolId());
            $neueAnwesenheitenAndererKurstage = $anwDruchschreibenObj->getAnwFuerDurchgeschriebeneKurstage($kurstagOrig, $anwesenheitenDieGeaendertWurden);
            $anwesenheitenDieGeaendertWurden = array_merge($anwesenheitenDieGeaendertWurden, $neueAnwesenheitenAndererKurstage);
          }

          
          
          
          $result = NewAnwesenheitAPI::anwesenheitenEintragen($anwesenheitenDieGeaendertWurden);
          if ($result['success'] instanceof AbgleichApiResult) {
            if ($result['success']->code == AbgleichApiResult::CODE_SUCCESS) {
              $statusResult = 'erfolgreich';
            } elseif ($result['success']->code == AbgleichApiResult::CODE_DISABLED) {
              $statusResult = 'deaktiviert';
            } else {
              $statusResult = 'fehler';
            }
          } else {
            if (false === $result['success']) {
              $statusResult = 'deaktiviert';
            } else {
              $statusResult = 'erfolgreich';
            }
          }
        }
      }
    } catch (Exception $e) {
      Logger::logg('Anwesenheiten eintragen - folgende Exception ist aufgetreten: ' . $e->getMessage() . ' [' . $e->getTraceAsString() . ']', 200);
      $statusResult = 'fehler';
    }

    if ($aenderungNoetig) {
      if ($statusResult == 'erfolgreich') {
        $statusMessage = '<div class="successbox_text">' . CleanOperations::cleanStringForHtml($this->allgSettings->successMsgAnwesenheiten) . '</div>';
        $statusMessage = HTMLOperations::getSuccessBox($statusMessage, 'Eintragung erfolgreich', 'in_background');
        $anwErfolgreichEingetragen = true;
      } elseif ($statusResult == 'deaktiviert') {
        $pathToErrorImage = 'images/abort.gif';
        $statusMessage = '<div class="alertbox_text"><img src="' . $pathToErrorImage . '" alt="Fehler!"> Das Schreiben ist deaktiviert.</div>';
        $statusMessage = HTMLOperations::getAlertBox($statusMessage, 'Achtung', 'in_background');
        $error = true;
      } elseif ($statusResult == 'fehler') {
        $pathToErrorImage = 'images/abort.gif';
        $statusMessage = '<div class="alertbox_text"><img src="' . $pathToErrorImage . '" alt="Fehler!"> ' . CleanOperations::cleanStringForHtml($this->allgSettings->failSubmitMsgAnwesenheiten) . '</div>';
        $statusMessage = HTMLOperations::getAlertBox($statusMessage, 'Fehler', 'in_background');
        $error = true;
      }
    }

    return array('statusMessage' => $statusMessage, 'anw_erfolgreich' => $anwErfolgreichEingetragen,
                 'umittel_erfolgreich' => $unterrichtsMittelErfolgreichEingetragen, 'klbuch_erfolgreich' => $klassenBuchErfolgreichEingetragen,
                 'verh_erfolgreich' => $verhaltenErfolgreichEingetragen, 'success' => (! $error));
  }

  

  
  private function _handleKurstagAnw($knr, $vonDat, $bisDat, $ktId)
  {
    $dbwKTage = new DBWorkKurseTageWT();
    $dbwAnw = new DBWorkAnwesenheit2();
    $kurstag = $dbwKTage->getKurstag($ktId);
    $ktageInfo = $dbwAnw->getAnwesenheitKurstagInfo($knr, $kurstag->datum, $kurstag->datum, false, $ktId);
    if (count($ktageInfo) == 0) {
      $page = new PageWTDefault('Anwesenheiten', 274, $this);
      if (DBWorkBASysSettings::isBFI()) {
        $page->setContentHeader('Bitte versuchen Sie es in Kürze noch einmal, die Datenübertragung ist noch nicht abgeschlossen. ' . BR_WT
                . 'Wenn der Zustand länger andauert, setzen Sie sich bitte mit uns in Verbindung.');
      } else {
        $page->setContentHeader('Bitte unterlassen Sie es die Eingabe zu manipulieren. ' . BR_WT
            . 'Falls sich der Fehler ohne eine Manipulation wiederholen sollte, ' . BR_WT
            . 'setzen Sie sich bitte mit uns in Verbindung.');
      }

      return $page;
    }

    
    $stati = AnwesenheitenDurchschreibenAPI::getStatusArray($this->getToolId());

    $anwesenheitInfo = new \Kufer\Web\Classes\Db\AnwesenheitFilter(
      $knr,
      $stati,
      $kurstag->datum,
      $kurstag->datum,
      true,
      $ktId
    );
    $belegungInfo = $dbwAnw->getAnwesenheitBelegungInfo($anwesenheitInfo);
    

    $verhaltenInfo = $dbwAnw->getAnwesenheitsVerhaltenInfo($belegungInfo, $ktageInfo);

    
    $anwesenheitInfoFromDb = $dbwAnw->getAnwesenheiten($knr, $vonDat, $bisDat, array(), $ktId, true);
    
    

    
    $statusMessage = '';

    $ktag = $dbwKTage->getKurstag($ktId, true);
    $ktag4Klassenbuch = KurstagAPI::getKurstag4Klassenbuch($ktag->id);
    if (is_string($ktag4Klassenbuch)) { 
      $statusMessage = $ktag4Klassenbuch;
    } else {
      $ktag = KurstagAPI::updateKurstag4Klassenbuch($ktag, $ktag4Klassenbuch);
    }

    $pageLinks = array();
    $pageLinks['action'] = $this->getUrlParamsForFile(array('toolsection_id' => 274, 'nr' => $knr, 'ktid' => $ktId, 'action' => 'anwsinglekt'));

    
    $ktUebersicht = SessionOperations::getVarValueWTIntern('anwesenheiten_uebersicht', array());

    
    if (! empty($ktUebersicht)) {
      foreach ($ktUebersicht as $index => $ktidKnrAry) {
        if ($ktidKnrAry['ktid'] == $ktId) {
          if ($index == 0) {
            $pageLinks['blaettern_zurueck'] = $this->getUrlParamsForFile(array('toolsection_id' => 291, 'datum' => DateTimeOperations::getNextDate($ktag->datum, -1)));
          } else {
            $pageLinks['blaettern_zurueck'] = $this->getUrlParamsForFile(array('toolsection_id' => 274, 'nr' => $ktUebersicht[$index - 1]['knr'], 'ktid' => $ktUebersicht[$index - 1]['ktid'], 'action' => 'anwsinglekt'));
          }

          if ($index == count($ktUebersicht) - 1) {
            $pageLinks['blaettern_vor'] = $this->getUrlParamsForFile(array('toolsection_id' => 291, 'datum' => DateTimeOperations::getNextDate($ktag->datum, 1)));
          } else {
            $pageLinks['blaettern_vor'] = $this->getUrlParamsForFile(array('toolsection_id' => 274, 'nr' => $ktUebersicht[$index + 1]['knr'], 'ktid' => $ktUebersicht[$index + 1]['ktid'], 'action' => 'anwsinglekt'));
          }
        }
      }
    }

    $dbwKurse = new DBWorkKurse();
    $kurs = $dbwKurse->getKurs($knr);
    
    $boolShowTeilnehmer = BelegungAPI::isUserAllowedToSeeTn($kurs, 1, false); 
    $pPageId = 334;
    $reiterBeschriftung = (isset($this->toolSettings->reiterBeschriftung) ? $this->toolSettings->reiterBeschriftung : '');
    $reiterSeite = new ReiterSeite($pPageId, $reiterBeschriftung);

    
    
    if ($boolShowTeilnehmer && \SecurityOperations::privilegAllowed($this->getUser()->getIdentifier(), 1, $pPageId . '.0.7')) {
      $pageLinks['anwesenheiten4kurs'] = 'usertools.php?tool_id=1&toolsection_id=226&nr=' . $knr;
    }

    
    if (\SecurityOperations::privilegAllowed($this->getUser()->getIdentifier(), 1, $reiterSeite->getRecht('Termine'))) {
      if (DBWorkBASysSettings::isBFI()) {
        $pageLinks['druckarbeitsbericht'] = 'printDruckListe.php?fastprint=KurstageArbeitsbericht&tool_id=' . \ToolsAPI::TOOL_KURSUEBERSICHT_DOZ . '&selnr=' . $knr;
      }
    }

    
    
    $sight4TN = 3;
    if (\SecurityOperations::privilegAllowed($this->getUser()->getIdentifier(), \ToolsAPI::TOOL_KURSUEBERSICHT_DOZ, $sight4TN . '.0.7') === 2) {
      if ($this->toolSettings->useVerhaltenseintraege) {
        
        $pageLinks['verhaltensliste'] = $this->getUrlParamsForFile(
          array('fastprint' => 'VerhaltensListe', 'noIDs4Mark' => 1, 'nureinenr' => $knr),
          'printDruckListe.php'
        );
      }
    }
    
    $pageLinks['back'] = ToolsAPI::getLastHistoryEntry();


    $unterrichtsmittel = array();
    if ($this->toolSettings->useUnterrichtsMittelErf) {
      $dbwUntMittel = new DBWorkUnterrichtsmittel();
      $unterrichtsmittel = $dbwUntMittel->getUnterrichtsmittelByKnr($knr);
    }

    $readOnly = (\SecurityOperations::privilegAllowed($this->_user->getIdentifier(), $this->getToolId(), '274.0.1') != 2);

    $teilnehmerAry = null;
    if (DBWorkBASysSettings::isSchwerinAusbildung()) {
      $belegIds = array_map(function($pBelegungInfo) { return $pBelegungInfo->belegid; }, $belegungInfo);
      $dbwBelegung = new DBWorkBelegung(1, true);
      $belegungen = $dbwBelegung->getBelegungenByIds($belegIds);
      foreach ($belegungen as $belegung) {
        $teilnehmerAry[$belegung->id] = $belegung->teilnehmer;
      }
    }

    $page = new PageAnwesenheitEinKurstag(
      'Anwesenheiten',
      274,
      $this,
      $ktag,
      $anwesenheitInfoFromDb,
      $this->toolSettings->useLehrinhaltErf,
      $this->toolSettings->ueNichtErfassen,
      $this->toolSettings->useUnterrichtsMittelErf,
      $this->toolSettings->useVerhaltenseintraege,
      $this->toolSettings->useBemerkungSlashLehrinhalt,
      $this->toolSettings->showFachInTitel,
      $ktageInfo,
      $belegungInfo,
      $verhaltenInfo,
      $unterrichtsmittel,
      $readOnly,
      $teilnehmerAry
    );
    $page->setLinks($pageLinks);
    $page->statusMessage = $statusMessage;

    return $page;
  }

  

  
  public function getAjaxResponse()
  {
    switch (RequestOperations::getVarValue('action')) {
      case 'anwsinglekt':
        
        return JsonOperations::encode4Ajax(
          $this->_anwDMZSubmit(
            RequestOperations::getVarValue('nr'),
            RequestOperations::getVarValue('ktid')
          )
        );
    }
  }

  

  private function _handleNotenUebersicht($knr, $ktId)
  {
    $pageLinks = array();
    $pageLinks['action'] = $this->getUrlParamsForFile(array('toolsection_id' => 288, 'nr' => $knr));
    $pageLinks['back'] = ToolsAPI::getLastHistoryEntry();

    $page = new PageNotenUebersichtVereinfacht($this, $knr);
    $page->setLinks($pageLinks);

    return $page;
  }

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