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)%>
+
- <%= 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 %>
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 %>
- <% 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 %>
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 @@
<%= f.text_area :bid_message, :id => "bid_message", :required => true, :rows => 4, :cols => 40, :placeholder => l(:label_bid_reason), :style => "resize: none;", :class => 'noline'%>
- <% end %>
+ <% end %>
<%= 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 != "" %>
+
+
+ <%= attachment.description %>
+
+
+ <% end %>
+ <% end %>
+
+
+
+
+
+
+
+
作业得分:
+
+
+
得分比例
+
+ <% 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