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

namespace webbasys\includee\api;

 
 class SeitenwahlAPI
 {
   protected const SEITENWAHLANZ = 9;

   
   public const ANZPROSEITE = 15;

   
   public $anzahlproSeite = 0;

   
   public $html;

   
   public $seitenWahlAnz = 0;
   public $aktSeite;          
   public $anzSeiten;         

   
   public function __construct($pAnzproSeite, $pSeitenWahlAnz = self::SEITENWAHLANZ)
   {
     if (is_numeric($pSeitenWahlAnz) && $pSeitenWahlAnz >= 2 && $pSeitenWahlAnz <= self::SEITENWAHLANZ) {
       $this->seitenWahlAnz = $pSeitenWahlAnz;
     } else {
       $this->seitenWahlAnz = self::SEITENWAHLANZ;
     }
     
     
     if ($pAnzproSeite > 0) {
       $this->anzahlproSeite = $pAnzproSeite;
     } else {
       $this->anzahlproSeite = self::ANZPROSEITE;
     }
     $this->html = new \HTMLOperations();
   }

   
   public function getSeitenwahlParamsFromReq($pSeitwahlId, $pDirection)
   {
     $seitenwahl = array('firstid' => '', 'forward' => true);
     \SessionOperations::setVarValueSuche('seitenwahlerror', 0);
     
     if (!isset($_REQUEST['seitenr'])) {
       
       if (!empty($pSeitwahlId)) {
         $seitenwahl['firstid'] = $pSeitwahlId;
         $seitenwahl['forward'] = ($pDirection == 'forward');
       } else {
         
         
         $seitenwahl['firstid'] = '';
         $seitenwahl['forward'] = true;  
       }
     }
     
    
    
    else {    
      
      if ($_REQUEST['seitenr'] >= 1 && $_REQUEST['seitenr'] <= \SessionOperations::getVarValueSuche('seitenanzahl')) {
        if ($_REQUEST['seitenr'] == 1) {
          $seitenindary = \SessionOperations::getVarValueSuche('seitenindary');
          $seitenwahl['firstid'] = $seitenindary['anf'][$_REQUEST['seitenr']]->value;
          $seitenwahl['forward'] = false;
        } else {
          $seitenindary = \SessionOperations::getVarValueSuche('seitenindary');
          $seitenwahl['firstid'] = $seitenindary['end'][$_REQUEST['seitenr'] - 2]->value;
          $seitenwahl['forward'] = true;
        }
      }
      
      
      else {
        \SessionOperations::setVarValueSuche('seitenwahlerror', 1);
        if (!empty($pSeitwahlId)) {
          $seitenwahl['firstid'] = $pSeitwahlId;
          $seitenwahl['forward'] = ($pDirection == 'forward');
        } else {
          
          
          
          $seitenwahl['firstid'] = '';
          $seitenwahl['forward'] = true;  
        }
      }
    }

     return $seitenwahl;
   }

   
   public function setSeitenParams($pCountBefore, $pCountBehind)
   {
     $this->aktSeite = floor($pCountBefore / $this->anzahlproSeite) + 1;
     
     $this->anzSeiten = ceil(($pCountBefore + $pCountBehind) / $this->anzahlproSeite) + 1;
   }

   
   public function getSeitenwahlList($pKursBegonnen = '', $pAuchVolle = '', $pHrefAddition = '')
   {
     
     
     $seiteindary = \SessionOperations::getVarValueSuche('seitenindary');
     if (!isset($seiteindary['anf']) || !isset($seiteindary['end'])) {
       return '';
     }
     
     if ($this->anzSeiten > 1) {
       
       
       if ($this->seitenWahlAnz % 2 == 0) {
         $seitenvor = floor($this->seitenWahlAnz / 2);
         $seitennach = floor($this->seitenWahlAnz / 2) - 1;
       } else {
         $seitenvor = floor(($this->seitenWahlAnz - 1) / 2);
         $seitennach = floor(($this->seitenWahlAnz - 1) / 2);
       }
       
       
       
       
       
       
       if (($seitenvor >= $this->aktSeite) && ($seitennach >= $this->anzSeiten - $this->aktSeite + 1)) {
         $seitenvor = $this->aktSeite - 1;
         $seitennach = $this->anzSeiten - $this->aktSeite;
       } elseif ($seitenvor >= $this->aktSeite) {
         $diff = $seitenvor - $this->aktSeite + 1;
         $seitenvor = $this->aktSeite - 1;
         $seitennach = min($seitennach + $diff, $this->anzSeiten - $this->aktSeite);
       } elseif ($seitennach >= $this->anzSeiten - $this->aktSeite + 1) {
         $diff = $seitennach - $this->anzSeiten + $this->aktSeite;
         $seitennach = $this->anzSeiten - $this->aktSeite;
         $seitenvor = min($seitenvor + $diff, $this->aktSeite - 1);
       }
       
       
       
       
       
       
       
       
       

       $strLink = '';
       if (KW_BOOTSTRAP) {
         $strLink = '<ul class="seiteblaettern pagination">';
       } else {
         $strLink = "<span class='seiteblaettern'> Seiten: ";
       }
       for ($k = 0;$k <= $seitenvor + $seitennach;$k++) {
         
         $ausg_seite = $this->aktSeite - $seitenvor + $k;
         $i = $ausg_seite - 1; 
         if ($ausg_seite < 1) {
           $strLink .= '';
         } elseif (($ausg_seite == 1) && ($ausg_seite != $this->aktSeite)) {
           if (!KW_BOOTSTRAP) {
             $strLink .= $this->getSeitenBlaetternLink($ausg_seite, 'back', $seitennach, $pKursBegonnen, $pAuchVolle, $pHrefAddition);
           } else {
             if (KW_BOOTSTRAP4) {
               $strLink .= '<li class="page-item">' . $this->getSeitenBlaetternLink($ausg_seite, 'back', $seitennach, $pKursBegonnen, $pAuchVolle, $pHrefAddition) . '</li>';
             } else {
               $strLink .= '<li>' . $this->getSeitenBlaetternLink($ausg_seite, 'back', $seitennach, $pKursBegonnen, $pAuchVolle, $pHrefAddition) . '</li>';
             }
           }
         }
         
         elseif ($ausg_seite == $this->aktSeite) {
           if (!KW_BOOTSTRAP) {

             
             $strLink .= '<span class="blaetternindex">' . \CleanOperations::cleanInt($ausg_seite) . '</span>'
                    . ($ausg_seite != ($this->aktSeite + $seitennach) ? \CleanOperations::cleanStringContainingHtml(SEITEN_BLAETTERN_DELIMITER) : '');
           } else {
             
             if (KW_BOOTSTRAP4) {
               $strLink .= '<li class="page-item active"><a class="page-link">' . \CleanOperations::cleanInt($ausg_seite) . '</a></li>';
             } else {
               $strLink .= '<li class="active disabled"><a>' . \CleanOperations::cleanInt($ausg_seite) . '</a></li>';
             }
           }
         } 
         else {
           if (!KW_BOOTSTRAP) {
             $strLink .= $this->getSeitenBlaetternLink($ausg_seite, 'vor', $seitennach, $pKursBegonnen, $pAuchVolle, $pHrefAddition);
           } else {
             if (KW_BOOTSTRAP4) {
               $strLink .= '<li class="page-item">' . $this->getSeitenBlaetternLink($ausg_seite, 'vor', $seitennach, $pKursBegonnen, $pAuchVolle, $pHrefAddition) . '</li>';
             } else {
               $strLink .= '<li>' . $this->getSeitenBlaetternLink($ausg_seite, 'vor', $seitennach, $pKursBegonnen, $pAuchVolle, $pHrefAddition) . '</li>';
             }
           }
         } 
       }
      if (!KW_BOOTSTRAP) {
        $strLink .= "</span>\n";
      } else {
        $strLink .= "</ul>\n";
      }
     }
    else { 
      $strLink = '';
    }

     return $strLink;
   }

   
   public function getSeitenBlaetternLink($pSeitind, $pAction, $pAdd, $pKursBegonnen = '', $pAuchVolle = '', $pHrefAddition = '')
   {
     $urlParamNav = new \URLParameterNavigation();
     $urlParamNav->suchesetzen = '';
     $urlParamNav->browse = '';
     
    if ($pKursBegonnen !== '') { 
      $urlParamNav->begonneneKurse = $pKursBegonnen;
    }
     if ($pAuchVolle !== '') {
       $urlParamNav->auchVolle = $pAuchVolle;
     }
     $retVal = '';
     $seitenindary = \SessionOperations::getVarValueSuche('seitenindary');
     if ($pAction === 'back') {
       
       
       
       
       
       if ($pSeitind == 1) {
         $urlParamNav->knr = '';
         
         
         
         
         
         $actary = array();
       } else {
         $urlParamNav->knr = $seitenindary['anf'][$pSeitind]->value;
         $actary = array('backward');
       }
     } 
     else {
       $urlParamNav->knr = $seitenindary['end'][$pSeitind - 2]->value;
       $actary = array('forward');
     }
     $urlParamNav->implodeSettings();
     if (KW_BOOTSTRAP && KW_BOOTSTRAP4) {
       $retVal .= '<a class="blaetternindex page-link" href="' . \CleanOperations::cleanStringForHtml(INDEXSCRIPT) . '?urlparameter=' . \CleanOperations::cleanStringForHtml($urlParamNav->getStreamWith(array('browse'), $actary) . $pHrefAddition)
               . '">' . \CleanOperations::cleanInt($pSeitind) . '</a>'
               . (($pSeitind != ($this->aktSeite + $pAdd)) && !KW_BOOTSTRAP ? \CleanOperations::cleanStringContainingHtml(SEITEN_BLAETTERN_DELIMITER) : '');
     } else {
       $retVal .= '<a class="blaetternindex" href="' . \CleanOperations::cleanStringForHtml(INDEXSCRIPT) . '?urlparameter=' . \CleanOperations::cleanStringForHtml($urlParamNav->getStreamWith(array('browse'), $actary) . $pHrefAddition)
               . '">' . \CleanOperations::cleanInt($pSeitind) . '</a>'
               . (($pSeitind != ($this->aktSeite + $pAdd)) && !KW_BOOTSTRAP ? \CleanOperations::cleanStringContainingHtml(SEITEN_BLAETTERN_DELIMITER) : '');
     }

     return $retVal;
   }

   

   
   public function getSeitenwahlForm()
   {
     $str = '';
     if ($this->anzSeiten > 1) {
       if (isset($_REQUEST['seitenr']) && ($_REQUEST['seitenr'] != 0)) {
         $value = $_REQUEST['seitenr'];
       } else {
         $value = '';
       }
       $str = '<div class="suchseite">'
                . '<form class = "seiteform" action = "' . \CleanOperations::cleanStringForHtml($this->getSeitenSuchAction()) . '" method = "post">'
                . '<div class ="suchlabel">Gehe zu Seite:</div>'
                . '<input class = "suchseite" type = "text" name = "seitenr" value = "' . \CleanOperations::cleanStringForHtml($value) . '">'
                . '<input class = "suchsubmit" type = "submit" value = "Los">'
              . '</form></div>';
     }

     return $str;
   }

   
   public function getSeitenSuchAction()
   {
     
     
     
     
     $urlParamNav = new \URLParameterNavigation();
     $urlParamNav->suchesetzen = '';
     $urlParamNav->implodeSettings();

     return INDEXSCRIPT . '?urlparameter=' . $urlParamNav->stream;
   }

   
   public function getSeitenWahlLink($pTyp, $pKursBegonnen = '', $pAuchVolle = '')
   {
     
     if ($this->anzSeiten <= 1) {
       return '';
     }
     $urlParamNav = new \URLParameterNavigation();
     $urlParamNav->suchesetzen = '';
     $urlParamNav->browse = '';
     if ($pKursBegonnen !== '') {  
       $urlParamNav->begonneneKurse = $pKursBegonnen;
     }
     if ($pAuchVolle !== '') {
       $urlParamNav->auchVolle = $pAuchVolle;
     }
     $retVal = '';
     $linkausg = false;
     $seitenindary = \SessionOperations::getVarValueSuche('seitenindary');
     if ($pTyp === 'first') {
       
       
       
       
       
       
       
       $urlParamNav->knr = '';
       
       
       
       
       
       $actary = array();
       if ($this->aktSeite > 1) {
         $linkausg = true;
       }
     } else { 
       $urlParamNav->knr = $seitenindary['end'][$this->anzSeiten - 2]->value;
       $actary = array('forward');
       if ($this->aktSeite < $this->anzSeiten) {
         $linkausg = true;
       }
     }
     $urlParamNav->implodeSettings();
     
     if ($linkausg) {
       $retVal .= INDEXSCRIPT . '?urlparameter=' . $urlParamNav->getStreamWith(array('browse'), $actary);
     }

     return $retVal;
   }

   

   
   public function getSeitenEndButtons($pTyp, $pKursBegonnen = '', $pAuchVolle = '')
   {
     $seitenEndLink = $this->getSeitenWahlLink($pTyp, $pKursBegonnen, $pAuchVolle);
     $htmlOp = new \HTMLOperations();
     $layoutDir = \Kufer\Web\Classes\KwResourceLocator::getInstance()->locateLayoutDirRelative();
     switch ($pTyp) {
      case 'first':
        if ($seitenEndLink != '') {
          $btn_first = $htmlOp->CreateImageTag(
            $layoutDir . 'button_ersteseite.gif',
            'Erste Seite, Schnelltaste E',
            '',
            'blaettern',
            'title="Erste Seite"'
          );

          return "<span class='seitenwahl_erste'>"
                 . "<a class='blaetterntasten' href='" . \CleanOperations::cleanStringForHtml($seitenEndLink) . "' accesskey='E'>"
                 . $btn_first
                 . '</a>'
                 . "</span>\n";
        } else {
          return '';
        }
        
      case 'last':
        if ($seitenEndLink != '') {
          $btn_last = $this->html->CreateImageTag(
            $layoutDir . 'button_letzteseite.gif',
            'Letzte Seite, Schnelltaste L',
            '',
            'blaettern',
            'title="Letzte Seite"'
          );

          return "<span class='seitenwahl_letzte'>"
                 . "<a class='blaetterntasten' href='" . \CleanOperations::cleanStringForHtml($seitenEndLink) . "' accesskey='L'>"
                 . $btn_last
                 . '</a>'
                 . "</span>\n";
        } else {
          return '';
        }
        
      default:
        return '';
    }
   }
 } 


class SeitenwahlAPISelf extends SeitenwahlAPI
{
  
  public function __construct($pAnzProSeite, $pSeitenWahlAnz = self::SEITENWAHLANZ)
  {
    parent::__construct($pAnzProSeite, $pSeitenWahlAnz);
  }

  
  public function getSeitenBlaetternLink($pSeitind, $pAction, $pAdd, $pKursBegonnen = '', $pAuchVolle = '', $pHrefAddition = '')
  {
    $urlParamNav = new \URLParameterNavigation();
    $urlParamNav->suchesetzen = '';
    $urlParamNav->browse = '';
    $urlParamNav->blkeep = 'true';
    $retVal = '';
    $seitenindary = \SessionOperations::getVarValueSuche('seitenindary');
    if ($pAction === 'back') {
      $urlParamNav->blid = $seitenindary['anf'][$pSeitind]->value;
      $actary = array('backward');
    } else {
      $urlParamNav->blid = $seitenindary['end'][$pSeitind - 2]->value;
      $actary = array('forward');
    }
    $urlParamNav->implodeSettings();
    if (KW_BOOTSTRAP && KW_BOOTSTRAP4) {
      $retVal .= '<a class="blaetternindex page-link" href="' . \CleanOperations::cleanStringForHtml(INDEXSCRIPT) . '?urlparameter=' . \CleanOperations::cleanStringForHtml($urlParamNav->getStreamWith(array('browse'), $actary))
                . '">' . \CleanOperations::cleanInt($pSeitind) . '</a>' . (($pSeitind != ($this->aktSeite + $pAdd)) && !KW_BOOTSTRAP ? \CleanOperations::cleanStringContainingHtml(SEITEN_BLAETTERN_DELIMITER) : '');
    } else {
      $retVal .= '<a class="blaetternindex" href="' . \CleanOperations::cleanStringForHtml(INDEXSCRIPT) . '?urlparameter=' . \CleanOperations::cleanStringForHtml($urlParamNav->getStreamWith(array('browse'), $actary))
                . '">' . \CleanOperations::cleanInt($pSeitind) . '</a>' . (($pSeitind != ($this->aktSeite + $pAdd)) && !KW_BOOTSTRAP ? \CleanOperations::cleanStringContainingHtml(SEITEN_BLAETTERN_DELIMITER) : '');
    }

    return $retVal;
  }

  
  public function getSeitenWahlLink($pTyp, $pKursBegonnen = '', $pAuchVolle = '')
  {
    
    if ($this->anzSeiten <= 1) {
      return '';
    }
    $urlParamNav = new \URLParameterNavigation();
    $urlParamNav->suchesetzen = '';
    $urlParamNav->browse = '';
    $urlParamNav->blkeep = 'true';
    $retVal = '';
    $linkausg = false;
    $seitenindary = \SessionOperations::getVarValueSuche('seitenindary');
    if ($pTyp === 'first') {
      $urlParamNav->blid = $seitenindary['anf'][1]->value;
      $actary = array('backward');
      if ($this->aktSeite > 1) {
        $linkausg = true;
      }
    } else { 
      $urlParamNav->blid = $seitenindary['end'][$this->anzSeiten - 2]->value;
      $actary = array('forward');
      if ($this->aktSeite < $this->anzSeiten) {
        $linkausg = true;
      }
    }
    $urlParamNav->implodeSettings();
    if ($linkausg) {
      $retVal .= INDEXSCRIPT . '?urlparameter=' . $urlParamNav->getStreamWith(array('browse'), $actary);
    }

    return $retVal;
  }

  
  public function getSeitenSuchAction()
  {
    
    
    
    
    $urlParamNav = new \URLParameterNavigation();
    $urlParamNav->suchesetzen = '';
    $urlParamNav->blkeep = 'true';
    $urlParamNav->implodeSettings();

    return INDEXSCRIPT . '?urlparameter=' . $urlParamNav->stream;
  }
}