";
print_r($_REQUEST);
echo "";
*/
require_once("Language.php");
require_once("Properties.php");
require_once("SpecialChars.php");
require_once("Syntax.php");
require_once("Smileys.php");
require_once("Mail.php");
// Initial: Fehlerausgabe unterdrücken, um Path-Disclosure-Attacken ins Leere laufen zu lassen
@ini_set("display_errors", 0);
$language = new Language();
$mainconfig = new Properties("conf/main.conf");
$adminconfig = new Properties("admin/conf/basic.conf");
$specialchars = new SpecialChars();
$syntax = new Syntax();
$smileys = new Smileys("smileys");
$mailfunctions = new Mail(false);
// Dateiendungen für Inhaltsseiten
$EXT_PAGE = ".txt";
$EXT_HIDDEN = ".hid";
$EXT_DRAFT = ".tmp";
// Config-Parameter auslesen
$LAYOUT_DIR = $mainconfig->get("cmslayout");
$TEMPLATE_FILE = "layouts/$LAYOUT_DIR/template.html";
$CSS_FILE = "layouts/$LAYOUT_DIR/css/style.css";
$FAVICON_FILE = "layouts/$LAYOUT_DIR/favicon.ico";
// Template für Kontaktformular
$contactformconfig = new Properties("formular/formular.conf");
$WEBSITE_NAME = $mainconfig->get("websitetitle");
if ($WEBSITE_NAME == "")
$WEBSITE_NAME = "Titel der Website";
$DEFAULT_CATEGORY = $mainconfig->get("defaultcat");
if ($DEFAULT_CATEGORY == "")
$DEFAULT_CATEGORY = "10_Willkommen";
$DEFAULT_PAGE = $mainconfig->get("defaultpage");
if ($DEFAULT_PAGE == "")
$DEFAULT_PAGE = "10_Willkommen";
$USE_CMS_SYNTAX = true;
if ($mainconfig->get("usecmssyntax") == "false")
$USE_CMS_SYNTAX = false;
// Request-Parameter einlesen und dabei absichern
$CAT_REQUEST = getRequestParam('cat', true);
$PAGE_REQUEST = getRequestParam('page', true);
$ACTION_REQUEST = getRequestParam('action', true);
$QUERY_REQUEST = getRequestParam('query', true);
$HIGHLIGHT_REQUEST = getRequestParam('highlight', true);
$CONTENT_DIR_REL = "kategorien";
$CONTENT_DIR_ABS = getcwd() . "/$CONTENT_DIR_REL";
$CONTENT_FILES_DIR = "dateien";
$GALLERIES_DIR = "galerien";
$CONTENT = "";
$HTML = "";
// Überprüfen: Ist die Startkategorie vorhanden? Wenn nicht, nimm einfach die allererste als Standardkategorie
if (!file_exists("$CONTENT_DIR_REL/$DEFAULT_CATEGORY")) {
$contentdir = opendir($CONTENT_DIR_REL);
while ($cat = readdir($contentdir)) {
if (isValidDirOrFile($cat)) {
$DEFAULT_CATEGORY = $cat;
break;
}
}
closedir($contentdir);
}
// Dateiname der aktuellen Inhaltsseite (wird in getContent() gesetzt)
$PAGE_FILE = "";
// Zuerst: Übergebene Parameter überprüfen
checkParameters();
// Dann: HTML-Template einlesen und mit Inhalt füllen
readTemplate();
// Zum Schluß: Ausgabe des fertigen HTML-Dokuments
echo $HTML;
// ------------------------------------------------------------------------------
// Parameter auf Korrektheit prüfen
// ------------------------------------------------------------------------------
function checkParameters() {
global $CONTENT_DIR_ABS;
global $CONTENT_FILES_DIR;
global $DEFAULT_CATEGORY;
global $ACTION_REQUEST;
global $CAT_REQUEST;
global $PAGE_REQUEST;
global $EXT_DRAFT;
global $EXT_HIDDEN;
global $EXT_PAGE;
// Überprüfung der gegebenen Parameter
if (
// Wenn keine Kategorie übergeben wurde...
($CAT_REQUEST == "")
// ...oder eine nicht existente Kategorie...
|| (!file_exists("$CONTENT_DIR_ABS/$CAT_REQUEST"))
// ...oder eine Kategorie ohne Contentseiten...
|| (getDirContentAsArray("$CONTENT_DIR_ABS/$CAT_REQUEST", true, true) == "")
)
// ...dann verwende die Standardkategorie
$CAT_REQUEST = $DEFAULT_CATEGORY;
// Kategorie-Verzeichnis einlesen
$pagesarray = getDirContentAsArray("$CONTENT_DIR_ABS/$CAT_REQUEST/", true, true);
// Wenn Contentseite nicht explizit angefordert wurde oder nicht vorhanden ist...
if (
($PAGE_REQUEST == "")
|| (!file_exists("$CONTENT_DIR_ABS/$CAT_REQUEST/$PAGE_REQUEST$EXT_PAGE") && !file_exists("$CONTENT_DIR_ABS/$CAT_REQUEST/$PAGE_REQUEST$EXT_HIDDEN") && !file_exists("$CONTENT_DIR_ABS/$CAT_REQUEST/$PAGE_REQUEST$EXT_DRAFT"))
) {
//...erste Contentseite der Kategorie setzen
$PAGE_REQUEST = substr($pagesarray[0], 0, strlen($pagesarray[0]) - 4);
}
// Wenn ein Action-Parameter übergeben wurde: keine aktiven Kat./Inhaltts. anzeigen
if (($ACTION_REQUEST == "sitemap") || ($ACTION_REQUEST == "search")) {
$CAT_REQUEST = "";
$PAGE_REQUEST = "";
}
}
// ------------------------------------------------------------------------------
// HTML-Template einlesen und verarbeiten
// ------------------------------------------------------------------------------
function readTemplate() {
global $CSS_FILE;
global $HTML;
global $FAVICON_FILE;
global $LAYOUT_DIR;
global $TEMPLATE_FILE;
global $USE_CMS_SYNTAX;
global $WEBSITE_NAME;
global $ACTION_REQUEST;
global $HIGHLIGHT_REQUEST;
global $CAT_REQUEST;
global $language;
global $syntax;
global $mainconfig;
global $smileys;
// Template-Datei auslesen
if (!$file = @fopen($TEMPLATE_FILE, "r"))
die($language->getLanguageValue1("message_template_error_1", $TEMPLATE_FILE));
$template = fread($file, filesize($TEMPLATE_FILE));
fclose($file);
// Platzhalter des Templates mit Inhalt füllen
$pagecontentarray = array();
// getSiteMap, getSearchResult und getContent liefern jeweils ein Array:
// [0] = Inhalt
// [1] = Name der Kategorie (leer bei getSiteMap, getSearchResult)
// [2] = Name des Inhalts
$pagecontent = "";
$cattitle = "";
$pagetitle = "";
if ($ACTION_REQUEST == "sitemap") {
$pagecontentarray = getSiteMap();
$pagecontent = $pagecontentarray[0];
$cattitle = $pagecontentarray[1];
$pagetitle = $pagecontentarray[2];
}
elseif ($ACTION_REQUEST == "search") {
$pagecontentarray = getSearchResult();
$pagecontent = $pagecontentarray[0];
$cattitle = $pagecontentarray[1];
$pagetitle = $pagecontentarray[2];
}
elseif ($USE_CMS_SYNTAX) {
$pagecontentarray = getContent();
$pagecontent = $syntax->convertContent($pagecontentarray[0], $CAT_REQUEST, true);
$cattitle = $pagecontentarray[1];
$pagetitle = $pagecontentarray[2];
}
else {
$pagecontentarray = getContent();
$pagecontent = $pagecontentarray[0];
$cattitle = $pagecontentarray[1];
$pagetitle = $pagecontentarray[2];
}
// Smileys ersetzen
if ($mainconfig->get("replaceemoticons") == "true")
$pagecontent = $smileys->replaceEmoticons($pagecontent);
// Gesuchte Phrasen hervorheben
if ($HIGHLIGHT_REQUEST <> "") {
$pagecontent = highlight($pagecontent, html_entity_decode($HIGHLIGHT_REQUEST));
}
$HTML = preg_replace('/{CSS_FILE}/', $CSS_FILE, $template);
$HTML = preg_replace('/{FAVICON_FILE}/', $FAVICON_FILE, $HTML);
$HTML = preg_replace('/{LAYOUT_DIR}/', $LAYOUT_DIR, $HTML);
// Platzhalter ersetzen
$HTML = replacePlaceholders($HTML, $cattitle, $pagetitle);
$HTML = preg_replace('/{WEBSITE_TITLE}/', getWebsiteTitle($WEBSITE_NAME, $cattitle, $pagetitle), $HTML);
// Meta-Tag "keywords"
$HTML = preg_replace('/{WEBSITE_KEYWORDS}/', $mainconfig->get("websitekeywords"), $HTML);
// Meta-Tag "description"
$HTML = preg_replace('/{WEBSITE_DESCRIPTION}/', $mainconfig->get("websitedescription"), $HTML);
$HTML = preg_replace('/{CONTENT}/', $pagecontent, $HTML);
$HTML = preg_replace('/{MAINMENU}/', getMainMenu(), $HTML);
// Detailmenü nicht zeigen, wenn Submenüs aktiviert sind
if ($mainconfig->get("usesubmenu") > 0) {
$HTML = preg_replace('/{DETAILMENU}/', "", $HTML);
}
else {
$HTML = preg_replace('/{DETAILMENU}/', getDetailMenu($CAT_REQUEST), $HTML);
}
$HTML = preg_replace('/{SEARCH}/', getSearchForm(), $HTML);
$HTML = preg_replace('/{LASTCHANGE}/', getLastChangedContentPage(), $HTML);
$HTML = preg_replace('/{SITEMAPLINK}/', "getLanguageValue0("tooltip_showsitemap_0")).">".$language->getLanguageValue0("message_sitemap_0")."", $HTML);
$HTML = preg_replace('/{CMSINFO}/', getCmsInfo(), $HTML);
// Kontaktformular
$HTML = preg_replace('/{CONTACT}/', buildContactForm(), $HTML);
}
// ------------------------------------------------------------------------------
// Zu einem Kategorienamen passendes Kategorieverzeichnis suchen und zurückgeben
// Alle Kühe => 00_Alle-nbsp-K-uuml-he
// ------------------------------------------------------------------------------
function nameToCategory($catname) {
global $CONTENT_DIR_ABS;
// Content-Verzeichnis einlesen
$dircontent = getDirContentAsArray("$CONTENT_DIR_ABS", false, false);
// alle vorhandenen Kategorien durchgehen...
foreach ($dircontent as $currentelement) {
// ...und wenn eine auf den Namen paßt...
if (substr($currentelement, 3, strlen($currentelement)-3) == $catname){
// ...den vollen Kategorienamen zurückgeben
return $currentelement;
}
}
// Wenn kein Verzeichnis paßt: Leerstring zurückgeben
return "";
}
// ------------------------------------------------------------------------------
// Zu einer Inhaltsseite passende Datei suchen und zurückgeben
// Müllers Kuh => 00_M-uuml-llers-nbsp-Kuh.txt
// ------------------------------------------------------------------------------
function nameToPage($pagename, $currentcat) {
global $CONTENT_DIR_ABS;
global $CONTENT_FILES_DIR;
global $EXT_DRAFT;
global $EXT_HIDDEN;
global $EXT_PAGE;
// Kategorie-Verzeichnis einlesen
$dircontent = getDirContentAsArray("$CONTENT_DIR_ABS/$currentcat", true, true);
// alle vorhandenen Inhaltsdateien durchgehen...
foreach ($dircontent as $currentelement) {
// ...und wenn eine auf den Namen paßt...
if (
(substr($currentelement, 3, strlen($currentelement) - 3 - strlen($EXT_PAGE)) == $pagename)
|| (substr($currentelement, 3, strlen($currentelement) - 3 - strlen($EXT_HIDDEN)) == $pagename)
|| (substr($currentelement, 3, strlen($currentelement) - 3 - strlen($EXT_DRAFT)) == $pagename)
) {
// ...den vollen Seitennamen zurückgeben
return $currentelement;
}
}
// Wenn keine Datei paßt: Leerstring zurückgeben
return "";
}
// ------------------------------------------------------------------------------
// Kategorienamen aus komplettem Verzeichnisnamen einer Kategorie zurückgeben
// 00_Alle-nbsp-K-uuml-he => Alle Kühe
// ------------------------------------------------------------------------------
function catToName($cat, $rebuildnbsp) {
global $specialchars;
return $specialchars->rebuildSpecialChars(substr($cat, 3, strlen($cat)), $rebuildnbsp);
}
// ------------------------------------------------------------------------------
// Seitennamen aus komplettem Dateinamen einer Inhaltsseite zurückgeben
// 00_M-uuml-llers-nbsp-Kuh.txt => Müllers Kuh
// ------------------------------------------------------------------------------
function pageToName($page, $rebuildnbsp) {
global $specialchars;
return $specialchars->rebuildSpecialChars(substr($page, 3, strlen($page) - 7), $rebuildnbsp);
}
// ------------------------------------------------------------------------------
// Inhalt einer Content-Datei einlesen, Rückgabe als String
// ------------------------------------------------------------------------------
function getContent() {
global $CONTENT_DIR_ABS;
global $CONTENT_FILES_DIR;
global $CAT_REQUEST;
global $PAGE_REQUEST;
global $EXT_HIDDEN;
global $EXT_PAGE;
global $EXT_DRAFT;
global $PAGE_FILE;
global $ACTION_REQUEST;
global $specialchars;
// Entwurf
if (
($ACTION_REQUEST == "draft") &&
(file_exists("$CONTENT_DIR_ABS/$CAT_REQUEST/$PAGE_REQUEST$EXT_DRAFT"))
) {
$PAGE_FILE = $PAGE_REQUEST.$EXT_HIDDEN;
return array (
implode("", file("$CONTENT_DIR_ABS/$CAT_REQUEST/$PAGE_REQUEST$EXT_DRAFT")),
catToName($CAT_REQUEST, true),
pageToName($PAGE_REQUEST.$EXT_DRAFT, true)
);
}
// normale Inhaltsseite
elseif (file_exists("$CONTENT_DIR_ABS/$CAT_REQUEST/$PAGE_REQUEST$EXT_PAGE")) {
$PAGE_FILE = $PAGE_REQUEST.$EXT_PAGE;
return array (
implode("", file("$CONTENT_DIR_ABS/$CAT_REQUEST/$PAGE_REQUEST$EXT_PAGE")),
catToName($CAT_REQUEST, true),
pageToName($PAGE_REQUEST.$EXT_PAGE, true)
);
}
// Versteckte Inhaltsseite
elseif (file_exists("$CONTENT_DIR_ABS/$CAT_REQUEST/$PAGE_REQUEST$EXT_HIDDEN")) {
$PAGE_FILE = $PAGE_REQUEST.$EXT_HIDDEN;
return array (
implode("", file("$CONTENT_DIR_ABS/$CAT_REQUEST/$PAGE_REQUEST$EXT_HIDDEN")),
catToName($CAT_REQUEST, true),
pageToName($PAGE_REQUEST.$EXT_HIDDEN, true)
);
}
else
return "";
}
// ------------------------------------------------------------------------------
// Auslesen des Content-Verzeichnisses unter Berücksichtigung
// des auszuschließenden File-Verzeichnisses, Rückgabe als Array
// ------------------------------------------------------------------------------
function getDirContentAsArray($dir, $iscatdir, $showhidden) {
global $CONTENT_FILES_DIR;
global $EXT_DRAFT;
global $EXT_HIDDEN;
global $EXT_PAGE;
$currentdir = opendir($dir);
$i=0;
$files = "";
// Einlesen des gesamten Content-Verzeichnisses außer dem
// auszuschließenden Verzeichnis und den Elementen . und ..
while ($file = readdir($currentdir)) {
if (
// wenn Kategorieverzeichnis: Alle Dateien auslesen, die auf $EXT_PAGE oder $EXT_HIDDEN enden...
(
(!$iscatdir)
|| (substr($file, strlen($file)-4, strlen($file)) == $EXT_PAGE)
|| ($showhidden && (substr($file, strlen($file)-4, strlen($file)) == $EXT_HIDDEN))
)
// ...und nicht $CONTENT_FILES_DIR
&& (($file <> $CONTENT_FILES_DIR) || (!$iscatdir))
// nicht "." und ".."
&& isValidDirOrFile($file)
) {
$files[$i] = $file;
$i++;
}
}
closedir($currentdir);
// Rückgabe des sortierten Arrays
if ($files <> "")
sort($files);
return $files;
}
// ------------------------------------------------------------------------------
// Aufbau des Hauptmenüs, Rückgabe als String
// ------------------------------------------------------------------------------
function getMainMenu() {
global $CONTENT_DIR_ABS;
global $CONTENT_FILES_DIR;
global $CAT_REQUEST;
global $PAGE_REQUEST;
global $specialchars;
global $mainconfig;
$mainmenu = "
";
// Kategorien-Verzeichnis einlesen
$categoriesarray = getDirContentAsArray($CONTENT_DIR_ABS, false, false);
// numerische Accesskeys für angezeigte Menüpunkte
$currentaccesskey = 0;
// Jedes Element des Arrays ans Menü anhängen
foreach ($categoriesarray as $currentcategory) {
// Wenn die Kategorie keine Contentseiten hat, zeige sie nicht an
if (getDirContentAsArray("$CONTENT_DIR_ABS/$currentcategory", true, false) == "") {
$mainmenu .= "";
}
// Aktuelle Kategorie als aktiven Menüpunkt anzeigen...
elseif ($currentcategory == $CAT_REQUEST) {
$currentaccesskey++;
//$mainmenu .= "";
$mainmenu .= "- ";
if ($mainconfig->get("usesubmenu") > 0) {
// $mainmenu .= "
- ".getDetailMenu($currentcategory)."
";
$mainmenu .= getDetailMenu($currentcategory);
}
$mainmenu .= "";
}
// ...alle anderen als normalen Menüpunkt.
else {
$currentaccesskey++;
//$mainmenu .= "";
$mainmenu .= "- ";
if ($mainconfig->get("usesubmenu") == 2) {
//$mainmenu .= "
- ".getDetailMenu($currentcategory)."
";
$mainmenu .= getDetailMenu($currentcategory);
}
$mainmenu .= "";
}
}
// Rückgabe des Menüs
return $mainmenu . "
";
}
// ------------------------------------------------------------------------------
// Aufbau des Detailmenüs, Rückgabe als String
// ------------------------------------------------------------------------------
function getDetailMenu($cat){
global $ACTION_REQUEST;
global $QUERY_REQUEST;
global $CONTENT_DIR_ABS;
global $CONTENT_FILES_DIR;
global $CAT_REQUEST;
global $PAGE_REQUEST;
global $EXT_DRAFT;
global $language;
global $specialchars;
global $mainconfig;
if ($mainconfig->get("usesubmenu") > 0)
$cssprefix = "submenu";
else
$cssprefix = "detailmenu";
$detailmenu = "";
}
// ------------------------------------------------------------------------------
// Rückgabe des Suchfeldes
// ------------------------------------------------------------------------------
function getSearchForm(){
global $language;
global $mainconfig;
$form = "";
return $form;
}
// ------------------------------------------------------------------------------
// Einlesen des Inhalts-Verzeichnisses, Rückgabe der zuletzt geänderten Datei
// ------------------------------------------------------------------------------
function getLastChangedContentPage(){
global $CONTENT_DIR_REL;
global $language;
global $specialchars;
$latestchanged = array("cat" => "catname", "file" => "filename", "time" => 0);
$currentdir = opendir($CONTENT_DIR_REL);
while ($file = readdir($currentdir)) {
if (isValidDirOrFile($file)) {
$latestofdir = getLastChangeOfCat($CONTENT_DIR_REL."/".$file);
if ($latestofdir['time'] > $latestchanged['time']) {
$latestchanged['cat'] = $file;
$latestchanged['file'] = $latestofdir['file'];
$latestchanged['time'] = $latestofdir['time'];
}
}
}
closedir($currentdir);
return $language->getLanguageValue0("message_lastchange_0")." getLanguageValue2("tooltip_link_page_2", $specialchars->rebuildSpecialChars(substr($latestchanged['file'], 3, strlen($latestchanged['file'])-7), true), $specialchars->rebuildSpecialChars(substr($latestchanged['cat'], 3, strlen($latestchanged['cat'])-3), true)))." id=\"lastchangelink\">".$specialchars->rebuildSpecialChars(substr($latestchanged['file'], 3, strlen($latestchanged['file'])-7), true)." (".strftime($language->getLanguageValue0("_dateformat_0"), date($latestchanged['time'])).")";
}
// ------------------------------------------------------------------------------
// Einlesen eines Kategorie-Verzeichnisses, Rückgabe der zuletzt geänderten Datei
// ------------------------------------------------------------------------------
function getLastChangeOfCat($dir){
global $EXT_HIDDEN;
global $EXT_PAGE;
global $mainconfig;
$showhiddenpages = ($mainconfig->get("showhiddenpagesinlastchanged") == "true");
$latestchanged = array("file" => "filename", "time" => 0);
$currentdir = opendir($dir);
while ($file = readdir($currentdir)) {
if (is_file($dir."/".$file)) {
// normale Inhaltsseiten
if (
(substr($file, strlen($file)-4, 4) == $EXT_PAGE)
// oder, wenn konfiguriert, auch versteckte
|| ($showhiddenpages && substr($file, strlen($file)-4, 4) == $EXT_HIDDEN)
)
{
if (filemtime($dir."/".$file) > $latestchanged['time']) {
$latestchanged['file'] = $file;
$latestchanged['time'] = filemtime($dir."/".$file);
}
}
}
}
closedir($currentdir);
return $latestchanged;
}
// ------------------------------------------------------------------------------
// Erzeugung einer Sitemap
// ------------------------------------------------------------------------------
function getSiteMap() {
global $CONTENT_DIR_ABS;
global $CONTENT_FILES_DIR;
global $language;
global $specialchars;
global $mainconfig;
$showhiddenpages = ($mainconfig->get("showhiddenpagesinsitemap") == "true");
$sitemap = "".$language->getLanguageValue0("message_sitemap_0")."
"
."";
// Kategorien-Verzeichnis einlesen
$categoriesarray = getDirContentAsArray($CONTENT_DIR_ABS, false, false);
// Jedes Element des Arrays an die Sitemap anhängen
foreach ($categoriesarray as $currentcategory) {
// Wenn die Kategorie keine Contentseiten hat, zeige sie nicht an
$contentarray = getDirContentAsArray("$CONTENT_DIR_ABS/$currentcategory", true, $showhiddenpages);
if ($contentarray == "")
continue;
$sitemap .= "
".catToName($currentcategory, false)."
";
}
$sitemap .= "
";
// Rückgabe der Sitemap
return array($sitemap, $language->getLanguageValue0("message_sitemap_0"), $language->getLanguageValue0("message_sitemap_0"));
}
// ------------------------------------------------------------------------------
// Anzeige der Suchergebnisse
// ------------------------------------------------------------------------------
function getSearchResult() {
global $CONTENT_DIR_ABS;
global $CONTENT_DIR_REL;
global $CONTENT_FILES_DIR;
global $USE_CMS_SYNTAX;
global $QUERY_REQUEST;
global $language;
global $specialchars;
global $mainconfig;
$showhiddenpages = ($mainconfig->get("showhiddenpagesinsearch") == "true");
$matchesoverall = 0;
$searchresults = "";
// Überhaupt erst etwas machen, wenn die Suche nicht leer ist
if (trim($QUERY_REQUEST) != "") {
// Damit die Links in der Ergbnisliste korrekt sind: Suchanfrage bereinigen
$queryarray = explode(" ", preg_replace('/"/', "", $QUERY_REQUEST));
$searchresults .= "".$language->getLanguageValue1("message_searchresult_1", (trim($QUERY_REQUEST)))."
"
."";
// Kategorien-Verzeichnis einlesen
$categoriesarray = getDirContentAsArray($CONTENT_DIR_ABS, false, false);
// Alle Kategorien durchsuchen
foreach ($categoriesarray as $currentcategory) {
// Wenn die Kategorie keine Contentseiten hat, direkt zur nächsten springen
$contentarray = getDirContentAsArray("$CONTENT_DIR_ABS/$currentcategory", true, $showhiddenpages);
if ($contentarray == "")
continue;
$matchingpages = array();
$i = 0;
// Alle Inhaltsseiten durchsuchen
foreach ($contentarray as $currentcontent) {
// Jedes Suchwort
foreach($queryarray as $query) {
if ($query == "")
continue;
// Treffer in der aktuellen Seite?
if (pageContainsWord($currentcategory, $currentcontent, $query, true)) {
// wenn noch nicht im Treffer-Array: hinzufügen
if (!in_array($currentcontent, $matchingpages))
$matchingpages[$i] = $currentcontent;
$i++;
}
}
}
// die gesammelten Seiten ausgeben
if (count($matchingpages) > 0) {
$highlightparameter = implode(",", $queryarray);
$categoryname = catToName($currentcategory, false);
$searchresults .= "
$categoryname
";
$matchesoverall += count($matchingpages);
}
}
$searchresults .= "
";
}
// Keine Inhalte gefunden?
if ($matchesoverall == 0)
$searchresults .= $language->getLanguageValue0("message_nodatafound_0", trim($QUERY_REQUEST));
// Rückgabe des Menüs
return array($searchresults, $language->getLanguageValue0("message_search_0"), $language->getLanguageValue1("message_searchresult_1", (trim($QUERY_REQUEST))));
}
// ------------------------------------------------------------------------------
// Inhaltsseite durchsuchen
// ------------------------------------------------------------------------------
function pageContainsWord($cat, $page, $query, $firstrecursion) {
global $CONTENT_DIR_REL;
global $specialchars;
$filepath = $CONTENT_DIR_REL."/".$cat."/".$page;
$ismatch = false;
$content = "";
// Dateiinhalt auslesen, wenn vorhanden...
if (filesize($filepath) > 0) {
$handle = fopen($filepath, "r");
$content = fread($handle, filesize($filepath));
fclose($handle);
// Zuerst: includierte Seiten herausfinden!
preg_match_all("/\[include\|([^\[\]]*)\]/Um", $content, $matches);
$i = 0;
// Für jeden Treffer...
foreach ($matches[1] as $match) {
// ...Auswertung und Verarbeitung der Informationen
$valuearray = explode(":", $matches[1][$i]);
// Inhaltsseite in aktueller Kategorie
if (count($valuearray) == 1) {
$includedpage = nameToPage($specialchars->replaceSpecialChars(html_entity_decode($matches[1][$i])), $cat);
// verhindern, daß in der includierten Seite includierte Seiten auch noch durchsucht werden
if ($firstrecursion) {
// includierte Seite durchsuchen!
if (pageContainsWord($cat, $includedpage, $query, false)) {
return true;
}
}
}
// Inhaltsseite in anderer Kategorie
else {
$includedpagescat = nameToCategory($specialchars->replaceSpecialChars(html_entity_decode($valuearray[0])));
$includedpage = nameToPage($specialchars->replaceSpecialChars(html_entity_decode($valuearray[1])), $includedpagescat);
// verhindern, daß in der includierten Seite includierte Seiten auch noch durchsucht werden
if ($firstrecursion) {
// includierte Seite durchsuchen!
if (pageContainsWord($includedpagescat, $includedpage, $query, false)) {
return true;
}
}
}
$i++;
}
// ...und alle Syntax-Tags entfernen. Gesucht werden soll nur im reinen Text
$content = preg_replace("/\[[^\[\]]+\|([^\[\]]*)\]/U", "$1", $content);
// Auch Emoticons in Doppelpunkten (z.B. ":lach:") sollen nicht berücksichtigt werden
$content = preg_replace("/:[^\s]+:/U", "", $content);
// Zum Schluß noch die horizontalen Linien ("[----]") von der Suche ausschließen
$content = preg_replace("/\[----\]/U", "", $content);
}
if ($query == "")
continue;
// Wenn...
if (
// ...der aktuelle Suchbegriff im Seitennamen...
(substr_count(strtolower(pageToName($page, false)), strtolower($query)) > 0)
// ...oder im eigentlichen Seiteninhalt vorkommt (überprüft werden nur Seiten, die nicht leer sind), ...
|| ((filesize($filepath) > 0) && (substr_count(strtolower($content), strtolower(html_entity_decode($query))) > 0))
) {
// ...dann setze das Treffer-Flag
$ismatch = true;
}
/* echo "pageContainsWord($cat, $page, $query, $firstrecursion)";
if ($ismatch)
echo " -> TREFFER!";
echo "
";
*/
// Ergebnis zurückgeben
return $ismatch;
}
// ------------------------------------------------------------------------------
// E-Mail-Adressen verschleiern
// ------------------------------------------------------------------------------
// Dank für spam-me-not.php an Rolf Offermanns!
// Spam-me-not in JavaScript: http://www.zapyon.de
function obfuscateAdress($originalString, $mode) {
// $mode == 1 dezimales ASCII
// $mode == 2 hexadezimales ASCII
// $mode == 3 zufällig gemischt
$encodedString = "";
$nowCodeString = "";
$randomNumber = -1;
$originalLength = strlen($originalString);
$encodeMode = $mode;
for ( $i = 0; $i < $originalLength; $i++) {
if ($mode == 3) $encodeMode = rand(1,2);
switch ($encodeMode) {
case 1: // Decimal code
$nowCodeString = "" . ord($originalString[$i]) . ";";
break;
case 2: // Hexadecimal code
$nowCodeString = "" . dechex(ord($originalString[$i])) . ";";
break;
default:
return "ERROR: wrong encoding mode.";
}
$encodedString .= $nowCodeString;
}
return $encodedString;
}
// ------------------------------------------------------------------------------
// Phrasen in Inhalt hervorheben
// ------------------------------------------------------------------------------
function highlight($content, $phrasestring) {
// Zu highlightende Begriffe kommen kommasepariert ("begriff1,begriff2")-> in Array wandeln
$phrasearray = explode(",", htmlentities($phrasestring));
// jeden Begriff highlighten
foreach($phrasearray as $phrase) {
// Regex-Zeichen im zu highlightenden Text escapen (.\+*?[^]$(){}=!<>|:)
$phrase = preg_quote($phrase);
// Slashes im zu highlightenden Text escapen
$phrase = preg_replace("/\//", "\\\\/", $phrase);
$content = preg_replace("/((<[^>]*|&[^;]*|{CONTACT})|$phrase)/ie", '"\2"=="\1"? "\1":"\1"', $content);
}
return $content;
}
// ------------------------------------------------------------------------------
// Rückgabe des Website-Titels
// ------------------------------------------------------------------------------
function getWebsiteTitle($websitetitle, $cattitle, $pagetitle) {
global $mainconfig;
$title = $mainconfig->get("titlebarformat");
$sep = $mainconfig->get("titlebarseparator");
$title = preg_replace('/{WEBSITE}/', $websitetitle, $title);
if ($cattitle == "")
$title = preg_replace('/{CATEGORY}/', "", $title);
else
$title = preg_replace('/{CATEGORY}/', $cattitle, $title);
$title = preg_replace('/{PAGE}/', $pagetitle, $title);
$title = preg_replace('/{SEP}/', $sep, $title);
return $title;
}
// ------------------------------------------------------------------------------
// Überprüfung auf
// ------------------------------------------------------------------------------
function hasValidContentExtension($filename) {
}
// ------------------------------------------------------------------------------
// Anzeige der Informationen zum System
// ------------------------------------------------------------------------------
function getCmsInfo() {
global $mainconfig;
global $language;
return "getLanguageValue1("tooltip_link_extern_1", "http://cms.mozilo.de")).">moziloCMS ".$mainconfig->get("cmsversion")."";
}
// ------------------------------------------------------------------------------
// Platzhalter im übergebenen String ersetzen
// ------------------------------------------------------------------------------
function replacePlaceholders($content, $cattitle, $pagetitle) {
global $mainconfig;
global $CAT_REQUEST;
global $PAGE_REQUEST;
global $PAGE_FILE;
global $EXT_PAGE;
// Titel der Website
$content = preg_replace('/{WEBSITE_NAME}/', $mainconfig->get("websitetitle"), $content);
if ($CAT_REQUEST != "") {
// "unbehandelter" Name der aktuellen Kategorie ("10_M-uuml-llers-nbsp-Kuh")
$content = preg_replace('/{CATEGORY}/', $CAT_REQUEST, $content);
// "sauberer" Name der aktuellen Kategorie ("Müllers Kuh")
$content = preg_replace('/{CATEGORY_NAME}/', catToName($CAT_REQUEST, true), $content);
}
// Suche, Sitemap
else {
// "unbehandelter" Name der aktuellen Kategorie ("10_M-uuml-llers-nbsp-Kuh")
$content = preg_replace('/{CATEGORY}/', $cattitle, $content);
// "sauberer" Name der aktuellen Kategorie ("Müllers Kuh")
$content = preg_replace('/{CATEGORY_NAME}/', $cattitle, $content);
}
if ($PAGE_REQUEST != "") {
// "unbehandelter" Name der aktuellen Inhaltsseite ("10_M-uuml-llers-nbsp-Kuh")
$content = preg_replace('/{PAGE}/', $PAGE_REQUEST, $content);
// Dateiname der aktuellen Inhaltsseite ("10_M-uuml-llers-nbsp-Kuh.txt")
$content = preg_replace('/{PAGE_FILE}/', $PAGE_FILE, $content);
// "sauberer" Name der aktuellen Inhaltsseite ("Müllers Kuh")
$content = preg_replace('/{PAGE_NAME}/', pageToName($PAGE_FILE, true), $content);
}
// Suche, Sitemap
else {
// "unbehandelter" Name der aktuellen Inhaltsseite ("10_M-uuml-llers-nbsp-Kuh")
$content = preg_replace('/{PAGE}/', $pagetitle, $content);
// Dateiname der aktuellen Inhaltsseite ("10_M-uuml-llers-nbsp-Kuh.txt")
$content = preg_replace('/{PAGE_FILE}/', $pagetitle, $content);
// "sauberer" Name der aktuellen Inhaltsseite ("Müllers Kuh")
$content = preg_replace('/{PAGE_NAME}/', $pagetitle, $content);
}
// ...und zurückgeben
return $content;
}
// ------------------------------------------------------------------------------
// Handelt es sich um ein valides Verzeichnis / eine valide Datei?
// ------------------------------------------------------------------------------
function isValidDirOrFile($file) {
return (!in_array($file, array(
".", // aktuelles Verzeichnis
"..", // Parent-Verzeichnis
"Thumbs.db", // Windows-spezifisch
".DS_Store", // Mac-spezifisch
"__MACOSX", // Mac-spezifisch
".svn", // SVN
".cache", // Eclipse
"settings" // Eclipse
)));
}
// ------------------------------------------------------------------------------
// Gibt das Kontaktformular zurück
// ------------------------------------------------------------------------------
function buildContactForm() {
global $contactformconfig;
global $language;
global $mailfunctions;
global $WEBSITE_NAME;
global $adminconfig;
global $CAT_REQUEST;
global $PAGE_REQUEST;
// Ist Mailversand überhaupt aktiviert? Wenn nicht: Das Kontaktformular gar nicht anzeigen!
if ($adminconfig->get("sendadminmail") != "true") {
return "getLanguageValue0("tooltip_no_mail_error_0")).">{CONTACT}";
}
$config_name = explode(",", ($contactformconfig->get("name")));
$config_mail = explode(",", ($contactformconfig->get("mail")));
$config_website = explode(",", ($contactformconfig->get("website")));
$config_message = explode(",", ($contactformconfig->get("message")));
$errormessage = "";
$form = "";
$name = getRequestParam('name', false);
$mail = getRequestParam('mail', false);
$website = getRequestParam('website', false);
$message = getRequestParam('message', false);
// Das Formular wurde abgesendet
if (getRequestParam('submit', false) <> "") {
// Bot-Schutz: Wurde das Formular innerhalb von 5 Sekunden abgeschickt?
if (time() - getRequestParam('loadtime', false) < 5) {
die ("Netter Versuch.");
}
// Eines der Pflichtfelder leer?
if (($config_name[1] == "true") && ($name == "")) {
$errormessage = $language->getLanguageValue0("contactform_fieldnotset_0")." ".$language->getLanguageValue0("contactform_name_0");
}
else if (($config_mail[1] == "true") && ($mail == "")) {
$errormessage = $language->getLanguageValue0("contactform_fieldnotset_0")." ".$language->getLanguageValue0("contactform_mail_0");
}
else if (($config_website[1] == "true") && ($website == "")) {
$errormessage = $language->getLanguageValue0("contactform_fieldnotset_0")." ".$language->getLanguageValue0("contactform_website_0");
}
else if (($config_message[1] == "true") && ($message == "")) {
$errormessage = $language->getLanguageValue0("contactform_fieldnotset_0")." ".$language->getLanguageValue0("contactform_message_0");
}
// Es ist ein Fehler aufgetreten!
if ($errormessage <> "") {
$form .= "".$errormessage."";
}
else {
$mailcontent = "";
if ($config_name[0] == "true") {
$mailcontent .= $language->getLanguageValue0("contactform_name_0").":\t".$name."\r\n";
}
if ($config_mail[0] == "true") {
$mailcontent .= $language->getLanguageValue0("contactform_mail_0").":\t".$mail."\r\n";
}
if ($config_website[0] == "true") {
$mailcontent .= $language->getLanguageValue0("contactform_website_0").":\t".$website."\r\n";
}
if ($config_message[0] == "true") {
$mailcontent .= "\r\n".$language->getLanguageValue0("contactform_message_0").":\r\n".$message."\r\n";
}
$mailsubject = $language->getLanguageValue1("contactform_mailsubject_1", html_entity_decode($WEBSITE_NAME));
// Wenn Mail-Adresse gesetzt ist: Als Absender für die Mail nutzen
if ($mail <> "") {
$mailfunctions->sendMailToAdminWithFrom($mailsubject, $mailcontent, $mail);
}
// ansonsten Mail ohne festgelegten Absender losschicken
else {
$mailfunctions->sendMailToAdmin($mailsubject, $mailcontent);
}
$form .= "".$language->getLanguageValue0("contactform_confirmation_0")."";
// Felder leeren
$name = "";
$mail = "";
$website = "";
$message = "";
}
}
$form .= "";
return $form;
}
// ------------------------------------------------------------------------------
// Hilfsfunktion: Sichert einen Input-Wert
// ------------------------------------------------------------------------------
function cleanInput($input) {
if (function_exists("mb_convert_encoding")) {
$input = htmlentities(@mb_convert_encoding($input, "ISO-8859-1"));
}
return htmlentities($input, ENT_QUOTES, 'ISO8859-1');
}
// ------------------------------------------------------------------------------
// Hilfsfunktion: Prüft einen Requestparameter
// ------------------------------------------------------------------------------
function getRequestParam($param, $clean) {
if (isset($_REQUEST[$param])) {
// Nullbytes abfangen!
if (strpos($_REQUEST[$param], "\x00") > 0) {
die();
}
if ($clean) {
return cleanInput($_REQUEST[$param]);
}
else {
return $_REQUEST[$param];
}
}
// Parameter ist nicht im Request vorhanden
else {
return "";
}
}
// ------------------------------------------------------------------------------
// Hilfsfunktion: "title"-Attribut zusammenbauen (oder nicht, wenn nicht konfiguriert)
// ------------------------------------------------------------------------------
function getTitleAttribute($value) {
global $mainconfig;
if ($mainconfig->get("showsyntaxtooltips") == "true") {
return " title=\"".$value."\"";
}
return "";
}
?>