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


class PageKurstagBearbeiten extends PageBaseWT
{
  
  private $_data;
  
  private $_modeUpdate;
  
  private $_readonly = false;

  public function __construct($pTool, $pData, $pPageId, $pModeUpdate = false)
  {
    $sprachSettings = SettingsFactory::getSettings('SprachSettingsObject');
    
    parent::__construct($sprachSettings->Kurstag['Singular']['Nominativ'] . ' bearbeiten', $pPageId, $pTool);
    $this->_data = $pData;
    
    
    $this->_modeUpdate = $pModeUpdate;
  }

  
  public function getContentHeader()
  {
    $sprachSettings = SettingsFactory::getSettings('SprachSettingsObject');

    if ($this->_modeUpdate) {
      
      $headerinfo = $sprachSettings->Kurstag['Singular']['Nominativ'] . ' zu ';
    } else {
      
      $headerinfo = 'Neuen ' . $sprachSettings->Kurstag['Singular']['Akkusativ'] . ' anlegen zu ';
    }

    return $headerinfo . $sprachSettings->Kurs['Singular_mit_Artikel']['Dativ'] . ' ' . $this->_data->knr . ': ' . $this->_data->kurs->kurzbez;
  }

  
  public function getContent()
  {
    $result = '';
    $builder = new SightBuilder($this->tool->getToolId(), $this->id, $this->_data);

    
    
    if (RequestOperations::getMethod() == 'post') {
      if ($this->xsrfOk()) {
        
        $builder->saveData();
        $validationOK = $builder->checkValidation();
        $saveOK = false;

        if ($validationOK) {
          
          $result .= $this->_saveKurstag($builder);
          $saveOK = (strripos($result, 'errormsg', 0) === false);

          if ($saveOK) {
            $result .= PasstKursZuKurstageAPI::getScriptTagZumAnpassenDerKursdaten($this->_data->knr, $this->tool->getToolId(), $this->_getRechte4KursBearbeiten());
          }
        }
        
        
        
        
        if ($saveOK && ($this->_modeUpdate || $validationOK)) {
          
          $dbwKursTage = new DBWorkKurseTage(1, true, true);
          $this->_data = $dbwKursTage->getKurstag($this->_data->id, true);
        }

        $builder->setData($this->_data);
      } else {
        
        $builder->setRefresh(true);
      }
    }

    $builder->linksForFormLinks = '<div class="buttonleisteKTag">' . "\n";
    
    if (isset($this->links['druck']) && $this->links['druck'] != '') {
      $builder->linksForFormLinks .= '<a href="' . CleanOperations::cleanStringForHtml($this->links['druck']) . '" id="kTagDruck" title="Kurstags Formular drucken">'
                                        . '<img src="layout/button_druck.gif" alt="Kurstags Formular drucken"></a>' . "\n";
    }
    
    $anchor = GetOperations::getVarValue('tab');

    $builder->linksForFormRechts = HTMLOperations::CreateBackButton(ToolsAPI::getLastHistoryEntry() . '#' . $anchor, 'kursplanung_backbutton');
    
    $builder->linksForFormRechts .= '</div>';

    if ($this->_readonly) {
      
      
      $builder->setReadOnly(true);
    }

    $result .= $builder->buildSight('', '', $this->getXsrfKey());

    return $result;
  }

  protected function getXsrfKey()
  {
    return '';
  }

  protected function xsrfOk()
  {
    return true;
  }

  
  protected function _getRechte4KursBearbeiten()
  {
    if (isset($this->links['kurs_rechte'])) {
      return $this->links['kurs_rechte'];
    } else {
      return array();
    }
  }

  
  private function _saveKurstag($builder)
  {
    $sprachsettings = new SprachSettingsObject();
    $result = '';
    $kurstag = $builder->getData();
    $dbwork = new DBWorkKurseTage();
    $ktId = isset($kurstag->id) ? $kurstag->id : 0;
    $origKurstag = $dbwork->getKurstag($ktId, true);
    $allgsettings = $this->allgSettings;
    
    $changedFields = $builder->getFieldNamesOfChangedFields($origKurstag);
    
    $changedFields = KurstagAPI::actualizeFields4KTVars($changedFields, !$this->_modeUpdate);


    
    $this->_data = $kurstag = KurstagAPI::aktualisiereKurstagZeit(
      $this->_data,
      (in_array('zeit_beg', $changedFields) ? $this->_data->zeit_beg : null),
      (in_array('zeit_ende', $changedFields) ? $this->_data->zeit_ende : null),
      (in_array('pause', $changedFields) ? $this->_data->pause : null),
      (in_array('minuten', $changedFields) ? $this->_data->minuten : null),
      (in_array('ue', $changedFields) ? $this->_data->ue : null)
    );

    if (count($changedFields) == 0) {
      if ($kurstag->medien_zus == '') {
        if (empty($kurstag->id) || SessionOperations::getVarValueWTIntern('kursplanung_medien_zus_submit_success_' . $kurstag->id, false)) {
          
          $result .= HTMLOperations::getInfoBox('<div class="infobox_text">' . CleanOperations::cleanStringForHtml($allgsettings->failNoChangesMsgKursplanung) . '</div>', 'Hinweis', 'in_background');

          return $result;
        } 
      } 
    } 

    $insertedktid = -1;

    try {
      if (SessionOperations::isReplikat() && $allgsettings->dmzEnabled) {
        

        $korrekturAPI = new KurskorrekturAPI();

        if ($this->_modeUpdate) {
          

          $correctMode = 'update';

          $korrekturAPI->correctKurstag($kurstag, $changedFields, $origKurstag, $correctMode);

          
          $dbwork->updateKurstag($kurstag, true);
        } else { 
          $correctMode = 'insert';

          
          
          $kurstag->id = $dbwork->insertKurstag($kurstag, true);

          $insertedktid = $kurstag->id;

          $korrekturAPI->correctKurstag($kurstag, $changedFields, null, $correctMode);

          
          $this->_data->id = $kurstag->id;
          
          
          $this->_readonly = true;
        }
      } else {
        
          if ($this->_modeUpdate) {   
          $dbwork->updateKurstag($kurstag, false);
          } else {
            $kurstag->id = $dbwork->insertKurstag($kurstag, false);
            
            $this->_data->id = $kurstag->id;
            
            
            $this->_readonly = true;
          }
      }

      $result .= '<h1 class="headline" id="ktform_message">';

      
      
      if ($kurstag->medien_zus != '' && !SessionOperations::setVarValueWTIntern('kursplanung_medien_zus_submit_success_' . $kurstag->id, false)) {
        SessionOperations::setVarValueWTIntern('kursplanung_medien_zus_' . $kurstag->id, $kurstag->medien_zus);
        $emailText = $this->_getEMailText4MedienZus($kurstag);

        
        $allgsettings = AllgSettingsAPI::getAllgSettings();
        try {
          $dozentOrMitarbeiter = SessionOperations::getCurrentWebToolsDozent();
        } catch (Exception $e) {
          try {
            $dozentOrMitarbeiter = SessionOperations::getCurrentWebToolsMitarbeiter();
          } catch (Exception $x) {
            throw new Exception('Der User war weder ein Dozent noch ein Mitarbeiter');
          }
        }
        $senderEmailData = ToolsAPI::getSenderEmailAddressAndName($dozentOrMitarbeiter);

        $mailAnMaAry = array();
        $mailAnMaAry['VerwMa'] = $this->toolSettings->medienMailAnVerwMa;
        
        $mailAdressAry = ToolsAPI::getEmailAdressForKursMA($kurstag->kurs, $this->tool->getToolId(), $this->id, $mailAnMaAry);
        $emailAdress = \ArrayOperations::firstValue($mailAdressAry);
        $emailSuccess = smtpMailTools::sendStandardTextMailWithFooter(
          $emailAdress,
          'Zusätzlich benötigte Medien zu ' . $sprachsettings->Kurs['Singular_mit_Artikel']['Dativ'] . ' ' . $kurstag->kurs->getVarValue('kurzbez_titel'),
          $emailText,
          'Zusätzlich benötigte Medien für einen Kurstag',
          SessionOperations::getCurrentWebToolsUser(),
          $kurstag,
          $senderEmailData['email'],
          $senderEmailData['name'],
          $senderEmailData['reply'],
          $senderEmailData['replyname']
        );
        if ($emailSuccess) {
          SessionOperations::setVarValueWTIntern('kursplanung_medien_zus_submit_success_' . $kurstag->id, true);
          $result .= 'Zus&auml;tzlich ben&ouml;tigte Medien wurden per E-Mail &uuml;bermittelt' . BR_WT;
        } else {
          $result .= 'Zus&auml;tzlich ben&ouml;tigte Medien konnten nicht &uuml;bermittelt werden.' . BR_WT
                     . 'Bitte versuchen Sie es erneut, oder wenden Sie sich an unsere Einrichtung.' . BR_WT;
        }
      }
      $result .= HTMLOperations::getSuccessBox('<div class="successbox_text">' . CleanOperations::cleanStringForHtml($allgsettings->successMsgKursplanung) . '</div>', 'Übermittlung erfolgreich', 'in_background');
      $result .= '</h1>' . "\n";
    } catch (AbgleichApiException $aae) {

      
      if ($insertedktid != -1) {
        $dbwork->deleteKurstag($insertedktid);
      }

      Logger::logg('Kurstagkorrektur - folgende Exception ist aufgetreten: ' . $aae->getMessage() . ' [' . $aae->getTraceAsString() . ']', 200);
      $kurstagApi = new KurstagAPI();
      $result .= '<h1 class="headline errormsg" id="ktform_message">';
      if ($aae->errorType == AbgleichApiResult::KURSTAG_KORREKTUR_KEINE_EINGETRAGEN) {
        $result .= HTMLOperations::getAlertBox('<div class="alertbox_text">' . CleanOperations::cleanStringForHtml($allgsettings->failMsgKursplanungKeineEingetr) . BR_WT
                    . $kurstagApi->getFailedKT($aae->errorReason) . '</div>', 'Fehler', 'in_background');
      } elseif ($aae->errorType == AbgleichApiResult::KURSTAG_KORREKTUR_TEILWEISE_EINGETRAGEN) {
        $result .= HTMLOperations::getAlertBox('<div class="alertbox_text">' . CleanOperations::cleanStringForHtml($allgsettings->failMsgKursplanungEinigeEingetr) . BR_WT
                    . $kurstagApi->getFailedKT($aae->errorReason) . '</div>', 'Achtung', 'in_background');
      } elseif ($aae->errorType == AbgleichApiResult::CONFLICT) {
        $result .= HTMLOperations::getAlertBox('<div class="alertbox_text">' . CleanOperations::cleanStringForHtml($allgsettings->failSubmitMsgConflict) . '</div>', 'Fehler', 'in_background');
      } else {
        $result .= HTMLOperations::getAlertBox('<div class="alertbox_text">' . CleanOperations::cleanStringForHtml($allgsettings->failSubmitMsgKursplanung) . '</div>', 'Fehler', 'in_background');
      }
      $result .= '</h1>';
    } catch (Exception $e) {
      Logger::logg('Kurstagkorrektur - folgende Exception ist aufgetreten: ' . $e->getMessage() . ' [' . $e->getTraceAsString() . ']', 200);
      $result .= HTMLOperations::getAlertBox('<div class="alertbox_text">' . CleanOperations::cleanStringForHtml($allgsettings->failSubmitMsgKursplanung) . '</div>', 'Fehler', 'in_background');
    }

    return $result;
  }

  
  private function _getEMailText4MedienZus($pKurstag)
  {
    $dbwKurstagMedien = new DBWorkKurstagMedien(1, true);
    $medienAry = $dbwKurstagMedien->getMedienAryFromMedienStr($pKurstag->medien_zus, $pKurstag->id);
    $result = $this->_getUserNotice4Email($pKurstag);

    foreach ($medienAry as $medium) {
      $result .= $medium->medium . ' ' . $medium->bemerkung;
      $result = rtrim($result); 
      $result .= "\n";
    }

    return $result;
  }

  private function _getUserNotice4Email($pKurstag)
  {
    $user = SessionOperations::getCurrentWebToolsUser();
    $userNotice = $this->_getUserBezeichnung();
    $userNotice .= $user->name . ' ' . $user->vorname . ' benötigt zum Kurs ' . $pKurstag->knr . ' (' . $pKurstag->kurs->getVarValue('kurzbez_titel') . ') ';
    $userNotice .= 'zum Kurstag am ' . $pKurstag->datum . ' um ' . $pKurstag->zeit_beg . ' zusätzlich noch folgende weitere Medien:' . "\n\n";

    return $userNotice;
  }

  
  protected function _getUserBezeichnung()
  {
    return '';
  }

  
  public function getSpecialJS()
  {
    return array('js/medienhandler.js', 'js/terminplanung.js');
  }

  
  public function getJSDeclarations()
  {
    $result = parent::getJSDeclarations();
    $result .= 'registerNamespace("KuferTools.KurstagPlanung");';
    $result .= JsOperations::getDeclarationString('KuferTools.KurstagPlanung.Knr', $this->_data->kurs->id);
    $result .= JsOperations::getDeclarationInt('KuferTools.KurstagPlanung.MinutesProUe', MathOperations::minProUeKnr($this->_data->kurs->id));

    $dbwhl = new DBWorkHLGrundSys(1, true);
    
    
    $result .= JsOperations::getDeclarationString('KuferTools.KurstagPlanung.HALBUE', $dbwhl->getFeldWert('MUSIK_22HALBUE', 'F'));

    
    $result .= JsOperations::getDeclarationString('KuferTools.KurstagPlanung.Beginn', $this->_data->zeit_beg);
    $result .= JsOperations::getDeclarationString('KuferTools.KurstagPlanung.Ende', $this->_data->zeit_ende);
    $result .= JsOperations::getDeclarationFloatMitKomma('KuferTools.KurstagPlanung.Ue', $this->_data->ue);
    $result .= JsOperations::getDeclarationInt('KuferTools.KurstagPlanung.Minuten', $this->_data->minuten);
    $result .= JsOperations::getDeclarationInt('KuferTools.KurstagPlanung.Pause', $this->_data->pause);

    return $result;
  }
}