diff --git a/controllers/mpog_software_plugin_myprofile_controller.rb b/controllers/mpog_software_plugin_myprofile_controller.rb index 434d84d..c50aae7 100644 --- a/controllers/mpog_software_plugin_myprofile_controller.rb +++ b/controllers/mpog_software_plugin_myprofile_controller.rb @@ -54,7 +54,7 @@ class MpogSoftwarePluginMyprofileController < MyProfileController valid_license = (request.post? && @license_info.valid?) if valid_software_info && valid_license && valid_community @community = Community.create_after_moderation(user, {:environment => environment}.merge(params[:community]), @software_info, @license_info ) - + @software_info = SoftwareInfo.create_after_moderation(user,params[:software_info].merge({:environment => environment,:name => params[:community][:name]})) unless params[:q].nil? admins = params[:q].split(/,/).map{|n| environment.people.find n.to_i} diff --git a/lib/create_software.rb b/lib/create_software.rb new file mode 100644 index 0000000..1c9e844 --- /dev/null +++ b/lib/create_software.rb @@ -0,0 +1,85 @@ +class CreateSoftware < Task + + validates_presence_of :requestor_id, :target_id + validates_presence_of :name + + attr_accessible :name, :finality, :repository_link, :requestor, :environment + + alias :environment :target + alias :environment= :target= + + DATA_FIELDS = ['name', 'finality', 'license_infos_id', 'repository_link'] + DATA_FIELDS.each do |field| + settings_items field.to_sym + end + + def perform + community = Community.create!(:name => self.name) + + community.environment = self.environment + community.add_admin(self.requestor) + + software = SoftwareInfo.create!(:name => self.name, :finality => self.finality, + :repository_link => self.repository_link, :community => community, + :license_info_id => self.license_info_id) + end + + def title + _("New software") + end + + # def icon + # src = image ? image.public_filename(:minor) : '/images/icons-app/community-minor.png' + # {:type => :defined_image, :src => src, :name => name} + # end + + def subject + name + end + + def information + if finality.blank? + { :message => _('%{requestor} wants to create software %{subject} with no finality.') } + else + { :message => _('%{requestor} wants to create software %{subject} with this finality:
%{finality}
'), + :variables => {:finality => finality} } + end + end + + def reject_details + true + end + + # tells if this request was rejected + def rejected? + self.status == Task::Status::CANCELLED + end + + # tells if this request was appoved + def approved? + self.status == Task::Status::FINISHED + end + + def target_notification_description + _('%{requestor} wants to create software %{subject}') % {:requestor => requestor.name, :subject => subject} + end + + def target_notification_message + _("User \"%{user}\" just requested to create software %{software}. You have to approve or reject it through the \"Pending Validations\" section in your control panel.\n") % { :user => self.requestor.name, :software => self.name } + end + + def task_created_message + _("Your request for registering software %{software} at %{environment} was just sent. Environment administrator will receive it and will approve or reject your request according to his methods and creteria. + + You will be notified as soon as environment administrator has a position about your request.") % { :software => self.name, :environment => self.target } + end + + def task_cancelled_message + _("Your request for registering software %{software} at %{environment} was not approved by the environment administrator. The following explanation was given: \n\n%{explanation}") % { :software => self.name, :environment => self.environment, :explanation => self.reject_explanation } + end + + def task_finished_message + _('Your request for registering the software "%{software}" was approved. You can access %{environment} now and start using your new software.') % { :software => self.name, :environment => self.environment } + end + +end diff --git a/lib/software_info.rb b/lib/software_info.rb index e5f511f..99aacd5 100644 --- a/lib/software_info.rb +++ b/lib/software_info.rb @@ -1,5 +1,7 @@ class SoftwareInfo < ActiveRecord::Base - attr_accessible :e_mag, :icp_brasil, :intern, :e_ping, :e_arq, :operating_platform, :demonstration_url, :acronym, :objectives, :features, :license_infos_id, :community_id, :finality, :repository_link, :public_software, :first_edit + attr_accessible :e_mag, :icp_brasil, :intern, :e_ping, :e_arq, :operating_platform + attr_accessible :demonstration_url, :acronym, :objectives, :features, :license_infos_id + attr_accessible :community_id, :finality, :repository_link, :public_software, :first_edit has_many :libraries, :dependent => :destroy has_many :software_databases @@ -54,6 +56,16 @@ class SoftwareInfo < ActiveRecord::Base true end + # if create_after_moderation receive a model object, would be possible to reuse core method + 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)) + end + + + def validate_acronym self.acronym = "" if self.acronym.nil? if self.acronym.length > 10 && self.errors.messages[:acronym].nil? -- libgit2 0.21.2