home *** CD-ROM | disk | FTP | other *** search
/ linuxmafia.com 2016 / linuxmafia.com.tar / linuxmafia.com / pub / skeptic / bibliography / admin / edit.cgi < prev    next >
Text File  |  2009-08-26  |  5KB  |  184 lines

  1. #!/usr/bin/perl
  2.  
  3. # $rcs = ' $Id: edit.cgi,v 1.2 1998/06/20 04:00:04 fitz Exp $ ' ;
  4.  
  5. unshift(@INC, "lib");
  6.  
  7. require 'bib.pl';
  8. require 'web.pl';
  9. require 'cgi-lib.pl';
  10.  
  11.  
  12. &ReadParse; # Read the script input
  13. print "Content-type: text/html\n";
  14.  
  15. &bib::load("CATEGORY", "KEYWORDS");
  16.  
  17. # Determine if we are running as an administrator
  18. $admin = ($ENV{SCRIPT_NAME} =~ m!/admin/! ? 1 : 0);
  19.  
  20. # If the ID is specified as part of the URL,
  21. # then we are editing an existing file
  22. ($id = $ENV{PATH_INFO}) =~ s!.*edit\.cgi/?!!;
  23. if ($id)
  24. {
  25.     $heading = "Edit Bibliography Entry";
  26.  
  27.     &error("Invalid format for ID '$id'.")
  28.       unless $id =~ /^\d+$/;
  29.  
  30.     &error("Editing allowed only for administrators.")
  31.       unless $admin;
  32.  
  33.     %entry = &db::read_entry($id);
  34.     &error("Error reading bibliography entry for ID '$id': $db::error")
  35.       unless defined %entry;
  36. }
  37. else
  38. {
  39.     $heading = ($admin ?
  40.                 "Create Bibliography Entry" :
  41.                 "Submit Bibliography Entry");
  42.     %entry = ();
  43. }
  44.  
  45. # Get the categories
  46. @categories = &bib::get_categories();
  47. &error($bib::error) unless defined @categories;
  48.  
  49. # Get the keywords
  50. @keywords = &bib::get_keywords(1);
  51. &error($bib::error) unless defined @keywords;
  52.  
  53. # If they clicked the "Erase Changes",
  54. # revert to the last saved
  55. undef %in if $in{REVERT};
  56.  
  57. if (%in)
  58. {
  59.     # If the Delete button was pressed, redirect to another CGI
  60.     if ($in{delete})
  61.     {
  62.         $url = "$bib::admin_cgi/delete.cgi/$id";
  63.         print "Location: $url\n\n",
  64.         "This page has been redirected to<P><a href=\"$url\">$url</a>\n";
  65.         exit 0;
  66.     }
  67.  
  68.     # If they entered a new category,
  69.     # override the category selected in the list
  70.     $in{CATEGORY} = $in{NEW_CATEGORY} if $in{NEW_CATEGORY};
  71.  
  72.  
  73.     # If they selected multiple keywords,
  74.     # convert it into a single string,
  75.     # and include any additional keywords
  76.     if ($in{KEYWORDS})
  77.     {
  78.         my(@k) = &splitMultiple($in{KEYWORDS});
  79.         $in{KEYWORDS} = "@k";
  80.     }
  81.     $in{KEYWORDS} .= " $in{NEW_KEYWORDS}";
  82.  
  83.     # If the user is not an administrator, list the entry as
  84.     # preliminary 
  85.     unless ($admin)
  86.     {
  87.         $in{META} = "submit";
  88.  
  89.         &error("You must enter a submitter name and email address.")
  90.           unless ($in{SUBMITNAME} && $in{SUBMITADDR});
  91.     }
  92.  
  93.     if ($id2 = &bib::write_entry($id, %in))
  94.     {
  95.         if ($id)
  96.         {
  97.             &success("Wrote entry ID=$id<P>\n",
  98.                      "<A HREF=$bib::cgi/display.cgi/$id>Display Entry</A>\n");
  99.         }
  100.         elsif ($admin)
  101.         {
  102.             &success("Added new entry ID=$id2<P>\n",
  103.                      "<A HREF=$bib::cgi/display.cgi/$id2>Display Entry</A>\n");
  104.         }
  105.         else
  106.         {
  107.             $link = "http://$ENV{SERVER_NAME}$bib::cgi/display.cgi/$id2";
  108.  
  109.             &bib::sendmail("The following entry was submitted:" .
  110.                            "\n$link\n$in{TITLE}\n",
  111.                            "To: $bib::email{admin}",
  112.                            "Bcc: $bib::email{webmaster}",
  113.                            "From: $in{SUBMITADDR} ($in{SUBMITNAME})",
  114.                            "Subject: submission to SKEPTIC bibliography",)
  115.               || ($mail_error = "<P>Mail error: $bib::error");
  116.  
  117.             &success("Submitted new entry: it will not appear ",
  118.                      "in the bibliography until an administrator verifies it.<P>\n",
  119.                      "<A HREF=$bib::cgi/display.cgi/$id2>Display Entry</A>\n",
  120.                      $mail_error,
  121.                     );
  122.         }
  123.     }
  124.     else
  125.     {
  126.         # Validation or write error.
  127.         # Display the error, and redisplay the entry form
  128.         $vars = "<FONT COLOR=red SIZE=4><STRONG>Errors:</STRONG>"
  129.           . "<UL>$bib::error</UL></FONT>";
  130.         %entry = %in;
  131.  
  132.         $revert = "<INPUT TYPE=submit NAME=REVERT VALUE=\"Revert Entry to Last Saved\">" if $id;
  133.     }
  134. }
  135.  
  136.  
  137. # Construct a list of all current categories
  138. # and make sure the correct one is selected
  139. # if we are editing an existing entry
  140. foreach $category (@categories)
  141. {
  142.     $select = ($category eq $entry{CATEGORY}) ? "SELECTED" : "";
  143.     $categories .= "<OPTION $select>$category";
  144. }
  145.  
  146. # Construct a list of all current keywords
  147. # and make sure the correct ones are selected
  148. # if we are editing an existing entry
  149. foreach $keyword (@keywords)
  150. {
  151.     $select = "";
  152.     $select = "SELECTED"
  153.       if ($entry{KEYWORDS} =~ /\b$keyword\b/ &&
  154.           $entry{KEYWORDS} !~ /\b$keyword:/);
  155.     $keywords .= "<OPTION $select>$keyword";
  156. }
  157.  
  158.  
  159. # Make a copy of the entry, but untaint the values
  160. # so the special HTML characters are escaped
  161. %entry_untaint = &untaint_assoc(%entry);
  162. $entry_untaint{CATEGORY} = $categories;
  163. $entry_untaint{KEYWORDS} = $keywords;
  164.  
  165. $delete = "<INPUT TYPE=submit NAME=delete VALUE=\"Delete Entry...\">"
  166.   if $admin && $id;
  167. $newcat = "<INPUT NAME=NEW_CATEGORY VALUE=\"$entry_untaint{NEW_CATEGORY}\">"
  168.   if $admin;
  169. $revert = "<INPUT TYPE=reset VALUE=\"Erase Changes\">" unless $revert;
  170.  
  171. $data = &bib::template("edit.html",
  172.                        %entry_untaint,
  173.                        "HEADING", $heading,
  174.                        "VARS", $vars,
  175.                        "DELETE", $delete,
  176.                        "NEW_CATEGORY", $newcat,
  177.                        "REVERT", $revert,);
  178.  
  179. print "\n", &bib::template("basic.html",
  180.                            "TITLE", "Edit Entry $id",
  181.                            "DATA", $data);
  182.  
  183. exit 0;
  184.