]> git.p6c8.net - selfforum.git/blobdiff - selfforum-cgi/shared/Posting/Write.pm
if is_email and is_URL are called without a parameter, now $_ will be evaluated
[selfforum.git] / selfforum-cgi / shared / Posting / Write.pm
index b7d78935aa677cc2edf60a8abcef039647c616e6..5670251bdb48ca8f047c929ba1892102d3dd9031 100644 (file)
@@ -11,14 +11,15 @@ package Posting::Write;
 ################################################################################
 
 use strict;
-use vars qw(%error @EXPORT);
+use vars qw(
+  %error
+  @EXPORT
+  $VERSION
+);
 
 use Encode::Plain; $Encode::Plain::utf8 = 1;
 use Encode::Posting;
-use Lock qw(
-  :WRITE
-  release_file
-);
+use Lock;
 use Posting::_lib qw(
   get_message_node
   get_message_header
@@ -39,6 +40,12 @@ use XML::DOM;
   noParent    => '4 could not find parent message'
 );
 
+################################################################################
+#
+# Version check
+#
+$VERSION = do { my @r =(q$Revision$ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r };
+
 ################################################################################
 #
 # Export
@@ -78,7 +85,8 @@ sub write_new_thread ($) {
     body     => encoded_body(
       \($param -> {body}),
       { quoteChars => $param -> {quoteChars},
-        messages   => $param -> {messages}
+        messages   => $param -> {messages},
+        base_uri   => $param -> {base_uri}
       }
     ),
     time     => $param -> {time},
@@ -115,8 +123,8 @@ sub write_new_thread ($) {
   );
 
   save_file ($param -> {forumFile}, $forum) or return $error{forumWrite};
-  release_file ($param -> {messagePath}.$tid.'.xml');
-  return (0, $thread, $mid);
+  new Lock ($param -> {messagePath}.$tid.'.xml') -> release;
+  return (0, $thread, $mid, $tid);
 }
 
 ### sub write_reply_posting ($) ################################################
@@ -134,25 +142,24 @@ sub write_reply_posting ($) {
   my $mid   = 'm'.($param -> {lastMessage} + 1);
   my $tid   = 't'.($param -> {thread});
 
-  my $tfile = $param -> {messagePath}.$tid.'.xml';
+  my $tfile = new Lock ($param -> {messagePath}.$tid.'.xml');
 
-  unless (write_lock_file ($tfile)) {
-    violent_unlock_file ($tfile);
+  unless ($tfile->lock(LH_EXCL)) {
     return $error{threadFile};
   }
 
   else {
-    my $xml = parse_xml_file ($tfile);
+    my $xml = parse_xml_file ($tfile->filename);
 
     unless ($xml) {
-      violent_unlock_file ($tfile) unless (write_unlock_file ($tfile));
+      $tfile -> unlock;
       return $error{threadFile};
     }
 
     my $mnode = get_message_node ($xml, $tid, 'm'.$param -> {parentMessage});
 
     unless (defined $mnode) {
-      violent_unlock_file ($tfile) unless (write_unlock_file ($tfile));
+      $tfile -> unlock;
       return $error{noParent};
     }
 
@@ -179,7 +186,8 @@ sub write_reply_posting ($) {
         ${encoded_body(
           \($param -> {body}),
           { quoteChars => $param -> {quoteChars},
-            messages   => $param -> {messages}
+            messages   => $param -> {messages},
+            base_uri   => $param -> {base_uri}
           }
         )}
       )
@@ -190,12 +198,12 @@ sub write_reply_posting ($) {
 
     # save thread file
     #
-    unless (save_file ($tfile, \($xml -> toString))) {
-      violent_unlock_file ($tfile) unless (write_unlock_file ($tfile));
+    unless (save_file ($tfile->filename, \($xml -> toString))) {
+      $tfile -> unlock;
       return $error{threadWrite};
     }
 
-    violent_unlock_file ($tfile) unless (write_unlock_file ($tfile));
+    $tfile -> unlock;
 
     $thread = $xml;
 
@@ -226,17 +234,17 @@ sub write_reply_posting ($) {
       $param -> {parsedThreads},
       { dtd         => $param -> {dtd},
         lastMessage => $mid,
-        lastThread  => $tid
+        lastThread  => 't'.$param -> {lastThread}
       }
     );
 
     save_file ($param -> {forumFile}, $forum) or return $error{forumWrite};
   }
 
-  return (0, $thread, $mid);
+  return (0, $thread, $mid, $tid);
 }
 
-# keeping 'require' happy
+# keep 'require' happy
 #
 1;
 

patrick-canterino.de