Modul 4.4.1 - Snippets

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

Modul 4.4.1 - Snippets

Beitrag von emergence » Mo 17. Nov 2003, 15:16

hier ein neues modul welches es ermöglicht code jeder art direkt auf der seite einzufügen (bedingung der code muss korrekt sein)...

das modul legt eine neue tabelle an in dem die code snippets gespeichert werden... als internen zähler verwende ich einen neuen eintrag in der code sequence...

das modul ist in jeden beliebigen container (auch mehrfach) einsetzbar.
die anzeige und bearbeitung der snippets ist client und sprach gebunden!
getestet hab ich das noch nicht...

mögliche momentane aktionen | new | copy | delete | update...
(je nachdem was zur verfügung steht)

an sich ist jedes output modul ohne eine verwendung von sämtlichen CMS_* etc. lauffähig...

achtung: das modul ist nur für leute gedacht die wissen was sie anrichten können ;-)
für die eingabe des codes empfehle ich es direkt über die seiten konfiguration zu machen...

hier der code:

Name: Snippets v0.0.4
Beschreibung:

Code: Alles auswählen

# Snippets v0.0.4
# Autor: Martin Horwath
# Date: 16.11.2003
# Modified: 17.11.2003
# Requires: Contenido 4.4.1
Input:

Code: Alles auswählen

/**
 * Snippets v0.0.4
 *
 * INPUT
 *
 * @autor Martin Horwath <horwath@dayside.net>
 * @copyright dayside.net 2003
 */

 // configuration
 $cfg["tab"]["snippets"] = $cfg['sql']['sqlprefix']."_snippets"; // for syntax reasons only
 $tmp_selected = "CMS_VALUE[1]";

 // define the variables | $cnumber is used for unique actions

 if (${"snippet_action".$cnumber} == "delete") {
   $sql = "DELETE FROM ".$cfg["tab"]["snippets"]." WHERE (idsnippet='".$tmp_selected."')";
   if ($db->query($sql)) {
     $tmp_status = "Deleted\n";
   } else {
     $tmp_status = "Delete failed\n";
   }
 }

 if (${"snippet_action".$cnumber} == "new") {
   $tmp_selected = $db->nextid($cfg["tab"]["snippets"]);
   $sql = "INSERT INTO ".$cfg["tab"]["snippets"]." (idsnippet,idclient,idlang,name,code,author,created,lastmodified) VALUES ('".$tmp_selected."','".$client."','".$lang."','".${"snippet_name".$cnumber}."','".addslashes(${"snippet_code".$cnumber})."','".$auth->auth["uname"]."','".date("Y-m-d H:i:s")."','".date("Y-m-d H:i:s")."')";
   if ($db->query($sql)) {
     $tmp_status = "Created\n";
   } else {
     unset($tmp_selected);
     $tmp_status = "Creation failed\n";
   }
 }

 if (${"snippet_action".$cnumber} == "update") {
   $sql = "UPDATE ".$cfg["tab"]["snippets"]." SET name='".${"snippet_name".$cnumber}."', code='".addslashes(${"snippet_code".$cnumber})."',lastmodified='".date("Y-m-d H:i:s")."' WHERE (idsnippet='".$tmp_selected."')";
   if ($db->query($sql)) {
     $tmp_status = "Updated\n";
   } else {
     $tmp_status = "Update failed\n";
   }
 }

 if($db->query("SELECT * FROM ".$cfg["tab"]["snippets"]." WHERE idclient =".$client." AND idlang = ".$lang)) {

   while ($db->next_record()) {

     $tmp_id = $db->f("idsnippet");

     $tmp_option .= "<OPTION VALUE=\"".$tmp_id."\"";
     if ( $tmp_selected == $tmp_id ) {
       $tmp_name = $db->f("name");
       $tmp_code = stripslashes($db->f("code"));
       $tmp_option .=" selected=\"selected\"";
     }
     $tmp_option .= ">".$db->f("name")."</OPTION>\n";

   }

   echo "<!-- Snippets //-->\n";

   echo "Name: <INPUT type=\"text\" name=\"snippet_name".$cnumber."\" value=\"".$tmp_name."\" class=\"text_medium\">\n";

   if (isset($tmp_code)) { // show copy,delete,update
     echo " | <A href=\"javascript:document.tplcfgform.submit();\" onclick=\"document.tplcfgform.snippet_action".$cnumber.".value='update';\">Update</A>\n";
     echo " | <A href=\"javascript:document.tplcfgform.submit();\" onclick=\"document.tplcfgform.snippet_action".$cnumber.".value='new';\">Copy</A>\n";
     echo " | <A href=\"javascript:document.tplcfgform.submit();\" onclick=\"document.tplcfgform.snippet_action".$cnumber.".value='delete';\">Delete</A>\n";
   } else { // show new
     echo " | <A href=\"javascript:document.tplcfgform.submit();\" onclick=\"document.tplcfgform.snippet_action".$cnumber.".value='new';\">New</A>\n";
   }

   if (isset($tmp_option)) { // show available snippets
     echo " | Snippet: ";
     echo "<SELECT name=\"CMS_VAR[1]\" onChange=\"form.submit();\" class=\"text_medium\">\n";
     echo "<OPTION VALUE=\"\">".i18n("--- None ---")."</OPTION>\n";
     echo $tmp_option;
     echo "</SELECT>\n";
   }

   if (isset($tmp_code)) { // show selected snippet code
     echo "<br><br>\n<TEXTAREA name=\"snippet_code".$cnumber."\" cols=60 rows=20 class=\"code_fullwidth\">";
     echo $tmp_code;
     echo "</TEXTAREA>\n";
   }

   echo "<table cellspacing=\"0\" cellpadding=\"2\" border=\"0\" width=\"100%\">\n";
   echo " <tr>\n";
   echo "   <td>";
   // possible modulcheck goes here

   // set via javascript , used 'visibility: hidden' to prevent onsubmit script
   echo "<INPUT type=\"input\" name=\"snippet_action".$cnumber."\" value=\"\" class=\"text_medium\" style=\"visibility: hidden;\">\n";

   if (isset($tmp_status)) {
     echo "   </td>\n";
     echo "   <td align=\"right\" width=\"50%\">\n";
     echo "Status: ".$tmp_status;
   }
   echo "   </td>\n";
   echo " </tr>\n";
   echo " </table>\n";


 } else {
   echo "error-> table: ".$cfg["tab"]["snippets"]." does not exist<br>";
   // init table creation
   $sql= "CREATE TABLE ".$cfg["tab"]["snippets"]." (
          idsnippet INT(10) NOT NULL default '0',
          idclient INT(10) NOT NULL default '0',
          idlang INT(10) NOT NULL default '0',
          name varchar(255) NOT NULL default '',
          code longtext NOT NULL,
          author varchar(32) NOT NULL default '',
          created datetime NOT NULL default '0000-00-00 00:00:00',
          lastmodified datetime NOT NULL default '0000-00-00 00:00:00',
          PRIMARY KEY (idsnippet) )";

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

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

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

  // cleanup destroy all intern variables
  unset ($tmp_name);
  unset ($tmp_code);
  unset ($tmp_id);
  unset ($tmp_status);
  unset ($tmp_option);
  unset ($tmp_selected);
Output:

Code: Alles auswählen

<?
/**
 * Snippets v0.0.3
 *
 * OUTPUT
 *
 * @autor Martin Horwath <horwath@dayside.net>
 * @copyright dayside.net 2003
 */

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

 if($db->query("SELECT * FROM ".$cfg["tab"]["snippets"]." WHERE idclient =".$client." AND idlang = ".$lang." AND idsnippet = 'CMS_VALUE[1]'")) {

   $db->next_record();

   $idsnippet = $db->f("idsnippet");
   $name = $db->f("name");
   $code = " ?>".stripslashes($db->f("code"))."<?php ";
   $author = $db->f("author");
   $lastmodified = $db->f("lastmodified");

   if ("" != "CMS_VALUE[1]") { // only show if value is set
     echo "\n<!-- *snippet: start* id: $idsnippet | name: $name | author: $author | lastmodified: $lastmodified //-->\n";
     eval($code);
     echo "\n<!-- *snippet: end* id: $idsnippet | name: $name //-->\n";
   }

 } else {
   echo "<!-- *snippet: error | check article configuration | set value: 'CMS_VALUE[1]' //-->";
 }
?>

wolfganggarella
Beiträge: 74
Registriert: Fr 7. Nov 2003, 11:35
Wohnort: München
Kontaktdaten:

Beitrag von wolfganggarella » Di 18. Nov 2003, 10:56

Hi emergence,

Danke für dieses schöne Stück Software.

Wolfgang Garella

hyperjojo
Beiträge: 102
Registriert: Fr 1. Nov 2002, 23:57
Kontaktdaten:

Beitrag von hyperjojo » So 23. Nov 2003, 11:56

Ein Super-Teil!!!

Vielen Dank!!!

btw: für alle, die es neu ausprobieren: Auch hier darf logischerweise kein </textarea> im Code vorkommen. Einfach mit PHP umgehen, wie auch bei den Modulen... ;)

bye

timo
Beiträge: 6284
Registriert: Do 15. Mai 2003, 18:32
Wohnort: Da findet ihr mich nie!
Kontaktdaten:

Beitrag von timo » So 23. Nov 2003, 12:02

hyperjojo hat geschrieben: btw: für alle, die es neu ausprobieren: Auch hier darf logischerweise kein </textarea> im Code vorkommen. Einfach mit PHP umgehen, wie auch bei den Modulen... ;)
bye
Kann man relativ einfach umgehen, indem man "htmlspecialchars" verwendet. Bei den Modulen darf jetzt auch "</textarea>" als ganzes verwendet werden - funktioniert ohne Probleme :)

Grüße,
Timo

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

Beitrag von emergence » Di 24. Feb 2004, 13:36


cxx
Beiträge: 3
Registriert: Fr 16. Mai 2003, 09:12
Wohnort: Dessau
Kontaktdaten:

Beitrag von cxx » Mi 24. Mär 2004, 22:17

@timo & all
Kann man relativ einfach umgehen, indem man "htmlspecialchars" verwendet. Bei den Modulen darf jetzt auch "</textarea>" als ganzes verwendet werden - funktioniert ohne Probleme
kann das mal jemand an einem kurzen Beispiel verdeutlichen? hab keine ahnung wie man "htmlspecialchars" verwendet.
musste jetzt leider feststellen was passieren kann wenn man <textarea> verwendet... :shock:

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

Beitrag von emergence » Fr 9. Apr 2004, 12:19

cxx hat geschrieben:
Kann man relativ einfach umgehen, indem man "htmlspecialchars" verwendet. Bei den Modulen darf jetzt auch "</textarea>" als ganzes verwendet werden - funktioniert ohne Probleme
kann das mal jemand an einem kurzen Beispiel verdeutlichen?

Code: Alles auswählen

echo $tmp_code;
wird ersetzt durch

Code: Alles auswählen

echo htmlspecialchars($tmp_code);
das is es...
*** make your own tools (wishlist :: thx)

Gesperrt