diff --git a/app/controllers/account_controller.rb b/app/controllers/account_controller.rb index cf39898fe..af8487868 100644 --- a/app/controllers/account_controller.rb +++ b/app/controllers/account_controller.rb @@ -276,10 +276,18 @@ class AccountController < ApplicationController set_autologin_cookie(user) end call_hook(:controller_account_success_authentication_after, {:user => user }) - #by young -# redirect_back_or_default my_page_path - redirect_back_or_default User.current -# redirect_to User.current + + code = /\d*/ + #根据home_url生产正则表达式 + eval("code = " + "/^" + home_url.gsub(/\//,"\\\/") + "\\\/*(welcome)?\\\/*(\\\/index\\\/*.*)?\$/") + if code=~params[:back_url] + redirect_to user_activities_path(user) + else + #by young + #redirect_back_or_default my_page_path + redirect_back_or_default User.current + #redirect_to User.current + end end def set_autologin_cookie(user) diff --git a/app/controllers/bids_controller.rb b/app/controllers/bids_controller.rb index 206421e5d..2273de4e4 100644 --- a/app/controllers/bids_controller.rb +++ b/app/controllers/bids_controller.rb @@ -18,6 +18,8 @@ class BidsController < ApplicationController helper :attachments include AttachmentsHelper include ApplicationHelper + include BidsHelper + helper :projects helper :words helper :welcome @@ -503,10 +505,12 @@ class BidsController < ApplicationController #删除已提交的项目作业(不删项目) def delete binding_project = params[:binding_project] - if BidingProject.delete(binding_project) - redirect_to project_for_bid_path - else - redirect_to 403; + if can_delete_project_homework(BidingProject.find(binding_project),User.current) + if BidingProject.delete(binding_project) + redirect_to project_for_bid_path + else + redirect_to 403; + end end end ## 新建留言 @@ -728,9 +732,9 @@ class BidsController < ApplicationController def update @bid = Bid.find(params[:id]) @project = @bid.courses.first#Project.find(params[:course_id]) - if @bid.update_attributes(params[:bid]) + @bid.save_attachments(params[:attachments] || (params[:bid] && params[:bid][:uploads])) + if @bid.update_attributes(params[:bid]) && @bid.save flash[:notice] = l(:label_update_homework_succeed) - #@project = Project.find(params[:course_id]) redirect_to project_homework_path(@project) else @bid.safe_attributes = params[:bid] diff --git a/app/controllers/homework_attach_controller.rb b/app/controllers/homework_attach_controller.rb new file mode 100644 index 000000000..01578eab3 --- /dev/null +++ b/app/controllers/homework_attach_controller.rb @@ -0,0 +1,61 @@ +class HomeworkAttachController < ApplicationController + #显示作业信息 + def show + @homework = HomeworkAttach.find(params[:id]) + # 打分统计 + stars_reates = @homework. + rates(:quality) + stars_reates_count = stars_reates.count == 0 ? 1 : stars_reates.count + stars_status = stars_reates.select("stars, count(*) as scount"). + group("stars") + @stars_status_map = Hash.new(0.0) + stars_status.each do |star_status| + percent = (star_status.scount * 1.0/ stars_reates_count) * 100.to_f + percent_m = format("%.2f", percent) + @stars_status_map["star#{star_status.stars.to_i}".to_sym] = + percent_m.to_s + "%" + end + @jours = @homework.journals_for_messages.order("created_on DESC") + @limit = 10 + @feedback_count = @jours.count + @feedback_pages = Paginator.new @feedback_count, @limit, params['page'] + @offset ||= @feedback_pages.offset + @jour = @jours[@offset, @limit] + end + + #删除留言 + def destroy + @journal_destroyed = JournalsForMessage.delete_message(params[:object_id]) + respond_to do |format| + format.js + end + end + + #添加留言 + def addjours + @homework = HomeworkAttach.find(params[:jour_id]) + @homework.addjours User.current.id, params[:new_form][:user_message],0 + @jours = @homework.journals_for_messages.order("created_on DESC") + @limit = 10 + @feedback_count = @jours.count + @feedback_pages = Paginator.new @feedback_count, @limit, params['page'] + @offset ||= @feedback_pages.offset + @jour = @jours[@offset, @limit] + respond_to do |format| + format.js + end + end + + #获取指定作业的平均得分 + def score + #stars_reates = @homework.rates(:quality) + #percent = 0 + #stars_reates.each do |star_reates| + # percent = percent + star_reates.stars + #end + #stars_reates_count = stars_reates.count == 0 ? 1 : stars_reates.count + #result = percent * 1.0 / stars_reates_count + #result + end +end + diff --git a/app/helpers/bids_helper.rb b/app/helpers/bids_helper.rb index bd39d6c28..38b32e692 100644 --- a/app/helpers/bids_helper.rb +++ b/app/helpers/bids_helper.rb @@ -151,4 +151,8 @@ module BidsHelper tmp end + def can_delete_project_homework bind_project,current_user + current_user.id == bind_project.user.id || current_user.admin + end + end \ No newline at end of file diff --git a/app/models/homework_attach.rb b/app/models/homework_attach.rb index fb743ab5c..d112ead50 100644 --- a/app/models/homework_attach.rb +++ b/app/models/homework_attach.rb @@ -2,9 +2,26 @@ class HomeworkAttach < ActiveRecord::Base include Redmine::SafeAttributes belongs_to :user belongs_to :bid + has_many :journals_for_messages, :as => :jour, :dependent => :destroy + seems_rateable :allow_update => true, :dimensions => :quality safe_attributes "bid_id", "user_id" acts_as_attachable - + + def addjours user_id,message,status = 0 + jfm = self.journals_for_messages.build(:user_id => user_id,:notes =>message,:status => status) + jfm.save + jfm + end + + def score + stars_reates = self.rates(:quality) + percent = 0 + stars_reates.each do |star_reates| + percent = percent + star_reates.stars + end + result = percent * 1.0 / stars_reates.count + result + end end diff --git a/app/models/journals_for_message.rb b/app/models/journals_for_message.rb index 2c4f10886..575737401 100644 --- a/app/models/journals_for_message.rb +++ b/app/models/journals_for_message.rb @@ -21,6 +21,7 @@ class JournalsForMessage < ActiveRecord::Base belongs_to :jour, :polymorphic => true belongs_to :user + belongs_to :homework_attach belongs_to :at_user, :class_name => "User", :foreign_key => 'reply_id' acts_as_event :title => Proc.new {|o| "#{l(:label_my_message)}"}, diff --git a/app/views/attachments/_app_link.html.erb b/app/views/attachments/_app_link.html.erb index ecef4dda3..6934b76e1 100644 --- a/app/views/attachments/_app_link.html.erb +++ b/app/views/attachments/_app_link.html.erb @@ -1,10 +1,15 @@ -<% for attachment in attachments %><%= link_to_attachment attachment, :class => 'icon icon-attachment', :download => true -%> - <% if attachment.is_text? %> +<% for attachment in attachments %> + <% if attachments.count > 1 && attachment != attachments.first%> +
                 + <% end %> + <%= link_to_attachment attachment, :class => 'icon icon-attachment', :download => true -%> + <% if attachment.is_text? %> <%= link_to image_tag('magnifier.png'), :controller => 'attachments', :action => 'show', :id => attachment, :filename => attachment.filename %> <% end %> <%= h(" - #{attachment.description}") unless attachment.description.blank? %> (<%= number_to_human_size attachment.filesize %>) + <% end -%> diff --git a/app/views/attachments/_form.html.erb b/app/views/attachments/_form.html.erb index ce4ffbea1..bdf65a96f 100644 --- a/app/views/attachments/_form.html.erb +++ b/app/views/attachments/_form.html.erb @@ -1,10 +1,10 @@ <% if defined?(container) && container && container.saved_attachments %> - <% container.saved_attachments.each_with_index do |attachment, i| %> - - <%= text_field_tag("attachments[p#{i}][filename]", attachment.filename, :class => 'filename', :maxlength => 10)%> - - <%= text_field_tag("attachments[p#{i}][description]", attachment.description, :maxlength => 155, :placeholder => l(:label_optional_description), :class => 'description') + + <% container.attachments.each_with_index do |attachment, i| %> + + <%= text_field_tag("attachments[p#{i}][filename]", attachment.filename, :class => 'filename readonly', :readonly=>'readonly')%> + + <%= text_field_tag("attachments[p#{i}][description]", attachment.description, :maxlength => 255, :placeholder => l(:label_optional_description), :class => 'description', :style=>"display: inline-block;") + link_to(' '.html_safe, attachment_path(attachment, :attachment_id => "p#{i}", :format => 'js'), :method => 'delete', :remote => true, :class => 'remove-upload') %> <%= render :partial => 'tags/tag', :locals => {:obj => attachment, :object_flag => "6"} %> <%= hidden_field_tag "attachments[p#{i}][token]", "#{attachment.token}" %> diff --git a/app/views/bids/_homework_form.html.erb b/app/views/bids/_homework_form.html.erb index fe6f35fb3..6d9230a91 100644 --- a/app/views/bids/_homework_form.html.erb +++ b/app/views/bids/_homework_form.html.erb @@ -37,5 +37,5 @@

<%= hidden_field_tag 'course_id', @project_id %>

<%= l(:label_attachment_plural) %> -

<%= render :partial => 'attachments/form', :locals => {:container => @homework} %>

+

<%= render :partial => 'attachments/form', :locals => {:container => @bid} %>

\ No newline at end of file diff --git a/app/views/bids/_homework_list.html.erb b/app/views/bids/_homework_list.html.erb index 8f87a6b37..35c414699 100644 --- a/app/views/bids/_homework_list.html.erb +++ b/app/views/bids/_homework_list.html.erb @@ -25,8 +25,31 @@ <%= image_tag(url_to_avatar(homework.user), :class => "avatar")%> +    作业   :  + <% filename = "" %> + <% homework.attachments.map do |attachment| %> + <% filename = attachment.filename %> + <% if homework.attachments.count > 1%> + <% filename += "等#{homework.attachments.count}个文件" %> + <% end %> + <% break %> + <% end %> + <%= link_to filename , homework_attach_path(homework)%> + - + + diff --git a/app/views/bids/_list_projects.html.erb b/app/views/bids/_list_projects.html.erb index e51314c48..ce24a4457 100644 --- a/app/views/bids/_list_projects.html.erb +++ b/app/views/bids/_list_projects.html.erb @@ -154,9 +154,9 @@ <% end %> diff --git a/app/views/bids/show_project.html.erb b/app/views/bids/show_project.html.erb index d22ddded6..02ef72e7c 100644 --- a/app/views/bids/show_project.html.erb +++ b/app/views/bids/show_project.html.erb @@ -60,7 +60,6 @@ $("#put-bid-form").hide(); } - <% if User.current.logged? %> @@ -89,15 +88,15 @@ - <% end %> + <% end %>
<%= link_to homework.user, user_path(homework.user)%> 已提交  + 发布人:  <%= link_to homework.user, user_path(homework.user)%> + + 作业评分: + <% stars_reates = homework.rates(:quality) %> + <% sum = 0 %> + <% stars_reates.each do |star_reates| %> + <% sum = sum + star_reates.stars %> + <% end %> + <% stars_reates_count = stars_reates.count == 0 ? 1 : stars_reates.count %> + <%= sum * 1.0 / stars_reates_count %> + <% if Time.parse(@bid.deadline.to_s) < Time.parse(homework.attachments[0].created_on.to_s) %> 迟交 @@ -36,7 +59,7 @@
  <% if display_id %> - <%= l(:label_bidding_user_studentcode) %> :<%= homework.user.user_extensions.student_id%> + <%= l(:label_bidding_user_studentcode) %>  : <%= homework.user.user_extensions.student_id%> <% end %>
- <% if b_project.user.id == User.current.id || User.current.id == b_project.bid.author.id + <% if can_delete_project_homework b_project,User.current %> - <%= link_to image_tag('delete.png'),{ :action => "delete", :binding_project => b_project}, :confirm => "Are you sure?" %> + <%= link_to image_tag('delete.png'),{ :action => "delete", :binding_project => b_project}, :confirm => l(:text_are_you_sure) %> <% end %>
<%= f.text_area :bid_message, :id => "bid_message", :required => true, :rows => 4, :cols => 40, :placeholder => l(:label_bid_reason), :style => "resize: none;", :class => 'noline'%>
<%= submit_tag l(:button_add), :name => nil , :class => "enterprise", :onmouseout => "this.style.backgroundPosition = 'left top'", :onmouseover => "this.style.backgroundPosition = 'left -30px'"%> - <%= submit_tag l(:button_cancel), :name => nil, :onclick => "cancel();", + <%= submit_tag l(:button_cancel), :name => nil, :onclick => "cancel();", :type => 'button', :class => "enterprise", :onmouseout => "this.style.backgroundPosition = 'left top'", - :onmouseover => "this.style.backgroundPosition = 'left -30px'" %> + :onmouseover => "this.style.backgroundPosition = 'left -30px'" %>
diff --git a/app/views/homework_attach/_addjour.html.erb b/app/views/homework_attach/_addjour.html.erb new file mode 100644 index 000000000..a5e7bed66 --- /dev/null +++ b/app/views/homework_attach/_addjour.html.erb @@ -0,0 +1,93 @@ + + + + + +<%= form_for('new_form', :remote => true, :method => :post, + :url => {:controller => 'homework_attach', + :action => 'addjours', + :jour_id => homework_attach.id, + :sta => sta}) do |f|%> + +
+ <%= render :partial => 'words/pre_show', :locals => {:content => @content} %> +
+ + <% if User.current.logged? %> + + + + +
<%= f.text_area 'user_message', :rows => 3, :cols => 65, :value => "#{l(:label_leave_a_message)}", + :onfocus => "clearInfo('new_form_user_message','#{l(:label_leave_a_message)}')", + :onblur => "showInfo('new_form_user_message','#{l(:label_leave_a_message)}')", + :style => "resize: none;", :class => 'noline'%>
+ <%= f.text_field :reference_user_id, :style=>"display:none"%> + + + + +
<%= submit_tag l(:button_leave_meassge), + :name => nil , :class => "enterprise", + :onmouseout => "this.style.backgroundPosition = 'left top'", + :onmouseover => "this.style.backgroundPosition = 'left -31px'"%> + <%= submit_tag l(:button_clear), :name => nil, :class => "enterprise", + :onclick => "clearMessage('new_form_user_message');", + :onmouseout => "this.style.backgroundPosition = 'left top'", + :onmouseover => "this.style.backgroundPosition = 'left -31px'" %>
+ <% else %> +
+ <%= l(:label_user_login_tips) %> + <%= link_to l(:label_user_login_new), signin_path %> +
+ <% end %> +<% end %> diff --git a/app/views/homework_attach/_pre_show.html.erb b/app/views/homework_attach/_pre_show.html.erb new file mode 100644 index 000000000..1fb643183 --- /dev/null +++ b/app/views/homework_attach/_pre_show.html.erb @@ -0,0 +1,11 @@ + +<% unless content.nil?%> + + + + + + + +
<%= textilizable content %>
<%= hidden_field_tag 'reference_content', params[:reference_content], :value => content%>
+<% end %> diff --git a/app/views/homework_attach/_showjour.html.erb b/app/views/homework_attach/_showjour.html.erb new file mode 100644 index 000000000..f810082c9 --- /dev/null +++ b/app/views/homework_attach/_showjour.html.erb @@ -0,0 +1,64 @@ + +<% if jour.size > 0 %> +
    + <% for journal in jour%> +
  • + <%= image_tag(url_to_avatar(journal.user), :class => "avatar") %> + + <%= link_to journal.user, user_path(journal.user)%> + <% label = l(:label_contest_requirement) %> +
    <%= textilizable journal.notes%>
    + <%= l(:label_bids_published) %> +  <%= time_tag(journal.created_on).html_safe %>  + <%= l(:label_bids_published_ago) %> + + <% ids = 'project_respond_form_'+ journal.id.to_s%> + + + <% if journal.user==User.current|| User.current.admin? %> + <%= link_to(l(:label_bid_respond_delete), {:controller => 'homework_attach', :action => 'destroy', :object_id => journal, :user_id => journal.user}, + :remote => true, :confirm => l(:text_are_you_sure), :method => 'delete', :class => "delete", :title => l(:button_delete)) %> + <% end %> + +
    +
    +
  • + <% end %> +
+<% end %> \ No newline at end of file diff --git a/app/views/homework_attach/addjours.js.erb b/app/views/homework_attach/addjours.js.erb new file mode 100644 index 000000000..e463237e5 --- /dev/null +++ b/app/views/homework_attach/addjours.js.erb @@ -0,0 +1,4 @@ +$('#message').html('<%= escape_javascript(render(:partial => 'showjour', :locals => {:jour =>@jour, :state => false} )) %>'); +$('#pre_show').html('<%= escape_javascript(render(:partial => 'pre_show', :locals => {:content => nil})) %>'); +$('#new_form_user_message').val(""); +$('#new_form_reference_user_id').val(""); \ No newline at end of file diff --git a/app/views/homework_attach/destroy.js.erb b/app/views/homework_attach/destroy.js.erb new file mode 100644 index 000000000..f3d9a7bef --- /dev/null +++ b/app/views/homework_attach/destroy.js.erb @@ -0,0 +1,11 @@ +<% if @journal_destroyed.nil? %> + alert('<%=l(:notice_failed_delete)%>'); +<% elsif (['Principal','Project', 'Bid', 'Contest', 'Softapplication','HomeworkAttach'].include? @journal_destroyed.jour_type)%> + var destroyedItem = $('#word_li_<%=@journal_destroyed.id%>') + destroyedItem.fadeOut(600,function(){ + destroyedItem.remove(); + }); +<% else %> + $('#message').html('<%= escape_javascript(render(:partial => 'showjour', :locals => {:jour => @jour, :state => false})) %>'); + $('#new_form_reference_user_id').val(""); +<% end %> diff --git a/app/views/homework_attach/show.html.erb b/app/views/homework_attach/show.html.erb new file mode 100644 index 000000000..1400176c2 --- /dev/null +++ b/app/views/homework_attach/show.html.erb @@ -0,0 +1,125 @@ + + +

<%= notice %>

+ +
+ + + + + + + + + + + + + + + + + + + + + +
作业基础信息<%=@count %>
发布人员:<%= link_to @homework.user, user_path(@homework.user)%>发布时间:<%=format_time @homework.created_at %>
+ 作业下载: + <% options = {:author => true } %> + <%= render :partial => 'attachments/app_link', :locals => {:attachments => @homework.attachments, :options => options} %> + 所属任务:<%= link_to(@homework.bid.name, project_for_bid_path(@homework.bid))%>
平均评分: + <%= rating_for @homework, :static => true, dimension: :quality, class: 'rateable div_inline' %> +
+ + +
+
+ +
+ + + + + + + + + <% @homework.attachments.map do |attachment| %> + <% if attachment.description != nil && attachment.description != "" %> + + + + <% end %> + <% end %> +
作业描述:
+
<%= attachment.description %>
+
+ + +
+
+ +
+
作业得分:
+
+
+
得分比例
+
+ <% 100.step(20,-20) do |star| %> +
+
+
+
+
+
+ <%= @stars_status_map["star#{(star/20).to_s}".to_sym] %> +
+ <% end %> +
+
+
+
最终得分
+
+ <%= rating_for @homework, :static => true, dimension: :quality, class: 'rateable div_inline' %> +
+
+
+
打分总人数
+
+ + <%= @homework.raters(:quality).count%> + +
+
+
+
+
+ +
+
作业评论:
+
评分: + <%= rating_for @homework, dimension: :quality, class: 'rateable div_inline' %> + (您可以重新打分,打分结果以最后一次打分为主!) +
+ +
+ + +
+ <%= render :partial => 'addjour', :locals => {:homework_attach => @homework, :sta => 0} %> +
+ + +
+ <%= render :partial => 'showjour', :locals => {:jour => @jours} %> +
+
+<%#= link_to '返回竞赛页面', show_softapplication_contest_path(@softapplication.contest) %> +
diff --git a/app/views/softapplications/_new_message.erb b/app/views/softapplications/_new_message.erb index 321c7911f..ff63a3675 100644 --- a/app/views/softapplications/_new_message.erb +++ b/app/views/softapplications/_new_message.erb @@ -15,7 +15,7 @@ } -<%= form_for('softapplication_message', +<%= form_for('softapplication_message', :remote => true, :method => :post, :url => {:controller => 'softapplications', :action => 'create_message', @@ -23,19 +23,19 @@ :sta => sta} ) do |f|%> -
+
<%= render :partial => 'pre_show', :locals => {:content => @content} %>
- + <% if User.current.logged? %>
<%= f.text_area 'message', :rows => 3, :cols => 65, :placeholder => l(:label_my_respond), :style => "resize: none;", :class => 'noline'%>
- + <%= f.text_field :reference_user_id, :style=>"display:none"%> - + diff --git a/app/views/words/_message.html.erb b/app/views/words/_message.html.erb index 6b002746e..3e066a513 100644 --- a/app/views/words/_message.html.erb +++ b/app/views/words/_message.html.erb @@ -54,7 +54,7 @@ function checkMaxLength() { <%= link_to l(:label_projects_feedback_respond),'', {:focus => 'project_respond', :onclick => "toggleAndSettingWordsVal($('##{ids}'), $('##{ids} textarea'), '#{l(:label_reply_plural)} #{journal.user.name}: '); $('##{ids} textarea') ;return false;"} %> - <% end %> + <% end %> <% if @user == User.current || User.current.admin? || journal.user.id == User.current.id %> <%= link_to(l(:label_newfeedback_delete), {:controller => 'words', :action => 'destroy', :object_id => journal, :user_id => user}, :remote => true, :confirm => l(:text_are_you_sure), :method => 'delete', :class => "delete", :title => l(:button_delete)) %> diff --git a/config/routes.rb b/config/routes.rb index a3f4b4149..194776853 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -22,7 +22,8 @@ RedmineApp::Application.routes.draw do resources :apply_project_masters delete 'apply_project_masters', :to => 'apply_project_masters#delete' - + resources :homework_attach + match 'homework_attach/addjours', :controller => 'homework_attach', :action => 'addjours', :via => [:get,:post] resources :open_source_projects do collection do match 'search', via: [:get, :post] diff --git a/public/images/edit.png b/public/images/edit.png new file mode 100644 index 000000000..8335716fd Binary files /dev/null and b/public/images/edit.png differ