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

 



class NewsTotalSight extends AktuelleSight
{
  
  public $aktuellesAry;
  
  public $nextsection_id;
  
  public $kommentarsection_id;
  
  public $menu;

  
  
  

  
  
  public $rinsertnews;
  public $rnewsbearbeiten;
  public $rdelnews;
  public $newsproseite;
  

  public $showTitel = true;
  
  public $showDeleteWarning;

  public function __construct()
  {
    $this->newsproseite = 10;
    parent::__construct();
  }

  
  public function initiate()
  {
    parent::initiate();
    $this->htmlop = new HTMLOperations();
    $this->dbwuser = new DBWorkUser(1, true);
    $this->dbwaktuelleswt = new DBWorkAktuellesWT(1, true);
    
    
    $this->dbwaktuelleswt->newSearch();
    $this->dbwaktuelleswt->fromobject->gueltigBis = DateTimeOperations::getDateNow();
    $this->menu = new Menu();
    
    $this->nextsection_id = 267;
    $this->kommentarsection_id = 268;
    
    
    $userid = SessionOperations::getUserIdentifier();
    $this->rinsertnews = \SecurityOperations::privilegAllowed($userid, \ToolsAPI::TOOL_AKTUELLES, '266.0.1');
    $this->rnewsbearbeiten = \SecurityOperations::privilegAllowed($userid, \ToolsAPI::TOOL_AKTUELLES, '266.0.2');
    $this->rdelnews = \SecurityOperations::privilegAllowed($userid, \ToolsAPI::TOOL_AKTUELLES, '266.0.3');
    
    $this->rkommentar = 0;
    
    $this->objsettings = ToolSettingsAPI::getToolSettings(\ToolsAPI::TOOL_AKTUELLES);
    $this->newsproseite = ($this->objsettings->newsproseite > 0 ? $this->objsettings->newsproseite : 5);
  }

  
  public function getOptvalue0()
  {
    $this->selusercnt += 2;

    return array('<option value=-1 ' . (in_array(-1, $this->usergroup) ? 'selected' : '') . '>-Alle Benutzergruppen-</option>',
    '<option value="0" ' . (in_array(0, $this->usergroup) ? 'selected="selected"' : '') . '>Allgemeine Infos</option>');
  }

  
  public function sortAkt($akt1, $akt2)
  {
    $objsettings = ToolSettingsAPI::getToolSettings(\ToolsAPI::TOOL_AKTUELLES);
    
    if ($objsettings->sortnewsasc) {
      $up = -1;
      $down = 1;
    }
    
    else {
      $up = 1;
      $down = -1;
    }
    
      if ($objsettings->sortnews == 'erstell_datetime' || $objsettings->sortnews == 'erstell_datum') {
        $datumMitUhrzeit1 = $akt1->erstell_datetime;
        $datumMitUhrzeit2 = $akt2->erstell_datetime;
      }
    
    else {
      $datumMitUhrzeit1 = $akt1->letzte_bearbeitung_datetime;
      $datumMitUhrzeit2 = $akt2->letzte_bearbeitung_datetime;
    }

    $dtop = new DateTimeOperations();

    return ($dtop->isDateTimeBefore($datumMitUhrzeit1, $datumMitUhrzeit2)) ? $up : $down;
  }

  

  
  public function createSight()
  {
    
    parent::createSight();
    
    $this->_getActualNewsAry();

    
    $this->sight .= '<div class = "newsheader">';
    
    if ($this->showDeleteWarning) {
      $manipulationsText = 'Sie haben keine Berechtigung, diese Nachricht zu löschen oder diese Nachricht wurde bereits gelöscht. Bitte unterlassen Sie das Manipulieren der Seite. ' . BR_WT
              . 'Falls sich der Fehler ohne eine Manipulation wiederholen sollte, setzen Sie sich bitte mit uns in Verbindung.';

      $this->sight .= HTMLOperations::getWarningBox($manipulationsText, 'Warnung vor Manipulation');
    }
    $this->showNewsListinHeader();
    $this->sight .= '</div>';  


    

    $this->sight .= '<img class="alleklappen" beiklick="zuklappen" src="images/zuklappen.gif" alt="alle Nachrichten ausblenden">';
    $this->sight .= '<label class="klappenlabel">alle Nachrichten ausblenden</label>';

    
    
    $this->sight .= '<div class="newsinhalt">';
    $this->showNewsSelectForm();
    $firstelem = true;
    $countNews = 0;


    foreach ($this->aktuellesAry as $aktuelles) {
      if ($countNews >= $this->newsproseite) {
        break;
      }

      if ($countNews == 1) {
        $clear = ' clear';
      } else {
        $clear = '';
      }
      $this->sight .= '<div class="aktnewborder' . $clear . '"></div>';

      $this->showNews($aktuelles, $firstelem);
      $firstelem = false;
      

      $bearbeitenallowed = false;
      if (SessionOperations::isAdmin() || $this->rnewsbearbeiten > 0 || $this->rdelnews > 0 || $this->rkommentar > 0) {
        
        
        
        if ($aktuelles->autor_id == $this->userid || SessionOperations::isAdmin()) {
          $bearbeitenallowed = true;
        }
      }

      if ($bearbeitenallowed) {
        $this->sight .= '<div class="newsbuttons">';

        $this->sight .= $this->menu->getUserLink(
          '<img src="layout/button_edit.gif"  title="Bearbeiten" alt="Bearbeiten">',
          'usertools.php?tool_id=16&toolsection_id=' . CleanOperations::cleanInt($this->nextsection_id) . '&editNews=1&news_id=' . CleanOperations::cleanInt($aktuelles->id),
          $this->rnewsbearbeiten,
          false
        );

        $xsrf = new Xsrf();
        $xsrfKey = $xsrf->generateKey4Action('wt_aktuelles_delete', $aktuelles->id);
        $this->sight .= $this->menu->getUserLink(
          '<img src="layout/button_delete.gif" title="Löschen" alt="Löschen" id="' . CleanOperations::cleanInt($aktuelles->id) . '_' . CleanOperations::cleanStringForHtml($xsrfKey) . '">',
          '#loeschen_dialog_div',
          $this->rdelnews,
          false,
          false,
          'loeschen_button_a'
        );

        $this->sight .= '</div>';
      } 

      $this->sight .= '</div>';
      $countNews++;
    }

    $this->sight .= '</div>';

    
    $this->sight .= '<div id="loeschen_dialog_div">';
    $this->sight .= '<span>Möchten Sie diesen Nachrichteneintrag wirklich löschen?</span>';
    $this->sight .= '</div>';
  }

  

  
  protected function showNews($pNews, $pFirstelem = false)
  {
    $objsettings = ToolSettingsAPI::getToolSettings(\ToolsAPI::TOOL_AKTUELLES);
    
    if (!empty($pNews->autor_id)) {
      $autor = $this->dbwuser->getUser($pNews->autor_id);
      
      if ($autor->isAdmin()) {
        $von = ' vom ';
        $autorname = 'Administrator';
      } else {
        $von = ' von ';
        $autorname = $autor->name . ((!empty($autor->vorname)) ? ' ' . $autor->vorname : '');
      }
    }
    $vonautorstr = '';
    if (!empty($autorname)) {
      $vonautorstr = $von . $autorname;
    }

    if (isset($pNews->dnr_privatnachricht) && $pNews->dnr_privatnachricht != '0') {
      $class = 'aktnew_titel_pn';
    } else {
      $class = 'aktnew_titel';
    }
    
    if ($pFirstelem) {
      $aktnew = 'aktnew aktnew_first';
    } else {
      $aktnew = 'aktnew';
    }
    $this->sight .= '<div class="' . $aktnew . '">'
         . '<a name="' . CleanOperations::cleanStringForHtml($pNews->id) . '"></a>';

    $this->sight .= '<div class="' . $class . '">' . CleanOperations::cleanStringContainingHtml($pNews->titel) . '</div>';

    $this->sight .= '<div class="aktnew_inhalt">' . CleanOperations::cleanStringContainingHtml($pNews->inhalt) . '</div>' . BR
         
         . '<div class="aktnew_erstellt">Erstellt am ' . CleanOperations::cleanStringForHtml($pNews->getVarValue('erstell_date'))
         . ' um ' . CleanOperations::cleanStringForHtml($pNews->getVarValue('erstell_time')) . CleanOperations::cleanStringForHtml($vonautorstr) . BR . '</div>';
    if ($objsettings->showbengrp) {
      $this->sight .= '<div class="aktnew_gruppe">Benutzergruppe(n): ' . CleanOperations::cleanStringForHtml(static::_convertUserGroupToName($pNews->benutzergruppe)) . '</div>';
    }


    if (strcmp($pNews->letzte_bearbeitung_datetime, $pNews->erstell_datetime) != 0) {
      $this->sight .= '<div class="aktnew_bearb">Dieser Nachrichteneintrag wurde zuletzt';
      if (!empty($pNews->letzter_bearbeiter)) {
        if ($pNews->letzter_bearbeiter === 'Administrator') {
          $von = ' vom ';
        } else {
          $von = ' von ';
        }
        $this->sight .= CleanOperations::cleanStringForHtml($von . $pNews->letzter_bearbeiter);
      }
      $this->sight .= ' am ' . CleanOperations::cleanStringForHtml($pNews->getVarValue('letzte_bearbeitung_date')) . ' um ' . CleanOperations::cleanStringForHtml($pNews->getVarValue('letzte_bearbeitung_time'));
      $this->sight .= ' bearbeitet' . '</div>';
    } 

    
  }

  

  
  protected function showNewsSelectForm()
  {
    $showButton = false;
    $selusergroup = $this->_getSelOptionUserGroup();
    $fachary = $this->_getFachbereiche();
    $this->sight .= '<div class="newsselect">'; 
    $this->sight .= '<form class="news_aktform" name="aktnews" action="usertools.php?tool_id=' . CleanOperations::cleanInt($this->toolid) . '&toolsection_id=' . CleanOperations::cleanInt($this->sightid) . '" method="post">';
    if ($this->selusercnt >= 1) {
      $this->sight .= '<div class="usergroupselect"><label id="l_benutzergruppe" for="benutzergruppe">Zeige Nachrichten für:</label>'
      . $this->htmlop->CreateSelectTag($selusergroup, 'benutzergruppe[]', '', 'benutzergruppe', $this->selusercnt, '', true) . '</div>';
      $showButton = true;
    }
    if (count($fachary) >= 1) {
      $this->sight .= '<div class="fachbereichselect"><label id="l_fachbereich" for="fachbereich">Eingeschränkt für Fachbereich:</label>'
           . '<select id="fachbereich" size="3" name="fachbereich">';
      $selected = (isset($_REQUEST['fachbereich']) && $_REQUEST['fachbereich'] == '-1' || !isset($_REQUEST['fachbereich'])) ? 'selected = "selected"' : '';
      $this->sight .= '<option value="-1" ' . $selected . '>-Alle Fachbereiche-</option>';
      $selected = (isset($_REQUEST['fachbereich']) && $_REQUEST['fachbereich'] == '0') ? 'selected = "selected"' : '';
      $this->sight .= '<option value="0" ' . $selected . '>Allgemeines für alle Fachb.</option>';

      foreach ($fachary as $fachber) {
        $selected = (isset($_REQUEST['fachbereich']) && $fachber->kennz == $_REQUEST['fachbereich']) ? 'selected = "selected"' : '';
        $this->sight .= '<option value="' . CleanOperations::cleanStringForHtml($fachber->kennz) . '" ' . $selected . '>' . CleanOperations::cleanStringForHtml($fachber->text) . '</option>';
      }
      $this->sight .= '</select>'
             . '</div>';
      $showButton = true;
    }
    if ($showButton) {
      $this->sight .= '<input type="image" src="layout/button_auswahl_aktivieren.gif" alt="Filter übernehmen" id="news_filter_uebernehmen">';
    }
    $this->sight .= '</form></div>'; 
  }

  

  
  protected function showNewsListinHeader()
  {
    $this->sight .= '<div class="newsinsert">';
    $this->sight .= $this->menu->getUserLink(
      '<img src="images/buchen.gif"  class="smallformat" title="Neue Nachricht einfügen" alt="Neue Nachricht einfügen">'
          . 'Neue Nachricht einfügen',
      'usertools.php?tool_id=16&toolsection_id=' . CleanOperations::cleanInt($this->nextsection_id),
      $this->rinsertnews,
      false
    );
    $this->sight .= '</div>';

    $this->sight .= '<div class ="newslist">';
    if (empty($this->aktuellesAry)) {
      $this->sight .= HTMLOperations::getInfoBox('Für Ihre aktuelle Anfrage wurden keine Nachrichteneinträge gefunden.', 'Keine Nachrichteneinträge gefunden');
    } else {
      if ($this->showTitel) {
        $this->sight .= '<span class="newslist">aktuellste Nachrichten:</span>';
      }
      $this->sight .= '<ul>';
      $countNews = 0;
      foreach ($this->aktuellesAry as $aktuelles) {
        if ($countNews >= $this->newsproseite) {
          break;
        }
        $countNews++;

        if ($aktuelles->dnr_privatnachricht != '0') {
          $class = 'aktnew_pn';
        } else {
          $class = 'aktnew';
        }

        $this->sight .= '<li class="' . $class . '"><a href="#' . CleanOperations::cleanStringForHtml($aktuelles->id) . '">' . CleanOperations::cleanStringContainingHtml($aktuelles->titel) . '</a></li>';
      }
      $this->sight .= '</ul>';
    }
    $this->sight .= '</div>'; 
  }

  

  
  private function _getActualNewsAry()
  {
    $fachbereiche = (isset($_REQUEST['fachbereich'])) ? $_REQUEST['fachbereich'] : -1;

    
    
    if (isset($_REQUEST['pn']) && $_REQUEST['pn'] == true) {
      
      
      $this->aktuellesAry = $this->dbwaktuelleswt->getPrivateNews();
    } else {
      
      $this->aktuellesAry = $this->dbwaktuelleswt->getAktuelles4User($fachbereiche, $this->usergroup);
    }

    
    usort($this->aktuellesAry, array(__CLASS__, 'sortAkt'));
  }

  
}