From: Jan Provaznik <[email protected]>

Packages are now groupped by group.
---
 src/app/controllers/templates_controller.rb      |    7 +++++--
 src/app/util/repository_manager.rb               |   22 +++++++++++++++++++---
 src/app/views/templates/_metagroup_packages.haml |   16 +++++++++++-----
 src/app/views/templates/_searched_packages.haml  |    8 ++++++++
 4 files changed, 43 insertions(+), 10 deletions(-)
 create mode 100644 src/app/views/templates/_searched_packages.haml

diff --git a/src/app/controllers/templates_controller.rb 
b/src/app/controllers/templates_controller.rb
index 32523f6..f8df130 100644
--- a/src/app/controllers/templates_controller.rb
+++ b/src/app/controllers/templates_controller.rb
@@ -120,19 +120,22 @@ class TemplatesController < ApplicationController
     @metagroups = @repository_manager.metagroups
 
     if not params[:package_search].blank?
-      @metagroup_packages = 
@repository_manager.search_package(params[:package_search], params[:repository])
+      @searched_packages = 
@repository_manager.search_package(params[:package_search], params[:repository])
     elsif not @metagroup.blank?
       if @metagroup == 'Collections'
         # TODO: if we remember selected groups, this could be done much more 
simply
         @collections = 
@repository_manager.all_groups_with_tagged_selected_packages(@packages, 
params[:repository])
       else
-        @metagroup_packages = 
@repository_manager.metagroup_packages(@metagroup, params[:repository])
+        @metagroup_packages = 
@repository_manager.metagroup_packages_with_tagged_selected_packages(@metagroup,
 @packages, params[:repository])
       end
     end
     if request.xhr?
       if @metagroup_packages
         render :partial => 'metagroup_packages' and return
       end
+      if @searched_packages
+        render :partial => 'searched_packages' and return
+      end
       if @collections
         render :partial => 'collections' and return
       end
diff --git a/src/app/util/repository_manager.rb 
b/src/app/util/repository_manager.rb
index 64de179..666b669 100644
--- a/src/app/util/repository_manager.rb
+++ b/src/app/util/repository_manager.rb
@@ -92,14 +92,30 @@ class RepositoryManager
   end
 
   def metagroup_packages(category, repository = nil)
-    res = []
+    res = {}
     groups = all_groups(repository)
     metagroups[category].to_a.each do |entry|
       cat, group = entry.split(';')
       next unless c = categories[cat] and c[:groups].include?(group) and 
groups[group]
-      res += groups[group][:packages].keys
+      res[group] = {:packages => groups[group][:packages].keys}
+    end
+    res
+  end
+
+  def metagroup_packages_with_tagged_selected_packages(category, pkgs, 
repository = nil)
+    mgroups = metagroup_packages(category, repository)
+    mgroups.each_value do |group|
+      missing = false
+      pkgs.each do |p|
+        unless group[:packages].include?(p[:name])
+          missing = true
+          break
+        end
+      end
+      next if missing
+      group[:selected] = true
     end
-    res.sort.uniq
+    mgroups
   end
 
   def all_groups_with_tagged_selected_packages(pkgs, repository = nil)
diff --git a/src/app/views/templates/_metagroup_packages.haml 
b/src/app/views/templates/_metagroup_packages.haml
index f1a42ec..1ba0820 100644
--- a/src/app/views/templates/_metagroup_packages.haml
+++ b/src/app/views/templates/_metagroup_packages.haml
@@ -1,8 +1,14 @@
 %h4
-  = params[:package_search].blank? ? "#...@metagroup} Packages" : "Search 
Results for '#{params[:package_search]}'"
+  = "#...@metagroup} Packages"
 %ul.metagrouppackages
-  - @metagroup_packages.sort.each do |pkg|
+  - @metagroup_packages.keys.sort.each do |group|
     %li
-      - selected = @packages.to_a.find {|p| p[:name] == pkg}
-      = check_box_tag 'packages[]', pkg, selected, {:disabled => selected, :id 
=> "package_#{pkg}"}
-      = label_tag "package_#{pkg}", pkg
+      - selected = !...@metagroup_packages[group][:selected].nil?
+      = check_box_tag 'groups[]', group, selected, {:disabled => selected, :id 
=> "group_#{group}", :class => 'softwaregroups'}
+      = label_tag "group_#{group}", group
+      %ul
+        - @metagroup_packages[group][:packages].each do |pkg|
+          %li
+            - selected = @packages.to_a.find {|p| p[:name] == pkg}
+            = check_box_tag 'packages[]', pkg, selected, {:disabled => 
selected, :id => "package_#{group}_#{pkg}"}
+            = label_tag "package_#{group}_#{pkg}", pkg
diff --git a/src/app/views/templates/_searched_packages.haml 
b/src/app/views/templates/_searched_packages.haml
new file mode 100644
index 0000000..084bb01
--- /dev/null
+++ b/src/app/views/templates/_searched_packages.haml
@@ -0,0 +1,8 @@
+%h4
+  = "Search Results for '#{params[:package_search]}'"
+%ul.metagrouppackages
+  - @searched_packages.sort.each do |pkg|
+    %li
+      - selected = @packages.to_a.find {|p| p[:name] == pkg}
+      = check_box_tag 'packages[]', pkg, selected, {:disabled => selected, :id 
=> "package_#{pkg}"}
+      = label_tag "package_#{pkg}", pkg
-- 
1.7.2.3

_______________________________________________
deltacloud-devel mailing list
[email protected]
https://fedorahosted.org/mailman/listinfo/deltacloud-devel

Reply via email to