class HomeworkAttachController < ApplicationController layout "course_base" include CoursesHelper include HomeworkAttachHelper helper :words ############################### before_filter :can_show_course,except: [] #判断当前角色权限时需先找到当前操作的project before_filter :logged_user_by_apptoken,:find_course_by_bid_id, :only => [:new] before_filter :find_bid_and_course,:only => [:get_not_batch_homework,:get_batch_homeworks,:get_homeworks,:get_homework_jours, :get_student_batch_homework, :get_my_homework] before_filter :find_course_by_hoemwork_id, :only => [:edit,:update,:destroy,:show,:add_homework_users,:destory_homework_users, :praise_homework] #判断当前角色是否有操作权限 #勿删 before_filter :authorize, :only => [:new,:edit,:update,:destroy] #@cur_type: #1.未批作业列表 #2.已批作业列表 #3.全部作业列表 #4.匿评作业列表 #根据此字段判断关闭homework_attach的show界面后是否要调用js刷新页面 #获取未批作业列表 def get_not_batch_homework @not_batch_homework = true @search_name = params[:name] sort, direction = params[:sort] || "s_socre", params[:direction] || "desc" get_not_batch_homework_list sort,direction, @bid.id @cur_page = params[:page] || 1 @cur_type = 1 @cur_sort,@cur_direction = params[:sort] || "s_socre", params[:direction] || "desc" @direction = direction == 'asc'? 'desc' : 'asc' respond_to do |format| format.js format.xls { send_data(homework_to_xls(@all_homework_list), :type => "text/excel;charset=utf-8; header=present", :filename => filename_for_content_disposition("#{@course.teacher.lastname.to_s + @course.teacher.firstname}_#{@course.name}_#{@course.time.to_s + @course.term}_#{@bid.name}#{l(:excel_homework_list)}(#{l(:excel_not_rated)}).xls") ) } end end #获取已评作业列表 def get_batch_homeworks @search_name = params[:name] sort, direction = params[:sort] || "s_socre", params[:direction] || "desc" @is_batch_homeworks = true if sort == 't_socre' order_by = "t_score #{direction}" elsif sort == 's_socre' order_by = "s_score #{direction}" elsif sort == 'time' order_by = "created_at #{direction}" end all_homework_list = HomeworkAttach.eager_load(:attachments,:user,:rate_averages).find_by_sql("SELECT * FROM (SELECT homework_attaches.*, (SELECT stars FROM seems_rateable_rates WHERE rateable_type = 'HomeworkAttach' AND rateable_id = homework_attaches.id AND is_teacher_score = 1 AND stars IS NOT NULL ORDER BY updated_at DESC limit 0,1) AS t_score, (SELECT AVG(stars) FROM seems_rateable_rates WHERE rateable_type = 'HomeworkAttach' AND rateable_id = homework_attaches.id AND is_teacher_score = 0) AS s_score FROM homework_attaches WHERE bid_id = #{@bid.id} ORDER BY #{order_by}) AS table1 WHERE table1.t_score IS NOT NULL") all_homework_list = search_homework_member(all_homework_list,@search_name.to_s.downcase) if @search_name @cur_page = params[:page] || 1 @cur_type = 2 # @homework_list = paginateHelper all_homework_list,10 @homework_list = all_homework_list @direction = direction == 'asc'? 'desc' : 'asc' respond_to do |format| format.js format.xls { send_data(homework_to_xls(all_homework_list), :type => "text/excel;charset=utf-8; header=present", :filename => filename_for_content_disposition("#{@course.teacher.lastname.to_s + @course.teacher.firstname}_#{@course.name}_#{@course.time.to_s + @course.term}_#{@bid.name}#{l(:excel_homework_list)}(#{l(:excel_been_rated)}).xls") ) } end end #获取所有作业列表 def get_homeworks @is_all_homeworks = true @search_name = params[:name] sort, direction = params[:sort] || "s_socre", params[:direction] || "desc" if sort == 't_socre' order_by = "t_score #{direction}" elsif sort == 's_socre' order_by = "s_score #{direction}" elsif sort == 'time' order_by = "created_at #{direction}" end all_homework_list = HomeworkAttach.eager_load(:attachments,:user,:rate_averages).find_by_sql("SELECT homework_attaches.*, (SELECT stars FROM seems_rateable_rates WHERE rateable_type = 'HomeworkAttach' AND rateable_id = homework_attaches.id AND is_teacher_score = 1 AND stars IS NOT NULL ORDER BY updated_at DESC limit 0,1) AS t_score, (SELECT AVG(stars) FROM seems_rateable_rates WHERE rateable_type = 'HomeworkAttach' AND rateable_id = homework_attaches.id AND is_teacher_score = 0) AS s_score FROM homework_attaches WHERE bid_id = #{@bid.id} ORDER BY #{order_by}") all_homework_list = search_homework_member(all_homework_list,@search_name.to_s.downcase) if @search_name @cur_page = params[:page] || 1 @cur_type = 3 # @homework_list = paginateHelper all_homework_list,10 @homework_list = all_homework_list @direction = direction == 'asc'? 'desc' : 'asc' respond_to do |format| format.js format.xls { send_data(homework_to_xls(all_homework_list), :type => "text/excel;charset=utf-8; header=present", :filename => filename_for_content_disposition("#{@course.teacher.lastname.to_s + @course.teacher.firstname}_#{@course.name}_#{@course.time.to_s + @course.term}_#{@bid.name}#{l(:excel_homework_list)}.xls") ) } end end #获取学生匿评列表 def get_student_batch_homework @is_student_batch_homework = true all_homework_list = get_student_batch_homework_list @bid,User.current @cur_page = params[:page] || 1 @cur_type = 4 # @homework_list = paginateHelper all_homework_list,10 @homework_list = all_homework_list respond_to do |format| format.js end end #获取我的作业 def get_my_homework @is_my_homework = true all_homework_list = HomeworkAttach.find_by_sql("SELECT homework_attaches.*, (SELECT stars FROM seems_rateable_rates WHERE rateable_type = 'HomeworkAttach' AND rateable_id = homework_attaches.id AND is_teacher_score = 1 AND stars IS NOT NULL ORDER BY updated_at DESC limit 0,1) AS t_score, (SELECT AVG(stars) FROM seems_rateable_rates WHERE rateable_type = 'HomeworkAttach' AND rateable_id = homework_attaches.id AND is_teacher_score = 0) AS s_score FROM homework_attaches WHERE homework_attaches.bid_id = #{@bid.id} AND homework_attaches.user_id = #{User.current.id}") #如果我没有创建过作业,就检索我是否参与了某个作业 if all_homework_list.empty? all_homework_list = HomeworkAttach.find_by_sql("SELECT homework_attaches.*, (SELECT stars FROM seems_rateable_rates WHERE rateable_type = 'HomeworkAttach' AND rateable_id = homework_attaches.id AND is_teacher_score = 1 AND stars IS NOT NULL ORDER BY updated_at DESC limit 0,1) AS t_score, (SELECT AVG(stars) FROM seems_rateable_rates WHERE rateable_type = 'HomeworkAttach' AND rateable_id = homework_attaches.id AND is_teacher_score = 0) AS s_score FROM homework_attaches INNER JOIN homework_users ON homework_users.homework_attach_id = homework_attaches.id WHERE homework_attaches.bid_id = #{@bid.id} AND homework_users.user_id = #{User.current.id}") end @cur_page = params[:page] || 1 # @homework_list = paginateHelper all_homework_list,10 @homework_list = all_homework_list respond_to do |format| format.js end end #获取作业的留言列表 def get_homework_jours @user = @bid.author @jours = @bid.journals_for_messages.where('m_parent_id IS NULL').order('created_on DESC') @jour = paginateHelper @jours,10 @state = false respond_to do |format| format.js end end #为作业点赞 def praise_homework pt = PraiseTread.new pt.user_id = User.current.id pt.praise_tread_object_id = @homework.id pt.praise_tread_object_type = "HomeworkAttach" pt.praise_or_tread = 1 if pt.save respond_to do |format| format.js end else render_404 end end #获取作业的成员 def get_homework_member homework @hoemwork_users = users_for_homework(@homework) @members = members_for_homework(@homework,@hoemwork_users,params[:q]) @members = paginateHelper @members,10 end def index @homeworks = HomeworkAttach.all respond_to do |format| format.html # index.html.erb format.json { render json: @homeworks } end end #作业添加成员(参与人员) def add_homework_users if User.current.admin? || User.current.member_of_course?(@homework.bid.courses.first) #@homework = HomeworkAttach.find(params[:id]) if params[:membership] if params[:membership][:user_ids] attrs = params[:membership].dup user_ids = attrs.delete(:user_ids) user_ids.each do |user_id| @homework.homework_users.build(:user_id => user_id) end end end @homework.save get_homework_member @homework respond_to do |format| format.js end else render_403 :message => :notice_not_authorized end end #作业删除成员(参与人员) def destory_homework_users #@homework = HomeworkAttach.find(params[:id]) if User.current.admin? || User.current.member_of_course?(@homework.bid.courses.first) homework_user = @homework.homework_users.where("user_id = #{params[:user_id]}").first homework_user.destroy get_homework_member @homework @homework_list = [] @is_my_homework = true respond_to do |format| format.js end else render_403 :message => :notice_not_authorized end end def create bid = Bid.find params[:bid_id] if User.current.admin? || User.current.member_of_course?(bid.courses.first) # modify by nwb if bid.homeworks.where("user_id = ?",User.current).empty? user_id = params[:user_id] bid_id = params[:bid_id] if params[:homework_attach] if params[:homework_attach][:project_id] project_id = params[:homework_attach][:project_id] else project_id = 0 end else project_id = 0 end sta = 0 name = params[:homework_attach][:name] description = params[:homework_attach][:description] options = { :user_id => user_id, :state => sta, :name => name, :description => description, :bid_id => bid_id, :project_id => project_id } @homework = HomeworkAttach.new(options) @homework.save_attachments(params[:attachments]) render_attachment_warning_if_needed(@homework) if @homework.save respond_to do |format| format.html { redirect_to course_for_bid_url @homework.bid } format.json { head :no_content } end else render_403 :message => :notice_not_authorized end else render_403 :message => :notice_has_homework end else render_403 :message => :notice_not_authorized end end def new @bid = Bid.find(params[:id]) if User.current.admin? || User.current.member_of_course?(@bid.courses.first) @homework = HomeworkAttach.new respond_to do |format| format.html # new.html.erb format.json { render json: @homework } end else render_403 :message => :notice_not_authorized end end #获取作业成员的集合 def get_homework_member_list @homework = HomeworkAttach.find(params[:bid_id]) course = @homework.bid.courses.first if User.current.admin? || User.current.member_of_course?(course) get_homework_member @homework else raise "error" end respond_to do |format| format.js end end #获取可选成员列表 #homework:作业 #users:该作业所有成员 #q:模糊匹配的用户的昵称 def members_for_homework homework,users,q unpartin_users = homework.bid.courses.first.members.where("user_id not in (:users)", {:users => users}).joins(:user).where("users.login like '%#{q}%'") canpartin_users = [] unpartin_users.each do |m| if m.user.allowed_to?(:paret_in_homework,homework.bid.courses.first) canpartin_users << m end end canpartin_users end def edit bid = @homework.bid if (bid.comment_status == 0 || bid.open_anonymous_evaluation == 0 || bid.comment_status == 2) && (User.current.admin? || User.current.member_of_course?(bid.courses.first)) get_homework_member @homework else render_403 :message => :notice_not_authorized end end def update #@homework = HomeworkAttach.find(params[:id]) course = @homework.bid.courses.first if User.current.admin? || User.current.member_of_course?(course) name = params[:homework_name] description = params[:homework_description] @homework.name = name @homework.description = description @homework.project_id = params[:project_id] || 0 @homework.save_attachments(params[:attachments]) render_attachment_warning_if_needed(@homework) if @homework.save respond_to do |format| format.html { redirect_to course_for_bid_url @homework.bid } format.json { head :no_content } end else end else render_403 :message => :notice_not_authorized end end def destroy bid = @homework.bid if (bid.comment_status == 0 || bid.open_anonymous_evaluation == 0 || bid.comment_status == 0) && (User.current.admin? || User.current == @homework.user) if @homework.destroy #respond_to do |format| # format.html { redirect_to course_for_bid_url @homework.bid } # format.json { head :no_content } #end @homework_list = [] @is_my_homework = true respond_to do |format| format.js end else end else render_403 end end #显示作业信息 def show if User.current.admin? || User.current.member_of_course?(@course) # 作业打分列表 @stars_reates = @homework.rates(:quality) #我的评分 @is_teacher = is_course_teacher User.current,@course @has_evaluation = @stars_reates.where("rater_id = #{User.current.id} and is_teacher_score=#{@is_teacher ? 1 : 0}").first @m_score = @has_evaluation.nil? ? 0 : @has_evaluation.stars @teacher_stars = @stars_reates.where("is_teacher_score = 1") #老师评分列表 @student_stars = @stars_reates.where("is_teacher_score = 0") #学生评分列表 @is_anonymous_comments = @bid.comment_status == 1 && !@homework.users.include?(User.current) && @homework.user != User.current && !@is_teacher #判断是不是匿评(开启匿评,当前用户不是作业的创建者或者参与者,不是老师) jours = @homework.journals_for_messages.where("is_comprehensive_evaluation = 3 or is_comprehensive_evaluation is null").order("created_on DESC")#jours留言 is null条件用以兼容历史数据 @jour = paginateHelper jours,5 #留言 @cur_page = params[:cur_page] || 1 @cur_type = params[:cur_type] || 5 respond_to do |format| format.html format.js end else render_403 :message => :notice_not_authorized end end #删除留言 def destroy_jour @homework = HomeworkAttach.find(params[:homework_id]) @journal_destroyed = JournalsForMessage.find(params[:object_id]) if @journal_destroyed.is_comprehensive_evaluation == 3 && @journal_destroyed.destroy render_403 unless User.current == @journal_destroyed.user || User.current.admin? @stars_reates = @homework.rates(:quality) @teacher_stars = @stars_reates.where("is_teacher_score = 1)") #老师评分列表 @student_stars = @stars_reates.where("is_teacher_score = 0") #学生评分列表 jours = @homework.journals_for_messages.where("is_comprehensive_evaluation = 3 or is_comprehensive_evaluation is null").order("created_on DESC")#jours留言 is null条件用以兼容历史数据 @jour = paginateHelper jours,5 #留言 else render_404 end #@course=@homework.bid.courses.first #@journal_destroyed = JournalsForMessage.find(params[:object_id]) #@is_comprehensive_evaluation = @journal_destroyed.is_comprehensive_evaluation #@journal_destroyed.destroy #if @is_comprehensive_evaluation == 3 # @jours = @homework.journals_for_messages.where("is_comprehensive_evaluation = 3 or is_comprehensive_evaluation is null").order("created_on DESC") # @jour = paginateHelper @jours,5 #elsif @is_comprehensive_evaluation == 2 # annymous_users = @homework.homework_evaluations.map { |homework_evaluation| homework_evaluation.user.id}.join(',') # unless annymous_users.nil? || annymous_users.count == "" # @anonymous_comments = @homework.journals_for_messages.where("is_comprehensive_evaluation = 2 and user_id in (#{annymous_users})").order("created_on DESC") # end #elsif @is_comprehensive_evaluation == 1 # teachers = searchTeacherAndAssistant @course # @comprehensive_evaluation = [] # teachers.each do|teacher| # temp = @homework.journals_for_messages.where("is_comprehensive_evaluation = 1 and user_id = #{teacher.user_id}").order("created_on DESC").first # @comprehensive_evaluation << temp if temp # end #end respond_to do |format| format.js end end #添加留言 def addjours @is_teacher,@is_anonymous_comments,@m_score = params[:is_teacher]=="true",params[:is_anonymous_comments]=="true",params[:stars_value] @cur_page,@cur_type = params[:page] || 1,params[:cur_type] || 5 @homework = HomeworkAttach.find(params[:homework_id]) @stars_reates = @homework.rates(:quality) homework = @homework is_teacher = @is_teacher ? 1 : 0 #保存评分@homework.rate(@m_score.to_i,User.current.id,:quality, (@is_teacher ? 1 : 0)) @is_comprehensive_evaluation = @is_teacher ? 1 : (@is_anonymous_comments ? 2 : 3) #判断当前评论是老师评论?匿评?留言 if @is_teacher || @is_anonymous_comments @m_score ||= 0 rate = @homework.rates(:quality).where(:rater_id => User.current.id, :is_teacher_score => is_teacher).first if rate rate.stars = @m_score else rate = @homework.rates(:quality).new(:stars => @m_score, :rater_id => User.current.id, :is_teacher_score => is_teacher) end rate.save! if homework.is_teacher_score == 0 if is_teacher == 1 homework.score = @m_score homework.is_teacher_score = 1 else sql = "SELECT AVG(stars) as stars FROM seems_rateable_rates WHERE rateable_type = 'HomeworkAttach' AND rateable_id = #{homework.id}" score= HomeworkAttach.find_by_sql(sql).first.stars homework.score = score end else if is_teacher == 1 homework.score = @m_score homework.is_teacher_score = 1 end end homework.save! end #保存评论 if params[:new_form] && params[:new_form][:user_message] #有没有留言 jour = @homework.journals_for_messages.where("is_comprehensive_evaluation = 1 and user_id = #{User.current.id}").order("created_on DESC").first if params[:new_form][:user_message] == "" if @is_teacher unless jour jour = @homework.addjours User.current.id, "",0,@is_comprehensive_evaluation end end else jour = @homework.addjours User.current.id, params[:new_form][:user_message],0,@is_comprehensive_evaluation end end if jour jour.save_attachments(params[:attachments]) render_attachment_warning_if_needed(jour) jour.save end @teacher_stars = @stars_reates.where("is_teacher_score = 1") #老师评分列表 @student_stars = @stars_reates.where("is_teacher_score = 0") #学生评分列表 jours = @homework.journals_for_messages.where("is_comprehensive_evaluation = 3 or is_comprehensive_evaluation is null").order("created_on DESC")#jours留言 is null条件用以兼容历史数据 @jour = paginateHelper jours,5 #留言 if @cur_type == "1" #如果当前是老师未批列表,需要刷新整个作业列表界面 @bid = @homework.bid get_not_batch_homework_list params[:cur_sort] || "s_socre",params[:cur_direction] || "desc",@homework.bid_id elsif @cur_type == "2" #老师已批列表 @result_homework = HomeworkAttach.find_by_sql("SELECT homework_attaches.*, (SELECT stars FROM seems_rateable_rates WHERE rateable_type = 'HomeworkAttach' AND rateable_id = homework_attaches.id AND is_teacher_score = 1 AND stars IS NOT NULL ORDER BY updated_at DESC limit 0,1) AS t_score, (SELECT AVG(stars) FROM seems_rateable_rates WHERE rateable_type = 'HomeworkAttach' AND rateable_id = homework_attaches.id AND is_teacher_score = 0) AS s_score FROM homework_attaches WHERE id = #{@homework.id}").first elsif @cur_type == "3" #全部作业列表 @result_homework = HomeworkAttach.find_by_sql("SELECT homework_attaches.*, (SELECT stars FROM seems_rateable_rates WHERE rateable_type = 'HomeworkAttach' AND rateable_id = homework_attaches.id AND is_teacher_score = 1 AND stars IS NOT NULL ORDER BY updated_at DESC limit 0,1) AS t_score, (SELECT AVG(stars) FROM seems_rateable_rates WHERE rateable_type = 'HomeworkAttach' AND rateable_id = homework_attaches.id AND is_teacher_score = 0) AS s_score FROM homework_attaches WHERE id = #{@homework.id}").first elsif @cur_type == "4" #匿评作业列表 @is_student_batch_homework = true @result_homework = HomeworkAttach.find_by_sql("SELECT homework_attaches.*, (SELECT stars FROM seems_rateable_rates WHERE rateable_type = 'HomeworkAttach' AND rateable_id = homework_attaches.id AND is_teacher_score = 1 AND stars IS NOT NULL ORDER BY updated_at DESC limit 0,1) AS t_score, (SELECT AVG(stars) FROM seems_rateable_rates WHERE rateable_type = 'HomeworkAttach' AND rateable_id = homework_attaches.id AND is_teacher_score = 0) AS s_score, (SELECT stars FROM seems_rateable_rates WHERE rateable_type = 'HomeworkAttach' AND rateable_id = homework_attaches.id AND rater_id = #{User.current.id} AND is_teacher_score = #{is_teacher}) AS m_score FROM homework_attaches WHERE homework_attaches.id = #{@homework.id}").first else #其他的不用管 end respond_to do |format| format.js end end #教师综评 def comprehensive_evaluation_jour @homework = HomeworkAttach.find(params[:jour_id]) @add_jour = @homework.addjours User.current.id, params[:new_form][:user_message],0,params[:is_comprehensive_evaluation] respond_to do |format| format.html { redirect_to homework_attach_url @homework } format.json { head :no_content } end end #获取指定作业的平均得分 def score end #添加回复 def add_jour_reply parent_id = params[:reference_id] author_id = User.current.id reply_user_id = params[:reference_user_id] reply_id = params[:reference_message_id] # 暂时不实现 content = params[:user_notes] options = {:user_id => author_id, :m_parent_id => parent_id, :m_reply_id => reply_id, :reply_id => reply_user_id, :notes => content, :is_readed => false} @jfm = JournalsForMessage.new(options) @jfm.save respond_to do |format| format.js{ @save_succ = true if @jfm.errors.empty? } end end private #根据条件过滤作业结果 def search_homework_member homeworks,name select_homework = homeworks.select{ |homework| homework.user[:login].to_s.downcase.include?(name) || homework.user.user_extensions[:student_id].to_s.downcase.include?(name) || (homework.user[:lastname].to_s.downcase + homework.user[:firstname].to_s.downcase).include?(name) } select_homework end #验证是否显示课程 def can_show_course @first_page = FirstPage.find_by_page_type('project') if @first_page.show_course == 2 render_404 end end def find_bid_and_course @bid = Bid.find(params[:bid_id]) @course = @bid.courses.first rescue ActiveRecord::RecordNotFound render_404 end def find_course_by_bid_id @bid = Bid.find(params[:id]) @course = @bid.courses.first rescue ActiveRecord::RecordNotFound render_404 end def find_course_by_hoemwork_id @homework = HomeworkAttach.find(params[:id]) @bid = @homework.bid @course = @bid.courses.first rescue ActiveRecord::RecordNotFound render_404 end #获取课程的老师列表 def find_course_teachers course searchTeacherAndAssistant(course).map{|teacher| teacher.user_id}.join(",") end #获取作业教师评分所占比例 def get_teacher_proportion bid if bid.proportion teacher_proportion = bid.proportion * 1.0 / 100 else teacher_proportion = 1.0 end teacher_proportion end def get_not_batch_homework_list sort,direction,bid_id if sort == 't_socre' order_by = "t_score #{direction}" elsif sort == 's_socre' order_by = "s_score #{direction}" elsif sort == 'time' order_by = "created_at #{direction}" end @all_homework_list = HomeworkAttach.eager_load(:attachments,:user,:rate_averages).find_by_sql("SELECT * FROM (SELECT homework_attaches.*, (SELECT stars FROM seems_rateable_rates WHERE rateable_type = 'HomeworkAttach' AND rateable_id = homework_attaches.id AND is_teacher_score = 1 AND stars IS NOT NULL ORDER BY updated_at DESC limit 0,1) AS t_score, (SELECT AVG(stars) FROM seems_rateable_rates WHERE rateable_type = 'HomeworkAttach' AND rateable_id = homework_attaches.id AND is_teacher_score = 0) AS s_score FROM homework_attaches WHERE bid_id = #{bid_id} ORDER BY #{order_by}) AS table1 WHERE table1.t_score IS NULL ") @all_homework_list = search_homework_member(@all_homework_list,@search_name.to_s.downcase) if @search_name # @homework_list = paginateHelper @all_homework_list,10 @homework_list = @all_homework_list end #获取指定作业的所有成员 def users_for_homework homework homework.nil? ? [] : (homework.users + [homework.user]) end def homework_to_csv items encoding = l(:general_csv_encoding) columns = ["student_id","user_name","login","student_num","mail","work_name","teacher_score","ni_score","commit_time"] export = FCSV.generate(:col_sep => l(:general_csv_separator)) do |csv| # csv header fields csv << columns.collect {|c| Redmine::CodesetUtil.from_utf8(c, encoding) } # csv lines items.each do |homework| csv << [homework.user.id,Redmine::CodesetUtil.from_utf8(homework.user.lastname.to_s + homework.user.firstname.to_s, encoding),Redmine::CodesetUtil.from_utf8(homework.user.login, encoding), Redmine::CodesetUtil.from_utf8(homework.user.user_extensions.student_id, encoding),Redmine::CodesetUtil.from_utf8(homework.user.mail, encoding),Redmine::CodesetUtil.from_utf8(homework.name, encoding), Redmine::CodesetUtil.from_utf8((homework.t_score.nil? || (homework.t_score && homework.t_score.to_i == 0)) ? l(:label_without_score) : format("%.2f",homework.t_score), encoding), Redmine::CodesetUtil.from_utf8( homework.s_score.nil? ? l(:label_without_score) : format("%.2f",homework.s_score), encoding),Redmine::CodesetUtil.from_utf8(format_time(homework.created_at), encoding)] end end export end def homework_to_xls items xls_report = StringIO.new book = Spreadsheet::Workbook.new sheet1 = book.create_worksheet :name => "homework" blue = Spreadsheet::Format.new :color => :blue, :weight => :bold, :size => 10 sheet1.row(0).default_format = blue sheet1.row(0).concat([l(:excel_user_id),l(:excel_user_name),l(:excel_nickname),l(:excel_student_id),l(:excel_mail),l(:excel_homework_name), l(:excel_t_score),l(:excel_n_score),l(:excel_commit_time)]) count_row = 1 items.each do |homework| sheet1[count_row,0]=homework.user.id sheet1[count_row,1] = homework.user.lastname.to_s + homework.user.firstname.to_s sheet1[count_row,2] = homework.user.login sheet1[count_row,3] = homework.user.user_extensions.student_id sheet1[count_row,4] = homework.user.mail sheet1[count_row,5] = homework.name sheet1[count_row,6] =(homework.t_score.nil? || (homework.t_score && homework.t_score.to_i == 0)) ? l(:label_without_score) : format("%.2f",homework.t_score) sheet1[count_row,7] = homework.s_score.nil? ? l(:label_without_score) : format("%.2f",homework.s_score) sheet1[count_row,8] = format_time(homework.created_at) count_row += 1 end book.write xls_report xls_report.string end end