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


class KurssuchAPI extends SuchAPI
{
  
  public function __construct($erlaubeTeilnehmerSuche = true)
  {
    $this->fromsearchdm = array(
      'search_kursbeginnzeitraum_von' => 'beginn_dat',
      'search_kursendezeitraum_von' => 'ende_dat',
      'search_kategorie' => 'kategorie',
      'search_kursnummernbereich_von' => 'id',
      'search_kurstitel' => 'kurzbez',
      'search_sonderkategorie' => 'sonderkategorie',
      'search_stichworte' => 'stichworte',
      'search_mktext' => 'kursort',
      'search_bezeichn' => 'aussenstelle',
      'search_fachbereich' => 'fachbereich',
      'search_wochentage_suche' => 'wochentage_suche',
      'search_dozent' => 'hauptdozent->namevorname',
      'search_kursausfall' => 'kursausfall',
      'search_only_elearning_kurse' => 'elearningKursID',
      'search_blak_kriterien' => 'blak_kriterien',
      'search_other_kriterien' => 'other_kriterien',
      'search_semester' => 'semester',
      'search_kursabschluss' => 'kursabschluss',
      
      
      'search_kursstatus' => 'kursstatus',
      'search_kursort_bezirk' => 'kursort_bezirk',
      'search_kursort_gemeinde' => 'kursort_gemeinde',
      'search_veranstalter_bezirk' => 'veranstalter_bezirk',
      'search_veranstalter_gemeinde' => 'veranstalter_gemeinde',
      'search_kursauswahl1' => 'kursauswahl1',
      'search_kursauswahl2' => 'kursauswahl2',
      'search_kursauswahl3' => 'kursauswahl3',
      'search_kursauswahl4' => 'kursauswahl4',
      'search_kursauswahl5' => 'kursauswahl5',
      'search_kursauswahl6' => 'kursauswahl6',
      'search_kursauswahl7' => 'kursauswahl7',
      'search_kursauswahl8' => 'kursauswahl8',
      'search_kursauswahl9' => 'kursauswahl9',
      'search_kursauswahl10' => 'kursauswahl10',
      'search_kursauswahl11' => 'kursauswahl11',
      'search_kursauswahl12' => 'kursauswahl12',
      'search_kursauswahl13' => 'kursauswahl13',
      'search_kursauswahl14' => 'kursauswahl14',
      'search_kursauswahl15' => 'kursauswahl15',
      'search_kursauswahl16' => 'kursauswahl16',
      'search_zielgruppe' => 'kurs_zielg',
      'search_ma_planend' => 'ma_planend_name',
      'search_kurstage_gestern_und_heute' => 'kurstage_gestern_und_heute',
      
      'search_kurstage_gestern_und_heute_dozent' => 'kurstage_gestern_und_heute_dozent',
      
      'search_kurstage_aktiv_lehrend_dozent' => 'kurstage_aktiv_lehrend_dozent',
      
      
      
      
    );
    if ($erlaubeTeilnehmerSuche) {
      $this->fromsearchdm['search_teilnehmer'] = 'teilnehmername';
    }

    $this->tosearchdm = array(
      'search_kursbeginnzeitraum_bis' => 'beginn_dat',
      'search_kursendezeitraum_bis' => 'ende_dat',
      'search_kursnummernbereich_bis' => 'id'
    );
  }

  
  public function getKursSearchLink()
  {
    return $this->getLinkToCurrentToolSection();
  }

  
  public function getKursSearchLinkExt()
  {
    return $this->getLinkToCurrentToolSection() . '&searchkursext=1';
  }

  
  public function getSearchDiv($pAction = '', $beachtesprachsettings = true)
  {
    $str = '<div id="kurssuche">';
    $str .= '<form method="post" action="' . CleanOperations::cleanStringForHtml($pAction) . '" id="suchformDiv">';
    
    
    
    
    
    $str .= '<div id="kurssuche_erweitert">'
              . $this->_getExtendenKursSearchDiv()
                      . '</div>';
    $str .= '</form>';
    $str .= '</div>';

    if ($beachtesprachsettings) {
      $sprachsettings = new SprachSettingsObject();
      $tmp = array(
          'Kurstitel' => CleanOperations::cleanStringForHtml($sprachsettings->KursZusammengesetzt['Singular']['Nominativ']) . 'titel',
          'Kursnummer' => CleanOperations::cleanStringForHtml($sprachsettings->KursZusammengesetzt['Singular']['Nominativ']) . 'nummer',
          'Kursort' => CleanOperations::cleanStringForHtml($sprachsettings->Kursort['Singular']['Nominativ']),
          'Kursbeginn' => CleanOperations::cleanStringForHtml($sprachsettings->KursZusammengesetzt['Singular']['Nominativ']) . 'beginn');

      foreach ($tmp as $key => $value) {
        $str = str_replace($key, $value, $str);
      }
    } 

    return $str;
  }

  

  
  protected function _getExtendenKursSearchDiv()
  {
    $suchsicht = new KurssucheFormularSightExtendedDiv();
    $suchsicht->toolid = $_REQUEST['tool_id'];
    $suchsicht->sightid = 50;
    
    
    $suchsicht->userid = SessionOperations::getUserID();
    $suchsicht->createSight();

    return $suchsicht->sight;
  }

  

  
  public function getSearchParamsFromReq($pTool, $pSearchName = 'searchkurs')
  {
    $suchRequest = parent::getSearchParamsFromReq($pTool, $pSearchName);

    if (array_key_exists('search_kursnummernbereich_von', $this->fromsearchdm)
      && array_key_exists('search_kursnummernbereich_bis', $this->tosearchdm)) {
      
      if (isset($suchRequest['ssearch_kursnummernbereich_von_' . $pTool]) && !isset($suchRequest['ssearch_kursnummernbereich_bis_' . $pTool])) {
        $suchRequest['ssearch_kursnummernbereich_bis_' . $pTool] = '';
      }
      $suchRequest = self::getSearchParamsWildcard($pTool, $suchRequest);
    }
    
    if (isset($_REQUEST['search_only_elearning_kurse'])) {
      $suchRequest['ssearch_only_elearning_kurse_' . $pTool] = RequestOperations::isDefined('search_only_elearning_kurse');
    }
    
    
    

    


    return $suchRequest;
  }

  private static function getSearchParamsWildcard($pTool, $pSuchRequest)
  {
    
    if (isset($pSuchRequest['ssearch_kursnummernbereich_von_' . $pTool]) && $pSuchRequest['ssearch_kursnummernbereich_von_' . $pTool] != ''
            && (!isset($pSuchRequest['ssearch_kursnummernbereich_bis_' . $pTool]) || $pSuchRequest['ssearch_kursnummernbereich_bis_' . $pTool] == '')
            && !self::isSingleKnrWildcardRequest($pTool, $pSuchRequest)) {
      
      
      $pSuchRequest['ssearch_kursnummernbereich_bis_' . $pTool] = $pSuchRequest['ssearch_kursnummernbereich_von_' . $pTool] . 'ZZ';
    }

    return $pSuchRequest;
  }

  
  private static function isSingleKnrWildcardRequest($pTool, $pSuchRequest)
  {
    $vonIsWildCard = ((isset($pSuchRequest['ssearch_kursnummernbereich_von_' . $pTool]) && StringOperations::strpos($pSuchRequest['ssearch_kursnummernbereich_von_' . $pTool], '?') !== false)
       || (isset($pSuchRequest['ssearch_kursnummernbereich_von_' . $pTool]) && StringOperations::strpos($pSuchRequest['ssearch_kursnummernbereich_von_' . $pTool], '*') !== false));
    if (RequestOperations::isDefined('search_kursnummernbereich_bis')) {
      
      $result = $vonIsWildCard && (RequestOperations::getVarValue('search_kursnummernbereich_bis') === '');
    } else {
      $result = $vonIsWildCard;
    }

    return $result;
  }

  public static function setKnrBereichToSearchRequest($pToolStr, $pSuchRequest, $pKnrVon, $pKnrBis)
  {
    $pSuchRequest['ssearch_kursnummernbereich_von_' . $pToolStr] = $pKnrVon;
    $pSuchRequest['ssearch_kursnummernbereich_bis_' . $pToolStr] = $pKnrBis;

    return self::getSearchParamsWildcard($pToolStr, $pSuchRequest);
  }

  public static function setDatumBereichToSearchRequest($pToolStr, $pSuchRequest, $pDatumVon, $pDatumBis)
  {
    $pSuchRequest['ssearch_kursbeginnzeitraum_von_' . $pToolStr] = $pDatumVon;
    $pSuchRequest['ssearch_kursbeginnzeitraum_bis_' . $pToolStr] = $pDatumBis;

    return $pSuchRequest;
  }

  public static function setKursortBezirkToSearchRequest($pToolStr, $pSuchRequest, $pBezirk)
  {
    $pSuchRequest['ssearch_kursort_bezirk_' . $pToolStr] = $pBezirk;

    return $pSuchRequest;
  }

  public function getFromObjectBySession($dm, $pTool, $pWildCardReplace = true)
  {
    $dm = parent::getFromObjectBySession($dm, $pTool, $pWildCardReplace);

    

    
    if (\DBWorkBASysSettings::isSalzburgBildungswerk()) {
      $dm->stichwortFindetSchlagwort = true;
    }

    $bezirk = SessionOperations::getVarValueWTIntern('ssearch_kursort_bezirk_' . $pTool, '');
    if (trim($bezirk) != '') {
      if (!isset($dm->dbwkursorte)) {
        $dm->dbwkursorte = new DBWorkKursorte(1, true);
      }
      if (!isset($dm->dbwkursorte->fromobject)) {
        $dm->dbwkursorte->newSearch();
      }
      $dm->dbwkursorte->fromobject->bezirk = $bezirk;
    }

    $gemeinde = SessionOperations::getVarValueWTIntern('ssearch_kursort_gemeinde_' . $pTool, '');
    if (trim($gemeinde) != '') {
      if (!isset($dm->dbwkursorte)) {
        $dm->dbwkursorte = new DBWorkKursorte(1, true);
      }
      if (!isset($dm->dbwkursorte->fromobject)) {
        $dm->dbwkursorte->newSearch();
      }
      $dm->dbwkursorte->fromobject->gemeinde = $gemeinde;
    }

    $veranstalterBezirk = SessionOperations::getVarValueWTIntern('ssearch_veranstalter_bezirk_' . $pTool, '');
    if (trim($veranstalterBezirk) != '') {
      if (!isset($dm->dbwDozentenVeranstalter)) {
        $dm->dbwDozentenVeranstalter = new DBWorkDozenten(1, true);
      }
      if (!isset($dm->dbwDozentenVeranstalter->fromobject)) {
        $dm->dbwDozentenVeranstalter->newSearch();
      }
      $dm->dbwDozentenVeranstalter->fromobject->bezirk = '%' . $veranstalterBezirk;
    }

    $veranstalterGemeinde = SessionOperations::getVarValueWTIntern('ssearch_veranstalter_gemeinde_' . $pTool, '');
    if (trim($veranstalterGemeinde) != '') {
      if (!isset($dm->dbwDozentenVeranstalter)) {
        $dm->dbwDozentenVeranstalter = new DBWorkDozenten(1, true);
      }
      if (!isset($dm->dbwDozentenVeranstalter->fromobject)) {
        $dm->dbwDozentenVeranstalter->newSearch();
      }
      $dm->dbwDozentenVeranstalter->fromobject->gemeinde = '%' . $veranstalterGemeinde;
    }

    return $dm;
  }
}