#!/usr/bin/perl # Show installed packages, and flag those for which an update is needed require './package-updates-lib.pl'; &ui_print_header(undef, $module_info{'desc'}, "", undef, 1, 1); &error_setup($text{'index_err'}); &ReadParse(); if ($in{'clear'}) { $in{'search'} = ''; } $has_repos = defined(&software::list_package_repos); # Start of mode tabs print &ui_tabs_start([ [ 'pkgs', $text{'index_tabpkgs'} ], [ 'sched', $text{'index_tabscheds'} ], $has_repos ? ( [ 'repos', $text{'index_tabsrepos'} ] ) : ( ) ], 'tab', $in{'tab'} || 'pkgs', 1); # See if any security updates exist $in{'mode'} ||= 'updates'; @avail = &list_for_mode($in{'mode'}, 0); ($sec) = grep { $_->{'security'} } @avail; # Show mode selector (all, updates only, updates and new) @grid = ( ); foreach $m ('current', 'updates', 'new', $sec || $in{'mode'} eq 'security' ? ( 'security' ) : ( )) { $mmsg = $text{'index_mode_'.$m}; if ($in{'mode'} eq $m) { push(@mlinks, "<b>$mmsg</b>"); } else { push(@mlinks, &ui_link("index.cgi?mode=$m&all=". &urlize($in{'all'})."&search=". &urlize($in{'search'}), $mmsg) ); } } push(@grid, $text{'index_mode'}, &ui_links_row(\@mlinks)); # Show search box push(@grid, $text{'index_search'}, &ui_textbox("search", $in{'search'}, 30)." ". &ui_submit($text{'index_searchok'})." ". &ui_submit($text{'index_clear'}, 'clear')); print &ui_tabs_start_tab("tab", "pkgs"); print &ui_form_start("index.cgi"); print &ui_hidden("mode", $in{'mode'}); print &ui_grid_table(\@grid, 2),"<p>\n"; print &ui_form_end(); # Work out what packages to show @current = &list_current(1); # Make lookup hashes foreach my $c (@current) { $current{$c->{'name'}."/".$c->{'system'}} ||= $c; } foreach my $a (@avail) { $avail{$a->{'name'}."/".$a->{'system'}} ||= $a; } # Build table $anysource = 0; $upmode = $in{'mode'} eq 'updates' || $in{'mode'} eq 'security'; foreach $p (sort { $a->{'name'} cmp $b->{'name'} } (@current, @avail)) { next if ($done{$p->{'name'},$p->{'system'}}++); # May be in both lists # Work out the status $c = $current{$p->{'name'}."/".$p->{'system'}}; $a = $avail{$p->{'name'}."/".$p->{'system'}}; if ($a && $c && (&compare_versions($a, $c) > 0 || $upmode)) { # An update is available $msg = "<b><font color=#00aa00>". &text('index_new', $a->{'version'})."</font></b>"; $need = 1; next if ($in{'mode'} eq 'security' && !$a->{'security'}); next if ($in{'mode'} ne 'updates' && $in{'mode'} ne 'current' && $in{'mode'} ne 'security'); } elsif ($a && !$c) { # Could be installed, but isn't currently next if (!&installation_candiate($a)); $msg = "<font color=#00aa00>$text{'index_caninstall'}</font>"; $need = 0; next if ($in{'mode'} ne 'new'); } elsif (!$a->{'version'} && $c->{'updateonly'}) { # No update exists, and we don't care unless there is one next; } elsif (!$a->{'version'}) { # No update exists $msg = "<font color=#ffaa00><b>". &text('index_noupdate', $c->{'version'})."</b></font>"; $need = 0; next if ($in{'mode'} ne 'current'); } else { # We have the latest $msg = &text('index_ok', $c->{'version'}); $need = 0; next if ($in{'mode'} ne 'current'); } $source = ucfirst($a->{'source'}); if ($a->{'security'}) { $source = "<font color=#ff0000>$source</font>"; } # If searching, limit to search if ($in{'search'}) { $re = $in{'search'}; $found = $p->{'desc'} =~ /\Q$re\E/i || $p->{'name'} =~ /\Q$re\E/i || $p->{'version'} =~ /\Q$re\E/i; next if (!$found); } # Add to table push(@rows, [ { 'type' => 'checkbox', 'name' => 'u', 'value' => $p->{'update'}."/".$p->{'system'}, 'checked' => $need }, &ui_link("view.cgi?mode=$in{'mode'}&name=". &urlize($p->{'name'})."&system=". &urlize($p->{'system'})."&search=". &urlize($in{'search'}), $p->{'name'}), $p->{'desc'}, $msg, $source ? ( $source ) : ( ), ]); $anysource++ if ($source); } if ($anysource) { foreach my $r (@rows) { $r->[4] ||= ""; } } if ($in{'mode'} eq 'new' && !$in{'search'}) { # Prevent display of a huge list of new packages print &text('index_manynew', scalar(@rows)),"<br>\n"; } else { # Show the packages, if any if (@rows) { print &text('index_count', scalar(@rows)),"<br>\n"; print &ui_form_start("update.cgi", "post"); print &ui_submit($in{'mode'} eq 'new' ? $text{'index_install'} : $text{'index_update'}, "ok_top" ); print &ui_submit($text{'index_refresh'}, "refresh_top"), "<br>"; } print &ui_form_columns_table( "", [ [ "ok", $in{'mode'} eq 'new' ? $text{'index_install'} : $text{'index_update'} ], [ "refresh", $text{'index_refresh'} ] ], 1, undef, [ [ "mode", $in{'mode'} ], [ "search", $in{'search'} ] ], [ "", $text{'index_name'}, $text{'index_desc'}, $text{'index_status'}, $anysource ? ( $text{'index_source'} ) : ( ), ], 100, \@rows, undef, 0, undef, $text{'index_none_'.$in{'mode'}}, 1 ); if (!@rows) { print &ui_form_start("update.cgi"); print &ui_hidden("mode", $in{'mode'}); print &ui_hidden("search", $in{'search'}); print &ui_form_end([ [ "refresh", $text{'index_refresh'} ] ]); } } print &ui_tabs_end_tab("tab", "pkgs"); # Show scheduled report form print &ui_tabs_start_tab("tab", "sched"); print $text{'index_scheddesc'},"<p>\n"; print &ui_form_start("save_sched.cgi"); print &ui_hidden("mode", $in{'mode'}); print &ui_hidden("search", $in{'search'}); print &ui_table_start($text{'index_header'}, undef, 2); $job = &find_cron_job(); if ($job) { $sched = $job->{'hours'} eq '*' ? 'h' : $job->{'days'} eq '*' && $job->{'weekdays'} eq '*' ? 'd' : $job->{'days'} eq '*' && $job->{'months'} eq '*' ? 'w' : undef; } else { $sched = "d"; } # When to run print &ui_table_row($text{'index_sched'}, &ui_radio("sched_def", $job ? 0 : 1, [ [ 1, $text{'index_sched1'} ], [ 0, $text{'index_sched0'} ] ])."\n". &ui_select("sched", $sched, [ [ 'h', $text{'index_schedh'} ], [ 'd', $text{'index_schedd'} ], [ 'w', $text{'index_schedw'} ] ])); # Send email to print &ui_table_row($text{'index_email'}, &ui_textbox("email", $config{'sched_email'}, 40)); # Install or just notify? print &ui_table_row($text{'index_action'}, &ui_radio("action", int($config{'sched_action'}), [ [ 0, $text{'index_action0'} ], [ 1, $text{'index_action1'} ], [ 2, $text{'index_action2'} ] ])); print &ui_table_end(); print &ui_form_end([ [ "save", $text{'save'} ] ]); print &ui_tabs_end_tab("tab", "sched"); if ($has_repos) { print &ui_tabs_start_tab("tab", "repos"); print $text{'index_reposdesc'},"<p>\n"; @repos = &software::list_package_repos(); if (@repos) { print &ui_form_start("save_repos.cgi", "post"); print &ui_columns_start([ "", $text{'index_reposname'}, $text{'index_reposenabled'}, $text{'index_reposurl'}, ]); foreach my $r (@repos) { print &ui_checked_columns_row([ &html_escape($r->{'name'}), $r->{'enabled'} ? "<font color=green>$text{'yes'}</font>" : "<font color=red>$text{'no'}</font>", $r->{'url'}, ], "", "d", $r->{'id'}); } print &ui_columns_end(); print &ui_form_end([ [ "disable", $text{'index_reposdisable'} ], [ "enable", $text{'index_reposenable'} ], [ "delete", $text{'index_reposdelete'} ], ]); } else { print "<b>$text{'index_reposnome'}</b><p>\n"; } # Form to add a repo print &ui_form_start("create_repo.cgi", "post"); print &ui_table_start($text{'index_repoheader'}, undef, 2); print &software::create_repo_form(); print &ui_table_end(); print &ui_form_end([ [ undef, $text{'create'} ] ]); print &ui_tabs_end_tab("tab", "repos"); } print &ui_tabs_end(); &ui_print_footer("/", $text{'index'});
Name | Type | Size | Permission | Actions |
---|---|---|---|---|
images | Folder | 0755 |
|
|
lang | Folder | 0755 |
|
|
newfeatures | Folder | 0755 |
|
|
CHANGELOG | File | 406 B | 0644 |
|
config | File | 31 B | 0644 |
|
config.info | File | 145 B | 0644 |
|
config.info.ar | File | 253 B | 0644 |
|
config.info.ca | File | 172 B | 0644 |
|
config.info.de | File | 182 B | 0644 |
|
config.info.hu | File | 0 B | 0644 |
|
config.info.it | File | 191 B | 0644 |
|
config.info.nl | File | 98 B | 0644 |
|
config.info.no | File | 93 B | 0644 |
|
config.info.pl | File | 111 B | 0644 |
|
config.info.ru | File | 186 B | 0644 |
|
create_repo.cgi | File | 332 B | 0755 |
|
index.cgi | File | 7.7 KB | 0755 |
|
install_check.pl | File | 372 B | 0755 |
|
log_parser.pl | File | 742 B | 0644 |
|
module.info | File | 272 B | 0644 |
|
module.info.af | File | 0 B | 0644 |
|
module.info.af.auto | File | 122 B | 0644 |
|
module.info.ar | File | 173 B | 0644 |
|
module.info.be | File | 0 B | 0644 |
|
module.info.be.auto | File | 221 B | 0644 |
|
module.info.bg | File | 0 B | 0644 |
|
module.info.bg.auto | File | 236 B | 0644 |
|
module.info.ca | File | 157 B | 0644 |
|
module.info.cs | File | 0 B | 0644 |
|
module.info.cs.auto | File | 150 B | 0644 |
|
module.info.da | File | 0 B | 0644 |
|
module.info.da.auto | File | 129 B | 0644 |
|
module.info.de | File | 122 B | 0644 |
|
module.info.el | File | 0 B | 0644 |
|
module.info.el.auto | File | 232 B | 0644 |
|
module.info.es | File | 0 B | 0644 |
|
module.info.es.auto | File | 160 B | 0644 |
|
module.info.eu | File | 0 B | 0644 |
|
module.info.eu.auto | File | 140 B | 0644 |
|
module.info.fa | File | 0 B | 0644 |
|
module.info.fa.auto | File | 230 B | 0644 |
|
module.info.fi | File | 0 B | 0644 |
|
module.info.fi.auto | File | 148 B | 0644 |
|
module.info.fr | File | 0 B | 0644 |
|
module.info.fr.auto | File | 167 B | 0644 |
|
module.info.he | File | 0 B | 0644 |
|
module.info.he.auto | File | 156 B | 0644 |
|
module.info.hr | File | 0 B | 0644 |
|
module.info.hr.auto | File | 135 B | 0644 |
|
module.info.hu | File | 38 B | 0644 |
|
module.info.hu.auto | File | 94 B | 0644 |
|
module.info.it | File | 159 B | 0644 |
|
module.info.ja | File | 0 B | 0644 |
|
module.info.ja.auto | File | 193 B | 0644 |
|
module.info.ko | File | 0 B | 0644 |
|
module.info.ko.auto | File | 171 B | 0644 |
|
module.info.lt | File | 0 B | 0644 |
|
module.info.lt.auto | File | 136 B | 0644 |
|
module.info.lv | File | 0 B | 0644 |
|
module.info.lv.auto | File | 154 B | 0644 |
|
module.info.ms | File | 146 B | 0644 |
|
module.info.mt | File | 0 B | 0644 |
|
module.info.mt.auto | File | 153 B | 0644 |
|
module.info.nl | File | 34 B | 0644 |
|
module.info.nl.auto | File | 82 B | 0644 |
|
module.info.no | File | 38 B | 0644 |
|
module.info.no.auto | File | 97 B | 0644 |
|
module.info.pl | File | 157 B | 0644 |
|
module.info.pt | File | 0 B | 0644 |
|
module.info.pt.auto | File | 151 B | 0644 |
|
module.info.pt_BR | File | 0 B | 0644 |
|
module.info.pt_BR.auto | File | 157 B | 0644 |
|
module.info.ro | File | 0 B | 0644 |
|
module.info.ro.auto | File | 143 B | 0644 |
|
module.info.ru | File | 0 B | 0644 |
|
module.info.ru.auto | File | 224 B | 0644 |
|
module.info.sk | File | 0 B | 0644 |
|
module.info.sk.auto | File | 151 B | 0644 |
|
module.info.sl | File | 0 B | 0644 |
|
module.info.sl.auto | File | 145 B | 0644 |
|
module.info.sv | File | 0 B | 0644 |
|
module.info.sv.auto | File | 139 B | 0644 |
|
module.info.th | File | 0 B | 0644 |
|
module.info.th.auto | File | 258 B | 0644 |
|
module.info.tr | File | 0 B | 0644 |
|
module.info.tr.auto | File | 146 B | 0644 |
|
module.info.uk | File | 0 B | 0644 |
|
module.info.uk.auto | File | 207 B | 0644 |
|
module.info.ur | File | 0 B | 0644 |
|
module.info.ur.auto | File | 214 B | 0644 |
|
module.info.vi | File | 0 B | 0644 |
|
module.info.vi.auto | File | 161 B | 0644 |
|
module.info.zh | File | 0 B | 0644 |
|
module.info.zh.auto | File | 103 B | 0644 |
|
module.info.zh_TW | File | 0 B | 0644 |
|
module.info.zh_TW.auto | File | 109 B | 0644 |
|
package-updates-lib.pl | File | 19.8 KB | 0644 |
|
save_repos.cgi | File | 1.55 KB | 0755 |
|
save_sched.cgi | File | 1.52 KB | 0755 |
|
save_view.cgi | File | 386 B | 0755 |
|
update.cgi | File | 5 KB | 0755 |
|
update.pl | File | 1.85 KB | 0755 |
|
view.cgi | File | 2.38 KB | 0755 |
|