<?php

/*
  Vorlagenseite für Standard-Artikel.
  Diese Seite erzeugt anhand diverser Variablen und Text- bzw. Grafikabschnitte eine standardisierte Darstellung.
  Diese Seite ist eine reine php-Seite und wird durch eine reine Text-Seite in dokuwiki- und xml-ähnlicher Syntax aufgerufen.
*/
//###### Lade die aktuelle Datei in eine Variable
$pageContent = file_get_contents(phpConvertPageToFilesystemPath(htmlspecialchars($_GET["id"])));
$pageData[] = array();
//###### Setze den Pointer auf das letzte Array-Elelment
end($pageData);
$pageDataKey = key($pageData);
// ********************
// Variablen bestimmen
// ********************
//###### URL zur Anzeige von Bildern über http/https
$dokuwikiMediaUrl = 'https://' . $_SERVER['HTTP_HOST'] . dirname($_SERVER['PHP_SELF']) . '/lib/exe/fetch.php?media=';
//###### Falls ein oder mehrere Bilder verwendet werden, muss der DIV benannt werden
$imageCounter = 0;
// ********************
// Variablen auslesen
// ********************
//###### Extrahiere den relevanten Inhalt für die Bestimmung der Variablen
$substrStartPosition = strpos($pageContent, '<variables>') + strlen('<variables>');
$substrStopPosition  = strpos($pageContent, '</variables>');
$pageVariables = ltrim(rtrim(substr($pageContent, $substrStartPosition, ($substrStopPosition - $substrStartPosition))));
//###### Teile den Variablenstring in einen Array und verwende den Endmarker als Trenner
$pageVariablesSplit = preg_split('/<\/var>/i', $pageVariables, 0, PREG_SPLIT_NO_EMPTY);
//###### Ermittle aus jedem gefundenen Inhaltsabschnitt den Variablennamen und den Wert
foreach ($pageVariablesSplit as $currentVariable) {
  preg_match('/name="(.*?)"/i', $currentVariable, $matchingVariableNames);
  preg_match('/>(.*?)$/i', $currentVariable, $matchingVariableValues);
  //Füge die Variablen dem Array pageData in der Dimension variables hinzu
  $pageData[$pageDataKey]['variables'][$matchingVariableNames[1]]=$matchingVariableValues[1];
}
// ********************
// Fehlermeldung, falls keine CSS-Datei vorhanden ist
// ********************
  if ( (empty($pageData[$pageDataKey]['variables']['pageCssStyle'])) || (!(file_exists(phpConvertPageToFilesystemPath($pageData[$pageDataKey]['variables']['pageCssStyle']))))) {
    echo '<html>
      <div style="width: 100%; height: 100px; padding-top:100px; text-align: center; border: 2px solid black; font-weight: bold; font-size: 2vw;">
        Es existiert keine Style-Sheet-Datei
      </div>
    </html>';
    exit();
  }
// ********************
// CSS-Datei inkludieren
// ********************
  include(phpConvertPageToFilesystemPath($pageData[$pageDataKey]['variables']['pageCssStyle']));
// ********************
// Abschnitte auslesen
// ********************
//###### Extrahiere den relevanten Inhalt für die Bestimmung des Seiteninhalts
$substrStartPosition = strpos($pageContent, '<pagecontent>') + strlen('<pagecontent>');
$substrStopPosition  = strpos($pageContent, '</pagecontent>');
$pageContent = ltrim(rtrim(substr($pageContent, $substrStartPosition, ($substrStopPosition - $substrStartPosition))));
//###### Teile den Inhaltsstring in einen Array und verwende den Endmarker der Contextbox als Trenner
$pageContentSplit = preg_split('/<\/contentbox>/i', $pageContent, 0, PREG_SPLIT_NO_EMPTY);

//###### Ermittle aus jedem gefundenen Inhaltsabschnitt den Titel und den Inhalt
foreach ($pageContentSplit as $currentContentBox) {
  
  
  //###### Titel der ContentBox ermitteln
  if (preg_match('/title="(.*?)"/i', $currentContentBox, $matchingContentboxTitles) == 1) {
    $title = $matchingContentboxTitles[1];
  } else {
    $title = '';
  }
// ********************
//###### Fehlermeldung, falls mehr als eine ImageBox pro ContenBox existiert
// ********************
  if ( substr_count($currentContentBox, '</imagebox>') > 1) {
    echo '<html>
      <div style="width: 100%; height: 200px; padding-top:100px; text-align: center; border: 2px solid black; font-weight: bold; font-size: 2vw;">
        Fehler in Abschnitt ' . $title . ': Nur eine ImageBox pro Abschnitt!
      </div>
    </html>';
    exit();
  }
  //###### Display-Status der ContentBox ermitteln
  if (preg_match('/<contentbox.*?display="(.*?)"/i', $currentContentBox, $matchingContentboxTitles) == 1) {
    $display = $matchingContentboxTitles[1];
  } else {
    $display = '';
  }
  //###### Style eines möglichen Bildes ermitteln der ContentBox ermitteln
  $contentBoxValue = ltrim(rtrim(preg_replace('/(^.*?<contentbox.*?>)/s','',$currentContentBox)));
  //###### Füge den gefundenen Abschnittstitel dem Abschnittsarray contentbox hinzu und ermittle den KEY des neuen Array-Wertes
  $pageData[$pageDataKey]['contentboxes'][] = array(
    'title'         => $title,
    'display'       => $display
  );
  end($pageData[$pageDataKey]['contentboxes']);
  $pageDataContentBoxesKey = key($pageData[$pageDataKey]['contentboxes']);
  //###### Füge jeder Imagebox den Typ "image" hinzu
  $contentBoxValue = preg_replace('/<imagebox/i', '<imagebox class="image"', $contentBoxValue);
  //###### Ermittle Klasse (imagebox oder content), Typ und Style (später) der contentboxes
  $contentBoxParagraphsSplitByImage = preg_split('/(<imagebox|<\/imagebox>)/i', $contentBoxValue, 0, PREG_SPLIT_NO_EMPTY);
  
  foreach ($contentBoxParagraphsSplitByImage as $currentContentBoxParagraphContent) {
    //###### Welchen Display-Typ soll der Abschnitt haben
    if (preg_match('/display="(.*?)"/i', $currentContentBoxParagraphContent, $matchingDisplayTypes) == 1) {;
      $paragraphDisplayType=$matchingDisplayTypes[1];
    } else {
      $paragraphDisplayType='';
    }
    //###### Welchen Style-Typ soll der Abschnitt haben
    if (preg_match('/style="(.*?)"/i', $currentContentBoxParagraphContent, $matchingStyleTypes) == 1) {;
      $paragraphStyleType=$matchingStyleTypes[1];
    } else {
      $paragraphStyleType='';
    }
    //###### Welche Ausrichtung soll der Abschnitt haben
    if (preg_match('/align="(.*?)"/i', $currentContentBoxParagraphContent, $matchingAlign) == 1) {;
      $paragraphAlign=$matchingAlign[1];
    } else {
      $paragraphAlign='';
    }
    //###### Falls es sich bei dem Abschnittsteil um ein Image handelt
    if (strpos($currentContentBoxParagraphContent, 'class="image"')) {
    //###### Welche Images sollen ausgeschlossen werden (derzeit relevant für Gallerien und nur bei der Anzeige aller Bilder eines Verzeichnisses)
      if (preg_match('/exclude="(.*?)"/i', $currentContentBoxParagraphContent, $matchingImagesToExclude) == 1) {;
        $imagesToExclude=$matchingImagesToExclude[1];
      } else {
        $imagesToExclude='';
      }
      if (preg_match('/filter="(.*?)"/i', $currentContentBoxParagraphContent, $matchingSearchPattern) == 1) {;
        $searchPattern=$matchingSearchPattern[1];
      } else {
        $searchPattern='';
      }
      //###### Die Klasse der ContentBox festlegen (image)
      $paragraphClass="image";
      //###### String bereinigen, so dass nur noch <image></image>-Tags vorhanden sind
      $currentContentBoxParagraphContent = ltrim(rtrim(preg_replace('/(style=".*?">)/s','',$currentContentBoxParagraphContent)));
      //###### Den Inhalts-String der Images splitten (falls mehre Images übergeben wurden)
      $paragraphImageSplit = preg_split('/(<\/image>)/i', $currentContentBoxParagraphContent, 0, PREG_SPLIT_NO_EMPTY);
      //######Die Zwischenspeicher-Variable paragraphImages löschen
      unset($paragraphImages);
      //###### Das Array mit dem Image oder den Images durchlaufen
      foreach ($paragraphImageSplit as $currentParagraphImage) {
        //###### Eine eventuell vorhandene Beschreibung des Bildes (alt für alternate text) ermitteln
        if (preg_match('/alt="(.*?)"/i', $currentParagraphImage, $matchingImageDescriptions) ==1 ) {
          $imageDescription = $matchingImageDescriptions[1];
        } else {
          $imageDescription = "";
        }
        //###### Den Wert ermitteln, indem der Image-Tag entfernt wird
        $imagePathValue = ltrim(rtrim(preg_replace('/(^.*?<image.*?>)/s','',$currentParagraphImage)));
        $paragraphImages[] = array(
          'imageDescription' => $imageDescription,
          'imagePath'        => $imagePathValue
        );
      }
      $paragraphContent = $paragraphImages;
    //###### Falls es sich bei dem Abschnittsteil um Text handelt
    } else {
      //###### Die Klasse der ContentBox festlegen (text)
      $paragraphClass="text";
      //###### Den Typ der ContentBox festlegen
      $paragraphType="text";
      //###### Den Inhalt unverändert übernehmen (da kein Image)
      $paragraphContent = phpCleanUpVarString($currentContentBoxParagraphContent);

$matches = explode("\n",$paragraphContent); if (preg_match('/ \*/', end(array_values($matches)))) { $paragraphContent .= "\r\n"; }

    }
    //###### Füge die Art und den Inhalt (Text oder Bilder) der Abschnittsbereiche hinzu
    $pageData[$pageDataKey]['contentboxes'][$pageDataContentBoxesKey]['paragraph'][] = array(
        'class'     => $paragraphClass,
        'style'     => $paragraphStyleType,
        'align'     => $paragraphAlign,
        'display'   => $paragraphDisplayType,
        'exclude'   => $imagesToExclude,
        'filter'    => $searchPattern,
        'content'   => $paragraphContent
    );
  }
}
// ********************
// Bild-Daten sammeln und korrigieren
// ********************
  //###### Alle Bilder am angegebenen Pfad finden (hier Blog-Mediendateien)
  //###### zugehoeriges Medien-Verzeichnis ermitteln
  $filePathOfPageImages = str_replace('/pages/media/', '/media/', phpConvertNamespaceToFilesystemPath('media:' . $_GET["id"]));
  //###### das übergeordnete (Parent)-Verzeichnis des Medien-Verzeichnises ermitteln
  $filePathOfPageImagesSplit = explode(':', $_GET["id"]);
  end($filePathOfPageImagesSplit);
  array_pop($filePathOfPageImagesSplit);
  $wikiPathOfParentPageImages = implode(':', $filePathOfPageImagesSplit);
  $filePathOfParentPageImages = str_replace('/pages/media/', '/media/', phpConvertNamespaceToFilesystemPath('media:' . $wikiPathOfParentPageImages));
  //###### Erstelle den Pfad, falls er nicht existiert (vereinfacht das Hochladen von Bildern über den MediaManager)
  $filePathOfPageImagesSplit=explode('/', ltrim($filePathOfPageImages, '/'));
  $pathOfPageImagesBreadcrumb = '';
  foreach($filePathOfPageImagesSplit as $currentPathOfPageImagesSubfolder) {
    $pathOfPageImagesBreadcrumb .= '/' . $currentPathOfPageImagesSubfolder;
    if (!file_exists($pathOfPageImagesBreadcrumb)) {
        mkdir($pathOfPageImagesBreadcrumb);
    }
  }
// ********************
// JavaScript-Funktionen für Slideshow und FullScreen/Lightbox
// ********************
  //###### Lightbox-Funktionen-String erstellen (JavaScript)
  $jsLightboxFunctions = '
    <script language="javascript">
      function rotateimages(givenImageDiv, givenimage){
        document.getElementById("enlargedImage").setAttribute("src", "' . $dokuwikiMediaUrl . '" + givenimage);
        document.getElementById(givenImageDiv).setAttribute("src", "' . $dokuwikiMediaUrl . '" + givenimage);
        img = document.getElementById(givenImageDiv)
      }
      function fullscreen(givenImageDivId) {
        imgDiv = document.getElementById("fullscreenimage");
        imgDiv.style = "visibility: visible;";
        imgGiven = document.getElementById(givenImageDivId);
        document.getElementById("enlargedImage").setAttribute("src", imgGiven.src);
        imgEnlarged = document.getElementById("enlargedImage");
        if (imgEnlarged.naturalWidth > imgEnlarged.naturalHeight) {
          imgEnlarged.style = "width: 100%; height: auto; top: 50%; transform: translateY(-50%);";
        } else {
          imgEnlarged.style = "width: auto; height: 100%; left: 50%; transform: translateX(-50%);";
        }
      }
      function thumbnail() {
        img = document.getElementById("fullscreenimage");
        img.style = "visibility: hidden;";
      }
      function resizeImage( idName ) {
        img = document.getElementById(idName);
        if (img.naturalWidth > img.naturalHeight) {
          img.style = "width: 100%; height: auto; top: 50%; transform: translateY(-50%);";
        } else {
          img.style = "width: auto; height: 100%; left: 50%; transform: translateX(-50%);";
        }
      }
    </script>
  ';
//###### Variabeln bestimmen und korrigieren
//##################################################################################
  // ###### Rechte Sidbar
  $sidebarRight = phpConvertPageToFilesystemPath($pageData[$pageDataKey]['variables']['pageSidebarRight']);
  // ###### URL zur Anzeige von Bildern über http/https
  $dokuwikiMediaUrl = 'https://' . $_SERVER['HTTP_HOST'] . dirname($_SERVER['PHP_SELF']) . '/lib/exe/fetch.php?media=';
  // ###### Daten zum Erstellungszeitpunkt
  $pageData[$pageDataKey]['variables']['pageCreationDate'] = date("d.m.Y",strtotime($pageData[$pageDataKey]['variables']['pageCreationDate']));
  $pageData[$pageDataKey]['variables']['pageCreationTimeStamp'] = strtotime("{$pageData[$pageDataKey]['variables']['pageCreationDate']} {$pageData[$pageDataKey]['variables']['pageCreationTime']}");

Standard-Bilder pruefen ###### Cover des Artikels suchen und korrigieren

  if (file_exists($filePathOfPageImages . '/page_cover.png')) {
    $imagePageCover = $_GET["id"] . ':page_cover.png';
  } elseif (file_exists($filePathOfPageImages . '/page_cover.jpg')) {
    $imagePageCover = $_GET["id"] . ':page_cover.jpg';
  } elseif (file_exists($filePathOfParentPageImages . '/standard_page_cover.png')) {
    $imagePageCover = $wikiPathOfParentPageImages . ':standard_page_cover.png';
  } elseif (file_exists($filePathOfParentPageImages . '/standard_page_cover.jpg')) {
    $imagePageCover = $wikiPathOfParentPageImages . ':standard_page_cover.jpg';
  } else {
    $imagePageCover = '';
  }
//###### Banner des Artikels suchen und korrigieren
  if (file_exists($filePathOfPageImages . '/page_banner.png')) {
    $imagePageBanner = $_GET["id"] . ':page_banner.png';
  } elseif (file_exists($filePathOfPageImages . '/page_banner.jpg')) {
    $imagePageBanner = $_GET["id"] . ':page_banner.jpg';
  } elseif (file_exists($filePathOfParentPageImages . '/standard_page_banner.png')) {
    $imagePageBanner = $wikiPathOfParentPageImages . ':standard_page_banner.png';
  } elseif (file_exists($filePathOfParentPageImages . '/standard_page_banner.jpg')) {
    $imagePageBanner = $wikiPathOfParentPageImages . ':standard_page_banner.jpg';
  } else {
    $imagePageBanner = '';
  }
//###### Vergleichsbild 1 suchen und korrigieren
  if (file_exists($filePathOfPageImages . '/page_comp1.png')) {
    $imagePageComp1 = $_GET["id"] . ':page_comp1.png';
  } elseif (file_exists($filePathOfPageImages . '/page_comp1.jpg')) {
    $imagePageComp1 = $_GET["id"] . ':page_comp1.jpg';
  } elseif (file_exists($filePathOfParentPageImages . '/standard_page_comp1.png')) {
    $imagePageComp1 = $wikiPathOfParentPageImages . ':standard_page_comp1.png';
  } elseif (file_exists($filePathOfParentPageImages . '/standard_page_comp1.jpg')) {
    $imagePageComp1 = $wikiPathOfParentPageImages . ':standard_page_comp1.jpg';
  } else {
    $imagePageComp1 = '';
  }
//###### Vergleichsbild 2 suchen und korrigieren
  if (file_exists($filePathOfPageImages . '/page_comp2.png')) {
    $imagePageComp2 = $_GET["id"] . ':page_comp2.png';
  } elseif (file_exists($filePathOfPageImages . '/page_comp2.jpg')) {
    $imagePageComp2 = $_GET["id"] . ':page_comp2.jpg';
  } elseif (file_exists($filePathOfParentPageImages . '/standard_page_comp2.png')) {
    $imagePageComp2 = $wikiPathOfParentPageImages . ':standard_page_comp2.png';
  } elseif (file_exists($filePathOfParentPageImages . '/standard_page_comp2.jpg')) {
    $imagePageComp2 = $wikiPathOfParentPageImages . ':standard_page_comp2.jpg';
  } else {
    $imagePageComp2 = '';
  }

namespace-abhängige Standard-Bilder pruefen ###### Zutatenbild suchen und korrigieren

  if (file_exists($filePathOfPageImages . '/page_ingredients.png')) {
    $imagePageIngredients = $_GET["id"] . ':page_ingredients.png';
  } elseif (file_exists($filePathOfPageImages . '/page_ingredients.jpg')) {
    $imagePageIngredients = $_GET["id"] . ':page_ingredients.jpg';
  } elseif (file_exists($filePathOfParentPageImages . '/standard_page_ingredients.png')) {
    $imagePageIngredients = $wikiPathOfParentPageImages . ':standard_page_ingredients.png';
  } elseif (file_exists($filePathOfParentPageImages . '/standard_page_ingredients.jpg')) {
    $imagePageIngredients = $wikiPathOfParentPageImages . ':standard_page_ingredients.jpg';
  } else {
    $imagePageIngredients = '';
  }
//###### Generiere anhand der Contentboxes die Darstellung
//##################################################################################
//###### HTML-Tag öffnen
//##################################################################################
  echo '<html>';
//###### JavaScript-Funktionen einbinden, falls gesetzt
//##################################################################################
  if (isset($jsLightboxFunctions)) { echo $jsLightboxFunctions; }
//###### Parent-Inhalts-Container und Fullscreen-Image-Container erzeugen
//##################################################################################
  echo '
    <div id="fullscreenimage" class="contentbox-content-image-full-overlay">
      <div onclick="thumbnail()" class="contentbox-content-image-full-overlay-image">&cross;<img id="enlargedImage" src="' . $dokuwikiMediaUrl . $images[0] . '"></div>
    </div>
    <div class="parentbox"><!-- ###### parentbox umspannender Inhalts-Container (öffnen) -->
      <div class="sectionbox-row"><!-- ###### Sectionbox für Spalten im umspannenden Inhalts-Container (öffnen) -->
  ';
        //##################################################################################
        //###### LINKE Spalte öffnen
        //###############################
  echo'
        <div class="parentbox-contentbox-left"><!-- ###### Linke Spalte (öffnen) -->
  ';
  //###### Erstellungsdatum und Autor anzeigen
  echo'
        <div class="dateBox">Beitrag vom ' . $pageData[$pageDataKey]['variables']['pageCreationDate'] . ' auf ' . $_SERVER['SERVER_NAME'] . ' von </html>[[user:' . $pageData[$pageDataKey]['variables']['pageCreationUser'] . ']]<html></div><br /><br />
  ';
  //###### Titel, Subtitel und Kategorien anzeigen
  echo'
        <div class="titlebox"><!-- ###### titlebox (Produktname) (öffnen)-->
          <div class="titlebox-title"></html>' . str_replace('\\\\', '\\\\  ', $pageData[$pageDataKey]['variables']['pageTitleRow1']) . '<html></div>
          <div class="titlebox-content">' . $pageData[$pageDataKey]['variables']['pageTitleRow2'] . '</div>
        </div><!-- ###### titlebox (Produktname) (schließen)-->
  ';
  //###### ContentBox-Elemente anhand des Arrays dynamisch erzeugen
  if (strpos(htmlspecialchars($_GET["id"]),':gliederung')) {
    $bookVolumeRoot = substr(htmlspecialchars($_GET["id"]),0,strpos(htmlspecialchars($_GET["id"]),':gliederung'));
    echo '
      <div class="sectionbox-column"><!-- ###### sectionbox (Inhaltsverzeichnis) (schließen) -->
      <details>
        <summary class="contentbox-title">
          Inhaltsverzeichnis
        </summary>
        ' . phpCreateProjectIndex($bookVolumeRoot, 'close') . '
      </details>
      </div>
    ';
  }
  //###### Den Eycatcher anzeigen, falls die Variable nicht leer ist
  if (!empty($pageData[$pageDataKey]['variables']['pageEyeCatcher'])) {
    echo '
      <div class="sectionbox-row"><!-- ###### sectionbox (Eyecatcher) (schließen) -->
        <div class="contentbox">
          <div class="contentbox-title">' . $pageData[$pageDataKey]['variables']['pageEyeCatcher'] . '</div>
        </div>
      </div><!-- ###### sectionbox (Eyecatcher) (schließen) -->
    ';    
  }
 //###### Alle Abschnitte nacheinander listen und die entsprechenden DIVs einbinden
  foreach ($pageData[$pageDataKey]['contentboxes'] as $currentContentBox) {
    // ###### Gibt es in dem Abschnitt einen Unterabschnitt mit Bild (
    $paragraphContainingImageKey = array_search('image', array_column($currentContentBox["paragraph"], 'class'));
    unset($currentImageBoxStyle);
    unset($currentImageBoxAlign);
    unset($currentImageBoxDisplay);
    if ($paragraphContainingImageKey !== false) {
      $currentImageBoxStyle   = $currentContentBox["paragraph"][$paragraphContainingImageKey]['style'];
      $currentImageBoxAlign   = $currentContentBox["paragraph"][$paragraphContainingImageKey]['align'];
      $currentImageBoxDisplay = $currentContentBox["paragraph"][$paragraphContainingImageKey]['display'];
    }
    
    //###### Soll der Abschnitt ausgeblendet werden, dann überspringe diese ContentBox
    if ($currentContentBox['display']=='none') {
      continue;
    }
    
    //###### Öffne den nächsten Abschnitts-Block
    echo '<div class="sectionbox-row"><!-- ###### sectionbox (öffnen) -->';
    //###### Falls der Abschnitt ein Image des Typs Cover oder Banner enthält, blende Rahmen und Hintergrundfarbe aus
    if ( (!($currentImageBoxStyle=='cover')) && (!($currentImageBoxStyle=='banner')) ) {
      echo '<div class="contentbox">';
    }
    //###### Falls der Abschnitt einen Titel enthält, öffne den Titelbereich des Abschnitts
    if ( !empty($currentContentBox['title']) ) {
      echo '<div class="contentbox-title">' . $currentContentBox['title'] . '</div>';
    }
    //###### Öffnen den Inhaltsbereich des Abschnitts
    echo '<div class="contentbox-content">';
    //Alle Unterabschnitte listen und je nach Klasse und Style formatieren
    foreach ($currentContentBox['paragraph'] as $currentContentBoxParagraph) {
      
      //###### Handelt es sich um einen Bildabschnitt
      if ($currentContentBoxParagraph['class']=='image') {
        
        //###### Für eine COVERBOX notwendige Image-Korrekturen
        //#######################################################
        if ($currentContentBoxParagraph['style']=='cover') {
          //###### Wurde kein Bild angegeben oder existiert das angegebene Bild nicht, so nutze das Standard-Image, falls dieses existiert
          if ((empty($currentContentBoxParagraph['content'][0]['imagePath'])) || (!file_exists(str_replace('/pages/media/', '/media/', phpConvertNamespaceToFilesystemPath('media:' . $currentContentBoxParagraph['content'][0]['imagePath']))))) {
            if (!empty($imagePageCover)) {
              //###### Wenn nein, benutze das Standard-Cover (falls es existiert)
              $currentContentBoxParagraph['content'][0]['imagePath'] = $imagePageCover;
            } else {
              //###### Existiert überhaupt kein Cover, so sezte den Wert auf leer
              $currentContentBoxParagraph['content'][0]['imagePath'] = '';
            }
          }
        }
        //#######################################################
        //###### Für eine COVERBOX notwendige Image-Korrekturen
        //###### Für eine COMPARE notwendige Image-Korrekturen
        //#######################################################
        if ($currentContentBoxParagraph['style']=='compare') {
          //###### Wurde ein Bild für Compare 1 angegeben und existiert es
          if ((empty($currentContentBoxParagraph['content'][0]['imagePath'])) || (!file_exists(str_replace('/pages/media/', '/media/', phpConvertNamespaceToFilesystemPath('media:' . $currentContentBoxParagraph['content'][0]['imagePath']))))) {
            //###### Wenn ja, benutze das angegebene Bild
            if (!empty($imagePageComp1)) {
              $currentContentBoxParagraph['content'][0]['imagePath'] = $imagePageComp1;
            } else {
              //###### Existiert überhaupt kein Cover, so sezte den Wert auf leer
              $currentContentBoxParagraph['content'][0]['imagePath'] = '';
            }
          }
          //###### Wurde ein Bild für Compare 2 angegeben und existiert es
          if ((empty($currentContentBoxParagraph['content'][1]['imagePath'])) || (!file_exists(str_replace('/pages/media/', '/media/', phpConvertNamespaceToFilesystemPath('media:' . $currentContentBoxParagraph['content'][1]['imagePath']))))) {
            //###### Wenn ja, benutze das angegebene Bild
            if (!empty($imagePageComp2)) {
              $currentContentBoxParagraph['content'][1]['imagePath'] = $imagePageComp2;
            } else {
              //###### Existiert überhaupt kein Cover, so sezte den Wert auf leer
              $currentContentBoxParagraph['content'][1]['imagePath'] = '';
            }
          }
        }
        //#######################################################
        //###### Für eine COMPARE notwendige Image-Korrekturen
        //###### Für eine GALLERY notwendige Image-Korrekturen
        //#######################################################
        //###### Gallery: Eine Gallerie anzeigen, falls die Variable nicht leer ist
        if ($currentContentBoxParagraph['style']=='gallery') {
          //###### Alle Page-Images sammeln
          $images = getAllImages($searchPath=strtolower($filePathOfPageImages), $currentContentBoxParagraph['filter'], $currentContentBoxParagraph['exclude']);
          //###### Wurden Bilder gefunden
          if (isset($images)) {
            //###### Alle Bilder am angegebenen Pfad finden (hier Produkt-Mediendateien)
            array_multisort($images, SORT_ASC, $images);
            //###### Bilder des Arrays popElements entfernen
            $popElements = array('page_banner',);
            for ($counter=sizeof($images); $counter >=0; $counter--) {
              foreach ($popElements as $popElement) {
                if (strpos($images[$counter], $popElement)) {
                  unset($images[$counter]);
                }
              }
            }
            sort($images);
          }
          //###### Falls nur die angegebenen Bilder angezeigt werden sollen, das bisherige Array löschen
          $currentGalleryImageArray = array();
          if ($currentContentBoxParagraph['display'] != 'custom') {
            $currentGalleryImageArray = $images;
          }
          //###### Die angegebenen Bilder dem Array hinzufügen (custom zeigt nur diese an, join zeigt alle Bilder an)
          if (($currentContentBoxParagraph['display'] == 'custom') || ($currentContentBoxParagraph['display'] == 'join')) {
            //###### Überprüfe alle angegebenen Images, ob sie existieren
            foreach ($currentContentBoxParagraph['content'] as $currentGalleryImage) {
              if (!empty($currentGalleryImage['imagePath']) && (file_exists(str_replace('/pages/media/', '/media/', phpConvertNamespaceToFilesystemPath('media:' . $currentGalleryImage['imagePath']))))) {
                $currentGalleryImageArray[] = $currentGalleryImage['imagePath'];
              }
            }
          }
          $currentGalleryImageArray=array_unique($currentGalleryImageArray);
          //###### Gallerie-Ribbon-String mit allen Bildern erstellen
          $imageSuffixGallery=$imageCounter++;
          $imageRibbonString = '';
          foreach ($currentGalleryImageArray as $currentImage) {
            $imageRibbonString .= '<img id="slideshow" onclick="rotateimages(\'previewImage' . $imageSuffixGallery . '\', \'' . $currentImage . '\'); return false;" onmouseover="rotateimages(\'previewImage' . $imageSuffixGallery . '\', \'' . $currentImage . '\'); return false;" src="' . $dokuwikiMediaUrl . $currentImage . '" />';
          }
        }
        //#######################################################
        //###### Für eine GALLERY notwendige Image-Korrekturen
        
        //###### Für ein einfaches PREVIEW-Image notwendige Image-Korrekturen
        //#######################################################
        if ($currentContentBoxParagraph['style'] == 'image') {
        }
        //###### Handelt es sich um eine Image oder eine Coverbox
        if (($currentContentBoxParagraph['style'] == 'image') || ($currentContentBoxParagraph['style'] == 'cover')){
          if ((!empty($currentContentBoxParagraph['content'][0]['imagePath'])) && ($currentContentBoxParagraph['display'] != 'none') && (file_exists(str_replace('/pages/media/', '/media/', phpConvertNamespaceToFilesystemPath('media:' . $currentContentBoxParagraph['content'][0]['imagePath']))))) {
            //###### PREVIEWBOX: 
            $imageSuffix=$imageCounter++;
            echo '
              <div class="contentbox-content-image-' . $currentContentBoxParagraph['align'] . '">
                <img onclick="fullscreen(\'previewImage' . $imageSuffix . '\')" id="previewImage' . $imageSuffix . '" src="' . $dokuwikiMediaUrl . $currentContentBoxParagraph['content'][0]['imagePath'] . '">
                <div class="contentbox-content-image-description">
                  <a href="' . $dokuwikiMediaUrl . $currentContentBoxParagraph['content'][0]['imagePath'] . '" target="_blank">&nearr; Abb: ' . ( (!empty($currentContentBoxParagraph['content'][0]['imageDescription'])) ? $currentContentBoxParagraph['content'][0]['imageDescription'] : 'Vollbild (ext.)' ). '</a>
                </div>
              </div>
            ';
          }
        //###### Handelt es sich um eine Comparebox
        } elseif ($currentContentBoxParagraph['style'] == 'compare') {
          if ((!empty($currentContentBoxParagraph['content'][0]['imagePath'])) && (!empty($currentContentBoxParagraph['content'][1]['imagePath'])) && ($currentContentBoxParagraph['display'] != 'none')) {
            //###### COMPAREBOX: 
            $imageSuffixComp1=$imageCounter++;
            $imageSuffixComp2=$imageCounter++;
            echo '
              <div class="sectionbox-row"><!-- ###### sectionbox (öffnen) -->
                <div class="contentbox-content-image-center">
                  <img onclick="fullscreen(\'previewImage' . $imageSuffixComp1 . '\')" id="previewImage' . $imageSuffixComp1 . '" src="' . $dokuwikiMediaUrl . $currentContentBoxParagraph['content'][0]['imagePath'] . '">
                  <div class="contentbox-content-image-description">
                    <a href="' . $dokuwikiMediaUrl . $currentContentBoxParagraph['content'][0]['imagePath'] . '" target="_blank">&nearr; Abb.1: ' . ( (!empty($currentContentBoxParagraph['content'][0]['imageDescription'])) ? $currentContentBoxParagraph['content'][0]['imageDescription'] : 'Vollbild (ext.)' ). '</a>
                  </div>
                </div>
                <div class="contentbox-content-image-center">
                  <img onclick="fullscreen(\'previewImage' . $imageSuffixComp2 . '\')" id="previewImage' . $imageSuffixComp2 . '" src="' . $dokuwikiMediaUrl . $currentContentBoxParagraph['content'][1]['imagePath'] . '">
                  <div class="contentbox-content-image-description">
                    <a href="' . $dokuwikiMediaUrl . $currentContentBoxParagraph['content'][1]['imagePath'] . '" target="_blank">&nearr; Abb.2: ' . ( (!empty($currentContentBoxParagraph['content'][1]['imageDescription'])) ? $currentContentBoxParagraph['content'][1]['imageDescription'] : 'Vollbild (ext.)' ). '</a>
                  </div>
                </div>
              </div>
            ';
          }
        //###### Handelt es sich um eine Gallerie
        } elseif ($currentContentBoxParagraph['style'] == 'gallery') {
          
          if ((isset($currentGalleryImageArray)) && ($currentContentBoxParagraph['display'] != 'none')) {
            //###### GALLERY
            echo'
              <div onclick="fullscreen(\'previewImage' . $imageSuffixGallery . '\')" class="contentbox-content-gallery">
                <img id="previewImage' . $imageSuffixGallery . '" src="' . $dokuwikiMediaUrl . $currentGalleryImageArray[0] . '">
              </div>
              <div class="contentbox-content-gallery-ribbon"><!-- ###### Thumbnail-Ribbon aller Images (öffnen) -->
                <div class="contentbox-content-gallery-ribbon-content">' . $imageRibbonString . '</div>
              </div><!-- ###### Thumbnail-Ribbon aller Images (schließen) -->
            ';
          }
        } else {
        }
      }
      //###### Handelt es sich um einen Textabschnitt
      if ($currentContentBoxParagraph['class']=='text') {
        if ($currentContentBoxParagraph['style']=='normpage') {
          //###### Es handelt sich um eine Normseite:
        } else {
          //###### Es handelt sich um normalen Text:
          echo '<div class="contentbox-content-text"></html>' . $currentContentBoxParagraph['content'] . '<html></div>';
        }
      }
      
    }
    
    //###### Falls es keine Stand-Alone-Cover-ContentBox ist, schließe einen umspannenden DIV
    echo '    </div><!-- ###### content (schließen) -->';
    if ( (!($currentImageBoxStyle=='cover')) && (!($currentImageBoxStyle=='banner')) ) {
      echo '</div>';
    }
    echo '</div><!-- ###### sectionbox (schließen) -->';
  }
  echo'
        </div><!-- ###### Linke Spalte (schließen) -->
  ';
        //###############################
        //###### LINKE Spalte schließen
        //##################################################################################
        //##################################################################################
        //###### RECHTE Spalte öffnen
        //###############################
  echo '
        <div class="parentbox-contentbox-right"><!-- ###### ###### Rechte Spalte (öffnen) -->
  ';
  include($sidebarRight);
  echo '
        </div><!-- ###### ###### Rechte Spalte (schließen) -->
  ';
        //###############################
        //###### RECHTE Spalte schließen
        //##################################################################################
  echo '
      </div><!-- ###### Sectionbox für Spalten im umspannenden Inhalts-Container (schließen) -->
    </div><!-- ###### parentbox umspannender Inhalts-Container (schließen) -->
  ';
//###### JavaScript - tatsächliche Größe der ParentBox bestimmen und festlegen
//##################################################################################
  echo '  
    <script language="javascript">
      var biggestHeight = 0;
      // Loop through elements children to find & set the biggest height
      $(".parentbox*").each(function(){
        // If this elements height is bigger than the biggestHeight
        if ($(this).height() > biggestHeight ) {
         // Set the biggestHeight to this Height
         biggestHeight = $(this).height();
        }
      });
      // Set the container height
      $(".parentbox").height(biggestHeight);
    </script>
  ';
  
//###### HTML-Tag schließen
//##################################################################################
  echo '</html>';

?>

Diese Website verwendet Cookies. Durch die Nutzung der Website stimmen Sie dem Speichern von Cookies auf Ihrem Computer zu. Außerdem bestätigen Sie, dass Sie unsere Datenschutzbestimmungen gelesen und verstanden haben. Wenn Sie nicht einverstanden sind, verlassen Sie die Website.Weitere Information