Modul 4.4.x Comments v0.0.1

Snoopy
Beiträge: 239
Registriert: Mo 15. Sep 2003, 18:45
Kontaktdaten:

Beitrag von Snoopy » Mo 28. Jun 2004, 14:25

@evok
Bau folgendes in das Modul ein, dann bekommst der Admin eine Mail.
Es muß eine Mailadresse zum Mandanten Admin im Backend eingetragen sein.

Code: Alles auswählen

if ($db->query($sql)) {
       echo "Created<br>";
       
       // Mailbenachrichtigung an den Admin | @@ Peter Beauvain, 2004-06-27
// Select Admin E-Mail Adresse
$sql2 = "SELECT * FROM ".$cfg["tab"]["phplib_auth_user_md5"]." WHERE  username = 'admin'"; 
          $db->query($sql2); 
          $db->next_record(); 
          $admin_mail = $db->f("email"); 
// Select Mandanten Name        
$sql2 = "SELECT * FROM ".$cfg["tab"]["clients"]." WHERE  idclient = '$client'"; 
          $db->query($sql2); 
          $db->next_record(); 
          $mandant_name = $db->f("name"); 
          $client_url = $db->f("htmlpath"); 
         
   if ($commentemail == ''){
   $commentemail = "keine Angabe";
   }
   $url = $client_url."front_content.php?client=".$client."&lang=".$lang."&idcat=".$idcat."&idart=".$idart; 
 
    $mailbody = "Kommentar von: ".$commentname." | E-Mail: ".$commentemail." \n\nDer Kommentar wurde zu folgendem Artikel abgegeben :\n\n".$url."\n\nInhalt: ".$commenttext."\n";
    
    mail($admin_mail, "neuer Kommentar zu einem Artikel !", $mailbody, "From:  $mandant_name\nX-Mailer: PHP/" . phpversion(). "\n");

// Mailbenachrichtigung Ende


     } else {
       echo "Creation failed<br>";
Zuletzt geändert von Snoopy am Di 29. Jun 2004, 17:28, insgesamt 2-mal geändert.
Gruß aus Hamburg :wink:

evok
Beiträge: 19
Registriert: Mo 21. Jun 2004, 03:45
Kontaktdaten:

Beitrag von evok » Mo 28. Jun 2004, 14:42

Danke Snoopy! Funktioniert tadellos :D
Möglicherweise wäre es nicht schlecht wenn Dein Werk grundsätzlich in das Modul von emergence integriert wird. Eigentlich braucht das doch jeder, der dieses Modul nutzt.

Halchteranerin
Beiträge: 5478
Registriert: Di 2. Mär 2004, 21:11
Wohnort: Halchter, wo sonst? ;-)
Kontaktdaten:

Beitrag von Halchteranerin » Mo 28. Jun 2004, 17:53

Snoopy hat geschrieben:@Halchteranerin:
Du musst ein wenig Strings würgen dann klappt das auch mit der Zeit Ausgabe.
aehm, irgendwie habe ich Dein Posting jetzt erst entdeckt, scheint aus dem 'Nichts' aufgetaucht zu sein. :roll: Danke fuer den Vorschlag, ich werd's mir mal in Ruhe angucken. Scheint jedoch nicht kuerzer als meine Loesung zu sein, wohl aber etwas eleganter. :)

emergence
Beiträge: 10645
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence » Di 29. Jun 2004, 14:03

bevor jetzt das größere update(mit snoopys ergänzungen) kommt schiess ich noch ein kleineres nach... nur damit dann ersichtlich worin die hauptergänzungen liegen...

diese version ist seitens db tabelle con_comments inkombatibel...
es wurden zwei neue feld ergänzt -> parentid und vote
parentid wird in dieser version schon verwendet um einen baum zu generieren.
vote ist dafür gedacht in weiterer folge abstimmungen bei den comments abgeben zu können...

innerhalb des output moduls werden die kommentare jetzt innerhalb einer funktion generiert...
ebenso ist es jetzt möglich kommentare online und offline zu schalten...
es gibt ebenso einen flattree modus hiebei werden die kommentare unabhäng ihrer abhängigkeit nach datum sortiert... die aktuellsten finden sich immer am beginn...

ach ja bei antworten zu einem kommentar (was jetzt auch möglich ist) wird wieder zu einen gesetzten anker gesprungen...

die nächste version wird innerhalb der db tabelle keine änderungen mehr vornehmen...

Description

Code: Alles auswählen

# Comments v0.0.5 
# Autor: Martin Horwath 
# Date: 24.04.2004 
# Modified: 29.06.2004 
# Requires: Contenido 4.4.4
Input:

Code: Alles auswählen

/**
 * Comments v0.0.5
 *
 * INPUT
 *
 * @autor Martin Horwath <horwath@dayside.net>
 * @copyright dayside.net 2004
 */

 // configuration
 $cfg["tab"]["comments"] = $cfg['sql']['sqlprefix']."_comments"; // for syntax reasons only

 if($db->query("SELECT * FROM ".$cfg["tab"]["comments"]." WHERE idclient =".$client." AND idlang = ".$lang)) {
   // do something table exists
   echo "Works...";
 } else {
   echo "error-> table: ".$cfg["tab"]["comments"]." does not exist<br>";
   // init table creation
   $sql= "CREATE TABLE ".$cfg["tab"]["comments"]." (
          idcomments INT(10) NOT NULL default '0',
          idclient INT(10) NOT NULL default '0',
          idlang INT(10) NOT NULL default '0',
          idart INT(10) NOT NULL default '0',
          text text NOT NULL default '',
          name varchar(64) NOT NULL,
          email varchar(64) NOT NULL default '',
          parentid INT(10) NOT NULL default '0',
          vote INT(10) NOT NULL default '0',
          status INT(10) NOT NULL default '0',
          created datetime NOT NULL default '0000-00-00 00:00:00',
          PRIMARY KEY (idcomments) )";

   if ($db->query($sql)) {
     // table successfully created
     echo "init-> created table: ".$cfg["tab"]["comments"]."<br>";
   } else {
     echo "error-> table: ".$cfg["tab"]["comments"]."<br>";
   }

   $sql= "INSERT INTO ".$cfg["tab"]["sequence"]." (seq_name,nextid) VALUES ('".$cfg["tab"]["comments"]."','0')";

   if ($db->query($sql)) {
     // value successfully insert
     echo "init-> value insert into ".$cfg["tab"]["sequence"]." - ".$cfg["tab"]["comments"]."<br>";
   } else {
     echo "error-> value: ".$cfg["tab"]["sequence"]." - ".$cfg["tab"]["comments"]."<br>";
   }
 }
Output:

Code: Alles auswählen

<?
/**
 * Comments v0.0.5
 *
 * OUTPUT
 *
 * @autor Martin Horwath <horwath@dayside.net>
 * @copyright dayside.net 2004
 */

 // options display
 $flatTree = false; // disable nesting levels

 // configuration
 $cfg["tab"]["comments"] = $cfg['sql']['sqlprefix']."_comments"; // for syntax reasons only

 $clink = "front_content.php?idcat=$idcat&idart=$idart&lang=$lang&client=$client";

 if ($edit) {
     $clink = $sess->url($clink);
 }

 $debug = false;

 // functions
if (!isset($comments_functions)) {

// only init once
$comments_functions = true;

/**
 * Prevent long strings
 *
 * @param string $string
 * @param string $seperator = " "
 * @param int    $maxlenght = 50
 *
 * @return $value
 *
 * @autor Martin Horwath <horwath@dayside.net>
 * @modified 2004-06-23
 */
function shortenWords ($string, $seperator = " ", $maxlenght = 50 ) {
    $c = 0;
    for ($i=0; $i < strlen($string); $i++) {
        if (($string[$i] == " ") or ($string[$i] == "\n") or ($string[$i] == "\r")) {
            $c = 0;
        }

        if ($c > $maxlenght) {
            $string = substr_replace($string, $seperator, $i, 0);
            $i = $i+strlen($seperator);
            $c = 0;
	}
        $c++;
    }

    return $string;
}

/**
 * Build comments tree
 *
 * @param int $parentid
 * @param int $level = 0
 *
 * @return array $tree
 *
 * @autor Martin Horwath <horwath@dayside.net>
 * @modified 2004-06-29
 */
function getCommentsTreeElements ($parentid, $level = 0, $mode = false) {
    global $cfg, $idart, $client, $lang, $errorComments;

    $errorComments = false;

    $db = new DB_Contenido; // do not set global !!

    if (!$mode) { // nested

        $sql = "SELECT idcomments, created, status FROM ".$cfg["tab"]["comments"]." WHERE idclient =".$client." AND idlang = ".$lang." AND idart = ".$idart." AND parentid = '".$parentid."' ORDER BY created DESC ";

        if($db->query($sql)) {

            while ($db->next_record()) {

                if (!isset($TreeElements)) {
                    $TreeElements = Array();
                }

                if ($subTree = getCommentsTreeElements($db->f("idcomments"), ($level+1))) {
                    $TreeElements[] = Array ( 'level' => $level, 'idcomment' => $db->f("idcomments"), 'status' => $db->f("status"), 'created' => $db->f("created"), 'sub' => $subTree );
                } else {
                    $TreeElements[] = Array ( 'level' => $level, 'idcomment' => $db->f("idcomments"), 'status' => $db->f("status"), 'created' => $db->f("created") );
                }

            }

            if (isset($TreeElements)) {
                return $TreeElements;
            } else {
                return false;
            }

        } else {
            $errorComments = true;
        }

    } else { // flat mode

        $sql = "SELECT idcomments, created, status FROM ".$cfg["tab"]["comments"]." WHERE idclient =".$client." AND idlang = ".$lang." AND idart = ".$idart." ORDER BY created DESC ";

        if($db->query($sql)) {

            while ($db->next_record()) {

                if (!isset($TreeElements)) {
                    $TreeElements = Array();
                }

                $TreeElements[] = Array ( 'level' => $level, 'idcomment' => $db->f("idcomments"), 'status' => $db->f("status"), 'created' => $db->f("created") );
            }

            if (isset($TreeElements)) {
                return $TreeElements;
            } else {
                return false;
            }

        } else {
            $errorComments = true;
        }

    }

}

/**
 * show comments
 *
 * @param array $tree
 *
 * @return
 *
 * @autor Martin Horwath <horwath@dayside.net>
 * @modified 2004-06-29
 */
function showComments ($commentsTree, $level = 0) {

    global $cfg, $edit, $clink, $flatTree;

    $db = new DB_Contenido; // do not set global !!

    foreach ($commentsTree as $commentsNode => $treeElement) {

        $sql = "SELECT * FROM ".$cfg["tab"]["comments"]." WHERE idcomments =".$treeElement['idcomment']."";
        $db->query($sql);

        $db->next_record(); // there can be only one

        // echo "level:".$treeElement['level']."->".$db->f("name")."|"; // debug info

        if ($db->f("status") == '1' || $edit) { // only show online elements

             // generate output variable

             $comment['template'] = '<a name="comment'.$db->f("idcomments").'"></a><table style="font-family:verdana, arial, sans-serif; font-size:11px;"><tr valign="top"><td>%s</td><td>%s</td></table>';

             if ($db->f("email") != "") {
                 $comment['header'] = '<a href="mailto:'.$db->f("email").'">%s</a>';
             } else {
                 $comment['header'] = '%s';
             }

             $comment['header'] = sprintf($comment['header'],$db->f("name"));

             $comment['header'].= " schrieb am ".date("d.m.Y \u\m G:i:s",strtotime($db->f("created"))); // reformat stored datestring
             $comment['text'] = $db->f("text");

             $comment['complete'] = "<p><b>".$comment['header']."</b><br>\n".$comment['text']."</p>\n";

             if (!$flatTree) {
                 $clinkform = $clink."&cmode=form&creplyto=".$db->f("idcomments");
                 $comment['complete'].= '<p><a href="'.$clinkform.'" style="font-family:verdana, arial, sans-serif; font-size:11px;">Auf diesen Kommentar antworten</a></p>';
             }

             if ($edit) {
                 $clinkdelete = $clink."&cmode=delete&commentid=".$db->f("idcomments");
                 $comment['complete'].= '<a href="'.$clinkdelete.'" style="font-family:verdana, arial, sans-serif; font-size:11px;">Delete</a>';

                 if ($db->f("status") == '0') {
                     $clinkonline = $clink."&cmode=online&commentid=".$db->f("idcomments");
                     $comment['complete'].= ' | <a href="'.$clinkonline.'" style="font-family:verdana, arial, sans-serif; font-size:11px;">Set Online</a>';
                 } else {
                     $clinkoffline = $clink."&cmode=offline&commentid=".$db->f("idcomments");
                     $comment['complete'].= ' | <a href="'.$clinkoffline.'" style="font-family:verdana, arial, sans-serif; font-size:11px;">Set Offline</a>';
                 }

             }

             $comment['complete'].= "<hr size=\"1\">\n";

             $comment['seperator'] = "";
             if ($level > 0) {
                 for ($counter = 0; $counter <= $level; $counter++) {
                     $comment['seperator'] .= "&nbsp;&nbsp;&nbsp;&nbsp;";
                 }
             }

             // print output
             echo sprintf($comment['template'],$comment['seperator'],$comment['complete']);

             if (isset($treeElement['sub'])) {
                 showComments ($treeElement['sub'], ($level+1));
             }

        } else {

             if (isset($treeElement['sub'])) {
                 showComments ($treeElement['sub'], $level);
             }

        }

    }

}

}


 if ($cmode == "delete" && $edit) {

     // check for parentid entries and update them
     $sql = "SELECT parentid FROM ".$cfg["tab"]["comments"]." WHERE idcomments = $commentid";
     $db->query($sql);
     $db->next_record();

     $sql = "UPDATE ".$cfg["tab"]["comments"]." SET parentid=".$db->f("parentid")." WHERE parentid = $commentid";
     $db->query($sql);

     $sql = "DELETE FROM ".$cfg["tab"]["comments"]." WHERE idcomments = $commentid";

     if ($db->query($sql)) {
       echo "Deleted<br>";
     } else {
       echo "Delete failed<br>";
     }

     unset($cmode);

 }

 if (($cmode == "online" || $cmode == "offline") && $edit) {

     ($cmode == "online") ? $cmode = 1 : $cmode = 0;
     $sql = "UPDATE ".$cfg["tab"]["comments"]." SET `status`=$cmode WHERE idcomments = $commentid";

     if ($db->query($sql)) {
       echo "Updated<br>";
     } else {
       echo "Update failed<br>";
     }

     unset($cmode);

 }

 if (trim($commentname) == "" && trim($commentemail) == "" && trim($commenttext) == "" && $cmode == "add" ) unset($cmode); // do nothing

 if ($cmode == "add") {
   // check if all entries are correct otherwise show form
   if (trim($commentname) == "") {
     echo "Bitte einen Namen eingeben.<br>";
     $cmode = "form";
   }

   if (trim($commentemail) != "") {
     if (!preg_match("/^[\w-]+((\.|\+)[\w-]+)*@([a-z0-9-]+(\.[a-z0-9-]+)*?\.[a-z]{2,6}|(\d{1,3}\.){3}\d{1,3})(:\d{4})?$/i",$commentemail)) {
       echo "Bitte geben Sie eine korrekte Email Adresse an.<br>";
       $cmode = "form";
     }
   }

   if (trim($commenttext) == "") {
     echo "Sie haben kein Kommentar geschrieben.<br>";
     $cmode = "form";
   }

   if ($cmode == "add") {

     $commenttext = shortenWords($commenttext); // todo: take care of allowed tags, remove others
     $commentname = shortenWords(strip_tags($commentname)); // we dont need any tags in the name, shortenwords
     $commentemail = strip_tags($commentemail); // strip tags in email => but should not be nessessary

     $sql = "INSERT INTO ".$cfg["tab"]["comments"]." (idcomments,idclient,idlang,idart,text,name,email,status,parentid,created) VALUES ('".$db->nextid($cfg["tab"]["comments"])."','".$client."','".$lang."','".$idart."','".$commenttext."','".$commentname."','".$commentemail."','1','".$creplyto."','".date("Y-m-d H:i:s")."')";

     if ($db->query($sql)) {
       echo "Created<br>";
     } else {
       echo "Creation failed<br>";
     }

     unset($cmode); // show all comments
   }
 }

 if (!$cmode) { // show comments

   $parentid = 0;

   $commentsTree = getCommentsTreeElements ($parentid,0,$flatTree); // build my tree baby

   if($errorComments) {

       echo "<!-- comments init failed - table does not exist //-->";

   } else {

       if ($debug) {
           echo "<pre>";
           print_r ($commentsTree); // debug only
           echo "</pre>";
       }


       $clinkform = $clink."&cmode=form&creplyto=0";

       echo '<a href="'.$clinkform.'" style="font-family:verdana, arial, sans-serif; font-size:11px;">Neuen Kommentar hinzufügen</a><br>'; // creplyto is used for reply

       if ($commentsTree) { // tree elements found

           showComments($commentsTree);

       }

   }

 } else { // show form

   if ($cmode == "form") {

     echo ("<form name=\"comments\" method=\"post\" action=\"$clink#comment$creplyto\">");
     echo ("<table cellpadding=\"0\" cellspacing=\"0\" style=\"font-family:verdana, arial, sans-serif; font-size:11px;\">");
     echo ("<tr>");
     echo ("<td width=\"120\"><p>Name:</p></td>");
     echo ("<td><input type=\"text\" name=\"commentname\" size=\"30\" value=\"$commentname\"></td>");
     echo ("</tr>");
     echo ("<tr>");
     echo ("<td><p>Email:</p></td>");
     echo ("<td><input type=\"text\" name=\"commentemail\" size=\"30\" value=\"$commentemail\"></td>");
     echo ("</tr>");
     echo ("</table>");
     echo ("<textarea cols=\"30\" rows=\"5\" name=\"commenttext\">$commenttext</textarea><br>");
     echo ("<input type=\"hidden\" name=\"creplyto\" value=\"$creplyto\">");
     echo ("<input type=\"hidden\" name=\"cmode\" value=\"add\">");
     echo ("<input type=\"submit\" name=\"submit\" value=\"Absenden\">");
     echo ("</form>");
   }
 }

?>
Zuletzt geändert von emergence am Mi 30. Jun 2004, 10:21, insgesamt 2-mal geändert.
*** make your own tools (wishlist :: thx)

Snoopy
Beiträge: 239
Registriert: Mo 15. Sep 2003, 18:45
Kontaktdaten:

Beitrag von Snoopy » Di 29. Jun 2004, 14:04

@Halchteranerin
Sorry ich hatte nicht versucht versteckt zu schreiben
@evok
Ich habe den Codo für die Adminmail nochmal einer "Schönheitskur" unterzogen.
Ich habe in das Modul einen Editor eingebaut und bin beim Finetuning, wird demnächst gepostet. Modul ist auf meiner Seite unter Aktuelles zu sehen (bitte keine Kommentare wenn sie nicht zum Thema dort gehören)
Gruß aus Hamburg :wink:

tommo
Beiträge: 120
Registriert: So 27. Jun 2004, 21:34
Kontaktdaten:

Beitrag von tommo » Mi 30. Jun 2004, 09:39

Wie kann ich denn Kommentare löschen (außer mit PHPMYADMIN)?

Tom

emergence
Beiträge: 10645
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence » Mi 30. Jun 2004, 09:41

direkt im artikel bei editor -> dort steht eigentlich delete...
sowohl in der v0.0.1 als auch in der v0.0.5
*** make your own tools (wishlist :: thx)

evok
Beiträge: 19
Registriert: Mo 21. Jun 2004, 03:45
Kontaktdaten:

Beitrag von evok » Do 1. Jul 2004, 17:16

Hallo Snoopy,

Sieht zwar wirklich nett aus, aber funktioniert bei mir leider nicht.
Im error log gibts dafür folgende Fehlermeldung:

[01-Jul-2004 18:12:23] Invalid SQL: SELECT idcomments, created, status FROM con_comments WHERE idclient =1 AND idlang = 1 AND idart = 98 AND parentid = '0' ORDER BY created DESC <br><br>

Die alte Version lief perfekt :?

evok
Beiträge: 19
Registriert: Mo 21. Jun 2004, 03:45
Kontaktdaten:

Beitrag von evok » Do 1. Jul 2004, 17:24

Ups... :oops:
Das kommt davon wenn man, emergence's _Beitrag nur überfliegt.

Snoopy
Beiträge: 239
Registriert: Mo 15. Sep 2003, 18:45
Kontaktdaten:

Beitrag von Snoopy » Mi 7. Jul 2004, 10:33

Aktuelle Version 0.1.6 von emergence und Snoopy
will be continued...... :wink:

Input

Code: Alles auswählen

/** 
* Comments v0.1.6 
* 
* INPUT 
* 
* @autor Martin Horwath <horwath@dayside.net>, Peter Beauvain <pbeauvain@web.de>
* @copyright dayside.net,Sommer & Partner 2004
* @lastmodified 2004-07-06
*/

// configuration 
$cfg["tab"]["comments"] = $cfg['sql']['sqlprefix']."_comments"; // for syntax reasons only 

if($db->query("SELECT * FROM ".$cfg["tab"]["comments"]." WHERE idclient =".$client." AND idlang = ".$lang)) { 
   // do something table exists 
   echo "Works..."; 
} else { 
   echo "error-> table: ".$cfg["tab"]["comments"]." does not exist<br>"; 
   // init table creation 
   $sql= "CREATE TABLE ".$cfg["tab"]["comments"]." ( 
          idcomments INT(10) NOT NULL default '0', 
          idclient INT(10) NOT NULL default '0', 
          idlang INT(10) NOT NULL default '0', 
          idart INT(10) NOT NULL default '0', 
          text text NOT NULL default '', 
          name varchar(64) NOT NULL, 
          email varchar(64) NOT NULL default '', 
          parentid INT(10) NOT NULL default '0', 
          vote INT(10) NOT NULL default '0', 
          status INT(10) NOT NULL default '0', 
          created datetime NOT NULL default '0000-00-00 00:00:00', 
          PRIMARY KEY (idcomments) )"; 

   if ($db->query($sql)) { 
     // table successfully created 
     echo "init-> created table: ".$cfg["tab"]["comments"]."<br>"; 
   } else { 
     echo "error-> table: ".$cfg["tab"]["comments"]."<br>"; 
   } 

   $sql= "INSERT INTO ".$cfg["tab"]["sequence"]." (seq_name,nextid) VALUES ('".$cfg["tab"]["comments"]."','0')"; 

   if ($db->query($sql)) { 
     // value successfully insert 
     echo "init-> value insert into ".$cfg["tab"]["sequence"]." - ".$cfg["tab"]["comments"]."<br>"; 
   } else { 
     echo "error-> value: ".$cfg["tab"]["sequence"]." - ".$cfg["tab"]["comments"]."<br>"; 
   } 
}
// begin option table
echo "<table align=\"left\" cellpadding=\"0\" cellspacing=\"0\">"; 
/**
* option email notification on/off --> set recipient
*
* @CMS_VAR[1] = notification on/off
* @CMS_VAR[2] = set recipient
* 
* @autor Peter Beauvain <pbeauvain@web.de>
* @modified 2004-07-06
*/
echo "<tr valign=\"top\"><td width=\"150\">Emailbenachrichtigung: ";
echo "</td><td>Ja <INPUT TYPE=\"checkbox\" NAME=\"CMS_VAR[1]\" VALUE=\"1\" ";
if("CMS_VALUE[1]" == 1){echo "checked=checked"; }; 
echo "> An:</td><td>";
echo "<INPUT TYPE=\"text\" NAME=\"CMS_VAR[2]\" VALUE=\"";
if(("CMS_VALUE[1]") && ("CMS_VALUE[2]")){ echo "CMS_VALUE[2]"; } else { echo "eMail angeben !!"; };
echo "\"></td></tr>";
/**
* option ubb-editor on/off 
*
* @CMS_VAR[3] = ubb-editor on/off
* 
* @autor Peter Beauvain <pbeauvain@web.de>
* @modified 2004-07-06
*/
echo "<tr valign=\"top\"><td width=\"150\">UBB-Editor Aktiviert: ";
echo "</td><td>Ja <INPUT TYPE=\"checkbox\" NAME=\"CMS_VAR[3]\" VALUE=\"true\" ";
if("CMS_VALUE[3]" == true){echo "checked=checked"; }; 
echo "<td></td></tr>";

//end option table
echo "</table>";

Output:

Code: Alles auswählen

<?
/**
* Comments v0.1.6
*
* OUTPUT
*
* @autor Martin Horwath <horwath@dayside.net>, Peter Beauvain <pbeauvain@web.de>
* @copyright dayside.net,Sommer & Partner 2004
* @lastmodified 2004-06-30
*/

// options UBB
$useUBB = "CMS_VALUE[3]"; // use ubb extention style
$imageUBB['other'] = "./images/";
$imageUBB['buttons'] = "./images/buttons/";
$imageUBB['smileys'] = "./images/smileys/";

// options display
$flatTree = false; // disable nesting levels

// configuration
$cfg["tab"]["comments"] = $cfg['sql']['sqlprefix']."_comments"; // for syntax reasons only

$clink = "front_content.php?idcat=$idcat&idart=$idart&lang=$lang&client=$client";

if ($edit) {
     $clink = $sess->url($clink);
}

$debug = false;

// functions
if (!isset($comments_functions)) {

// only init once
$comments_functions = true;

/**
* SPAM safe email
*
* @param string $email
*
* @return $value
*
* @autor Peter Beauvain <pbeauvain@web.de>
* @modified 2004-05-31
*/
function safeEmail($email)
{
    return str_replace(array('@', '.'), array(' at ', ' dot '), $email);
}
/**
* Prepare comment for email notification
*
* @param string $source
*
* @return $source
*
* @autor Peter Beauvain <pbeauvain@web.de>
* @modified 2004-05-31
*/
function prepMail($source)
{
   global $imageUBB;
   
   $source = eregi_replace('<br>','\n',$source);
   $source = eregi_replace('<img src="'.$imageUBB['smileys'].'wink.png" border="0">',' ;-) ',$source);
   $source = eregi_replace('<img src="'.$imageUBB['smileys'].'smile.png" border="0">',' :-) ',$source);
   $source = eregi_replace('<img src="'.$imageUBB['smileys'].'cool.png" border="0">',' 8-) ',$source);
   $source = eregi_replace('<img src="'.$imageUBB['smileys'].'look.png" border="0">',' info: ',$source);
   $source = eregi_replace('<img src="'.$imageUBB['smileys'].'attention.png" border="0">',' ! ',$source);
   $source = strip_tags($source);
   return preg_replace('/<(.*?)>/ie', "'<'.delAttr('\\1').'>'", $source);
}

/**
* Delete unallowed tags
*
* @param string $source
*
* @return $value
*
* @autor Peter Beauvain <pbeauvain@web.de>
* @modified 2004-05-31
*/
function delTags($source)
{
    $allowedTags='<a><br><b><i><img><li><ol><p><strong><table><tr><td><font><th><u><ul>';
    $source = strip_tags($source, $allowedTags);

    return preg_replace('/<(.*?)>/ie', "'<'.delAttr('\\1').'>'", $source);
}


/**
* Delete class or style definitions
*
* @param string $tagSource
*
* @return $value
*
* @autor Peter Beauvain <pbeauvain@web.de>
* @modified 2004-05-31
*/
function delAttr($tagSource)
{
    $stripAttrib = "' (style|class)=\"(.*?)\"'i";
    $tagSource = stripslashes($tagSource);
    $tagSource = preg_replace($stripAttrib, '', $tagSource);
    return $tagSource;
}


/**
* Prevent long strings
*
* @param string $string
* @param string $seperator = " "
* @param int    $maxlenght = 50
*
* @return $value
*
* @autor Martin Horwath <horwath@dayside.net>
* @modified 2004-06-23
*/
function shortenWords ($string, $seperator = " ", $maxlenght = 50 ) {
    $c = 0;
    for ($i=0; $i < strlen($string); $i++) {
        if (($string[$i] == " ") or ($string[$i] == "\n") or ($string[$i] == "\r")) {
            $c = 0;
        }

        if ($c > $maxlenght) {
            $string = substr_replace($string, $seperator, $i, 0);
            $i = $i+strlen($seperator);
            $c = 0;
   }
        $c++;
    }

    return $string;
}
/**
* Cut comment after 100 words | prevent novel writers
*
* @param string $str
* @param string $char
* @return $shortStr
*
* @autor Peter Beauvain <pbeauvain@web.de>
* @modified 2004-06-30
*/
function makeShorterText($str, $char)
{
	$str = ereg_replace("[[:space:]]+", " ", $str);
	$arrStr = explode(" ", $str);
	$shortStr = "";
	if (count($arrStr) > $char) {
		for ($j = 0; $j <= $char; $j++) {
			$shortStr .= $arrStr[$j]." ";
			}
		$shortStr .= "...";
		}
	else {
		$shortStr = $str;
		}
	return $shortStr;
}


/**
* Parse UBB code
*
* @param string $ret
*
* @return $value
*
* @autor Peter Beauvain <pbeauvain@web.de>
* @modified 2004-05-28
*/
function parseUBB($ret)
{
    global $imageUBB;
    $ret = stripslashes($ret);
    $pattern = array(   '{\[b\](.*)\[/b\]}smUi',
                        '{\[u\](.*)\[/u\]}smUi',
                        '{\[i\](.*)\[/i\]}smUi',
                        '{\[ul\](.*)\[/ul\]}smUi',
                        '{\[li\](.*)\[/li\]}smUi',
                        '{\[url=(.*)\](.*)\[/url\]}smUi',
                        '{\[url\](.*)\[/url\]}smUi',
                        '{\[img\](.*)\[/img\]}smUi',
                        '{\[size=(.*)\](.*)\[/size\]}smUi',
                        '{\[color=(.*)\](.*)\[/color\]}smUi',
                        '{\[align=(.*)\](.*)\[/align\]}smUi',
                        '{\[\\\\\]}smUi',
                        '{\[center\](.*)\[/center\]}smUi',
                        '{\[(h[1-6]+)\](.*)\[/\\1\]}smUi',
                        '{\[email\](.*)\[/email\]}smUi',
                        '{\[fimg\](.*)\[/fimg\]}smUi',
                        '{\[fimg desc=(.*)\](.*)\[/fimg\]}smUi',
                        '{\[quote\](.*)\[/quote\]}smUi',
                        '{\[email\](.*)\[/email\]}smUi'
                        );

    $replace = array(   '<b>\\1</b>',
                        '<u>\\1</u>',
                        '<i>\\1</i>',
                        '<ul type="square">\\1</ul>',
                        '<li>\\1</li>',
                        '<a href="http://\\1" target="_blank">\\2</a>',
                        '<a href="http://\\1" target="_blank">\\1</a>',
                        '<img src="\\1" border="0"><span>',
                        '<span style="font-size: \\1px;">\\2</span>',
                        '<font color="\\1">\\2</font>',
                        '<div align="\\1">\\2</div>',
                        '\\\\'.'\n',
                        '<div align="center">\\1</div>',
                        '<\\1>\\2</\\1>',
                        '<a href="mailto:\\1">\\1</a>',
                        '<img src="'.$imageUBB['other'].'\\1" border="0">',
                        '<img src="'.$imageUBB['other'].'\\2" border="0" alt="\\1" onMouseOver="'."self.status='\\1'; return(true);".'" onMouseOut="'."self.status=''; return(true);".'">',
                        '<table width="90%" border="0" cellspacing="2" cellpadding="2" align="center" style="border: 1px dashed black;"><tr><td>Zitat:<br />\\1</td></tr></table>',
                        '<a href="http://mailto:\\1">\\1</a>'
                        );


    $ret = preg_replace('#(<)([\/]?.*?)(>)#is', "<\\2>", $ret);//umwandeln von Tags ">" in > etc. | @@ Peter Beauvain, 2004-05-25
    $ret = preg_replace($pattern,$replace,$ret);
    $ret = str_replace('http://http://','http://',$ret);
    $ret = eregi_replace(";-\)|:wink:",'<img src="'.$imageUBB['smileys'].'wink.png" border="0">',$ret);
    $ret = eregi_replace(":-\)|:smile:",'<img src="'.$imageUBB['smileys'].'smile.png" border="0">',$ret);
    $ret = eregi_replace("8-\)|:cool:",'<img src="'.$imageUBB['smileys'].'cool.png" border="0">',$ret);
    $ret = eregi_replace(":info:",'<img src="'.$imageUBB['smileys'].'look.png" border="0">',$ret);
    $ret = eregi_replace(":!:",'<img src="'.$imageUBB['smileys'].'attention.png" border="0">',$ret);

    return nl2br($ret);
}

/**
* Build comments tree
*
* @param int $parentid
* @param int $level = 0
*
* @return array $tree
*
* @autor Martin Horwath <horwath@dayside.net>
* @modified 2004-06-29
*/
function getCommentsTreeElements ($parentid, $level = 0, $mode = false) {
    global $cfg, $idart, $client, $lang, $errorComments;

    $errorComments = false;

    $db = new DB_Contenido; // do not set global !!

    if (!$mode) { // nested

        $sql = "SELECT idcomments, created, status FROM ".$cfg["tab"]["comments"]." WHERE idclient =".$client." AND idlang = ".$lang." AND idart = ".$idart." AND parentid = '".$parentid."' ORDER BY created DESC ";

        if($db->query($sql)) {

            while ($db->next_record()) {

                if (!isset($TreeElements)) {
                    $TreeElements = Array();
                }

                if ($subTree = getCommentsTreeElements($db->f("idcomments"), ($level+1))) {
                    $TreeElements[] = Array ( 'level' => $level, 'idcomment' => $db->f("idcomments"), 'status' => $db->f("status"), 'created' => $db->f("created"), 'sub' => $subTree );
                } else {
                    $TreeElements[] = Array ( 'level' => $level, 'idcomment' => $db->f("idcomments"), 'status' => $db->f("status"), 'created' => $db->f("created") );
                }

            }

            if (isset($TreeElements)) {
                return $TreeElements;
            } else {
                return false;
            }

        } else {
            $errorComments = true;
        }

    } else { // flat mode

        $sql = "SELECT idcomments, created, status FROM ".$cfg["tab"]["comments"]." WHERE idclient =".$client." AND idlang = ".$lang." AND idart = ".$idart." ORDER BY created DESC ";

        if($db->query($sql)) {

            while ($db->next_record()) {

                if (!isset($TreeElements)) {
                    $TreeElements = Array();
                }

                $TreeElements[] = Array ( 'level' => $level, 'idcomment' => $db->f("idcomments"), 'status' => $db->f("status"), 'created' => $db->f("created") );
            }

            if (isset($TreeElements)) {
                return $TreeElements;
            } else {
                return false;
            }

        } else {
            $errorComments = true;
        }

    }

}

/**
* show comments
*
* @param array $tree
*
* @return
*
* @autor Martin Horwath <horwath@dayside.net>
* @modified 2004-06-29
*/
function showComments ($commentsTree, $level = 0) {

    global $cfg, $edit, $clink, $flatTree, $useUBB;

    $db = new DB_Contenido; // do not set global !!

    foreach ($commentsTree as $commentsNode => $treeElement) {

        $sql = "SELECT * FROM ".$cfg["tab"]["comments"]." WHERE idcomments =".$treeElement['idcomment']."";
        $db->query($sql);

        $db->next_record(); // there can be only one

        // echo "level:".$treeElement['level']."->".$db->f("name")."|"; // debug info

        if ($db->f("status") == '1' || $edit) { // only show online elements

             // generate output variable

             $comment['template'] = '<a name="comment'.$db->f("idcomments").'"></a><table width="410" style="font-family:verdana, arial, sans-serif; font-size:11px;"><tr valign="top"><td>%s</td><td>%s</td></table>';

             if ($db->f("email") != "") {
                 $comment['header'] = '<a href="mailto:'.safeEmail($db->f("email")).'">%s</a>';
             } else {
                 $comment['header'] = '%s';
             }

             $comment['header'] = sprintf($comment['header'],$db->f("name"));

             $comment['header'].= " schrieb am ".date("d.m.Y \u\m G:i:s",strtotime($db->f("created"))); // reformat stored datestring
             $comment['text'] = parseUBB($db->f("text"));

             $comment['complete'] = "<p><b>".$comment['header']."</b><br>\n".$comment['text']."</p>\n";

             if (!$flatTree) {
                 $clinkform = $clink."&cmode=form&creplyto=".$db->f("idcomments");
                 $comment['complete'].= '<p><a href="'.$clinkform.'" style="font-family:verdana, arial, sans-serif; font-size:11px;">Auf diesen Kommentar antworten</a></p>';
             }

             if ($edit) {
                 $clinkdelete = $clink."&cmode=delete&commentid=".$db->f("idcomments");
                 $comment['complete'].= '<a href="'.$clinkdelete.'" style="font-family:verdana, arial, sans-serif; font-size:11px;">Delete <img src="'.$cfg['path']['contenido_fullhtml'].'images/delete.gif" border="0"></a>';

                 if ($db->f("status") == '0') {
                     $clinkonline = $clink."&cmode=online&commentid=".$db->f("idcomments");
                     $comment['complete'].= ' | <a href="'.$clinkonline.'" style="font-family:verdana, arial, sans-serif; font-size:11px;">Set Online <img src="'.$cfg['path']['contenido_fullhtml'].'images/offline.gif" border="0"></a>';
                 } else {
                     $clinkoffline = $clink."&cmode=offline&commentid=".$db->f("idcomments");
                     $comment['complete'].= ' | <a href="'.$clinkoffline.'" style="font-family:verdana, arial, sans-serif; font-size:11px;">Set Offline <img src="'.$cfg['path']['contenido_fullhtml'].'images/online.gif" border="0"></a>';
                 }

             }

             $comment['complete'].= "<hr size=\"1\">\n";

             $comment['seperator'] = "";
             if ($level > 0) {
                 for ($counter = 0; $counter <= $level; $counter++) {
                     $comment['seperator'] .= "&nbsp;&nbsp;&nbsp;&nbsp;";
                 }
             }

             // print output
             echo sprintf($comment['template'],$comment['seperator'],$comment['complete']);

             if (isset($treeElement['sub'])) {
                 showComments ($treeElement['sub'], ($level+1));
             }

        } else {

             if (isset($treeElement['sub'])) {
                 showComments ($treeElement['sub'], $level);
             }

        }

    }

}

}


if ($cmode == "delete" && $edit) {

     // check for parentid entries and update them
     $sql = "SELECT parentid FROM ".$cfg["tab"]["comments"]." WHERE idcomments = $commentid";
     $db->query($sql);
     $db->next_record();

     $sql = "UPDATE ".$cfg["tab"]["comments"]." SET parentid=".$db->f("parentid")." WHERE parentid = $commentid";
     $db->query($sql);

     $sql = "DELETE FROM ".$cfg["tab"]["comments"]." WHERE idcomments = $commentid";

     if ($db->query($sql)) {
       echo "Deleted<br>";
     } else {
       echo "Delete failed<br>";
     }

     unset($cmode);

}

if (($cmode == "online" || $cmode == "offline") && $edit) {

     ($cmode == "online") ? $cmode = 1 : $cmode = 0;
     $sql = "UPDATE ".$cfg["tab"]["comments"]." SET `status`=$cmode WHERE idcomments = $commentid";

     if ($db->query($sql)) {
       echo "Updated<br>";
     } else {
       echo "Update failed<br>";
     }

     unset($cmode);

}

if (trim($commentname) == "" && trim($commentemail) == "" && trim($commenttext) == "" && $cmode == "add" ) unset($cmode); // do nothing

if ($cmode == "add") {
   // check if all entries are correct otherwise show form
   if (trim($commentname) == "") {
     echo "Bitte einen Namen eingeben.<br>";
     $cmode = "form";
   }

   if (trim($commentemail) != "") {
     if (!preg_match("/^[\w-]+((\.|\+)[\w-]+)*@([a-z0-9-]+(\.[a-z0-9-]+)*?\.[a-z]{2,6}|(\d{1,3}\.){3}\d{1,3})(:\d{4})?$/i",$commentemail)) {
       echo "Bitte geben Sie eine korrekte Email Adresse an.<br>";
       $cmode = "form";
     }
   }

   if (trim($commenttext) == "") {
     echo "Sie haben kein Kommentar geschrieben.<br>";
     $cmode = "form";
   }

   if ($cmode == "add") {

     $commenttext = shortenWords(delTags($commenttext),"- \r\n",48); // take care of allowed tags, remove others
     $commenttext = makeShorterText($commenttext, 100); // if someone trys to write a novel, cut after 100 words 
     $commentname = shortenWords(strip_tags($commentname)); // we dont need any tags in the name, shortenwords
     $commentemail = strip_tags($commentemail); // strip tags in email => but should not be nessessary
	
     $sql = "INSERT INTO ".$cfg["tab"]["comments"]." (idcomments,idclient,idlang,idart,text,name,email,status,parentid,created) VALUES ('".$db->nextid($cfg["tab"]["comments"])."','".$client."','".$lang."','".$idart."','".$commenttext."','".$commentname."','".$commentemail."','1','".$creplyto."','".date("Y-m-d H:i:s")."')";

     if ($db->query($sql)) {
       echo "Created<br>";
// Mailbenachrichtigung an den Admin | @@ Peter Beauvain, 2004-06-30
// Select Admin email adress

          $admin_mail = "CMS_VALUE[2]"; 
// Select mandant name        
$sql2 = "SELECT * FROM ".$cfg["tab"]["clients"]." WHERE  idclient = '$client'"; 
          $db->query($sql2); 
          $db->next_record(); 
          $mandant_name = $db->f("name"); 
          $client_url = $db->f("htmlpath"); 
         
   if ($commentemail == ''){
   $commentemail = "keine Angabe";
   }
   $url = $client_url."front_content.php?client=".$client."&lang=".$lang."&idcat=".$idcat."&idart=".$idart; 
 
    $mailbody = "Kommentar von: ".$commentname." | E-Mail: ".$commentemail." \n\nDer Kommentar wurde zu folgendem Artikel abgegeben :\n\n".$url."\n\nInhalt: ".prepMail(parseUBB($commenttext))."\n";
    
    mail($admin_mail, "neuer Kommentar zu einem Artikel !", $mailbody, "From:  $mandant_name\nX-Mailer: PHP/" . phpversion(). "\n");

// Mailbenachrichtigung Ende       
       
     } else {
       echo "Creation failed<br>";
     }

     unset($cmode); // show all comments
   }
}

if (!$cmode) { // show comments

   $parentid = 0;

   $commentsTree = getCommentsTreeElements ($parentid,0,$flatTree); // build my tree baby

   if($errorComments) {

       echo "<!-- comments init failed - table does not exist //-->";

   } else {

       if ($debug) {
           echo "<pre>";
           print_r ($commentsTree); // debug only
           echo "</pre>";
       }


       $clinkform = $clink."&cmode=form&creplyto=0";

       echo '<a href="'.$clinkform.'" style="font-family:verdana, arial, sans-serif; font-size:11px;">Neuen Kommentar hinzufügen</a><br>'; // creplyto is used for reply

       if ($commentsTree) { // tree elements found

           showComments($commentsTree);

       }

   }

} else { // show form

   if ($cmode == "form") {

     echo ("<form name=\"comments\" method=\"post\" action=\"$clink#comment$creplyto\">");
     echo ("<table cellpadding=\"0\" cellspacing=\"0\" style=\"font-family:verdana, arial, sans-serif; font-size:11px;\">");
     echo ("<tr>");
     echo ("<td width=\"75\"><p>Name:</p></td>");
     echo ("<td><input type=\"text\" name=\"commentname\" style=\"width: 335px;\" value=\"$commentname\"></td>");
     echo ("</tr>");
     echo ("<tr>");
     echo ("<td><p>Email:</p></td>");
     echo ("<td><input type=\"text\" name=\"commentemail\" style=\"width: 335px;\" value=\"$commentemail\"></td>");
     echo ("</tr>");
     echo ("</table>");

   if ($useUBB) {
?>
<script language="JavaScript" type="text/javascript">
// Define the bbCode tags
var imageTag = false;
var theSelection = false;
// Array für BB-Code Parser | @@ Peter Beauvain, 2004-05-27
bbcode = new Array();
bbtags = new Array('[b]','[/b]','[i]','[/i]','[u]','[/u]','[align=left]','[/align]','[center]','[/center]','[align=right]','[/align]','[align=justify]','[/align]','[ul]','[/ul]','[li]','[/li]','[img]','[/img]','[url]','[/url]','[email]','[/email]','[lart= lang=]','','[code]','
','[php]','[/php]','[quote]','[/quote]');
imageTag = false;
//-----------------------------------------------
// Browser Variablen | @@ Peter Beauvain, 2004-05-27
var clientPC = navigator.userAgent.toLowerCase(); // Get client info
var clientVer = parseInt(navigator.appVersion); // Get browser version

var is_ie = ((clientPC.indexOf("msie") != -1) && (clientPC.indexOf("opera") == -1));
var is_nav = ((clientPC.indexOf('mozilla')!=-1) && (clientPC.indexOf('spoofer')==-1)
&& (clientPC.indexOf('compatible') == -1) && (clientPC.indexOf('opera')==-1)
&& (clientPC.indexOf('webtv')==-1) && (clientPC.indexOf('hotjava')==-1));
var is_moz = 0;

var is_win = ((clientPC.indexOf("win")!=-1) || (clientPC.indexOf("16bit") != -1));
var is_mac = (clientPC.indexOf("mac")!=-1);
//------------------------------------------------
// Array der Texte für die Permanent Hilfe | @@ Peter Beauvain, 2004-05-27
a_help = "Alle noch offenen UBB-Tags schließen:[/..]";
b_help = "Text in fett: Text";
i_help = "Text in kursiv: Text";
u_help = "Unterstrichener Text: Text";
l_help ="Linksbündiger Text: [align=left]Text[/align]";
c_help ="Zentrierter Text: [center]Text[/center]";
r_help ="Linksbündiger Text: [align=right]Text[/align]";
j_help ="Text im Blocksatz: [align=justify]Text[/align]";
ul_help ="Geordnete Liste: [ul]Text[/ul]";
li_help ="Listenelement: [li]Text[/li]";

url_help ="Link: www.homepage.de oder Text";
mail_help ="E-Mail Adresse:John@Doe.com";


s_help ="Schriftfarbe: Text";
t_help ="Schriftgröße: kleiner Text bis großer Text";
icon1_help ="Emoticon Augenzwinkern :wink:";
icon2_help ="Emoticon Lachen :smile:";
icon3_help ="Emoticon Information :info:";
icon4_help ="Emoticon Achtung! :!:";
icon5_help ="Emoticon Cool :cool:";

//---------------------------------------------

// Funktion für die Permanent Hilfe | @@ Peter Beauvain, 2004-05-27
function helpline(help)
{
document.comments.helpbox.value = eval(help + "_help");
}

function getarraysize(thearray)
{
for (i = 0; i < thearray.length; i++) {
if ((thearray == "undefined") || (thearray == "") || (thearray == null))
return i;
}
return thearray.length;
}

// Replacement for arrayname.push(value) not implemented in IE until version 5.5 | @@ Peter Beauvain, 2004-05-27
// Appends element to the array
function arraypush(thearray,value)
{
thearray[ getarraysize(thearray) ] = value;
}

// Replacement for arrayname.pop() not implemented in IE until version 5.5 | @@ Peter Beauvain, 2004-05-27
// Removes and returns the last element of an array
function arraypop(thearray)
{
thearraysize = getarraysize(thearray);
retval = thearray[thearraysize - 1];
delete thearray[thearraysize - 1];
return retval;
}
// Funktion für die Textgrössen | @@ Peter Beauvain, 2004-05-27

function bbfontstyle(bbopen, bbclose)
{
var txtarea = document.comments.commenttext;

if ((clientVer >= 4) && is_ie && is_win) {
theSelection = document.selection.createRange().text;
if (!theSelection) {
txtarea.value += bbopen + bbclose;
txtarea.focus();
return;
}
document.selection.createRange().text = bbopen + theSelection + bbclose;
txtarea.focus();
return;
}
else if (txtarea.selectionEnd && (txtarea.selectionEnd - txtarea.selectionStart > 0))
{
mozWrap(txtarea, bbopen, bbclose);
return;
}
else
{
txtarea.value += bbopen + bbclose;
txtarea.focus();
}
storeCaret(txtarea);
}

//Funktion für die Abfrage der Buttons | @@ Peter Beauvain, 2004-05-27

function bbstyle(bbnumber)
{
var txtarea = document.comments.commenttext;

donotinsert = false;
theSelection = false;
bblast = 0;

if (bbnumber == -1) { // Close all open tags & default button names
while (bbcode[0]) {
butnumber = arraypop(bbcode) - 1;
txtarea.value += bbtags[butnumber + 1];

}
imageTag = false; // All tags are closed including image tags :D
txtarea.focus();
return;
}

if ((clientVer >= 4) && is_ie && is_win)
{
theSelection = document.selection.createRange().text; // Get text selection
if (theSelection) {
// Add tags around selection
document.selection.createRange().text = bbtags[bbnumber] + theSelection + bbtags[bbnumber+1];
txtarea.focus();
theSelection = '';
return;
}
}
else if (txtarea.selectionEnd && (txtarea.selectionEnd - txtarea.selectionStart > 0))
{
mozWrap(txtarea, bbtags[bbnumber], bbtags[bbnumber+1]);
return;
}

// Find last occurance of an open tag the same as the one just clicked
for (i = 0; i < bbcode.length; i++) {
if (bbcode == bbnumber+1) {
bblast = i;
donotinsert = true;
}
}

if (donotinsert) { // Close all open tags up to the one just clicked & default button names
while (bbcode[bblast]) {
butnumber = arraypop(bbcode) - 1;
txtarea.value += bbtags[butnumber + 1];

imageTag = false;
}
txtarea.focus();
return;
} else { // Open tags

if (imageTag && (bbnumber != 18)) { // Close image tag before adding another
txtarea.value += bbtags[19];
lastValue = arraypop(bbcode) - 1; // Remove the close image tag from the list

imageTag = false;
}

// Open tag
txtarea.value += bbtags[bbnumber];
if ((bbnumber == 18) && (imageTag == false)) imageTag = 1; // Check to stop additional tags after an unclosed image tag
arraypush(bbcode,bbnumber+1);

txtarea.focus();
return;
}
storeCaret(txtarea);
}


function Picture(pic,title,width,height)
{
popup=window.open(pic, title,'width='+width+',height='+height+',toolbar=no,directories=no,status=no,scrollbars=no,resizable=yes,menubar=no');
popup.focus();
}

// Taken from http://www.massless.org/mozedit/
var thisForm;

function mozWrap(txtarea, lft, rgt)
{
var selLength = txtarea.textLength;
var selStart = txtarea.selectionStart;
var selEnd = txtarea.selectionEnd;
if (selEnd==1 || selEnd==2) selEnd=selLength;
var s1 = (txtarea.value).substring(0,selStart);
var s2 = (txtarea.value).substring(selStart, selEnd)
var s3 = (txtarea.value).substring(selEnd, selLength);
txtarea.value = s1 + lft + s2 + rgt + s3;
}


function emoticon(text)
{
var txtarea = document.comments.commenttext;
text = ' ' + text + ' ';
if (txtarea.createTextRange && txtarea.caretPos) {
var caretPos = txtarea.caretPos;
caretPos.text = caretPos.text.charAt(caretPos.text.length - 1) == ' ' ? text + ' ' : text;
txtarea.focus();
} else {
txtarea.value += text;
txtarea.focus();
}
}

// Insert at Claret position. Code from
// http://www.faqts.com/knowledge_base/vie ... 52/fid/130
function storeCaret(textEl)
{
if (textEl.createTextRange) textEl.caretPos = document.selection.createRange().duplicate();
}

</script>

<table cellpadding="0" cellspacing="0" style="font-family:verdana, arial, sans-serif; font-size:11px;"><tr>
<td width="75"><b>&nbsp;</b></td><td colspan="2">
<a href="JavaScript:bbstyle(0)" onMouseOver="helpline('b')"><img src="<?= $imageUBB['buttons']; ?>button_bold.gif" alt="Bold Style" border="0"></a>
<a href="JavaScript:bbstyle(2)" onMouseOver="helpline('i')"><img src="<?= $imageUBB['buttons']; ?>button_italic.gif" alt="Italic Style" border="0"></a>
<a href="JavaScript:bbstyle(4)" onMouseOver="helpline('u')"><img src="<?= $imageUBB['buttons']; ?>button_underlined.gif" alt="Underlined Style" border="0"></a>
<a href="JavaScript:bbstyle(6)" onMouseOver="helpline('l')"><img src="<?= $imageUBB['buttons']; ?>button_left.gif" alt="Left alignment" border="0"></a>
<a href="JavaScript:bbstyle(8)" onMouseOver="helpline('c')"><img src="<?= $imageUBB['buttons']; ?>button_center.gif" alt="Centered" border="0"></a>
<a href="JavaScript:bbstyle(10)" onMouseOver="helpline('r')"><img src="<?= $imageUBB['buttons']; ?>button_right.gif" alt="Right Alignment" border="0"></a>
<a href="JavaScript:bbstyle(12)" onMouseOver="helpline('j')"><img src="<?= $imageUBB['buttons']; ?>button_justify.gif" alt="Justified" border="0"></a>
<a href="JavaScript:bbstyle(14)" onMouseOver="helpline('ul')"><img src="<?= $imageUBB['buttons']; ?>button_list.gif" alt="List" border="0"></a>
<a href="JavaScript:bbstyle(16)" onMouseOver="helpline('li')"><img src="<?= $imageUBB['buttons']; ?>button_list_item.gif" alt="List Item" border="0"></a>
<a href="JavaScript:bbstyle(20)" onMouseOver="helpline('url')"><img src="<?= $imageUBB['buttons']; ?>button_url.gif" alt="Insert URL" border="0"></a>
<a href="JavaScript:bbstyle(22)" onMouseOver="helpline('mail')"><img src="<?= $imageUBB['buttons']; ?>button_email.gif" alt="Insert email adress" border="0"></a>
<a href="javascript:bbstyle(-1)" onMouseOver="helpline('a')"><img src="<?= $imageUBB['buttons']; ?>button_close.gif" alt="Close Tags" border="0"></a><br>

<a href="JavaScript:emoticon(':wink:')" onMouseOver="helpline('icon1')"><img src="<?= $imageUBB['buttons']; ?>button_wink.gif" alt="emoticon wink" border="0"></a>
<a href="JavaScript:emoticon(':smile:')" onMouseOver="helpline('icon2')"><img src="<?= $imageUBB['buttons']; ?>button_smile.gif" alt="emoticon smile" border="0"></a>
<a href="JavaScript:emoticon(':info:')" onMouseOver="helpline('icon3')"><img src="<?= $imageUBB['buttons']; ?>button_look.gif" alt="emoticon info" border="0"></a>
<a href="JavaScript:emoticon(':!:')" onMouseOver="helpline('icon4')"><img src="<?= $imageUBB['buttons']; ?>button_attention.gif" alt="emoticon attention" border="0"></a>
<a href="JavaScript:emoticon(':cool:')" onMouseOver="helpline('icon5')"><img src="<?= $imageUBB['buttons']; ?>button_cool.gif" alt="emoticon cool" border="0"></a>

<select name="addbbcode32" onChange="bbfontstyle('[color=' + this.form.addbbcode32.options[this.form.addbbcode32.selectedIndex].value + ']', '[/color]');this.selectedIndex=0;" onMouseOver="helpline('s')">
<option style="background-color:darkred;" value="darkred">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</option>
<option style="background-color:red;" value="red">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</option>
<option style="background-color:orange;" value="orange">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</option>
<option style="background-color:brown;" value="brown">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</option>
<option style="background-color:yellow;" value="yellow">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</option>
<option style="background-color:green;" value="green">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</option>
<option style="background-color:chartreuse;" value="chartreuse">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</option>
<option style="background-color:olive;" value="olive">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</option>
<option style="background-color:cyan;" value="cyan">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</option>
<option style="background-color:blue;" value="blue">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</option>
<option style="background-color:darkblue;" value="darkblue">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</option>
<option style="background-color:indigo;" value="indigo">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</option>
<option style="background-color:violet;" value="violet">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</option>
<option style="background-color:white;" value="white">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</option>
<option style="background-color:black;" value="black">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</option>
</select>&nbsp;
<select name="addbbcode34" onChange="bbfontstyle('[size=' + this.form.addbbcode34.options[this.form.addbbcode34.selectedIndex].value + ']', '[/size]')" onMouseOver="helpline('t')">
<option value="7">XS</option>
<option value="9">S</option>
<option value="12" selected>M</option>
<option value="18">L</option>
<option value="24">XL</option>
</select>
</td></tr>
<tr><td width="75"><b>Hilfe:&nbsp;</b></td>
<td>
<input type="text" name="helpbox" style="width: 335px; border: 0px; font-size:12px;" value="Tipp: hier können Sie die Funktion der Buttons sehen">
</td>
</tr>
</table>
<?
echo ("<table cellpadding=\"0\" cellspacing=\"0\" style=\"font-family:verdana, arial, sans-serif; font-size:11px;\">");
echo ("<tr>");
echo ("<td width=\"75\" valign=\"top\"><p>Kommentar:</p></td>");
echo ("<td><textarea style=\"width: 335px;\" rows=\"5\" name=\"commenttext\" onselect=\"storeCaret(this);\" onclick=\"storeCaret(this);\" onkeyup=\"storeCaret(this);\">$commenttext</textarea><br></td>");
} else {
echo ("<table cellpadding=\"0\" cellspacing=\"0\" style=\"font-family:verdana, arial, sans-serif; font-size:11px;\">");
echo ("<tr>");
echo ("<td width=\"75\" valign=\"top\"><p>Kommentar:</p></td>");
echo ("<td><textarea style=\"width: 335px;\" rows=\"5\" name=\"commenttext\">$commenttext</textarea><br></td>");
}

echo ("<input type=\"hidden\" name=\"creplyto\" value=\"$creplyto\">");
echo ("<input type=\"hidden\" name=\"cmode\" value=\"add\">");
echo ("<tr>");
echo ("<td width=\"75\">&nbsp;</td>");
echo ("<td><input type=\"submit\" name=\"submit\" value=\"Absenden\"></td>");
echo ("</form></table>");
}
}

?>[/code]
Gruß aus Hamburg :wink:

Snoopy
Beiträge: 239
Registriert: Mo 15. Sep 2003, 18:45
Kontaktdaten:

Beitrag von Snoopy » Mi 7. Jul 2004, 11:07

Sorry ich habe die Grafiken vergessen !!!!

Die Grafiken müssen im Mandanten-Verzeichnis in den Ordner images entpackt werden.
grafiken.modul.comments.zip

comments.0.1.6.zip
Gruß aus Hamburg :wink:

acquire
Beiträge: 194
Registriert: So 13. Jun 2004, 13:24
Kontaktdaten:

Beitrag von acquire » Mi 7. Jul 2004, 13:22

Wahnsinn!
Das teste ich gleich mal!
Was ich noch prima finden würde: Eine Datei wo die ganzen Neuerungen drin stehen würden.

acquire
Beiträge: 194
Registriert: So 13. Jun 2004, 13:24
Kontaktdaten:

Beitrag von acquire » Mi 7. Jul 2004, 13:31

Ich bin mal wieder zu dämlich das Teil zum Laufen zu kriegen.
Ich habe das Modul eingegeben, und dann in der Konfigurationsseite Konfiguriert.
An sich müssten die Tabellen jetzt ja erstellt worden sein.
Wenn ich mir die Seite, auf der es angezeigt werden sollte, ansehe, sieht man davon nichts.
Im Quelltext finde ich aber folgendes:
<!-- comments init failed - table does not exist //-->
Wie kann es sein das nicht automatisch die Tabellen erstellt werden?
Ich hatte das Modul ja vorher schon, weiß aber nicht ob ich die Tabellen in der Datenbank gelöscht habe. Kann es daran liegen?
Und wenn ja,: Wie heißen die Tabellen?
Da müsste ja noch ein prefix sein...

Danke schonmal im Voraus!

emergence
Beiträge: 10645
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence » Mi 7. Jul 2004, 13:49

welche version hattest du vorher im einsatz ?
die v0.0.1 ist zur v0.0.5&v0.1.6 inkombatibel.
ein update von der v0.0.5 auf die v0.1.6 sollte kein problem verursachen.

die tabelle wird nur dann angelegt wenn die con_comments nicht existiert.

falls nicht müsste bei der konfiguration etwas mehr information dortstehen.. error oder init oder works(da sollte eigentlich alles so weit okay sein)...

was steht im errorlog.txt ?
*** make your own tools (wishlist :: thx)

acquire
Beiträge: 194
Registriert: So 13. Jun 2004, 13:24
Kontaktdaten:

Beitrag von acquire » Mi 7. Jul 2004, 13:51

Mir ist gerade aufgefallen das ich das gleiche Problem wie eval habe. Ich komme ja von der Vers 0.1.
Nur deine Anleitung serstehe ich dazu nicht.
Muss ich die Tabelle, zu der das Script nicht kompitabel ist löschen?
Vielen Dank für die schnelle Antwort!

Gesperrt