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

namespace Kufer\KuferTools\Allgemein\Aktuelles\BearbeiteNews;

use Kufer\KuferTools\Allgemein\Aktuelles\Utils\NewsHelper as NewsHelper;

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

  public static function getToolId()
  {
    return 16;
  }

  public static function getToolSectionId()
  {
    return 267;
  }

  public function hasAccess($pToolSectionId = null)
  {
    if (!parent::hasAccess()) {
      return false;
    }
    if (!$this->isRechtAllowed('266.0.2')) { 
      return false;
    }
    
    $news = $this->getNews();
    $user = $this->getUser();
    if ($user->id != $news->autor_id && !\SessionOperations::isAdmin()) {
      return false;
    }

    return true;
  }

  public function action()
  {
    return $this->getResponse();
  }

  protected function getResponse()
  {
    $this->handleResponseStrategies();
    $this->response->showFachbereiche = NewsHelper::showFachbereiche();
    $this->response->fachbereiche = NewsHelper::getFachbereiche();
    $this->response->benutzergruppen = $this->getBenutzergruppen();
    $this->response->news = $this->getNews();
    $this->response->newsFachbereiche = $this->getNewsFachbereiche();
    $this->getGueltigBisDatum();

    return $this->response;
  }

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

  private function getNews()
  {
    static $news = null;
    if (is_null($news)) {
      $dbwAktuelles = new \DBWorkAktuellesWT(1, true);
      $news = $dbwAktuelles->getAktuelles($this->request->news_id);
    }

    return $news;
  }

  private function getNewsFachbereiche()
  {
    $dbwAktuelles = new \DBWorkAktuellesWT(1, true);

    return $dbwAktuelles->getFachbereicheFromAktuelles($this->request->news_id);
  }

  private function getBenutzergruppen()
  {
    $benAry = array();
    $user = $this->getUser();
    $isAdmin = $user->isAdmin();
    if ($isAdmin || $user->ben > 0) {
      $benAry[] = \KURZ_MITARBEITER;
    }
    if ($isAdmin || $user->dnr > 0) {
      $benAry[] = \KURZ_DOZENT;
    }
    if ($isAdmin || $user->tnr > 0) {
      $benAry[] = \KURZ_TEILNEHMER;
    }
    if ($isAdmin || $user->anr > 0) {
      $benAry[] = \KURZ_HAUSMEISTER;
    }

    return $benAry;
  }

  private function getGueltigBisDatum()
  {
    if (\DateTimeOperations::isDateTimeEmptyOrDefault($this->response->news->gueltigBis)) {
      $this->response->gueltigBisChkd = false;
      $this->response->gueltigBis = \DateTimeOperations::getNextDate(\DateTimeOperations::getDateNow(), 14);
    } else {
      $this->response->gueltigBis = $this->response->news->gueltigBis;
      $this->response->gueltigBisChkd = true;
    }
  }
}

class BearbeiteNewsRequest
{
  public $news_id;
}

class BearbeiteNewsResponse extends \Kufer\KuferTools\Basis\UseCase\ToolResponse
{
  public $user;
  public $menuPunkte = array();
  public $gueltigBis;
  public $showFachbereiche;
  public $fachbereiche;
  public $benutzergruppen;
  public $gueltigBisChkd = false;

  public $news;
  public $newsFachbereiche;
}