]> git.deb.at Git - deb/packages.git/blobdiff - lib/Packages/HTML.pm
fun with module name differences between sarge and etch
[deb/packages.git] / lib / Packages / HTML.pm
index 1de010d4beea3b9c951098699343cdd4f867dd7c..e0814a715ca0d099956074fd314af418f5e9a9e5 100644 (file)
@@ -8,7 +8,7 @@ use URI::Escape;
 use HTML::Entities;
 use Locale::gettext;
 
-use Packages::CGI ();
+use Packages::CGI qw(make_url make_search_url);
 use Packages::Search qw( read_entry_simple );
 use Packages::Config qw( :all );
 
@@ -21,7 +21,7 @@ use Packages::I18N::LanguageNames;
 our @ISA = qw( Exporter );
 our @EXPORT = qw( header title trailer file_changed time_stamp
                  read_md5_hash write_md5_hash simple_menu
-                 ds_begin ds_item ds_end title marker pdesc
+                 ds_begin ds_item ds_end title marker pdesc ptags
                  pdeplegend pkg_list pmoreinfo print_deps print_src_deps );
 
 our $CHANGELOG_URL = '/changelogs';
@@ -66,6 +66,20 @@ sub pdesc {
     return $str;
 }
 
+sub ptags {
+    my ( $package, @tags ) = @_;
+    my $str = "";
+
+    $str .= "<div id=\"ptags\">\n<p>";
+    $str .= "<a href=\"http://debtags.alioth.debian.org/cgi-bin/edit.cgi?pkg=".uri_escape($package)."\">Tags</a>:\n";
+    foreach my $tag (@tags) {
+        $str .= "<a href=\"http://debtags.alioth.debian.org/cgi-bin/index.cgi?tags=".uri_escape($tag)."\">$tag</a>\n";
+    }
+    $str .= "</p>\n</div> <!-- end ptags -->\n";
+
+    return $str;
+}
+
 sub pdeplegend {
     my $str = "<table id=\"pdeplegend\" summary=\"legend\"><tr>\n";
 
@@ -82,12 +96,14 @@ sub pkg_list {
     my $suite = $opts->{suite}[0];
 
     my $str = "";
-    foreach my $p ( @$pkgs ) {
+    foreach my $p ( sort @$pkgs ) {
 
+       # we don't deal with virtual packages here because for the
+       # current uses of this function this isn't needed
        my $short_desc = (read_entry_simple( $packages, $p, $opts->{h_archives}, $suite))->[-1];
 
        if ( $short_desc ) {
-           $str .= "<dt><a href=\"$ROOT/$suite/$p\">$p</a></dt>\n".
+           $str .= "<dt><a href=\"".make_url($p,'',{source=>undef})."\">$p</a></dt>\n".
                    "\t<dd>$short_desc</dd>\n";
        } else {
            $str .= "<dt>$p</dt>\n\t<dd>"._g("Not available")."</dd>\n";
@@ -125,11 +141,8 @@ sub pmoreinfo {
     my $src_dir = $page->get_src('directory');
     if ($info{sourcedownload}) {
        my $files = $page->get_src( 'files' );
-       my $path = (@{$opts->{archive}} >1) ?
-           $suite :
-           "$suite/$opts->{archive}[0]";
        $str .= _g( "Source Package:" );
-       $str .= " <a href=\"$ROOT/$path/source/$source\">$source</a>, ".
+       $str .= " <a href=\"".make_url($source,'',{source=>'source'})."\">$source</a>, ".
            _g( "Download" ).":\n";
 
        unless (defined($files) and @$files) {
@@ -137,17 +150,10 @@ sub pmoreinfo {
        } else {
            foreach( @$files ) {
                my ($src_file_md5, $src_file_size, $src_file_name) = split /\s/o, $_;
-               for ($page->get_newest('archive')) {
-                   /security/o && do {
-                       $str .= "<a href=\"$env->{security}/$src_dir/$src_file_name\">["; last };
-                   /volatile/o && do {
-                       $str .= "<a href=\"$env->{volatile}/$src_dir/$src_file_name\">["; last };
-                   /backports/o && do {
-                       $str .= "<a href=\"$env->{backports}/$src_dir/$src_file_name\">["; last };
-                   /non-us/io && do {
-                       $str .= "<a href=\"$env->{nonus_site}/$src_dir/$src_file_name\">["; last };
-                   $str .= "<a href=\"$env->{us}/$src_dir/$src_file_name\">[";
-               }
+               # non-US hack
+               (my $server = lc $page->get_newest('archive')) =~ s/-//go;
+               $str .= sprintf("<a href=\"%s/$src_dir/$src_file_name\">[",
+                               $env->{$server}||$env->{us});
                if ($src_file_name =~ /dsc$/) {
                    $str .= "dsc";
                } else {
@@ -216,13 +222,11 @@ sub pmoreinfo {
 }
 
 sub dep_item {
-    my ( $link, $name, $info, $desc ) = @_;
-    my $post_link = '';
-    if ($link) {
-       $link = "<a href=\"$link\">";
+    my ( $suite, $name, $info, $desc ) = @_;
+    my ($link, $post_link) = ('', '');
+    if ($suite) {
+       $link = "<a href=\"".make_url($name,'',{suite=>$suite,source=>undef})."\">";
        $post_link = '</a>';
-    } else {
-       $link = '';
     }
     if ($info) {
        $info = " $info";
@@ -239,13 +243,15 @@ sub dep_item {
 } # end dep_item
 
 sub provides_string {
-    my ($path, $entry) = @_;
-    my @provided_by = split /\s/, $entry;
-    my $short_desc = "virtual package provided by ";
+    my ($suite, $entry, $also) = @_;
+    my %tmp = map { $_ => 1 } split /\s/, $entry;
+    my @provided_by = keys %tmp; # weed out duplicates
+    my $short_desc = $also ? _g("also a virtual package provided by ")
+       : _g("virtual package provided by ");
     if (@provided_by < 10) {
-       $short_desc .= join( ', ',map { "<a href=\"$path/$_\">$_</a>" } @provided_by);
+       $short_desc .= join( ', ',map { "<a href=\"".make_url($_,'',{suite=>$suite,source=>undef})."\">$_</a>" } @provided_by);
     } else {
-       $short_desc .= scalar(@provided_by)." packages";
+       $short_desc .= sprintf( _g("%s packages"), scalar(@provided_by));
     }
     return $short_desc;
 }
@@ -299,23 +305,26 @@ sub print_deps {
            my $short_desc = $entry->[-1];
            my $arch = $entry->[3];
            my $archive = $entry->[1];
+           my $p_suite = $entry->[2];
            if ( $short_desc ) {
-               my $path = $suite;
                if ( $is_old_pkgs ) {
-                   push @res_pkgs, dep_item( "$ROOT/$path/$p_name",
+                   push @res_pkgs, dep_item( $p_suite,
                                              $p_name, "$pkg_version$arch_str" );
                } elsif (defined $entry->[1]) {
                    $entries{$p_name} ||= $entry;
                    $short_desc = encode_entities( $short_desc, "<>&\"" );
-                   $short_desc .= "<br>Also, a ".provides_string( "$ROOT/$path",
-                                                          $entry->[0] )
+                   $short_desc .= "<br>".provides_string( $p_suite,
+                                                          $entry->[0],
+                                                          1 )
                        if defined $entry->[0];
-                   push @res_pkgs, dep_item( "$ROOT/$path/$p_name",
+                   push @res_pkgs, dep_item( $p_suite,
                                              $p_name, "$pkg_version$arch_str", $short_desc );
                } elsif (defined $entry->[0]) {
-                   $short_desc = provides_string( "$ROOT/$path",
+                   $short_desc = provides_string( $p_suite,
                                                   $entry->[0] );
-                   push @res_pkgs, dep_item( "$ROOT/$path/$p_name",
+                   #FIXME: we don't handle virtual packages from
+                   # the fallback suite correctly here
+                   push @res_pkgs, dep_item( $suite,
                                              $p_name, "$pkg_version$arch_str", $short_desc );
                }
            } elsif ( $is_old_pkgs ) {
@@ -535,7 +544,7 @@ sub trailer {
        "<div id=\"fineprint\" class=\"bordertop\"><p>".
        sprintf( _g( "To report a problem with the web site, e-mail <a href=\"mailto:%s\">%s</a>. For other contact information, see the Debian <a href=\"%s/contact\">contact page</a>." ), $CONTACT_MAIL, $CONTACT_MAIL, $HOME).
        "</p>\n".
-       "<p>". _g( "Last Modified: " ). "LAST_MODIFIED_DATE".
+       "<p>". _g( "Last Modified: " ). gmtime().
        "<br>\n".
        sprintf( _g( "Copyright &copy; 1997-2005 <a href=\"http://www.spi-inc.org\">SPI</a>; See <a href=\"%s/license\">license terms</a>." ), "$HOME/" )."<br>\n".
        _g( "Debian is a registered trademark of Software in the Public Interest, Inc." ).