@@ -1,27 +1,35 | |||||
1 | # encoding: utf-8 |
|
1 | # encoding: utf-8 | |
2 | # |
|
2 | # | |
3 | # Redmine - project management software |
|
3 | # Redmine - project management software | |
4 | # Copyright (C) 2006-2014 Jean-Philippe Lang |
|
4 | # Copyright (C) 2006-2014 Jean-Philippe Lang | |
5 | # |
|
5 | # | |
6 | # This program is free software; you can redistribute it and/or |
|
6 | # This program is free software; you can redistribute it and/or | |
7 | # modify it under the terms of the GNU General Public License |
|
7 | # modify it under the terms of the GNU General Public License | |
8 | # as published by the Free Software Foundation; either version 2 |
|
8 | # as published by the Free Software Foundation; either version 2 | |
9 | # of the License, or (at your option) any later version. |
|
9 | # of the License, or (at your option) any later version. | |
10 | # |
|
10 | # | |
11 | # This program is distributed in the hope that it will be useful, |
|
11 | # This program is distributed in the hope that it will be useful, | |
12 | # but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
12 | # but WITHOUT ANY WARRANTY; without even the implied warranty of | |
13 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
13 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
14 | # GNU General Public License for more details. |
|
14 | # GNU General Public License for more details. | |
15 | # |
|
15 | # | |
16 | # You should have received a copy of the GNU General Public License |
|
16 | # You should have received a copy of the GNU General Public License | |
17 | # along with this program; if not, write to the Free Software |
|
17 | # along with this program; if not, write to the Free Software | |
18 | # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. |
|
18 | # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | |
19 |
|
19 | |||
20 | module AdminHelper |
|
20 | module AdminHelper | |
21 | def project_status_options_for_select(selected) |
|
21 | def project_status_options_for_select(selected) | |
22 | options_for_select([[l(:label_all), ''], |
|
22 | options_for_select([[l(:label_all), ''], | |
23 | [l(:project_status_active), '1'], |
|
23 | [l(:project_status_active), '1'], | |
24 | [l(:project_status_closed), '5'], |
|
24 | [l(:project_status_closed), '5'], | |
25 | [l(:project_status_archived), '9']], selected.to_s) |
|
25 | [l(:project_status_archived), '9']], selected.to_s) | |
26 | end |
|
26 | end | |
|
27 | ||||
|
28 | def plugin_data_for_updates(plugins) | |||
|
29 | data = {"v" => Redmine::VERSION.to_s, "p" => {}} | |||
|
30 | plugins.each do |plugin| | |||
|
31 | data["p"].merge! plugin.id => {"v" => plugin.version, "n" => plugin.name, "a" => plugin.author} | |||
|
32 | end | |||
|
33 | data | |||
|
34 | end | |||
27 | end |
|
35 | end |
@@ -1,19 +1,63 | |||||
1 | <%= title l(:label_plugins) %> |
|
1 | <%= title l(:label_plugins) %> | |
2 |
|
2 | |||
3 | <% if @plugins.any? %> |
|
3 | <% if @plugins.any? %> | |
4 | <table class="list plugins"> |
|
4 | <table class="list plugins"> | |
5 | <% @plugins.each do |plugin| %> |
|
5 | <% @plugins.each do |plugin| %> | |
6 | <tr id="plugin-<%= plugin.id %>" class="<%= cycle('odd', 'even') %>"> |
|
6 | <tr id="plugin-<%= plugin.id %>" class="<%= cycle('odd', 'even') %>"> | |
7 | <td class="name"><span class="name"><%=h plugin.name %></span> |
|
7 | <td class="name"><span class="name"><%=h plugin.name %></span> | |
8 | <%= content_tag('span', h(plugin.description), :class => 'description') unless plugin.description.blank? %> |
|
8 | <%= content_tag('span', h(plugin.description), :class => 'description') unless plugin.description.blank? %> | |
9 | <%= content_tag('span', link_to(h(plugin.url), plugin.url), :class => 'url') unless plugin.url.blank? %> |
|
9 | <%= content_tag('span', link_to(h(plugin.url), plugin.url), :class => 'url') unless plugin.url.blank? %> | |
10 | </td> |
|
10 | </td> | |
11 | <td class="author"><%= plugin.author_url.blank? ? h(plugin.author) : link_to(h(plugin.author), plugin.author_url) %></td> |
|
11 | <td class="author"><%= plugin.author_url.blank? ? h(plugin.author) : link_to(h(plugin.author), plugin.author_url) %></td> | |
12 |
<td class="version"><%= |
|
12 | <td class="version"><span class="icon"><%= plugin.version %></span></td> | |
13 | <td class="configure"><%= link_to(l(:button_configure), plugin_settings_path(plugin)) if plugin.configurable? %></td> |
|
13 | <td class="configure"><%= link_to(l(:button_configure), plugin_settings_path(plugin)) if plugin.configurable? %></td> | |
14 | </tr> |
|
14 | </tr> | |
15 | <% end %> |
|
15 | <% end %> | |
16 | </table> |
|
16 | </table> | |
|
17 | <p><a href="#" id="check-for-updates">Check for updates</a> | |||
17 | <% else %> |
|
18 | <% else %> | |
18 | <p class="nodata"><%= l(:label_no_data) %></p> |
|
19 | <p class="nodata"><%= l(:label_no_data) %></p> | |
19 | <% end %> |
|
20 | <% end %> | |
|
21 | ||||
|
22 | <%= javascript_tag do %> | |||
|
23 | $(document).ready(function(){ | |||
|
24 | $("#check-for-updates").click(function(e){ | |||
|
25 | e.preventDefault(); | |||
|
26 | $.ajax({ | |||
|
27 | dataType: "jsonp", | |||
|
28 | url: "http://www.redmine.org/plugins/check_updates", | |||
|
29 | data: <%= raw_json plugin_data_for_updates(@plugins) %>, | |||
|
30 | timeout: 3000, | |||
|
31 | beforeSend: function(){ | |||
|
32 | $('#ajax-indicator').show(); | |||
|
33 | }, | |||
|
34 | success: function(data){ | |||
|
35 | $('#ajax-indicator').hide(); | |||
|
36 | $("table.plugins td.version span").addClass("unknown"); | |||
|
37 | $.each(data, function(plugin_id, plugin_data){ | |||
|
38 | var s = $("tr#plugin-"+plugin_id+" td.version span"); | |||
|
39 | s.removeClass("icon-checked icon-warning unknown"); | |||
|
40 | if (plugin_data.url) { | |||
|
41 | if (s.parent("a").length>0) { | |||
|
42 | s.unwrap(); | |||
|
43 | } | |||
|
44 | s.addClass("found"); | |||
|
45 | s.wrap($("<a></a>").attr("href", plugin_data.url).attr("target", "_blank")); | |||
|
46 | } | |||
|
47 | if (plugin_data.c == s.text()) { | |||
|
48 | s.addClass("icon-checked"); | |||
|
49 | } else if (plugin_data.c) { | |||
|
50 | s.addClass("icon-warning"); | |||
|
51 | s.attr("title", "Latest compatible version: "+plugin_data.c); | |||
|
52 | } | |||
|
53 | }); | |||
|
54 | $("table.plugins td.version span.unknown").addClass("icon-help").attr("title", "Unknown plugin"); | |||
|
55 | }, | |||
|
56 | error: function(){ | |||
|
57 | $('#ajax-indicator').hide(); | |||
|
58 | alert("Unable to retrieve plugin informations from www.redmine.org"); | |||
|
59 | } | |||
|
60 | }); | |||
|
61 | }); | |||
|
62 | }); | |||
|
63 | <% end if @plugins.any? %> |
General Comments 0
You need to be logged in to leave comments.
Login now