#321: added UI for mass_import

This commit is contained in:
Vokhmin Alexey V 2013-11-14 02:01:12 +04:00
parent 2899728a33
commit dbf3f24b21
9 changed files with 95 additions and 18 deletions

View File

@ -3,6 +3,7 @@ class Projects::ProjectsController < Projects::BaseController
include ProjectsHelper
before_filter :authenticate_user!
load_and_authorize_resource :id_param => :project_name # to force member actions load
before_filter :who_owns, :only => [:new, :create, :mass_import, :run_mass_import]
def index
@projects = Project.accessible_by(current_ability, :membered)
@ -24,7 +25,26 @@ class Projects::ProjectsController < Projects::BaseController
def new
@project = Project.new
@who_owns = :me
end
def mass_import
@project = Project.new(:mass_import => true)
end
def run_mass_import
@project = Project.new params[:project]
@project.owner = choose_owner
authorize! :write, @project.owner if @project.owner.class == Group
@project.valid?
@project.errors.messages.slice! :url
if @project.errors.messages.blank? # We need only url validation
@project.mass_import
flash[:notice] = t('flash.project.mass_import_added_to_queue')
redirect_to projects_path
else
flash[:warning] = @project.errors.full_messages.join('. ')
render :mass_import
end
end
def edit
@ -33,7 +53,6 @@ class Projects::ProjectsController < Projects::BaseController
def create
@project = Project.new params[:project]
@project.owner = choose_owner
@who_owns = (@project.owner_type == 'User' ? :me : :group)
authorize! :write, @project.owner if @project.owner.class == Group
if @project.save
@ -115,6 +134,10 @@ class Projects::ProjectsController < Projects::BaseController
protected
def who_owns
@who_owns = (@project.try(:owner_type) == 'User' ? :me : :group)
end
def prepare_list(projects, groups, owners)
res = {}

View File

@ -29,8 +29,10 @@ class Project < ActiveRecord::Base
validates :name, :uniqueness => {:scope => [:owner_id, :owner_type], :case_sensitive => false},
:presence => true,
:format => {:with => /\A#{NAME_REGEXP}\z/, :message => I18n.t("activerecord.errors.project.uname")}
:format => {:with => /\A#{NAME_REGEXP}\z/,
:message => I18n.t("activerecord.errors.project.uname")}
validates :maintainer_id, :presence => true, :unless => :new_record?
validates :url, :presence => true, :format => {:with => /\Ahttps?:\/\/[\S]+\z/}, :if => :mass_import
validates :visibility, :presence => true, :inclusion => {:in => VISIBILITIES}
validate { errors.add(:base, :can_have_less_or_equal, :count => MAX_OWN_PROJECTS) if owner.projects.size >= MAX_OWN_PROJECTS }
validate :check_default_branch
@ -43,7 +45,9 @@ class Project < ActiveRecord::Base
errors.delete :project_to_repositories
end
attr_accessible :name, :description, :visibility, :srpm, :is_package, :default_branch, :has_issues, :has_wiki, :maintainer_id, :publish_i686_into_x86_64
attr_accessible :name, :description, :visibility, :srpm, :is_package, :default_branch,
:has_issues, :has_wiki, :maintainer_id, :publish_i686_into_x86_64,
:url, :srpms_list, :mass_import
attr_readonly :owner_id, :owner_type
scope :recent, order("lower(#{table_name}.name) ASC")
@ -82,6 +86,8 @@ class Project < ActiveRecord::Base
has_ancestry :orphan_strategy => :rootify #:adopt not available yet
attr_accessor :url, :srpms_list, :mass_import
include Modules::Models::Owner
include Modules::Models::Git
include Modules::Models::Wiki
@ -96,6 +102,16 @@ class Project < ActiveRecord::Base
def find_by_owner_and_name!(owner_name, project_name)
find_by_owner_and_name(owner_name, project_name) or raise ActiveRecord::RecordNotFound
end
def self.run_mass_import(url, srpms_list, visibility, owner)
end
end
def mass_import
Project.perform_later :clone_build, :run_mass_import, url, srpms_list, visibility, owner
end
def name_with_owner

View File

@ -6,6 +6,9 @@
- if can?(:create, Project)
.bordered.bpadding20
= link_to t('layout.projects.new'), new_project_path, :class => 'button'
.both
%br
= link_to t('layout.projects.mass_import'), mass_import_projects_path, :class => 'button'
.bordered.bpadding20
%h3=t('layout.relations.filters')
- options_for_filters(@all_projects, @groups, @owners).each do |options|

View File

@ -7,22 +7,10 @@
.rightlist= f.text_area :description, :class => 'text_field', :cols => 80
.both
- if [:new, :create].include? act
.leftlist= f.label :owner
.rightlist
= label_tag t("activerecord.attributes.project.who_owns.me")
- if Group.can_own_project(current_user).count > 0
= radio_button_tag :who_owns, 'me', @who_owns == :me #{}.merge( (@who_owns == :me) ? {:checked => 'checked'} : {} )
= label_tag t("activerecord.attributes.project.who_owns.group")
= radio_button_tag :who_owns, 'group', @who_owns == :group #{}.merge( (@who_owns == :group) ? {:checked => 'checked'} : {} )
-# TODO: Make our own select_box helper with new design, blackjack and bitches!
= select_tag :owner_id, options_from_collection_for_select( Group.can_own_project(current_user), :id, :name )
- else
= hidden_field_tag :who_owns, :me
.both
= render 'owner', :f => f
.leftlist= f.label :visibility
.rightlist
=# f.select :visibility, Project::VISIBILITIES
- Project::VISIBILITIES.each do |visibility|
= f.radio_button :visibility, visibility, :class => 'niceRadio'
- if visibility == 'open'

View File

@ -0,0 +1,12 @@
.leftlist= f.label :owner
.rightlist
= label_tag t("activerecord.attributes.project.who_owns.me")
- if Group.can_own_project(current_user).count > 0
= radio_button_tag :who_owns, 'me', @who_owns == :me #{}.merge( (@who_owns == :me) ? {:checked => 'checked'} : {} )
= label_tag t("activerecord.attributes.project.who_owns.group")
= radio_button_tag :who_owns, 'group', @who_owns == :group #{}.merge( (@who_owns == :group) ? {:checked => 'checked'} : {} )
-# TODO: Make our own select_box helper with new design, blackjack and bitches!
= select_tag :owner_id, options_from_collection_for_select( Group.can_own_project(current_user), :id, :name )
- else
= hidden_field_tag :who_owns, :me
.both

View File

@ -0,0 +1,24 @@
%h3.bpadding10= title t("layout.projects.mass_import")
= form_for @project, :url => run_mass_import_projects_path, :html => { :class => :form } do |f|
= f.hidden_field :mass_import
.leftlist= f.label :url
.rightlist= f.text_field :url
.both
.leftlist= f.label :srpms_list
.rightlist= f.text_area :srpms_list
.both
= render 'owner', :f => f
.leftlist= f.label :visibility
.rightlist
- Project::VISIBILITIES.each do |visibility|
= f.radio_button :visibility, visibility, :class => 'niceRadio'
- if visibility == 'open'
= image_tag("unlock.png")
- else
= image_tag("lock.png")
= t("activerecord.attributes.project.visibilities.#{visibility}")
.both
.hr
.button_block
= f.submit t('layout.add'), :data => {'disable-with' => t('layout.saving')}

View File

@ -1,6 +1,7 @@
en:
layout:
projects:
mass_import: Mass import
branches: Branches
delete_branch: Delete branch
restore_branch: Restore branch
@ -89,6 +90,8 @@ en:
project: Project
attributes:
project:
url: URL
srpms_list: SRPMs list
name: Name
description: Descripton
owner: Owner

View File

@ -1,6 +1,7 @@
ru:
layout:
projects:
mass_import: Массовый импорт
branches: Ветки
delete_branch: Удалить ветку
restore_branch: Восстановить ветку
@ -89,6 +90,8 @@ ru:
project: Проект
attributes:
project:
url: URL
srpms_list: Список SRPMs
name: Название
description: Описание
owner: Владелец

View File

@ -284,7 +284,12 @@ Rosa::Application.routes.draw do
end
end
resources :projects, :only => [:index, :new, :create]
resources :projects, :only => [:index, :new, :create] do
collection do
post :run_mass_import
get :mass_import
end
end
scope ':owner_name/:project_name', :constraints => {:project_name => Project::NAME_REGEXP} do # project
scope :as => 'project' do
resources :wiki do