[api] update default distribution list:
[opensuse:build-service.git] / src / webui / app / controllers / attribute_controller.rb
1 class AttributeController < ApplicationController
2   helper :all
3   before_filter :requires
4
5   def edit
6     if @attributes.nil? # fails if package does not exist in project anymore
7       redirect_to :controller => :project, :action => :attributes, :project => params[:project] and return
8     end
9     if params[:namespace] and params[:name]
10       selected_attribute = nil
11       selected_attribute = @attributes.find_first( "attribute[@name='#{params[:name]}' and @namespace='#{params[:namespace]}']")
12       @selected_attribute_name =  "%s:%s" % [params[:namespace], params[:name]]
13       @selected_attribute_value = Array.new
14       selected_attribute.each("value") {|value| @selected_attribute_value << value.text} if selected_attribute
15       @selected_attribute_value = @selected_attribute_value.join(', ')
16     else
17       namespaces = find_cached(Attribute, :namespaces)
18       attributes = []
19       @attribute_list = []
20       namespaces.each do |d|
21          attributes << find_cached(Attribute, :attributes, :namespace => d.value(:name), :expires_in => 10.minutes)
22       end
23       attributes.each do |d|
24         if d.has_element? :entry
25           d.each {|f| @attribute_list << "#{d.init_options[:namespace]}:#{f.value(:name)}" }
26         end
27       end
28       @attributes.each {|d| @attribute_list.delete(d.name)}
29     end
30   end
31
32   def save
33     valid_http_methods(:post)
34     values = params[:values].split(',')
35     namespace, name = params[:attribute].split(/:/)
36     @attributes.set(namespace, name, values)
37     result = @attributes.save
38     Attribute.free_cache( @attribute_opts )
39     if params[:package]
40       opt = {:controller => :package, :action => :attributes, :project => @project.name }
41     elsif params[:project]
42       opt = {:controller => :project, :action => :attributes, :project => @project.name }
43     end
44     opt.store( :package, params[:package] ) if params[:package]
45     flash[result[:type]] = result[:msg]
46     redirect_to opt
47   end
48
49   def delete
50     valid_http_methods(:post, :delete)
51     result = @attributes.delete(params[:namespace], params[:name])
52     flash[result[:type]] = result[:msg]
53     Attribute.free_cache( @attribute_opts )
54     if params[:package]
55       opt = {:controller => :package, :action => :attributes, :project => @project.name }
56     elsif params[:project]
57       opt = {:controller => :project, :action => :attributes, :project => @project.name }
58     end
59     opt.store( :package, params[:package] ) if params[:package]
60     redirect_to opt
61   end
62
63 private
64
65   def requires
66     @project = find_cached(Project, params[:project], :expires_in => 5.minutes )
67     unless @project
68       flash[:error] = "Project not found: #{params[:project]}"
69       redirect_to :controller => "project", :action => "list_public" and return
70     end
71     @is_maintenance_project = false
72     @is_maintenance_project = true if @project.project_type and @project.project_type == "maintenance"
73     @package = params[:package] if params[:package]
74     @attribute_opts = {:project => @project.name}
75     @attribute_opts.store(:package, @package.to_s) if @package
76     @attributes = find_cached(Attribute, @attribute_opts, :expires_in => 2.minutes)
77   end
78 end