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

Reply via email to