Modul 4.4.1 - Snippets

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

Modul 4.4.1 - Snippets

Beitrag von emergence »

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 »

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 »

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 »

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: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence »

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

Beitrag von cxx »

@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: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence »

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