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

namespace Kufer\Web\KuferTools\Basis\Kursdetails\Detailsreiter;

use Kufer\Web\KuferTools\Dozent\Anwesenheiten\Utils\KurstageUtils;
use Kufer\Web\KuferTools\Utils\Storno\StornoUtils;

abstract class ReiterButtons
{
  protected $reiterButtons = array();
  
  protected $buttonFactory;

  
  protected $useCase;
  protected $request;
  protected $response;

  public function __construct($useCase, $request, $response)
  {
    $this->useCase = $useCase;
    $this->request = $request;
    $this->response = $response;
    $this->buttonFactory = new \Kufer\Web\KuferTools\Basis\Button\ButtonFactory();
  }

  abstract public function getButtonsArray($pDatenSaetzeVorhanden = true);

  
  public function getButtons($pDatenSaetzeVorhanden = true): array
  {
    $this->reiterButtons = $this->getButtonsArray($pDatenSaetzeVorhanden);

    return $this->reiterButtons;
  }

  protected function getAktuelleURLRelative()
  {
    $url = \URL::loadCurrent();

    return $url->getUrlRelative();
  }
}

class FaAnmeldungReiterButtons extends ReiterButtons
{
  public function getButtonsArray($pDatensaetzeVorhanden = true)
  {
    $buttons = array();
    $anmeldenAllowed = $this->useCase->isRechtAllowed($this->response->toolSectionId . '.0.1');

    if ($anmeldenAllowed) {
      $toolId = $this->response->toolId;
      $toolSettings = \ToolSettingsAPI::getToolSettings($toolId);
      $user = $this->useCase->getUser();
      $dbtn = new \DBWorkTeilnehmer(1, true);
      $teilnehmer = $dbtn->getTeilnehm($user->tnr);
      $emptyMandatorys = \AnmeldeAPI::getEmptyMandatoryFieldName($toolSettings, $teilnehmer);

      $buttons[] = array(\Kufer\Web\KuferTools\Utils\Anmeldung\AnmeldeButtonUtils::createFirmaButtonForAnmeldung(
        $this->buttonFactory,
        $this->response->kurs,
        $emptyMandatorys,
        $user,
        $teilnehmer,
        function(
          \Kufer\Web\KuferTools\Basis\Button\ButtonFactory $buttonFactory,
          \Kufer\Web\KuferTools\Basis\Anmeldung\KursAnmeldeButtonViewModel $viewModel,
          $fnCreateView,
          \Kurs $kurs,
          \Benutzer $user,
          \Teilnehmer $teilnehmer
        ) use ($toolId) {
          $class = '';
          $hrefLink = 'index.php?tool_id=' . $toolId . '&action=anmeldeformular&knr=' . urlencode($kurs->id) . '&referer=' . urlencode($this->getAktuelleURLRelative()) . '&refererLabel=' . urlencode(\StringOperations::htmlentities('Zurück zur Kursdetails'));
          

          $beschriftung = 'Anmelden';
          $color = 'success';

          
          if (\DBWorkBASysSettings::isUnnaForum() && $kurs->getVarValue('teil_frei') <= 0) {
            $beschriftung = 'Warteliste';
            $color = 'primary';
          }

          return $buttonFactory->getAnmeldenButton('', $beschriftung, $hrefLink, $class, $color)
            ->overwriteButtonWithView($fnCreateView($viewModel));
        }
      ));
    }

    return $buttons;
  }
}

class TnAnmeldungReiterButtons extends ReiterButtons
{
  public function getButtonsArray($pDatensaetzeVorhanden = true)
  {
    $buttons = array();
    $anmeldenAllowed = $this->useCase->isRechtAllowed($this->response->toolSectionId . '.0.1');

    if ($anmeldenAllowed) {
      $toolId = $this->response->toolId;
      $toolSettings = \ToolSettingsAPI::getToolSettings($toolId);
      $user = $this->useCase->getUser();
      $dbtn = new \DBWorkTeilnehmer(1, true);
      $teilnehmer = $dbtn->getTeilnehm($user->tnr);
      $emptyMandatorys = \AnmeldeAPI::getEmptyMandatoryFieldName($toolSettings, $teilnehmer);

      $buttons[] = array(\Kufer\Web\KuferTools\Utils\Anmeldung\AnmeldeButtonUtils::createTeilnehmerButtonForAnmeldung(
        $this->buttonFactory,
        $this->response->kurs,
        $emptyMandatorys,
        $user,
        $teilnehmer,
        $toolSettings,
        function(
          \Kufer\Web\KuferTools\Basis\Button\ButtonFactory $buttonFactory,
          \Kufer\Web\KuferTools\Basis\Anmeldung\KursAnmeldeButtonViewModel $viewModel,
          $fnCreateView,
          \Kurs $kurs,
          \Benutzer $user,
          \Teilnehmer $teilnehmer
        ) {
          $bgluClass = (\DBWorkBASysSettings::isBlak() && $kurs->isBGLU() ? 'isbgluKurs' : '');
          $class = 'AnmeldenButton ' . $bgluClass;
          $hrefLink = '';
          

          $beschriftung = 'Anmelden';
          $color = 'success';

          
          if (\DBWorkBASysSettings::isUnnaForum() && $kurs->getVarValue('teil_frei') <= 0) {
            $beschriftung = 'Warteliste';
            $color = 'primary';
          }

          return $buttonFactory->getAnmeldenButton('', $beschriftung, $hrefLink, $class, $color)
            ->overwriteButtonWithView($fnCreateView($viewModel));
        }
      ));
    }

    return $buttons;
  }
}

class TnReiterButtons extends ReiterButtons
{
  public function getButtonsArray($pDatensaetzeVorhanden = true)
  {
    $buttons = array();
    $toolId = $this->response->toolId;
    $belegId = isset($this->request->belegId) ? $this->request->belegId : '';
    $belIdUrlPart = ($belegId !== '') ? '&belid=' . $belegId : '';

    $toolSettings = \ToolSettingsAPI::getToolSettings(\ToolsAPI::TOOL_TN);
    $user = \SessionOperations::getCurrentWebToolsUser();
    $belegungshelper = new \Kufer\Web\KuferTools\Utils\DatamodulHelper\Belegungen\TeilnehmerBelegungen($toolSettings, $user->getTnrIdentifier());
    $belegung = $belegungshelper->getDatamodulById($belegId);

    
    if ($this->useCase->isRechtAllowed('335.0.7')) {
      if (isset($belegung->kurs->folgekurs) && $belegung->kurs->folgekurs != '') {
        $knrsAusToolTnAnmeld = \ToolTnAnmeldung::getKursnummern();
        
        
        
        if (in_array($belegung->kurs->folgekurs, $knrsAusToolTnAnmeld)) {
          $dbwKurse = new \DBWorkKurseWTINetAktiv();
          $folgeKurs = $dbwKurse->getKurs($belegung->kurs->folgekurs);
          $vorTageAusblenden = $toolSettings->weitermeldenAusblendenVorBegFolgekurs;
          $vorTageEinblenden = $toolSettings->weitermeldenEinblendenVorBegFolgekurs;
          $anzTageVorBeginn = \DateTimeOperations::getAnzTage(\DateTimeOperations::getDateNow(), $folgeKurs->beginn_dat) - 1;

          
          $weitermelden = false;
          
          if (!isset($vorTageAusblenden) || $vorTageAusblenden == '') {
            $vorTageAusblenden = 0;
          }

          
          if (!isset($vorTageEinblenden) || $vorTageEinblenden == '') {
            if ($anzTageVorBeginn > $vorTageAusblenden) {
              $weitermelden = true;
            }
          } 
          else { 
            if ($anzTageVorBeginn <= $vorTageEinblenden && $anzTageVorBeginn > $vorTageAusblenden) {
              $weitermelden = true;
            }
          } 
          if ($weitermelden) {
            $buttons[] = array($this->buttonFactory->getWeitermeldenButton(
              'index.php?tool_id=' . \ToolsAPI::TOOL_ANMELDUNGBUCHEN_TN . '&action=kursdetails&fromOtherTool=1&knr=' . $belegung->kurs->folgekurs
            ));
          }
        } 
      }
    } 

    if ($this->useCase->isRechtAllowed('335.0.1')) {
      $toolSettings = \ToolSettingsAPI::getToolSettings($this->useCase->getToolId());
      $stornoHinderungsGrund = StornoUtils::isTeilnehmerStornoForKursAllowed($toolSettings, $belegung->teilnehmer, $belegung->kurs, $belegung);
      if ($stornoHinderungsGrund !== StornoUtils::STORNO_ALLOWED_NO_ERROR && $stornoHinderungsGrund !== StornoUtils::STORNO_ALLOWED_BEREITS_STORNIERT) {
        $asText = StornoUtils::stornoNotAllowedToText($toolSettings, $belegung, $stornoHinderungsGrund);
        $buttons[] = array($this->buttonFactory->getAbmeldenButton('', 'Abmeldung nicht möglich', 'abmeld_firmaanmel', $asText, true));
      } elseif ($stornoHinderungsGrund !== StornoUtils::STORNO_ALLOWED_BEREITS_STORNIERT) {
        $title = $beschriftung = 'Abmelden';
        if (\DBWorkBASysSettings::isBlak()) {
          $title = 'Stornierung abschicken';
          $beschriftung = 'Stornieren';
        } elseif (\DBWorkBASysSettings::isUnnaForum()) {
          $title = 'Kurs stornieren';
          $beschriftung = 'Kurs stornieren';
        }
        
        
        if (!\DBWorkBASysSettings::isBremenLIS() || !\DateTimeOperations::isDateAfter(\DateTimeOperations::getDateNow(), $belegung->kurs->ende_dat)) {
          $buttons[] = array($this->buttonFactory->getAbmeldenButton(
            'index.php?tool_id=' . $toolId . '&action=abmeldung&belid=' . $belegId,
            $beschriftung,
            '',
            $title
          ));
        }
      }
    }
    if ($this->useCase->isRechtAllowed('335.0.3')) {
      $buttons[] = array($this->buttonFactory->getFeedbackButton4Reiter(
        'index.php?tool_id=' . $toolId . '&action=showFeedbackFormular&belid=' . $belegId
      ));
    }
    if ($this->useCase->isRechtAllowed('335.0.9')) {
      $buttons[] = array($this->buttonFactory->getTermineIcsButton('Termine nach Outlook', 'tn_kursdetailsterminenachoutlooklink'));
    }
    if ($this->useCase->isRechtAllowed('335.0.4')) {
      $buttons[] = array($this->buttonFactory->getInfoAnDozButton(
        'index.php?tool_id=' . $toolId . '&action=infoandoz&belid=' . $belegId
      ));
    }
    if ($this->useCase->isRechtAllowed('335.0.5')) {
      $buttons[] = array($this->buttonFactory->getKurszettelButton(
        'index.php?tool_id=' . $toolId . '&action=printDruckListen&liste=TNDetailsKursStammBlatt&nr=' . $this->request->belegId
      ));
    }
    
    if ($this->useCase->isRechtAllowed('335.0.8')) {
      $feedbackLink = 'index.php?tool_id=' . $toolId . '&action=showFeedbackBogen&knr=' . $this->response->kurs->id . $belIdUrlPart;
      $buttons[] = array($this->buttonFactory->getFeedbackButton4Reiter($feedbackLink, 'Feedbackbogen', 'Feedbackbogen'));
    }

    if (\DBWorkBASysSettings::isBlak() && $belegung->kurs->isBGLU()) {
      $buttons[] = array($this->buttonFactory->getBGLUNachweisNachreichenButton('BGLU-Nachweis nachreichen', 'nachweisLinkUpload_blak'));
    }

    return $buttons;
  }
}

class RaumDetailsButtons extends ReiterButtons
{
  public function getButtonsArray($pDatensaetzeVorhanden = true)
  {
    $buttons = array();
    if ($this->useCase->isRechtAllowed($this->response->toolSectionId . '.0.1')) {
      $grafikLink = 'index.php?tool_id=' . $this->response->toolId . '&action=raumGrafik&rnr=' . $this->response->kursort->id;
      $buttons[] = array($this->buttonFactory->getGraphischeUebersichtButton($grafikLink));
    }
    if ($this->useCase->isRechtAllowed($this->response->toolSectionId . '.0.2')) {
      $buttons[] = array($this->buttonFactory->getHausmeisterPdfListenButton('Hausmeisterlisten'));
    }
    if ($this->useCase->isRechtAllowed($this->response->toolSectionId . '.0.3')) {
      $link = 'index.php?tool_id=' . $this->response->toolId . '&action=druckQuartalsUebersicht&rnr=' . $this->response->kursort->id;
      $buttons[] = array($this->buttonFactory->getQuartalsUebersichtButton($link));
    }

    return $buttons;
  }
}

class HmReiterButtons extends ReiterButtons
{
  public function getButtonsArray($pDatensaetzeVorhanden = true)
  {
    $buttons = array();
    $toolId = $this->response->toolId;
    $TNButtonRecht = $this->response->showTeilnehmer && $this->useCase->isRechtAllowed('341.0.1');
    if ($TNButtonRecht) {
      $buttons[] = array($this->buttonFactory->getTeilnehmerPdfListenButton(
        'Teilnehmer',
        'tnListenDruckButton_Kursdetails',
        'index.php?tool_id=' . $toolId . '&action=showTnListen&knr=' . $this->response->kurs->id
      ));
    }

    return $buttons;
  }
}

class MaEMailsReiterButtons extends ReiterButtons
{
  public function getButtonsArray($pDatensaetzeVorhanden = true)
  {
    return array();
  }
}

class MaDozentenReiterButtons extends ReiterButtons
{
  public function getButtonsArray($pDatensaetzeVorhanden = true)
  {
    $addDozentRecht = $this->useCase->isRechtAllowed('245.0.2') && \SessionOperations::isNichtReplikat();
    $delDozentRecht = $this->useCase->isRechtAllowed('245.0.5') && \SessionOperations::isNichtReplikat() && $pDatensaetzeVorhanden;
    $emailRecht = $this->useCase->isRechtAllowed('245.0.1') && $pDatensaetzeVorhanden;
    $smsRecht = $this->useCase->isRechtAllowed('245.0.5') && $pDatensaetzeVorhanden;
    $buttons = array();

    if ($addDozentRecht) {
      $buttons[] = array($this->buttonFactory->getAddButton('Dozent hinzufügen', 'dozentAddDT', '', 'Dozent hinzufügen'));
    }
    if ($delDozentRecht) {
      $buttons[] = array($this->buttonFactory->getDeleteButton('Dozent entfernen', 'dozentDelete', 'Dozent entfernen'));
    }

    if ($emailRecht || $smsRecht) {
      $buttons[] = array($this->buttonFactory->getMarkierenButton('Alle markieren', 'alleMarkieren_reiter'));
      $buttons[] = array($this->buttonFactory->getMarkierungenEntfernenButton());
    }
    if ($emailRecht) {
      $buttons[] = array($this->buttonFactory->getEnvelopeSymbolButton(
        'E-Mail',
        'submitDozSammelEMail',
        '',
        'Sammel-E-Mail an alle markierten Dozenten versenden'
      ));
    }
    if ($smsRecht) {
      $buttons[] = array($this->buttonFactory->getEnvelopeSymbolButton(
        'SMS',
        'submitDozSammelSms',
        '',
        'Sammel-SMS an alle markierten Dozenten versenden'
      ));
    }

    return $buttons;
  }
}

class VaDozentenReiterButtons extends ReiterButtons
{
  public function getButtonsArray($pDatensaetzeVorhanden = true)
  {
    $addDozentRecht = $this->useCase->isRechtAllowed('626.0.2') && \SessionOperations::isNichtReplikat();
    $delDozentRecht = $this->useCase->isRechtAllowed('626.0.5') && \SessionOperations::isNichtReplikat() && $pDatensaetzeVorhanden;

    $emailRecht = $this->useCase->isRechtAllowed('624.0.1') && $pDatensaetzeVorhanden;
    $smsRecht = $this->useCase->isRechtAllowed('624.0.5') && $pDatensaetzeVorhanden;
    $buttons = array();

    if ($delDozentRecht || $emailRecht || $smsRecht) {
      $buttons[] = array($this->buttonFactory->getMarkierenButton('Alle markieren', 'alleMarkieren_reiter'));
      $buttons[] = array($this->buttonFactory->getMarkierungenEntfernenButton());
    }
    if ($addDozentRecht) {
      $buttons[] = array($this->buttonFactory->getAddButton('Dozent hinzufügen', 'dozentAddDT', '', 'Dozent hinzufügen'));
    }
    if ($delDozentRecht) {
      $buttons[] = array($this->buttonFactory->getDeleteButton('Dozent entfernen', 'dozentDelete', 'Dozent entfernen'));
    }
    if ($emailRecht) {
      $buttons[] = array($this->buttonFactory->getEnvelopeSymbolButton(
        'E-Mail',
        'submitDozSammelEMail',
        '',
        'Sammel-E-Mail an alle markierten Dozenten versenden'
      ));
    }
    if ($smsRecht) {
      $buttons[] = array($this->buttonFactory->getEnvelopeSymbolButton(
        'SMS',
        'submitDozSammelSms',
        '',
        'Sammel-SMS an alle markierten Dozenten versenden'
      ));
    }

    return $buttons;
  }
}

class MaHonorarReiterButtons extends ReiterButtons
{
  
  public function getButtonsArray($pDatensaetzeVorhanden = true)
  {
    
    $buttons = array();
    
    $addDozentRecht = $this->useCase->isRechtAllowed('29.0.2') && \SessionOperations::isNichtReplikat();
    
    $delDozentRecht = $this->useCase->isRechtAllowed('29.0.5') && \SessionOperations::isNichtReplikat() && $pDatensaetzeVorhanden;
    
    
    
    
    $honorarRecht = $this->useCase->isRechtAllowed('29.0.4') && \SessionOperations::isNichtReplikat() && $pDatensaetzeVorhanden;
    $vertragRecht = $this->useCase->isRechtAllowed('29.0.7') && \SessionOperations::isNichtReplikat() && $pDatensaetzeVorhanden;
    $showVertragsformularButton = \DBWorkBASysSettings::isDonnersbergkreisVhs() && $pDatensaetzeVorhanden;

    if ($delDozentRecht || $vertragRecht || $honorarRecht || $showVertragsformularButton) {
      $buttons[] = array($this->buttonFactory->getMarkierenButton('Alle markieren', 'alleMarkieren_reiter'));
      $buttons[] = array($this->buttonFactory->getMarkierungenEntfernenButton());
    }
    if ($addDozentRecht) {
      $buttons[] = array($this->buttonFactory->getAddButton('Dozent hinzufügen', 'dozentAddDT', '', 'Dozent hinzufügen'));
    }
    if ($delDozentRecht) {
      $buttons[] = array($this->buttonFactory->getDeleteButton('Dozent entfernen', 'dozentDelete', 'Dozent entfernen'));
    }
    if ($honorarRecht) {
      $buttons[] = array($this->buttonFactory->getDozentenHonorarButton());
    }
    if ($vertragRecht) {
      $buttons[] = array($this->buttonFactory->getDozentenHonorarButton('Vertrag', 'vertragDozent', 'Vertragsdaten'));
    }
    if ($showVertragsformularButton) {
      $buttons[] = array($this->buttonFactory->getVertragsformularButton('Vertragsformular', 'vertragsformularButton kursdetails'));
    }

    if ($this->showVertragsDruckButton()) {
      $buttons[] = array($this->buttonFactory->getVertragsDruckButton('Vertrag drucken', 'vertragDruck', 'Vertrag drucken'));
    }

    return $buttons;
  }

  private function showVertragsDruckButton()
  {
    if (\DBWorkBASysSettings::isHammelBurgKissingen()) {
      foreach ($this->response->vertragsDruckAllowedAry as $vertragsDruckAllowed) {
        
        if ($vertragsDruckAllowed) {
          return true;
        }
      }
      
      return false;
    }

    return false;
  }
}

class VaHonorarReiterButtons extends ReiterButtons
{
  
  public function getButtonsArray($pDatensaetzeVorhanden = true)
  {
    $buttons = array();
    
    $addDozentRecht = $this->useCase->isRechtAllowed('626.0.2') && \SessionOperations::isNichtReplikat();
    
    $delDozentRecht = $this->useCase->isRechtAllowed('626.0.5') && \SessionOperations::isNichtReplikat() && $pDatensaetzeVorhanden;
    
    
    
    
    $honorarRecht = $this->useCase->isRechtAllowed('626.0.4') && \SessionOperations::isNichtReplikat() && $pDatensaetzeVorhanden;
    $vertragRecht = $this->useCase->isRechtAllowed('626.0.7') && \SessionOperations::isNichtReplikat() && $pDatensaetzeVorhanden;

    if ($delDozentRecht || $vertragRecht || $honorarRecht) {
      $buttons[] = array($this->buttonFactory->getMarkierenButton('Alle markieren', 'alleMarkieren_reiter'));
      $buttons[] = array($this->buttonFactory->getMarkierungenEntfernenButton());
    }
    if ($addDozentRecht) {
      $buttons[] = array($this->buttonFactory->getAddButton('Dozent hinzufügen', 'dozentAddDT', '', 'Dozent hinzufügen'));
    }
    if ($delDozentRecht) {
      $buttons[] = array($this->buttonFactory->getDeleteButton('Dozent entfernen', 'dozentDelete', 'Dozent entfernen'));
    }
    if ($honorarRecht) {
      $buttons[] = array($this->buttonFactory->getDozentenHonorarButton());
    }
    if ($vertragRecht) {
      $buttons[] = array($this->buttonFactory->getDozentenHonorarButton('Vertrag', 'vertragDozent', 'Vertragsdaten'));
    }

    return $buttons;
  }
}



class DozTeilnehmerReiterButtons extends ReiterButtons
{
  public function getButtonsArray($pDatensaetzeVorhanden = true)
  {
    $buttons = array();
    $bescheinigungRecht = $this->useCase->isRechtAllowed('3.0.2');
    $emailRecht = $this->useCase->isRechtAllowed('3.0.3');
    $smsRecht = $this->useCase->isRechtAllowed('3.0.4');
    $terminKalenderRecht = $this->useCase->isRechtAllowed('3.0.5');
    $toolSettings = \ToolSettingsAPI::getToolSettings($this->useCase->getToolId());
    $toolAnwSettings = \ToolSettingsAPI::getToolSettings(18);
    $VerhaltensListeButtonRecht = $this->useCase->isRechtAllowed('3.0.7') && $toolAnwSettings->useVerhaltenseintraege;
    $belegungBearbeitenRecht = $this->useCase->isRechtAllowed('3.0.8');
    $belegungenBearbeitenRecht = $this->useCase->isRechtAllowed('3.0.10');

    if ($bescheinigungRecht || $emailRecht || $smsRecht || $terminKalenderRecht || $VerhaltensListeButtonRecht) {
      $buttons[] = array($this->buttonFactory->getMarkierenButton('Alle markieren', 'alleMarkieren_reiter'));
      $buttons[] = array($this->buttonFactory->getMarkierungenEntfernenButton());
    }

    if ($bescheinigungRecht) {
      $buttons[] = array($this->buttonFactory->getPrintSymbolButton(
        'Bescheinigung',
        'submitBescheinigung',
        '',
        'Teilnahme Bescheinigung von allen markierten Teilnehmern ausdrucken'
      ));
    }
    if ($emailRecht) {
      
      $buttons[] = array($this->buttonFactory->getEnvelopeSymbolButton(
        'E-Mail',
        'submitSammelEMail',
        '',
        'Sammel-E-Mail an alle markierten Teilnehmer verschicken'
      ));
    }
    if ($smsRecht) {
      
      $buttons[] = array($this->buttonFactory->getEnvelopeSymbolButton(
        'SMS',
        'submitSammelSms',
        '',
        'Sammel-SMS an alle markierten Teilnehmer verschicken'
      ));
    }
    if ($terminKalenderRecht) {
      $buttons[] = array($this->buttonFactory->getCalendarSymbolButton(
        'Terminkalender für Teilnehmer',
        'terminKalenderTn',
        '',
        'Terminkalender für alle markierten Teilnehmer anzeigen'
      ));
    }

    if ($VerhaltensListeButtonRecht) {
      $buttons[] = array($this->buttonFactory->getTeilnehmerPdfListenButton('Verhaltenseinträge', 'verhaltensListe'));
    }
    if ($belegungBearbeitenRecht) {
      $buttonText = 'Belegung bearbeiten';
      if (\DBWorkBASysSettings::isBadMergentheimFabi()) {
        $buttonText = 'Teilnehmer benoten';
      }
      $buttons[] = array($this->buttonFactory->getPersonBearbeitenButton($buttonText, 'belegungBearbeiten', $buttonText, 'pencil-square'));
    }
    if ($belegungenBearbeitenRecht) {
      $buttons[] = array($this->buttonFactory->getBelegungenBearbeitenButton($this->useCase->getToolId(), $this->response->kurs->id, $toolSettings->reiterTeilnehmerButtonBelegungenBearbeiten));
    }
    if ($this->useCase->isRechtAllowed('3.0.9')) {
      $buttons[] = array($this->buttonFactory->getExportTableKursButton($this->useCase->getToolId(), 'belegungen', $this->response->kurs->id, $toolSettings->reiterTeilnehmerButtonExportName));
    }

    $buttons[] = array($this->buttonFactory->getFilterButton('Filter', 'filterTn', 'Filter öffnen'));

    return $buttons;
  }
}

class DozEMailsReiterButtons extends ReiterButtons
{
  public function getButtonsArray($pDatensaetzeVorhanden = true)
  {
    return array();
  }
}

class HmTeilnehmerReiterButtons extends ReiterButtons
{
  public function getButtonsArray($pDatensaetzeVorhanden = true)
  {
    $buttons = array();
    $emailRecht = $this->useCase->isRechtAllowed('134.0.2');
    $emailNachOutlookRecht = $this->useCase->isRechtAllowed('134.0.1');

    if ($emailRecht || $emailNachOutlookRecht) {
      $buttons[] = array($this->buttonFactory->getMarkierenButton('Alle markieren', 'alleMarkieren_reiter'));
      $buttons[] = array($this->buttonFactory->getMarkierungenEntfernenButton());
    }
    if ($emailRecht) {
      $buttons[] = array($this->buttonFactory->getEnvelopeSymbolButton(
        'E-Mail',
        'submitSammelEMail',
        '',
        'Sammel-E-Mail an alle markierten Teilnehmer verschicken'
      ));
    }
    if ($emailNachOutlookRecht) {
      $buttons[] = array($this->buttonFactory->getEnvelopeSymbolButton(
        'E-Mail nach Outlook',
        'submitSammelEMail',
        '',
        'E-Mail an Outlook senden'
      ));
    }
    $buttons[] = array($this->buttonFactory->getFilterButton('Filter', 'filterTn', 'Filter öffnen'));

    return $buttons;
  }
}

class MaTeilnehmerReiterButtons extends ReiterButtons
{
  public function getButtonsArray($pDatensaetzeVorhanden = true)
  {
    $buttons = array();
    $toolSettings = \ToolSettingsAPI::getToolSettings(\ToolsAPI::TOOL_KURSPLANUNG_MA);
    $bescheinigungRecht = $this->useCase->isRechtAllowed('242.0.2');
    $emailRecht = $this->useCase->isRechtAllowed('242.0.3');
    $smsRecht = $this->useCase->isRechtAllowed('242.0.4');
    $anmeldeBestaetigungRecht = $this->useCase->isRechtAllowed('242.0.14') && \DBWorkBASysSettings::isHammelBurgKissingen();
    $dbw = new \DBWorkTools();
    if (!empty($this->response->belegungen)) {
      if ($this->useCase->isRechtAllowed('242.0.11') && \SessionOperations::isCurrentUserMitveranstalter()) {
        $buttons[] = array($this->buttonFactory->getPencilSquareButton('', 'Anmeldung Akzeptieren', 'Anmeldung Akzeptieren', 'submitAnmAkzeptieren'));
      }
      if ($this->useCase->isRechtAllowed('242.0.12') && \SessionOperations::isCurrentUserMitveranstalter()) {
        $buttons[] = array($this->buttonFactory->getPencilSquareButton('', 'Anmeldung Ablehnen', 'Anmeldung Ablehnen', 'submitAnmAblehnen'));
      }
      if ($this->useCase->isRechtAllowed('242.0.15') && \SessionOperations::isCurrentUserMitveranstalter()) {
        $buttons[] = array($this->buttonFactory->getPencilSquareButton('', 'Anmeldung auf Warteliste', 'Anmeldung auf Warteliste', 'submitAnmWarteliste'));
      }
      if ($bescheinigungRecht || $emailRecht || $smsRecht || ($anmeldeBestaetigungRecht && \DBWorkBASysSettings::isHammelBurgKissingen())) {
        $buttons[] = array($this->buttonFactory->getMarkierenButton('Alle markieren', 'alleMarkieren_reiter'));
        $buttons[] = array($this->buttonFactory->getMarkierungenEntfernenButton());
      }
      if ($bescheinigungRecht) {
        $buttons[] = array($this->buttonFactory->getPrintSymbolButton(
          'Bescheinigung',
          'submitBescheinigung',
          '',
          'Teilnahme Bescheinigung von allen markierten Teilnehmern ausdrucken'
        ));
      }

      if ($emailRecht) {
        
        $buttons[] = array($this->buttonFactory->getEnvelopeSymbolButton(
          'E-Mail',
          'submitSammelEMail',
          '',
          'Sammel-E-Mail an alle markierten Teilnehmer verschicken'
        ));
      }
      if ($smsRecht) {
        
        $buttons[] = array($this->buttonFactory->getEnvelopeSymbolButton(
          'SMS',
          'submitSammelSms',
          '',
          'Sammel-SMS an alle markierten Teilnehmer verschicken'
        ));
      }
      
      if ($this->useCase->isRechtAllowed('242.0.7') && $dbw->isToolAllowed(\SessionOperations::getUserIdentifier(), \ToolsAPI::TOOL_ANMELDUNGBUCHEN_MA)) {
        $buttons[] = array($this->buttonFactory->getVerlinkungAnmeldenButton('index.php?tool_id=' . \ToolsAPI::TOOL_ANMELDUNGBUCHEN_MA . '&knr=' . $this->response->kurs->id));
      }
      
      
      if ($this->useCase->isRechtAllowed('242.0.5') && $dbw->isToolAllowed(\SessionOperations::getUserIdentifier(), \ToolsAPI::TOOL_ANMELDUNGBUCHEN_MA)) {
        $kursHelper = \Kufer\Web\KuferTools\Utils\DatamodulHelper\Kurse\KursHelperFactory::getKursHelperByToolID(\ToolsAPI::TOOL_KURSPLANUNG_MA, $toolSettings);
        $alleKursnummernDesMitarbeiters = $kursHelper->getIdsOhneFilter();
        $einstellungKursauswahlBeimWeitermelden = $toolSettings->weitermeldenKursAuswaehlen;

        
        if ($einstellungKursauswahlBeimWeitermelden
                || ($this->response->kurs->folgekurs != '' && in_array($this->response->kurs->folgekurs, $alleKursnummernDesMitarbeiters))) {
          $action = !$einstellungKursauswahlBeimWeitermelden ? 'teilnehmerWeitermelden_kursauswahl' : 'teilnehmerWeitermelden';
          $buttons[] = array($this->buttonFactory->getWeitermeldenButton('', 'Weitermelden', $action, 'Teilnehmer zum Folgekurs weitermelden'));
        }
      }

      if ($this->useCase->isRechtAllowed('242.0.6') && $dbw->isToolAllowed(\SessionOperations::getUserIdentifier(), \ToolsAPI::TOOL_ANMELDUNGBUCHEN_MA)) {
        $buttons[] = array($this->buttonFactory->getUmmeldenButton());
      }

      if ($this->useCase->isRechtAllowed('242.0.8')) {
        $buttons[] = array($this->buttonFactory->getAbmeldenButton('', 'Abmelden', 'teilnehmerStorno', 'Teilnehmer stornieren'));
      }

      if ($this->useCase->isRechtAllowed('242.0.9')) {
        $buttons[] = array($this->buttonFactory->getPersonBearbeitenButton('Belegung bearbeiten', 'belegungBearbeiten', 'Belegungsdaten bearbeiten', 'pencil-square'));
      }
      if ($this->useCase->isRechtAllowed('242.0.17')) {
        $buttons[] = array($this->buttonFactory->getBelegungenBearbeitenButton($this->useCase->getToolId(), $this->response->kurs->id, $toolSettings->reiterTeilnehmerButtonBelegungenBearbeiten));
      }
      
      
      if ($this->useCase->isRechtAllowed('242.0.10') && (!\SessionOperations::isReplikat() || \SessionOperations::isDmzBetrieb())) {
        $buttons[] = array($this->buttonFactory->getNachlassButton());
      }

      if ($this->useCase->isRechtAllowed('242.0.13') && \DBWorkBASysSettings::isHammelBurgKissingen()) {
        $buttons[] = array($this->buttonFactory->getBarzahlungButton('', 'Barzahlung', 'barZahlung', 'Barzahlung durchführen'));
      }

      
      if ($anmeldeBestaetigungRecht) {
        $buttons[] = array($this->buttonFactory->getPrintSymbolButton(
          'Anmeldebestätigung',
          'submitAnmeldeBestaetigung',
          '',
          'Anmeldebestätigung für alle markierten Teilnehmern ausdrucken'
        ));
      }
    } 
    elseif (empty($this->response->belegungen) && $this->useCase->isRechtAllowed('242.0.7')) {
      
      if ($dbw->isToolAllowed(\SessionOperations::getUserIdentifier(), \ToolsAPI::TOOL_ANMELDUNGBUCHEN_MA)) {
        $buttons[] = array($this->buttonFactory->getVerlinkungAnmeldenButton('index.php?tool_id=' . \ToolsAPI::TOOL_ANMELDUNGBUCHEN_MA . '&knr=' . $this->response->kurs->id));
      }
    }

    if ($this->useCase->isRechtAllowed('242.0.16')) {
      $buttons[] = array($this->buttonFactory->getExportTableKursButton($this->useCase->getToolId(), 'belegungen', $this->response->kurs->id, $toolSettings->reiterTeilnehmerButtonExportName));
    }

    $buttons[] = array($this->buttonFactory->getFilterButton('Filter', 'filterTn', 'Filter öffnen'));

    return $buttons;
  }
}

class VaTeilnehmerReiterButtons extends ReiterButtons
{
  public function getButtonsArray($pDatensaetzeVorhanden = true)
  {
    $buttons = array();
    $toolSettings = \ToolSettingsAPI::getToolSettings(\ToolsAPI::TOOL_KURSUEBERSICHT_VA);
    $bescheinigungRecht = $this->useCase->isRechtAllowed('630.0.2');
    $emailRecht = $this->useCase->isRechtAllowed('630.0.3');
    $smsRecht = $this->useCase->isRechtAllowed('630.0.4');
    $dbw = new \DBWorkTools();
    if (!empty($this->response->belegungen)) {
      if ($bescheinigungRecht || $emailRecht || $smsRecht) {
        $buttons[] = array($this->buttonFactory->getMarkierenButton('Alle markieren', 'alleMarkieren_reiter'));
        $buttons[] = array($this->buttonFactory->getMarkierungenEntfernenButton());
      }
      if ($bescheinigungRecht) {
        $buttons[] = array($this->buttonFactory->getPrintSymbolButton(
          'Bescheinigung',
          'submitBescheinigung',
          '',
          'Teilnahme Bescheinigung von allen markierten Teilnehmern ausdrucken'
        ));
      }
      if ($emailRecht) {
        
        $buttons[] = array($this->buttonFactory->getEnvelopeSymbolButton(
          'E-Mail',
          'submitSammelEMail',
          '',
          'Sammel-E-Mail an alle markierten Teilnehmer verschicken'
        ));
      }
      if ($smsRecht) {
        
        $buttons[] = array($this->buttonFactory->getEnvelopeSymbolButton(
          'SMS',
          'submitSammelSms',
          '',
          'Sammel-SMS an alle markierten Teilnehmer verschicken'
        ));
      }
      
      if ($this->useCase->isRechtAllowed('630.0.7') && $dbw->isToolAllowed(\SessionOperations::getUserIdentifier(), \ToolsAPI::TOOL_ANMELDUNGBUCHEN_VA)) {
        $buttons[] = array($this->buttonFactory->getVerlinkungAnmeldenButton('index.php?tool_id=' . \ToolsAPI::TOOL_ANMELDUNGBUCHEN_VA . '&knr=' . $this->response->kurs->id));
      }
      
      
      if ($this->useCase->isRechtAllowed('630.0.5') && $dbw->isToolAllowed(\SessionOperations::getUserIdentifier(), \ToolsAPI::TOOL_ANMELDUNGBUCHEN_VA)) {
        $kursHelper = \Kufer\Web\KuferTools\Utils\DatamodulHelper\Kurse\KursHelperFactory::getKursHelperByToolID(\ToolsAPI::TOOL_KURSUEBERSICHT_VA, $toolSettings);
        $alleKursnummernDesMitarbeiters = $kursHelper->getIdsOhneFilter();
        $einstellungKursauswahlBeimWeitermelden = $toolSettings->weitermeldenKursAuswaehlen;

        
        if ($einstellungKursauswahlBeimWeitermelden
                || ($this->response->kurs->folgekurs != '' && in_array($this->response->kurs->folgekurs, $alleKursnummernDesMitarbeiters))) {
          $action = !$einstellungKursauswahlBeimWeitermelden ? 'teilnehmerWeitermelden_kursauswahl' : 'teilnehmerWeitermelden';
          $buttons[] = array($this->buttonFactory->getWeitermeldenButton('', 'Weitermelden', $action, 'Teilnehmer zum Folgekurs weitermelden'));
        }
      }

      if ($this->useCase->isRechtAllowed('630.0.6') && $dbw->isToolAllowed(\SessionOperations::getUserIdentifier(), \ToolsAPI::TOOL_KURSUEBERSICHT_VA)) {
        $buttons[] = array($this->buttonFactory->getUmmeldenButton());
      }

      if ($this->useCase->isRechtAllowed('630.0.8')) {
        $buttons[] = array($this->buttonFactory->getAbmeldenButton('', 'Abmelden', 'teilnehmerStorno', 'Teilnehmer stornieren'));
      }

      if ($this->useCase->isRechtAllowed('630.0.9')) {
        $buttons[] = array($this->buttonFactory->getPersonBearbeitenButton('Belegung bearbeiten', 'belegungBearbeiten', 'Belegungsdaten bearbeiten', 'pencil-square'));
      }
      if ($this->useCase->isRechtAllowed('630.0.12')) {
        $buttons[] = array($this->buttonFactory->getBelegungenBearbeitenButton($this->useCase->getToolId(), $this->response->kurs->id, $toolSettings->reiterTeilnehmerButtonBelegungenBearbeiten));
      }
      
      
      if ($this->useCase->isRechtAllowed('630.0.10') && (!\SessionOperations::isReplikat() || \SessionOperations::isDmzBetrieb())) {
        $buttons[] = array($this->buttonFactory->getNachlassButton());
      }
    } 
    elseif (empty($this->response->belegungen) && $this->useCase->isRechtAllowed('630.0.7')) {
      
      if ($dbw->isToolAllowed(\SessionOperations::getUserIdentifier(), \ToolsAPI::TOOL_ANMELDUNGBUCHEN_VA)) {
        $buttons[] = array($this->buttonFactory->getVerlinkungAnmeldenButton('index.php?tool_id=' . \ToolsAPI::TOOL_ANMELDUNGBUCHEN_VA . '&knr=' . $this->response->kurs->id));
      }
    }

    if ($this->useCase->isRechtAllowed('630.0.11')) {
      $buttons[] = array($this->buttonFactory->getExportTableKursButton($this->useCase->getToolId(), 'belegungen', $this->response->kurs->id, $toolSettings->reiterTeilnehmerButtonExportName));
    }

    $buttons[] = array($this->buttonFactory->getFilterButton('Filter', 'filterTn', 'Filter öffnen'));

    return $buttons;
  }
}
class FaTeilnehmerReiterButtons extends ReiterButtons
{
  public function getButtonsArray($pDatensaetzeVorhanden = true)
  {
    $buttons = array();
    $emailRecht = $this->useCase->isRechtAllowed('771.0.1');
    $this->useCase->isRechtAllowed('771.0.2');
    if (!empty($this->response->belegungen)) {
      if ($emailRecht) {
        $buttons[] = array($this->buttonFactory->getMarkierenButton('Alle markieren', 'alleMarkieren_reiter'));
        $buttons[] = array($this->buttonFactory->getMarkierungenEntfernenButton());
      }

      if ($emailRecht) {
        
        $buttons[] = array($this->buttonFactory->getEnvelopeSymbolButton(
          'E-Mail',
          'submitSammelEMail',
          '',
          'Sammel-E-Mail an alle markierten Teilnehmer verschicken'
        ));
      }
    } elseif (empty($this->response->belegungen)) {
    }
    $buttons[] = array($this->buttonFactory->getFilterButton('Filter', 'filterTn', 'Filter öffnen'));

    return $buttons;
  }
}

class DozTermineReiterButtons extends ReiterButtons
{
  
  protected $useCase;

  public function getButtonsArray($pDatensaetzeVorhanden = true)
  {
    $buttons = array();

    $toolId = $this->useCase->getToolId();

    if ($this->useCase->bieteMarkierenAn()) {
      $buttons[] = array($this->buttonFactory->getMarkierenButton('Alle markieren', 'alleMarkieren_reiter'));
      $buttons[] = array($this->buttonFactory->getMarkierungenEntfernenButton());
    }
    $buttons[] = array($this->buttonFactory->getFilterButton('Filter', 'filterTermine', 'Filter öffnen'));
    if ($this->useCase->zeigeTerminAbsagenButton()) {
      $buttons[] = array($this->buttonFactory->getTerminAbsagenButton());
    }
    if ($this->useCase->zeigeTerminAbrechnenButton()) {
      $buttons[] = array($this->buttonFactory->getTerminAbrechnenButton());
    }
    if ($this->useCase->zeigeTerminAbrechnenButtonNeussVhs()) {
      $buttons[] = array($this->buttonFactory->getTerminAbrechnenButton());
    }
    if ($this->useCase->zeigeTerminAbrechnenButtonMoenchengladBildungswerk()) {
      $buttons[] = array($this->buttonFactory->getTerminAbrechnenButton());
    }
    if ($this->useCase->zeigeTerminDirectAbrechnenButton()) {
      $buttons[] = array($this->buttonFactory->getTerminDirectAbrechnenButton());
    }
    if ($this->useCase->zeigeHonorarReiterButton()) {
      $link = 'tool_id=1&action=reiterHonorar&knr=' . $this->request->knr;
      $buttons[] = array($this->buttonFactory->getHonorarReiterButton($link, 'Vertragsfreigabe', 'Vertragsfreigabe'));
    }
    if ($this->useCase->zeigeTermineBearbeitenButton() && $pDatensaetzeVorhanden) {
      $buttons[] = array($this->buttonFactory->getTerminUpdateButton());
    }
    if ($this->useCase->zeigeTermineHinzufuegenButton()) {
      $buttons[] = array($this->buttonFactory->getAddButton(
        'Termin hinzufügen',
        '',
        'index.php?tool_id=' . $toolId . '&action=terminhinzufuegen&knr=' . $this->response->kurs->id
      ));
    }

    if ($this->useCase->zeigeTermineKopierenButton() && $pDatensaetzeVorhanden) {
      $buttons[] = array($this->buttonFactory->getTerminCopyButton());
    }

    if ($this->useCase->zeigeTermineLoeschenButton() && $pDatensaetzeVorhanden) {
      $buttons[] = array($this->buttonFactory->getDeleteButton());
    }

    return $buttons;
  }
}

class TnTermineReiterButtons extends ReiterButtons
{
  private $isTerminadministrator;

  
  public function __construct($useCase, $request, $response, $isTerminadministrator = false)
  {
    parent::__construct($useCase, $request, $response);
    $this->isTerminadministrator = $isTerminadministrator;
  }

  public function getButtonsArray($pDatensaetzeVorhanden = true)
  {
    $buttons = array();
    $toolSectionId = $this->useCase->getToolSectionId();

    $showTerminplan = $this->useCase->isRechtAllowed($toolSectionId . '.0.1');
    $showTerminStornierenButton = false;
    $showTerminVerlaengernButton = false;
    if (\DBWorkBASysSettings::isInlinguaMuenchen()) {
      if ($this->useCase->getToolId() == \ToolsAPI::TOOL_KURSUEBERSICHT_FA || ($this->useCase->getToolId() === \ToolsAPI::TOOL_TN && $this->isTerminadministrator)) {
        $showTerminStornierenButton = true;
        $showTerminVerlaengernButton = true;
      }
    }

    if ($showTerminplan || $showTerminStornierenButton) {
      $buttons[] = array($this->buttonFactory->getMarkierenButton('Alle markieren', 'alleMarkieren_reiter'));
      $buttons[] = array($this->buttonFactory->getMarkierungenEntfernenButton());
    }
    $buttons[] = array($this->buttonFactory->getFilterButton('Filter', 'filterTermine', 'Filter öffnen'));
    if ($showTerminplan) {
      $buttons[] = array($this->buttonFactory->getTerminPlanButton('Terminplan', 'terminplanlink4einzelneKurstageDetails'));
    }
    if ($showTerminStornierenButton) {
      $buttons[] = array($this->buttonFactory->getTerminStornierenButton());
    }
    if ($showTerminVerlaengernButton) {
      $buttons[] = array($this->buttonFactory->getTerminVerlaengernButton());
    }
    if (\DBWorkBASysSettings::isKoelnAksAkademieSteuern() && \Kufer\Web\KuferTools\Teilnehmer\KursUebersicht\Utils\KoelnAksUtils::isKursAllowed($this->response->kurs)) {
      $buttons[] = array($this->buttonFactory->getTeilnehmerTerminUmbuchenWunschButton());
    }

    return $buttons;
  }
}

class TnAnwesenheitenReiterButtons extends ReiterButtons
{
  public function getButtonsArray($pDatensaetzeVorhanden = true)
  {
    $buttons = array();
    $buttons[] = array($this->buttonFactory->getFilterButton('Filter', 'filterAnwesenheiten', 'Filter öffnen'));

    return $buttons;
  }
}

class HmTermineReiterButtons extends ReiterButtons
{
  public function getButtonsArray($pDatensaetzeVorhanden = true)
  {
    $showTerminAbsagen = $this->useCase->isRechtAllowed('140.0.21');
    $buttons = array();

    if ($showTerminAbsagen) {
      $buttons[] = array($this->buttonFactory->getMarkierenButton('Alle markieren', 'alleMarkieren_reiter'));
      $buttons[] = array($this->buttonFactory->getMarkierungenEntfernenButton());
    }
    $buttons[] = array($this->buttonFactory->getFilterButton('Filter', 'filterTermine', 'Filter öffnen'));
    if ($showTerminAbsagen) {
      $buttons[] = array($this->buttonFactory->getTerminAbsagenButton());
    }

    return $buttons;
  }
}

class MaReiterButtons extends ReiterButtons
{
  public function getButtonsArray($pDatensaetzeVorhanden = true)
  {
    $buttons = array();
    $toolId = $this->response->toolId;
    $toolSettings = \ToolSettingsAPI::getToolSettings($this->useCase->getToolId());
    $belegId = isset($this->request->belegId) ? $this->request->belegId : '';
    $TNButtonRecht = $this->response->showTeilnehmer && $this->useCase->isRechtAllowed('377.0.3');
    
    if ($TNButtonRecht) {
      $buttons[] = array($this->buttonFactory->getTeilnehmerPdfListenButton(
        'Teilnehmer',
        'tnListenDruckButton_Kursdetails',
        'index.php?tool_id=' . $toolId . '&action=showTnListen&knr=' . $this->response->kurs->id
      ));
    }

    if ($this->useCase->isRechtAllowed('377.0.11')) {
      $buttons[] = array($this->buttonFactory->getTNBestaetigungButton($toolId, $this->response->kurs->id, $toolSettings->kursdetailsButtonTnBestaetigung));
    }

    
    if ($this->useCase->isRechtAllowed('377.0.5')) {
      $buttons[] = array($this->buttonFactory->getAnwesenheitenButton4Reitern(
        'index.php?tool_id=' . $toolId . '&einstieg=1&action=anwesenheiten&knr=' . $this->response->kurs->id . '&belid=' . $belegId
      ));
    }
    if ($this->useCase->isRechtAllowed('377.0.10')) {
      $buttons[] = array($this->buttonFactory->getTermineIcsButton(
        'Termine',
        'icsButton',
        'index.php?tool_id=' . $toolId . '&action=icsAuswahl&kursnummern=' . $this->response->kurs->id . '&zeitbereich=ersterKurs'
      ));
    }
    if ($this->useCase->isRechtAllowed('377.0.6')) {
      $buttons[] = array($this->buttonFactory->getFeedbackButton4Reiter(
        'index.php?tool_id=' . $toolId . '&action=showFeedbackFormular&knr=' . $this->response->kurs->id
      ));
    }
    
    if ($this->useCase->isRechtAllowed('377.0.8')) {
      $buttons[] = array($this->buttonFactory->getKursBearbeitenButton($toolId, $this->response->kurs->id));
    }
    if ($this->useCase->isRechtAllowed('377.0.9') && !$this->response->kurs->ausfall) {
      $buttons[] = array($this->buttonFactory->getKursausfallSetzenButton($toolId, $this->response->kurs->id));
    }
    $dbWorkTools = new \DBWorkTools();
    if ($dbWorkTools->isToolAllowed(\SessionOperations::getUserIdentifier(), $this->getMAFeedbackauswertungToolId())) {
      $buttons[] = array($this->buttonFactory->getMaTNFeedbackauswertungButton4Reiter(
        $this->getMAFeedbackauswertungToolId(),
        $this->response->kurs->id,
        '?tool_id=' . $toolId . '&action=kursdetails&knr=' . urlencode($this->response->kurs->id),
        'Zurück zu Kurs ' . $this->response->kurs->getVarValue('nr_anzeige')
      ));
    }

    return $buttons;
  }

  private function getMAFeedbackauswertungToolId()
  {
    return \ToolsAPI::TOOL_FEEDBACK_AUSWERTUNGEN_MA;
  }
}

class VeranstalterReiterButtons extends ReiterButtons
{
  public function getButtonsArray($pDatensaetzeVorhanden = true)
  {
    $buttons = array();
    $toolId = $this->response->toolId;
    $toolSettings = \ToolSettingsAPI::getToolSettings($this->useCase->getToolId());
    $belegId = isset($this->request->belegId) ? $this->request->belegId : '';
    $TNButtonRecht = $this->response->showTeilnehmer && $this->useCase->isRechtAllowed('632.0.1');

    if ($TNButtonRecht) {
      $buttons[] = array($this->buttonFactory->getTeilnehmerPdfListenButton(
        'Teilnehmer',
        'tnListenDruckButton_Kursdetails',
        'index.php?tool_id=' . $toolId . '&action=showTnListen&knr=' . $this->response->kurs->id
      ));
    }

    if ($this->useCase->isRechtAllowed('632.0.7')) {
      $buttons[] = array($this->buttonFactory->getTNBestaetigungButton($toolId, $this->response->kurs->id, $toolSettings->kursdetailsButtonTnBestaetigung));
    }

    if ($this->useCase->isRechtAllowed('632.0.2')) {
      $buttons[] = array($this->buttonFactory->getAnwesenheitenButton4Reitern(
        'index.php?tool_id=' . $toolId . '&einstieg=1&action=anwesenheiten&knr=' . $this->response->kurs->id . '&belid=' . $belegId
      ));
    }
    if ($this->useCase->isRechtAllowed('632.0.6')) {
      $buttons[] = array($this->buttonFactory->getTermineIcsButton(
        'Termine',
        'icsButton',
        'index.php?tool_id=' . $toolId . '&action=icsAuswahl&kursnummern=' . $this->response->kurs->id . '&zeitbereich=ersterKurs'
      ));
    }
    if ($this->useCase->isRechtAllowed('632.0.3')) {
      $buttons[] = array($this->buttonFactory->getFeedbackButton4Reiter(
        'index.php?tool_id=' . $toolId . '&action=showFeedbackFormular&knr=' . $this->response->kurs->id
      ));
    }

    if (\DBWorkBASysSettings::isSalzburgBildungswerk()) {
      $buttons[] = array($this->buttonFactory->getNeuenKursPlanenButton(52, 'Als neue Veranstaltung planen', 'kursvorschlag', '&knr=' . $this->response->kurs->id));
    }

    
    if (!\DBWorkBASysSettings::isSalzburgBildungswerk() || $this->response->kurs->abschluss == 'B') {
      if ($this->useCase->isRechtAllowed('632.0.4')) {
        $beschriftung = 'Kurs bearbeiten';
        if (\DBWorkBASysSettings::isSalzburgBildungswerk()) {
          $beschriftung = 'Bericht';
        }
        $buttons[] = array($this->buttonFactory->getKursBearbeitenButton($toolId, $this->response->kurs->id, $beschriftung));
      }
      if ($this->useCase->isRechtAllowed('632.0.5') && !$this->response->kurs->ausfall) {
        $buttons[] = array($this->buttonFactory->getKursausfallSetzenButton($toolId, $this->response->kurs->id));
      }
    }
    $dbWorkTools = new \DBWorkTools();
    if ($dbWorkTools->isToolAllowed(\SessionOperations::getUserIdentifier(), $this->getMAFeedbackauswertungToolId())) {
      $buttons[] = array($this->buttonFactory->getMaTNFeedbackauswertungButton4Reiter(
        $this->getMAFeedbackauswertungToolId(),
        $this->response->kurs->id,
        '?tool_id=' . $toolId . '&action=kursdetails&knr=' . urlencode($this->response->kurs->id),
        'Zurück zu Kurs ' . $this->response->kurs->getVarValue('nr_anzeige')
      ));
    }

    return $buttons;
  }

  private function getMAFeedbackauswertungToolId()
  {
    return \ToolsAPI::TOOL_FEEDBACK_AUSWERTUNGEN_MA;
  }
}

class KurseAndererVeranstalterReiterButtons extends ReiterButtons
{
  public function getButtonsArray($pDatensaetzeVorhanden = true)
  {
    $buttons = array();
    if (\DBWorkBASysSettings::isSalzburgBildungswerk()) {
      $buttons[] = array($this->buttonFactory->getNeuenKursPlanenButton(52, 'neuen Kurs planen', 'kursvorschlag', '&knr=' . $this->response->kurs->id));
    }

    return $buttons;
  }
}

class MaTermineReiterButtons extends ReiterButtons
{
  public function getButtonsArray($pDatensaetzeVorhanden = true)
  {
    $buttons = array();
    $toolId = $this->response->toolId;
    
    

    $termineBearbeitenAllowed = $this->useCase->isRechtAllowed('28.0.1');
    $termineHinzufuegenAllowed = $this->useCase->isRechtAllowed('28.0.2');
    $termineLoeschenAllowed = $this->useCase->isRechtAllowed('28.0.3') && (!\SessionOperations::isReplikat() || \SessionOperations::isDmzBetrieb());
    $termineKopierenAllowed = $this->useCase->isRechtAllowed('28.0.5');
    $raumplanungAllowed = $this->useCase->isRechtAllowed('28.0.6');

    if (($termineBearbeitenAllowed || $termineHinzufuegenAllowed || $termineLoeschenAllowed || $termineKopierenAllowed) && $pDatensaetzeVorhanden) {
      $buttons[] = array($this->buttonFactory->getMarkierenButton('Alle markieren', 'alleMarkieren_reiter'));
      $buttons[] = array($this->buttonFactory->getMarkierungenEntfernenButton());
    }
    if ($termineBearbeitenAllowed && $pDatensaetzeVorhanden) {
      $buttons[] = array($this->buttonFactory->getTerminUpdateButton());
    }
    if ($termineHinzufuegenAllowed) {
      $buttons[] = array($this->buttonFactory->getAddButton(
        'Termin hinzufügen',
        '',
        'index.php?tool_id=' . $toolId . '&action=terminhinzufuegen&knr=' . $this->response->kurs->id
      ));
    }
    if ($termineKopierenAllowed && $pDatensaetzeVorhanden) {
      $buttons[] = array($this->buttonFactory->getTerminCopyButton());
    }

    if ($termineLoeschenAllowed && $pDatensaetzeVorhanden) {
      $buttons[] = array($this->buttonFactory->getDeleteButton());
    }

    if ($raumplanungAllowed) {
      $buttons[] = array($this->buttonFactory->getClipboardButton('Raumplanung', '', 'index.php?tool_id=' . $toolId . '&action=raumplanung&knr=' . $this->response->kurs->id, 'Raumplanung'));
    }

    $buttons[] = array($this->buttonFactory->getFilterButton('Filter', 'filterTermine', 'Filter öffnen'));

    return $buttons;
  }
}

class VaTermineReiterButtons extends ReiterButtons
{
  public function getButtonsArray($pDatensaetzeVorhanden = true)
  {
    
    $buttons = array();
    $toolId = $this->response->toolId;

    $termineBearbeitenAllowed = $this->useCase->isRechtAllowed('631.0.1');
    $termineHinzufuegenAllowed = $this->useCase->isRechtAllowed('631.0.2');
    $termineLoeschenAllowed = $this->useCase->isRechtAllowed('631.0.3') && (!\SessionOperations::isReplikat() || \SessionOperations::isDmzBetrieb());
    $termineKopierenAllowed = $this->useCase->isRechtAllowed('631.0.4');

    if (($termineBearbeitenAllowed || $termineHinzufuegenAllowed || $termineLoeschenAllowed || $termineKopierenAllowed) && $pDatensaetzeVorhanden) {
      $buttons[] = array($this->buttonFactory->getMarkierenButton('Alle markieren', 'alleMarkieren_reiter'));
      $buttons[] = array($this->buttonFactory->getMarkierungenEntfernenButton());
    }
    if ($termineBearbeitenAllowed && $pDatensaetzeVorhanden) {
      $buttons[] = array($this->buttonFactory->getTerminUpdateButton());
    }
    if ($termineHinzufuegenAllowed) {
      $buttons[] = array($this->buttonFactory->getAddButton(
        'Termin hinzufügen',
        '',
        'index.php?tool_id=' . $toolId . '&action=terminhinzufuegen&knr=' . $this->response->kurs->id
      ));
    }
    if ($termineKopierenAllowed && $pDatensaetzeVorhanden) {
      $buttons[] = array($this->buttonFactory->getTerminCopyButton());
    }

    if ($termineLoeschenAllowed && $pDatensaetzeVorhanden) {
      $buttons[] = array($this->buttonFactory->getDeleteButton());
    }
    $buttons[] = array($this->buttonFactory->getFilterButton('Filter', 'filterTermine', 'Filter öffnen'));

    return $buttons;
  }
}

class VaKurseAndererVeranstalterTermineReiterButtons extends ReiterButtons
{
  public function getButtonsArray($pDatensaetzeVorhanden = true)
  {
    $buttons = array();
    $buttons[] = array($this->buttonFactory->getFilterButton('Filter', 'filterTermine', 'Filter öffnen'));

    return $buttons;
  }
}

class FirmaReiterButtons extends ReiterButtons
{
  public function getButtonsArray($pDatensaetzeVorhanden = true)
  {
    $buttons = array();
    $toolId = $this->response->toolId;
    $belegId = isset($this->request->belegId) ? $this->request->belegId : '';

    if ($this->useCase->isRechtAllowed('336.0.1')) {
      $belegung = $this->response->belegung;
      $toolSettings = \ToolSettingsAPI::getToolSettings($this->useCase->getToolId());
      $stornoHinderungsGrund = StornoUtils::isFirmaStornoForKursAllowed($toolSettings, $belegung->teilnehmer, $belegung->kurs, $belegung);
      if ($stornoHinderungsGrund !== StornoUtils::STORNO_ALLOWED_NO_ERROR && $stornoHinderungsGrund !== StornoUtils::STORNO_ALLOWED_BEREITS_STORNIERT) {
        $asText = StornoUtils::stornoNotAllowedToText($toolSettings, $belegung, $stornoHinderungsGrund);
        $buttons[] = array($this->buttonFactory->getAbmeldenButton('', 'Abmeldung nicht möglich', 'abmeld_firmaanmel', $asText, true));
      } elseif ($stornoHinderungsGrund !== StornoUtils::STORNO_ALLOWED_BEREITS_STORNIERT) {
        $title = 'Abmeldung abschicken';
        $beschriftung = 'Abmelden';
        if (\DBWorkBASysSettings::isBlak()) {
          $title = 'Stornierung abschicken';
          $beschriftung = 'Stornieren';
        }
        $buttons[] = array($this->buttonFactory->getAbmeldenButton(
          'index.php?tool_id=' . $toolId . '&action=abmeldung&knr=' . $this->response->kurs->id . '&belid=' . $belegId,
          $beschriftung,
          '',
          $title
        ));
      }
    }
    if ($this->useCase->isRechtAllowed('336.0.3')) {
      $beschriftung = 'Feedback';
      if (\DBWorkBASysSettings::isBadMergentheimFabi()) {
        $beschriftung = 'Info Geschäftsstelle';
      }
      $buttons[] = array($this->buttonFactory->getFeedbackButton4Reiter(
        'index.php?tool_id=' . $toolId . '&action=showFeedbackFormular&knr=' . $this->response->kurs->id . '&belid=' . $belegId,
        $beschriftung,
        $beschriftung
      ));
    }
    if ($this->useCase->isRechtAllowed('336.0.8')) {
      $buttons[] = array($this->buttonFactory->getTermineIcsButton('Termine nach Outlook', 'fa_kursdetailsterminenachoutlooklink'));
    }
    if ($this->useCase->isRechtAllowed('336.0.4')) {
      $buttons[] = array($this->buttonFactory->getInfoAnDozButton(
        'index.php?tool_id=' . $toolId . '&action=infoandoz&knr=' . $this->response->kurs->id . '&belid=' . $belegId
      ));
    }
    if ($this->useCase->isRechtAllowed('336.0.6')) {
      $buttons[] = array($this->buttonFactory->getNotenDerMitarbeiterButton(
        'index.php?tool_id=' . $toolId . '&action=notenMa&knr=' . $this->response->kurs->id . '&belid=' . $belegId
      ));
    }
    if ($this->useCase->isRechtAllowed('336.0.7')) {
      $buttons[] = array($this->buttonFactory->getAnwesenheitenButton4Reitern(
        'index.php?tool_id=' . $toolId . '&einstieg=1&action=anwesenheiten&knr=' . $this->response->kurs->id . '&belid=' . $belegId
      ));
    }
    $dbWorkTools = new \DBWorkTools();
    if ($dbWorkTools->isToolAllowed(\SessionOperations::getUserIdentifier(), $this->getFaFeedbackauswertungToolId())) {
      $buttons[] = array($this->buttonFactory->getFeedbackauswertungButton4Reiter(
        $this->getFaFeedbackauswertungToolId(),
        $this->response->kurs->id,
        '?tool_id=' . $toolId . '&action=kursdetails&knr=' . urlencode($this->response->kurs->id) . '&belid=' . $belegId,
        'Zurück zu Kurs ' . $this->response->kurs->getVarValue('nr_anzeige'),
        'Mitarbeiter-Feedbackauswertung zum Kurs',
        'faFeedbackauswertungenUebersichtSetFilter'
      ));
    }

    return $buttons;
  }

  private function getFaFeedbackauswertungToolId()
  {
    return \ToolsAPI::TOOL_FEEDBACK_AUSWERTUNGEN_FA;
  }
}

class VeranstalterKurseDerMitarbeiterReiterButtons extends ReiterButtons
{
  public function getButtonsArray($pDatensaetzeVorhanden = true)
  {
    $buttons = array();
    $toolId = $this->response->toolId;

    if ($this->useCase->isRechtAllowed('722.0.3')) {
      $buttons[] = array($this->buttonFactory->getFeedbackButton4Reiter(
        'index.php?tool_id=' . $toolId . '&action=showFeedbackFormular&knr=' . $this->response->kurs->id
      ));
    }
    if ($this->useCase->isRechtAllowed('722.0.4')) {
      $buttons[] = array($this->buttonFactory->getInfoAnDozButton(
        'index.php?tool_id=' . $toolId . '&action=infoandoz&knr=' . $this->response->kurs->id
      ));
    }

    return $buttons;
  }
}

class DozReiterButtons extends ReiterButtons
{
  public function getButtonsArray($pDatensaetzeVorhanden = true)
  {
    $buttons = array();
    $toolId = $this->response->toolId;
    $toolSettings = \ToolSettingsAPI::getToolSettings($this->useCase->getToolId());
    $buttonBeschriftung = new \ButtonBeschriftung_DozKursUebersicht();

    $belegId = $this->request->belegId ?? '';
    $belIdUrlPart = $belegId !== '' ? '&belid=' . $belegId : '';

    $tnButtonRecht = $this->response->showTeilnehmer && $this->useCase->isRechtAllowed('334.0.3');
    $arbeitsBerichtButtonRecht = $this->useCase->isRechtAllowed('334.1.3') && \DBWorkBASysSettings::isBFI();

    if ($tnButtonRecht) {
      $text = $buttonBeschriftung->getBeschriftung($buttonBeschriftung::BUTTON_TEILNEHMER, $toolSettings);
      $buttons[] = array($this->buttonFactory->getTeilnehmerPdfListenButton(
        $text,
        'tnListenDruckButton_Kursdetails',
        'index.php?tool_id=' . $toolId . '&action=showTnListen&knr=' . $this->response->kurs->id
      ));
    }

    if ($this->response->showTeilnehmer && $this->useCase->isRechtAllowed('334.0.10')) {
      $buttons[] = array($this->buttonFactory->getTNBestaetigungButton($toolId, $this->response->kurs->id, $toolSettings->kursdetailsButtonTnBestaetigung));
    }

    if ($this->response->showTeilnehmer && \DBWorkBASysSettings::isBadMergentheimFabi() && $this->useCase->isRechtAllowed('334.0.11')) {
      $buttons[] = array($this->buttonFactory->getTNZertifikatButton($toolId, $this->response->kurs->id, $toolSettings->kursdetailsButtonTnZertifikat ?? 'TN-Zertifikat'));
    }

    if ($this->response->showTeilnehmer && $this->useCase->isRechtAllowed('334.0.7')) {
      $buttons[] = array($this->buttonFactory->getAnwesenheitenButton4Reitern(
        'index.php?tool_id=' . $toolId . '&einstieg=1&action=anwesenheiten&knr=' . $this->response->kurs->id . $belIdUrlPart
      ));
    }
    if ($this->useCase->isRechtAllowed('334.0.4')) {
      $buttons[] = array($this->buttonFactory->getKlassenbuchButton(
        'index.php?tool_id=18&action=kurstageuebersicht&datum=' . $this->response->datumLetzterKurstag . '&referer='
                  . $this->response->referer . '&refererLabel=' . $this->response->refererLabel
      ));
    }
    if ($arbeitsBerichtButtonRecht) {
      $buttons[] = array($this->buttonFactory->getArbeitsBerichtButton(
        'index.php?tool_id=' . $toolId . '&action=showSettingsKurstageArbeitsbericht&knr=' . $this->response->kurs->id
      ));
    }
    if ($this->useCase->isRechtAllowed('334.0.6')) {
      $title = 'Feedback Formular';
      $beschriftung = 'Feedback';
      $feedbackLink = 'index.php?tool_id=' . $toolId . '&action=showFeedbackFormular&knr=' . $this->response->kurs->id . $belIdUrlPart;
      if (\DBWorkBASysSettings::isAimHeilbronn()) {
        $title = 'Formular für Mitteilungen';
        $beschriftung = 'Mitteilung';
      }
      $buttons[] = array($this->buttonFactory->getFeedbackButton4Reiter($feedbackLink, $title, $beschriftung));
    }
    if ($this->useCase->isRechtAllowed('334.0.8')) {
      $text = $buttonBeschriftung->getBeschriftung($buttonBeschriftung::BUTTON_TERMINE, $toolSettings);
      $buttons[] = array($this->buttonFactory->getTermineIcsButton(
        $text,
        'icsButton',
        'index.php?tool_id=' . $toolId . '&action=icsAuswahl&kursnummern=' . $this->response->kurs->id . '&zeitbereich=ersterKurs'
      ));
    }
    if ($this->useCase->isRechtAllowed('334.0.5')) {
      $buttons[] = array($this->buttonFactory->getKurszettelButton(
        'index.php?tool_id=' . $toolId . '&action=printDruckListen&liste=Kursstammblattliste&nr=' . $this->response->kurs->id
      ));
    }
    if ($this->useCase->isRechtAllowed('334.0.9')) {
      $title = 'Feedbackbogen';
      $beschriftung = 'Feedbackbogen';
      if (\DBWorkBASysSettings::isAimHeilbronn()) {
        $title = 'Feedback';
        $beschriftung = 'Feedback';
      }
      $feedbackLink = 'index.php?tool_id=' . $toolId . '&action=showFeedbackBogen&knr=' . $this->response->kurs->id . $belIdUrlPart;
      $buttons[] = array($this->buttonFactory->getFeedbackButton4Reiter($feedbackLink, $title, $beschriftung));
    }
    $dbWorkTools = new \DBWorkTools();
    if ($dbWorkTools->isToolAllowed(\SessionOperations::getUserIdentifier(), $this->getDozFeedbackauswertungToolId())) {
      $buttons[] = array($this->buttonFactory->getFeedbackauswertungButton4Reiter(
        $this->getDozFeedbackauswertungToolId(),
        $this->response->kurs->id,
        '?tool_id=' . $toolId . '&action=kursdetails&knr=' . urlencode($this->response->kurs->id),
        'Zurück zu Kurs ' . $this->response->kurs->getVarValue('nr_anzeige')
      ));
    }
    if (\DBWorkBASysSettings::isCuxhaven() && $this->response->showTeilnehmer) {
      $buttons[] = array($this->buttonFactory->getFeedbackFormularButton(
        'index.php?tool_id=' . $toolId . '&action=printFeedbackFormular&knr=' . $this->response->kurs->id
      ));

      $buttons[] = array($this->buttonFactory->getHonorarvereinbarungButton(
        'index.php?tool_id=' . $toolId . '&action=printHonorarvereinbarung&knr=' . $this->response->kurs->id
      ));
    }
    if (\DBWorkBASysSettings::isMendenVhs()) {
      $link = 'tool_id=1&action=reiterHonorar&knr=' . $this->request->knr;
      $buttons[] = array($this->buttonFactory->getHonorarReiterButton($link, 'Honorar', 'Honorar'));
    }

    if (\DBWorkBASysSettings::isTuttlingenVhs()
      && $dbWorkTools->isToolAllowed(\SessionOperations::getUserIdentifier(), \ToolsAPI::TOOL_ANWESENHEIT_DOZ)
      && $this->useCase->isRechtAllowed('273.0.3', \ToolsAPI::TOOL_ANWESENHEIT_DOZ)
      && $this->useCase->isRechtAllowed('274.0.2', \ToolsAPI::TOOL_ANWESENHEIT_DOZ)) {
      $buttons[] = $this->getButton4KursAbschliessen();
    }

    return $buttons;
  }

  private function getButton4KursAbschliessen(): array
  {
    $dbwKurstage = new \DBWorkKurseTageWT(1, true);
    $eingeloggterDozent = \SessionOperations::getCurrentWebToolsDozent();
    $kurstage = $dbwKurstage->getKurstageByKursNrAndDozentNr($this->request->knr, $eingeloggterDozent->getIdentifier());

    $settingsAnwesenheiten = \ToolSettingsAPI::getToolSettings(18);
    foreach ($kurstage as $kurstag) {
      if (\Kufer\Web\KuferTools\Dozent\Anwesenheiten\Utils\KurstageUtils::hasAccessToKurstag($kurstag->id, $settingsAnwesenheiten)) {
        $link = 'index.php?tool_id=18&action=anwesenheiten_kurs_abschliessen&ktId=' . $kurstag->id;

        return array(new \Kufer\Web\KuferTools\Basis\Button\HtmlButton('Kurs abschließen', 'anw_speichern_abschliessen', $link, 'envelope', 'Kurs abschließen', '', 'success', '', 'button', true, false));
      }
    }

    return array(new \Kufer\Web\KuferTools\Basis\Button\HtmlButton('Kurs abschließen', '', '', 'envelope', 'Nicht möglich: Einige Kurstage sind in der Zukunft oder haben keine eingetragenen Anwesenheiten', '', 'success', '', 'button', true, true));
  }

  private function getDozFeedbackauswertungToolId(): int
  {
    return \ToolsAPI::TOOL_FEEDBACK_AUSWERTUNGEN_DOZ;
  }
}

class TeilnehmerinfoReiterButtons extends ReiterButtons
{
  public function getButtonsArray($pDatensaetzeVorhanden = true)
  {
    $buttons = array();
    $toolId = $this->response->toolId;
    $dbw = new \DBWorkTools();

    
    if ($this->useCase->isRechtAllowed('411.0.1')) {
      $buttons[] = array($this->buttonFactory->getPersonBearbeitenButton('Bearbeiten', 'teilnehmerBearbeiten', 'Daten des/der Teilnehmers/in bearbeiten'));
    }
    if ($this->useCase->isRechtAllowed('411.0.3') && $dbw->isToolAllowed(\SessionOperations::getUserIdentifier(), $toolId)) {
      
      $buttons[] = array($this->buttonFactory->getTnAnmeldenButton('index.php?tool_id=6&tnr=' . $this->response->teilnehmer->id . (!empty($this->response->teilnehmer->guid) ? '&tguid=' . (string)$this->response->teilnehmer->guid : '')));
    }
    if ($this->useCase->isRechtAllowed('411.0.4')) {
      $referer = '&referer=' . urlencode($this->getAktuelleURLRelative()) . '&refererLabel=' . urlencode(\StringOperations::htmlentities('Zurück'));
      $buttons[] = array($this->buttonFactory->getEnvelopeSymbolButton('E-Mail', 'tnSammelEMail', 'index.php?tool_id=11&action=tnSammelEMail&teilnehmer[]=' . $this->response->teilnehmer->id . $referer, 'E-Mail an Teilnehmer senden'));
    }

    return $buttons;
  }
}

class TeilnehmerinfoVeranstalterReiterButtons extends ReiterButtons
{
  public function getButtonsArray($pDatensaetzeVorhanden = true)
  {
    $buttons = array();
    $toolId = $this->response->toolId;
    $dbw = new \DBWorkTools();

    
    if ($this->useCase->isRechtAllowed('687.0.1')) {
      $buttons[] = array($this->buttonFactory->getPersonBearbeitenButton('Bearbeiten', 'teilnehmerBearbeiten', 'Daten des/der Teilnehmers/in bearbeiten'));
    }
    if ($this->useCase->isRechtAllowed('687.0.3') && $dbw->isToolAllowed(\SessionOperations::getUserIdentifier(), $toolId)) {
      
      $buttons[] = array($this->buttonFactory->getTnAnmeldenButton('index.php?tool_id=53&tnr=' . $this->response->teilnehmer->id . (!empty($this->response->teilnehmer->guid) ? '&tguid=' . (string)$this->response->teilnehmer->guid : '')));
    }
    if ($this->useCase->isRechtAllowed('687.0.4')) {
      $referer = '&referer=' . urlencode($this->getAktuelleURLRelative()) . '&refererLabel=' . urlencode(\StringOperations::htmlentities('Zurück'));
      $buttons[] = array($this->buttonFactory->getEnvelopeSymbolButton('E-Mail', 'tnSammelEMail', 'index.php?tool_id=58&action=tnSammelEMail&teilnehmer[]=' . $this->response->teilnehmer->id . $referer, 'E-Mail an Teilnehmer senden'));
    }

    return $buttons;
  }
}

class BelegteKurseReiterButtons extends ReiterButtons
{
  public function getButtonsArray($pDatensaetzeVorhanden = true)
  {
    $buttons = array();
    $showAbmeldenButton = $this->useCase->isRechtAllowed('43.0.3');

    if ($showAbmeldenButton && $pDatensaetzeVorhanden) {
      $buttons[] = array($this->buttonFactory->getMarkierenButton('Alle markieren', 'alleMarkieren_reiter'));
      $buttons[] = array($this->buttonFactory->getMarkierungenEntfernenButton());
    }
    if ($showAbmeldenButton && $pDatensaetzeVorhanden) {
      $buttons[] = array($this->buttonFactory->getAbmeldenButton('', 'Abmelden', 'tab_teilnehmerStorno storno4kurs'));
    }
    $buttons[] = array($this->buttonFactory->getFilterButton('Filter', 'filterBelegteKurse', 'Filter öffnen'));

    return $buttons;
  }
}

class BelegteKurseVeranstalterReiterButtons extends ReiterButtons
{
  public function getButtonsArray($pDatensaetzeVorhanden = true)
  {
    $buttons = array();
    $showAbmeldenButton = $this->useCase->isRechtAllowed('691.0.3');

    if ($showAbmeldenButton && $pDatensaetzeVorhanden) {
      $buttons[] = array($this->buttonFactory->getMarkierenButton('Alle markieren', 'alleMarkieren_reiter'));
      $buttons[] = array($this->buttonFactory->getMarkierungenEntfernenButton());
    }
    if ($showAbmeldenButton && $pDatensaetzeVorhanden) {
      $buttons[] = array($this->buttonFactory->getAbmeldenButton('', 'Abmelden', 'tab_teilnehmerStorno storno4kurs'));
    }
    $buttons[] = array($this->buttonFactory->getFilterButton('Filter', 'filterBelegteKurse', 'Filter öffnen'));

    return $buttons;
  }
}

class BankverbindungenReiterButtons extends ReiterButtons
{
  public function getButtonsArray($pDatensaetzeVorhanden = true)
  {
    $buttons = array();
    $bearbeitbar = $this->response->bearbeitbar;

    if ($bearbeitbar) {
      $buttons[] = array($this->buttonFactory->getAddButton('Bankverbindung hinzuf&uuml;gen', 'insert_bankdaten', '', 'Bankverbindung hinzuf&uuml;gen'));
    }

    return $buttons;
  }
}

class DozenteninfoReiterButtons extends ReiterButtons
{
  public function getButtonsArray($pDatensaetzeVorhanden = true)
  {
    $buttons = array();
    $toolId = $this->response->toolId;
    $dbw = new \DBWorkTools();

    
    if ($this->useCase->isRechtAllowed('397.0.1')) {
      
      $buttons[] = array($this->buttonFactory->getPersonBearbeitenButton('Bearbeiten', 'dozentBearbeiten', 'Daten des/der Dozenten/in bearbeiten'));
    }
    if ($this->useCase->isRechtAllowed('411.0.3') && $dbw->isToolAllowed(\SessionOperations::getUserIdentifier(), $toolId)) {
      
      
    }

    if ($this->useCase->isRechtAllowed('397.0.8')) {
      $referer = '&referer=' . urlencode($this->getAktuelleURLRelative()) . '&refererLabel=' . urlencode(\StringOperations::htmlentities('Zurück'));
      $buttons[] = array($this->buttonFactory->getEnvelopeSymbolButton('E-Mail', 'dozSammelEMail', 'index.php?tool_id=12&action=dozSammelEMail&dozenten[]=' . $this->response->dozent->id . $referer, 'E-Mail an Dozenten senden'));
    }

    return $buttons;
  }
}

class DozenteninfoVaReiterButtons extends ReiterButtons
{
  public function getButtonsArray($pDatensaetzeVorhanden = true)
  {
    $buttons = array();
    if ($this->useCase->isRechtAllowed('654.0.1')) {
      $buttons[] = array($this->buttonFactory->getPersonBearbeitenButton('Bearbeiten', 'dozentBearbeiten', 'Daten des/der Dozenten/in bearbeiten'));
    }

    if ($this->useCase->isRechtAllowed('654.0.8')) {
      $referer = '&referer=' . urlencode($this->getAktuelleURLRelative()) . '&refererLabel=' . urlencode(\StringOperations::htmlentities('Zurück'));
      $buttons[] = array($this->buttonFactory->getEnvelopeSymbolButton('E-Mail', 'dozSammelEMail', 'index.php?tool_id=55&action=dozSammelEMail&dozenten[]=' . $this->response->dozent->id . $referer, 'E-Mail an Dozenten senden'));
    }

    return $buttons;
  }
}

class ToolDozinfoMaReiterKurseButtons extends ReiterButtons
{
  public function getButtonsArray($pDatensaetzeVorhanden = true)
  {
    $buttons = array();
    $toolId = $this->response->toolId;
    $totalKurse = $this->useCase->totalKursdata;
    $selectedKurse = $this->response->kurse;
    $kursAllowed = false;
    foreach ($selectedKurse as $kurs) {
      if (in_array($kurs->id, $totalKurse)) {
        $kursAllowed = true;
        break;
      }
    }
    $showDrucklistenButton = $this->useCase->isRechtAllowed('397.0.3') && \ToolsAPI::rechteOR(array('404.0.2', '404.0.4', '404.0.6', '404.0.8'), $toolId);
    $showHonorarlistenButton = $this->useCase->isRechtAllowed('397.0.4') && \ToolsAPI::rechteOR(array('405.0.2', '405.0.4', '405.0.6', '405.0.8', '405.0.10', '405.0.12', '405.0.14'), $toolId);
    $showGrafikenButton = $this->useCase->isRechtAllowed('397.0.5') && \ToolsAPI::rechteOR(array('406.0.2', '406.0.4', '406.0.6', '406.0.8', '406.0.10', '406.0.12'), $toolId);
    $showVertraege = $this->useCase->isRechtAllowed('397.0.6') && \ToolsAPI::rechteOR(array('407.0.2', '407.0.4'), $toolId);
    $showTeilnehmerlistenButton = $this->useCase->isRechtAllowed('397.0.7') && \ToolsAPI::rechteOR(array('403.0.2', '403.0.4', '403.0.6', '403.0.8', '403.0.10'), $toolId);
    $showVertragsformularButton = \DBWorkBASysSettings::isDonnersbergkreisVhs();

    if ($kursAllowed) {
      if ($showDrucklistenButton || $showHonorarlistenButton || $showGrafikenButton || $showVertraege || $showTeilnehmerlistenButton) {
        $buttons[] = array($this->buttonFactory->getMarkierenButton('Alle markieren', 'alleMarkieren_reiter'));
        $buttons[] = array($this->buttonFactory->getMarkierungenEntfernenButton());
      }
      
      if ($showTeilnehmerlistenButton) {
        $buttons[] = array($this->buttonFactory->getTeilnehmerPdfListenButton());
      }
      
      if ($showDrucklistenButton) {
        $buttons[] = array($this->buttonFactory->getKursPdfListenButton('Listen'));
      }
      
      if ($showHonorarlistenButton) {
        $buttons[] = array($this->buttonFactory->getHonorarPdfListenButton());
      }
      
      if ($showGrafikenButton) {
        $buttons[] = array($this->buttonFactory->getGrafikPdfListenButton());
      }
      
      if ($showVertraege) {
        $buttons[] = array($this->buttonFactory->getVertragPdfListenButton('Verträge'));
      }
      
      if ($showVertragsformularButton) {
        $buttons[] = array($this->buttonFactory->getVertragsformularButton('Vertragsformular', 'vertragsformularButton dozinfo'));
      }
    }
    $buttons[] = array($this->buttonFactory->getFilterButton('Filter', 'filterKurse', 'Filter öffnen'));
    if ($this->isFilterGesetzt()) {
      $buttons[] = array($this->buttonFactory->getFilterLeerenButton('Leeren', 'resetFilterKurse'));
    }

    return $buttons;
  }

  public static function getFilterToolId()
  {
    return \ToolsAPI::TOOL_DOZENTENINFO_MA;
  }

  protected function isFilterGesetzt()
  {
    $suchApi = new \KurssuchAPI();

    return $suchApi->isFilterGesetzt($this->getFilterToolId());
  }
}

class ToolDozinfoVaReiterKurseButtons extends ReiterButtons
{
  public function getButtonsArray($pDatensaetzeVorhanden = true)
  {
    $buttons = array();
    $toolId = $this->response->toolId;
    $totalKurse = $this->useCase->totalKursdata;
    $selectedKurse = $this->response->kurse;
    $kursAllowed = false;
    foreach ($selectedKurse as $kurs) {
      if (in_array($kurs->id, $totalKurse)) {
        $kursAllowed = true;
        break;
      }
    }
    $showDrucklistenButton = $this->useCase->isRechtAllowed('654.0.3') && \ToolsAPI::rechteOR(array('660.0.2', '660.0.4', '660.0.6', '660.0.8'), $toolId);
    $showHonorarlistenButton = $this->useCase->isRechtAllowed('654.0.4') && \ToolsAPI::rechteOR(array('661.0.2', '661.0.4', '661.0.6', '661.0.8', '661.0.10', '661.0.12', '661.0.14'), $toolId);
    $showGrafikenButton = $this->useCase->isRechtAllowed('654.0.5') && \ToolsAPI::rechteOR(array('663.0.2', '663.0.4', '663.0.6', '663.0.8', '663.0.10', '663.0.12'), $toolId);
    $showVertraege = $this->useCase->isRechtAllowed('654.0.6') && \ToolsAPI::rechteOR(array('662.0.2', '662.0.4'), $toolId);
    $showTeilnehmerlistenButton = $this->useCase->isRechtAllowed('654.0.7') && \ToolsAPI::rechteOR(array('659.0.2', '659.0.4', '659.0.6', '659.0.8', '659.0.10'), $toolId);
    $showVertragsformularButton = \DBWorkBASysSettings::isDonnersbergkreisVhs();

    if ($kursAllowed) {
      if ($showDrucklistenButton || $showHonorarlistenButton || $showGrafikenButton || $showVertraege || $showTeilnehmerlistenButton) {
        $buttons[] = array($this->buttonFactory->getMarkierenButton('Alle markieren', 'alleMarkieren_reiter'));
        $buttons[] = array($this->buttonFactory->getMarkierungenEntfernenButton());
      }
      
      if ($showTeilnehmerlistenButton) {
        $buttons[] = array($this->buttonFactory->getTeilnehmerPdfListenButton());
      }
      
      if ($showDrucklistenButton) {
        $buttons[] = array($this->buttonFactory->getKursPdfListenButton('Listen'));
      }
      
      if ($showHonorarlistenButton) {
        $buttons[] = array($this->buttonFactory->getHonorarPdfListenButton());
      }
      
      if ($showGrafikenButton) {
        $buttons[] = array($this->buttonFactory->getGrafikPdfListenButton());
      }
      
      if ($showVertraege) {
        $buttons[] = array($this->buttonFactory->getVertragPdfListenButton('Verträge'));
      }
      
      if ($showVertragsformularButton) {
        $buttons[] = array($this->buttonFactory->getVertragsformularButton('Vertragsformular', 'vertragsformularButton dozinfo'));
      }
    }
    $buttons[] = array($this->buttonFactory->getFilterButton('Filter', 'filterKurse', 'Filter öffnen'));
    if ($this->isFilterGesetzt()) {
      $buttons[] = array($this->buttonFactory->getFilterLeerenButton('Leeren', 'resetFilterKurse'));
    }

    return $buttons;
  }

  public static function getFilterToolId()
  {
    return 55;
  }

  protected function isFilterGesetzt()
  {
    $suchApi = new \KurssuchAPI();

    return $suchApi->isFilterGesetzt($this->getFilterToolId());
  }
}

class AdressinfoReiterButtons extends ReiterButtons
{
  public function getButtonsArray($pDatensaetzeVorhanden = true)
  {
    $buttons = array();
    
    if ($this->useCase->isRechtAllowed('410.0.1')) {
      $adressUpdate = true;
      
      
      if (\SessionOperations::isReplikat()) {
        $allgSettings = \AllgSettingsAPI::getAllgSettings();
        if (!$allgSettings->dmzEnabled) {
          $dbwReplikatSettings = new \DBWorkWebReplikatSettings();
          $highestAdrNr = $dbwReplikatSettings->getHighestAdrNr();
          if ($this->response->adress->id > $highestAdrNr->value) {
            
            
            $adressUpdate = false;
          }
        }
      }
      if ($adressUpdate) {
        $buttons[] = array($this->buttonFactory->getPersonBearbeitenButton('Bearbeiten', 'adresseBearbeiten', 'Daten zur Adresse bearbeiten', 'user'));
      }
    }

    return $buttons;
  }
}

class LeiterMitarbeiterAndererVeranstalterReiterButtons extends ReiterButtons
{
  public function getButtonsArray($pDatensaetzeVorhanden = true)
  {
    $buttons = array();
    if ($this->useCase->isRechtAllowed('699.0.1')) {
      $referer = '&referer=' . urlencode($this->getAktuelleURLRelative()) . '&refererLabel=' . urlencode(\StringOperations::htmlentities('Zurück'));
      $buttons[] = array($this->buttonFactory->getEnvelopeSymbolButton('E-Mail', 'dozSammelEMail', 'index.php?tool_id=60&action=dozSammelEMail&dozenten[]=' . $this->response->dozent->id . $referer, 'E-Mail an Dozenten senden'));
    }

    return $buttons;
  }
}