--- .../controllers/image_factory/builds_controller.rb | 7 +++++ .../image_factory/templates_controller.rb | 14 +++++++++- src/app/models/image.rb | 4 +- src/app/views/image_factory/templates/_builds.haml | 25 ++++++++++++++----- src/config/routes.rb | 2 +- 5 files changed, 40 insertions(+), 12 deletions(-)
diff --git a/src/app/controllers/image_factory/builds_controller.rb b/src/app/controllers/image_factory/builds_controller.rb index 01f05bd..6d335df 100644 --- a/src/app/controllers/image_factory/builds_controller.rb +++ b/src/app/controllers/image_factory/builds_controller.rb @@ -44,6 +44,13 @@ class ImageFactory::BuildsController < ApplicationController render :action => 'new' end end + + def upload_or_delete + @tpl = Template.find(params[:template_id]) + # FIXME: add logic to upload image + # or delete image depending on which button was used + redirect_to image_factory_template_path(@tpl, :details_tab => 'builds') + end
def edit # FIXME: is @tpl defined here? do we need check_permission here? diff --git a/src/app/controllers/image_factory/templates_controller.rb b/src/app/controllers/image_factory/templates_controller.rb index a38fe0d..901e7c9 100644 --- a/src/app/controllers/image_factory/templates_controller.rb +++ b/src/app/controllers/image_factory/templates_controller.rb @@ -196,20 +196,30 @@ class ImageFactory::TemplatesController < ApplicationController
def load_images(tpl) @images_header = [ + {:name => '', :sort_attr => 'select'}, {:name => 'ARCH', :sort_attr => 'templates.architecture'}, {:name => 'PROVIDER', :sort_attr => 'provider'}, {:name => 'STATUS', :sort_attr => 'status'}, {:name => 'UPLOADED?', :sort_attr => 'images.uploaded'}, ] - @imaged_provider_types = {} + @targets_not_built = {} + @target_build_status = {} + + Image.available_targets.each do |id, target| + @targets_not_built[id] = target + end + tpl.images.each do |img| + @target_build_status[img.target] = img.status + @targets_not_built.delete(img.target) img.provider_images.each do |pimg| @imaged_provider_types[pimg.provider_id] = img.target end end + @targets_not_built = @targets_not_built.invert
- @providers_not_uploaded = Provider.find_all_by_provider_type(@imaged_provider_types.keys.uniq) + @providers_not_uploaded = Provider.find_all_by_provider_type(@imaged_provider_types.values.uniq) @providers_not_uploaded.each do |provider| if @imaged_provider_types.has_key?(provider.id) @providers_not_uploaded.delete(provider) diff --git a/src/app/models/image.rb b/src/app/models/image.rb index cfa15e4..dad94f3 100644 --- a/src/app/models/image.rb +++ b/src/app/models/image.rb @@ -83,7 +83,7 @@ class Image < ActiveRecord::Base unless provider = Provider.find_by_target_with_account(target.id) raise "There is no provider for '#{target.name}' type with valid account." end - + img = nil Image.transaction do img = Image.create!( @@ -94,7 +94,7 @@ class Image < ActiveRecord::Base ) ProviderImage.create!( :image_id => img.id, - :provider_id => provider + :provider_id => provider.id ) end return img diff --git a/src/app/views/image_factory/templates/_builds.haml b/src/app/views/image_factory/templates/_builds.haml index a9822f0..f1a98c8 100644 --- a/src/app/views/image_factory/templates/_builds.haml +++ b/src/app/views/image_factory/templates/_builds.haml @@ -3,11 +3,20 @@ Builds for = @tpl.platform_version , template "#{@tpl.name}"
-- form_tag :action => "" do +- form_tag(image_factory_builds_path, { :action => 'create', :method => :post }) do + = hidden_field_tag :template_id, @tpl.id + New Build for + = select( "targets", "", options_for_select(@targets_not_built)) + = submit_tag "Go", :name => "build" + +- form_tag(upload_or_delete_image_factory_builds_path, { :action => "destroy", :method => :post }) do + = hidden_field_tag :template_id, @tpl.id /= restful_submit_tag "Cancel Job", :name => "job_details", :disabled => true, :class => "icon" /= restful_submit_tag "Show Job Details", :name => "job_details", :disabled => true, :class => "icon" /= restful_submit_tag "Show Job Log", :name => "job_log", :disabled => true, :class => "icon" /= restful_submit_tag "Clear Job History", :name => "job_history", :disabled => true, :class => "icon" + = submit_tag "Upload", :name => "upload" + = submit_tag "Delete", :name => "delete"
%table = sortable_table_header(@images_header) @@ -19,13 +28,15 @@ Builds for - @images.each do |img| - img.provider_images.each do |pimg| %tr + %td= check_box_tag 'selected[]', pimg.provider_id, @url_params[:select] == 'all', :id => "selected_#{pimg.provider_id}" %td= img.template.architecture %td= pimg.provider.nil? ? '' : pimg.provider.name %td= img.status %td= pimg.uploaded? ? 'yes' : 'no' - - @providers_not_uploaded.each do |provider| - %tr - %td= @tpl.architecture - %td= provider.name - %td= img.status - %td no \ No newline at end of file + - @providers_not_uploaded.each do |provider| + %tr + %td= check_box_tag 'selected[]', provider.id, @url_params[:select] == 'all', :id => "selected_#{provider.id}" + %td= @tpl.architecture + %td= provider.name + %td= @target_build_status[provider.provider_type] + %td no \ No newline at end of file diff --git a/src/config/routes.rb b/src/config/routes.rb index c936726..b64713f 100644 --- a/src/config/routes.rb +++ b/src/config/routes.rb @@ -45,7 +45,7 @@ ActionController::Routing::Routes.draw do |map| r.resources :assemblies r.resources :deployables, :collection => { :multi_destroy => :delete } r.resources :templates, :collection => {:collections => :get, :add_selected => :get, :metagroup_packages => :get, :remove_package => :get, :multi_destroy => :delete} - r.resources :builds + r.resources :builds, :collection => { :upload_or_delete => :delete } end
map.namespace 'admin' do |r|
aeolus-devel@lists.fedorahosted.org