diff --git a/app/controllers/notificationcomments_controller.rb b/app/controllers/notificationcomments_controller.rb index 53563a53..6e4b12eb 100644 --- a/app/controllers/notificationcomments_controller.rb +++ b/app/controllers/notificationcomments_controller.rb @@ -1,35 +1,27 @@ class NotificationcommentsController < ApplicationController - default_search_scope :contestnotifications - model_object Contestnotifications - before_filter :find_model_object - before_filter :find_contest_from_association - before_filter :authorize + # default_search_scope :contestnotifications + # model_object Contestnotifications + # before_filter :authorize def create #raise Unauthorized unless @contestnotifications.notificationcommentable? + @contest = Contest.find(params[:contest_id]) + @contestnotification = Contestnotification.find(params[:contestnotification_id]) - @notificationcomment = Notificationcomment.new - @notificationcomment.safe_attributes = params[:notificationcomment] - @notificationcomment.author = User.current - if @contestnotifications.notificationcomments << @notificationcomment + @notificaioncomment = Notificationcomment.new + @notificaioncomment.safe_attributes = params[:notificaioncomment] + @notificaioncomment.author = User.current + if @contestnotification.notificationcomments << @notificaioncomment flash[:notice] = l(:label_comment_added) end - redirect_to contest_contestnotification_path(@contestnotifications) + #redirect_to contest_contestnotification_notificationcomment_path(@contest, @contestnotification, @notificaioncomment) + redirect_to contest_contestnotification_path(@contest, @contestnotification) end def destroy - @contestnotifications.notificationcomments.find(params[:notificationcomment_id]).destroy + @contestnotifications.notificaioncomments.find(params[:notificaioncomment_id]).destroy redirect_to contest_contestnotification_path(@contestnotifications) end - - private - - def find_model_object - super - @contestnotifications = @object - @notificationcomment = nil - @contestnotifications - end end diff --git a/app/models/contestnotification.rb b/app/models/contestnotification.rb index e9f6c9a6..c96a61d9 100644 --- a/app/models/contestnotification.rb +++ b/app/models/contestnotification.rb @@ -1,63 +1,63 @@ -class Contestnotification < ActiveRecord::Base - #attr_accessible :author_id, :notificationcomments_count, :contest_id, :description, :summary, :title - - include Redmine::SafeAttributes - #Contestnotification::Notificationcomment - belongs_to :contest - belongs_to :author, :class_name => 'User', :foreign_key => 'author_id' - has_many :notificationcomments, :as => :notificationcommented, :dependent => :delete_all, :order => "created_at" - # fq - has_many :acts, :class_name => 'Activity', :as => :act, :dependent => :destroy - - validates_presence_of :title, :description - validates_length_of :title, :maximum => 60 - validates_length_of :summary, :maximum => 255 - - acts_as_attachable :delete_permission => :manage_contestnotifications - acts_as_searchable :columns => ['title', 'summary', "#{table_name}.description"], :include => :contest - acts_as_event :url => Proc.new {|o| {:controller => 'contestnotifications', :action => 'show', :id => o.id}} - acts_as_activity_provider :find_options => {:include => [:contest, :author]}, - :author_key => :author_id - acts_as_watchable - - after_create :add_author_as_watcher - - after_create :act_as_activity - - - scope :visible, lambda {|*args| - nil - #includes(:contest).where(Contest.allowed_to_condition(args.shift || User.current, :view_contestnotifications, *args)) - } - - safe_attributes 'title', 'summary', 'description' - - def visible?(user=User.current) - !user.nil? && user.allowed_to?(:view_contestnotifications, contest) - end - - # Returns true if the news can be commented by user - def notificationcommentable?(user=User.current) - user.allowed_to?(:notificationcomment_contestnotifications, contest) - end - - def recipients - #contest.users.select {|user| user.notify_about?(self)}.map(&:mail) - end - - # returns latest news for contests visible by user - def self.latest(user = User.current, count = 5) - visible(user).includes([:author, :contest]).order("#{Contestnotification.table_name}.created_at DESC").limit(count).all - end - - private - - def add_author_as_watcher - #Watcher.create(:watchable => self, :user => author) - end - ## fq - def act_as_activity - self.acts << Activity.new(:user_id => self.author_id) - end - -end +class Contestnotification < ActiveRecord::Base + #attr_accessible :author_id, :notificationcomments_count, :contest_id, :description, :summary, :title + + include Redmine::SafeAttributes + #Contestnotification::Notificationcomment + belongs_to :contest + belongs_to :author, :class_name => 'User', :foreign_key => 'author_id' + has_many :notificationcomments, :dependent => :delete_all, :order => "created_at" + # fq + has_many :acts, :class_name => 'Activity', :as => :act, :dependent => :destroy + + validates_presence_of :title, :description + validates_length_of :title, :maximum => 60 + validates_length_of :summary, :maximum => 255 + + acts_as_attachable :delete_permission => :manage_contestnotifications + acts_as_searchable :columns => ['title', 'summary', "#{table_name}.description"], :include => :contest + acts_as_event :url => Proc.new {|o| {:controller => 'contestnotifications', :action => 'show', :id => o.id}} + acts_as_activity_provider :find_options => {:include => [:contest, :author]}, + :author_key => :author_id + acts_as_watchable + + after_create :add_author_as_watcher + + after_create :act_as_activity + + + scope :visible, lambda {|*args| + nil + #includes(:contest).where(Contest.allowed_to_condition(args.shift || User.current, :view_contestnotifications, *args)) + } + + safe_attributes 'title', 'summary', 'description' + + def visible?(user=User.current) + !user.nil? && user.allowed_to?(:view_contestnotifications, contest) + end + + # Returns true if the news can be commented by user + def notificationcommentable?(user=User.current) + user.allowed_to?(:notificationcomment_contestnotifications, contest) + end + + def recipients + #contest.users.select {|user| user.notify_about?(self)}.map(&:mail) + end + + # returns latest news for contests visible by user + def self.latest(user = User.current, count = 5) + visible(user).includes([:author, :contest]).order("#{Contestnotification.table_name}.created_at DESC").limit(count).all + end + + private + + def add_author_as_watcher + #Watcher.create(:watchable => self, :user => author) + end + ## fq + def act_as_activity + self.acts << Activity.new(:user_id => self.author_id) + end + +end diff --git a/app/models/notificationcomment.rb b/app/models/notificationcomment.rb index f8eb7020..9cc658f2 100644 --- a/app/models/notificationcomment.rb +++ b/app/models/notificationcomment.rb @@ -2,10 +2,10 @@ class Notificationcomment < ActiveRecord::Base attr_accessible :author_id, :notificationcommented_id, :notificationcommented_type, :notificationcomments include Redmine::SafeAttributes - belongs_to :notificationcommented, :polymorphic => true, :counter_cache => true + belongs_to :notificationcommented, :polymorphic => true#, :counter_cache => true belongs_to :author, :class_name => 'User', :foreign_key => 'author_id' validates_presence_of :notificationcommented, :author, :notificationcomments - safe_attributes 'notificationcomments' + # safe_attributes 'notificationcomments' end diff --git a/app/views/contestnotifications/show.html.erb b/app/views/contestnotifications/show.html.erb index 1a30a93e..dab3761b 100644 --- a/app/views/contestnotifications/show.html.erb +++ b/app/views/contestnotifications/show.html.erb @@ -1,88 +1,88 @@ - -
- <%= watcher_link(@contestnotification, User.current) %> - <%= link_to(l(:button_edit), - edit_contest_contestnotification_path(@contestnotification), - :class => 'icon icon-edit', - :accesskey => accesskey(:edit), - :onclick => '$("#edit-contestnotifications").show(); return false;') if User.current.allowed_to?(:manage_contestnotifications, @contest) %> - <%= delete_link contest_contestnotification_path(@contestnotification) if User.current.allowed_to?(:manage_contestnotifications, @contest) %> -
- -

<%=h @contestnotification.title %>

- -<% if authorize_for_contest('contestnotifications', 'edit') %> - -<% end %> - -
- -
- <%= textilizable(@contestnotification, :description) %> -
- <%#= link_to_attachments @contestnotification %> -
- - -

- <%= toggle_link l(:label_comment_add), "add_notificationcomment_form", :focus => "notificationcomment_notificationcomments" %> -

- <%= form_tag({:controller => 'notificationcomments', :action => 'create', :id => @contestnotification}, :id => "add_notificationcomment_form", :style => "display:none;") do %> -
- <%= text_area 'notificationcomment', 'notificationcomments', :cols => 80, :rows => 15, :class => 'wiki-edit' %> - <%= wikitoolbar_for 'notificationcomment_notificationcomments' %> -
-

- <%= submit_tag l(:button_add) %> -

- <% end %> - - - <% html_title @contestnotification.title -%> - - <% content_for :header_tags do %> - <%= stylesheet_link_tag 'scm' %> - <% end %> - - -
-
-

<%= l(:label_comment_plural) %>

- <% notificationcomments = @notificationcomments.reverse %> - <% notificationcomments.each do |notificationcomment| %> - <% next if notificationcomment.new_record? %> - - - - - -
<%= image_tag(url_to_avatar(notificationcomment.author), :class => "avatar")%> - - - - - - - - - - - -
<%= link_to_user(notificationcomment.author) if notificationcomment.respond_to?(:author) %> <%= l(:label_project_newadd) %><%= l(:label_comment_plural) %>
-

- <%= textilizable(notificationcomment.notificationcomments) %> -

<%= format_time(notificationcomment.created_at) %><%= link_to_if_authorized_contest image_tag('delete.png'), {:controller => 'notificationcomments', :action => 'destroy', :id => @contestnotifications, :notificationcomment_id => notificationcomment}, - :data => {:confirm => l(:text_are_you_sure)}, :method => :delete, :title => l(:button_delete) %>
- <% end if @notificationcomments.any? %> -
- - + +
+ <%= watcher_link(@contestnotification, User.current) %> + <%= link_to(l(:button_edit), + edit_contest_contestnotification_path(@contestnotification), + :class => 'icon icon-edit', + :accesskey => accesskey(:edit), + :onclick => '$("#edit-contestnotifications").show(); return false;') if User.current.allowed_to?(:manage_contestnotifications, @contest) %> + <%= delete_link contest_contestnotification_path(@contestnotification) if User.current.allowed_to?(:manage_contestnotifications, @contest) %> +
+ +

<%=h @contestnotification.title %>

+ +<% if authorize_for_contest('contestnotifications', 'edit') %> + +<% end %> + +
+ +
+ <%= textilizable(@contestnotification, :description) %> +
+ <%#= link_to_attachments @contestnotification %> +
+ + +

+ <%= toggle_link l(:label_comment_add), "add_notificationcomment_form", :focus => "notificationcomment_notificationcomments" %> +

+ <%= form_tag( contest_contestnotification_notificationcomments_path(@contest, @contestnotification) , :id => "add_notificationcomment_form", :style => "display:none;") do %> +
+ <%= text_area 'notificationcomment', 'notificationcomments', :cols => 80, :rows => 15, :class => 'wiki-edit' %> + <%= wikitoolbar_for 'notificationcomment_notificationcomments' %> +
+

+ <%= submit_tag l(:button_add) %> +

+ <% end %> + + + <% html_title @contestnotification.title -%> + + <% content_for :header_tags do %> + <%= stylesheet_link_tag 'scm' %> + <% end %> + + +
+
+

<%= l(:label_comment_plural) %>

+ <% notificationcomments = @notificationcomments.reverse %> + <% notificationcomments.each do |notificationcomment| %> + <% next if notificationcomment.new_record? %> + + + + + +
<%= image_tag(url_to_avatar(notificationcomment.author), :class => "avatar")%> + + + + + + + + + + + +
<%= link_to_user(notificationcomment.author) if notificationcomment.respond_to?(:author) %> <%= l(:label_project_newadd) %><%= l(:label_comment_plural) %>
+

+ <%= textilizable(notificationcomment.notificationcomments) %> +

<%= format_time(notificationcomment.created_at) %><%= link_to_if_authorized_contest image_tag('delete.png'), {:controller => 'notificationcomments', :action => 'destroy', :id => @contestnotifications, :notificationcomment_id => notificationcomment}, + :data => {:confirm => l(:text_are_you_sure)}, :method => :delete, :title => l(:button_delete) %>
+ <% end if @notificationcomments.any? %> +
+ + diff --git a/config/routes.rb b/config/routes.rb index a93d1724..3ba384a8 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -71,12 +71,15 @@ RedmineApp::Application.routes.draw do end #resources :contestnotifications, :only => [:index, :show, :edit, :update, :destroy] - match '/contestnotifications/:id/notificationcomments', :to => 'notificationcomments#create', :via => :post - match '/contestnotifications/:id/notificationcomments/:notificationcomment_id', :to => 'notificationcomments#destroy', :via => :delete - match '/contestnotifications/preview', :controller => 'previews', :action => 'contestnotifications', :as => 'preview_contestnotifications', :via => [:get, :post, :put] + # match '/contestnotifications/:id/notificationcomments', :to => 'notificationcomments#create', :via => :post + # match '/contestnotifications/:id/notificationcomments/:notificationcomment_id', :to => 'notificationcomments#destroy', :via => :delete + # match '/contestnotifications/preview', :controller => 'previews', :action => 'contestnotifications', :as => 'preview_contestnotifications', :via => [:get, :post, :put] ## new added by linchun #新竞赛相关 resources :contests, only: [:index] do - resources :contestnotifications + resources :contestnotifications do + resources :notificationcomments + end + collection do match 'new_contest' , via: :get match 'join_in_contest' , via: :post