#!/opt/bin/perl # ######################################################################### # # # Program to display all preports of a given user # # # ######################################################################### # # # Version 1.0 - Written 15.05.96 by Steffen Beyer # # # ######################################################################### # # # Copyright (C) 1996 by software design & management GmbH & Co. KG # # # ######################################################################### use Date::DateCalc qw(:all); use lib qw( /u/sb/sw/pkg/perl/lib/perl/5.12.0/amd64-freebsd /u/sb/sw/pkg/perl/lib/perl/5.12.0 /u/sb/sw/pkg/perl/lib/perl/site_perl/5.12.0/amd64-freebsd /u/sb/sw/pkg/perl/lib/perl/site_perl/5.12.0 ); require "parse_date.pl"; unshift(@INC, '/opt/lib/problem'); require "config.pl"; # Configure here the name(s) of your problem report folder(s): push(@folder, 'preport'); push(@folder, 'zurueck'); push(@folder, 'erledigt'); &configure(); push(@folder, @files); # Default settings: $version = 'version 1.0'; $self = $0; $self =~ s!^.*/!!; $self =~ s!\.suid$!!; # Parse today's date: ($year,$month,$day) = parse_date(`/bin/date`); unless (check_date($year,$month,$day)) { die "$self: unable to parse today's date!\n"; } # Who am I? $user = shift; ($name) = (getpwnam($user))[6]; unless ($name) { die "$self: unable to find user '$user'!\n"; } $name =~ s/^\s*//; $name =~ s/\s*$//; $name =~ s/[\t\r\n\f]/ /g; $name =~ s/ +/ /g; $name =~ s/\s*\(.*\)\s*$//; $name =~ s/^Dr[\.\s]/Dr. /; $name =~ m/\s*(\S+)\s*$/; $lastname = $1; $firstname = $`; $firstname =~ s/^\s*(Dr\.)?\s*//; $firstname =~ s/\s*$//; unless ((-t STDOUT) && (open(MORE, "| more"))) { unless (open(MORE, ">-")) { die "$self: can't open STDOUT: $!\n"; } } print MORE "\nSearching all problem reports belonging to user '$user' ($firstname $lastname)...\n\n"; $none = 1; $count = 999; # Loop through list of folders: FOLDER: for ( $i = 0; $i <= $#folder; $i++ ) { # Loop through folder: $filename = "$path/$folder[$i]"; unless (open(FOLDER, "<$filename")) { warn "$self: unable to read '$filename': $!\n"; next FOLDER; } else { $flag = 0; LINE: while ($line = ) { chop($line); if ($line =~ /^From \S/) { if ($flag) { &process_preport; } $flag = 1; $mine = 0; $subject = ''; if (($line =~ /\s$user\@/o) || ($line =~ /\b$firstname\.$lastname\@/io)) { $mine = 1; } ($yy,$mm,$dd) = parse_date($line); # parse submission date next LINE; } if ($flag) { if ($line =~ /^Subject:\s+(.+)/) { $subject = $1; } elsif ($line =~ /^Cc:\s/) { if (($line =~ /\b$user\@/o) || ($line =~ /\b$firstname[\.\s]$lastname\b/io)) { $mine = 1; } } elsif ($line =~ /^From:\s/) { if (($line =~ /\b$user\@/o) || ($line =~ /\b$firstname[\.\s]$lastname\b/io)) { $mine = 1; } } elsif ($line =~ /Vor- und Nachname:/) { if (($line =~ /\b$firstname\b/io) && ($line =~ /\b$lastname\b/io)) { $mine = 1; } } else { } } } close(FOLDER); if ($flag) { &process_preport; } } } if ($none) { print MORE "No problem report(s) found belonging to user '$user' ($firstname $lastname)!\n"; } else { foreach $item (sort { $list{$a} <=> $list{$b} } keys(%list)) { print MORE "$item\n"; } } print MORE "\n"; close(MORE); exit 0; sub process_preport { my($diff,$date,$size); $flag = 0; if ($mine) { $none = 0; if (check_date($yy,$mm,$dd)) { $diff = dates_difference($yy,$mm,$dd,$year,$month,$day); } else { $diff = ++$count; } $date = compressed_to_short(compress($yy,$mm,$dd)); $size = length($subject); if ($size != 55) { if ($size > 55) { $subject = substr($subject,0,55); } else { $subject .= ' ' x (55 - $size); } } $list{"$date | $subject ($folder[$i])"} = $diff; } } __END__