]> source.dussan.org Git - redmine.git/commitdiff
Adds "Check for updates" for installed plugins (#3177).
authorJean-Philippe Lang <jp_lang@yahoo.fr>
Sat, 5 Apr 2014 14:00:19 +0000 (14:00 +0000)
committerJean-Philippe Lang <jp_lang@yahoo.fr>
Sat, 5 Apr 2014 14:00:19 +0000 (14:00 +0000)
git-svn-id: http://svn.redmine.org/redmine/trunk@13042 e93f8b46-1217-0410-a6f0-8f06a7374b81

app/helpers/admin_helper.rb
app/views/admin/plugins.html.erb

index fa487a2f6524f485c001a2060c76bc2eb7845e70..b5dc67982fded6188010ea2ce8bf2b5cc10b979b 100644 (file)
@@ -24,4 +24,12 @@ module AdminHelper
                         [l(:project_status_closed), '5'],
                         [l(:project_status_archived), '9']], selected.to_s)
   end
+
+  def plugin_data_for_updates(plugins)
+    data = {"v" => Redmine::VERSION.to_s, "p" => {}}
+    plugins.each do |plugin|
+      data["p"].merge! plugin.id => {"v" => plugin.version, "n" => plugin.name, "a" => plugin.author}
+    end
+    data
+  end
 end
index 7cd4fe76389c22a9ae9c837faed6306cf8a0ad7a..3c708544cbbb5d35ad1e9880515eadcc37ca5e48 100644 (file)
@@ -9,11 +9,55 @@
             <%= content_tag('span', link_to(h(plugin.url), plugin.url), :class => 'url') unless plugin.url.blank? %>
         </td>
         <td class="author"><%= plugin.author_url.blank? ? h(plugin.author) : link_to(h(plugin.author), plugin.author_url) %></td>
-        <td class="version"><%=h plugin.version %></td>
+        <td class="version"><span class="icon"><%= plugin.version %></span></td>
         <td class="configure"><%= link_to(l(:button_configure), plugin_settings_path(plugin)) if plugin.configurable? %></td>
         </tr>
     <% end %>
 </table>
+<p><a href="#" id="check-for-updates">Check for updates</a>
 <% else %>
 <p class="nodata"><%= l(:label_no_data) %></p>
 <% end %>
+
+<%= javascript_tag do %>
+$(document).ready(function(){
+  $("#check-for-updates").click(function(e){
+    e.preventDefault();
+    $.ajax({
+      dataType: "jsonp",
+      url: "http://www.redmine.org/plugins/check_updates",
+      data: <%= raw_json plugin_data_for_updates(@plugins) %>,
+      timeout: 3000,
+      beforeSend: function(){
+        $('#ajax-indicator').show();
+      },
+      success: function(data){
+        $('#ajax-indicator').hide();
+        $("table.plugins td.version span").addClass("unknown");
+        $.each(data, function(plugin_id, plugin_data){
+          var s = $("tr#plugin-"+plugin_id+" td.version span");
+          s.removeClass("icon-checked icon-warning unknown");
+          if (plugin_data.url) {
+            if (s.parent("a").length>0) {
+              s.unwrap();
+            }
+            s.addClass("found");
+            s.wrap($("<a></a>").attr("href", plugin_data.url).attr("target", "_blank"));
+          }
+          if (plugin_data.c == s.text()) {
+            s.addClass("icon-checked");
+          } else if (plugin_data.c) {
+            s.addClass("icon-warning");
+            s.attr("title", "Latest compatible version: "+plugin_data.c);
+          }
+        });
+        $("table.plugins td.version span.unknown").addClass("icon-help").attr("title", "Unknown plugin");
+      },
+      error: function(){
+        $('#ajax-indicator').hide();
+        alert("Unable to retrieve plugin informations from www.redmine.org");
+      }
+    });
+  });
+});
+<% end if @plugins.any? %>