]> git.p6c8.net - selfforum.git/blobdiff - selfforum-cgi/shared/Posting/_lib.pm
Lock.pm: several style changes, comments added and fixed a small bug
[selfforum.git] / selfforum-cgi / shared / Posting / _lib.pm
index 3d082ac6fe6ea06ffb69ad9996a6ced0f1983fa8..0f3f015d1050431e3f0fdead3b69242331aef502 100644 (file)
@@ -5,7 +5,7 @@ package Posting::_lib;
 # File:        shared/Posting/_lib.pm                                          #
 #                                                                              #
 # Authors:     AndrĂ© Malo <nd@o3media.de>, 2001-03-03                          #
 # File:        shared/Posting/_lib.pm                                          #
 #                                                                              #
 # Authors:     AndrĂ© Malo <nd@o3media.de>, 2001-03-03                          #
-#              Frank Schoenmann <fs@tower.de>, 2001-03-02                      #
+#              Frank Schoenmann <fs@tower.de>, 2001-03-13                      #
 #                                                                              #
 # Description: Message access interface, time format routines                  #
 #                                                                              #
 #                                                                              #
 # Description: Message access interface, time format routines                  #
 #                                                                              #
@@ -13,9 +13,6 @@ package Posting::_lib;
 
 use strict;
 
 
 use strict;
 
-use vars qw(@EXPORT_OK);
-use base qw(Exporter);
-
 use Encode::Plain; $Encode::Plain::utf8 = 1;
 
 use XML::DOM;
 use Encode::Plain; $Encode::Plain::utf8 = 1;
 
 use XML::DOM;
@@ -24,10 +21,19 @@ use XML::DOM;
 # Export
 # ====================================================
 
 # Export
 # ====================================================
 
-@EXPORT_OK = qw(get_message_header get_message_body get_message_node get_body_node parse_single_thread
-                hr_time short_hr_time long_hr_time
-                get_all_threads create_forum_xml_string
-                save_file);
+use constant SORT_ASCENT  => 0; # (young postings first)
+use constant SORT_DESCENT => 1;
+use constant KEEP_DELETED => 1;
+use constant KILL_DELETED => 0;
+
+use base qw(Exporter);
+@Posting::_lib::EXPORT_OK = qw(
+  get_message_header get_message_body get_message_node get_body_node parse_single_thread parse_xml_file
+  hr_time short_hr_time long_hr_time
+  get_all_threads create_forum_xml_string
+  save_file
+  SORT_ASCENT   SORT_DESCENT   KEEP_DELETED   KILL_DELETED
+);
 
 # ====================================================
 # Access via XML::DOM
 
 # ====================================================
 # Access via XML::DOM
@@ -140,6 +146,26 @@ sub get_message_node ($$$)
   wantarray ? ($mnode, $tnode) : $mnode;
 }
 
   wantarray ? ($mnode, $tnode) : $mnode;
 }
 
+### sub parse_xml_file ($) #####################################################
+#
+# load the specified XML-File and create the DOM tree
+# this sub is only to avoid errors and to centralize the parse process
+#
+# Params: $file filename
+# Return: XML::DOM::Document Object (Document Node) or false
+#
+sub parse_xml_file ($) {
+  my $file = shift;
+  my $xml = eval {
+              local $SIG{__DIE__};
+              new XML::DOM::Parser (KeepCDATA => 1) -> parsefile ($file);
+            };
+
+  return if ($@);
+
+  $xml;
+}
+
 ###########################
 # sub parse_single_thread
 #
 ###########################
 # sub parse_single_thread
 #
@@ -273,7 +299,7 @@ sub sort_thread ($$) {
   \@smsg;
 }
 
   \@smsg;
 }
 
-### delete_messages () ##########################################################
+### delete_messages () #########################################################
 #
 # Filter out deleted messages
 #
 #
 # Filter out deleted messages
 #
@@ -318,7 +344,7 @@ sub delete_messages ($)
   return;
 }
 
   return;
 }
 
-### get_all_threads () ##########################################################
+### get_all_threads () #########################################################
 #
 # Read and Parse the main file (without any XML-module, they are too slow)
 #
 #
 # Read and Parse the main file (without any XML-module, they are too slow)
 #
@@ -326,12 +352,12 @@ sub delete_messages ($)
 #         $deleted  hold deleted (invisible) messages in result (1) oder not (0)
 #         $sorted   direction of message sort: descending (0) (default) or ascending (1)
 # Return: scalar context: hash reference
 #         $deleted  hold deleted (invisible) messages in result (1) oder not (0)
 #         $sorted   direction of message sort: descending (0) (default) or ascending (1)
 # Return: scalar context: hash reference
-#           list context: list (\%threads, $last_thread, $last_message, \@unids)
+#           list context: list (\%threads, $last_thread, $last_message, $dtd, \@unids)
 #
 sub get_all_threads ($$;$)
 {
   my ($file, $deleted, $sorted) = @_;
 #
 sub get_all_threads ($$;$)
 {
   my ($file, $deleted, $sorted) = @_;
-  my ($last_thread, $last_message, @unids, %threads);
+  my ($last_thread, $last_message, $dtd, @unids, %threads);
   local (*FILE, $/);
 
   open FILE, $file or return undef;
   local (*FILE, $/);
 
   open FILE, $file or return undef;
@@ -340,6 +366,7 @@ sub get_all_threads ($$;$)
 
   if (wantarray)
   {
 
   if (wantarray)
   {
+    ($dtd)          = $xml =~ /<!DOCTYPE\s+\S+\s+SYSTEM\s+"([^"]+)">/;
     ($last_thread)  = map {/(\d+)/} $xml =~ /<Forum.+?lastThread="([^"]+)"[^>]*>/;
     ($last_message) = map {/(\d+)/} $xml =~ /<Forum.+?lastMessage="([^"]+)"[^>]*>/;
   }
     ($last_thread)  = map {/(\d+)/} $xml =~ /<Forum.+?lastThread="([^"]+)"[^>]*>/;
     ($last_message) = map {/(\d+)/} $xml =~ /<Forum.+?lastMessage="([^"]+)"[^>]*>/;
   }
@@ -439,9 +466,9 @@ sub get_all_threads ($$;$)
     $threads{$tid} = $smsg if (@$smsg);
   }
 
     $threads{$tid} = $smsg if (@$smsg);
   }
 
-  wantarray ?
-    (\%threads, $last_thread, $last_message, \@unids)
-  : \%threads;
+  wantarray
+    ? (\%threads, $last_thread, $last_message, $dtd, \@unids)
+    : \%threads;
 }
 
 ###########################
 }
 
 ###########################

patrick-canterino.de