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

namespace Kufer\KuferTools\Allgemein\EinstellungenUser\AendereEinstellungen;

class AendereEinstellungenUseCase extends \Kufer\KuferTools\Basis\UseCase\ToolUseCase
{
  public function __construct($request)
  {
    parent::__construct($request, new AendereEinstellungenResponse());
  }

  public function hasAccess($pToolSectionId = null)
  {
    if (!$this->request->isXsrfOk && !$this->request->isRefresh) {
      return false;
    }

    $tool0settings = \ToolSettingsAPI::getToolSettings(0);

    return $tool0settings->showUserSettings;
  }

  public static function getToolId()
  {
    return -5;
  }

  public static function getToolSectionId()
  {
    return -5;
  }

  public function action()
  {
    $success = null;

    if (!$this->request->isRefresh) {
      $user = $this->getUser();
      $userSettings = $this->getChangedUserSettings($user);
      $success = $this->saveUserSettings($userSettings, $user);
    }

    return $this->getResponse($success);
  }

  protected function getResponse($success)
  {
    $this->handleResponseStrategies();

    if (!is_null($success)) {
      if ($success) {
        $this->response->statusMeldungen->addStatusMessageObj(\Kufer\KuferTools\Utils\StatusMessages\StatusMessage::getSuccessMessageObj('Ihre Einstellungen wurden erfolgreich geändert.'));
      } else {
        $this->response->statusMeldungen->addStatusMessageObj(\Kufer\KuferTools\Utils\StatusMessages\StatusMessage::getErrorMessageObj('Beim Ändern Ihrer Einstellungen ist ein Fehler aufgetreten. Bitte versuchen Sie es später erneut oder wenden Sie sich an uns.'));
      }
    }

    return $this->response;
  }

  
  private function getUserSettings($user)
  {
    $dbwUserSettings = new \DBWorkWebUsersSettings(1, true);

    return $dbwUserSettings->getSettingsByUser($user->getIdentifier());
  }

  
  private function saveUserSettings($userSettings, $user)
  {
    try {
      $dbwUserSettings = new \DBWorkWebUsersSettings(1, true);
      $userId = $dbwUserSettings->InsertOrUpdateUserSettings($userSettings, $user->getIdentifier());

      return !$userId->isEmpty(false);
    } catch (\Exception $e) {
      \Logger::logg('KuferTools/Allgemein/EinstellungenUser/AendereEinstellungen: Beim Ändern der Einstellungen in der Datenbank ist ein Fehler aufgetreten: ' . $e->getMessage(), 200);

      return false;
    }
  }

  private function getChangedUserSettings($user)
  {
    $userSettings = $this->getUserSettings($user);

    

    
    $userSettings->setValue2Var('sort_kurse', $this->request->sortKurse);
    $userSettings->setValue2Var('sort_kurse_asc', $this->request->sortKurseAsc);
    $userSettings->setValue2Var('sort_kurse2', $this->request->sortKurse2);
    $userSettings->setValue2Var('sort_kurse2_asc', $this->request->sortKurse2Asc);
    if (\DBWorkBASysSettings::isKornwestheimEbz()) {
      $userSettings->setValue2Var('zsa_moeglichst_wenige_emails', $this->request->zsaMoeglichstWenigeEmails);
    }
    if (\SessionOperations::isCurrentUserMitveranstalter()) {
      $userSettings->setValue2Var('zahlung_info', $this->request->zahlungInfo);
      $userSettings = $this->handleImageUploadAndDelete($userSettings);
    }

    return $userSettings;
  }

  
  protected function handleImageUploadAndDelete($pUserSettings)
  {
    if ($this->request->mailAnhangLoeschen) {
      $pUserSettings->mail_anhang = '';
      $pUserSettings->mail_anhang_dateiname = '';
    }

    $fieldname = 'mailAnhang';
    if (isset($_FILES[$fieldname]) && file_exists($_FILES[$fieldname]['tmp_name']) && is_uploaded_file($_FILES[$fieldname]['tmp_name'])) {
      $tool0Settings = \ToolSettingsAPI::getToolSettings(0);
      $formname4Anhang = 'anhang';

      $blackOrWhiteListAry = \UploadOperations::getBlackOrWhiteListAry();
      $illegalFileNames = \UploadOperations::getIllegalUploadFilenames($_FILES, $blackOrWhiteListAry, $formname4Anhang);

      if (count($illegalFileNames) > 0) {
        $uploadfileAry = \UploadOperations::getIllegalFileAttachments($_FILES, $illegalFileNames);
        $this->response->statusMeldungen->addStatusMessageObj(\Kufer\KuferTools\Utils\StatusMessages\StatusMessage::getErrorMessageObj($uploadfileAry[0]->errorMsg));

        return $pUserSettings;
      }

      $maxFileSize = \ConstantOperations::getMaxFileSize4Upload($tool0Settings->fileUploadMaxFileSize);
      if ($_FILES[$fieldname]['size'] > $maxFileSize) {
        $message = 'Fehler beim Hochladen der Datei ' . $_FILES[$fieldname]['name'] . ': die Datei ist zu groß - maximal ' . \MathOperations::getBytesUmrechnung($maxFileSize) . ' erlaubt.';
        $this->response->statusMeldungen->addStatusMessageObj(\Kufer\KuferTools\Utils\StatusMessages\StatusMessage::getErrorMessageObj($message));

        return $pUserSettings;
      }

      $pUserSettings->mail_anhang = $this->getDokumentBase64($_FILES[$fieldname]['tmp_name']);
      $pUserSettings->mail_anhang_dateiname = $_FILES[$fieldname]['name'];
    }

    return $pUserSettings;
  }

  protected function getDokumentBase64($pFilePath)
  {
    $dataString = file_get_contents($pFilePath);

    return base64_encode($dataString);
  }

  protected function getResponseStrategies()
  {
    return array(
        new \Kufer\KuferTools\Utils\ResponseStrategies\ResponseMitRahmen($this)
    );
  }
}

class AendereEinstellungenRequest
{
  public $sortKurse;
  public $sortKurseAsc;
  public $sortKurse2;
  public $sortKurse2Asc;
  public $zsaMoeglichstWenigeEmails;
  public $zahlungInfo;
  public $mailAnhangLoeschen;
}

class AendereEinstellungenResponse extends \Kufer\KuferTools\Basis\UseCase\ToolResponse
{
}