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