X-Git-Url: https://git.p6c8.net/selfforum.git/blobdiff_plain/2427a7a4ff1fe48d61d649a0c1618f3528a95231..cee4397796b2a1015b88addca2de54fe50dbc3f8:/selfforum-cgi/shared/Posting/_lib.pm?ds=sidebyside diff --git a/selfforum-cgi/shared/Posting/_lib.pm b/selfforum-cgi/shared/Posting/_lib.pm index 630a1e1..9a53307 100644 --- a/selfforum-cgi/shared/Posting/_lib.pm +++ b/selfforum-cgi/shared/Posting/_lib.pm @@ -75,6 +75,7 @@ sub create_message ($$) { my $header = $xml -> createElement ('Header'); my $author = $xml -> createElement ('Author'); + $header -> appendChild ($author); my @may = ( ['name' => 'Name' => $author], @@ -104,7 +105,6 @@ sub create_message ($$) { my $date = $xml -> createElement ('Date'); $date -> setAttribute ('longSec'=> $par -> {time}); - $header -> appendChild ($author); $header -> appendChild ($date); $message -> appendChild ($header); @@ -443,37 +443,31 @@ sub sort_thread ($$) { # Params: $smsg Reference of array of references of hashs # Return: -none- # -sub delete_messages ($) -{ +sub delete_messages ($) { my $smsg = shift; - my ($z, $oldlevel, @path) = (0,0,0); - for (@$smsg) - { - if ($_ -> {'deleted'}) - { - my $n = $_ -> {'answers'} + 1; - $smsg -> [$_] -> {'answers'} -= $n for (@path); - splice @$smsg,$z,$n; + while ($z <= $#{$smsg}) { + + if ($smsg -> [$z] -> {level} > $oldlevel) { + push @path => $z; + $oldlevel = $smsg -> [$z] -> {level}; + } + elsif ($smsg -> [$z] -> {level} < $oldlevel) { + splice @path, $smsg -> [$z] -> {level}; + push @path => $z; + $oldlevel = $smsg -> [$z] -> {'level'}; + } + else { + $path[-1] = $z; } - else - { - if ($_ -> {'level'} > $oldlevel) - { - push @path,$z; - $oldlevel = $_ -> {'level'}; - } - elsif ($_ -> {'level'} < $oldlevel) - { - splice @path,$_ -> {'level'} - $oldlevel; - $oldlevel = $_ -> {'level'}; - } - else - { - $path[-1] = $z; - } + if ($smsg -> [$z] -> {deleted}) { + my $n = $smsg -> [$z] -> {answers} + 1; + $smsg -> [$_] -> {answers} -= $n for (@path); + splice @$smsg, $z, $n; + } + else { $z++; } } @@ -497,9 +491,9 @@ sub get_all_threads ($$;$) my ($last_thread, $last_message, $dtd, @unids, %threads); local (*FILE, $/); - open FILE, $file or return undef; + open FILE,"< $file" or return; my $xml = join '', ; - close(FILE) or return undef; + close(FILE) or return; if (wantarray) { @@ -527,18 +521,20 @@ sub get_all_threads ($$;$) if (defined($10)) { push @stack,$cmno if (defined $cmno); - push @msg, {mid => $1, - unid => $2, - deleted => $3, - archive => $4, - name => $5, - cat => $6, - subject => $7, - time => $8, - level => $level++, - unids => [], - kids => [], - answers => 0}; + push @msg, { + mid => $1, + unid => $2, + deleted => $3 || 0, + archive => $4 || 0, + name => $5, + cat => $6, + subject => $7, + time => $8, + level => $level++, + unids => [], + kids => [], + answers => 0 + }; if (defined $cmno) { @@ -561,18 +557,20 @@ sub get_all_threads ($$;$) } elsif (defined ($9)) { - push @msg, {mid => $1, - unid => $2, - deleted => $3, - archive => $4, - name => $5, - cat => $6, - subject => $7, - time => $8, - level => $level, - unids => [], - kids => [], - answers => 0}; + push @msg, { + mid => $1, + unid => $2, + deleted => $3 || 0, + archive => $4 || 0, + name => $5, + cat => $6, + subject => $7, + time => $8, + level => $level, + unids => [], + kids => [], + answers => 0 + }; if (defined $cmno) {