diff options
-rw-r--r-- | Bugzilla/Config/Core.pm | 6 | ||||
-rw-r--r-- | Bugzilla/Update.pm | 30 | ||||
-rw-r--r-- | template/en/default/admin/params/core.html.tmpl | 5 | ||||
-rw-r--r-- | template/en/default/index.html.tmpl | 8 |
4 files changed, 44 insertions, 5 deletions
diff --git a/Bugzilla/Config/Core.pm b/Bugzilla/Config/Core.pm index 33eb46ac5..a0aca9c9b 100644 --- a/Bugzilla/Config/Core.pm +++ b/Bugzilla/Config/Core.pm @@ -114,6 +114,12 @@ sub get_param_list { }, { + name => 'proxy_url', + type => 't', + default => '' + }, + + { name => 'upgrade_notification', type => 's', choices => ['development_snapshot', 'latest_stable_release', diff --git a/Bugzilla/Update.pm b/Bugzilla/Update.pm index e5d4f86f9..596290ab9 100644 --- a/Bugzilla/Update.pm +++ b/Bugzilla/Update.pm @@ -46,7 +46,9 @@ sub get_notifications { $can_alter = utime(undef, undef, $local_file); } if ($can_alter) { - _synchronize_data(); + my $error = _synchronize_data(); + # If an error is returned, leave now. + return $error if $error; } else { return {'error' => 'no_update', 'xml_file' => $local_file}; @@ -130,14 +132,22 @@ sub get_notifications { sub _synchronize_data { eval("require LWP::UserAgent"); - return if $@; + return {'error' => 'missing_package', 'package' => 'LWP::UserAgent'} if $@; my $local_file = bz_locations()->{'datadir'} . LOCAL_FILE; my $ua = LWP::UserAgent->new(); $ua->timeout(TIMEOUT); $ua->protocols_allowed(['http', 'https']); - $ua->env_proxy; + # If the URL of the proxy is given, use it, else get this information + # from the environment variable. + my $proxy_url = Bugzilla->params->{'proxy_url'}; + if ($proxy_url) { + $ua->proxy(['http', 'https'], $proxy_url); + } + else { + $ua->env_proxy; + } $ua->mirror(REMOTE_FILE, $local_file); # $ua->mirror() forces the modification time of the local XML file @@ -145,7 +155,19 @@ sub _synchronize_data { # So we have to update it manually to reflect that a newer version # of the file has effectively been requested. This will avoid # any new download for the next TIME_INTERVAL. - utime(undef, undef, $local_file); + if (-e $local_file) { + # Try to alter its last modification time. + my $can_alter = utime(undef, undef, $local_file); + # This error should never happen. + $can_alter || return {'error' => 'no_update', 'xml_file' => $local_file}; + } + else { + # We have been unable to download the file. + return {'error' => 'cannot_download', 'xml_file' => $local_file}; + } + + # Everything went well. + return 0; } sub _compare_versions { diff --git a/template/en/default/admin/params/core.html.tmpl b/template/en/default/admin/params/core.html.tmpl index 2ab6856a8..9ad312cfb 100644 --- a/template/en/default/admin/params/core.html.tmpl +++ b/template/en/default/admin/params/core.html.tmpl @@ -89,6 +89,11 @@ "centered text, use <em>style=\"text-align: " _ "center;\"</em>.", + proxy_url => "$terms.Bugzilla may have to access the web to get notifications about new " _ + "releases, see the <tt>upgrade_notification</tt> parameter. In case you are " _ + "behind a proxy, it may be necessary to enter its URL if the web server " _ + "group cannot access the HTTP_PROXY environment variable.", + upgrade_notification => "<p>$terms.Bugzilla can inform you when a new release is available. " _ "The notification will appear on the $terms.Bugzilla homepage, " _ "for administrators only.</p>" _ diff --git a/template/en/default/index.html.tmpl b/template/en/default/index.html.tmpl index a96f2b15e..d7c74e188 100644 --- a/template/en/default/index.html.tmpl +++ b/template/en/default/index.html.tmpl @@ -75,12 +75,18 @@ function addSidebar() { <p class="notice">This message is only shown to logged in users with admin privs. You can configure this notification from the <a href="editparams.cgi?section=core#upgrade_notification">Parameters</a> page.</p> + [% ELSIF release.error == "missing_package" %] + <p>Missing package '[% release.package FILTER html %]'. This package is required to + <a href="editparams.cgi?section=core#upgrade_notification">notify you about new releases</a>.</p> + [% ELSIF release.error == "cannot_download" %] + <p>The local XML file '[% release.xml_file FILTER html %]' cannot be created. + Please make sure the web server can write in this directory.</p> [% ELSIF release.error == "no_update" %] <p>The local XML file '[% release.xml_file FILTER html %]' cannot be updated. Please make sure the web server can edit this file.</p> [% ELSIF release.error == "no_access" %] <p>The local XML file '[% release.xml_file FILTER html %]' cannot be read. - Please make sure this file exists and has the correct rights set on it.</p> + Please make sure this file has the correct rights set on it.</p> [% ELSIF release.error == "corrupted" %] <p>The local XML file '[% release.xml_file FILTER html %]' has an invalid XML format. Please delete it and try accessing this page again.</p> |