Skip to content

Commit

Permalink
Merge pull request Katello#1837 from bbuckingham/fork-content_view_gr…
Browse files Browse the repository at this point in the history
…oups

system groups - UI - allow user to change the env/view for systems in a group
  • Loading branch information
bbuckingham committed Apr 3, 2013
2 parents ba0eb5b + e036360 commit 7af81a5
Show file tree
Hide file tree
Showing 22 changed files with 427 additions and 104 deletions.
15 changes: 0 additions & 15 deletions src/app/controllers/activation_keys_controller.rb
Expand Up @@ -183,15 +183,6 @@ def new
setup_environment_selector(current_organization, accessible_envs) setup_environment_selector(current_organization, accessible_envs)
@environment = first_env_in_path(accessible_envs) @environment = first_env_in_path(accessible_envs)


@content_view_labels = [[no_content_view, '']]
if @environment
@content_view_labels += ContentView.readable(@organization).non_default.
in_environment(@environment).collect {|cv| [cv.name, cv.id]}
else
@content_view_labels = []
end
@selected_content_view = no_content_view

render :partial => "new", :locals => {:activation_key => activation_key, render :partial => "new", :locals => {:activation_key => activation_key,
:accessible_envs => accessible_envs} :accessible_envs => accessible_envs}
end end
Expand All @@ -201,18 +192,12 @@ def edit
accessible_envs = current_organization.environments accessible_envs = current_organization.environments
setup_environment_selector(current_organization, accessible_envs) setup_environment_selector(current_organization, accessible_envs)


content_view_labels = [[no_content_view, '']]
content_view_labels += ContentView.readable(@organization).non_default.
in_environment(@activation_key.environment).collect {|cv| [cv.name, cv.id]}
selected_content_view = @activation_key.content_view.nil? ? no_content_view : @activation_key.content_view_id
products = @activation_key.content_view ? @activation_key.content_view.products(@environment) : @environment.products products = @activation_key.content_view ? @activation_key.content_view.products(@environment) : @environment.products


render :partial => "edit", :locals => {:activation_key => @activation_key, render :partial => "edit", :locals => {:activation_key => @activation_key,
:editable => ActivationKey.manageable?(current_organization), :editable => ActivationKey.manageable?(current_organization),
:name => controller_display_name, :name => controller_display_name,
:accessible_envs => accessible_envs, :accessible_envs => accessible_envs,
:content_view_labels => content_view_labels,
:selected_content_view => selected_content_view,
:products => products :products => products
} }
end end
Expand Down
134 changes: 82 additions & 52 deletions src/app/controllers/system_groups_controller.rb
Expand Up @@ -12,34 +12,38 @@


class SystemGroupsController < ApplicationController class SystemGroupsController < ApplicationController


before_filter :panel_options, :only=>[:index, :items, :create, :copy] before_filter :panel_options, :only => [:index, :items, :create, :copy]
before_filter :find_group, :only=>[:edit, :update, :destroy, :destroy_systems, :systems, before_filter :find_group, :only => [:edit, :update, :destroy, :destroy_systems, :systems,
:show, :add_systems, :remove_systems, :copy] :show, :add_systems, :remove_systems, :edit_systems,
:update_systems, :copy]


before_filter :authorize before_filter :authorize
def rules def rules
any_readable = lambda{current_organization && SystemGroup.any_readable?(current_organization)} any_readable = lambda {current_organization && SystemGroup.any_readable?(current_organization)}
read_perm = lambda{@group.readable?} read_perm = lambda {@group.readable?}
edit_perm = lambda{@group.editable?} edit_perm = lambda {@group.editable?}
create_perm = lambda{SystemGroup.creatable?(current_organization)} create_perm = lambda {SystemGroup.creatable?(current_organization)}
destroy_perm = lambda{@group.deletable?} destroy_perm = lambda {@group.deletable?}
destroy_systems_perm = lambda{@group.systems_deletable?} destroy_systems_perm = lambda {@group.systems_deletable?}
edit_systems_perm = lambda {@group.systems_editable?}
{ {
:index=>any_readable, :index => any_readable,
:items=>any_readable, :items => any_readable,
:new => create_perm, :new => create_perm,
:create=>create_perm, :create => create_perm,
:copy=>create_perm, :copy => create_perm,
:edit=>read_perm, :edit => read_perm,
:systems => read_perm, :systems => read_perm,
:update=>edit_perm, :update => edit_perm,
:destroy=>destroy_perm, :destroy => destroy_perm,
:destroy_systems=>destroy_systems_perm, :destroy_systems => destroy_systems_perm,
:show=>read_perm, :show => read_perm,
:auto_complete=>any_readable, :auto_complete => any_readable,
:add_systems=> edit_perm, :add_systems => edit_perm,
:remove_systems=>edit_perm, :remove_systems => edit_perm,
:validate_name=>any_readable :edit_systems => edit_systems_perm,
:update_systems => edit_systems_perm,
:validate_name => any_readable
} }
end end


Expand All @@ -48,7 +52,8 @@ def param_rules
:create => {:system_group => [:name, :description, :max_systems]}, :create => {:system_group => [:name, :description, :max_systems]},
:update => {:system_group => [:name, :description, :max_systems]}, :update => {:system_group => [:name, :description, :max_systems]},
:add_systems => [:system_ids, :id], :add_systems => [:system_ids, :id],
:remove_systems => [:system_ids, :id] :remove_systems => [:system_ids, :id],
:update_systems => {:system_group => [:environment_id, :content_view_id]}
} }
end end


Expand All @@ -66,15 +71,15 @@ def new
end end


def create def create
@group = SystemGroup.create!(params[:system_group].merge({:organization_id=>current_organization.id})) @group = SystemGroup.create!(params[:system_group].merge({:organization_id => current_organization.id}))
notify.success _("System Group %s created successfully.") % @group.name notify.success _("System Group %s created successfully.") % @group.name
if !search_validate(SystemGroup, @group.id, params[:search]) if !search_validate(SystemGroup, @group.id, params[:search])
notify.message _("'%s' did not meet the current search criteria and is not being shown.") % @group.name notify.message _("'%s' did not meet the current search criteria and is not being shown.") % @group.name
render :json => { :no_match => true } render :json => { :no_match => true }
else else
respond_to do |format| respond_to do |format|
format.html {render :partial => "system_groups/list_group", :locals=>{:item=>@group, :accessor=>"id", format.html {render :partial => "system_groups/list_group", :locals => {:item => @group, :accessor => "id",
:name=>controller_display_name}} :name => controller_display_name}}
format.json {render :json => @group} format.json {render :json => @group}
end end
end end
Expand All @@ -93,17 +98,18 @@ def copy


notify.success _("System Group %{new_group} created successfully as a copy of system group %{group}.") % {:new_group => new_group.name, :group => @group.name} notify.success _("System Group %{new_group} created successfully as a copy of system group %{group}.") % {:new_group => new_group.name, :group => @group.name}


render :partial => "system_groups/list_group", :locals=>{:item=>new_group, :accessor=>"id", :name=>controller_display_name} render :partial => "system_groups/list_group", :locals=> {:item => new_group, :accessor => "id",
:name => controller_display_name}
end end


def edit def edit
render :partial => "edit", :locals => {:filter => @group, :name=>controller_display_name, render :partial => "edit", :locals => {:filter => @group, :name => controller_display_name,
:editable=>@group.editable? :editable => @group.editable?
} }
end end


def show def show
render :partial => "system_groups/list_group", :locals=>{:item=>@group, :accessor=>"id", :name=>controller_display_name} render :partial => "system_groups/list_group", :locals => {:item => @group, :accessor => "id", :name => controller_display_name}
end end


def update def update
Expand All @@ -128,13 +134,13 @@ def update
:asynchronous => false :asynchronous => false
end end


render :text=>to_ret render :text => to_ret
end end


def destroy def destroy
@group.destroy @group.destroy
notify.success _("System Group %s deleted.") % @group.name notify.success _("System Group %s deleted.") % @group.name
render :partial => "common/list_remove", :locals => {:id=>params[:id], :name=>controller_display_name} render :partial => "common/list_remove", :locals => {:id => params[:id], :name => controller_display_name}
end end


def destroy_systems def destroy_systems
Expand All @@ -149,14 +155,15 @@ def destroy_systems
notify.success _("Deleted System Group %{group} and it's %{count} systems.") % {:group => @group.name, :count => system_names.length.to_s}, notify.success _("Deleted System Group %{group} and it's %{count} systems.") % {:group => @group.name, :count => system_names.length.to_s},
:details => system_names.join("\n") :details => system_names.join("\n")


render :partial => "common/list_remove.js", :locals => {:id=>params[:id], :name=>controller_display_name} render :partial => "common/list_remove.js", :locals => {:id => params[:id], :name => controller_display_name}
end end


def items def items
ids = SystemGroup.readable(current_organization).collect{|s| s.id} ids = SystemGroup.readable(current_organization).collect{|s| s.id}


render_panel_direct(SystemGroup, @panel_options, params[:search], params[:offset], [:name_sort, :asc], render_panel_direct(SystemGroup, @panel_options, params[:search], params[:offset], [:name_sort, :asc],
{:default_field => :name, :load=>true, :filter=>[{:id=>ids},{:organization_id=>[current_organization.id]}]}) {:default_field => :name, :load => true, :filter => [{:id => ids},
{:organization_id => [current_organization.id]}]})
end end


def panel_options def panel_options
Expand All @@ -166,43 +173,66 @@ def panel_options
:titles => [_('Name')], :titles => [_('Name')],
:create => _('System Group'), :create => _('System Group'),
:name => controller_display_name, :name => controller_display_name,
:ajax_scroll=>items_system_groups_path(), :ajax_scroll => items_system_groups_path(),
:enable_create=> SystemGroup.creatable?(current_organization), :enable_create => SystemGroup.creatable?(current_organization),
:initial_action=>:systems, :initial_action =>:systems,
:list_partial => 'system_groups/list_groups', :list_partial => 'system_groups/list_groups',
:ajax_load=>true, :ajax_load => true,
:search_class=>SystemGroup :search_class => SystemGroup
} }
end end


def systems def systems
@system_joins = @group.system_system_groups.sort_by{|a| a.system.name} @system_joins = @group.system_system_groups.sort_by{|a| a.system.name}
render :partial => "systems", render :partial => "systems",
:locals => {:filter => @group, :name=>controller_display_name, :editable=>@group.editable?, :locals => {:filter => @group, :name => controller_display_name, :editable => @group.editable?,
:systems_deletable=>@group.systems_deletable?} :systems_deletable => @group.systems_deletable?}
end end


def add_systems def add_systems
ids = params[:system_ids].collect{|s| s.to_i} - @group.system_ids #ignore dups ids = params[:system_ids].collect{|s| s.to_i} - @group.system_ids #ignore dups
systems = System.readable(current_organization).where(:id=>ids) systems = System.readable(current_organization).where(:id => ids)
@group.system_ids = (@group.system_ids + systems.collect{|s| s.id}).uniq @group.system_ids = (@group.system_ids + systems.collect{|s| s.id}).uniq
@group.save! @group.save!
system_joins = @group.system_system_groups.where(:system_id=>ids) system_joins = @group.system_system_groups.where(:system_id => ids)


notify.success _("Successfully added system[s] to group '%s'.") % @group.name notify.success _("Successfully added system[s] to group '%s'.") % @group.name


render :partial=>'system_item', :collection=>system_joins, :as=>:system, render :partial => 'system_item', :collection => system_joins, :as => :system,
:locals=>{:editable=>@group.editable?} :locals => {:editable => @group.editable?}
end end


def remove_systems def remove_systems
systems = System.readable(current_organization).where(:id=>params[:system_ids]).collect{|s| s.id} systems = System.readable(current_organization).where(:id => params[:system_ids]).collect{|s| s.id}
@group.system_ids = (@group.system_ids - systems).uniq @group.system_ids = (@group.system_ids - systems).uniq
@group.save! @group.save!


notify.success _("Successfully removed system[s] from group '%s'.") % @group.name notify.success _("Successfully removed system[s] from group '%s'.") % @group.name


render :text=>'' render :text => ''
end

def edit_systems
accessible_envs = current_organization.environments
setup_environment_selector(current_organization, accessible_envs)
@organization = current_organization
@environment = first_env_in_path(accessible_envs)

render :partial => "edit_systems",
:locals => {:filter => @group, :accessible_envs => accessible_envs}
end

def update_systems
unless params[:system_group].blank?
@group.systems.each do|system|
system.update_attributes!(params[:system_group])
end
end

notify.success _("Successfully updated environment and content view for all systems in group %{group}") %
{:group => @group.name}

render :text => ''
end end


def auto_complete def auto_complete
Expand All @@ -214,11 +244,11 @@ def auto_complete
string query string query
end end
filter :term, {:organization_id => org.id} filter :term, {:organization_id => org.id}
filter :terms, {:id=>SystemGroup.editable(org).collect{|g| g.id}} filter :terms, {:id => SystemGroup.editable(org).collect{|g| g.id}}
end end
render :json=>groups.map{|s| {:label=>s.name, :value=>s.name, :id=>s.id}} render :json => groups.map{|s| {:label => s.name, :value => s.name, :id => s.id}}
rescue Tire::Search::SearchRequestFailed => e rescue Tire::Search::SearchRequestFailed => e
render :json=>Util::Support.array_with_total render :json => Util::Support.array_with_total
end end


def controller_display_name def controller_display_name
Expand All @@ -227,7 +257,7 @@ def controller_display_name


def validate_name def validate_name
name = params[:term] name = params[:term]
render :json=>SystemGroup.search("name:#{name}").count render :json => SystemGroup.search("name:#{name}").count
end end


def find_group def find_group
Expand Down
3 changes: 0 additions & 3 deletions src/app/helpers/activation_keys_helper.rb
Expand Up @@ -11,7 +11,4 @@
# http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt. # http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.


module ActivationKeysHelper module ActivationKeysHelper
def no_content_view
_("No Content View")
end
end end
20 changes: 20 additions & 0 deletions src/app/helpers/application_helper.rb
Expand Up @@ -278,4 +278,24 @@ def kt_form_for(object, options = {}, &block)
options[:builder] = KatelloFormBuilder options[:builder] = KatelloFormBuilder
form_for(object, options, &block) form_for(object, options, &block)
end end

def no_content_view
_("No Content View")
end

def content_view_select_labels(organization, environment)
labels = [[no_content_view, '']]
if environment
labels += ContentView.readable(organization).non_default.
in_environment(environment).collect {|cv| [cv.name, cv.id]}
else
labels = []
end
labels
end

def selected_content_view(content_view)
content_view.nil? ? no_content_view : content_view.id
end

end end
4 changes: 0 additions & 4 deletions src/app/helpers/systems_helper.rb
Expand Up @@ -52,10 +52,6 @@ def content_view_select(org, env)
{:tabindex => 2}) {:tabindex => 2})
end end


def no_content_view
_('Select Content View')
end

def system_content_view_opts def system_content_view_opts
keys = {} keys = {}
ContentView.readable(current_organization).non_default.each do |view| ContentView.readable(current_organization).non_default.each do |view|
Expand Down
4 changes: 3 additions & 1 deletion src/app/views/activation_keys/_edit.html.haml
Expand Up @@ -59,7 +59,9 @@
%label #{_("Content View")}: %label #{_("Content View")}:
.grid_10.la .grid_10.la
- if editable - if editable
= select_tag 'activation_key[content_view_id]', options_for_select(content_view_labels, selected_content_view) = select_tag 'activation_key[content_view_id]',
options_for_select(content_view_select_labels(@organization, @activation_key.environment),
selected_content_view(@activation_key.content_view))
- else - else
= @content_view.nil? ? no_content_view : @content_view.name = @content_view.nil? ? no_content_view : @content_view.name
Expand Down
3 changes: 2 additions & 1 deletion src/app/views/activation_keys/_new.html.haml
Expand Up @@ -23,7 +23,8 @@


- if Katello.config.katello? - if Katello.config.katello?
= form.field :content_view_id, :label => _("Content View"), :wrapper => {:id => "content_views"}, :grid => [2,7] do = form.field :content_view_id, :label => _("Content View"), :wrapper => {:id => "content_views"}, :grid => [2,7] do
= select_tag 'activation_key[content_view_id]', options_for_select(@content_view_labels, @selected_content_view), = select_tag 'activation_key[content_view_id]',
options_for_select(content_view_select_labels(@organization, @environment), no_content_view),
:tabindex => auto_tab_index :tabindex => auto_tab_index


= form.field :usage_limit, :label => _("Usage Limit"), :grid => [2,7] do = form.field :usage_limit, :label => _("Usage Limit"), :grid => [2,7] do
Expand Down
9 changes: 1 addition & 8 deletions src/app/views/activation_keys/index.html.haml
Expand Up @@ -14,11 +14,4 @@
= two_panel(@activation_keys, @panel_options) = two_panel(@activation_keys, @panel_options)
%div#environment_edit_dialog %div#environment_edit_dialog


= javascript :activation_key = javascript :activation_key

= javascript do
:plain
localize({
"noContentView": '#{no_content_view}',
"update_view": '#{escape_javascript(_('Select a Content View'))}'
});
4 changes: 3 additions & 1 deletion src/app/views/common/_common_i18n.html.haml
Expand Up @@ -35,5 +35,7 @@
"description": '#{escape_javascript(_('Description'))}', "description": '#{escape_javascript(_('Description'))}',
"import_in_progress": function(m){ return '#{escape_javascript(_("Import in progress (%M)"))}'.replace("%M", m);}, "import_in_progress": function(m){ return '#{escape_javascript(_("Import in progress (%M)"))}'.replace("%M", m);},
"current_default_org" : '#{escape_javascript(_('This is your default organization.'))}', "current_default_org" : '#{escape_javascript(_('This is your default organization.'))}',
"make_default_org" : '#{escape_javascript(_('Make this your default organization.'))}' "make_default_org" : '#{escape_javascript(_('Make this your default organization.'))}',
"no_content_view" : '#{no_content_view}',
"select_content_view": '#{escape_javascript(_('Select a View'))}'
}); });

0 comments on commit 7af81a5

Please sign in to comment.