Upgrade to 4.0.8 with mod of ExternalAuth + absolute paths to ticket-menu.
[usit-rt.git] / lib / RT / Pod / HTMLBatch.pm
CommitLineData
dab09ea8
MKG
1use strict;
2use warnings;
3
4package RT::Pod::HTMLBatch;
5use base 'Pod::Simple::HTMLBatch';
6
7use List::MoreUtils qw/all/;
8
9use RT::Pod::Search;
10use RT::Pod::HTML;
11
12sub new {
13 my $self = shift->SUPER::new(@_);
14 $self->verbose(0);
15
16 # Per-page output options
17 $self->css_flurry(0); # No CSS
18 $self->javascript_flurry(0); # No JS
19 $self->no_contents_links(1); # No header/footer "Back to contents" links
20
21 # TOC options
22 $self->index(1); # Write a per-page TOC
23 $self->contents_file("index.html"); # Write a global TOC
24
25 $self->html_render_class('RT::Pod::HTML');
26 $self->search_class('RT::Pod::Search');
27
28 return $self;
29}
30
31sub classify {
32 my $self = shift;
33 my %info = (@_);
34
35 my $is_install_doc = sub {
36 my %page = @_;
37 local $_ = $page{name};
38 return 1 if /^(README|UPGRADING)/;
39 return 1 if $_ eq "RT_Config";
40 return 1 if $_ eq "web_deployment";
41 return 1 if $page{infile} =~ m{^configure(\.ac)?$};
42 return 0;
43 };
44
45 my $section = $info{infile} =~ m{/plugins/([^/]+)} ? "05 Extension: $1" :
46 $info{infile} =~ m{/local/} ? '04 Local Documenation' :
47 $is_install_doc->(%info) ? '00 Install and Upgrade '.
48 'Documentation' :
49 $info{infile} =~ m{/(docs|etc)/} ? '01 User Documentation' :
50 $info{infile} =~ m{/bin/} ? '02 Utilities (bin)' :
51 $info{infile} =~ m{/sbin/} ? '03 Utilities (sbin)' :
52 $info{name} =~ /^RT::Action/ ? '08 Actions' :
53 $info{name} =~ /^RT::Condition/ ? '09 Conditions' :
54 $info{name} =~ /^RT(::|$)/ ? '07 Developer Documentation' :
55 $info{infile} =~ m{/devel/tools/} ? '20 Utilities (devel/tools)' :
56 '06 Miscellaneous' ;
57
58 if ($info{infile} =~ m{/(docs|etc)/}) {
59 $info{name} =~ s/_/ /g;
60 $info{name} = join "/", map { ucfirst } split /::/, $info{name};
61 }
62
63 return ($info{name}, $section);
64}
65
66sub write_contents_file {
67 my ($self, $to) = @_;
68 return unless $self->contents_file;
69
70 my $file = join "/", $to, $self->contents_file;
71 open my $index, ">", $file
72 or warn "Unable to open index file '$file': $!\n", return;
73
74 my $pages = $self->_contents;
75 return unless @$pages;
76
77 # Classify
78 my %toc;
79 for my $page (@$pages) {
80 my ($name, $infile, $outfile, $pieces) = @$page;
81
82 my ($title, $section) = $self->classify(
83 name => $name,
84 infile => $infile,
85 );
86
87 (my $path = $outfile) =~ s{^\Q$to\E/?}{};
88
89 push @{ $toc{$section} }, {
90 name => $title,
91 path => $path,
92 };
93 }
94
95 # Write out index
96 print $index "<dl class='superindex'>\n";
97
98 for my $key (sort keys %toc) {
99 next unless @{ $toc{$key} };
100
101 (my $section = $key) =~ s/^\d+ //;
102 print $index "<dt>", esc($section), "</dt>\n";
103 print $index "<dd>\n";
104
105 my @sorted = sort {
106 my @names = map { $_->{name} } $a, $b;
107
108 # Sort just the upgrading docs descending within everything else
109 @names = reverse @names
110 if all { /^UPGRADING-/ } @names;
111
112 $names[0] cmp $names[1]
113 } @{ $toc{$key} };
114
115 for my $page (@sorted) {
116 print $index " <a href='", esc($page->{path}), "'>",
117 esc($page->{name}),
118 "</a><br>\n";
119 }
120 print $index "</dd>\n";
121 }
122 print $index '</dl>';
123
124 close $index;
125}
126
127sub esc {
128 Pod::Simple::HTMLBatch::esc(@_);
129}
130
1311;