Skip to content

Commit

Permalink
[webui] Delete requests for project repository targets
Browse files Browse the repository at this point in the history
Adds a new button "Request repository deletion" next to repositories of
projects where you don't have (maintainer) rights.
  • Loading branch information
saschpe authored and coolo committed Nov 21, 2012
1 parent f86c912 commit b14d4dd
Show file tree
Hide file tree
Showing 8 changed files with 96 additions and 4 deletions.
18 changes: 18 additions & 0 deletions src/webui/app/controllers/project_controller.rb
Expand Up @@ -686,6 +686,24 @@ def save_targets
redirect_back_or_to :action => 'repositories', :project => @project and return
end

def remove_target_request_dialog
@project = params[:project]
@repository = params[:repository]
end
def remove_target_request
begin
req = BsRequest.new(:type => "delete", :targetproject => params[:project], :targetrepository => params[:repository], :description => params[:description])
req.save(create: true)
flash[:success] = "Created <a href='#{url_for(:controller => 'request', :action => 'show', :id => req.value("id"))}'>repository delete request #{req.value("id")}</a>"
rescue ActiveXML::Transport::NotFoundError => e
flash[:error] = e.summary
redirect_to :action => :repositories, :project => @project and return
rescue ActiveXML::Transport::Error => e
flash[:error] = e.summary
redirect_back_or_to :action => :repositories, :project => @project and return
end
redirect_to :controller => :request, :action => :show, :id => req.value("id")
end

def remove_target
valid_http_methods :post
Expand Down
7 changes: 5 additions & 2 deletions src/webui/app/models/bs_request.rb
Expand Up @@ -7,11 +7,14 @@ class ModifyError < Exception; end

class << self
def make_stub(opt)
target_package = ""
target_package, target_repository = "", ""
opt[:description] = "" if !opt.has_key? :description or opt[:description].nil?
if opt[:targetpackage] and not opt[:targetpackage].empty?
target_package = "package=\"#{opt[:targetpackage].to_xs}\""
end
if opt[:targetrepository] and not opt[:targetrepository].empty?
target_repository = "repository=\"#{opt[:targetrepository].to_xs}\""
end

# set request-specific options
case opt[:type]
Expand Down Expand Up @@ -40,7 +43,7 @@ def make_stub(opt)
action = "<source project=\"#{opt[:project]}\" />"
action += "<target project=\"#{opt[:targetproject].to_xs}\" />" unless opt[:targetproject].blank?
when "delete" then
action = "<target project=\"#{opt[:targetproject].to_xs}\" #{target_package}/>"
action = "<target project=\"#{opt[:targetproject].to_xs}\" #{target_package} #{target_repository}/>"
end
# build the request XML
reply = <<-EOF
Expand Down
21 changes: 21 additions & 0 deletions src/webui/app/views/project/_remove_target_request_dialog.html.erb
@@ -0,0 +1,21 @@
<div class="dialog" id="disable_mask"></div>
<div class="dialog darkgrey_box">
<div class="box box-shadow">
<h2 class="box-header">Create Repository Delete Request</h2>
<p>Do you really want to request the deletion of repository <i><%= @repository %></i>?</p>

<%= form_tag({:controller => 'project', :action => 'remove_target_request'}, :method => 'post') do %>
<%= hidden_field_tag(:project, @project) %>
<%= hidden_field_tag(:repository, @repository) %>
<p>
<%= label_tag(:description, 'Description:') %><br/>
<%= text_area_tag(:description, '', :size => '40x3') %>
</p>
<div class="buttons">
<%= submit_tag('Ok') %>
<%= link_to_function('Cancel', 'remove_dialog()') %>
</div>
<% end %>
</div>
</div>

@@ -0,0 +1,2 @@
$('#dialog_wrapper').show();
$('#dialog_wrapper').html('<%= escape_javascript(render :partial => 'remove_target_request_dialog') %>');
7 changes: 5 additions & 2 deletions src/webui/app/views/project/repositories.html.erb
Expand Up @@ -37,10 +37,13 @@
});
<% end %>
<%= image_tag('drive_delete.png') %>
<%= link_to('Remove repository', {:action => :remove_target, :project => @project, :target => repository.name},
<%= link_to('Delete repository', {:action => :remove_target, :project => @project, :target => repository.name},
{:confirm => "Really remove repository '#{repository.name}'?", :class => 'x', :method => :post}) %>
<%= render :partial => 'shared/download_repository_link', :locals => {:project => @project, :repository => repository} %>
<% else %>
<%= image_tag('drive_delete.png') %>
<%= link_to('Request repository deletion', {:action => :remove_target_request_dialog, :project => @project, :repository => repository.name}, :remote => true) %>
<% end %>
<%= render :partial => 'shared/download_repository_link', :locals => {:project => @project, :repository => repository} %>
</div>
</div>
</div>
Expand Down
3 changes: 3 additions & 0 deletions src/webui/app/views/request/show.html.erb
Expand Up @@ -96,6 +96,9 @@
<% elsif action['type'] == 'delete' %>
<b>Delete
<% if action['trepo'] %>
repository <%= link_to action['trepo'], :controller => :project, :action => :repositories, :project => action['tprj'], :repository => action['trepo'] %> in
<% end %>
<%= render :partial => 'shared/project_or_package_link', :locals => {project: action['tprj'], package: action['tpkg']} %>
</b>
<% elsif action['type'] == 'add_role' %>
Expand Down
2 changes: 2 additions & 0 deletions src/webui/config/routes.rb
Expand Up @@ -182,6 +182,8 @@
match 'project/save_new' => :save_new
match 'project/save' => :save
match 'project/save_targets' => :save_targets
match 'project/remove_target_request_dialog' => :remove_target_request_dialog
match 'project/remove_target_request' => :remove_target_request
match 'project/remove_target' => :remove_target
match 'project/remove_path_from_target' => :remove_path_from_target
match 'project/move_path_up' => :move_path_up
Expand Down
40 changes: 40 additions & 0 deletions src/webui/test/functional/project_controller_test.rb
Expand Up @@ -115,4 +115,44 @@ def create_subproject
fill_in 'name', with: 'LocalProject'
find_button('Create Project').click
end

test "request project repository target removal" do
# Let user1 create a project with a repo that others can request to delete
login_adrian
visit project_show_path(project: "home:adrian")
find(:link, "Subprojects").click
find(:link, "Create subproject").click
fill_in "name", with: "hasrepotoremove"
find_button("Create Project").click
find(:link, "Repositories").click
find(:link, "Add repositories").click
find(:id, "repo_images").click # aka "KIWI image build" checkbox
find_button("Add selected repositories").click
logout

# Now let tom create the repository delete request:
login_tom
visit project_show_path(project: "home:adrian:hasrepotoremove")
find(:link, "Repositories").click
find(:link, "Request repository deletion").click
# Wait for the dialog to appear
assert find(:css, ".dialog h2").has_content? "Create Repository Delete Request"
fill_in "description", with: "I don't like the repo"
find_button("Ok").click
assert find(:css, "span.ui-icon.ui-icon-info").has_text? "Created repository delete request"
logout

# Finally, user1 should accept the request and make sure the repo is gone
login_adrian
visit project_show_path(project: "home:adrian:hasrepotoremove")
find("#tab-requests a").click # The project tab "Requests"
find(".request_link").click # Should be the first and only request for this project
assert_equal "I don't like the repo", find(:id, "description_text").text
fill_in "reason", with: "really? ok"
find(:id, "accept_request_button").click
visit project_show_path(project: "home:adrian:hasrepotoremove")
find(:link, "Repositories").click
assert first(:id, "images").nil? # The repo "images" should be gone by now
end

end

0 comments on commit b14d4dd

Please sign in to comment.