Vorschlag für vpComment (basierend auf vpGuestbook 1.9)

kypta
Beiträge: 295
Registriert: Di 8. Jul 2003, 13:25
Kontaktdaten:

Vorschlag für vpComment (basierend auf vpGuestbook 1.9)

Beitrag von kypta »

Habe das vpGuestbook 1.9 umgebaut. Ziel war folgendes:

1. Guestbook muss nicht eine eigene Kategorie haben, sondern kann in allen Seiten integriert werden.

2. Einträge können nur gemacht werden, wenn man sich einloggt. Der Login funktioniert via dem Login-Modul vom Beispiel-Mandant c4.6.4. Das Eingabeformular wird nur angezeigt, wenn man eingeloggt ist. Das ganze Anmelde- und Abmeldeverfahren wird durch das Newsletter-Modul von HerrB gemacht (latürnich auch im Beispiel-Mandanten vorhanden)

3. Beim ersten Eintrag kann man ein Pseudonym als Namen eingeben. Dieses Pseudonym wird dann in der Tabelle con_frontendusers abgelegt. Das entsprechende Feld MUSS SELBER ERSTELLT WERDEN. Z.B. mit:

Code: Alles auswählen

ALTER TABLE con_frontendusers ADD pseudonym varchar(60) NOT NULL default '';
Anschliessend wird geprüft, ob das Pseudo schon vorhanden ist. Dieses Pseudo wird dann jeweils auch als "Name" in der Tabelle "con_vpguestbook" abgelegt. Logischer wäre die UID, bringt aber Probleme, wenn der user seinen account wieder löscht (Dann hätte ich das Pseudo nicht mehr zum ausgeben..).

4. Wenn ein Eintrag abgesendet wurde wird auch jeweils die letzte Seite der Kommentare aufgerufen. Ähm, ja, die Einträge werden natürlich "ORDER BY date" ausgegeben, sonst macht das lesen ja keinen Spass.

DIES IST ALPHA-CODE - VERWENDUNG AUF EINGENE GEFAHR

Bitte: testen, testen, testen

@Dodger77: ich habe das nur nicht in Deinen Thread gepostet, damit dann nicht Fragen zu diesem Code mit Fragen zum vpGuestbook 1.9 vermischt werden. Hoffe, Du hast da nichts dagegen. Und, Dankeschön für Deinen Code. Ich habe jetzt hoffentlich nicht nur Fehler eingebaut...

Bitte beachten: Dieser Code benötigt die Dateien vom vpGuestbook. Also:
- class.ExtendedTemplate.php
- Ordner smilies mit Inhalt
- vpguestbook_ausgabe.html sowie
- vpguestbook_eintrag.html
- vpGuestbook.pdf ist sicher auch nützlich (Wenn sich schon mal jemand die Zeit für eine Beschreibung nimmt...)
mehr dazu unter http://contenido.org/forum/viewtopic.php?p=61620#61620

Hier der Code für den INPUT

Code: Alles auswählen

/******************************************************************
* CONTENIDO MODUL - INPUT
*
* 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 INPUT-Teil von Ausgabe und Eingabe 
*                     von vpGuestbook zusammengelegt in
*                     ein Modul
******************************************************************/

$cfg["tab"]["vpguestbook"] = $cfg['sql']['sqlprefix']."_vpguestbook";
$db = new DB_Contenido;
$sql = "CREATE TABLE IF NOT EXISTS `".$cfg["tab"]["vpguestbook"]."` (
  `id` int(11) NOT NULL auto_increment,
  `name` varchar(60) NOT NULL default '',
  `email` varchar(80) NOT NULL default '',
  `url` varchar(80) NOT NULL default '',
  `entry` text NOT NULL,
  `image` varchar(255) NOT NULL default '',
  `comment` text NOT NULL,
  `iphost` varchar(60) NOT NULL default '',
  `user1` varchar(255) NOT NULL default '',
  `user2` varchar(255) NOT NULL default '',
  `user3` varchar(255) NOT NULL default '',
  `active` int(1) NOT NULL default '1',
  `client` int(10) NOT NULL default '0',
  `lang` int(10) NOT NULL default '0',
  `art` int(10) NOT NULL default '0',
  `date` datetime NOT NULL default '0000-00-00 00:00:00',
  PRIMARY KEY  (`id`),
  KEY `client` (`client`),
  KEY `lang` (`lang`),
  KEY `art` (`art`)
) TYPE=MyISAM;";
$db->query($sql);


$hier = getcwd ();
if ($cfgClient[$client][tpl][path])
  {chdir($cfgClient[$client][tpl][path]);}
else 
  {chdir($cfgClient[$client][path][frontend]."templates/");}
$handle = opendir(".");
while ($file = readdir($handle)) {
  if (is_dir($file)) $dirlist[] = $file;
  if (is_file($file)) $filelist[] = $file;
}
closedir($handle);
chdir($hier);
if ($filelist){
  asort($filelist);
  $filelist2 = $filelist;
}

echo "<table cellspacing=\"0\" cellpadding=\"10\" border=\"0\">";

echo "<tr valign=\"top\"><td>Ausgabe mandantenspezifisch: ";
echo "</td><td><input type=\"checkbox\" name=\"CMS_VAR[1]\" value=\"1\" ";
if("CMS_VALUE[1]"== 1) {echo "checked=\"checked\" ";}
echo ">";
echo "</td></tr>";

echo "<tr valign=\"top\"><td>Ausgabe sprachspezifisch: ";
echo "</td><td><input type=\"checkbox\" name=\"CMS_VAR[2]\" value=\"1\" ";
if("CMS_VALUE[2]"== 1) {echo "checked=\"checked\" ";}
echo ">";
echo "</td></tr>";

echo "<tr><td>Templatedatei Ausgabe: ";
echo "<td><select size=\"1\" name=\"CMS_VAR[3]\">";
while (list ($key, $file) = each ($filelist)) {
  echo "<option value=\"$file\"";
  if ("CMS_VALUE[3]"== $file) echo " selected=\"selected\" ";
  echo ">$file</option>";
}
echo "</td></tr>";


echo "<tr><td>Templatedatei Eingabe: ";
echo "<td><select size=\"1\" name=\"CMS_VAR[15]\">";
while (list ($key2, $file2) = each ($filelist2)) {
  echo "<option value=\"$file2\"";
  if ("CMS_VALUE[15]"== $file2) echo " selected=\"selected\" ";
  echo ">$file2</option>";
}
echo "</td></tr>";


echo "<tr>";
echo "<td>Templateklasse:</td><td><INPUT TYPE=\"radio\" name=\"CMS_VAR[4]\" value=\"normal\" ";
if ("CMS_VALUE[4]"=="normal") echo "checked=\"checked\" ";
echo "> normale Klasse <input type=\"radio\" name=\"CMS_VAR[4]\" value=\"extended\" ";
if ("CMS_VALUE[4]"=="extended") {echo "checked=\"checked\" ";}
echo "> eXtended-Template-Klasse (<a href=\"http://www.contenido.org/forum/viewtopic.php?t=5851\" target=\"_blank\">von swelpot</a>)</td></tr>";

echo "<tr><td>Eintr&auml;ge pro Seite:</td>";
echo "<td><select size=\"1\" name=\"CMS_VAR[6]\">";
for ($i = 1; $i < 41; $i++) {
	echo "<option value=\"$i\"";
	if ("CMS_VALUE[6]"== $i) echo " selected=\"selected\" ";
	echo ">$i</option>";
}
echo "</select></td></tr>";

echo "<tr>";
echo "<td>Seitennavigation mit</td><td><input type=\"radio\" name=\"CMS_VAR[7]\" value=\"0\" ";
if ("CMS_VALUE[7]"== 0) {echo "checked=\"checked\" ";}
echo "> Seitenzahlen";
echo " <input type=\"radio\" name=\"CMS_VAR[7]\" value=\"1\" ";
if ("CMS_VALUE[7]"== 1) {echo "checked=\"checked\" ";}
echo "> Eintr&auml;gen</td></tr>";

echo "<tr><td>Datumsformat DATE1 (Verwendung siehe <a href=\"http://de.php.net/manual/de/function.strftime.php\" target=\"_blank\">www.php.net</a>):</td>";
echo "<td><input type=\"text\" name=\"CMS_VAR[8]\" value=\"CMS_VALUE[8]\" size=\"30\" /></td></tr>";

echo "<tr><td>Datumsformat DATE2 (Verwendung siehe <a href=\"http://de.php.net/manual/de/function.strftime.php\" target=\"_blank\">www.php.net</a>):</td>";
echo "<td><input type=\"text\" name=\"CMS_VAR[9]\" value=\"CMS_VALUE[9]\" size=\"30\" /></td></tr>";

echo "<tr><td>Spracheinstellungen für das Datum (z.B. \"de_DE\"):</td>";
echo "<td><input type=\"text\" name=\"CMS_VAR[10]\" value=\"CMS_VALUE[10]\" size=\"30\" /></td></tr>";

echo "<tr><td>L&auml;ngste Zeichenfolge:</td>";
echo "<td><input type=\"text\" name=\"CMS_VAR[11]\" value=\"CMS_VALUE[11]\" size=\"30\" /></td></tr>";

echo "<tr><td>Text \"vor\":</td>";
echo "<td><input type=\"text\" name=\"CMS_VAR[12]\" value=\"CMS_VALUE[12]\" size=\"30\" /></td></tr>";

echo "<tr><td>Text \"zur&uuml;ck\":</td>";
echo "<td><input type=\"text\" name=\"CMS_VAR[13]\" value=\"CMS_VALUE[13]\" size=\"30\" /></td></tr>";

echo "<tr><td>Ab wie vielen Seiten soll die Navigation komprimiert dargestellt werden?:</td>";
echo "<td><input type=\"text\" name=\"CMS_VAR[14]\" value=\"CMS_VALUE[14]\" size=\"30\" /></td></tr>";

echo "<tr><td>Smilies benutzen:</td>";
echo "<td><input type=\"checkbox\" name=\"CMS_VAR[16]\" value=\"1\" ";
if ("CMS_VALUE[16]"== 1) echo "checked=\"checked\" ";
echo "/></td></tr>";

echo "<tr><td>Bilderverzeichnis für Smilies:</td>";
echo "<td><select size=\"1\" name=\"CMS_VAR[17]\" />";
$sql = "SELECT DISTINCT dirname from ".$cfg["tab"]["upl"]; 
$db->query($sql); 
while ( $db->next_record() ) { 
  $smile_dir=substr_replace($db->f("dirname"),'',(strlen($db->f("dirname"))-1)); 
  if ( "CMS_VALUE[17]" == $smile_dir) { 
    echo '<option selected="selected" value="'.$smile_dir.'">'.$db->f("dirname").'</option>'; 
  } else { 
    echo '<option value="'.$smile_dir.'">'.$db->f("dirname").'</option>'; 
  } 
} 
echo "</select></td></tr>";

echo "<tr><td>Avatare benutzen:</td>";
echo "<td><input type=\"checkbox\" name=\"CMS_VAR[18]\" value=\"1\" ";
if ("CMS_VALUE[18]"== 1) echo "checked=\"checked\" ";
echo "/></td></tr>";

echo "<tr><td>Bilderverzeichnis für Avatare:</td>";
echo "<td><select size=\"1\" name=\"CMS_VAR[19]\" />";
$sql = "SELECT DISTINCT dirname from ".$cfg["tab"]["upl"]; 
$db->query($sql); 
while ( $db->next_record() ) { 
  $avatar_dir=substr_replace($db->f("dirname"),'',(strlen($db->f("dirname"))-1)); 
  if ( "CMS_VALUE[19]" == $avatar_dir) { 
    echo '<option selected="selected" value="'.$avatar_dir.'">'.$db->f("dirname").'</option>'; 
  } else { 
    echo '<option value="'.$avatar_dir.'">'.$db->f("dirname").'</option>'; 
  } 
} 
echo "</select></td></tr>";

echo "<tr><td>BB-Code aktiv:</td>";
echo "<td><input type=\"checkbox\" name=\"CMS_VAR[20]\" value=\"1\" ";
if ("CMS_VALUE[20]"== 1) echo "checked=\"checked\" ";
echo "/></td></tr>";

echo "<tr><td>Benutzerfeld 1:</td>";
echo "<td><input type=\"text\" name=\"CMS_VAR[21]\" value=\"CMS_VALUE[21]\" size=\"30\" /></td></tr>";

echo "<tr><td>Benutzerfeld 2:</td>";
echo "<td><input type=\"text\" name=\"CMS_VAR[22]\" value=\"CMS_VALUE[22]\" size=\"30\" /></td></tr>";

echo "<tr><td>Benutzerfeld 3:</td>";
echo "<td><input type=\"text\" name=\"CMS_VAR[23]\" value=\"CMS_VALUE[23]\" size=\"30\" /></td></tr>";

echo "<tr valign=\"top\"><td width=\"202\">Emailbenachrichtigung: ";
echo "Ja <input type=\"checkbox\" name=\"CMS_VAR[24]\" value=\"1\" ";
if ("CMS_VALUE[11]"== 1) echo "checked=\"checked\" ";
echo "> An:</td><td>";

echo "<input type=\"text\" name=\"CMS_VAR[25]\" value=\"CMS_VALUE[25]\"></td></tr>";
echo "<tr>";
echo "<td width=\"202\">Cookie gegen doppelte Einträge :</td><td><input type=\"radio\" name=\"CMS_VAR[26]\" value=\"0\" ";
if ("CMS_VALUE[26]"== 0) echo "checked=\"checked\" ";
echo "> aus <input type=\"radio\" name=\"CMS_VAR[26]\" value=\"1\" ";
if ("CMS_VALUE[26]"== 1) echo "checked=\"checked\" ";
echo "> an</td></tr>";

echo "<tr>";
echo "<td width=\"202\">Cookie Lebensdauer (in Minuten) :
</td><td><input type=\"text\" name=\"CMS_VAR[27]\" value=\"CMS_VALUE[27]\" ></td></tr>";

echo "<tr><td>Einträge direkt sichtbar?:</td>";
echo "<td><input type=\"checkbox\" name=\"CMS_VAR[28]\" value=\"1\" ";
if ("CMS_VALUE[28]"== 1) echo "checked=\"checked\" ";
echo "/></td></tr>";

echo "<tr>";
echo "<td width=\"202\">Ausgaben als valides :</td><td><input type=\"radio\" name=\"CMS_VAR[29]\" value=\"0\" ";
if ("CMS_VALUE[29]"== 0) echo "checked=\"checked\" ";
echo "> HTML <input type=\"radio\" name=\"CMS_VAR[29]\" value=\"1\" ";
if ("CMS_VALUE[29]"== 1) echo "checked=\"checked\" ";
echo "> XHTML</td></tr>";

echo "</table>";
und Code für den OUTPUT im übernächsten Beitrag.
Zuletzt geändert von kypta am Di 31. Jan 2006, 20:06, insgesamt 2-mal geändert.
i-fekt
Beiträge: 1520
Registriert: Mo 3. Jan 2005, 02:15
Wohnort: Chemnitz
Kontaktdaten:

Beitrag von i-fekt »

Alles wäre einfacher zu lesen, wnn du den Code auch als solchen formatiert postest.
kypta
Beiträge: 295
Registriert: Di 8. Jul 2003, 13:25
Kontaktdaten:

Beitrag von kypta »

Code für den OUTPUT

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\">&hellip;</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&ouml;schen" href="' . $edit_url . '&delete=yes&entry=' . $eintrag['id'] . '" onClick="return confirm(\'Wollen Sie den G&auml;stebucheintrag von ' . $eintrag['name'] . ' wirklich l&ouml;schen?\')" ><img src="' . $cfg['path']['contenido_fullhtml'] . 'images/delete.gif" border="0" title="Eintrag l&ouml;schen" alt="Eintrag l&ouml;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=\"&auml;ndern\"> <input type=\"submit\" name=\"delete_comment\" value=\"l&ouml;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
?>
Zuletzt geändert von kypta am Mo 6. Feb 2006, 16:44, insgesamt 3-mal geändert.
kypta
Beiträge: 295
Registriert: Di 8. Jul 2003, 13:25
Kontaktdaten:

Beitrag von kypta »

Alles wäre einfacher zu lesen, wenn du den Code auch als solchen formatiert postest.
Offensichtlich war mein erster Beitrag einfach zu lang. Er wurde auch beim zweiten Editieren abgeschnitten.
Aber das hätte ich natürlich nicht nur in der Vorschau kontrollieren müssen :oops:
Gruss
Thomas
HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB »

Das hier:

Code: Alles auswählen

ALTER TABLE con_frontendusers ADD pseudonym varchar(60) NOT NULL default '';
lässt sich durch Verwendung des Properties-Objekts bzw. der Tabelle _properties vermeiden...

Gruß
HerrB
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net
kypta
Beiträge: 295
Registriert: Di 8. Jul 2003, 13:25
Kontaktdaten:

Beitrag von kypta »

Habe ich jetzt nicht ganz verstanden. Ist die Tabelle _properties nicht eher für einmalige Einstellungen (wie die ID für den NL-Handler) gedacht? Ein Pseudonym hätte aber jeder Frontenduser (der einen Kommentar macht).
HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB »

Nein, die Properties-Tabelle ermöglicht es, zusätzliche Angaben pro Element zu speichern (d.h. im Prinzip zusätzliche Felder zu haben, aber ohne die Tabellendefinition ändern zu müssen).

Es gibt im Forum (ich verlege immer die Stelle) ein Beispiel-Plugin für u.a. Frontenduser - das Pseudonyam könnte damit sogar unter Administration -> Frontend gepflegt werden - und Du kannst auf die Info aus Deinem Modul zugreifen.

Für ein Beispiel gerne nochmal Bescheid geben.

Gruß
HerrB
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net
kypta
Beiträge: 295
Registriert: Di 8. Jul 2003, 13:25
Kontaktdaten:

Beitrag von kypta »

Ja, das tönt tatsächlich interessant. Ein Beispiel wäre cool.
Gruss
Thomas
Dodger77
Beiträge: 3626
Registriert: Di 12. Okt 2004, 20:00
Wohnort: Voerde (Niederrhein)
Kontaktdaten:

Beitrag von Dodger77 »

Thomas hat geschrieben:Ja, das tönt tatsächlich interessant. Ein Beispiel wäre cool.
Schau dir am besten mal die Frontenduser-Plugins an, dann sollte das deutlich werden:

http://www.contenido.org/forum/viewtopic.php?t=10554

Ich hätte da aber eine Anmerkung. Warum nimmt man nicht den Benutzernamen (der ja jeden Frontenduser identifizieren soll) statt des von dir vorgeschlagen Pseudonyms? Der ist schließlich immer da und benötigt keine weiteren änderungen.
Über die Plugins ließe sich dann noch der volle Name (oder Vor- und Nachname) einpflegen.
kypta
Beiträge: 295
Registriert: Di 8. Jul 2003, 13:25
Kontaktdaten:

Beitrag von kypta »

Warum nimmt man nicht den Benutzernamen (der ja jeden Frontenduser identifizieren soll) statt des von dir vorgeschlagen Pseudonyms?
Das hat verschiedene Gründe:
1. Man kann sich ja (für den Newsletter) anmelden, ohne dass man einen Namen eingibt.
2. Diejenigen, die einen Namen angeben, geben in der Regel nicht ein Pseudo ein sondern den tatsächlichen Namen.
1+2 bedeuten, dass man gegen die E-Mail-Adresse verifiziert müsste. Das macht das Login-Modul ja perfekt.
3. Wer Kommentare eingibt, tut dies (hoffentlich) nicht nur einmal. Es ist gut möglich, dass da Gespräche draus werden - so wie hier in diesem Forum. Wer das tut, will das nicht unbedingt mit seinem Namen machen. Ganz sicher will er auch nicht, dass seine E-Mail-Adresse angegeben wird. Aber, damit ein Gespräch entsteht, muss irgend eine Art der Identifikation vorhanden sein (Nicht Identifikation zwischen Contenido und User - Identifikation zwischen den "Forenbenutzern"). Und diese Identifikation muss für jeden einmalig und eindeutig sein. So wie das jetzt im vpGuestbook ist, kann man sich ja irgend einen Namen aussuchen und diesen eingeben. Für Kommentare ist das nicht nützlich. Sonnst mach "Thomas" einen Kommentar, und dann kommt "Dodger77" und macht einen, und dann kommt der böse Thomas wieder und macht einen weiteren, weniger coolen Kommentar, aber mit Namen "Dodger77".

Darum will ich Pseudos: weil jeder eine Identität will, aber nicht seine echte.

Gruss
Thomas
Dodger77
Beiträge: 3626
Registriert: Di 12. Okt 2004, 20:00
Wohnort: Voerde (Niederrhein)
Kontaktdaten:

Beitrag von Dodger77 »

@Thomas:

Und wenn man ein gesondertes Login-Modul schreiben würde, könnte man das natürlich noch anders gestalten. Es wollen sich ja auch nicht alle, die einen Kommentar schreiben möchten, auch gleich für den Newsletter (wenn es den überhaupt gibt) anmelden.
kypta
Beiträge: 295
Registriert: Di 8. Jul 2003, 13:25
Kontaktdaten:

Beitrag von kypta »

Es wollen sich ja auch nicht alle, die einen Kommentar schreiben möchten, auch gleich für den Newsletter (wenn es den überhaupt gibt) anmelden.
Stimmt, das ist ein Schönheitsfehler. Die Funktionalität des Anmelde- und Abmeldevorganges beim NL ist aber sehr gut. Vor allem, dass man es jeweils per Mail bestätigen muss, ist eigentlich unverzichtbar.

Ich hatte micht gefragt, ob man nicht den Newsletter-Anmelden-Dialog erweitern müsste zu einem Anmelden-Dialog, bei dem man sich entscheiden kann, ob man Frontenuser sein will oder nur den NL erhalten möchte oder beides. Und dort könnte man auch gleich das "Pseudo-Eingeben" einbauen.

Irgendwie artet es halt immer in arbeit aus. :(
netmax
Beiträge: 25
Registriert: Do 14. Sep 2006, 22:48
Kontaktdaten:

Beitrag von netmax »

Ich habe das Ganze mal ausprobiert, weil es an probaten Kommentarmodulen mangelt :-(

Das hier kommt als Ausgabe raus:

Code: Alles auswählen

Warning: Division by zero in /homepages/6/d75533189/htdocs/fblcon/cms/front_content.php(792) : eval()'d code on line 379

Warning: Division by zero in /homepages/6/d75533189/htdocs/fblcon/cms/front_content.php(792) : eval()'d code on line 1012
Und nun?
kypta
Beiträge: 295
Registriert: Di 8. Jul 2003, 13:25
Kontaktdaten:

Beitrag von kypta »

Und nun?
Debugen!

Wenn Du in der Config-Datei "contenido/includes/config.misc.php" den Codeoutput aktivierst, dann bekommst Du den Quellcode ausgegeben. Damit kommst Du dem Fehler näher...

Das muss in der Config eingestellt werden:

Code: Alles auswählen

$cfg["debug"]["codeoutput"] = true;
netmax
Beiträge: 25
Registriert: Do 14. Sep 2006, 22:48
Kontaktdaten:

Beitrag von netmax »

Hallo Thomas,

also, der Fehler tritt auf, wenn das Template von der Kategorie vererbt wird.

Ich habe mehrere Newsartikel, die über eine Newsliste ausgegeben werden. Es gibt ein Template "News Detailansicht", welches die Kategorie mit den News besitzt.

Hat nun ein Newsartikel das Template "News Detailansicht" zugewiesen bekommen, so funktioniert alles bestens. Wenn dem Artikel jedoch keine explizite Kategorie zugewiesen ist (er also die Eigenschaften von der Kategorie "erbt"), so kommt dieser Fehler.

Debug habe ich gemacht, die Divisionen durch Null entstehen in diesen Zeilen:

Code: Alles auswählen

$anzahl_seiten = ceil($anzahl_eintraege / $eintraege_pro_seite);
und

Code: Alles auswählen

if ($anzahl_eintraege > $eintraege_pro_seite) {$start = floor($anzahl_eintraege/$eintraege_pro_seite) * $eintraege_pro_seite;}
Die Variable "$eintraege_pro_seite" scheint hier 0 zu sein. Was das nun damit zu tun hat, ob das Template direkt dem Artikel zugewiesen ist, oder er das von der Kategorie erbt - keine Ahnung. Wenn ich der Variablen jedenfalls den Wert "10" im Modul selber zuweise (testweise), kommt kein Fehler - aber auch kein Eingabeformular. Scheinbar werden die ganzen CMS_VALUE-Zuweisungen nicht gemacht, wenn die Konfiguration im Kategorie-Default-Template steckt.

Ich kann meinen künftigen Redakteuren aber nicht zumuten, jedem Newsartikel von Hand die Kategorie zuzuweisen, das vergessen die...

LG
Marco
Gesperrt