From: Jan Provaznik <[email protected]>
---
.../image_factory/templates_controller.rb | 189 ++++++++++++++++++++
src/app/views/image_factory/templates/_list.haml | 26 +++
src/app/views/image_factory/templates/index.haml | 3 +-
src/config/routes.rb | 3 +-
4 files changed, 219 insertions(+), 2 deletions(-)
create mode 100644 src/app/views/image_factory/templates/_list.haml
diff --git a/src/app/controllers/image_factory/templates_controller.rb
b/src/app/controllers/image_factory/templates_controller.rb
index 992396f..1581dd1 100644
--- a/src/app/controllers/image_factory/templates_controller.rb
+++ b/src/app/controllers/image_factory/templates_controller.rb
@@ -1,6 +1,195 @@
+require 'util/repository_manager'
+
class ImageFactory::TemplatesController < ApplicationController
before_filter :require_user
+ before_filter :check_permission, :except => [:index, :show]
+ before_filter :load_templates, :only => [:index, :show]
def index
end
+
+ def new
+ # can't use @template variable - is used by compass (or something other)
+ @tpl = Template.new(params[:tpl])
+ @repository_manager = RepositoryManager.new(:repositories =>
params[:repository] || @tpl.platform)
+ @tpl.add_software(params[:packages].to_a + params[:selected_packages].to_a
+ params[:cached_packages].to_a,
+ params[:groups].to_a + params[:selected_groups].to_a)
+ render :action => :new
+ end
+
+ def edit
+ @tpl = Template.find(params[:id])
+ @tpl.attributes = params[:tpl] unless params[:tpl].blank?
+ @repository_manager = RepositoryManager.new(:repositories =>
params[:repository] || @tpl.platform)
+ render :action => :edit
+ end
+
+ def create
+ @tpl = Template.new(params[:tpl])
+ @tpl.packages = params[:packages]
+ if @tpl.save
+ flash[:notice] = "Template saved."
+ @tpl.set_complete
+ redirect_to templates_path
+ else
+ @repository_manager = RepositoryManager.new(:repositories =>
params[:repository] || @tpl.platform)
+ render :action => 'new'
+ end
+ end
+
+ def update
+ @tpl = Template.find(params[:id])
+ @tpl.packages = []
+
+ if @tpl.update_attributes(params[:tpl])
+ @tpl.set_complete
+ flash[:notice] = "Template updated."
+ redirect_to templates_path
+ else
+ @repository_manager = RepositoryManager.new(:repositories =>
params[:repository] || @tpl.platform)
+ render :action => 'edit'
+ end
+ end
+
+ def search_packages
+ set_package_vars
+ @page = get_page
+ @cached_packages = params[:cached_packages].to_a +
params[:selected_packages].to_a
+ @searched_packages = params[:package_search].empty? ? [] :
@repository_manager.search_package(
+ params[:package_search]).paginate(:page => @page, :per_page => 60)
+ if request.xhr?
+ render :partial => 'search_packages'
+ else
+ render :search_packages
+ end
+ end
+
+ def metagroup_packages
+ set_package_vars
+ @metagroup_packages =
@repository_manager.metagroup_packages(params[:metagroup_packages])
+ if request.xhr?
+ render :partial => 'metagroup_packages'
+ else
+ render :metagroup_packages
+ end
+ end
+
+ def collections
+ set_package_vars
+ @collections = @repository_manager.groups
+ if request.xhr?
+ render :partial => 'collections'
+ else
+ render :collections
+ end
+ end
+
+ def content_selection
+ set_package_vars(true)
+ @collections = @repository_manager.groups
+ render :collections
+ end
+
+ def managed_content
+ @tpl = params[:template_id].blank? ? Template.new :
Template.find(params[:template_id])
+ @tpl.add_software(params[:packages].to_a + params[:selected_packages].to_a,
+ params[:groups].to_a + params[:selected_groups].to_a)
+ render :layout => false
+ end
+
+ def destroy_multiple
+ ids = params[:ids].to_a
+ if ids.empty?
+ flash[:notice] = "No Template Selected"
+ else
+ errs = {}
+ Template.find(ids).each do |t|
+ t.destroy
+ unless t.destroyed?
+ errs[t.name] = t.errors.full_messages.join(". ")
+ end
+ end
+ if errs.empty?
+ flash[:notice] = 'Template deleted'
+ else
+ flash_error('Error while deleting template', errs)
+ end
+ end
+ redirect_to templates_path
+ end
+
+ def assembly
+ end
+
+ def deployment_definition
+ @all_targets = Image.available_targets
+ end
+
+ protected
+
+ def load_templates
+ @header = [
+ {:name => 'NAME', :sort_attr => 'name'},
+ {:name => 'OS', :sort_attr => 'platform'},
+ {:name => 'VERSION', :sort_attr => 'platform_version'},
+ {:name => 'BOOTABLE', :sortable => false},
+ {:name => 'ARCH', :sort_attr => 'architecture'},
+ ]
+
+ # TODO: add template permission check
+ require_privilege(Privilege::IMAGE_VIEW)
+ @templates = Template.find(
+ :all,
+ :include => :images,
+ :order => get_order('name')
+ )
+ @url_params = params.clone
+ end
+
+ def set_package_vars(set_all = false)
+ @tpl = params[:id].blank? ? Template.new : Template.find(params[:id])
+ @tpl.attributes = params[:tpl] unless params[:tpl].nil?
+ @repository_manager = RepositoryManager.new(:repositories =>
params[:repository] || @tpl.platform)
+ @groups = @repository_manager.groups
+ @categories = @repository_manager.categories if not request.xhr? or set_all
+ @metagroups = @repository_manager.metagroups if not request.xhr? or set_all
+ @tpl.add_software(params[:packages].to_a, params[:groups].to_a)
+ end
+
+ def get_order(default)
+ @order_dir = params[:order_dir] == 'desc' ? 'desc' : 'asc'
+ @order_field = params[:order_field] || default
+ "#...@order_field} #...@order_dir}"
+ end
+
+ def flash_error(summary, errs)
+ flash.now[:error] ||= {}
+ flash.now[:error][:summary] = summary
+ flash.now[:error][:failures] ||= {}
+ flash.now[:error][:failures].merge!(errs)
+ end
+
+ def check_permission
+ require_privilege(Privilege::IMAGE_MODIFY)
+ end
+
+ def get_selected_id
+ ids = params[:ids].to_a
+ if ids.size != 1
+ flash[:warning] = ids.empty? ? 'No Template Selected' : 'You can select
only one template'
+ return
+ end
+ return ids.first
+ end
+
+ def get_page
+ if params[:page] == 'Previous'
+ return params[:old_page].to_i - 1
+ elsif params[:page] == 'Next'
+ return params[:old_page].to_i + 1
+ else
+ return params[:page].blank? ? 1 : params[:page].to_i
+ end
+ end
+
end
diff --git a/src/app/views/image_factory/templates/_list.haml
b/src/app/views/image_factory/templates/_list.haml
new file mode 100644
index 0000000..4e0d058
--- /dev/null
+++ b/src/app/views/image_factory/templates/_list.haml
@@ -0,0 +1,26 @@
+- form_tag do
+ /= submit_tag "Edit", :name => "edit", :class => "icon"
+ /= submit_tag "Delete", :name => "delete", :class => "icon"
+ /= submit_tag "Rename", :name => "rename", :disabled => true, :class =>
"icon"
+ /= submit_tag "Copy", :name => "copy", :disabled => true, :class => "icon"
+ = restful_submit_tag "Create", "new_template",
new_image_factory_template_path, 'GET'
+ /= restful_submit_tag "Build", "build", 'GET'
+
+ %table
+ = sortable_table_header @header
+ %tbody
+ - if @templates.empty?
+ %tr
+ %td{:colspan => 6} No Templates
+ - else
+ - @templates.each do |template|
+ %tr
+ %td
+ - selected = @url_params[:select] == 'all'
+ = check_box(:template, "selected[#{template.id}]", :checked =>
selected)
+ = image_tag "blnk.png", :alt => template.platform, :class =>
"icon platform #{template.platform}"
+ = link_to template.name, image_factory_template_path(template)
+ %td= template.platform
+ %td= template.platform_version
+ %td= image_tag 'blnk.png', :alt => 'yes', :class => "icon yes"
+ %td= template.architecture
diff --git a/src/app/views/image_factory/templates/index.haml
b/src/app/views/image_factory/templates/index.haml
index 689b39b..62ccbc6 100644
--- a/src/app/views/image_factory/templates/index.haml
+++ b/src/app/views/image_factory/templates/index.haml
@@ -1 +1,2 @@
-image_factory/templates/index.haml
+- content_for :list do
+ = render :partial => 'list'
diff --git a/src/config/routes.rb b/src/config/routes.rb
index 17d72d1..262b6ff 100644
--- a/src/config/routes.rb
+++ b/src/config/routes.rb
@@ -38,7 +38,8 @@ ActionController::Routing::Routes.draw do |map|
end
map.namespace 'image_factory' do |r|
- r.resources :assemblies, :deployables, :templates
+ r.resources :assemblies, :deployables
+ r.resources :templates
end
map.connect '/set_layout', :controller => 'application', :action =>
'set_layout'
--
1.7.2.3
_______________________________________________
deltacloud-devel mailing list
[email protected]
https://fedorahosted.org/mailman/listinfo/deltacloud-devel