]> git.p6c8.net - selfforum.git/blobdiff - selfforum-cgi/shared/Template/Posting.pm
these modules should now work with ne Lock-module
[selfforum.git] / selfforum-cgi / shared / Template / Posting.pm
index 348a7dbb07797d7c2f16e1d153dc1b1fbc4f453b..7f0d94022fcba6058dee0c672e8b3c1107ea786c 100644 (file)
@@ -4,18 +4,22 @@ package Template::Posting;
 #                                                                              #
 # File:        shared/Template/Posting.pm                                      #
 #                                                                              #
-# Authors:     Andre Malo       <nd@o3media.de>, 2001-04-01                    #
+# Authors:     Andre Malo       <nd@o3media.de>, 2001-06-16                    #
 #                                                                              #
 # Description: show HTML formatted posting                                     #
 #                                                                              #
 ################################################################################
 
 use strict;
+use vars qw(
+  @EXPORT
+  $VERSION
+);
 
 use Encode::Posting;
 use Encode::Plain; $Encode::Plain::utf8 = 1;
 use Id;
-use Lock qw(:READ);
+use Lock;
 use Posting::_lib qw(
   get_message_node
   get_message_header
@@ -24,6 +28,7 @@ use Posting::_lib qw(
   parse_xml_file
   hr_time
 );
+use Posting::Cache;
 use Template;
 use Template::_conf;
 use Template::_query;
@@ -31,17 +36,23 @@ use Template::_thread;
 
 use XML::DOM;
 
+################################################################################
+#
+# Version check
+#
+$VERSION = do { my @r =(q$Revision$ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r };
+
 ################################################################################
 #
 # Export
 #
 use base qw(Exporter);
-@Template::Posting::EXPORT = qw(
+@EXPORT = qw(
   print_posting_as_HTML
   message_as_HTML
 );
 
-### sub print_posting_as_HTML ($$$) ############################################
+### print_posting_as_HTML () ###################################################
 #
 # print HTML formatted Posting to STDOUT
 #
@@ -61,126 +72,154 @@ sub print_posting_as_HTML ($$$) {
     adminDefault => $param -> {adminDefault}
   });
 
-  my ($xmlfile, $locked, $xml) = ($threadpath.'t'.$param -> {thread}.'.xml', 0);
+  my $fh = new Lock ($threadpath.'t'.$param -> {thread}.'.xml');
 
-  unless (($locked = lock_file ($xmlfile)) and ($xml = parse_xml_file ($xmlfile))) {
-    violent_unlock_file ($xmlfile);
+  unless ($fh -> lock (LH_SHARED)) {
     print ${$template -> scrap (
       $assign -> {errorDoc},
       { $assign -> {errorText} => $template -> insert (
-          $assign -> {(defined $locked)
-            ? 'occupied'
-            : 'notAvailable'
-          })
+          $assign -> {
+            $fh -> masterlocked
+            ? 'notAvailable'
+            : 'occupied'
+          }
+        )
       }
     )};
   }
   else {
-    violent_unlock_file ($xmlfile) unless (unlock_file($xmlfile));
-
-    my ($mnode, $tnode) = get_message_node ($xml, 't'.$param -> {thread}, 'm'.$param -> {posting});
-
-    unless ($mnode and not $mnode->getAttribute('invisible')) {
-      print ${$template -> scrap (
-        $assign -> {errorDoc},
-        { $assign -> {errorText} => $template -> insert ($assign -> {'notAvailable'}) }
-      )};
+    unless (-f $fh -> filename) {
+      $fh -> unlock;
+      print ${$template -> scrap ($assign -> {errorDoc}, {$assign -> {errorText} => $template -> insert ($assign->{notAvailable})})};
     }
     else {
-      my $pnode = $mnode -> getParentNode;
-      my $header = get_message_header ($mnode);
-      my $msg = parse_single_thread ($tnode, $param -> {showDeleted}, $view -> {sortedMsg});
-      my $pheader = ($pnode -> getNodeName eq 'Message')?get_message_header ($pnode):{};
-
-      my $formdata = $param -> {form} -> {data};
-      my $formact = $param -> {form} -> {action};
-
-      my $body = get_message_body ($xml, 'm'.$param -> {posting});
-
-      my $text = message_field (
-        $body,
-        { quoteChars => plain($view -> {quoteChars}),
-          quoting    => $view -> {quoting},
-          startCite  => ${$template -> scrap ($assign -> {startCite})},
-          endCite    => ${$template -> scrap ($assign -> {endCite})}
+      my $xml = parse_xml_file ($fh -> filename); #...
+      $fh -> unlock;
+
+      unless ($xml) {
+        print ${$template -> scrap ($assign -> {errorDoc}, {$assign -> {errorText} => $template -> insert ($assign->{corrupt})})};
+      }
+      else {
+        my ($mnode, $tnode) = get_message_node ($xml, 't'.$param -> {thread}, 'm'.$param -> {posting});
+
+        unless ($mnode and not $mnode->getAttribute('invisible')) {
+          print ${$template -> scrap (
+            $assign -> {errorDoc},
+            { $assign -> {errorText} => $template -> insert ($assign -> {'notAvailable'}) }
+          )};
         }
-      );
+        else {
+          my $pnode = $mnode -> getParentNode;
+          my $header = get_message_header ($mnode);
+          my $msg = parse_single_thread ($tnode, $param -> {showDeleted}, $view -> {sortedMsg});
+          my $pheader = ($pnode -> getNodeName eq 'Message')?get_message_header ($pnode):{};
+
+          my $formdata = $param -> {form} -> {data};
+          my $formact = $param -> {form} -> {action};
+
+          my $body = get_message_body ($xml, 'm'.$param -> {posting});
 
-      my $area = answer_field (
-        $body,
-        { quoteArea  => 1,
-          quoteChars => plain($view -> {quoteChars}),
-          messages   => $param -> {messages}
+          my $text = message_field (
+            $body,
+            { quoteChars => plain($view -> {quoteChars}),
+              quoting    => $view -> {quoting},
+              startCite  => ${$template -> scrap ($assign -> {startCite})},
+              endCite    => ${$template -> scrap ($assign -> {endCite})}
+            }
+          );
+
+          my $area = answer_field (
+            $body,
+            { quoteArea  => 1,
+              quoteChars => plain($view -> {quoteChars}),
+              messages   => $param -> {messages}
+            }
+          );
+
+          my $pars = {};
+
+          $pars -> {$formdata -> {$_} -> {assign} -> {name}} = plain($formdata -> {$_} -> {name})
+            for (qw(
+              posterBody
+              uniqueID
+              followUp
+              quoteChar
+              userID
+              posterName
+              posterEmail
+              posterURL
+              posterImage
+              )
+            );
+
+          my $cgi = $param -> {cgi};
+
+          my $tpar = {
+            thread   => $param -> {thread},
+            template => $param -> {tree},
+            start    => $param -> {posting},
+            cgi      => $cgi
+          };
+
+          my $parent_pars;
+
+          $parent_pars = {
+            $assign->{parentTitle} => plain(defined $pheader->{subject}  ? $pheader->{subject}  : ''),
+            $assign->{parentCat}   => plain(defined $pheader->{category} ? $pheader->{category} : ''),
+            $assign->{parentName}  => plain(defined $pheader->{name}     ? $pheader->{name}     : ''),
+            $assign->{parentTime}  => plain(hr_time($pheader->{time})),
+            $assign->{parentLink}  => query_string (
+              { $cgi -> {thread} => $param -> {thread},
+                $cgi -> {posting} => ($pnode -> getAttribute ('id') =~ /(\d+)/)[0]
+              })
+          } if (%$pheader);
+
+          print ${$template -> scrap (
+            $assign->{mainDoc},
+            { $assign->{name}                            => plain(defined $header->{name}  ? $header->{name}  : ''),
+              $assign->{email}                           => plain(defined $header->{email} ? $header->{email} : ''),
+              $assign->{home}                            => plain(defined $header->{home}  ? $header->{home}  : ''),
+              $assign->{image}                           => plain(defined $header->{image} ? $header->{image} : ''),
+              $assign->{time}                            => plain(hr_time($header->{time})),
+              $assign->{message}                         => $text,
+              $assign->{messageTitle}                    => plain(defined $header->{subject}  ? $header->{subject}  : ''),
+              $assign->{messageCat}                      => plain(defined $header->{category} ? $header->{category} : ''),
+              $param->{tree}->{main}                     => html_thread ($msg, $template, $tpar),
+              $formact->{post}->{assign}                 => $formact->{post}->{url},
+              $formact->{vote}->{assign}                 => $formact->{vote}->{url},
+              $formdata->{posterBody}->{assign}->{value} => $area,
+              $formdata->{uniqueID}  ->{assign}->{value} => plain(unique_id),
+              $formdata->{followUp}  ->{assign}->{value} => plain($param -> {thread}.';'.$param -> {posting}),
+              $formdata->{quoteChar} ->{assign}->{value} => "&#255;".plain(defined $view -> {quoteChars} ? $view -> {quoteChars} : ''),
+              $formdata->{userID}    ->{assign}->{value} => '',
+              $assign->{firsttime}                       => $param->{firsttime} ? $param->{firsttime} : '',
+              $assign->{voted}                           => $param->{voted} ? $param->{voted} : ''
+            },
+            $pars,
+            $parent_pars
+          )};
+
+          # all output done
+          #
+          close STDOUT;
+
+          if ($param->{firsttime}) {
+            my $cache = new Posting::Cache ($param->{cachepath});
+            $cache -> add_view (
+              { thread  => $param -> {thread},
+                posting => $param -> {posting}
+              }
+            );
+          }
         }
-      );
-
-      my $pars = {};
-
-      $pars -> {$formdata -> {$_} -> {assign} -> {name}} = plain($formdata -> {$_} -> {name})
-        for (qw(
-          posterBody
-          uniqueID
-          followUp
-          quoteChar
-          userID
-          posterName
-          posterEmail
-          posterURL
-          posterImage
-          )
-        );
-
-      my $cgi = $param -> {cgi};
-
-      my $tpar = {
-        thread   => $param -> {thread},
-        template => $param -> {tree},
-        start    => $param -> {posting},
-        cgi      => $cgi
-      };
-
-      my $parent_pars;
-
-      $parent_pars = {
-        $assign->{parentTitle} => plain(defined $pheader->{subject}  ? $pheader->{subject}  : ''),
-        $assign->{parentCat}   => plain(defined $pheader->{category} ? $pheader->{category} : ''),
-        $assign->{parentName}  => plain(defined $pheader->{name}     ? $pheader->{name}     : ''),
-        $assign->{parentTime}  => plain(hr_time($pheader->{time})),
-        $assign->{parentLink}  => query_string (
-          { $cgi -> {thread} => $param -> {thread},
-            $cgi -> {posting} => ($pnode -> getAttribute ('id') =~ /(\d+)/)[0]
-          })
-      } if (%$pheader);
-
-      print ${$template -> scrap (
-        $assign->{mainDoc},
-        { $assign->{name}                            => plain(defined $header->{name}  ? $header->{name}  : ''),
-          $assign->{email}                           => plain(defined $header->{email} ? $header->{email} : ''),
-          $assign->{home}                            => plain(defined $header->{home}  ? $header->{home}  : ''),
-          $assign->{image}                           => plain(defined $header->{image} ? $header->{image} : ''),
-          $assign->{time}                            => plain(hr_time($header->{time})),
-          $assign->{message}                         => $text,
-          $assign->{messageTitle}                    => plain(defined $header->{subject}  ? $header->{subject}  : ''),
-          $assign->{messageCat}                      => plain(defined $header->{category} ? $header->{category} : ''),
-          $param->{tree}->{main}                     => html_thread ($msg, $template, $tpar),
-          $formact->{post}->{assign}                 => $formact->{post}->{url},
-          $formact->{vote}->{assign}                 => $formact->{vote}->{url},
-          $formdata->{posterBody}->{assign}->{value} => $area,
-          $formdata->{uniqueID}  ->{assign}->{value} => plain(unique_id),
-          $formdata->{followUp}  ->{assign}->{value} => plain($param -> {thread}.';'.$param -> {posting}),
-          $formdata->{quoteChar} ->{assign}->{value} => "&#255;".plain(defined $view -> {quoteChars} ? $view -> {quoteChars} : ''),
-          $formdata->{userID}    ->{assign}->{value} => ''
-        },
-        $pars,
-        $parent_pars
-      )};
+      }
     }
   }
 
   return;
 }
 
-### sub message_as_HTML ($$$) ##################################################
+### message_as_HTML () #########################################################
 #
 # create HTML String for the Messagetext
 #
@@ -210,7 +249,7 @@ sub message_as_HTML ($$$) {
   $text;
 }
 
-# keep require happy
+# keep 'require' happy
 1;
 
 #

patrick-canterino.de