diff --git a/app/controllers/courses_controller.rb b/app/controllers/courses_controller.rb
index e89f621c8..61354add7 100644
--- a/app/controllers/courses_controller.rb
+++ b/app/controllers/courses_controller.rb
@@ -94,6 +94,9 @@ class CoursesController < ApplicationController
def new_join
@course = Course.find(params[:object_id])
+ respond_to do |format|
+ format.js
+ end
end
# 课程搜索
@@ -340,8 +343,8 @@ class CoursesController < ApplicationController
def export_course_member_excel
@all_members = student_homework_score(0,0,0,"desc")
filename="#{@course.teacher.lastname.to_s + @course.teacher.firstname.to_s }_#{@course.name}_#{@course.time.to_s + @course.term}#{l(:excel_member_list)}";
- # 如果是ie11 需要转码
- if(/rv\:11\.0/.match(request.env["HTTP_USER_AGENT"]) != nil)
+ # 如果是ie 需要转码
+ if(/trident/.match(request.env["HTTP_USER_AGENT"]) != nil)
filename= URI::encode(filename)
end
respond_to do |format|
@@ -836,7 +839,7 @@ class CoursesController < ApplicationController
sql_select = ""
if groupid == 0
sql_select = "SELECT members.*,(
- SELECT SUM(student_works.final_score)
+ SELECT AVG(student_works.final_score)
FROM student_works,homework_commons
WHERE student_works.homework_common_id = homework_commons.id
AND homework_commons.course_id = #{@course.id}
@@ -848,7 +851,7 @@ class CoursesController < ApplicationController
WHERE members.course_id = #{@course.id} ORDER BY score #{score_sort_by}"
else
sql_select = "SELECT members.*,(
- SELECT SUM(student_works.final_score)
+ SELECT AVG(student_works.final_score)
FROM student_works,homework_commons
WHERE student_works.homework_common_id = homework_commons.id
AND homework_commons.course_id = #{@course.id}
diff --git a/app/controllers/poll_controller.rb b/app/controllers/poll_controller.rb
index 32ec3dad2..a222314ab 100644
--- a/app/controllers/poll_controller.rb
+++ b/app/controllers/poll_controller.rb
@@ -1,8 +1,8 @@
class PollController < ApplicationController
- before_filter :find_poll_and_course, :only => [:edit,:update,:destroy,:show,:statistics_result,:create_poll_question,:commit_poll,:commit_answer,:publish_poll,:republish_poll,:poll_result,:close_poll]
+ before_filter :find_poll_and_course, :only => [:edit,:update,:destroy,:show,:statistics_result,:create_poll_question,:commit_poll,:commit_answer,:publish_poll,:republish_poll,:poll_result,:close_poll,:export_poll]
before_filter :find_container, :only => [:new,:create, :index]
before_filter :is_member_of_course, :only => [:index,:show,:poll_result]
- before_filter :is_course_teacher, :only => [:new,:create,:edit,:update,:destroy,:publish_poll,:republish_poll,:close_poll]
+ before_filter :is_course_teacher, :only => [:new,:create,:edit,:update,:destroy,:publish_poll,:republish_poll,:close_poll,:export_poll]
include PollHelper
def index
if @course
@@ -360,6 +360,17 @@ class PollController < ApplicationController
end
end
+ #导出问卷
+ def export_poll
+ poll_questions = @poll.poll_questions
+ respond_to do |format|
+ format.xls {
+ send_data(poll_to_xls(poll_questions), :type => "text/excel;charset=utf-8; header=present",
+ :filename => "#{@poll.polls_name}.xls")
+ }
+ end
+ end
+
private
def find_poll_and_course
@poll = Poll.find params[:id]
@@ -438,4 +449,41 @@ class PollController < ApplicationController
end
pu
end
+
+ #将poll中题目转换为Excel
+ def poll_to_xls poll_questions
+ xls_report = StringIO.new
+ book = Spreadsheet::Workbook.new
+ sheet1 = book.create_worksheet :name => "poll"
+ blue = Spreadsheet::Format.new :color => :blue, :weight => :bold, :size => 10
+ count_row = 0
+ poll_questions.each do |poll_question|
+ if poll_question.question_type == 1 || poll_question.question_type == 2
+ sheet1.row(count_row).default_format = blue
+ sheet1[count_row,0]= l(:label_poll_question_num,:num => poll_question.question_number)
+ sheet1[count_row + 1,0] = l(:label_poll_subtotal)
+ sheet1[count_row + 2,0] = l(:label_poll_proportion)
+ poll_question.poll_answers.each_with_index do |poll_answer,i|
+ sheet1[count_row, i + 1] = poll_answer.answer_text.gsub(/<\/?.*?>/,"").gsub(/ /," ")
+ sheet1[count_row + 1, i + 1] = poll_answer.poll_votes.count
+ sheet1[count_row + 2, i + 1] = statistics_result_percentage(poll_answer.poll_votes.count, total_answer(poll_question.id)).to_s + "%"
+ end
+ sheet1[count_row + 3,0] = l(:label_poll_valid_commit)
+ sheet1[count_row + 3,1] = total_answer(poll_question.id)
+ count_row += 5
+ else
+ sheet1.row(count_row).default_format = blue
+ sheet1[count_row,0] = l(:label_poll_question_num,:num => poll_question.question_number)
+ sheet1[count_row,1] = poll_question.question_title
+ count_row += 1
+ poll_question.poll_votes.each do |poll_vote|
+ sheet1[count_row,0] = poll_vote.vote_text.gsub(/<\/?.*?>/,"").gsub(/ /," ")
+ count_row += 1
+ end
+ count_row += 1
+ end
+ end
+ book.write xls_report
+ xls_report.string
+ end
end
\ No newline at end of file
diff --git a/app/helpers/activity_notifys_helper.rb b/app/helpers/activity_notifys_helper.rb
index 15fc43b54..f2069a2d3 100644
--- a/app/helpers/activity_notifys_helper.rb
+++ b/app/helpers/activity_notifys_helper.rb
@@ -1,7 +1,6 @@
module ActivityNotifysHelper
def get_new_notify_count(container,type)
- logger.info('xxoo')
- query = ActivityNotify.where('activity_container_id=? and activity_container_type=? and notify_to=?',container.id,type,User.current.id);
+ query = ActivityNotify.where('activity_container_id=? and activity_container_type=? and notify_to=? and is_read=0',container.id,type,User.current.id);
return query.count()
end
end
\ No newline at end of file
diff --git a/app/models/bid.rb b/app/models/bid.rb
index ccd6198bb..f5cb5a3b7 100644
--- a/app/models/bid.rb
+++ b/app/models/bid.rb
@@ -10,158 +10,158 @@ homework_type == 1 文件提交
homework_type == 2 Project提交
=end
class Bid < ActiveRecord::Base
- Enterprise = 1
- Contest = 2
- Homework = 3
- HomeworkFile = 1
- HomeworkProject = 2
- attr_accessible :author_id, :budget, :deadline, :name, :description, :homework_type, :password
- include Redmine::SafeAttributes
- include ApplicationHelper
- has_many_kindeditor_assets :assets, :dependent => :destroy
- belongs_to :author, :class_name => 'User', :foreign_key => :author_id
- belongs_to :course
- has_many :biding_projects, :dependent => :destroy
- has_many :projects, :through => :biding_projects
- has_many :courses_member, :class_name => 'User', :through => :courses
- has_many :journals_for_messages, :as => :jour, :dependent => :destroy
- has_many :acts, :class_name => 'Activity', :as => :act, :dependent => :destroy
- has_many :homework_for_courses, :dependent => :destroy
- has_many :courses, :through => :homework_for_courses, :source => :course
- has_many :homeworks, :class_name => 'HomeworkAttach', :dependent => :destroy
- has_many :homework_evaluations, :through => :homeworks
- has_many :join_in_contests, :dependent => :destroy
- has_many :praise_tread, as: :praise_tread_object, dependent: :destroy
- # has_many :fork_homework, :class_name => 'Bid', :conditions => "#{Bid.table_name}.parent_id = #{id}"
- acts_as_attachable
-
- NAME_LENGTH_LIMIT = 60
- DESCRIPTION_LENGTH_LIMIT = 3000
- validates :name, length: {maximum: NAME_LENGTH_LIMIT}, presence: true
- validates :description, length: {maximum: DESCRIPTION_LENGTH_LIMIT}
- validates :author_id, presence: true
- validates :deadline, presence: true, format: {:with => /^[\d]{4}[-][\d]{1,2}[-][\d]{1,2}$/}
- validates :name, length: {maximum: NAME_LENGTH_LIMIT}
- validates :budget, format: { with: ->(p) { if p.reward_type == 1 then /^(\d+)$|^(\d+).([0-9]{2})|^(\d+).([0-9]{1})$/
- elsif p.reward_type == 3 then /^(\d+)$|^(\d+).([0-9]{1})$/ end } }
-
- validate :validate_user
- validate :validate_reward_type
- after_create :act_as_activity
- after_destroy :delete_kindeditor_assets
- scope :visible, lambda {|*args|
- nil
- }
-
- scope :like, lambda {|arg|
- if arg.blank?
- where(nil)
- else
- pattern = "%#{arg.to_s.strip.downcase}%"
- where("LOWER(id) LIKE :p OR LOWER(name) LIKE :p OR LOWER(description) LIKE :p", :p => pattern)
- end
- }
-
- scope :course_visible, lambda {|*args|
- includes(:courses).where(Course.allowed_to_condition(args.shift || User.current, :view_homeworks, *args))
- }
-
- acts_as_watchable
- acts_as_taggable
-
- acts_as_event :title => Proc.new {|o| "#{l(:label_course_homework)} ##{o.id}: #{o.name}" },
- :description => :description,
- :author => :author,
- :url => Proc.new {|o| {:controller => 'bids', :action => 'show', :id => o.id}}
-
- acts_as_activity_provider :type => 'homeworks',
- :author_key => :author_id
-
- acts_as_activity_provider :find_options => {:include => [:projects, :author]},
- :author_key => :author_id
-
- safe_attributes 'name',
- 'description',
- 'budget',
- 'deadline',
- 'homework_type',
- 'reward_type',
- 'password'
-
-
+ # Enterprise = 1
+ # Contest = 2
+ # Homework = 3
+ # HomeworkFile = 1
+ # HomeworkProject = 2
+ # attr_accessible :author_id, :budget, :deadline, :name, :description, :homework_type, :password
+ # include Redmine::SafeAttributes
+ # include ApplicationHelper
+ # has_many_kindeditor_assets :assets, :dependent => :destroy
+ # belongs_to :author, :class_name => 'User', :foreign_key => :author_id
+ # belongs_to :course
+ # has_many :biding_projects, :dependent => :destroy
+ # has_many :projects, :through => :biding_projects
+ # has_many :courses_member, :class_name => 'User', :through => :courses
+ # has_many :journals_for_messages, :as => :jour, :dependent => :destroy
+ # has_many :acts, :class_name => 'Activity', :as => :act, :dependent => :destroy
+ # has_many :homework_for_courses, :dependent => :destroy
+ # has_many :courses, :through => :homework_for_courses, :source => :course
+ # has_many :homeworks, :class_name => 'HomeworkAttach', :dependent => :destroy
+ # has_many :homework_evaluations, :through => :homeworks
+ # has_many :join_in_contests, :dependent => :destroy
+ # has_many :praise_tread, as: :praise_tread_object, dependent: :destroy
+ # # has_many :fork_homework, :class_name => 'Bid', :conditions => "#{Bid.table_name}.parent_id = #{id}"
+ # acts_as_attachable
+ #
+ # NAME_LENGTH_LIMIT = 60
+ # DESCRIPTION_LENGTH_LIMIT = 3000
+ # validates :name, length: {maximum: NAME_LENGTH_LIMIT}, presence: true
+ # validates :description, length: {maximum: DESCRIPTION_LENGTH_LIMIT}
+ # validates :author_id, presence: true
+ # validates :deadline, presence: true, format: {:with => /^[\d]{4}[-][\d]{1,2}[-][\d]{1,2}$/}
+ # validates :name, length: {maximum: NAME_LENGTH_LIMIT}
+ # validates :budget, format: { with: ->(p) { if p.reward_type == 1 then /^(\d+)$|^(\d+).([0-9]{2})|^(\d+).([0-9]{1})$/
+ # elsif p.reward_type == 3 then /^(\d+)$|^(\d+).([0-9]{1})$/ end } }
+ #
+ # validate :validate_user
+ # validate :validate_reward_type
+ # after_create :act_as_activity
+ # after_destroy :delete_kindeditor_assets
+ # scope :visible, lambda {|*args|
+ # nil
+ # }
+ #
+ # scope :like, lambda {|arg|
+ # if arg.blank?
+ # where(nil)
+ # else
+ # pattern = "%#{arg.to_s.strip.downcase}%"
+ # where("LOWER(id) LIKE :p OR LOWER(name) LIKE :p OR LOWER(description) LIKE :p", :p => pattern)
+ # end
+ # }
+ #
+ # scope :course_visible, lambda {|*args|
+ # includes(:courses).where(Course.allowed_to_condition(args.shift || User.current, :view_homeworks, *args))
+ # }
+ #
+ # acts_as_watchable
+ # acts_as_taggable
+ #
+ # acts_as_event :title => Proc.new {|o| "#{l(:label_course_homework)} ##{o.id}: #{o.name}" },
+ # :description => :description,
+ # :author => :author,
+ # :url => Proc.new {|o| {:controller => 'bids', :action => 'show', :id => o.id}}
+ #
+ # acts_as_activity_provider :type => 'homeworks',
+ # :author_key => :author_id
+ #
+ # acts_as_activity_provider :find_options => {:include => [:projects, :author]},
+ # :author_key => :author_id
+ #
# safe_attributes 'name',
- # 'description',
- # 'deadline'
- def add_jour(user, notes, reference_user_id = 0, options = {})
- if options.count == 0
- jfm = JournalsForMessage.new(:user_id => user.id, :notes => notes, :reply_id => reference_user_id)
- self.journals_for_messages << jfm
- jfm
- else
- jfm = self.journals_for_messages.build(options)
- jfm.save
- jfm
- end
- end
-
- def self.creat_bids(budget, deadline, name, description=nil, reward_type)
- self.create(:author_id => User.current.id, :budget => budget,
- :deadline => deadline, :name => name, :description => description, :commit => 0, :reward_type => reward_type)
- # self.acts << Activity.new(:user_id => self.author_id)
- end
-
- def update_bids(budget, deadline, name, description=nil)
- if(User.current.id == self.author_id)
- self.name = name
- self.budget = budget
- self.deadline = deadline
- self.description = description
- self.save
- end
- end
-
- def delete_bids
- unless self.nil?
- if User.current.id == self.author_id
- self.destroy
- end
- end
- end
-
- def set_commit(commit)
- self.update_attribute(:commit, commit)
- end
-
- private
-
- def validate_user
- errors.add :author_id, :invalid if author.nil? || !author.active?
- end
-
- def validate_reward_type
- errors.add :reward_type, :invalid if self.reward_type == 0
- end
-
- def act_as_activity
- self.acts << Activity.new(:user_id => self.author_id)
- end
-
- # used to validate weather the user is the creater of the bid
- # added by william
- def validate_bid_manager(user_id)
- unless user_id.nil?
- if self.author_id == user_id
- return true
- else
- return false
- end
- end
- end
-
- # Time 2015-04-01 14:19:06
- # Author lizanle
- # Description 删除对应课程通知的图片资源
- def delete_kindeditor_assets
- delete_kindeditor_assets_from_disk self.id,OwnerTypeHelper::BID
- end
+ # 'description',
+ # 'budget',
+ # 'deadline',
+ # 'homework_type',
+ # 'reward_type',
+ # 'password'
+ #
+ #
+ # # safe_attributes 'name',
+ # # 'description',
+ # # 'deadline'
+ # def add_jour(user, notes, reference_user_id = 0, options = {})
+ # if options.count == 0
+ # jfm = JournalsForMessage.new(:user_id => user.id, :notes => notes, :reply_id => reference_user_id)
+ # self.journals_for_messages << jfm
+ # jfm
+ # else
+ # jfm = self.journals_for_messages.build(options)
+ # jfm.save
+ # jfm
+ # end
+ # end
+ #
+ # def self.creat_bids(budget, deadline, name, description=nil, reward_type)
+ # self.create(:author_id => User.current.id, :budget => budget,
+ # :deadline => deadline, :name => name, :description => description, :commit => 0, :reward_type => reward_type)
+ # # self.acts << Activity.new(:user_id => self.author_id)
+ # end
+ #
+ # def update_bids(budget, deadline, name, description=nil)
+ # if(User.current.id == self.author_id)
+ # self.name = name
+ # self.budget = budget
+ # self.deadline = deadline
+ # self.description = description
+ # self.save
+ # end
+ # end
+ #
+ # def delete_bids
+ # unless self.nil?
+ # if User.current.id == self.author_id
+ # self.destroy
+ # end
+ # end
+ # end
+ #
+ # def set_commit(commit)
+ # self.update_attribute(:commit, commit)
+ # end
+ #
+ # private
+ #
+ # def validate_user
+ # errors.add :author_id, :invalid if author.nil? || !author.active?
+ # end
+ #
+ # def validate_reward_type
+ # errors.add :reward_type, :invalid if self.reward_type == 0
+ # end
+ #
+ # def act_as_activity
+ # self.acts << Activity.new(:user_id => self.author_id)
+ # end
+ #
+ # # used to validate weather the user is the creater of the bid
+ # # added by william
+ # def validate_bid_manager(user_id)
+ # unless user_id.nil?
+ # if self.author_id == user_id
+ # return true
+ # else
+ # return false
+ # end
+ # end
+ # end
+ #
+ # # Time 2015-04-01 14:19:06
+ # # Author lizanle
+ # # Description 删除对应课程通知的图片资源
+ # def delete_kindeditor_assets
+ # delete_kindeditor_assets_from_disk self.id,OwnerTypeHelper::BID
+ # end
end
diff --git a/app/models/mailer.rb b/app/models/mailer.rb
index b3aff41d2..8488fc1d0 100644
--- a/app/models/mailer.rb
+++ b/app/models/mailer.rb
@@ -103,7 +103,7 @@ class Mailer < ActionMailer::Base
course_ids = courses.map {|course| course.id}.join(",")
# 查询user的缺陷,项目中成员都能收到
- sql = "select * from members m, issues i where i.project_id = m.project_id and m.user_id='#{user.id}'
+ sql = "select DISTINCT * from members m, issues i where i.project_id = m.project_id and m.user_id='#{user.id}'
and (i.created_on between '#{date_from}' and '#{date_to}') order by i.created_on desc"
@issues = Issue.find_by_sql(sql)
@@ -125,13 +125,19 @@ class Mailer < ActionMailer::Base
# user 提交的作业
# @homeworks = HomeworkAttach.where("user_id=#{user.id} and (created_at between '#{date_from}' and '#{date_to}')").order("created_at desc")
+ # 查询user所在项目添加wiki
+ @wiki_contents = WikiContent.find_by_sql("select DISTINCT wc.* from wikis w, members m, projects p, wiki_pages wp, wiki_contents wc where
+ m.user_id = '#{user.id}' and m.project_id = p.id and w.project_id = p.id and w.id = wp.wiki_id and wc.page_id = wp.id and w.project_id>0
+ and (wc.updated_on between '#{date_from}' and '#{date_to}') order by updated_on desc")
+
# 查询user在课程中发布的讨论帖子
- course_mesages = Message.find_by_sql("select distinct me.* from messages me, boards b, members m where
+ course_mesages = Message.find_by_sql("select DISTINCT me.* from messages me, boards b, members m where
b.id = me.board_id and b.course_id = m.course_id
and b.course_id is not Null and m.user_id = '#{user.id}'
and (me.created_on between '#{date_from}' and '#{date_to}') order by created_on desc")
+
# 查询user在项目中发布的讨论帖子
- project_messages = Message.find_by_sql("select distinct me.* from messages me, boards b, members m where
+ project_messages = Message.find_by_sql("select DISTINCT me.* from messages me, boards b, members m where
b.id = me.board_id and b.project_id = m.project_id
and b.project_id != '-1' and m.user_id = '#{user.id}' and (me.created_on between '#{date_from}' and '#{date_to}') order by created_on desc")
# messages = Message.find_by_sql("select DISTINCT * from messages where author_id = #{user.id} and (created_on between '#{date_from}' and '#{date_to}') order by created_on desc")
@@ -157,17 +163,24 @@ class Mailer < ActionMailer::Base
and (created_on between '#{date_from}' and '#{date_to}') order by created_on desc") : []
# 查询user在课程及个人中留言
- @course_journal_messages = JournalsForMessage.find_by_sql("select DISTINCT * from journals_for_messages where
- jour_type='Course' and user_id = #{user.id}
- and (created_on between '#{date_from}' and '#{date_to}') order by created_on desc")
- @user_journal_messages = user.journals_for_messages.where("m_parent_id IS NULL and (created_on between '#{date_from}' and '#{date_to}')").order('created_on DESC')
+ @course_journal_messages = JournalsForMessage.find_by_sql("select DISTINCT jfm.* from journals_for_messages jfm, members m, courses c
+ where m.user_id = '#{user.id}' and c.id = m.course_id and jfm.jour_id = c.id
+ and jfm.jour_type='Course' and (jfm.created_on between '#{date_from}' and '#{date_to}') order by created_on desc")
+
+ @user_journal_messages = user.journals_for_messages.where("jour_type='Principal' and (created_on between '#{date_from}' and '#{date_to}')").order('created_on DESC')
+
+ # 查询user在项目中留言(用户反馈)
+ @project_journal_messages = JournalsForMessage.find_by_sql("select DISTINCT jfm.* from journals_for_messages jfm, members m, projects p
+ where m.user_id = '#{user.id}' and p.id = m.project_id and jfm.jour_id = p.id
+ and jfm.jour_type='Project' and (jfm.created_on between '#{date_from}' and '#{date_to}') order by created_on desc")
+
# 查询user新建贴吧或发布帖子
@forums = Forum.find_by_sql("select DISTINCT * from forums where creator_id = #{user.id} and (created_at between '#{date_from}' and '#{date_to}') order by created_at desc")
@memos = Memo.find_by_sql("select DISTINCT m.* from memos m, forums f where (m.author_id = #{user.id} or (m.forum_id = f.id and f.creator_id = #{user.id}))
and (m.created_at between '#{date_from}' and '#{date_to}') order by m.created_at desc")
has_content = [@issues,@course_messages,@project_messages,@course_news,@project_news,
- @course_journal_messages,@user_journal_messages,@forums,@memos,@attachments,@bids].any? {|o| !o.empty?}
+ @course_journal_messages,@user_journal_messages,@project_journal_messages,@forums,@memos,@attachments,@bids,@wiki_contents].any? {|o| !o.empty?}
mylogger.debug "Sent activity mail : #{user.mail} - #{has_content}"
#有内容才发,没有不发
mail :to => user.mail,:subject => subject if has_content
diff --git a/app/models/member.rb b/app/models/member.rb
index 2936392ab..5b1e277d7 100644
--- a/app/models/member.rb
+++ b/app/models/member.rb
@@ -116,21 +116,23 @@ class Member < ActiveRecord::Base
# 查找每个学生每个作业的评分
def student_homework_score
- score_count = 0
homework_score = StudentWork.find_by_sql("SELECT homework_commons.name,student_works.final_score as score
FROM student_works,homework_commons
WHERE student_works.homework_common_id = homework_commons.id
AND homework_commons.course_id = #{self.course_id}
AND student_works.user_id = #{self.user_id}")
- homework_score.each do |homework|
- mem_score = 0
- if homework[:score]
- mem_score = homework[:score]
- end
- score_count = score_count + mem_score
- end
+ score_count = StudentWork.joins(:homework_common).where("student_works.user_id = #{self.user_id} and homework_commons.course_id = #{self.course_id}").average(:final_score).try(:round, 2).to_f
[homework_score, format("%0.2f", score_count)]
end
+
+ def student_work_score
+ StudentWork.select("homework_commons.name, student_works.final_score").joins(:homework_common).where("student_works.user_id = #{self.user_id} and homework_commons.course_id = #{self.course_id}")
+ end
+
+ def student_work_score_avg
+ StudentWork.joins(:homework_common).where("student_works.user_id = #{self.user_id} and homework_commons.course_id = #{self.course_id}").average(:final_score).try(:round, 2).to_f
+ end
+
protected
def validate_role
diff --git a/app/views/applied_project/applied_join_project.js.erb b/app/views/applied_project/applied_join_project.js.erb
index ab5cdd484..846d2a61d 100644
--- a/app/views/applied_project/applied_join_project.js.erb
+++ b/app/views/applied_project/applied_join_project.js.erb
@@ -1,9 +1,11 @@
+// @status: 0 该项目不存在;1 不重复加入;2 成功加入; 3 已是项目成员;其它 加入失败
<% if @status == 0%>
alert("<%= l('project.join.tips.notexist') %>");
<% elsif @status == 1%>
alert("<%= l('project.join.tips.repeat') %>");
<% elsif @status == 2%>
alert("<%= l('project.join.tips.success') %>");
+ hideModal($("#popbox"));
<% elsif @status == 3%>
alert("<%= l('project.join.tips.has') %>");
<%else%>
diff --git a/app/views/attachments/_course_file_links.html.erb b/app/views/attachments/_course_file_links.html.erb
index d32025787..e651c0a93 100644
--- a/app/views/attachments/_course_file_links.html.erb
+++ b/app/views/attachments/_course_file_links.html.erb
@@ -53,7 +53,7 @@
<% end %>
<% if options[:author] %>
- <%= link_to h(truncate(attachment.author.name, length: 10, omission: '...')),user_path(attachment.author) %>,
+ <%= link_to h(truncate(attachment.author.name, length: 10, omission: '...')),user_path(attachment.author),:class => "author_name" %>,
<%= format_time(attachment.created_on) %>
<% end %>
diff --git a/app/views/attachments/_form.html.erb b/app/views/attachments/_form.html.erb
index 845e2b6a0..3dbc8d8ba 100644
--- a/app/views/attachments/_form.html.erb
+++ b/app/views/attachments/_form.html.erb
@@ -1,11 +1,13 @@
+
<% if defined?(container) && container && container.saved_attachments %>
<% 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 => 254, :placeholder => l(:label_optional_description), :class => 'description', :style => "display: inline-block;") %>
- <%= l(:field_is_public) %>:
+ <%= text_field_tag("attachments[p#{i}][filename]", attachment.filename, :class => 'filename readonly', :readonly => 'readonly') %><%= text_field_tag("attachments[p#{i}][description]", attachment.description, :maxlength => 254, :placeholder => l(:label_optional_description), :class => 'description', :style => "display: inline-block;") %><%= l(:field_is_public) %>:
<%= check_box_tag("attachments[p#{i}][is_public_checkbox]", attachment.is_public, attachment.is_public == 1 ? true : false, :class => 'is_public') %>
<%= if attachment.id.nil?
#待补充代码
diff --git a/app/views/attachments/_project_file_links.html.erb b/app/views/attachments/_project_file_links.html.erb
index fe0e9ab97..b6d934c64 100644
--- a/app/views/attachments/_project_file_links.html.erb
+++ b/app/views/attachments/_project_file_links.html.erb
@@ -29,7 +29,7 @@
<% is_float ||= false %>
<% for attachment in attachments %>
-
+
<%if is_float%>
<% end%>
diff --git a/app/views/bids/_fork_form.html.erb b/app/views/bids/_fork_form.html.erb
deleted file mode 100644
index 7a7010794..000000000
--- a/app/views/bids/_fork_form.html.erb
+++ /dev/null
@@ -1,25 +0,0 @@
-
-<%= error_messages_for 'bid' %>
-
-
<%= l(:label_fork_form_new_description) %>
-
-
-
<%= l(:label_choose_course) %> * <%= select_tag 'course', course_options_for_select(@courses) %>
-
<%= f.text_field :name, :required => true, :size => 60, :style => "width:490px;", :maxlength => Bid::NAME_LENGTH_LIMIT, :value => @bid.name %>
-
-
-
-<%= f.text_area :description, :rows => 8, :value => @bid.description, :class => 'wiki-edit', :style => "font-size:small;width:490px;margin-left:10px;", :maxlength => Bid::DESCRIPTION_LENGTH_LIMIT %>
-
-
<%= f.text_field :deadline, :value => nil,:required => true, :size => 60, :style => "width:150px;" , :readonly => true %><%= calendar_for('bid_deadline')%>
-
-
<%= f.select :is_evaluation, is_evaluation_option %>
-
<%= l(:label_attachment_plural) %>
-<%= render :partial => 'attachments/form', :locals => {:container => @homework} %>
-
\ No newline at end of file
diff --git a/app/views/bids/_form_contest.html.erb b/app/views/bids/_form_contest.html.erb
deleted file mode 100644
index ccd16f15e..000000000
--- a/app/views/bids/_form_contest.html.erb
+++ /dev/null
@@ -1,36 +0,0 @@
-
-
-<%= error_messages_for 'bid' %>
-
-
<%= l(:label_bids_form_contest_new_description) %>
-
<%= f.text_field :name, :required => true, :size => 60, :style => "width:490px;", :maxlength => Bid::NAME_LENGTH_LIMIT, :placeholder => "#{l(:label_contest_name)}" %>
-
-
<%= f.text_area :description, :rows => 8, :class => 'wiki-edit', :style => "font-size:small;width:490px;margin-left:10px;", :maxlength => Bid::DESCRIPTION_LENGTH_LIMIT, :placeholder => "#{l(:label_contest_description)}" %>
-
-
<%= f.text_field :password, :size => 60, :style => "width:488px;margin-left: 10px;" %>
-
-
- <%= f.text_field :budget, :required => true, :size => 60, :style => "width:350px;", :placeholder => l(:label_bids_reward_what) %>
-
-
-
-
-
<%= f.text_field :deadline, :required => true, :size => 60, :style => "width:150px;", :readonly => true, :placeholder => "#{l(:label_deadline)}" %><%= calendar_for('bid_deadline')%>
diff --git a/app/views/bids/show_bid_user.html.erb b/app/views/bids/show_bid_user.html.erb
deleted file mode 100644
index f4d7b2642..000000000
--- a/app/views/bids/show_bid_user.html.erb
+++ /dev/null
@@ -1,30 +0,0 @@
-
- <% for user in @bid.watcher_users %>
-
-
-
- <%= image_tag(url_to_avatar(user), :class => "avatar") %>
-
-
- <%= content_tag "div", link_to_user(user), :class => "project_avatar_name" %>
-
-
-
-
- <% unless user.memberships.empty? %>
- <%= l(:label_x_contribute_to, :count => user.memberships.count) %>
- <% for member in user.memberships %>
- <%= link_to_project(member.project) %><%= (user.memberships.last == member) ? '' : ',' %>
- <% end %>
- <% end %>
-
-
-
- <%= l(:label_user_joinin) %><%= format_date(user.created_on) %>
-
-
-
-
-
-<% end %>
-
\ No newline at end of file
diff --git a/app/views/boards/_course_show.html.erb b/app/views/boards/_course_show.html.erb
index 48e5a870d..7eed593d9 100644
--- a/app/views/boards/_course_show.html.erb
+++ b/app/views/boards/_course_show.html.erb
@@ -66,7 +66,31 @@
@@ -92,7 +116,7 @@
-
+
<%= render :partial => 'edit',locals: {:topic => topic} %>
@@ -253,7 +277,7 @@
};
params.get_ref_str_call=function(btn){
var div = btn.parent('div');
- var str = '
'+$('a',div).filter(':first').html()+' 写到: '+$("input[nhname='nh_content_val']",div).val()+' ';
+ var str = '
'+$('a',div).filter(':first').html()+' 写到: '+$("input[nhname='nh_content_val']",div).val()+'
';
return str;
}
nh_init_board(params);
diff --git a/app/views/boards/_form_course.html.erb b/app/views/boards/_form_course.html.erb
index 65e750b57..423434b1b 100644
--- a/app/views/boards/_form_course.html.erb
+++ b/app/views/boards/_form_course.html.erb
@@ -39,7 +39,7 @@
* <%= l(:field_description) %> :
<% end %>
<%= text_area :quote,:quote,:style => 'display:none',:nhname=>"quote_input" %>
-
+
<% if replying%>
<%= f.text_area :content,
diff --git a/app/views/boards/_form_project.html.erb b/app/views/boards/_form_project.html.erb
index f6b41b53f..a6c8d405e 100644
--- a/app/views/boards/_form_project.html.erb
+++ b/app/views/boards/_form_project.html.erb
@@ -1,13 +1,13 @@
<%= error_messages_for 'message' %>
@@ -47,6 +47,7 @@
+
<% unless replying %>
* <%= l(:field_description) %> :
<% end %>
diff --git a/app/views/boards/_project_show.html.erb b/app/views/boards/_project_show.html.erb
index aed6b80e5..bb36c6f19 100644
--- a/app/views/boards/_project_show.html.erb
+++ b/app/views/boards/_project_show.html.erb
@@ -58,7 +58,31 @@
<%= l(:label_board_sticky)%>
<% end %>
@@ -80,7 +104,7 @@
<%= l(:button_reply) %>
<% end %>
-
+
<%= render :partial => 'edit',locals: {:topic => topic} %>
@@ -238,7 +262,7 @@
};
params.get_ref_str_call=function(btn){
var div = btn.parent('div');
- var str = '
'+$('a',div).filter(':first').html()+' 写到: '+$("input[nhname='nh_content_val']",div).val()+' ';
+ var str = '
'+$('a',div).filter(':first').html()+' 写到: '+$("input[nhname='nh_content_val']",div).val()+'
';
return str;
}
nh_init_board(params);
diff --git a/app/views/boards/show.html.erb b/app/views/boards/show.html.erb
index 2a280fe03..10383ff00 100644
--- a/app/views/boards/show.html.erb
+++ b/app/views/boards/show.html.erb
@@ -1,4 +1,5 @@
<%= javascript_include_tag "/assets/kindeditor/kindeditor" %>
-
+
<%# reply_allow = JournalsForMessage.create_by_user? User.current %>
<%= l(:label_leave_message) %>
<% if !User.current.logged?%>
-
- <%= l(:label_user_login_tips) %>
- <%= link_to l(:label_user_login_new), signin_path %>
-
-
+
+ <%= l(:label_user_login_tips) %>
+ <%= link_to l(:label_user_login_new), signin_path %>
+
+
<% else %>
- <%= form_for('new_form', :method => :post,
- :url => {:controller => 'words', :action => 'leave_course_message'},:html => {:id=>'leave_message_form'}) do |f|%>
- <%= hidden_field_tag :asset_id,params[:asset_id],:required => false,:style => 'display:none' %>
- <%= f.kindeditor 'course_message',:height => '140px;',:editor_id => 'leave_message_editor',:input_html=>{:id => "leave_meassge",:style => "resize: none;",
+ <%= form_for('new_form', :method => :post,
+ :url => {:controller => 'words', :action => 'leave_course_message'},:html => {:id=>'leave_message_form'}) do |f|%>
+ <%= hidden_field_tag :asset_id,params[:asset_id],:required => false,:style => 'display:none' %>
+ <%#= f.kindeditor 'course_message',:height => '140px;',:editor_id => 'leave_message_editor',:input_html=>{:id => "leave_meassge",:style => "resize: none;",
:placeholder => "#{l(:label_welcome_my_respond)}",:maxlength => 250}%>
-
取 消
-
- <%= l(:button_leave_meassge)%>
-
- <% end %>
+
+
+ <% end %>
+
+
<% end %>
+
+
<%= render :partial => 'history',:locals => { :contest => @contest, :journals => @jour, :state => false} %>
<%= pagination_links_full @obj_pages, @obj_count, :per_page_links => false, :remote => false, :flag => true%>
-
\ No newline at end of file
+
+
+
+
\ No newline at end of file
diff --git a/app/views/courses/_history.html.erb b/app/views/courses/_history.html.erb
index e7c5a7c5e..e5f5fc0ec 100644
--- a/app/views/courses/_history.html.erb
+++ b/app/views/courses/_history.html.erb
@@ -29,9 +29,9 @@
:class => "delete", :title => l(:button_delete)) %>
<% end %>
<% if reply_allow %>
- <%= link_to l(:label_bid_respond_quote),'',
- {:focus => 'project_respond', :onclick => "toggleAndSettingWordsVal($('##{ids}'), $('##{ids} textarea')); $('##{ids} textarea') ;return false;"} %>
-
+ <%#= link_to l(:label_bid_respond_quote),'',
+ {:focus => 'project_respond',:nhname=>"reply_btn", :onclick => "toggleAndSettingWordsVal($('##{ids}'), $('##{ids} textarea')); $('##{ids} textarea') ;return false;"} %>
+ <%= link_to l(:label_bid_respond_quote),'javascript:;',{:nhname=>"reply_btn"} %>
<% end %>
diff --git a/app/views/courses/_join_private_course.html.erb b/app/views/courses/_join_private_course.html.erb
index 788f47d2d..934a4eb33 100644
--- a/app/views/courses/_join_private_course.html.erb
+++ b/app/views/courses/_join_private_course.html.erb
@@ -32,7 +32,6 @@
<% if authorize_for('news', 'edit') %>
<%= labelled_form_for :news, @news, :url => news_path(@news),
- :html => { :id => 'news-form', :multipart => true, :method => :put } do |f| %>
+ :html => { :id => 'news-form', :multipart => true, :method => :put } do |f| %>
<%= render :partial => 'project_form', :locals => { :f => f, :is_new => false } %>
<% end %>
diff --git a/app/views/poll/_poll.html.erb b/app/views/poll/_poll.html.erb
index 3c4426696..180fed0f0 100644
--- a/app/views/poll/_poll.html.erb
+++ b/app/views/poll/_poll.html.erb
@@ -37,6 +37,13 @@
关闭
<% end%>
+ <% if poll.polls_status == 1%>
+
导出
+ <% elsif poll.polls_status == 2 || poll.polls_status == 3 %>
+
<%= link_to "导出", export_poll_poll_path(poll.id,:format => "xls"), :class => "polls_de fr ml5"%>
+ <% end%>
+
+
<%= format_date poll.created_at.to_date%>
<% else%>
<% if poll.polls_status == 2%>
diff --git a/app/views/poll/commit_poll.js.erb b/app/views/poll/commit_poll.js.erb
index 8f68dae68..76e5e53df 100644
--- a/app/views/poll/commit_poll.js.erb
+++ b/app/views/poll/commit_poll.js.erb
@@ -1,6 +1,6 @@
$('#ajax-modal').html('<%= escape_javascript(render :partial => 'commit_alert',:locals => {:status => @status}) %>');
-showModal('ajax-modal', '250px');
-$('#ajax-modal').css('height','100px');
+showModal('ajax-modal', '270px');
+$('#ajax-modal').css('height','110px');
$('#ajax-modal').siblings().remove();
$('#ajax-modal').before("
" +
" ");
diff --git a/app/views/projects/_history.html.erb b/app/views/projects/_history.html.erb
index 3633ed7b5..54dda7b28 100644
--- a/app/views/projects/_history.html.erb
+++ b/app/views/projects/_history.html.erb
@@ -9,7 +9,8 @@
<%= link_to journal.user, user_path(journal.user), :class => 'c_blue fb fl mb10', :target => "_blank" %>
<%= format_time(journal.created_on) %>
-
<%= textilizable journal.notes%>
+
+
<%=journal.notes.html_safe%>
-
+
项目代码请设置好正确的编码方式(utf-8),否则中文会出现乱码。
通过cmd命令提示符进入代码对应文件夹的根目录,假设当前用户的登录名为user,版本库名称为demo,需要操作的版本库分支为branch。
- 如果是首次提交代码,执行如下命令:
+ 如果是首次提交代码,执行如下命令:
git init
@@ -53,7 +52,7 @@
git push -u origin branch:branch
-
+
已经有本地库,还没有配置远程地址,打开命令行执行如下:
@@ -68,7 +67,7 @@
git push -u origin branch:branch
-
+
已有远程地址,创建一个远程分支,并切换到该分支,打开命令行执行如下:
@@ -81,7 +80,7 @@
git push origin branch_name
-
+
从网上获取别人的开源版本库,转交到trustie网站上,打开命令行执行如下:
@@ -101,56 +100,59 @@
李海 提供
- <% if !@entries.nil? && authorize_for('repositories', 'browse') %>
- <%= render :partial => 'dir_list' %>
- <% end %>
-
- <%= render_properties(@properties) %>
- <% if authorize_for('repositories', 'revisions') %>
- <% if @changesets && !@changesets.empty? %>
-
- <%= l(:label_latest_revision_plural) %>
-
- <%= render :partial => 'revisions',
- :locals => {:project => @project, :path => @path,
- :revisions => @changesets, :entry => nil} %>
+
+<% if !@entries.nil? && authorize_for('repositories', 'browse') %>
+ <%= render :partial => 'dir_list' %>
+<% end %>
+<%= render_properties(@properties) %>
+
+
+<% if authorize_for('repositories', 'revisions') %>
+ <%# if @changesets && !@changesets.empty? %>
+
+ <%= l(:label_latest_revision_plural) %>
+
+ <%= render :partial => 'revisions',
+ :locals => {:project => @project, :path => @path,
+ :revisions => @changesets, :entry => nil} %>
+ <%# end %>
+
+
+ <% has_branches = (!@repository.branches.nil? && @repository.branches.length > 0)
+ sep = '' %>
+ <% if @repository.supports_all_revisions? && @path.blank? %>
+ <%= link_to l(:label_view_all_revisions), {:action => 'revisions', :id => @project,
+ :repository_id => @repository.identifier_param},
+ :class => "orange_u_btn" %>
+ <% sep = '|' %>
<% end %>
-
- <% has_branches = (!@repository.branches.nil? && @repository.branches.length > 0)
- sep = '' %>
- <% if @repository.supports_all_revisions? && @path.blank? %>
- <%= link_to l(:label_view_all_revisions), {:action => 'revisions', :id => @project,
- :repository_id => @repository.identifier_param},
- :class => "orange_u_btn" %>
- <% sep = '|' %>
- <% end %>
- <% if @repository.supports_directory_revisions? && (has_branches || !@path.blank? || !@rev.blank?) %>
- <%= sep %>
- <%= link_to l(:label_view_revisions),
- {:action => 'changes',
- :path => to_path_param(@path),
- :id => @project,
- :repository_id => @repository.identifier_param,
- :rev => @rev},
- :class => "orange_u_btn" %>
- <% end %>
-
- <% if @repository.supports_all_revisions? %>
- <% content_for :header_tags do %>
- <%= auto_discovery_link_tag(
- :atom, params.merge(
- {:format => 'atom', :action => 'revisions',
- :id => @project, :page => nil, :key => User.current.rss_key})) %>
- <% end %>
+ <% if @repository.supports_directory_revisions? && (has_branches || !@path.blank? || !@rev.blank?) %>
+ <%= sep %>
+ <%= link_to l(:label_view_revisions),
+ {:action => 'changes',
+ :path => to_path_param(@path),
+ :id => @project,
+ :repository_id => @repository.identifier_param,
+ :rev => @rev},
+ :class => "orange_u_btn" %>
<% end %>
- <% end %>
+
+ <% if @repository.supports_all_revisions? %>
+ <% content_for :header_tags do %>
+ <%= auto_discovery_link_tag(
+ :atom, params.merge(
+ {:format => 'atom', :action => 'revisions',
+ :id => @project, :page => nil, :key => User.current.rss_key})) %>
+ <% end %>
+ <% end %>
+<% end %>
-
-
查看如何提交代码:
- <%= link_to(l(:label_how_commit_code_chinese), ch_usage_path, :class => "c_blue") %>
- <%= link_to('English', en_usage_path, :class => "c_blue") %>
+
+
查看如何提交代码:
+ <%= link_to(l(:label_how_commit_code_chinese), ch_usage_path, :class => "c_blue") %>
+ <%= link_to('English', en_usage_path, :class => "c_blue") %>
-
+
<% content_for :header_tags do %>
<%= stylesheet_link_tag "scm" %>
diff --git a/app/views/stores/index.html.erb b/app/views/stores/index.html.erb
index 84116a561..6fab364b5 100644
--- a/app/views/stores/index.html.erb
+++ b/app/views/stores/index.html.erb
@@ -35,7 +35,7 @@
<%= c1.downloads %>
- <%= link_to_attachment c1, {:download => true, :text => image_tag("/images/button/download.png", width: "22px", alt: l(:button_download)) }%>c
+ <%= link_to_attachment c1, {:download => true, :text => image_tag("/images/button/download.png", width: "22px", alt: l(:button_download)) }%>
<% end -%>
diff --git a/app/views/student_work/_show.html.erb b/app/views/student_work/_show.html.erb
index 4e9f337c0..dfe61d3db 100644
--- a/app/views/student_work/_show.html.erb
+++ b/app/views/student_work/_show.html.erb
@@ -61,7 +61,7 @@
- <%@work.student_works_scores.order("created_at desc").each do |score|%>
+ <%@work.student_works_scores.order("updated_at desc").each do |score|%>
<%= render :partial => 'student_work_score',:locals => {:score => score}%>
diff --git a/app/views/student_work/_student_work_score.html.erb b/app/views/student_work/_student_work_score.html.erb
index c6ff0adae..8d10853f8 100644
--- a/app/views/student_work/_student_work_score.html.erb
+++ b/app/views/student_work/_student_work_score.html.erb
@@ -8,7 +8,7 @@
<%= score.score%>分
回复
- <%=format_time score.created_at %>
+ <%=format_time score.updated_at %>
diff --git a/app/views/student_work/_student_work_title.html.erb b/app/views/student_work/_student_work_title.html.erb
index 8162ea971..6fb7e248b 100644
--- a/app/views/student_work/_student_work_title.html.erb
+++ b/app/views/student_work/_student_work_title.html.erb
@@ -1,5 +1,5 @@
- 学号
+ 学号
学生姓名
diff --git a/app/views/student_work/add_score.js.erb b/app/views/student_work/add_score.js.erb
index 5e6c4fe6d..0ba275d5d 100644
--- a/app/views/student_work/add_score.js.erb
+++ b/app/views/student_work/add_score.js.erb
@@ -2,7 +2,7 @@ $("#add_student_score_<%= @work.id%>").html("<%= escape_javascript(render :parti
$('#score_<%= @work.id%>').peSlider({range: 'min'});
<% if @is_new%>
- $("#score_list_<%= @work.id%>").prepend("<%= escape_javascript(render :partial => 'student_work_score', :locals => {:score => @score}) %>");
+ $("#score_list_<%= @work.id%>").prepend("<%= escape_javascript(render :partial => 'student_work_score', :locals => {:score => @score}) %>
");
<% else %>
$("#work_score_<%= @score.id%>").html("<%= escape_javascript(render :partial => 'student_work_score', :locals => {:score => @score}) %>");
<% end%>
diff --git a/app/views/users/_history.html.erb b/app/views/users/_history.html.erb
index 9b5744251..d69b6b25b 100644
--- a/app/views/users/_history.html.erb
+++ b/app/views/users/_history.html.erb
@@ -11,7 +11,8 @@
<%= link_to journal.user, user_path(journal.user),:style => " font-weight:bold; color:#15bccf; margin-right:30px; background:none;", :target => "_blank"%> <%= format_time(journal.created_on) %>
- <%= textilizable journal.notes%>
+
+ <%=journal.notes.html_safe%>