diff --git a/plugins/communities_ratings/controllers/communities_ratings_plugin_admin_controller.rb b/plugins/communities_ratings/controllers/communities_ratings_plugin_admin_controller.rb new file mode 100644 index 0000000..bcd123c --- /dev/null +++ b/plugins/communities_ratings/controllers/communities_ratings_plugin_admin_controller.rb @@ -0,0 +1,17 @@ +class CommunitiesRatingsPluginAdminController < PluginAdminController + + append_view_path File.join(File.dirname(__FILE__) + '/../views') + + def index + end + + def update + if @environment.update_attributes(params[:environment]) + session[:notice] = _('Configuration updated successfully.') + else + session[:notice] = _('Configuration could not be saved.') + end + render :action => 'index' + end + +end \ No newline at end of file diff --git a/plugins/communities_ratings/controllers/communities_ratings_plugin_profile_controller.rb b/plugins/communities_ratings/controllers/communities_ratings_plugin_profile_controller.rb index b123c7c..ca06603 100644 --- a/plugins/communities_ratings/controllers/communities_ratings_plugin_profile_controller.rb +++ b/plugins/communities_ratings/controllers/communities_ratings_plugin_profile_controller.rb @@ -2,45 +2,49 @@ class CommunitiesRatingsPluginProfileController < ProfileController before_filter :login_required def new_rating - @plugins = plugins - community_rating = get_community_rating(user, profile, params[:community_rating_value]) - @actual_rate_value = if community_rating.value - community_rating.value - else - 0 - end + @rating_available = can_rate_now? + return unless @rating_available + + # @plugins = plugins + @default_rate = environment.communities_ratings_default_rating + @min_rate = Environment.communities_ratings_min_rating if request.post? - if params[:comments] and not params[:comments][:body].empty? + + unless params[:comments].blank? and params[:comments][:body].empty? comment = Comment.new(params[:comments]) comment.author = current_user.person comment.community = profile comment.save + community_rating = CommunityRating.new( + :person => current_user.person, + :community => profile, + :value => params[:community_rating_value] + ) community_rating.comment = comment end - community_rating.save! - session[:notice] = _("#{profile.name} successfully rated") + if community_rating.save + session[:notice] = _("#{profile.name} successfully rated!") + redirect_to :controller => 'profile', :action => 'index' + else + session[:notice] = _("Sorry, there were problems rating this profile.") + end end end private - # If there is already a rate by the current logged user to this community - # return it or else, prepare a new one - def get_community_rating person, community, community_rating_value=nil - already_rated = CommunityRating.where( - :community_id=>community.id, - :person_id=>person.id + def can_rate_now? + ratings = CommunityRating.where( + :community_id=>profile.id, + :person_id=>user.id ) - if already_rated.count != 0 - already_rated.first - else - CommunityRating.new :person => person, - :community => community, - :value => community_rating_value - end + return true if ratings.empty? + + elapsed_time_since_last_rating = Time.zone.now - ratings.last.created_at + elapsed_time_since_last_rating > environment.communities_ratings_cooldown.hours end end diff --git a/plugins/communities_ratings/db/migrate/20150710171028_add_communities_rating_config_to_environment.rb b/plugins/communities_ratings/db/migrate/20150710171028_add_communities_rating_config_to_environment.rb new file mode 100644 index 0000000..bc7c5fa --- /dev/null +++ b/plugins/communities_ratings/db/migrate/20150710171028_add_communities_rating_config_to_environment.rb @@ -0,0 +1,6 @@ +class AddCommunitiesRatingConfigToEnvironment < ActiveRecord::Migration + def change + add_column :environments, :communities_ratings_cooldown, :integer, :default => 24 + add_column :environments, :communities_ratings_default_rating, :integer, :default => 1 + end +end diff --git a/plugins/communities_ratings/lib/ext/environment.rb b/plugins/communities_ratings/lib/ext/environment.rb new file mode 100644 index 0000000..9b2bb23 --- /dev/null +++ b/plugins/communities_ratings/lib/ext/environment.rb @@ -0,0 +1,17 @@ +require_dependency 'environment' + +Environment.class_eval do + attr_accessible :communities_ratings_cooldown, :communities_ratings_default_rating + + def self.communities_ratings_min_rating + return 1 + end + + validates :communities_ratings_default_rating, + :presence => true, :inclusion => { + :in => (self.communities_ratings_min_rating)..5, message: _("must be between 0 and 5") + } + + validates :communities_ratings_cooldown, + :numericality => {greater_than_or_equal_to: 0} +end \ No newline at end of file diff --git a/plugins/communities_ratings/public/rate.js b/plugins/communities_ratings/public/rate.js index e8a4664..3094ad6 100644 --- a/plugins/communities_ratings/public/rate.js +++ b/plugins/communities_ratings/public/rate.js @@ -19,7 +19,9 @@ */ function set_global_data() { var selected_rate = parseInt($("#selected-star-rate").val()); + var MINIMUM_STARS = parseInt($("#MINIMUM_STARS").val()); DATA.selected_rate = selected_rate; + DATA.MINIMUM_STARS = MINIMUM_STARS; } @@ -94,10 +96,10 @@ var rate_mouseover = parseInt(this.getAttribute(DATA.DATA_RATE_ATTRIBUTE)); // If the new rate is different from actual, update it - if (rate_mouseover !== DATA.selected_rate) { + if (rate_mouseover !== DATA.selected_rate && rate_mouseover > DATA.MINIMUM_STARS) { DATA.selected_rate = rate_mouseover; } else { // or else, uncheck it - DATA.selected_rate = DATA.NOT_SELECTED_VALUE; + DATA.selected_rate = DATA.MINIMUM_STARS; } // Mark the selected_rate diff --git a/plugins/communities_ratings/views/communities_ratings_plugin_admin/index.html.erb b/plugins/communities_ratings/views/communities_ratings_plugin_admin/index.html.erb new file mode 100644 index 0000000..5603167 --- /dev/null +++ b/plugins/communities_ratings/views/communities_ratings_plugin_admin/index.html.erb @@ -0,0 +1,30 @@ +
<%= c_('Configuration') %> | +<%= _('Value') %> | +
---|---|
<%= _('Default amount of stars marked on evaluations') %> | +<%= select :environment, :communities_ratings_default_rating, (Environment.communities_ratings_min_rating)..5 %> | +
<%= _('Time cooldown between evaluations from the same user') %> | +<%= text_field :environment, :communities_ratings_cooldown, {size: 1} %> + <%= _('hours') %> + | +