#!/usr/bin/perl
# Fig. 17.6: addForum.pl
# Adds a forum to the list

use warnings;
use strict;
use CGI qw( :standard );
use XML::DOM;
use Fcntl qw( :flock :DEFAULT );

if ( param ) {
   my ( $parser, $document, $forums, $forum, $name );

   my ( $file, $newfile ) = ( "forums.xml", param( "filename" ) );
   $newfile =~ /^\w+\.xml$/ or die "Not a valid file: $!";

   sysopen NEW, "../htdocs/XML/$newfile" , O_WRONLY|O_EXCL|O_CREAT
      or die "Could not create: $!";
   open FORUMS, "+< ../htdocs/XML/$file" or die "Could not open: $!";
   flock FORUMS, LOCK_EX;

   $parser = new XML::DOM::Parser;
   $document = $parser->parse( \*FORUMS );
   $forums = $document->getDocumentElement;

   $forum = $document->createElement( "forum" ); 
   $forum->setAttribute( "filename", $newfile );
   $forums->insertBefore( $forum, $forums->getFirstChild );

   $name = $document->createElement( "name" );
   $name->addText( param( "name" ) );
   $forum->appendChild( $name );

   seek FORUMS, 0, 0;
   truncate FORUMS, 0;
   $document->print( \*FORUMS );
   close FORUMS;
   
   $document = $parser->parsefile( "../htdocs/XML/template.xml" );
   $forum = $document->getDocumentElement;
   $forum->setAttribute( "file", $newfile );

   $name = $document->createElement( "name" );
   $name->addText( param( "name" ) );
   $forum->appendChild( $name );

   $document->print( \*NEW );
   close NEW;
   print redirect( "default.pl" );
 
} 
else {
   print header, start_html( -title => "Add a forum", 
                             -style => { -src => "../XML/site.css" } );
   print start_form,
      "Forum Name", br,
      textfield( -name => "name", -size => 40 ), br,
      "Forum File Name", br,
      textfield( -name => "filename", -size => 40 ), br,
      submit( -name => "submit", value => "Submit" ), 
      reset, end_form, 
      a( { -href => "default.pl" }, "Return to Main Page" ), 
      end_html;
} 


###########################################################################
#  (C) Copyright 2001 by Deitel & Associates, Inc. and Prentice Hall.     #
#  All Rights Reserved.                                                   #
#                                                                         #
#  DISCLAIMER: The authors and publisher of this book have used their     #
#  best efforts in preparing the book. These efforts include the          #
#  development, research, and testing of the theories and programs        #
#  to determine their effectiveness. The authors and publisher make       #
#  no warranty of any kind, expressed or implied, with regard to these    #
#  programs or to the documentation contained in these books. The authors #
#  and publisher shall not be liable in any event for incidental or       #
#  consequential damages in connection with, or arising out of, the       #
#  furnishing, performance, or use of these programs.                     #
###########################################################################

