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

/**
 * @copyright (c) Kufer Software GmbH, Loisachstrasse 4, D-84453 Mühldorf
 */
class DataMenuLoginDatenAendern extends DataMenuMain
{
  protected static $isCopy = false;
  private $sessionBackup;
  private $newLoginName = '';

  public function __construct($urlParam)
  {
    parent::__construct($urlParam);
    $this->exportadapter = new ExpStammhoerer();
    $this->exportadapter->export->expCalculation->isDataBinding = false;
  }

  public function _getClickPath($pName = 'Teilnehmer-Login - Daten ändern')
  {
    $this->_setStdClickPath($pName, 'clickKundenLoginDatenAendern');

    return $this->clickpfad;
  }

  public function getsight($sightid = 440)
  {
    parent::getsight($sightid);
  }

  public function mainmenu()
  {
    $this->prepareMainmenu();
    if ($this->toolsettings->showClickpfad) {
      echo $this->getClickPath();
    }

    $login = SessionOperations::getCurrentWbLogin();
    echo "<div class='hauptseite'>\n";
    if (trim($login) !== '') {
      if ($this->_isFormularSent()) {
        $this->backupSession(); 

        $teilnehmerAry = $this->dataarrayFuellen($login); 

        $oldpwok = $this->isOldPwOk($login, $teilnehmerAry[0]);

        if ($this->_isFormularValid($teilnehmerAry[0]) && $this->_teilnehmerValuesHaveChanged($teilnehmerAry[0])
                && Xsrf::checkAndUseXsrf4KuferWEB('wbLoginChange') === Xsrf::KEY_OK && $oldpwok) {
          $dataSuccessfullyProcessed = false;
          if (!$this->_isBrowserReload()) {
            
            SessionOperations::setVarValueWk('stammhoererDatenAendernAlreadySend', true);

            $dataSuccessfullyProcessed = $this->processTnData($teilnehmerAry);
            
            SessionOperations::setVarValueWk('stammhoererDatenAendernEmailSendSuccessful', $dataSuccessfullyProcessed);
          }
          if ($dataSuccessfullyProcessed) {
            $this->restoreSession(); 
            $this->afterSendChangesHook($teilnehmerAry[0]);
            $this->_aktualisiereDatenInSession($teilnehmerAry[0]); 
            SessionOperations::setVarValueWk('stammhoererDatenAendernEmailSendSuccessful', true);
            $this->_showBestaetigungsSeite();
          } else {
            $this->addStatus('Ihre Daten konnten nicht geändert werden. Bitte versuchen Sie es später erneut.', 'error');
            $this->_showFormular();
            $this->restoreSession();
            SessionOperations::setVarValueWk('stammhoererDatenAendernAlreadySend', false);
          }
        } else {
          if (!$this->_teilnehmerValuesHaveChanged($teilnehmerAry[0])) {
            $this->addStatus('Ihre Daten wurden nicht geändert. Es wurde keine Änderung vorgenommen.', 'neutral');
          }
          if (!$oldpwok) {
            $this->addStatus('Das Passwort stimmt nicht überein. Wenn Sie Ihre E-Mail-Adresse ändern, müssen Sie sicherheitshalber Ihr Passwort angeben.', 'error');
          }

          $this->_showFormular();
          $this->restoreSession();
          
          SessionOperations::setVarValueWk('stammhoererDatenAendernAlreadySend', false);
        }
      } else {
        $this->_showFormular();
        
        SessionOperations::setVarValueWk('stammhoererDatenAendernAlreadySend', false);
      }
    } else {
      $this->_showNichtEingeloggt();
    }
    echo '</div>';
  }

  private function _isFormularSent()
  {
    return PostOperations::isDefined('wbl_login_change');
  }

  private function backupSession()
  {
    $this->sessionBackup = $_SESSION;
  }

  
  public function dataarrayFuellen($pLogin, $sessionNeuFuellen = true)
  {
    if ($sessionNeuFuellen) {
      SessionOperations::getTeilnehmerFromRequest2Session('tedit', '');
    }
    $teilnehmerAry = $this->_getTeilnehmerDatenAryOhneSessionFuellen($pLogin);

    $this->dataarraynocolumn = $this->dataarrayfooter = $this->dataarrayheader = $this->dataarraybody = $teilnehmerAry;

    return $teilnehmerAry;
  }

  
  private function _getTeilnehmerDatenAryOhneSessionFuellen($pLogin)
  {
    $teilnehmerAry = SessionOperations::getTeilnehmerFromSession();
    $oldWbLogin = $this->getWbLoginData($pLogin);
    foreach ($teilnehmerAry as $key => $tn) {
      $teilnehmerAry[$key]->oldStammhoererData = $oldWbLogin;
    }

    return $teilnehmerAry;
  }

  
  private function isOldPwOk($pLogin, $pTeilnehmer)
  {
    
    $tool0Settings = ToolSettingsAPI::getToolSettings(0);
    if (!$tool0Settings->stammhoererLoginEmailAendernErfordertPwEingabe) {
      return true;
    }
    $wbl = $this->_getOriginalWbLoginFromTeilnehmer($pTeilnehmer);
    $changedTnFields = $this->_getRelevantChangedLoginFields($wbl, $pTeilnehmer->oldStammhoererData);
    
    if (!in_array('email', $changedTnFields)) {
      return true;
    } else {
      return LoginApi::checkPassWord(PostOperations::getVarValue('wbl_oldpw'), $pLogin, $wbl->tnr);
    }
  }

  
  private function _isFormularValid($pTeilnehmer)
  {
    $parsedHeader = $this->exportadapter->parseScriptsForDatamodulArray($this->sight->header, array($pTeilnehmer));

    $pflichtFelder = \Kufer\Web\Classes\Addfunctions\PflichtfelderOperations::getPflichtFelder('', $parsedHeader->result, $parsedHeader->nonIfVarNames);
    $pflichtFeldFehler = array();
    foreach ($pflichtFelder as $pflichtFeldNameInSicht => $pflichtFeldGemapped) {
      $val = $pTeilnehmer->getVarValue($pflichtFeldGemapped);
      if ($val === '' || ($val instanceof Kommunikation && $val->getVarValue('wert') === '')) {
        
        $pflichtFeldFehler[$pflichtFeldGemapped] = \Kufer\Web\Classes\Addfunctions\PflichtfelderOperations::getPflichtfeldFehlerMeldung(
          $pflichtFeldNameInSicht,
          $parsedHeader->result,
          $parsedHeader->nonIfVarNames
        );
        if ($pflichtFeldNameInSicht == $pflichtFeldFehler[$pflichtFeldGemapped]) {
          
          $tmp = \Kufer\Web\Classes\Addfunctions\PflichtfelderOperations::getPflichtfeldFehlerMeldung(
            $pflichtFeldGemapped,
            $parsedHeader->result,
            $parsedHeader->nonIfVarNames
          );
          if ($tmp != '') {
            $pflichtFeldFehler[$pflichtFeldGemapped] = $tmp;
          }
        }
      }
    }

    $validierungsFehler = $pTeilnehmer->checkValidierung();
    if (count($validierungsFehler) > 0) {
      $tmp = array();
      foreach ($validierungsFehler as $fehler) {
        $tmp[$fehler] = \Kufer\Web\Classes\Addfunctions\PflichtfelderOperations::getPflichtfeldFehlerMeldung(
          $fehler,
          $parsedHeader->result,
          $parsedHeader->nonIfVarNames
        );
      }
      $validierungsFehler = $tmp;
    }

    if (count($pflichtFeldFehler) > 0 || count($validierungsFehler) > 0) {
      $this->exportadapter->setFehler($pflichtFeldFehler, $validierungsFehler);
      $message = '<p class="warnungpflichtfelder">Bitte überprüfen Sie folgende Datenfelder auf Vollständigkeit und Format:</p>'
              . $this->formatMessage($pflichtFeldFehler, $validierungsFehler);
      $this->exportadapter->addSightInfo('status', $message);

      return false;
    }

    return true;
  }

  
  private function _teilnehmerValuesHaveChanged($pTeilnehmer)
  {
    
    $wbl = $this->_getOriginalWbLoginFromTeilnehmer($pTeilnehmer);
    $changedTnFields = $this->_getRelevantChangedLoginFields($wbl, $pTeilnehmer->oldStammhoererData);

    return count($changedTnFields) > 0;
  }

  
  private function processTnData($pTeilnehmerAry)
  {
    $tool0Settings = ToolSettingsAPI::getToolSettings(0);
    if ($tool0Settings->stammhoererLoginDatenAendernDirektInDb) {
      return $this->_aendereTnDatenDirektInDb($pTeilnehmerAry[0]);
    } else {
      return $this->_sendEmailAnEinrichtungUndTn($pTeilnehmerAry[0]);
    }
  }

  
  private function _aendereTnDatenDirektInDb($pTeilnehmer)
  {
    if (SessionOperations::isDmzBetrieb()) {
      $result = $this->_aendereTnDatenDmzBetrieb($pTeilnehmer);
      $tool0Settings = ToolSettingsAPI::getToolSettings(0);
      if ($result && $tool0Settings->stammhoererLoginDatenAendernEmailAuchWennDirekt) {
        if (!$this->_sendEmailAnEinrichtungUndTn($pTeilnehmer)) {
          Logger::logg("Der Teilnehmer $pTeilnehmer->name $pTeilnehmer->vorname hat seine persoenlichen Daten geaendert, aufgrund eines Fehlers wurde keine E-Mail an die Einrichtung versendet", 8070);
        }
      }
    
    
    
    }
    
    
    elseif (!SessionOperations::isReplikat()) {
      $result = $this->_andereTnDatenDirektBetrieb($pTeilnehmer);
    } else {
      Logger::logg(
        'Geänderte Stammhörerlogindaten können nur im Direkt- und DMZ-Betrieb direkt in die DB geschrieben werden - Mail versenden anstoßen',
        51
      );
      $result = $this->_sendEmailAnEinrichtungUndTn($pTeilnehmer);
    }

    return $result;
  }

  protected function afterSendChangesHook($pTeilnehmer)
  {
    
  }

  
  private function addStatus($pMessage, $pStatus = 'neutral')
  {
    $cssClass = 'wbl_status wbl_' . $pStatus;
    $message = '<div class="' . $cssClass . '">' . $pMessage . '</div>';
    $this->exportadapter->addSightInfo('status', $message);
  }

  private function restoreSession()
  {
    
    $xsrf = SessionOperations::getVarValueWTIntern('xsrf');
    $_SESSION = $this->sessionBackup;
    SessionOperations::setVarValueWTIntern('xsrf', $xsrf);
  }

  
  private function _aktualisiereDatenInSession($pTeilnehmer)
  {
    
    

    $wbl = $this->_getOriginalWbLoginFromTeilnehmer($pTeilnehmer);
    $changedTnFields = $this->_getRelevantChangedLoginFields($wbl, $pTeilnehmer->oldStammhoererData);
    foreach ($changedTnFields as $field) {
      $translatedFieldName = $this->translateStammhoererAttributToTn($field);
      $val = $pTeilnehmer->getVarValue($translatedFieldName);
      if ($val instanceof Kommunikation) {
        $val = $pTeilnehmer->getVarValueEx($translatedFieldName, 'kommunikation');
      }
      SessionOperations::setVarValueWk('w_' . $translatedFieldName, $val);
      if ($field === 'strasse') {
        SessionOperations::setVarValueWk('w_nurstrasse', $pTeilnehmer->getVarValue('nurstrasse'));
        SessionOperations::setVarValueWk('w_nurhausnr', $pTeilnehmer->getVarValue('nurhausnr'));
      } elseif ($field === 'ort') {
        SessionOperations::setVarValueWk('w_nurort', $pTeilnehmer->getVarValue('nurort'));
        SessionOperations::setVarValueWk('w_nurplz', $pTeilnehmer->getVarValue('nurplz'));
      } elseif ($field === 'gebjahr') {
        SessionOperations::setVarValueWk('w_gebdat', DateTimeOperations::getGebDatForGebjahr($val, '####'));
      }
    }

    if ($this->newLoginName !== '') {
      SessionOperations::setVarValueWkWb('w_login', $this->newLoginName);
    }
  }

  private function translateStammhoererAttributToTn($varname)
  {
    switch (StringOperations::strtolower($varname)) {
      default: return $varname;
      case 'gebdatum': return 'gebdat';
      case 'kontonr': return 'konto';
      case 'kontoinh': return 'kontoinhaber';
    }
  }

  
  protected function _getOriginalWbLoginFromTeilnehmer($pTeilnehmer)
  {
    $dbwLogin = new DBWorkWBLogins();
    $wbloginLeer = $dbwLogin->getNewObject();

    return $dbwLogin->translateTN2WBLogin($pTeilnehmer, $wbloginLeer);
  }

  
  private function _aendereTnDatenDmzBetrieb($pTeilnehmer)
  {
    $wbl = $this->_getOriginalWbLoginFromTeilnehmer($pTeilnehmer);
    try {
      $changedTnFields = $this->_getRelevantChangedLoginFields($wbl, $pTeilnehmer->oldStammhoererData);
      $changedTnFields = $this->adaptDependingFields($changedTnFields, $wbl);
      
      $abgleichAPI = new AbgleichAPI();
      if (count($changedTnFields) > 0) {
        $dbwLogin = new DBWorkWBLogins();
        Logger::logg('Logindaten ändern: ' . print_r($changedTnFields, true), 1);

        if (RequestOperations::isDefined('tedit_nurhausnr')) {
          $wbl->nurStrasseHausnrToStrasse();
        }
        if (RequestOperations::isDefined('tedit_strasse')) {
          $wbl->strasseToNurStrasseHausnr();
        }
        if (RequestOperations::isDefined('tedit_nurort')) {
          $wbl->nurPlzOrtToOrt();
        }
        if (RequestOperations::isDefined('tedit_ort')) {
          $wbl->ortToNurPlzOrt();
        }

        $message = XMLNode::getXmlNodeOnlySpecificFields(
          $wbl,
          'teilnehmer',
          array_merge($changedTnFields, array('tnr')),
          true
        );
        $message = $this->addOtherDependingFieldsDirectlyToXmlNode($changedTnFields, $wbl, $message);
        $nutzlast = new Nutzlast($message);
        $info = new stdClass();
        $info->loginMitMailAendern = StammhoererAPI::isEmailPairedWithLogin();
        $nutzlast->addNode(XMLNode::getXmlNodeFromObj($info, 'info', array(), array('loginMitMailAendern')));

        $abgleichAPI->sendeNachricht(
          AbgleichAPI::ABGLEICH_STAMMHOERER_TN_DATEN_AKTUALISIEREN,
          $nutzlast
        );

        
        $mysqlLogin = $dbwLogin->getByTnr($wbl->tnr);
        $oldEmail = $mysqlLogin->getVarValue('email');
        $mailChanged = false;
        foreach ($changedTnFields as $field) {
          $mysqlLogin->setValue2Var($field, $wbl->getVarValue($field));
          if ($field === 'email') {
            $mailChanged = true;
          }
        }

        $this->handleEmailChange($mailChanged, $oldEmail, $wbl->getVarValue('email'), $mysqlLogin);

        $dbwLogin->updateStammhoerer($mysqlLogin, true, true);
      }
      $result = true;
    } catch (Exception $e) {
      Logger::logg('Fehler beim Aktualisieren der Stammhörerdaten über die DMZ: ' . $e->getMessage(), 50);
      if ($e->errorType == AbgleichApiResult::WEB_WBLOGINS_LOGIN_BEREITS_VORHANDEN) {
        Logger::logg('Sollte Login mitändern, aber gleichnamiger Login schon vorhanden: ' . $pTeilnehmer->getVarValueEx(
          'email',
          'kommunikation'
        ), 51);
      }
      $result = false;
    }

    return $result;
  }

  
  private function addOtherDependingFieldsDirectlyToXmlNode($pChangedTnFields, $pWbl, $xml)
  {
    if (in_array('erm_grund', $pChangedTnFields)) {
      $ermProz = 0;
      $ermEnde = DEFAULTDATE;
      if ($pWbl->erm_grund > 0) {
        $ermProz = AnmeldungOperations::getErmProz($pWbl->erm_grund);
        $ermEnde = ConstantOperations::getDefaultDateErmEnde();
      }
      $xml->addChild(new XMLNode('erm_proz', $ermProz));
      $xml->addChild(new XMLNode('erm_ende', $ermEnde));
    }

    return $xml;
  }

  
  protected function _getRelevantChangedLoginFields($pWbl1, $pWbl2)
  {
    $varcount = $pWbl1->getVarCount();
    $changedTnFields = array();
    $fieldsToIgnore = $this->_getIgnoreFieldsForDmzUpdate();
    for ($i = 1; $i < $varcount; $i++) {
      $varname = $pWbl1->getVarName($i);
      if (!in_array($varname, $fieldsToIgnore)) {
        if (trim($pWbl1->getVarValue($varname)) != trim($pWbl2->getVarValue($varname))) {
          if ($varname === 'erm_grund') {
            if ((trim($pWbl1->getVarValue($varname)) == '' && trim($pWbl2->getVarValue($varname)) == 0)
                    || (trim($pWbl1->getVarValue($varname)) == 0 && trim($pWbl1->getVarValue($varname)) == '')) {
            } else {
              $changedTnFields[] = $varname;
            }
          } elseif ($varname === 'gebdatum') {
            if ((trim($pWbl1->getVarValue($varname)) == '' && trim($pWbl2->getVarValue($varname)) == DEFAULTDATE)
                    || (trim($pWbl1->getVarValue($varname)) == DEFAULTDATE && trim($pWbl1->getVarValue($varname)) == '')) {
            } else {
              $changedTnFields[] = $varname;
            }
          } elseif ($varname === 'gebjahr') {
            if ((trim($pWbl1->getVarValue($varname)) == '' && trim($pWbl2->getVarValue($varname)) == '1899')
                    || (trim($pWbl1->getVarValue($varname)) == '1899' && trim($pWbl1->getVarValue($varname)) == '')) {
            } else {
              $changedTnFields[] = $varname;
            }
          } else {
            $changedTnFields[] = $varname;
          }
        }
      }
    }

    
    $editFieldsInSight = \Kufer\Web\Classes\Addfunctions\PflichtfelderOperations::getEditedVars('tedit', $this->sight->header, ConstantOperations::getVarnamenMapping());

    
    
    $editFieldsInSight = $this->addDependentVarnames($editFieldsInSight);

    
    
    
    if (in_array('acceptdat_tnb', $changedTnFields)) {
      $editFieldsInSight[] = 'acceptdat_tnb';
    }

    return array_intersect($changedTnFields, $editFieldsInSight);
  }

  private function adaptDependingFields($pChangedTnFields, $pWbl)
  {
    if (in_array('gebjahr', $pChangedTnFields)) {
      $pChangedTnFields[] = 'gebdatum';
      $pWbl->gebdatum = DateTimeOperations::getGebDatForGebjahr($pWbl->gebjahr, '####');
    }

    return $pChangedTnFields;
  }

  
  private function addDependentVarnames($pEditFieldsInSight)
  {
    $map = array('gebdat' => 'gebdatum', 'nurstrasse' => 'strasse', 'nurort' => 'ort');
    foreach ($pEditFieldsInSight as $sightField) {
      if (isset($map[$sightField])) {
        $pEditFieldsInSight[] = $map[$sightField];
      }
    }

    return $pEditFieldsInSight;
  }

  private function handleEmailChange($pMailChanged, $pOldEmail, $pNewEmail, $pMysqlLogin)
  {
    if ($pMailChanged && StammhoererAPI::isEmailPairedWithLogin() && $pOldEmail === SessionOperations::getCurrentWbLogin()) {
      
      $dbwWbLPa = new DBWorkWBLoginsPasswords();
      if ($dbwWbLPa->existsByLogin(SessionOperations::getCurrentWbLogin())) {
        $dbwWbLPa->changeLogin(SessionOperations::getCurrentWbLogin(), $pNewEmail);
      }
      
      $pMysqlLogin->setValue2Var('login', $pNewEmail);

      
      
      
      $this->newLoginName = $pNewEmail;
    }
  }

  private function _getIgnoreFieldsForDmzUpdate()
  {
    return array('login', 'password', 'salt', 'pw_geandert', 'nurplz', 'nurort', 'nurstrasse',
        'nurhausnr', 'sepa_mandatam', 'newsl_erlaubt', 'newsl_bemerk', 'bankbez', 'blz', 'kontoinh',
        'kontonr', 'bic', 'iban', 'pw_geaendert', 'id', 'dse_unterschrieben_weg');
  }

  
  private function _andereTnDatenDirektBetrieb($pTeilnehmer)
  {
    Logger::logg('Stammhörer Daten ändern im Direktbetrieb: Fallback auf E-Mail', 12);

    return $this->_sendEmailAnEinrichtungUndTn($pTeilnehmer);
  }

  
  private function _sendEmailAnEinrichtungUndTn($pTeilnehmer)
  {
    
    
    $thisCopy = clone($this);

    if ($this->_sendEMailAnEinrichtung($thisCopy)) {
      $tool0Settings = ToolSettingsAPI::getToolSettings(0);
      
      if ($tool0Settings->stammhoererDatenAendernEmailAuchAnTn) {
        $email = $pTeilnehmer->email->wert;
        $validierung = ValidierungWB::getInstance();

        if (trim($email) != '' && $validierung->isValidVar('email', $email) === true) {
          $this->_sendEMailAnTeilnehmer($thisCopy, $email);
        }
      }

      return true;
    } else {
      return false;
    }
  }

  private function getWbLoginData($pLogin)
  {
    $dbw = new DBWorkWBLogins();
    $login = $dbw->getByLogin($pLogin);

    return LoginApi::getWbLogin($login);
  }

  private function formatMessage($pPflichtFeldFehler, $pValidierungsFehler)
  {
    
    $result = '<div class="warnungpflichtfelder wbl_register"><ul class="warnungpflichtfelder wbl_datenaendern"> ';

    $varsWithoutMessage = array();
    foreach ($pPflichtFeldFehler as $key => $var) {
      if (!in_array($key, $varsWithoutMessage)) {
        $result .= '<li class="warnungpflichtfelder">' . CleanOperations::cleanStringForHtml($var) . '</li>';
      }
    }
    foreach ($pValidierungsFehler as $key => $var) {
      if (!in_array($key, $varsWithoutMessage)) {
        $result .= '<li class="warnungvalidierung">' . CleanOperations::cleanStringForHtml($var) . '</li>';
      }
    }
    $result .= '</ul></div>';

    return $result;
  }

  
  private function _isBrowserReload()
  {
    return SessionOperations::getVarValueWk('stammhoererDatenAendernAlreadySend', false);
  }

  
  private function _sendEMailAnEinrichtung($pDataMenu)
  {
    $allgsettings = AllgSettingsAPI::getAllgSettings();
    $tool0Settings = ToolSettingsAPI::getToolSettings(0);
    $emailadr = ($tool0Settings->stammhoererDatenAendernEmailAddresse == '') ? $allgsettings->vhsemail : $tool0Settings->stammhoererDatenAendernEmailAddresse;
    
    
    static::$isCopy = false;
    $content = $pDataMenu->getsightcomplete(441, new ExpStammhoerer());

    
    $titleContenAry = $this->_getEMailTeile($content, 'Änderung von Stammhörerdaten gewünscht');
    $title = $titleContenAry['title'];
    $content = $titleContenAry['content'];

    return $this->_sendEMail($emailadr, $content, $title);
  }

  
  private function _sendEMailAnTeilnehmer($pDataMenu, $pEmail)
  {
    
    
    static::$isCopy = true;
    $content = $pDataMenu->getsightcomplete(441, new ExpStammhoerer());

    
    $titleContentAry = $this->_getEMailTeile($content, 'Änderung Ihrer Stammhörerdaten');
    $title = $titleContentAry['title'];
    $content = $titleContentAry['content'];

    return $this->_sendEMail($pEmail, $content, $title);
  }

  
  protected function _getEMailTeile($pContent, $pDefault)
  {
    $title = StringOperations::getBestaetigungSubject($pContent);
    $content = StringOperations::getBestaetigungBody($pContent);

    if ($title == '') {
      $title = $pDefault;
    }

    
    return array('title' => $title, 'content' => $content);
  }

  public function getEMailTeile($pContent, $pDefault)
  {
    return $this->_getEMailTeile($pContent, $pDefault);
  }

  
  protected function _sendEMail($pEMail, $pContent, $pTitle)
  {
    $email = new smtpMail();
    $email->SetVar2Value('to', $pEMail);
    $email->SetVar2Value('subject', $pTitle);
    $email->SetVar2Value('contenttype', SMTP_CONTENTTYPE_HTML);
    $email->SetVar2Value('body', $pContent);

    return $email->sendMail();
  }

  
  private function _showFormular()
  {
    $login = SessionOperations::getCurrentWbLogin();
    $oldData = $this->getWbLoginData($login);

    $tool0Settings = ToolSettingsAPI::getToolSettings(0);
    $this->exportadapter->setSightInfo('emailAendernErfordertPwEingabe', ($tool0Settings->stammhoererLoginEmailAendernErfordertPwEingabe ? '1' : '0'));
    $this->exportadapter->setSightInfo('origemail', $oldData->email);
    $this->exportadapter->setSightInfo('oldpw', PostOperations::getVarValue('wbl_oldpw', ''));

    $this->dataarrayheader[0]->oldStammhoererData = $oldData;

    $this->showheader();
    $this->showbody();
    $this->showfooter();
  }

  
  private function _showBestaetigungsSeite()
  {
    $this->shownocolumn();
  }

  
  private function _showNichtEingeloggt()
  {
    $this->shownodata();
  }

  
  public static function checkIfIsCopy()
  {
    return static::$isCopy;
  }

  
  public static function checkIfEmailSendSuccessful()
  {
    return SessionOperations::getVarValueWk('stammhoererDatenAendernEmailSendSuccessful', true);
  }

  
  public function stammhoererEMailVorbereitenUndSenden()
  {
    $login = SessionOperations::getCurrentWbLogin();
    $sessionNeuFuellen = false;
    $this->dataarrayFuellen($login, $sessionNeuFuellen);
    $this->_sendEMailAnEinrichtung(clone($this));
  }
}