1#!/usr/local/bin/perl
2# index.cgi
3# Display installed perl modules and a form for installing new ones
4
5require './cpan-lib.pl';
6$ver = &get_nice_perl_version();
7&ui_print_header(undef, $text{'index_title'}, "", undef, 1, 1, 0,
8		 undef, undef, undef, &text('index_pversion', $ver));
9&ReadParse();
10
11# Check if Perl is installed from a global zone
12if (&shared_perl_root()) {
13	print "<b>$text{'index_ezone'}</b><p>\n";
14	&ui_print_footer("/", $text{'index'});
15	exit;
16	}
17$formno = 0;
18
19# Start tabs
20@mods = &list_perl_modules();
21@tabs = (
22	  [ 'install', $text{'index_tabinstall'}, 'index.cgi?mode=install' ],
23	  [ 'mods', $text{'index_tabmods'}, 'index.cgi?mode=mods' ],
24	  [ 'suggest', $text{'index_tabsuggest'}, 'index.cgi?mode=suggest' ],
25	);
26$in{'mode'} ||= 'install';
27print &ui_tabs_start(\@tabs, 'mode', $in{'mode'}, 1);
28
29# Display install form
30print &ui_tabs_start_tab('mode', 'install');
31print "$text{'index_installmsg'}<p>\n";
32print &ui_form_start("download.cgi", "form-data");
33
34# Work out of packages should be refreshed
35@st = stat($packages_file);
36if (@st) {
37	$now = time();
38	$refreshopt = "<br>".&ui_checkbox("refresh", 1, $text{'index_refresh'},
39			$st[9]+$config{'refresh_days'}*24*60*60 < $now);
40	}
41if ($config{'incyum'} && &can_list_packaged_modules()) {
42	$cpanopt = "<br>".&ui_checkbox("forcecpan", 1,
43				       $text{'index_forcecpan'}, 0);
44	}
45
46@opts = ( [ 3, $text{'index_cpan'},
47	    &ui_textbox("cpan", undef, 50)." ".
48	    &ui_button("...", undef, 0, "onClick='window.ifield = document.forms[$formno].cpan; chooser = window.open(\"cpan.cgi\", \"chooser\", \"toolbar=no,menubar=no,scrollbars=yes,width=800,height=500\"); chooser.ifield = window.ifield;'").
49	    $refreshopt.$cpanopt ],
50	  [ 0, $text{'index_local'},
51	    &ui_textbox("local", undef, 50)." ".
52	    &file_chooser_button("local", 0) ],
53	  [ 1, $text{'index_uploaded'},
54	    &ui_upload("upload", 50) ],
55	  [ 2, $text{'index_ftp'},
56	    &ui_textbox("url", undef, 50) ]
57	 );
58print &ui_radio_table("source", 3, \@opts);
59print &ui_form_end([ [ undef, $text{'index_installok'} ] ]);
60print &ui_tabs_end_tab();
61
62# Display perl modules
63print &ui_tabs_start_tab('mode', 'mods');
64if (@mods) {
65	print &ui_form_start("uninstall_mods.cgi", "post");
66	print &select_all_link("d", 1),"\n";
67	print &select_invert_link("d", 1),"<br>\n";
68	@tds = ( "width=5", undef, undef, undef, undef, "nowrap" );
69	print &ui_columns_start([ "",
70				  $text{'index_name'},
71				  $text{'index_sub'},
72				  $text{'index_desc'},
73				  $text{'index_ver'},
74				  $text{'index_date'} ], 100, 0, \@tds);
75	foreach $m (sort { lc($a->{'mods'}->[$a->{'master'}]) cmp
76			   lc($b->{'mods'}->[$b->{'master'}]) } @mods) {
77		local $mi = $m->{'master'};
78		local @cols;
79		local $master = $m->{'mods'}->[$mi];
80		local $name = &html_escape($master);
81		if ($m->{'pkg'}) {
82			$name = "<b>$name</b>";
83			}
84		push(@cols, "<a href='edit_mod.cgi?idx=$m->{'index'}&".
85			    "midx=$mi&name=$mod->{'name'}'>$name</a>");
86		push(@cols, @{$m->{'mods'}} - 1);
87		local ($desc, $ver) = &module_desc($m, $mi);
88		push(@cols, &html_escape($desc));
89		push(@cols, $ver);
90		push(@cols, &make_date($m->{'time'}));
91		print &ui_checked_columns_row(\@cols, \@tds, "d", $m->{'name'});
92		}
93	print &ui_columns_end();
94	print &select_all_link("d", 1),"\n";
95	print &select_invert_link("d", 1),"<br>\n";
96	print &ui_form_end([ [ "delete", $text{'index_delete'} ],
97			     [ "upgrade", $text{'index_upgrade'} ] ]);
98	$formno++;
99	}
100else {
101	print "<b>$text{'index_none'}</b><p>\n";
102	}
103print &ui_tabs_end_tab();
104
105# Show button to install recommended Perl modules
106print &ui_tabs_start_tab('mode', 'suggest');
107@allrecs = &get_recommended_modules();
108@recs = grep { eval "use $_->[0]"; $@ } @allrecs;
109if (@recs) {
110	print &ui_form_start("download.cgi");
111	print &ui_hidden("source", 3),"\n";
112	print "$text{'index_recs'}<p>\n";
113	print &ui_multi_select("cpan",
114		 [ map { [ $_->[0],
115			   &text('index_user', $_->[0], $_->[1]->{'desc'}) ] }
116		       @recs ],
117		 [ map { [ $_->[0],
118			   &text('index_user', $_->[0], $_->[1]->{'desc'}) ] }
119		       @recs ],
120		 20, 1, 0,
121		 $text{'index_allmods2'}, $text{'index_wantmods'}, 300),"<br>\n";
122	print &ui_submit($text{'index_recsok'});
123	print &ui_form_end();
124	}
125elsif (@allrecs) {
126	print &text('index_recsgot',"<tt>".join(" ", map { $_->[0] } @allrecs)."</tt>"),"<p>\n";
127	}
128print &ui_tabs_end_tab();
129
130print &ui_tabs_end(1);
131
132&ui_print_footer("/", $text{'index'});
133
134