Code: Alles auswählen
<?php
/******************************************************************
* CONTENIDO MODUL - OUTPUT
*
* Modulname     :	  vpComment-Alpha 0.1
* Basierend auf :     vpGuestbook 1.9
* Author        :     Ingo van Peeren
* Copyright     :     Ingo van Peeren (ingo@van-peeren.de)
* Created       :     2005-03-14
* Modified      :     2006-01-31 by Thomas Thut
* Detail        :     Der OUTPUT-Teil von Ausgabe und Eingabe 
*                     von vpGuestbook zusammengelegt in
*                     ein Modul
******************************************************************/
// CMS_VARs initialisieren aus ausgabe output
$spez_client         = "CMS_VALUE[1]";
$spez_lang           = "CMS_VALUE[2]";
$tpl_datei_ausgabe   = "CMS_VALUE[3]";
$tpl_art             = "CMS_VALUE[4]";
//$bilderpfad          = "CMS_VALUE[5]";  // wird unten definiert
$eintraege_pro_seite = "CMS_VALUE[6]";
$seitennav_art       = "CMS_VALUE[7]";
$dateformat1         = "CMS_VALUE[8]";
$dateformat2         = "CMS_VALUE[9]";
$locale              = "CMS_VALUE[10]";
$wrap_length         = "CMS_VALUE[11]";
$link_vor            = "CMS_VALUE[12]";
$link_zurueck        = "CMS_VALUE[13]";
$max_seiten          = "CMS_VALUE[14]";
// CMS_VARs initialisieren Ende
// CMS_VARs initialisieren aus eingabe output
//$ausgabe_cat            = "CMS_VALUE[1]";  // wozu?
//$ausgabe_cont           = "CMS_VALUE[2]";  // wozu?
$tpl_datei_eingabe      = "CMS_VALUE[15]";
//$tpl_art                = "CMS_VALUE[4]";  // schon definiert
$smilies_aktiv          = "CMS_VALUE[16]";
$smiliespfad            = "CMS_VALUE[17]"."/"; // den slash braucht es offenbar noch
$bbcode_aktiv           = "CMS_VALUE[20]";
$userfeld1              = "CMS_VALUE[21]";
$userfeld2              = "CMS_VALUE[22]";
$userfeld3              = "CMS_VALUE[23]";
$email_benachrichtigung = "CMS_VALUE[24]";
$emails_an              = "CMS_VALUE[25]";
$cookie_aktiv           = "CMS_VALUE[26]";
$cookie_dauer           = "CMS_VALUE[27]";
$direkt_sichtbar        = "CMS_VALUE[28]";
if ($direkt_sichtbar != 1) $direkt_sichtbar = 0;
$xhtml                  = "CMS_VALUE[29]";
$bilderpfad             = "CMS_VALUE[19]";
$avatare_aktiv          = "CMS_VALUE[18]";
// CMS_VARs initialisieren Ende
// Mailer-Klasse einbinden
cInclude('classes',  'class.phpmailer.php');
// eXtended-Template-Klasse (von swelpot) einbinden
// zur Verwendung siehe:
// http://www.contenido.org/forum/viewtopic.php?t=5851
if ($tpl_art == "extended") cInclude('classes',  'class.ExtendedTemplate.php');
else cInclude('classes',  'class.template.php');
$edit_url = "front_content.php?changeview=edit&client=$client&lang=$lang&action=con_editart&idartlang=$idartlang&idart=$idart&idcat=$idcat&contenido=" . $sess->id;
// locale auf ausgewählten Wert setzen
setlocale (LC_ALL, $locale);
// DB-Verbindung konfigurieren
$cfg["tab"]["vpguestbook"] = $cfg['sql']['sqlprefix']."_vpguestbook";
$db = new DB_Contenido;
// Funktionen
function htmlwrap($str, $width = 60, $break = "\n", $nobreak = "", $nobr = "pre", $utf = false) {
  // Split HTML content into an array delimited by < and >
  // The flags save the delimeters and remove empty variables
  $content = preg_split("/([<>])/", $str, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
  // Transform protected element lists into arrays
  $nobreak = explode(" ", $nobreak);
  $nobr = explode(" ", $nobr);
  // Variable setup
  $intag = false;
  $innbk = array();
  $innbr = array();
  $drain = "";
  $utf = ($utf) ? "u" : "";
  // List of characters it is "safe" to insert line-breaks at
  // Do not add ampersand (&) as it will mess up HTML Entities
  // It is not necessary to add < and >
  $lbrks = "/?!%)-}]\\\"':;";
  // We use \r for adding <br /> in the right spots so just switch to \n
  if ($break == "\r") $break = "\n";
  while (list(, $value) = each($content)) {
    switch ($value) {
      // If a < is encountered, set the "in-tag" flag
      case "<": $intag = true; break;
      // If a > is encountered, remove the flag
      case ">": $intag = false; break;
      default:
        // If we are currently within a tag...
        if ($intag) {
          // If the first character is not a / then this is an opening tag
          if ($value{0} != "/") {
            // Collect the tag name
            preg_match("/^(.*?)(\s|$)/$utf", $value, $t);
            // If this is a protected element, activate the associated protection flag
            if ((!count($innbk) && in_array($t[1], $nobreak)) || in_array($t[1], $innbk)) $innbk[] = $t[1];
            if ((!count($innbr) && in_array($t[1], $nobr)) || in_array($t[1], $innbr)) $innbr[] = $t[1];
          // Otherwise this is a closing tag
          } else {
            // If this is a closing tag for a protected element, unset the flag
            if (in_array(substr($value, 1), $innbk)) unset($innbk[count($innbk)]);
            if (in_array(substr($value, 1), $innbr)) unset($innbr[count($innbr)]);
          }
        // Else if we're outside any tags...
        } else if ($value) {
          // If unprotected, remove all existing \r, replace all existing \n with \r
          if (!count($innbr)) $value = str_replace("\n", "\r", str_replace("\r", "", $value));
          // If unprotected, enter the line-break loop
          if (!count($innbk)) {
            do {
              $store = $value;
              // Find the first stretch of characters over the $width limit
              if (preg_match("/^(.*?\s|^)(([^\s&]|&(\w{2,5}|#\d{2,4});){".$width."})(?!(".preg_quote($break, "/")."|\s))(.*)$/s$utf", $value, $match)) {
                // Determine the last "safe line-break" character within this match
                for ($x = 0, $ledge = 0; $x < strlen($lbrks); $x++) $ledge = max($ledge, strrpos($match[2], $lbrks{$x}));
                if (!$ledge) $ledge = strlen($match[2]) - 1;
                // Insert the modified string
                $value = $match[1].substr($match[2], 0, $ledge + 1).$break.substr($match[2], $ledge + 1).$match[6];
              }
            // Loop while overlimit strings are still being found
            } while ($store != $value);
          }
          // If unprotected, replace all \r with <br />\n to finish
          if (!count($innbr)) $value = str_replace("\r", "<br />\n", $value);
        }
    }
    // Send the modified segment down the drain
    $drain .= $value;
  }
  // Return contents of the drain
  return $drain;
}
function toggle_active ($entry) {
  global $db, $cfg;
  $sql = "UPDATE ".$cfg["tab"]["vpguestbook"]." SET active = '1' WHERE id='$entry'";
  $db->query($sql);
}
function toggle_inactive ($entry) {
  global $db, $cfg;
  $sql = "UPDATE ".$cfg["tab"]["vpguestbook"]." SET active = '0' WHERE id='$entry'";
  $db->query($sql);
}
function eintrag_loeschen ($entry) {
  global $db, $cfg;
  $sql = "DELETE FROM ".$cfg["tab"]["vpguestbook"]." WHERE id='$entry'";
  $db->query($sql);
}
function eintraege_zaehlen () {
  global $db, $cfg, $client, $lang, $idart;
// orig code
//  $sql = "SELECT COUNT(*) as anzahl FROM ".$cfg["tab"]["vpguestbook"]." WHERE client=$client AND active=1";
  $sql = "SELECT COUNT(*) as anzahl FROM ".$cfg["tab"]["vpguestbook"]." WHERE client=$client AND lang=$lang AND active=1 AND art=$idart";
  $db->query($sql);
  $db->next_record();
  return $db->f("anzahl");
}
function eintraege_auslesen ($start, $anzahl) {
  global $db, $cfg, $client, $lang, $idart, $spez_client, $spez_lang, $edit;
  if ($edit && empty($_GET['edit'])) $where = "WHERE 1";
  else $where = "WHERE active=1";
  if ($spez_client) $where .= " AND client=$client";
  if ($spez_lang) $where .= " AND lang=$lang";
// where-zusatz: soll ja nicht mehr nach kategorien sondern auf artikeln basieren  
  $where .= " AND art=$idart";
// originalcode
//  $sql = "SELECT id, active, name, email, url, entry, image, comment, iphost, user1, user2, user3, UNIX_TIMESTAMP(date) as datum FROM ".$cfg["tab"]["vpguestbook"]." $where ORDER BY date DESC LIMIT $start, $anzahl";
  $sql = "SELECT id, active, name, email, url, entry, image, comment, iphost, user1, user2, user3, UNIX_TIMESTAMP(date) as datum FROM ".$cfg["tab"]["vpguestbook"]." $where ORDER BY date LIMIT $start, $anzahl";
  $db->query($sql);
  $eintraege = array();
  $i = 0;
  while ($db->next_record()) {
    $eintraege[$i]['id']      = $db->f("id");
    $eintraege[$i]['active']  = $db->f("active");
    $eintraege[$i]['name']    = $db->f("name");
    $eintraege[$i]['email']   = $db->f("email");
    $eintraege[$i]['url']     = $db->f("url");
    $eintraege[$i]['entry']   = $db->f("entry");
    $eintraege[$i]['image']   = $db->f("image");
    $eintraege[$i]['comment'] = $db->f("comment");
    $eintraege[$i]['iphost']  = $db->f("iphost");
    $eintraege[$i]['user1']   = $db->f("user1");
    $eintraege[$i]['user2']   = $db->f("user2");
    $eintraege[$i]['user3']   = $db->f("user3");
    $eintraege[$i]['date']    = $db->f("datum");
    $i++;
  }
  return $eintraege;
}
function vpgb_navigation ($start, $eintraege_pro_seite, $anzahl_eintraege, $navi_art = 1) {
global $link_vor, $link_zurueck, $idcat, $idcatart, $idart, $max_seiten;
// originalcode
//            $hier = "front_content.php?idcatart=" . $idcatart;
// navigation innerhalb artikel und nicht kategorie
            $hier = "front_content.php?idart=" . $idart;
            $vpgb_nav = "";
            if ($start > 0) {
                $vpgb_nav .= "<a href=\"" . $hier . "&start=" . ($start - $eintraege_pro_seite) . "\">" . $link_zurueck . "</a>";
            }
            if ($anzahl_eintraege > $eintraege_pro_seite) {
                $anzahl_seiten = ceil($anzahl_eintraege / $eintraege_pro_seite);
                if (($max_seiten == "") || ($max_seiten > $anzahl_seiten)) {
                  for ($h = 1; $h <= $anzahl_seiten; $h++) {
                    $hstart = ($h - 1) * $eintraege_pro_seite;
                    if ($navi_art == 1) {
                      if ($h == $anzahl_seiten) {
                          if ($anzahl_eintraege > ($hstart + 1)) $htext = ($hstart + 1) . "-" . $anzahl_eintraege;
                          else $htext = $anzahl_eintraege;
                      }
                      else $htext = ($hstart + 1) . "-" . ($hstart + $eintraege_pro_seite);
                    }
                    else $htext = $h;
                    if ($hstart == $start) $vpgb_nav .= " <a class=\"vpgb_aktiv\" href=\"" . $hier . "&start=" . $hstart . "\">" . $htext . "</a>";
                    else $vpgb_nav .= " <a href=\"" . $hier . "&start=" . $hstart . "\">" . $htext . "</a>";
                  }
                }
                else {
                  for ($h = 1; $h <= $anzahl_seiten; $h++) {
                    $hstart = ($h - 1) * $eintraege_pro_seite;
                    if ($navi_art == 1) {
                      if ($h == $anzahl_seiten) {
                          if ($anzahl_eintraege > ($hstart + 1)) $htext = ($hstart + 1) . "-" . $anzahl_eintraege;
                          else $htext = $anzahl_eintraege;
                      }
                      else $htext = ($hstart + 1) . "-" . ($hstart + $eintraege_pro_seite);
                    }
                    else $htext = $h;
                    if (($hstart < $eintraege_pro_seite * 2) || ($hstart > (($anzahl_seiten - 3) * $eintraege_pro_seite)) || (($hstart > ($start - ($eintraege_pro_seite * 2))) && ($hstart < ($start + ($eintraege_pro_seite * 2))))) {
                      if ($hstart == $start) $vpgb_nav .= " <a class=\"vpgb_aktiv\" href=\"" . $hier . "&start=" . $hstart . "\">" . $htext . "</a>";
                      else $vpgb_nav .= " <a href=\"" . $hier . "&start=" . $hstart . "\">" . $htext . "</a>";
                    }
                    else $vpgb_nav .= "###";
                  }
                }
            }
            if (($start + $eintraege_pro_seite) < $anzahl_eintraege) {
                $vpgb_nav .= " <a href=\"" . $hier . "&start=" . ($start + $eintraege_pro_seite) . "\">" . $link_vor . "</a>";
            }
  $vpgb_nav = preg_replace("/(\#+)/", " <span class=\"vpgb_punkte\">…</span>", $vpgb_nav);
  return $vpgb_nav;
}
function edit_comment ($entry_id, $new_entry, $type) {
  global $db, $cfg, $client;
  if ($type == "delete") {
    $sql = "UPDATE ".$cfg["tab"]["vpguestbook"]." SET comment = '' WHERE id='$entry_id'";
    $db->query($sql);
  }
  else {
    $sql = "UPDATE ".$cfg["tab"]["vpguestbook"]." SET comment = '$new_entry' WHERE id='$entry_id'";
    $db->query($sql);
  }
}
// Funktionen für die Ausgabe Ende
// Funktionen für die Eingabe
function testURL($url) {
  if(eregi("http://", $url))   {
    $url = str_replace ("http://", "", $url);
  }
  if ($url != "") {
    $url = "http://".$url;
  }
  return $url;
}
function cookie_setzen ($dauer) {
  global $sess, $vpgblastentry;
  $vpgblastentry = time()+$dauer*60;
  if ($sess->is_registered("vpgblastentry")) $sess->unregister("vpgblastentry");
  $sess->register("vpgblastentry");
}
function vpgb_js () {
  $js = "
    <script type=\"text/javascript\">
    function storeCaret ()
    {
      if (document.getElementById('vpgb_eintrag').entry.createTextRange) document.getElementById('vpgb_eintrag').entry.caretPos = document.selection.createRange().duplicate();
    }
    function insertAtCaret (icon1, icon2)
    {
      if (document.getElementById('vpgb_eintrag').entry.createTextRange && document.getElementById('vpgb_eintrag').entry.caretPos)
      {
        var caretPos = document.getElementById('vpgb_eintrag').entry.caretPos;
        selectedtext = caretPos.text;
        caretPos.text = caretPos.text.charAt(caretPos.text.length - 1) == '' ? ' '+icon1 + ' ' : ' '+icon1+' ';
        caretPos.text = caretPos.text + selectedtext + icon2;
      }
      else document.getElementById('vpgb_eintrag').entry.value = document.getElementById('vpgb_eintrag').entry.value + ' '+icon1 + ' ' + icon2+' '
      document.getElementById('vpgb_eintrag').entry.focus();
    }
    function DoPrompt(action) {
    var revisedMessage;
    var post = document.getElementById(\"vpgb_eintrag\");
    var currentMessage = post.entry.value;
    if (action == \"url\") {
        var thisURL = prompt(\"URL der gewünschten Seite angeben\", \"http://\");
        var thisTitle = prompt(\"Titel der Seite angeben\", \"Seitentitel\");
        var urlBBCode = \"[URL=\"+thisURL+\"]\"+thisTitle+\"[/URL]\";
        revisedMessage = currentMessage+urlBBCode;
        post.entry.value=revisedMessage;
        post.entry.focus();
        return;
    }
    if (action == \"email\") {
        var thisEmail = prompt(\"gewünschte E-Mail-Adresse angeben\", \"\");
        var emailBBCode = \"[EMAIL]\"+thisEmail+\"[/EMAIL]\";
        revisedMessage = currentMessage+emailBBCode;
        post.entry.value=revisedMessage;
        post.entry.focus();
        return;
    }
    if (action == \"bold\") {
        var thisBold = prompt(\"den fetten Text angeben\", \"\");
        var boldBBCode = \"[b]\"+thisBold+\"[/b]\";
        revisedMessage = currentMessage+boldBBCode;
        post.entry.value=revisedMessage;
        post.entry.focus();
        return;
    }
    if (action == \"italic\") {
        var thisItal = prompt(\"den kursiven Text angeben\", \"\");
        var italBBCode = \"[i]\"+thisItal+\"[/i]\";
        revisedMessage = currentMessage+italBBCode;
        post.entry.value=revisedMessage;
        post.entry.focus();
        return;
    }
    if (action == \"underline\") {
        var thisUL = prompt(\"den unterstrichenenen Text angeben\", \"\");
        var ulBBCode = \"[u]\"+thisUL+\"[/u]\";
        revisedMessage = currentMessage+ulBBCode;
        post.entry.value=revisedMessage;
        post.entry.focus();
        return;
    }
    }
    </script>
  ";
  return $js;
}
function smilies_preg_quote($str, $delimiter)
{
	$text = preg_quote($str);
	$text = str_replace($delimiter, '\\' . $delimiter, $text);
	return $text;
}
function smilies_auslesen () {
  global $cfgClient, $client, $smiliespfad;
  $fcontents = file($cfgClient[$client]['path']['frontend'] . $cfgClient[$client]['upload'] . $smiliespfad . 'smiles.pak');
  if (is_array($fcontents)) {
    $i = 0;
    foreach($fcontents as $zeile)
    {
      $smilies_daten = explode("=+:", trim(addslashes($zeile)));
      $smilies[$i]['icon'] = $smilies_daten[0];
      $smilies[$i]['erklaerung'] = $smilies_daten[1];
      $smilies[$i]['ersetzung'] = $smilies_daten[2];
      $i++;
    }
  }
  return $smilies;
}
function smilies_ersetzen ($entry) {
  global $smilies, $cfgClient, $client, $smiliespfad;
  if (is_array($smilies)) {
    foreach ($smilies as $row) {
      $ers = "/(?<=.\W|\W.|^\W)" . smilies_preg_quote($row['ersetzung'], "/") . "(?=.\W|\W.|\W$)/";
      $entry = preg_replace($ers, '<img src="' . $cfgClient[$client]['upload'] . $smiliespfad. $row['icon'].'" alt="' . $row['erklaerung'] . '" />',$entry);
    }
  }
  return $entry;
}
function smilies_ausgeben ($smilies) {
  global $cfgClient, $client, $smiliespfad, $einzeltag;
  $code = "";
  if (is_array($smilies)) {
    foreach($smilies as $smilie)
    {
      if ($smilie['icon'] != $h) $code .= "<a class=\"smilie\" href=\"javascript:insertAtCaret('" . htmlspecialchars($smilie['ersetzung']) . "','')\"><img src=\"" . $cfgClient[$client]['path']['htmlpath'] . $cfgClient[$client]['upload'] . $smiliespfad . $smilie['icon'] . "\" alt=\"" . htmlspecialchars($smilie['erklaerung']) . "\"".$einzeltag."></a>";
      $h = $smilie['icon'];
    }
  }
  return $code;
}
function bbcode_link ($type) {
  $link = "javascript:DoPrompt('".$type."')";
  return $link;
}
function bbcode_ersetzen ($text) {
  global $xhtml;
  if ($xhtml) {
    $text = str_ireplace("[b]", "<strong>", $text);
    $text = str_ireplace("[/b]", "</strong>", $text);
    $text = str_ireplace("[i]", "<em>", $text);
    $text = str_ireplace("[/i]", "</em>", $text);
    $text = str_ireplace("[u]", "<u>", $text);
    $text = str_ireplace("[/u]", "</u>", $text);
  }
  else {
    $text = str_ireplace("[b]", "<b>", $text);
    $text = str_ireplace("[/b]", "</b>", $text);
    $text = str_ireplace("[i]", "<i>", $text);
    $text = str_ireplace("[/i]", "</i>", $text);
    $text = str_ireplace("[u]", "<u>", $text);
    $text = str_ireplace("[/u]", "</u>", $text);
  }
  $patterns = array();
  $replacements = array();
  $patterns[0] = "/\[url\]www.([^\[]*)\[\/url\]/i";
  $replacements[0] = "<a href=\"http://www.\\1\" target=_blank>\\1</a>";
  $patterns[1] = "/\[url\]([^\[]*)\[\/url\]/i";
  $replacements[1] = "<a href=\"\\1\" target=_blank>\\1</a>";
  $patterns[2] = "/\[url=([^\[]*)\]([^\[]*)\[\/url\]/i";
  $replacements[2] = "<a href=\"\\1\" target=_blank>\\2</a>";
  $patterns[3] = "/\[email\]([^\[]*)\[\/email\]/i";
  $replacements[3] = "<a href=\"mailto:\\1\">\\1</a>";
  $patterns[4] = "/\[email=([^\[]*)\]([^\[]*)\[\/email\]/i";
  $replacements[4] = "<a href=\"mailto:\\1\">\\2</a>";
  $text = preg_replace($patterns, $replacements, $text);
  return $text;
}
function bilder_liste () {
  global $cfgClient, $client, $bilderpfad;
  $basedir = getcwd();
  chdir($cfgClient[$client]['path']['frontend'] . $cfgClient[$client]['upload'] . $bilderpfad);
  $handle = opendir(".");
  while ($file = readdir($handle)) {
    if (is_dir($file)) $dirlist[] = $file;
    if (is_file($file)) $filelist[] = $file;
  }
  closedir($handle);
  $wdir2 = $basedir . "/";
  chdir($wdir2);
  if ($filelist) {
    asort($filelist);
  }
  $i = 0;
  if (is_array($filelist)) {
    while (list ($key, $file) = each ($filelist)) {
      $bilder[$i] = $file;
      $i++;
    }
  }
  return $bilder;
}
function bilder_radio ($bilder) {
  global $cfgClient, $client, $bilderpfad, $einzeltag;
  $code = "";
  if (is_array($bilder)) {
    foreach ($bilder as $bild) {
      $code .= "<div style=\"float: left;\"><img src=\"" . $cfgClient[$client]['path']['htmlpath'] . $cfgClient[$client]['upload'] . $bilderpfad . $bild . "\" alt=\"$bild\" ".$einzeltag."><br".$einzeltag."><input type=\"radio\" name=\"test\" value=\"$bild\"".$einzeltag."></div>\n";
    }
    $code .= "<br style=\"clear: all;\"".$einzeltag.">";
  }
  return $code;
}
function bilder_select ($bilder) {
  global $cfgClient, $client, $bilderpfad, $einzeltag;
  $code = "";
  if (is_array($bilder)) {
    $code .= "<select size=\"1\" name=\"image\" id=\"image\" onchange=\"document.getElementById('vpgb_image').src= '" . $cfgClient[$client]['path']['htmlpath'] . $cfgClient[$client]['upload'] . $bilderpfad . "' + document.getElementById('vpgb_eintrag').image.options[document.getElementById('vpgb_eintrag').image.selectedIndex].value
    \">\n";
    $h = 0;
    foreach ($bilder as $bild) {
      $code .= "<option value=\"$bild\">$bild</option>\n";
      if ($h == 0) {
        $erstes = $bild;
        $h = 1;
      }
    }
    $code .= "</select>\n";
    $code .= "<img src=\"" . $cfgClient[$client]['path']['htmlpath'] . $cfgClient[$client]['upload'] . $bilderpfad . $erstes . "\" id=\"vpgb_image\" alt=\"\"".$einzeltag.">\n";
  }
  return $code;
}
function benachrichtigung ($name, $email, $url, $entry, $iphost, $user1, $user2, $user3, $image) {
  global $emails_an, $userfeld1, $userfeld2, $userfeld3;
  $mailtext = "Es gibt einen neuen Kommentar:
Name: ".html_entity_decode($name)."
E-Mail: $email
Homepage: $url
IP/Hostname: $iphost
$userfeld1: ".html_entity_decode($user1)."
$userfeld2: ".html_entity_decode($user2)."
$userfeld3: ".html_entity_decode($user3)."
Bild: $image
Eintrag:
".html_entity_decode($entry)."
";
  $mail = new phpmailer();
  $mail->AddAddress($emails_an);
  $mail->From     = $emails_an;
  $mail->FromName = "vpComment";
  $mail->Subject  = "Neuer Kommentar";
  $mail->Body     = $mailtext;
  if(!$mail->Send()){
    $notsend .= $lngNews["mailcouldnotbesend1"].$to.$lngNews["mailcouldnotbesend2"] . "<br>";
  }
}
function eintragen () {
global $db, $cfg, $client, $lang, $idart, $direkt_sichtbar, $email_benachrichtigung, $smilies_aktiv, $bbcode_aktiv, $bilder, $xhtml;
  // Initialisieren der Variablen
  $error = "";
  // Name überprüfen
  if ($_POST['name'] == "") {
    $error = "Bitte geben Sie Ihren Namen an!";
  }
  else {
    $name = htmlentities(strip_tags($_POST['name']));
  }
  // Email überprüfen
  $email_pattern = '/^[^@\s]+@([-a-z0-9]+\.)+[a-z]{2,}$/i';
  if (($_POST['email'] == "") || (preg_match($email_pattern, $_POST['email']))) {
    $email = $_POST['email'];
  }
  else {
    $error = "Bitte geben Sie eine gültige Email-Adresse an!";
  }
  // URL überprüfen
  if ($_POST['url'] != "") {
    $url = htmlentities(strip_tags($_POST['url']));
    $url = testURL($url);
  }
  // Eintrag überprüfen
  if ($_POST['entry'] == "") {
    $error = "Bitte schreiben Sie einen Eintrag!";
  }
  else {
    $hentry = strip_tags(htmlentities($_POST['entry']));
    $entry = $hentry;
    if ($smilies_aktiv) $entry = smilies_ersetzen($entry);
    if ($bbcode_aktiv) $entry = bbcode_ersetzen($entry);
  }
  // Bilder prüfen
  if (($_POST['image'] == "") || (in_array ($_POST['image'], $bilder))) {
    $image = $_POST['image'];
  }
  // Uservariablen überprüfen
  $user1 = htmlentities(strip_tags($_POST['user1']));
  $user2 = htmlentities(strip_tags($_POST['user2']));
  $user3 = htmlentities(strip_tags($_POST['user3']));
  // IP und Hostname speichern
  $iphost = $_SERVER["REMOTE_ADDR"];
  $host = @gethostbyaddr($_SERVER["REMOTE_ADDR"]);
  if ($host) $iphost .= " / " . $host;
  // der eigentliche Eintrag in die Datenbank
  if ($error == "") {
    $sql = "INSERT INTO ".$cfg["tab"]["vpguestbook"]." (name, email, url, entry, image, iphost, user1, user2, user3, active, client, lang, art, date) VALUES ('$name', '$email', '$url', '$entry', '$image', '$iphost', '$user1', '$user2', '$user3', $direkt_sichtbar, $client, $lang, $idart, NOW())";
    if (! $db->query($sql)) $error = $db->$Error;
    elseif ($email_benachrichtigung) benachrichtigung ($name, $email, $url, $hentry, $iphost, $user1, $user2, $user3, $image);
  }
  return $error;
}
// funktion, um das pseudo des fronten-users aus der tabelle der frontendusers zu holen
// ACHTUNG -> die tabelle "con_frontendusers" muss um das Feld "pseudonym" erweitert werden.
// sql_1: ALTER TABLE con_frontendusers ADD pseudonym varchar(60) NOT NULL default '';
function get_user_pseudo() {
  global $cfg, $client, $auth, $cgf, $db3;
  $db3 = new DB_Contenido;
  $sql = "SELECT
            pseudonym
        FROM
            ".$cfg["tab"]["frontendusers"]."
        WHERE
            idclient       = '".$client."' AND
            idfrontenduser = '".$auth->auth["uid"]."'
        ";
  if (! $db3->query($sql)) $error = $db3->$Error;
  $db3->next_record();
  return $db3->f("pseudonym");
}
function update_user_pseudo() {
  global $cfg, $client, $auth, $cgf, $db4;
  $neues_pseudo = htmlentities(strip_tags($_POST['name']));
  $db4 = new DB_Contenido;
  // gibt es dieses pseudonym schon?
  $sql = "SELECT pseudonym FROM
            ".$cfg["tab"]["frontendusers"]."
        WHERE
            idfrontenduser = '".$auth->auth["uid"]."'
        ";
  if (! $db4->query($sql)) $error = $db4->$Error;
  $db4->next_record();
  $pseudo_in_db = $db4->f("pseudonym");
  // falls angegebenes pseudo NICHT mit db-pseudo der user-id übereinSTIMMT?
  if ($pseudo_in_db!=$neues_pseudo) {
    // gibt es dieses pseudonym schon?
    $sql = "SELECT COUNT(*) as anzahl FROM
              ".$cfg["tab"]["frontendusers"]."
          WHERE
              pseudonym       = '".$neues_pseudo."'
          ";
    if (! $db4->query($sql)) $error = $db4->$Error;
    $db4->next_record();
    $anz_pseudos = $db4->f("anzahl");
    // wenn noch nicht vorhanden
    if ($anz_pseudos==0) {
      // pseudonym in die db eintragen
      $sql = "UPDATE ".$cfg["tab"]["frontendusers"]."
            SET
                pseudonym       = '".$neues_pseudo."'
            WHERE
                idfrontenduser = '".$auth->auth["uid"]."'	  
            ";
      if (! $db4->query($sql)) $error = $db4->$Error;
    }
    // sonst einen fehler ausgeben
    else {
    // falls neues pseudo nicht mit der uid übereinstimmt
      $error = "Pseudonym ist bereits vorhanden! Bitte wählen Sie ein anderes Pseudonym";
    }
  }
  return $error;
}
// Funktionen für die Eingabe Ende
// Code für das Bearbeiten des Eingabeformulares
// muss vor der Ausgabe sein, damit der soeben eingegebene Kommentar auch
// bereits wieder ausgelesen werden kann
$formular_anzeigen = TRUE;
// als erstes html oder xhtml?
if ($xhtml) $einzeltag = " /";
else $einzeltag = "";
// smilies-array bereitstellen
if ($smilies_aktiv) {
  // Smilies-Array füllen
  $smilies = smilies_auslesen();
}
// originalcode
//if ($_POST) {
// ist zu ungenau - ich melde mich ja auch via formular an, womit dies bereits erfüllt wäre - darum
// test auf hidden feld vpcomment, um zu sehen, ob dieses formular gesendet wurde
if ($_POST['vpcomment']) {
  if ($sess->is_registered("vpgblastentry")) {
    $lastentry = $GLOBALS["vpgblastentry"];
  }
  if (($lastentry >= time()) && ($cookie_aktiv)) $fehler = "Bitte nicht mehrmals hintereinander eintragen!";
  else {
    // neues pseudo prüfen und eintragen
    $fehler = update_user_pseudo();
	// falls o.k. dann kommentar eintragen
    if ($fehler == "") {$fehler = eintragen();}
  }
  if ($fehler != "") {
    $formular_anzeigen = TRUE;
    echo "Fehler: " . $fehler;
  }
  elseif ($direkt_sichtbar) {
    echo "Vielen Dank für Ihren Kommentar!";
    $formular_anzeigen = TRUE;
    if ($cookie_aktiv) cookie_setzen ($cookie_dauer);
  }
  else {
    echo "Vielen Dank für Ihren Kommentar! Dieser wird nach Prüfung freigeschaltet.";
    $formular_anzeigen = TRUE;
    if ($cookie_aktiv) cookie_setzen ($cookie_dauer);
  }
}
// Ende Code für das Bearbeiten des Eingabeformulares
// Code für das Ausgeben der Einträge
if ($edit && empty($_GET['edit'])) {
  if ($_GET['toggle_active'] == "yes")   toggle_active($_GET['entry']);
  if ($_GET['toggle_inactive'] == "yes") toggle_inactive($_GET['entry']);
  if ($_GET['delete'] == "yes")          eintrag_loeschen($_GET['entry']);
  if ($_POST['edit_comment'])            edit_comment($_GET['entry'], $_POST['kommentar'], "edit");
  if ($_POST['delete_comment'])          edit_comment($_GET['entry'], $_POST['kommentar'], "delete");
}
if (! $_GET['start']) $start = 0;
else $start = $_GET['start'];
$anzahl_eintraege = eintraege_zaehlen();
if ($edit && empty($_GET['edit'])) {
  $eintraege = eintraege_auslesen(0, 10000);
  $seitennavigation = "";
}
else {
  $eintraege = eintraege_auslesen($start, $eintraege_pro_seite);
  if ($seitennav_art == 1) $seitennavigation = vpgb_navigation($start, $eintraege_pro_seite, $anzahl_eintraege, 1);
  else $seitennavigation = vpgb_navigation($start, $eintraege_pro_seite, $anzahl_eintraege, 0);
}
if ($tpl_art == "extended") $tpl = new ExtendedTemplate();
else $tpl = new Template;
  $tpl->reset();
  $tpl->set('s', 'EINTRAEGE',    $anzahl_eintraege);
  $tpl->set('s', 'SEITENNAVIGATION',   $seitennavigation);
foreach ($eintraege as $eintrag) {
  if ($edit && empty($_GET['edit'])) {
    $tpl->set('d', 'EDIT', "1");
    if ($eintrag['active']) $adminlinks = "<a href=\"" . $edit_url . "&toggle_inactive=yes&entry=" . $eintrag['id'] . "\"><img src=\"" . $cfg['path']['contenido_fullhtml'] . "images/online.gif\" width=\"11\" height=\"12\" border=\"0\" title=\"Offline schalten\" alt=\"Offline schalten\"></a>";
    else $adminlinks = "<a href=\"" . $edit_url . "&toggle_active=yes&entry=" . $eintrag['id'] . "\"><img src=\"" . $cfg['path']['contenido_fullhtml'] . "images/offline.gif\" width=\"11\" height=\"12\" border=\"0\" title=\"Online schalten\" alt=\"Online schalten\"></a>";
    $adminlinks .= '<a title="Modul löschen" href="' . $edit_url . '&delete=yes&entry=' . $eintrag['id'] . '" onClick="return confirm(\'Wollen Sie den Gästebucheintrag von ' . $eintrag['name'] . ' wirklich löschen?\')" ><img src="' . $cfg['path']['contenido_fullhtml'] . 'images/delete.gif" border="0" title="Eintrag löschen" alt="Eintrag löschen"></a>';
    $comment  = "<form action=\"" . $edit_url . "&entry=" . $eintrag['id'] . "\" method=\"post\">";
    $comment .= "<textarea name=\"kommentar\">" . $eintrag['comment'] . "</textarea><input type=\"submit\" name=\"edit_comment\" value=\"ändern\"> <input type=\"submit\" name=\"delete_comment\" value=\"löschen\">";
    $comment .= "</form>";
  }
  else {
    $comment = htmlwrap($eintrag['comment'], $wrap_length, " ");
  }
  $tpl->set('d', 'NAME',       $eintrag['name']);
  $tpl->set('d', 'EMAIL',      $eintrag['email']);
  $tpl->set('d', 'URL',        $eintrag['url']);
  $tpl->set('d', 'ENTRY',      htmlwrap($eintrag['entry'], $wrap_length, " "));
  $tpl->set('d', 'COMMENT',    $comment);
  $tpl->set('d', 'USER1',      $eintrag['user1']);
  $tpl->set('d', 'USER2',      $eintrag['user2']);
  $tpl->set('d', 'USER3',      $eintrag['user3']);
  $tpl->set('d', 'IPHOST',     $eintrag['iphost']);
  $tpl->set('d', 'IMAGE',      $cfgClient[$client]['upload'].$bilderpfad.$eintrag['image']);
  $tpl->set('d', 'DATE1',      strftime($dateformat1, $eintrag['date']));
  $tpl->set('d', 'DATE2',      strftime($dateformat2, $eintrag['date']));
  $tpl->set('d', 'ADMINLINKS', $adminlinks);
  $tpl->next();
}
  $tpl->generate('templates/' . $tpl_datei_ausgabe);
// Ende Code für die Kommentar-Ausgabe 
// Code zum Generieren des Eingabeformulars 
// eingeloggt?
if ($auth->auth["uid"] == "nobody"){
  // hier kommt rein, was getan werden muss, wenn user nicht eingeloggt ist
  echo "bitte einloggen";
} else {
// ansonsten Eingabeformular für Kommentare ausgeben
$bilder = bilder_liste();
if ($formular_anzeigen) {
  if ($smilies_aktiv) {
    // Smilies HTML-Ausgabe
    $smiliesform = smilies_ausgeben($smilies);
  }
  if ($smilies_aktiv || $bbcode_aktiv) echo vpgb_js();
  if ($avatare_aktiv) {
    $imageselect = bilder_select($bilder);
    $imageradio = bilder_radio($bilder);
  }
// Formularfelder generieren
  // div. vars bereitstellen
  $user_pseudo = get_user_pseudo();
  // formular nach einem fehler wieder mit abgesendeten daten befüllen, damit user nicht zweimal eingeben muss
  if ($fehler != '') {
    $name = htmlentities(strip_tags($_POST['name']));
	$email = htmlentities(strip_tags($_POST['email']));
	$url = htmlentities(strip_tags($_POST['url']));
	$user1 = htmlentities(strip_tags($_POST['user1']));
	$user2 = htmlentities(strip_tags($_POST['user2']));
	$user3 = htmlentities(strip_tags($_POST['user3']));
	$entry = htmlentities(strip_tags($_POST['entry']));
  }
  if ($user_pseudo == '') {$nameform = "<input value=\"".$name."\" id=\"name\" type=\"text\" name=\"name\" size=\"18\"".$einzeltag.">";}
  else {$nameform = "<input value=\"".$user_pseudo."\" id=\"name\" type=\"hidden\" name=\"name\" size=\"18\"".$einzeltag.">".$user_pseudo;}
  $emailform = "<input value=\"".$email."\" id=\"email\" type=\"text\" name=\"email\" size=\"18\"".$einzeltag.">";
  $urlform = "<input value=\"".$url."\" id=\"url\" type=\"text\" name=\"url\" size=\"18\"".$einzeltag.">";
  if ($userfeld1 != "") {$user1form = "<input value=\"".$user1."\" id=\"user1\" type=\"text\" name=\"user1\" size=\"18\"".$einzeltag.">";}
  if ($userfeld2 != "") {$user2form = "<input value=\"".$user2."\" id=\"user2\" type=\"text\" name=\"user2\" size=\"18\"".$einzeltag.">";}
  if ($userfeld3 != "") {$user3form = "<input value=\"".$user3."\" id=\"user3\" type=\"text\" name=\"user3\" size=\"18\"".$einzeltag.">";}
  if ($user_pseudo == '') {$entryform = "<textarea id=\"entry\" name=\"entry\" cols=\"30\" rows=\"10\" onselect=\"storeCaret(this);\" onclick=\"storeCaret(this);\" onkeyup=\"storeCaret(this);\">".$entry."</textarea>";}
  else {$entryform = "<textarea id=\"entry\" name=\"entry\" cols=\"30\" rows=\"10\" onselect=\"storeCaret(this);\" onclick=\"storeCaret(this);\" onkeyup=\"storeCaret(this);\"></textarea>";}
  $submitform = "<input type=\"submit\" class=\"submit\" name=\"vpgb_submit\" value=\"eintragen\"".$einzeltag.">";
// Ende Formularfelder generieren
  $tpl->reset();
  $tpl->set('s', 'NAMEFORM',      $nameform);
  $tpl->set('s', 'EMAILFORM',     $emailform);
  $tpl->set('s', 'URLFORM',       $urlform);
  $tpl->set('s', 'USER1FORM',     $user1form);
  $tpl->set('s', 'USER2FORM',     $user2form);
  $tpl->set('s', 'USER3FORM',     $user3form);
  $tpl->set('s', 'IMAGERADIO',    $imageradio);
  $tpl->set('s', 'IMAGESELECT',   $imageselect);
  $tpl->set('s', 'SMILIESFORM',   $smiliesform);
  $tpl->set('s', 'ENTRYFORM',     $entryform);
  $tpl->set('s', 'SUBMITFORM',    $submitform);
  $tpl->set('s', 'BBFETT',        bbcode_link("bold"));
  $tpl->set('s', 'BBKURSIV',      bbcode_link("italic"));
  $tpl->set('s', 'BBUNTERSTRICH', bbcode_link("underline"));
  $tpl->set('s', 'BBURL',         bbcode_link("url"));
  $tpl->set('s', 'BBEMAIL',       bbcode_link("email"));
  ?>
  <script type="text/javascript">
  function submitForm (s) {
    s.disabled = true;
    s.value = "Vielen Dank!";
    return true;
  }
  </script>
  <?php
  // berechnen, welche Seite geladen werden muss, nachdem formular ausgefüllt abgesendet wurde
  // dies, damit bei submit auch gleich an das Ende aller Kommentare gesprungen wird.
  if ($anzahl_eintraege > $eintraege_pro_seite) {$start = floor($anzahl_eintraege/$eintraege_pro_seite) * $eintraege_pro_seite;}
  else {$start = 0;}
  echo "<form action=\"front_content.php?idart=$idart&start=$start\" method=\"post\" id=\"vpgb_eintrag\" onSubmit=\"return submitForm(this.vpgb_submit)\">";
  echo "<input value=\"vpcomment\" id=\"vpcomment\" type=\"hidden\" name=\"vpcomment\"".$einzeltag.">";
  $tpl->generate('templates/' . $tpl_datei_eingabe);
  echo "</form>";
}
// Ende Code für Eingabeformular
}
// und jetzt auch das if-eingeloggt wieder zu
?>