<?php
###### Funktionsaufruf (alle Blog-Dateien finden, validieren und einbinden) ################################################################################## $includedFiles = getAndValidateBlogEntries($findBlogContentInThisPath); ################################################################################## ###### Funktion: Rekursives durchsuchen nach Blog-Eintraegen ###### Hinweis: Wird durch die Funktion getAndValidateBlogEntries() aufgerufen ################################################################################## function scanForPages($givenFilePath, $recurse) { ###### Wenn Uebergabewert In DokuWiki-Pfad-Syntax, dann konvertiere zu File-System-Pfad-Syntax
  if ((strpos($givenFilePath,':'))) {
  //###### String enthält :
    $tree = glob(rtrim(phpConvertNamespaceToFilesystemPath($givenFilePath), '/') . '/*');
  } elseif (strpos($givenFilePath,'/') !== false ) {
  //###### String enthält /
    $tree = glob(rtrim($givenFilePath, '/') . '/*');
  } else {
  //###### String enthält weder : noch /
    $tree = glob(rtrim(phpConvertNamespaceToFilesystemPath($givenFilePath), '/') . '/*');
  }
global $includedFile; //###### Exclude-Liste (Verzeichnisse und Dateien) in Array umwandeln
if (is_array($tree)) { foreach($tree as $file) { echo "Gefunden: $file <br />";
      //###### Falls ein Verzeichnis gefunden wird, auch dieses rekursiv durchsuchen
      if ( (is_dir($file)) && (!(strpos($file, 'pagedata'))) &&(!(strpos($file, 'vorlagen'))) ){
        //echo "Verzeichnis gefunden: $file  <br />";
        if ($recurse) {
          scanForPages($file, $recurse);
        };
      //###### Falls eine Datei gefunden wird, weitere Schritte vornehmen
      } elseif (is_file($file)) {
        if ( (!(strpos($file, 'pagedata'))) &&(!(strpos($file, 'vorlagen'))) && (!(strpos($file, '_template'))) && (!($file == phpConvertPageToFilesystemPath($_GET["id"]))) && (!(strpos($file, 'start.txt'))) ) {
          //###### Diese Datei einschliessen
          //echo "Datei $file einschliessen <br /> ";
          //###### UpperCase zu LowerCase umbenennen
          $filePathSplitArray = explode('/', $file);
          $fileName = end($filePathSplitArray);
          if (preg_match("/[A-Z]/", $fileName)) {
            $fileNameLower = strtolower($fileName);
            array_pop($filePathSplitArray);
            $filePath = implode('/', $filePathSplitArray);
            echo $filePath  . '-' . $fileNameLower. '<><><><>  ////  ';
            copy("$filePath/$fileName","$filePath/$fileNameLower");
            unlink("$filePath/$fileName");
          }
          $dokuWikiConformPagePath= phpCreateDokuWikiConformName(substr(str_replace(realpath(dirname(__FILE__) . '/../../..'), '', $file),1));
            echo "Test: " . $_SERVER["SCRIPT_NAME"] . "  –  " . realpath(dirname(FILE)) . "  –  " . str_replace(realpath(dirname(FILE) . '/../../..'), , $file). "<br />";
            echo $dokuWikiConformPagePath . "<br />";
            ###### Datei dem Blog-Page-Array hinzufuegen
            $includedFile[] = $dokuWikiConformPagePath;
          }
        }
      }
    }
    ###### globales Array uebergeben
    return $includedFile;
  }
  
  $filePathOfCurrentPageSplit = explode(':', $_GET["id"]);
  end($filePathOfCurrentPageSplit);
  array_pop($filePathOfCurrentPageSplit);
  $wikiPathOfCurrentPage = implode(':', $filePathOfCurrentPageSplit);
  $filePathOfCurrentPage = phpConvertNamespaceToFilesystemPath($wikiPathOfCurrentPage);
  $includedFiles = scanForPages($filePathOfCurrentPage, true);
   
   Variablen bestimmen
   
  ###### URL zur Anzeige von Bildern über http/https
  $dokuwikiMediaUrl = 'https:' . $_SERVER['HTTP_HOST'] . dirname($_SERVER['PHP_SELF']) . '/lib/exe/fetch.php?media=';
   
   Variablen der Blog-Startseite auslesen
   
  $startPageData['variables']=phpGetWrappedVariables(htmlspecialchars($_GET["id"]));
  
  ###### Lese die Variablen der Blog-Seiten aus
  foreach ($includedFiles as $currentFile) {
     
     Variablen auslesen und korrigieren/ergänzen
     
    $variableArrayExtractedWrapped = phpGetWrappedVariables($currentFile);
    ###### sezte deutsches Zeitformat als Erstelldatum
    $variableArrayExtractedWrapped['pageCreationDate'] = date("d.m.Y",strtotime($variableArrayExtractedWrapped['pageCreationDate']));
    $variableArrayExtractedWrapped['pageCreationTimeStamp'] = strtotime("{$variableArrayExtractedWrapped['pageCreationDate']} {$variableArrayExtractedWrapped['pageCreationTime']}");
    ###### Füge dem Array die zugehörge Produkt-Test-Page und die Blog-Page hinzu
    $variableArrayExtractedWrapped['pageDataFile'] = $currentFile;
    
    ###### Inkludiere Blog-Daten, falls Blog auf Published steht und prüfe weiter
    if ( $variableArrayExtractedWrapped['pageReleaseState'] == 'published' ) {
      if (empty($hasToContainTagsArray)) {
        $pageData[]['variables'] = $variableArrayExtractedWrapped;
      } else {
        $hasToContainTagsString = ;
        foreach($hasToContainTagsArray as $TagToContain) {
          $hasToContainTagsString .= '#' . $TagToContain . ' ';
          if ( (strpos(strtolower($variableArrayExtractedWrapped['pageCategories']),strtolower($TagToContain))) || (strpos(strtolower($variableArrayExtractedWrapped['pageTags']),strtolower($TagToContain))) ) {
            ###### Setze Schalter: Behalte diesen Blog-Eintrag
            $popThispage = 0;
          }
        }
        if ($popThispage == 0) {
          $pageData[]['variables'] = $variableArrayExtractedWrapped;
        }
      }
    }
  }
  ###### alle validen Blog-Eintraege werden zeitlich sortiert (ab PHP7 usort mit space ship operator)
    array_multisort(array_column($pageData, 'pageCreationTimeStamp'), SORT_DESC, $pageData );
  usort($pageData, function($a, $b) {
    return $b['variables']['pageCreationTimeStamp'] ⇔ $a['variables']['pageCreationTimeStamp'];
  });
  ###### Übergabe-Variabeln korrigieren
  ##################################################################################
  ###### Initial vorgegebener Start-Beitrag
  $displayedPagesStart = $startPageData['variables']['displayedPagesStart'];
  ###### Falls ein Index für den ersten anzuzeigenden Beitrag übergeben wurde, nimm diesen
  if (isset($_GET['displayedPagesStart'])) {
    $displayedPagesStart = $_GET['displayedPagesStart'];
  }
  ##### Falls der erste Beitrag die Anzahl an Beiträgen übersteigt, korrigiere das
  if ($displayedPagesStart > (sizeof($pageData) - 1)) {
    $displayedPagesStart = sizeof($pageData) - 1;
  }
  ###### Initial vorgegebene Beiträge pro Seite
  $displayedPagesMax = $startPageData['variables']['displayedPagesMax'];
  ###### Falls ein Index für Beiträge pro Seite übergeben wurde, nimm diesen
  if (isset($_GET['displayedPagesMax'])) {
    $displayedPagesMax = $_GET['displayedPagesMax'];
  }
  ###### Falls der letzte anzuzeigende Beitrag die Anzahl an Beiträgen übersteigt, korrigiere das
  if ( ($displayedPagesMax == -1) || 1) ){
    $displayedPagesEnd = (sizeof($pageData) - 1);
  } else {
    $displayedPagesEnd = ($displayedPagesStart + $displayedPagesMax) - 1;
  }
  echo '<html>
Es werden Beiträge ' . ($displayedPagesStart + 1) . ' bis ' . ($displayedPagesEnd + 1) . ' angezeigt.
<br /></html>'; ###### Navigation ################################################################################## Falls nicht alle verfügbaren Beiträge auf einer Seite angezeigt werden, blende die Navigation ein if 2) { ###### Wenn der erste angezeigte Beitrag nicht der erste Beitrag ist, dann zeige "Zurück" an echo '<html>
0) ? 'visible' : 'hidden' ) . ';"></html><<
//###### Wenn der erste angezeigte Beitrag nicht der erste Beitrag ist, dann zeige "Neueste" an. echo '<html><div style="border: 2px solid lightgrey; border-radius: 10px; padding: 0.2vw; background: ghostwhite; display: inline-block; visibility: ' . ( ($displayedPagesStart > 0) ? 'visible' : 'hidden' ) . ';"></html>[[' . $_GET['id'] . '?displayedPagesStart=0|Neueste]]<html></div></html>'; echo '<html><div style="border: 2px solid lightgrey; border-radius: 10px; padding: 0.2vw; background: ghostwhite; display: inline-block;"></html>[[' . $_GET['id'] . '?displayedPagesStart=0&displayedPagesMax=-1|Alle]]<html></div></html>'; echo '<html><div style="border: 2px solid lightgrey; border-radius: 10px; padding: 0.2vw; background: ghostwhite; display: inline-block; visibility: ' . ( ($displayedPagesEnd < (sizeof( $pageData ) - 1)) ? 'visible' : 'hidden' ) . ';"></html>[[' . $_GET['id'] . '?displayedPagesStart=' . (sizeof($pageData) - $displayedPagesMax) . '|Älteste]]<html></div></html>'; echo '<html><div style="border: 2px solid lightgrey; border-radius: 10px; padding: 0.2vw; background: ghostwhite; display: inline-block; visibility: ' . ( ($displayedPagesEnd < (sizeof( $pageData ) - 1)) ? 'visible' : 'hidden' ) . ';"></html>[[' . $_GET['id'] . '?displayedPagesStart=' . ($displayedPagesEnd + 1) . '|>>]]<html></div></html>'; }
###### CSS-Datei inkludieren ##################################################################################
include(phpConvertPageToFilesystemPath($startPageData['variables']['pageCssStyle']));
###### HTML-Tag öffnen ##################################################################################
echo '<html>';
###### Darstellungsstruktur ##################################################################################
echo '
  <div class="parentbox"><!-- ###### parentbox umspannender Inhalts-Container (öffnen) -->
    <div class="sectionbox-row"><!-- ###### Sectionbox für Spalten im umspannenden Inhalts-Container (öffnen) -->
<div class="parentbox-contentbox-left"><!-- ###### Linke Spalte (öffnen) -->
';
//##### Falls Such-Tags für anzuzeigende Artikel gesetzt wurden, liste sie hier
if ( !(empty($hasToContainTagsString)) ) {
  echo "
    <br />
    <div class='dateBox'><b>Tags: {$hasToContainTagsString}</b></div>
    <hr /><br />
  ";
}
for ($articleCounter=$displayedPagesStart; $articleCounter <= $displayedPagesEnd ; $articleCounter++) {
  if (array_key_exists($articleCounter, $pageData)) {
  
    //###### Page-Preview ermitteln
    //##################################################################################
    //###### Korrektur fehlerhafter Angaben / pürfe auf Existenz
    //##################################################################################
    //###### Es wurde eine Bild-Datei (jpg oder png) angegeben
    if ((strpos($pageData[$articleCounter]['variables']['pagePreview'],'.png')) || (strpos($pageData[$articleCounter]['variables']['pagePreview'],'.jpg'))) {
      //###### Es wurde ein vollständiger Wiki-Pfad angegeben
      if (strpos($pageData[$articleCounter]['variables']['pagePreview'],':')) {
        //###### Das angegebene Bild existiert nicht - lösche es aus der Variablen
        if (!(file_exists(str_replace('/data/pages/','/data/media/',phpConvertNamespaceToFilesystemPath($pageData[$articleCounter]['variables']['pagePreview']))))) {
          $pageData[$articleCounter]['variables']['pagePreview'] = '';
        }
      //###### Es wurde nur eine Bild-Datei angegeben
      } else {
        //###### Das angegebene Bild existiert nicht - lösche es aus der Variablen
        $pageData[$articleCounter]['variables']['pagePreview'] = $pageData[$articleCounter]['variables']['pageDataFile'] . ':' . $pageData[$articleCounter]['variables']['pagePreview'];
        if (!(file_exists(str_replace('/data/pages/','/data/media/',phpConvertNamespaceToFilesystemPath($pageData[$articleCounter]['variables']['pagePreview']))))) {
          $pageData[$articleCounter]['variables']['pagePreview'] = '';
        }
      }
    //###### Es wurde kein eBild-Datei angegeben - lösche den Variablen-Inhalt
    } else {
      $pageData[$articleCounter]['variables']['pagePreview'] = '';
    }
   
    //###### Fehlende Bild-Datei-Angabe korrigieren
    //##################################################################################
    //###### Es wurde keine Bild-Datei angegeben
    if ($pageData[$articleCounter]['variables']['pagePreview'] == ''){
      if ( file_exists(str_replace('/data/pages/','/data/media/',phpConvertNamespaceToFilesystemPath($pageData[$articleCounter]['variables']['pageDataFile'] . ':page_preview.png'))) ) { 
        //###### Falls page_preview.png existiert, weise dies zu
        $pageData[$articleCounter]['variables']['pagePreview'] = $pageData[$articleCounter]['variables']['pageDataFile'] . ':page_preview.png';
      } elseif ( file_exists(str_replace('/data/pages/','/data/media/',phpConvertNamespaceToFilesystemPath($pageData[$articleCounter]['variables']['pageDataFile'] . ':page_preview.jpg'))) ) { 
        //###### Falls page_preview.jpg existiert, weise dies zu
        $pageData[$articleCounter]['variables']['pagePreview'] = $pageData[$articleCounter]['variables']['pageDataFile'] . ':page_preview.jpg';
      } else {
        //###### Es wurde keine Preview-Datei im zugehörigen Medien-Verzeichnis gefunden - Suche eine Ebene höher nach Standard-Bildern
        $wikiPathOfCurrentFileSplit = explode(':', $pageData[$articleCounter]['variables']['pageDataFile']);
        array_pop($wikiPathOfCurrentFileSplit);
        $pageData[$articleCounter]['variables']['pageDataFile'] = implode(':', $wikiPathOfCurrentFileSplit);
      //###### Falls page_preview.jpg nicht existiert, weise Standard-Image aus uebergeordnetem Verzeichnis zu
        $search = array('/data/pages/', '.txt');
        $replace = array('/data/media/', '');
      //###### Falls standard_page_preview.png existiert, weise dies zu
        if (file_exists(str_replace($search , $replace , phpConvertNamespaceToFilesystemPath($pageData[$articleCounter]['variables']['pageDataFile'] . ':standard_page_preview.png')))) {
        $pageData[$articleCounter]['variables']['pagePreview'] = str_replace(':pagedata:' , ':' , $pageData[$articleCounter]['variables']['pageDataFile']) . ':standard_page_preview.png';
      //###### Falls page_preview.jpg existiert, weise dies zu
        } elseif (file_exists(str_replace($search , $replace , phpConvertNamespaceToFilesystemPath($pageData[$articleCounter]['variables']['pageDataFile'] . ':standard_page_preview.jpg')))) {
        $pageData[$articleCounter]['variables']['pagePreview'] = str_replace(':pagedata:' , ':' , $pageData[$articleCounter]['variables']['pageDataFile']) . ':standard_page_preview.jpg';
        }
      }
        //##################################################################################
    }
    //###### Datumsgruppierung und Datumsueberschrift der Blog-Pages
    //##################################################################################
    //###### Anzahl Tage seit letzter Blog-Page
    $timestampNow = time(); // Input your date here e.g. strtotime("2014-01-02")
    $timestampPublished = strtotime($pageData[$articleCounter]['variables']['pageCreationDate']);
    $day_diff = floor(($timestampNow - $timestampPublished)/(60*60*24));
    
    if (($articleCounter == 0) && ($day_diff <= 14)) {
      echo "
        <br />
        <div>Aktuelles auf {$_SERVER['SERVER_NAME']}</div>
        <hr /><br />
      ";
    } elseif ( ($pageData[$articleCounter]['variables']['pageCreationDate'] != $pageData[$articleCounter - 1]['variables']['pageCreationDate']) || ($displayedPagesStart > 0) ){
      echo "
        <br />
        <div class='dateBox'>Beiträge vom {$pageData[$articleCounter]['variables']['pageCreationDate']}</div>
        <hr /><br />
      ";
    }
    echo '
        <div class="blog-preview-sectionbox"><!-- Blogeintrag (Zusammenfassung) (öffnen) -->
          <div class="titlebox"><!-- ###### Titel (öffnen) -->
            <div class="titlebox-title"></html>' . str_replace('\\\\', '\\\\  ', $pageData[$articleCounter]['variables']['pageTitleRow1']) . '<html></div>
            <div class="titlebox-categories"></html>' . $pageData[$articleCounter]['variables']['pageCategories'] . '<html></div>
          </div><!-- ###### Titel (schließen) -->
          <div class="contentbox-preview"><!-- ###### Titelbild (öffnen) -->
            <div class="blog-previewbox-image"><img src="' . $dokuwikiMediaUrl . $pageData[$articleCounter]['variables']['pagePreview'] . '"></div>
          </div><!-- ###### Titelbild (schließen) -->
          <div class="blog-previewbox"><!-- ###### Eyecatcher (öffnen) -->
            <div class="blog-previewbox-eyecatcher"></html>' . $pageData[$articleCounter]['variables']['pageEyeCatcher'] . ' [[' . $pageData[$articleCounter]['variables']['pageDataFile'] . '|weiterlesen...]]<html></div>
            <div class="eyecatcherbox-bottom">Erstellt von </html>' . $pageData[$articleCounter]['variables']['pageCreationUser'] . ' am ' . $pageData[$articleCounter]['variables']['pageCreationDate'] . ' um ' . $pageData[$articleCounter]['variables']['pageCreationTime'] . ' Uhr<html></div>
          </div><!-- ###### Eyecatcher (schließen) -->
        </div><!-- Blogeintrag (Zusammenfassung) (schließen) -->
    ';
}
}
echo'
      </div><!-- ###### Linke Spalte (schließen) -->
      <div class="parentbox-contentbox-right"><!-- ###### Rechte Spalte (öffnen) -->
    ';
    include(phpConvertPageToFilesystemPath($startPageData['variables']['pageSidebarRight']));
echo '
      </div><!-- ###### Rechte Spalte (schließen) -->
</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>';
?>