diff --git a/controllers/mpog_software_plugin_myprofile_controller.rb b/controllers/mpog_software_plugin_myprofile_controller.rb index dd2f339..c2f9632 100644 --- a/controllers/mpog_software_plugin_myprofile_controller.rb +++ b/controllers/mpog_software_plugin_myprofile_controller.rb @@ -45,15 +45,15 @@ class MpogSoftwarePluginMyprofileController < MyProfileController @community.environment = environment @software_info = SoftwareInfo.new(params[:software_info]) @license_info = if params[:license_info].nil? - LicenseInfo::new - else - LicenseInfo.find(:first, :conditions =>["version = ?","#{params[:license_info][:version]}"]) - end - valid_community = request.post? && @community.valid? - valid_software_info = request.post? && @software_info.valid? - valid_license = (request.post? && @license_info.valid?) - if valid_software_info && valid_license && valid_community - @software_info = SoftwareInfo.create_after_moderation(user,params[:software_info].merge({:environment => environment,:name => params[:community][:name]})) + LicenseInfo::new + else + LicenseInfo.find(:first, :conditions =>["version = ?","#{params[:license_info][:version]}"]) + end + + valid_models = request.post? && (@community.valid? && @software_info.valid? && @license_info.valid?) + + if valid_models + @software_info = SoftwareInfo.create_after_moderation(user,params[:software_info].merge({:environment => environment,:name => params[:community][:name], :license_info => @license_info})) unless params[:q].nil? admins = params[:q].split(/,/).map{|n| environment.people.find n.to_i} @@ -62,14 +62,18 @@ class MpogSoftwarePluginMyprofileController < MyProfileController @community.add_admin(admin) end end + if !environment.admins.include?(current_user.person) session[:notice] = _('Your new software request will be evaluated by an administrator. You will be notified.') redirect_to user.admin_url + else + redirect_to :controller => 'profile_editor', :action => 'edit', :profile => @community.identifier + end else - @errors |= @community.errors.full_messages - @errors |= @software_info.errors.full_messages - @errors |= @license_info.errors.full_messages - end + @errors |= @community.errors.full_messages + @errors |= @software_info.errors.full_messages + @errors |= @license_info.errors.full_messages + end end def search_offerers @@ -149,4 +153,5 @@ class MpogSoftwarePluginMyprofileController < MyProfileController def community_must_be_approved end + end diff --git a/lib/create_software.rb b/lib/create_software.rb index 854b8c8..516a860 100644 --- a/lib/create_software.rb +++ b/lib/create_software.rb @@ -3,12 +3,12 @@ class CreateSoftware < Task validates_presence_of :requestor_id, :target_id validates_presence_of :name - attr_accessible :name, :finality, :repository_link, :requestor, :environment, :reject_explanation + attr_accessible :name, :finality, :repository_link, :requestor, :environment, :reject_explanation, :license_info alias :environment :target alias :environment= :target= - DATA_FIELDS = ['name', 'finality', 'license_info_id', 'repository_link'] + DATA_FIELDS = ['name', 'finality', 'license_info', 'repository_link'] DATA_FIELDS.each do |field| settings_items field.to_sym end @@ -21,7 +21,7 @@ class CreateSoftware < Task software = SoftwareInfo.create!(:finality => self.finality, :repository_link => self.repository_link, :community_id => community.id, - :license_info_id => self.license_info_id) + :license_info => self.license_info) end def title diff --git a/lib/ext/community.rb b/lib/ext/community.rb index 8374f47..e9c9c4d 100644 --- a/lib/ext/community.rb +++ b/lib/ext/community.rb @@ -7,25 +7,13 @@ class Community has_one :software_info, :dependent=>:destroy has_one :institution, :dependent=>:destroy - def self.create_after_moderation(requestor, attributes = {}, software_info = nil, license_info = nil, software_categories = nil) + def self.create_after_moderation(requestor, attributes = {}) community = Community.new(attributes) - if not software_info.nil? - if not license_info.nil? - software_info.license_info = license_info - end - - if not software_categories.nil? - software_info.software_categories = software_categories - end - software_info.save - end - if community.environment.enabled?('admin_must_approve_new_communities') and !community.environment.admins.include?(requestor) - cc = CreateCommunity.create(attributes.merge(:requestor => requestor, :software_info=>software_info)) + cc = CreateCommunity.create(attributes.merge(:requestor => requestor)) else community = Community.create(attributes) - community.software_info = software_info community.add_admin(requestor) end community diff --git a/lib/ext/create_community.rb b/lib/ext/create_community.rb deleted file mode 100644 index 7896914..0000000 --- a/lib/ext/create_community.rb +++ /dev/null @@ -1,20 +0,0 @@ -require_dependency 'create_community' - -class CreateCommunity - settings_items :software_info - attr_accessible :software_info, :environment, :name, :closed, :template_id, :requestor, :reject_explanation, :target, :image_builder - - def perform - community = Community.new - community_data = self.data.reject do |key, value| - ! DATA_FIELDS.include?(key.to_s) - end - - community.update_attributes(community_data) - community.image = image if image - community.environment = self.environment - community.software_info = self.software_info - community.save! - community.add_admin(self.requestor) - end -end \ No newline at end of file diff --git a/lib/software_info.rb b/lib/software_info.rb index 1888044..1e1d182 100644 --- a/lib/software_info.rb +++ b/lib/software_info.rb @@ -1,6 +1,6 @@ class SoftwareInfo < ActiveRecord::Base attr_accessible :e_mag, :icp_brasil, :intern, :e_ping, :e_arq, :operating_platform - attr_accessible :demonstration_url, :acronym, :objectives, :features, :license_info_id + attr_accessible :demonstration_url, :acronym, :objectives, :features, :license_info attr_accessible :community_id, :finality, :repository_link, :public_software, :first_edit has_many :libraries, :dependent => :destroy @@ -60,8 +60,18 @@ class SoftwareInfo < ActiveRecord::Base def self.create_after_moderation(requestor, attributes = {}) environment = attributes.delete(:environment) name = attributes.delete(:name) - software = SoftwareInfo.new(attributes) - CreateSoftware.create!(attributes.merge(:requestor => requestor, :environment => environment, :name => name)) + license_info = attributes.delete(:license_info) + software_info = SoftwareInfo.new(attributes) + if !environment.admins.include? requestor + CreateSoftware.create!(attributes.merge(:requestor => requestor, :environment => environment, :name => name, :license_info => license_info)) + else + community = Community.new(:name => name) + community.environment = environment + software_info.save + community.software_info = software_info + community.save! + community.add_admin(requestor) + end end -- libgit2 0.21.2