Merge branch 'szzh' of http://repository.trustie.net/xianbo/trustie2 into szzh
This commit is contained in:
commit
0b04dc5da8
|
@ -68,6 +68,7 @@ class AttachmentsController < ApplicationController
|
||||||
end
|
end
|
||||||
|
|
||||||
def direct_download
|
def direct_download
|
||||||
|
@attachment.increment_download
|
||||||
send_file @attachment.diskfile, :filename => filename_for_content_disposition(@attachment.filename),
|
send_file @attachment.diskfile, :filename => filename_for_content_disposition(@attachment.filename),
|
||||||
:type => detect_content_type(@attachment),
|
:type => detect_content_type(@attachment),
|
||||||
:disposition => 'attachment' #inline can open in browser
|
:disposition => 'attachment' #inline can open in browser
|
||||||
|
@ -78,7 +79,6 @@ class AttachmentsController < ApplicationController
|
||||||
# 下载添加权限设置
|
# 下载添加权限设置
|
||||||
candown = attachment_candown @attachment
|
candown = attachment_candown @attachment
|
||||||
if candown || User.current.admin? || User.current.id == @attachment.author_id
|
if candown || User.current.admin? || User.current.id == @attachment.author_id
|
||||||
@attachment.increment_download
|
|
||||||
if stale?(:etag => @attachment.digest)
|
if stale?(:etag => @attachment.digest)
|
||||||
if params[:preview] == 'true'
|
if params[:preview] == 'true'
|
||||||
convered_file = @attachment.diskfile
|
convered_file = @attachment.diskfile
|
||||||
|
|
|
@ -695,7 +695,13 @@ class CoursesController < ApplicationController
|
||||||
# 显示老师和助教的活动
|
# 显示老师和助教的活动
|
||||||
# @authors = searchTeacherAndAssistant(@course)
|
# @authors = searchTeacherAndAssistant(@course)
|
||||||
@authors = course_all_member(@course)
|
@authors = course_all_member(@course)
|
||||||
|
Dir.glob("#{Rails.root}/app/models/*.rb").sort.each { |file| require file }
|
||||||
events = []
|
events = []
|
||||||
|
key = "course_events_#{@course.id}".to_sym
|
||||||
|
if Rails.env.production? && Setting.course_cahce_enabled?
|
||||||
|
events = Rails.cache.read(key) || []
|
||||||
|
end
|
||||||
|
if events.empty?
|
||||||
@authors.each do |author|
|
@authors.each do |author|
|
||||||
@activity = Redmine::Activity::Fetcher.new(User.current, :course => @course,
|
@activity = Redmine::Activity::Fetcher.new(User.current, :course => @course,
|
||||||
:with_subprojects => false,
|
:with_subprojects => false,
|
||||||
|
@ -709,7 +715,8 @@ class CoursesController < ApplicationController
|
||||||
else
|
else
|
||||||
events += @activity.events(@days, @course.created_at, :is_public => 1)
|
events += @activity.events(@days, @course.created_at, :is_public => 1)
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
Rails.cache.write(key, events) if Rails.env.production? && Setting.course_cahce_enabled?
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
# @author = @course.teacher
|
# @author = @course.teacher
|
||||||
|
|
|
@ -3,6 +3,7 @@ class HomeworkCommonController < ApplicationController
|
||||||
before_filter :find_course, :only => [:index,:new,:create]
|
before_filter :find_course, :only => [:index,:new,:create]
|
||||||
before_filter :find_homework, :only => [:edit,:update,:alert_anonymous_comment,:start_anonymous_comment,:stop_anonymous_comment,:destroy]
|
before_filter :find_homework, :only => [:edit,:update,:alert_anonymous_comment,:start_anonymous_comment,:stop_anonymous_comment,:destroy]
|
||||||
before_filter :teacher_of_course, :only => [:new, :create, :edit, :update, :destroy, :start_anonymous_comment, :stop_anonymous_comment, :alert_anonymous_comment]
|
before_filter :teacher_of_course, :only => [:new, :create, :edit, :update, :destroy, :start_anonymous_comment, :stop_anonymous_comment, :alert_anonymous_comment]
|
||||||
|
before_filter :member_of_course, :only => [:index]
|
||||||
|
|
||||||
def index
|
def index
|
||||||
homeworks = @course.homework_commons.order("created_at desc")
|
homeworks = @course.homework_commons.order("created_at desc")
|
||||||
|
@ -203,6 +204,11 @@ class HomeworkCommonController < ApplicationController
|
||||||
render_403 unless User.current.allowed_to?(:as_teacher,@course) || User.current.admin?
|
render_403 unless User.current.allowed_to?(:as_teacher,@course) || User.current.admin?
|
||||||
end
|
end
|
||||||
|
|
||||||
|
#当前用户是不是课程的成员
|
||||||
|
def member_of_course
|
||||||
|
render_403 unless User.current.member_of_course?(@course) || User.current.admin?
|
||||||
|
end
|
||||||
|
|
||||||
def get_assigned_homeworks(student_works, n, index)
|
def get_assigned_homeworks(student_works, n, index)
|
||||||
student_works += student_works
|
student_works += student_works
|
||||||
student_works[index + 1 .. index + n]
|
student_works[index + 1 .. index + n]
|
||||||
|
|
|
@ -56,7 +56,7 @@ class JournalsController < ApplicationController
|
||||||
@diff = Redmine::Helpers::Diff.new(@detail.value, @detail.old_value)
|
@diff = Redmine::Helpers::Diff.new(@detail.value, @detail.old_value)
|
||||||
respond_to do |format|
|
respond_to do |format|
|
||||||
format.html {
|
format.html {
|
||||||
render :layout => 'project_base'
|
render :layout => 'new_base'
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -413,10 +413,11 @@ class ProjectsController < ApplicationController
|
||||||
# 2、加入项目、创建角色
|
# 2、加入项目、创建角色
|
||||||
# 3、用户得分
|
# 3、用户得分
|
||||||
if params[:mail]
|
if params[:mail]
|
||||||
user = User.find(params[:user_id])
|
userid = Token.find_by_value(params[:token]).user_id
|
||||||
|
user = User.find(userid)
|
||||||
user.activate!
|
user.activate!
|
||||||
Member.create(:role_ids => [4], :user_id => params[:user_id],:project_id => params[:id])
|
Member.create(:role_ids => [4], :user_id => userid, :project_id => params[:id])
|
||||||
UserGrade.create(:user_id => params[:user_id], :project_id => params[:id])
|
UserGrade.create(:user_id => userid, :project_id => params[:id])
|
||||||
token = Token.get_token_from_user(user, 'autologin')
|
token = Token.get_token_from_user(user, 'autologin')
|
||||||
#user = User.try_to_autologin(token.value)
|
#user = User.try_to_autologin(token.value)
|
||||||
if user
|
if user
|
||||||
|
@ -456,7 +457,6 @@ class ProjectsController < ApplicationController
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@members = paginateHelper @members
|
@members = paginateHelper @members
|
||||||
render :layout => 'base_courses' if @project.project_type == 1
|
|
||||||
end
|
end
|
||||||
|
|
||||||
#判断指定用户是否为课程教师
|
#判断指定用户是否为课程教师
|
||||||
|
@ -675,9 +675,9 @@ class ProjectsController < ApplicationController
|
||||||
|
|
||||||
def memberAccess
|
def memberAccess
|
||||||
# 是课程,则判断当前用户是否参加了课程
|
# 是课程,则判断当前用户是否参加了课程
|
||||||
return 0 if @project.project_type == Project::ProjectType_project
|
# return 0 if @project.project_type == Project::ProjectType_project
|
||||||
currentUser = User.current
|
# currentUser = User.current
|
||||||
render_403 unless currentUser.member_of?(@project)
|
render_403 unless User.current.member_of?(@project)
|
||||||
end
|
end
|
||||||
|
|
||||||
def toggleCourse
|
def toggleCourse
|
||||||
|
|
|
@ -2,7 +2,7 @@ class StudentWorkController < ApplicationController
|
||||||
layout "base_courses"
|
layout "base_courses"
|
||||||
include StudentWorkHelper
|
include StudentWorkHelper
|
||||||
require 'bigdecimal'
|
require 'bigdecimal'
|
||||||
before_filter :find_homework, :only => [:new, :index, :create]
|
before_filter :find_homework, :only => [:new, :index, :create, :student_work_absence_penalty]
|
||||||
before_filter :find_work, :only => [:edit, :update, :show, :destroy, :add_score, :praise_student_work]
|
before_filter :find_work, :only => [:edit, :update, :show, :destroy, :add_score, :praise_student_work]
|
||||||
before_filter :member_of_course, :only => [:index, :new, :create, :show, :add_score, :praise_student_work]
|
before_filter :member_of_course, :only => [:index, :new, :create, :show, :add_score, :praise_student_work]
|
||||||
before_filter :author_of_work, :only => [:edit, :update, :destroy]
|
before_filter :author_of_work, :only => [:edit, :update, :destroy]
|
||||||
|
@ -233,6 +233,25 @@ class StudentWorkController < ApplicationController
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
#评价列表显示
|
||||||
|
def student_work_absence_penalty
|
||||||
|
render_403 unless User.current.allowed_to?(:as_teacher,@course)
|
||||||
|
order = params[:order] || "desc"
|
||||||
|
work_ids = "(" + @homework.student_works.map(&:id).join(",") + ")"
|
||||||
|
@stundet_works = StudentWork.find_by_sql("SELECT *,(all_count - has_count) AS absence FROM(
|
||||||
|
SELECT * ,
|
||||||
|
(SELECT COUNT(*) FROM `student_works_evaluation_distributions` WHERE user_id = student_works.user_id AND student_work_id IN #{work_ids}) AS all_count,
|
||||||
|
(SELECT COUNT(*) FROM `student_works_scores` WHERE user_id = student_works.user_id AND student_work_id IN #{work_ids}) AS has_count
|
||||||
|
FROM `student_works`
|
||||||
|
WHERE homework_common_id = 213
|
||||||
|
) AS table_1
|
||||||
|
ORDER BY absence #{order}")
|
||||||
|
@order = order == "desc" ? "asc" : "desc"
|
||||||
|
respond_to do |format|
|
||||||
|
format.html
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
#获取作业
|
#获取作业
|
||||||
def find_homework
|
def find_homework
|
||||||
|
|
|
@ -219,7 +219,7 @@ class WelcomeController < ApplicationController
|
||||||
# 判断网站的入口,是课程 course 则跳过index去渲染 course 方法
|
# 判断网站的入口,是课程 course 则跳过index去渲染 course 方法
|
||||||
def entry_select
|
def entry_select
|
||||||
url = request.original_url.gsub('/','')
|
url = request.original_url.gsub('/','')
|
||||||
if url.include?(Setting.host_course.gsub('/',''))
|
if url.include?(Setting.url_course.gsub('/',''))
|
||||||
if @first_page.show_course == 1
|
if @first_page.show_course == 1
|
||||||
course
|
course
|
||||||
render :course
|
render :course
|
||||||
|
@ -228,7 +228,7 @@ class WelcomeController < ApplicationController
|
||||||
end
|
end
|
||||||
|
|
||||||
return 0
|
return 0
|
||||||
elsif url.include?(Setting.host_contest.gsub('/',''))
|
elsif url.include?(Setting.url_contest.gsub('/',''))
|
||||||
if @first_page.show_contest == 1
|
if @first_page.show_contest == 1
|
||||||
contest
|
contest
|
||||||
render :contest
|
render :contest
|
||||||
|
@ -237,7 +237,7 @@ class WelcomeController < ApplicationController
|
||||||
end
|
end
|
||||||
|
|
||||||
return 0
|
return 0
|
||||||
elsif url.include?(Setting.host_user.gsub('/',''))
|
elsif url.include?(Setting.url_user.gsub('/',''))
|
||||||
#redirect_to(:controller => "users", :action => "index")
|
#redirect_to(:controller => "users", :action => "index")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -2330,4 +2330,11 @@ module ApplicationHelper
|
||||||
def cur_user_works_for_homework homework
|
def cur_user_works_for_homework homework
|
||||||
homework.student_works.where("user_id = ?",User.current).first
|
homework.student_works.where("user_id = ?",User.current).first
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def file_preview_tag(file, html_options={})
|
||||||
|
if %w(pdf pptx doc docx xls xlsx).any?{|x| file.filename.downcase.end_with?(x)}
|
||||||
|
link_to '预览', download_named_attachment_path(file.id, file.filename, preview: true),html_options
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -361,15 +361,16 @@ module IssuesHelper
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# 之所以注释是因为该功能冗余了
|
||||||
if detail.property == 'attr' && detail.prop_key == 'description'
|
if detail.property == 'attr' && detail.prop_key == 'description'
|
||||||
s = l(:text_journal_changed_no_detail, :label => label)
|
s = l(:text_journal_changed_no_detail, :label => label)
|
||||||
unless no_html
|
# unless no_html
|
||||||
diff_link = link_to l(:label_diff),
|
# diff_link = link_to l(:label_diff),
|
||||||
{:controller => 'journals', :action => 'diff', :id => detail.journal_id,
|
# {:controller => 'journals', :action => 'diff', :id => detail.journal_id,
|
||||||
:detail_id => detail.id, :only_path => options[:only_path]},
|
# :detail_id => detail.id, :only_path => options[:only_path]},
|
||||||
:title => l(:label_view_diff)
|
# :title => l(:label_view_diff)
|
||||||
s << " (#{ diff_link })"
|
# s << " (#{ diff_link })"
|
||||||
end
|
# end
|
||||||
s.html_safe
|
s.html_safe
|
||||||
elsif detail.value.present?
|
elsif detail.value.present?
|
||||||
case detail.property
|
case detail.property
|
||||||
|
|
|
@ -60,4 +60,14 @@ module StudentWorkHelper
|
||||||
def is_praise_homework user_id, obj_id
|
def is_praise_homework user_id, obj_id
|
||||||
PraiseTread.where("user_id = #{user_id} AND praise_tread_object_id = #{obj_id} AND praise_tread_object_type = 'StudentWork'").empty?
|
PraiseTread.where("user_id = #{user_id} AND praise_tread_object_id = #{obj_id} AND praise_tread_object_type = 'StudentWork'").empty?
|
||||||
end
|
end
|
||||||
|
|
||||||
|
#获取指定学生在指定作业内应匿评的数量
|
||||||
|
def all_evaluation_count user,homework
|
||||||
|
StudentWorksEvaluationDistribution.joins(:student_work).where("student_works_evaluation_distributions.user_id = #{user.id} AND student_works.homework_common_id = #{homework.id}").count
|
||||||
|
end
|
||||||
|
|
||||||
|
#获取指定学生在指定作业内已匿评的数量
|
||||||
|
def has_evaluation_count user,homework
|
||||||
|
StudentWorksScore.joins(:student_work).where("student_works_scores.user_id = #{user.id} AND student_works.homework_common_id = #{homework.id}").count
|
||||||
|
end
|
||||||
end
|
end
|
|
@ -5,4 +5,6 @@ class Activity < ActiveRecord::Base
|
||||||
validates :act_id, presence: true
|
validates :act_id, presence: true
|
||||||
validates :act_type, presence: true
|
validates :act_type, presence: true
|
||||||
validates :user_id, presence: true
|
validates :user_id, presence: true
|
||||||
|
|
||||||
|
include Trustie::Cache::ClearCourseEvent
|
||||||
end
|
end
|
||||||
|
|
|
@ -19,4 +19,5 @@ class ForgeActivity < ActiveRecord::Base
|
||||||
validates :project_id,presence: true
|
validates :project_id,presence: true
|
||||||
validates :forge_act_id,presence: true
|
validates :forge_act_id,presence: true
|
||||||
validates :forge_act_type, presence: true
|
validates :forge_act_type, presence: true
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -18,7 +18,7 @@ class HomeworkCommon < ActiveRecord::Base
|
||||||
:description => :description,
|
:description => :description,
|
||||||
:author => :author,
|
:author => :author,
|
||||||
:url => Proc.new {|o| {:controller => 'student_work', :action => 'index', :homework => o.id}}
|
:url => Proc.new {|o| {:controller => 'student_work', :action => 'index', :homework => o.id}}
|
||||||
after_create :act_as_activity
|
after_create :act_as_activity, :send_mail
|
||||||
after_destroy :delete_kindeditor_assets
|
after_destroy :delete_kindeditor_assets
|
||||||
|
|
||||||
def act_as_activity
|
def act_as_activity
|
||||||
|
@ -28,4 +28,9 @@ class HomeworkCommon < ActiveRecord::Base
|
||||||
def delete_kindeditor_assets
|
def delete_kindeditor_assets
|
||||||
delete_kindeditor_assets_from_disk self.id,OwnerTypeHelper::HOMEWORKCOMMON
|
delete_kindeditor_assets_from_disk self.id,OwnerTypeHelper::HOMEWORKCOMMON
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def send_mail
|
||||||
|
Mailer.run.homework_added(self)
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -61,8 +61,8 @@ class Mailer < ActionMailer::Base
|
||||||
InviteList.create(:user_id => user.id, :project_id => project.id)
|
InviteList.create(:user_id => user.id, :project_id => project.id)
|
||||||
User.current = user unless User.current.nil?
|
User.current = user unless User.current.nil?
|
||||||
@user = user
|
@user = user
|
||||||
|
@token = Token.get_token_from_user(user, 'autologin')
|
||||||
@project_url = url_for(:controller => 'projects', :action => 'member', :id => project.id, :user_id => user.id, :mail => true)
|
@project_url = url_for(:controller => 'projects', :action => 'member', :id => project.id, :mail => true, :token => @token.value)
|
||||||
mail :to => email, :subject => @subject
|
mail :to => email, :subject => @subject
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -104,9 +104,14 @@ class Mailer < ActionMailer::Base
|
||||||
|
|
||||||
# 查询user的缺陷,项目中成员都能收到
|
# 查询user的缺陷,项目中成员都能收到
|
||||||
sql = "select DISTINCT * 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"
|
and (i.updated_on between '#{date_from}' and '#{date_to}') order by i.updated_on desc"
|
||||||
@issues = Issue.find_by_sql(sql)
|
@issues = Issue.find_by_sql(sql)
|
||||||
|
|
||||||
|
# issue回复
|
||||||
|
@issues_journals = Journal.find_by_sql("select j.* from journals j, members m, projects p, issues i
|
||||||
|
where m.user_id = '#{user.id}' and p.id = m.project_id and i.project_id = p.id and j.journalized_id = i.id
|
||||||
|
and j.journalized_type='Issue' and (j.created_on between '#{date_from}' and '#{date_to}') order by created_on desc")
|
||||||
|
|
||||||
# @bids 查询课程作业,包括老师发布的作业,以及user提交作业
|
# @bids 查询课程作业,包括老师发布的作业,以及user提交作业
|
||||||
# @attachments查询课程课件更新
|
# @attachments查询课程课件更新
|
||||||
@attachments ||= []
|
@attachments ||= []
|
||||||
|
@ -122,6 +127,11 @@ class Mailer < ActionMailer::Base
|
||||||
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# 项目附件
|
||||||
|
@project_attachments = Attachment.find_by_sql("select DISTINCT a.* from members m, attachments a
|
||||||
|
where a.container_id = m.project_id and m.user_id='#{user.id}' and container_type = 'Project' and (a.created_on between '#{date_from}' and '#{date_to}') order by a.created_on desc")
|
||||||
|
|
||||||
# user 提交的作业
|
# user 提交的作业
|
||||||
# @homeworks = HomeworkAttach.where("user_id=#{user.id} and (created_at between '#{date_from}' and '#{date_to}')").order("created_at desc")
|
# @homeworks = HomeworkAttach.where("user_id=#{user.id} and (created_at between '#{date_from}' and '#{date_to}')").order("created_at desc")
|
||||||
|
|
||||||
|
@ -155,13 +165,23 @@ class Mailer < ActionMailer::Base
|
||||||
end
|
end
|
||||||
# wiki
|
# wiki
|
||||||
|
|
||||||
# 查询user在课程中发布的通知,项目中发的新闻
|
# 查询user在课程中发布的通知和回复通知
|
||||||
@course_news = (course_ids && !course_ids.empty?) ? News.find_by_sql("select DISTINCT n.* from news n
|
@course_news = (course_ids && !course_ids.empty?) ? News.find_by_sql("select DISTINCT n.* from news n
|
||||||
where n.course_id in (#{course_ids})
|
where n.course_id in (#{course_ids})
|
||||||
and (created_on between '#{date_from}' and '#{date_to}') order by created_on desc") : []
|
and (created_on between '#{date_from}' and '#{date_to}') order by created_on desc") : []
|
||||||
|
|
||||||
|
@course_news_comments = Comment.find_by_sql("select cm.* from comments cm, members m, courses c, news n
|
||||||
|
where m.user_id = '#{user.id}' and c.id = m.course_id and n.course_id = c.id and cm.commented_id = n.id
|
||||||
|
and cm.commented_type ='News' and (cm.created_on between '#{date_from}' and '#{date_to}') order by created_on desc")
|
||||||
|
|
||||||
|
# 查询user在项目中添加新闻和回复新闻
|
||||||
@project_news = (project_ids && !project_ids.empty?) ? News.find_by_sql("select DISTINCT n.* from news n where n.project_id in (#{project_ids})
|
@project_news = (project_ids && !project_ids.empty?) ? News.find_by_sql("select DISTINCT n.* from news n where n.project_id in (#{project_ids})
|
||||||
and (created_on between '#{date_from}' and '#{date_to}') order by created_on desc") : []
|
and (created_on between '#{date_from}' and '#{date_to}') order by created_on desc") : []
|
||||||
|
|
||||||
|
@project_news_comments = Comment.find_by_sql("select c.* from comments c, members m, projects p, news n
|
||||||
|
where m.user_id = '#{user.id}' and p.id = m.project_id and n.project_id = p.id and c.commented_id = n.id
|
||||||
|
and c.commented_type ='News' and (c.created_on between '#{date_from}' and '#{date_to}') order by created_on desc")
|
||||||
|
|
||||||
# 查询user在课程及个人中留言
|
# 查询user在课程及个人中留言
|
||||||
@course_journal_messages = JournalsForMessage.find_by_sql("select DISTINCT jfm.* from journals_for_messages jfm, members m, courses c
|
@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
|
where m.user_id = '#{user.id}' and c.id = m.course_id and jfm.jour_id = c.id
|
||||||
|
@ -179,7 +199,7 @@ class Mailer < ActionMailer::Base
|
||||||
@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}))
|
@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")
|
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,
|
has_content = [@issues,@issues_journals,@course_messages,@project_messages,@course_news,@course_news_comments,@project_news,@project_news_comments,@project_attachments,
|
||||||
@course_journal_messages,@user_journal_messages,@project_journal_messages,@forums,@memos,@attachments,@bids,@wiki_contents].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}"
|
mylogger.debug "Sent activity mail : #{user.mail} - #{has_content}"
|
||||||
#有内容才发,没有不发
|
#有内容才发,没有不发
|
||||||
|
@ -497,6 +517,26 @@ class Mailer < ActionMailer::Base
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Builds a Mail::Message object used to email recipients of a course when an homework are posted.
|
||||||
|
#
|
||||||
|
# Example:
|
||||||
|
# attachments_added(attachments) => Mail::Message object
|
||||||
|
# Mailer.attachments_added(attachments).deliver => sends an email to the project's recipients
|
||||||
|
def homework_added(homework_common)
|
||||||
|
@homework_common = homework_common
|
||||||
|
@author = homework_common.user
|
||||||
|
@homework_common_url = url_for(:controller => "homework_common", :action =>"index", :homework => @homework_common.id)
|
||||||
|
@homework_author_url = url_for(user_activities_url(@author))
|
||||||
|
recipients ||= []
|
||||||
|
#将帖子创建者邮箱地址加入数组
|
||||||
|
@homework_common.course.members.each do |member|
|
||||||
|
recipients << member.user.mail
|
||||||
|
end
|
||||||
|
mail :to => recipients,
|
||||||
|
:subject => "[ #{l(:label_user_homework)} : #{homework_common.name} #{l(:label_memo_create_succ)}]",
|
||||||
|
:filter => true
|
||||||
|
end
|
||||||
|
|
||||||
# Builds a Mail::Message object used to email recipients of a news' project when a news item is added.
|
# Builds a Mail::Message object used to email recipients of a news' project when a news item is added.
|
||||||
#
|
#
|
||||||
# Example:
|
# Example:
|
||||||
|
|
|
@ -129,6 +129,16 @@ class Member < ActiveRecord::Base
|
||||||
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}")
|
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
|
end
|
||||||
|
|
||||||
|
#当前课程的作业列表
|
||||||
|
def homework_common_list
|
||||||
|
HomeworkCommon.where(:course_id => self.course_id)
|
||||||
|
end
|
||||||
|
|
||||||
|
#当前学生在指定作业内的得分
|
||||||
|
def homework_common_score homework_common
|
||||||
|
StudentWork.select("final_score").where(:homework_common_id => homework_common.id,:user_id => self.user_id)
|
||||||
|
end
|
||||||
|
|
||||||
def student_work_score_avg
|
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
|
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
|
end
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<%= javascript_include_tag "/assets/kindeditor/kindeditor" %>
|
<%= javascript_include_tag "/assets/kindeditor/kindeditor",'/assets/kindeditor/pasteimg' %>
|
||||||
<%= labelled_form_for @bid,:html => { :multipart => true } do |f| %>
|
<%= labelled_form_for @bid,:html => { :multipart => true } do |f| %>
|
||||||
<%= render :partial => 'new_homework_form', :locals => { :bid => @bid, :bid_id => "edit_bid_#{@bid.id}",:f=>f,:edit_mode => true} %>
|
<%= render :partial => 'new_homework_form', :locals => { :bid => @bid, :bid_id => "edit_bid_#{@bid.id}",:f=>f,:edit_mode => true} %>
|
||||||
<% end %>
|
<% end %>
|
|
@ -34,7 +34,7 @@
|
||||||
else if (window.attachEvent)
|
else if (window.attachEvent)
|
||||||
window.attachEvent("onload", buildsubmenus)
|
window.attachEvent("onload", buildsubmenus)
|
||||||
</script>
|
</script>
|
||||||
<%= javascript_include_tag "/assets/kindeditor/kindeditor" %>
|
<%= javascript_include_tag "/assets/kindeditor/kindeditor",'/assets/kindeditor/pasteimg' %>
|
||||||
<%#= javascript_include_tag "/assets/kindeditor/kindeditor-min" %>
|
<%#= javascript_include_tag "/assets/kindeditor/kindeditor-min" %>
|
||||||
|
|
||||||
<% if @project %>
|
<% if @project %>
|
||||||
|
|
|
@ -10,7 +10,7 @@ div,img,tr,td{ border:0;}
|
||||||
table,tr,td{border:0; cellspacing:0; cellpadding:0;}
|
table,tr,td{border:0; cellspacing:0; cellpadding:0;}
|
||||||
ul,li{ list-style-type:none}
|
ul,li{ list-style-type:none}
|
||||||
.cl{ clear:both; overflow:hidden; }
|
.cl{ clear:both; overflow:hidden; }
|
||||||
a{ text-decoration:none; }
|
a{ text-decoration:none !important; }
|
||||||
a:hover{ }
|
a:hover{ }
|
||||||
|
|
||||||
.error_content{ width:550px; height:200px; margin:0 auto; padding:10px 0;}
|
.error_content{ width:550px; height:200px; margin:0 auto; padding:10px 0;}
|
||||||
|
@ -20,6 +20,14 @@ a:hover{ }
|
||||||
.error_link a{ display:block; width:80px; height:28px; font-size:14px; font-weight:bold; color:#fff; text-align:center; background:#15bccf; float:left; margin-right:10px;}
|
.error_link a{ display:block; width:80px; height:28px; font-size:14px; font-weight:bold; color:#fff; text-align:center; background:#15bccf; float:left; margin-right:10px;}
|
||||||
.error_link a:hover{ background:#ff8417;}
|
.error_link a:hover{ background:#ff8417;}
|
||||||
</style>
|
</style>
|
||||||
|
<script type="text/javascript">
|
||||||
|
$(function(){
|
||||||
|
if(window.history.length == 1)
|
||||||
|
{
|
||||||
|
$("#history_back").css("background","#CCC");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
</script>
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
|
@ -31,7 +39,7 @@ a:hover{ }
|
||||||
没有访问权限!建议您</p>
|
没有访问权限!建议您</p>
|
||||||
<div class="error_link">
|
<div class="error_link">
|
||||||
<!---<a href="http://forge.trustie.net/" target="_blank">返回首页</a>---->
|
<!---<a href="http://forge.trustie.net/" target="_blank">返回首页</a>---->
|
||||||
<a href="javascript:history.back()">后退一步</a>
|
<a href="javascript:history.back()" id="history_back">后退一步</a>
|
||||||
<a href="http://user.trustie.net/users/5/user_newfeedback">给我留言</a>
|
<a href="http://user.trustie.net/users/5/user_newfeedback">给我留言</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
div.recall_con{width:570px;}
|
div.recall_con{width:570px;}
|
||||||
div.recall_con .reply_btn{margin-left:525px;margin-top:5px;}
|
div.recall_con .reply_btn{margin-left:525px;margin-top:5px;}
|
||||||
</style>
|
</style>
|
||||||
<%= javascript_include_tag "/assets/kindeditor/kindeditor" %>
|
<%= javascript_include_tag "/assets/kindeditor/kindeditor",'/assets/kindeditor/pasteimg' %>
|
||||||
<div class="msg_box fl" id='leave-message' nhname="new_message">
|
<div class="msg_box fl" id='leave-message' nhname="new_message">
|
||||||
<%# reply_allow = JournalsForMessage.create_by_user? User.current %>
|
<%# reply_allow = JournalsForMessage.create_by_user? User.current %>
|
||||||
<h4><%= l(:label_leave_message) %></h4>
|
<h4><%= l(:label_leave_message) %></h4>
|
||||||
|
|
|
@ -17,13 +17,14 @@
|
||||||
<h2><%= @member_score.user.name %> 历次作业积分</h2>
|
<h2><%= @member_score.user.name %> 历次作业积分</h2>
|
||||||
<ul class="tscore_box">
|
<ul class="tscore_box">
|
||||||
<li ><span class="c_blue02 w280">作业名称</span><span class="c_blue02 w70">得分</span></li>
|
<li ><span class="c_blue02 w280">作业名称</span><span class="c_blue02 w70">得分</span></li>
|
||||||
<% @member_score.student_work_score.each do |homework_score| %>
|
<% @member_score.homework_common_list.each do |homework_common| %>
|
||||||
<li>
|
<li>
|
||||||
<span class="c_grey02 w280">
|
<span class="c_grey02 w280">
|
||||||
<%= homework_score.name %>
|
<%= homework_common.name %>
|
||||||
</span>
|
</span>
|
||||||
<span class="c_red w70">
|
<span class="c_red w70">
|
||||||
<%= format("%0.2f",homework_score.final_score.nil? ? 0 : homework_score.final_score) %>
|
<% final_score = @member_score.homework_common_score(homework_common).first%>
|
||||||
|
<%= final_score.nil? || final_score.final_score.nil? ? "--" : format("%0.2f", final_score.final_score) %>
|
||||||
</span>
|
</span>
|
||||||
</li>
|
</li>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
|
@ -25,7 +25,9 @@
|
||||||
<% if file.is_public? || User.current.member_of_course?(course) %>
|
<% if file.is_public? || User.current.member_of_course?(course) %>
|
||||||
<div class="re_con_box" id="container_files_<%= file.id %>">
|
<div class="re_con_box" id="container_files_<%= file.id %>">
|
||||||
<div class="">
|
<div class="">
|
||||||
<%= link_to truncate(file.filename,length: 35, omission: '...'), download_named_attachment_path(file.id, file.filename, preview: true),:title => file.filename+"\n"+file.description.to_s, :style => "overflow: hidden; white-space: nowrap;text-overflow: ellipsis;",:class => "c_dblue f_14 f_b f_l" %>
|
<%= link_to truncate(file.filename,length: 35, omission: '...'),
|
||||||
|
download_named_attachment_path(file.id, file.filename),
|
||||||
|
:title => file.filename+"\n"+file.description.to_s, :style => "overflow: hidden; white-space: nowrap;text-overflow: ellipsis;",:class => "c_dblue f_14 f_b f_l" %>
|
||||||
<% if User.current.logged? %>
|
<% if User.current.logged? %>
|
||||||
<% if (is_course_teacher(User.current,@course) || file.author_id == User.current.id) && course_contains_attachment?(@course,file) %>
|
<% if (is_course_teacher(User.current,@course) || file.author_id == User.current.id) && course_contains_attachment?(@course,file) %>
|
||||||
<%= link_to("选入我的其他课程",quote_resource_show_course_file_path(@course,file),:class => "f_l re_select c_lorange",:remote => true) if has_course?(User.current,file) %>
|
<%= link_to("选入我的其他课程",quote_resource_show_course_file_path(@course,file),:class => "f_l re_select c_lorange",:remote => true) if has_course?(User.current,file) %>
|
||||||
|
@ -40,7 +42,7 @@
|
||||||
<% else %>
|
<% else %>
|
||||||
<%= link_to("选入我的课程",quote_resource_show_course_file_path(@course,file),:class => "f_l re_select c_lorange",:remote => true) if has_course?(User.current,file) %>
|
<%= link_to("选入我的课程",quote_resource_show_course_file_path(@course,file),:class => "f_l re_select c_lorange",:remote => true) if has_course?(User.current,file) %>
|
||||||
<% end %>
|
<% end %>
|
||||||
<%= link_to_attachment file, text: '下载', class: 'f_l re_open' %>
|
<%= file_preview_tag(file, class: 'f_l re_open') %>
|
||||||
<% else %>
|
<% else %>
|
||||||
<% end %>
|
<% end %>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -18,7 +18,9 @@
|
||||||
<% project_attachments.each do |file| %>
|
<% project_attachments.each do |file| %>
|
||||||
<div class="re_con_box">
|
<div class="re_con_box">
|
||||||
<div class="">
|
<div class="">
|
||||||
<%= link_to truncate(file.filename,length: 35, omission: '...'), download_named_attachment_path(file.id, file.filename, preview: true),:title => file.filename+"\n"+file.description.to_s, :style => "overflow: hidden; white-space: nowrap;text-overflow: ellipsis;",:class => "c_dblue f_14 f_b f_l" %>
|
<%= link_to truncate(file.filename,length: 35, omission: '...'),
|
||||||
|
download_named_attachment_path(file.id, file.filename),
|
||||||
|
:title => file.filename+"\n"+file.description.to_s, :style => "overflow: hidden; white-space: nowrap;text-overflow: ellipsis;",:class => "c_dblue f_14 f_b f_l" %>
|
||||||
<% if User.current.logged? %>
|
<% if User.current.logged? %>
|
||||||
<% if (manage_allowed || file.author_id == User.current.id) && project_contains_attachment?(project,file) %>
|
<% if (manage_allowed || file.author_id == User.current.id) && project_contains_attachment?(project,file) %>
|
||||||
<%= link_to(l(:label_slected_to_other_project),quote_resource_show_project_project_file_path(project,file),:class => "f_l re_select",:remote => true) if has_project?(User.current,file) %>
|
<%= link_to(l(:label_slected_to_other_project),quote_resource_show_project_project_file_path(project,file),:class => "f_l re_select",:remote => true) if has_project?(User.current,file) %>
|
||||||
|
@ -30,7 +32,7 @@
|
||||||
<% else %>
|
<% else %>
|
||||||
<%= link_to(l(:label_slected_to_project),quote_resource_show_project_project_file_path(project,file),:class => "f_l re_select",:remote => true) if has_project?(User.current,file) %>
|
<%= link_to(l(:label_slected_to_project),quote_resource_show_project_project_file_path(project,file),:class => "f_l re_select",:remote => true) if has_project?(User.current,file) %>
|
||||||
<% end %>
|
<% end %>
|
||||||
<%= link_to_attachment file, text: '下载', class: 'f_l re_open' %>
|
<%= file_preview_tag(file, class: 'f_l re_open') %>
|
||||||
<% end %>
|
<% end %>
|
||||||
</div>
|
</div>
|
||||||
<div class="cl"></div>
|
<div class="cl"></div>
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<!-- added by fq -->
|
<!-- added by fq -->
|
||||||
<h1>编辑讨论区</h1>
|
<h1>编辑讨论区</h1>
|
||||||
<%= javascript_include_tag "/assets/kindeditor/kindeditor" %>
|
<%= javascript_include_tag "/assets/kindeditor/kindeditor",'/assets/kindeditor/pasteimg' %>
|
||||||
<%= render 'form_edit_mode' %>
|
<%= render 'form_edit_mode' %>
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
<% @nav_dispaly_forum_label = 1%>
|
<% @nav_dispaly_forum_label = 1%>
|
||||||
<!-- added by fq -->
|
<!-- added by fq -->
|
||||||
<h1 style="margin-top: 2%; margin-left: 49%"><%= l :label_forum_new %></h1>
|
<h1 style="margin-top: 2%; margin-left: 49%"><%= l :label_forum_new %></h1>
|
||||||
<%= javascript_include_tag "/assets/kindeditor/kindeditor" %>
|
<%= javascript_include_tag "/assets/kindeditor/kindeditor",'/assets/kindeditor/pasteimg' %>
|
||||||
<%= render 'form_create_mode' %>
|
<%= render 'form_create_mode' %>
|
||||||
|
|
||||||
<%#= link_to l(:button_back), forums_path %>
|
<%#= link_to l(:button_back), forums_path %>
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<%= javascript_include_tag "/assets/kindeditor/kindeditor" %>
|
<%= javascript_include_tag "/assets/kindeditor/kindeditor",'/assets/kindeditor/pasteimg' %>
|
||||||
<%= error_messages_for 'homework_common' %>
|
<%= error_messages_for 'homework_common' %>
|
||||||
|
|
||||||
<div class="project_r_h">
|
<div class="project_r_h">
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<%= javascript_include_tag "/assets/kindeditor/kindeditor" %>
|
<%= javascript_include_tag "/assets/kindeditor/kindeditor",'/assets/kindeditor/pasteimg' %>
|
||||||
<%= error_messages_for 'homework_common' %>
|
<%= error_messages_for 'homework_common' %>
|
||||||
|
|
||||||
<div class="project_r_h">
|
<div class="project_r_h">
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<%= javascript_include_tag "/assets/kindeditor/kindeditor" %>
|
<%= javascript_include_tag "/assets/kindeditor/kindeditor",'/assets/kindeditor/pasteimg' %>
|
||||||
<div class="project_r_h" xmlns="http://www.w3.org/1999/html">
|
<div class="project_r_h" xmlns="http://www.w3.org/1999/html">
|
||||||
<h2 class="project_h2"><%= l(:label_issue_new) %></h2>
|
<h2 class="project_h2"><%= l(:label_issue_new) %></h2>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<%= javascript_include_tag "/assets/kindeditor/kindeditor" %>
|
<%= javascript_include_tag "/assets/kindeditor/kindeditor",'/assets/kindeditor/pasteimg' %>
|
||||||
<div class="project_r_h">
|
<div class="project_r_h">
|
||||||
<h2 class="project_h2"><%= l(:label_issue_edit) %></h2>
|
<h2 class="project_h2"><%= l(:label_issue_edit) %></h2>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -12,10 +12,10 @@
|
||||||
<meta name="keywords" content="issue,bug,tracker" />
|
<meta name="keywords" content="issue,bug,tracker" />
|
||||||
<%= csrf_meta_tag %>
|
<%= csrf_meta_tag %>
|
||||||
<%= favicon %>
|
<%= favicon %>
|
||||||
<%= javascript_include_tag "/assets/kindeditor/kindeditor" %>
|
|
||||||
<%= stylesheet_link_tag 'jquery/jquery-ui-1.9.2', 'application', 'nyan', :media => 'all' %>
|
<%= stylesheet_link_tag 'jquery/jquery-ui-1.9.2', 'application', 'nyan', :media => 'all' %>
|
||||||
<%= stylesheet_link_tag 'rtl', :media => 'all' if l(:direction) == 'rtl' %>
|
<%= stylesheet_link_tag 'rtl', :media => 'all' if l(:direction) == 'rtl' %>
|
||||||
<%= javascript_heads %>
|
<%= javascript_heads %>
|
||||||
|
<%= javascript_include_tag "/assets/kindeditor/kindeditor",'/assets/kindeditor/pasteimg' %>
|
||||||
<%= heads_for_theme %>
|
<%= heads_for_theme %>
|
||||||
|
|
||||||
<%= call_hook :view_layouts_base_html_head %>
|
<%= call_hook :view_layouts_base_html_head %>
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
<!-- <h1><%#= link_to(h("#{issue.tracker.name} ##{issue.project_index}: #{issue.subject}"), issue_url) %></h1> -->
|
<!-- <h1><%#= link_to(h("#{issue.tracker.name} ##{issue.project_index}: #{issue.subject}"), issue_url) %></h1> -->
|
||||||
<p>
|
<p>
|
||||||
|
|
||||||
<span class="c_blue" style="color:#1b55a7;">
|
<span class="c_blue" style="color:#1b55a7;">
|
||||||
<%= link_to(h("#{@author.login}(#{@author.show_name})"), @issue_author_url , :style=>'color:#1b55a7; font-weight:bold;') %>
|
<%= link_to(h("#{@author.login}(#{@author.show_name})"), @issue_author_url , :style=>'color:#1b55a7; font-weight:bold;') %>
|
||||||
</span><%= l(:mail_issue_title_userin)%>
|
</span><%= l(:mail_issue_title_userin)%>
|
||||||
<span class="c_blue" style="color:#1b55a7;"><%= link_to(h("#{@issue.project.name}"), @project_url, :style=>'color:#1b55a7; font-weight:bold;') %></span><%= l(:mail_issue_title_active)%></p>
|
<span class="c_blue" style="color:#1b55a7;"><%= link_to(h("#{@issue.project.name}"), @project_url, :style=>'color:#1b55a7; font-weight:bold;') %></span><%= l(:mail_issue_title_active)%>
|
||||||
|
</p>
|
||||||
<div class="mail_box" style="border:1px solid #c8c8c8; width:570px; height: auto; padding:15px; margin-top:10px; margin-bottom:10px;">
|
<div class="mail_box" style="border:1px solid #c8c8c8; width:570px; height: auto; padding:15px; margin-top:10px; margin-bottom:10px;">
|
||||||
<ul style="list-style-type:none; margin:0; padding:0;">
|
<ul style="list-style-type:none; margin:0; padding:0;">
|
||||||
<li style="list-style-type:none; margin:0; padding:0;float: left; "><span style="float: left;"><strong><%= l(:mail_issue_subject)%></strong></span><span style="float: left; width: 526px"><%= link_to(issue.subject, issue_url, :style=>'color:#1b55a7; font-weight:bold;') %></span></li>
|
<li style="list-style-type:none; margin:0; padding:0;float: left; "><span style="float: left;"><strong><%= l(:mail_issue_subject)%></strong></span><span style="float: left; width: 526px"><%= link_to(issue.subject, issue_url, :style=>'color:#1b55a7; font-weight:bold;') %></span></li>
|
||||||
|
@ -13,9 +13,9 @@
|
||||||
<span style="float: left; width: 526px">
|
<span style="float: left; width: 526px">
|
||||||
|
|
||||||
<% if @journal.nil? %>
|
<% if @journal.nil? %>
|
||||||
<%= issue.description=='' ? l(:label_none) : issue.description %>
|
<%= issue.description=='' ? l(:label_none) : issue.description.html_safe %>
|
||||||
<% else %>
|
<% else %>
|
||||||
<%= @journal.notes=='' ? l(:label_none) : @journal.notes %>
|
<%= @journal.notes=='' ? l(:label_none) : @journal.notes.html_safe %>
|
||||||
<% end%>
|
<% end%>
|
||||||
</span>
|
</span>
|
||||||
</li>
|
</li>
|
||||||
|
@ -29,8 +29,6 @@
|
||||||
<p style="float: left; width: 526px; margin:0; padding:0;"><%= link_to_attachment(attach, :download => true, :token => @token.value, :only_path => false, :style=>'color:#1b55a7; font-weight:bold;')%></p>
|
<p style="float: left; width: 526px; margin:0; padding:0;"><%= link_to_attachment(attach, :download => true, :token => @token.value, :only_path => false, :style=>'color:#1b55a7; font-weight:bold;')%></p>
|
||||||
<% end %></span>
|
<% end %></span>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
|
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<div class="cl" style="margin-top: 30px; clear:both; overflow:hidden;"></div>
|
<div class="cl" style="margin-top: 30px; clear:both; overflow:hidden;"></div>
|
||||||
|
@ -40,7 +38,6 @@
|
||||||
<div class="cl" style="margin-top: 30px; clear:both; overflow:hidden;"></div>
|
<div class="cl" style="margin-top: 30px; clear:both; overflow:hidden;"></div>
|
||||||
</div>
|
</div>
|
||||||
<!-- <li><%#=l(:field_author)%>: <%#=h issue.author %></li>
|
<!-- <li><%#=l(:field_author)%>: <%#=h issue.author %></li>
|
||||||
|
|
||||||
<li><%#=l(:field_status)%>: <%#=h issue.status %></li>
|
<li><%#=l(:field_status)%>: <%#=h issue.status %></li>
|
||||||
<li><%#=l(:field_priority)%>: <%#=h issue.priority %></li>
|
<li><%#=l(:field_priority)%>: <%#=h issue.priority %></li>
|
||||||
<li><%#=l(:field_assigned_to)%>: <%#=h issue.assigned_to %></li>
|
<li><%#=l(:field_assigned_to)%>: <%#=h issue.assigned_to %></li>
|
||||||
|
|
|
@ -1,5 +1,14 @@
|
||||||
<%= link_to h(@added_to), @added_to_url %><br />
|
<%= link_to h(@added_to), @added_to_url %><br />
|
||||||
|
|
||||||
<ul><% @attachments.each do |attachment | %>
|
<ul>
|
||||||
<li><%=h attachment.filename %></li>
|
<% @attachments.each do |attachment | %>
|
||||||
<% end %></ul>
|
<li>
|
||||||
|
<%= link_to attachment.author, user_activities_url(attachment.author),
|
||||||
|
:style => "color:#1B55A7; float:left;display:block; margin-right:5px; overflow:hidden; white-space: nowrap; text-overflow:ellipsis;"%>
|
||||||
|
<span class="wmail_txt" style="float:left; margin-right:5px;color:#ACAEB1;"><%= l(:label_project_mail_upload) %></span>
|
||||||
|
<%= link_to truncate(attachment.filename,length: 30,omission: '...'), project_files_url(attachment.project),
|
||||||
|
:style => "color:#1B55A7;float:left; font-weight:normal;margin-right:5px; display:block;overflow:hidden; white-space: nowrap; text-overflow:ellipsis;"
|
||||||
|
%>
|
||||||
|
</li>
|
||||||
|
<% end %>
|
||||||
|
</ul>
|
||||||
|
|
|
@ -1,4 +1,8 @@
|
||||||
<%= @added_to %><% @attachments.each do |attachment | %>
|
<%= link_to h(@added_to), @added_to_url %>
|
||||||
- <%= attachment.filename %><% end %>
|
|
||||||
|
<% @attachments.each do |attachment | %>
|
||||||
|
<%= link_to attachment.author, user_activities_url(attachment.author) %>
|
||||||
|
<%= l(:label_project_mail_upload) %>
|
||||||
|
<%= link_to truncate(attachment.filename,length: 30,omission: '...'), project_files_url(attachment.project) %>
|
||||||
|
<% end %>
|
||||||
|
|
||||||
<%= @added_to_url %>
|
|
||||||
|
|
|
@ -1,12 +1,13 @@
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
<span class="c_blue" style="color:#1b55a7;">
|
<span class="c_blue" style="color:#1b55a7;">
|
||||||
<%= link_to(h("#{@author.login}(#{@author.show_name})"), @issue_author_url , :style=>'color:#1b55a7; font-weight:bold;') %>
|
<%= link_to(h("#{@author.login}(#{@author.show_name})"), @issue_author_url , :style=>'color:#1b55a7; font-weight:bold;') %>
|
||||||
</span><%= l(:mail_issue_title_userin)%>
|
</span>
|
||||||
|
<%= l(:mail_issue_title_userin)%>
|
||||||
<span class="c_blue" style="color:#1b55a7;">
|
<span class="c_blue" style="color:#1b55a7;">
|
||||||
<%= link_to(h(@forum.name), @forum_url,:style=>'color:#1b55a7; font-weight:bold;') %>
|
<%= link_to(h(@forum.name), @forum_url,:style=>'color:#1b55a7; font-weight:bold;') %>
|
||||||
|
</span>
|
||||||
</span><%= l(:mail_issue_title_active)%></p>
|
<%= l(:mail_issue_title_active) %>
|
||||||
|
</p>
|
||||||
<div class="mail_box" style="border:1px solid #c8c8c8; width:570px; height: auto; padding:15px; margin-top:10px; margin-bottom:10px;">
|
<div class="mail_box" style="border:1px solid #c8c8c8; width:570px; height: auto; padding:15px; margin-top:10px; margin-bottom:10px;">
|
||||||
<ul style="list-style-type:none; margin:0; padding:0;">
|
<ul style="list-style-type:none; margin:0; padding:0;">
|
||||||
<li style="list-style-type:none; margin:0; padding:0;"><span style="float: left;"><strong><%= l(:mail_issue_subject) %></strong></span>
|
<li style="list-style-type:none; margin:0; padding:0;"><span style="float: left;"><strong><%= l(:mail_issue_subject) %></strong></span>
|
||||||
|
@ -19,7 +20,6 @@
|
||||||
<%= @memo.content.html_safe %>
|
<%= @memo.content.html_safe %>
|
||||||
</span>
|
</span>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
</ul>
|
</ul>
|
||||||
<div class="cl" style="margin-top: 30px; clear:both; overflow:hidden;"></div>
|
<div class="cl" style="margin-top: 30px; clear:both; overflow:hidden;"></div>
|
||||||
<label class="mail_reply">
|
<label class="mail_reply">
|
||||||
|
|
|
@ -0,0 +1,30 @@
|
||||||
|
<p>
|
||||||
|
<span class="c_blue" style="color:#1b55a7;">
|
||||||
|
<%= link_to(h("#{@homework_common.user.login}(#{@homework_common.user.show_name})"), @homework_author_url , :style=>'color:#1b55a7; font-weight:bold;') %>
|
||||||
|
</span><%= l(:mail_course_title_userin)%>
|
||||||
|
<span class="c_blue" style="color:#1b55a7;">
|
||||||
|
<%=h @homework_common.course.name %>
|
||||||
|
</span>
|
||||||
|
<%= l(:mail_course_homework_active) %> :
|
||||||
|
<span class="c_blue" style="color:#1b55a7;">
|
||||||
|
<%= link_to(h(@homework_common.name), @homework_common_url,:style=>'color:#1b55a7; font-weight:bold;') %>
|
||||||
|
</span>
|
||||||
|
<%= l(:mail_attention) %>
|
||||||
|
</p>
|
||||||
|
<div class="mail_box" style="border:1px solid #c8c8c8; width:570px; height: auto; padding:15px; margin-top:10px; margin-bottom:10px;">
|
||||||
|
<ul style="list-style-type:none; margin:0; padding:0;">
|
||||||
|
<li style="list-style-type:none; margin:0; padding:0;"><span style="float: left;"><strong><%= l(:mail_issue_subject)%></strong></span>
|
||||||
|
<span style="float: left; width: 526px"> <%= link_to(h(@homework_common.name), @homework_common_url, :style=>'color:#1b55a7; font-weight:bold;') %></span>
|
||||||
|
</li>
|
||||||
|
<li style="list-style-type:none; margin:0; padding:0;"><span style="float: left;"><strong><%= l(:mail_issue_sent_from)%></strong></span>
|
||||||
|
<span style="float: left; width: 526px"><%=h @homework_common.course.name %></span>
|
||||||
|
</li>
|
||||||
|
<li style="list-style-type:none; margin:0; padding:0;"><span style="float: left;"><strong><%= l(:mail_issue_content)%></strong></span>
|
||||||
|
<span style="float: left; width: 526px">
|
||||||
|
<%= @homework_common.description.html_safe %>
|
||||||
|
</span>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
<div class="cl" style="margin-top: 30px; clear:both; overflow:hidden;"></div>
|
||||||
|
</div>
|
|
@ -0,0 +1,17 @@
|
||||||
|
<%= link_to(h("#{@homework_common.user.login}(#{@homework_common.user.show_name})"), @homework_author_url ) %>
|
||||||
|
<%= l(:mail_course_title_userin)%>
|
||||||
|
|
||||||
|
<%=h @homework_common.course.name %>
|
||||||
|
<%= l(:mail_course_homework_active) %> :
|
||||||
|
<%= link_to(h(@homework_common.name), @homework_common_url) %>
|
||||||
|
|
||||||
|
<%= l(:mail_attention) %>
|
||||||
|
<%= l(:mail_issue_subject)%>
|
||||||
|
<%= link_to(h(@homework_common.name), @homework_common_url) %>
|
||||||
|
<%= l(:mail_issue_sent_from)%>
|
||||||
|
<%=h @homework_common.course.name %>
|
||||||
|
<%= l(:mail_issue_content)%>
|
||||||
|
|
||||||
|
<%= @homework_common.description.html_safe %>
|
||||||
|
|
||||||
|
|
|
@ -2,10 +2,11 @@
|
||||||
<h4 class="wmail_h4" style="color:#474646; font-size:14px; margin-bottom:5px;" >
|
<h4 class="wmail_h4" style="color:#474646; font-size:14px; margin-bottom:5px;" >
|
||||||
<%= @subject %>
|
<%= @subject %>
|
||||||
</h4>
|
</h4>
|
||||||
<% if @attachments.first || @course_news.first || @bids.first ||
|
<% if @attachments.first || @course_news.first || @course_news_comments.first || @bids.first ||
|
||||||
@course_journal_messages.first|| @course_messages.first || @attachments.first %>
|
@course_journal_messages.first|| @course_messages.first || @attachments.first %>
|
||||||
<div class="wmail_main" style="padding:20px 10px 0px;">
|
<div class="wmail_main" style="padding:20px 10px 0px;">
|
||||||
<h3 class="wmail_h2" style="color:#15bccf; "><%= l(:label_course_overview)%></h3>
|
<h3 class="wmail_h2" style="color:#15bccf; "><%= l(:label_course_overview)%></h3>
|
||||||
|
<!-- 课程通知 -->
|
||||||
<% unless @course_news.first.nil? %>
|
<% unless @course_news.first.nil? %>
|
||||||
<ul class="wmail_ul" style=" list-style-type:none;clear: both;margin-left:10px; border-bottom:1px dashed #cfcfcf; padding-bottom:15px; width:1020px; margin-bottom:15px;">
|
<ul class="wmail_ul" style=" list-style-type:none;clear: both;margin-left:10px; border-bottom:1px dashed #cfcfcf; padding-bottom:15px; width:1020px; margin-bottom:15px;">
|
||||||
<span class="wmail_h4" style="color:#474646; font-size:14px; margin-bottom:5px;" >
|
<span class="wmail_h4" style="color:#474646; font-size:14px; margin-bottom:5px;" >
|
||||||
|
@ -35,6 +36,38 @@
|
||||||
</ul><!--课程通知 end-->
|
</ul><!--课程通知 end-->
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
|
<!-- 课程通知回复 -->
|
||||||
|
<% unless @course_news_comments.first.nil? %>
|
||||||
|
<ul class="wmail_ul" style=" list-style-type:none;clear: both;margin-left:10px; border-bottom:1px dashed #cfcfcf; padding-bottom:15px; width:1020px; margin-bottom:15px;">
|
||||||
|
<span class="wmail_h4" style="color:#474646; font-size:14px; margin-bottom:5px;" >
|
||||||
|
<%= l(:label_course_news) %>
|
||||||
|
</span>
|
||||||
|
<% @course_news_comments.each do |course_news_comment|%>
|
||||||
|
<li style="clear: both; list-style: none;">
|
||||||
|
<span class="wmail_dis" style="float:left; color:#000000; margin-right:5px;">▪</span>
|
||||||
|
<span class="wmail_b" style="color:#666; font-weight:bold; float:left;">[</span>
|
||||||
|
<% unless course_news_comment.commented.nil? %>
|
||||||
|
<%= link_to truncate(course_news_comment.commented.course.name,length: 30,omission: '...'), course_url(course_news_comment.commented.course, :token => @token.value),
|
||||||
|
:class=> "wmail_column",
|
||||||
|
:style=> " font-weight: bold; display:block; float:left; color:#666;overflow:hidden; white-space: nowrap; text-overflow:ellipsis;" %>
|
||||||
|
<% end %>
|
||||||
|
<span class="wmail_b" style="color:#666; font-weight:bold; float:left;">]</span>
|
||||||
|
|
||||||
|
<%= link_to course_news_comment.author, user_activities_url(course_news_comment.author,:token => @token.value), :class => "wmail_name",
|
||||||
|
:style => "color:#2E8DD7; float:left;display:block; margin-right:5px; margin-left:5px; overflow:hidden; white-space: nowrap; text-overflow:ellipsis;"%>
|
||||||
|
<span class="wmail_txt" style="float:left; margin-right:5px;color:#ACAEB1;"><%= l(:label_project_notice) %></span>
|
||||||
|
|
||||||
|
<%= link_to truncate(course_news_comment.comments,length: 30,omission: '...'), news_url(course_news_comment.commented,:token => @token.value),
|
||||||
|
:class => 'wmail_info',
|
||||||
|
:style => "color:#2E8DD7;float:left; font-weight:normal;margin-right:5px; display:block;overflow:hidden; white-space: nowrap; text-overflow:ellipsis;"
|
||||||
|
%>
|
||||||
|
<span class="wmail_date" style="color:#6e6e6e; float:left;display:block; margin-left:40px;"><%= format_time(course_news_comment.created_on) %></span>
|
||||||
|
</li>
|
||||||
|
<% end %>
|
||||||
|
<div class="cl"></div>
|
||||||
|
</ul><!--课程通知回复 end-->
|
||||||
|
<% end %>
|
||||||
|
|
||||||
<!--课程作业-->
|
<!--课程作业-->
|
||||||
<% unless @bids.empty? %>
|
<% unless @bids.empty? %>
|
||||||
<ul class="wmail_ul" style="clear: both;margin-left:10px; border-bottom:1px dashed #cfcfcf; padding-bottom:15px; width:1020px; margin-bottom:15px;">
|
<ul class="wmail_ul" style="clear: both;margin-left:10px; border-bottom:1px dashed #cfcfcf; padding-bottom:15px; width:1020px; margin-bottom:15px;">
|
||||||
|
@ -64,7 +97,6 @@
|
||||||
</li>
|
</li>
|
||||||
<% end %>
|
<% end %>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
<div class="cl"></div>
|
<div class="cl"></div>
|
||||||
</ul><!--作业动态 end-->
|
</ul><!--作业动态 end-->
|
||||||
<% end %>
|
<% end %>
|
||||||
|
@ -162,7 +194,8 @@
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
<!--项目相关-->
|
<!--项目相关-->
|
||||||
<% if @issues.first || @project_messages.first || @wiki_contents.first || @project_news.first || @project_journal_messages.first %>
|
<% if @issues.first || @project_messages.first || @issues_journals.first || @wiki_contents.first || @project_news.first || @project_news_comments.first || @project_journal_messages.first ||
|
||||||
|
@project_news_comments.first %>
|
||||||
<div class="wmail_main" style="padding:20px 10px 0px;">
|
<div class="wmail_main" style="padding:20px 10px 0px;">
|
||||||
<h3 class="wmail_h2" style="color:#15BCCF; "><%= l(:label_project_overview_new)%></h3>
|
<h3 class="wmail_h2" style="color:#15BCCF; "><%= l(:label_project_overview_new)%></h3>
|
||||||
<% unless @issues.first.nil? %>
|
<% unless @issues.first.nil? %>
|
||||||
|
@ -192,6 +225,41 @@
|
||||||
</ul><!--问题跟踪 end-->
|
</ul><!--问题跟踪 end-->
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
|
<!-- issues回复 -->
|
||||||
|
|
||||||
|
<% unless @issues_journals.first.nil? %>
|
||||||
|
<ul class="wmail_ul" style="margin-left:10px; border-bottom:1px dashed #cfcfcf; padding-bottom:15px; width:1020px; margin-bottom:15px;">
|
||||||
|
<span class="wmail_h4" style="color:#666; font-size:14px; margin-bottom:5px;" >
|
||||||
|
<%= l(:label_issue_tracking) %>
|
||||||
|
</span>
|
||||||
|
<% @issues_journals.each do |issues_journal| %>
|
||||||
|
<li style="clear: both; list-style: none;">
|
||||||
|
<span class="wmail_dis" style="float:left; color:#000000; margin-right:5px;">▪</span>
|
||||||
|
<span class="wmail_b" style="color:#666; font-weight:bold; float:left;">[</span>
|
||||||
|
<%= link_to truncate(issues_journal.issue.project.name,length: 30,omission: '...'), project_url(issues_journal.issue.project, :token => @token.value),
|
||||||
|
:class=> "wmail_column",
|
||||||
|
:style=> " font-weight: bold; display:block; float:left; color:#666;overflow:hidden; white-space: nowrap; text-overflow:ellipsis;" %>
|
||||||
|
<span class="wmail_b" style="color:#666; font-weight:bold; float:left;">]</span>
|
||||||
|
<%= link_to issues_journal.user, user_activities_url(issues_journal.user,:token => @token.value), :class => "wmail_name",
|
||||||
|
:style => "color:#2E8DD7; float:left;display:block; margin-right:5px; margin-left:5px; overflow:hidden; white-space: nowrap; text-overflow:ellipsis;"%>
|
||||||
|
<span class="wmail_txt" style="float:left; margin-right:5px;color:#ACAEB1;"><%= l(:label_project_issue) %></span>
|
||||||
|
<% if issues_journal.notes.nil? %>
|
||||||
|
<%= link_to truncate(issues_journal.issue.subject,length: 30,omission: '...'),issue_url(issue, :token => @token.value),
|
||||||
|
:style => "color:#2E8DD7;float:left; font-weight:normal;margin-right:5px; display:block;overflow:hidden; white-space: nowrap; text-overflow:ellipsis;"
|
||||||
|
%>
|
||||||
|
<% else %>
|
||||||
|
<%= link_to truncate(issues_journal.notes,length: 30,omission: '...'),issue_url(issues_journal.issue, :token => @token.value),
|
||||||
|
:style => "color:#2E8DD7;float:left; font-weight:normal;margin-right:5px; display:block;overflow:hidden; white-space: nowrap; text-overflow:ellipsis;"
|
||||||
|
%>
|
||||||
|
<% end %>
|
||||||
|
<span class="wmail_date" style="color:#6e6e6e; float:left;display:block; margin-left:40px;"><%= format_time(issues_journal.created_on) %></span>
|
||||||
|
</li>
|
||||||
|
<% end %>
|
||||||
|
|
||||||
|
<div class="cl"></div>
|
||||||
|
</ul><!--问题跟踪 end-->
|
||||||
|
<% end %>
|
||||||
|
|
||||||
<!-- 讨论区 -->
|
<!-- 讨论区 -->
|
||||||
<% unless @project_messages.first.nil? %>
|
<% unless @project_messages.first.nil? %>
|
||||||
<ul class="wmail_ul" style="margin-left:10px; border-bottom:1px dashed #cfcfcf; padding-bottom:15px; width:1020px; margin-bottom:15px;">
|
<ul class="wmail_ul" style="margin-left:10px; border-bottom:1px dashed #cfcfcf; padding-bottom:15px; width:1020px; margin-bottom:15px;">
|
||||||
|
@ -284,6 +352,67 @@
|
||||||
</ul><!-- 项目新闻end -->
|
</ul><!-- 项目新闻end -->
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
|
<!-- 项目新闻回复 -->
|
||||||
|
<% unless @project_news_comments.first.nil? %>
|
||||||
|
<ul class="wmail_ul" style=" list-style-type:none;clear: both;margin-left:10px; border-bottom:1px dashed #cfcfcf; padding-bottom:15px; width:1020px; margin-bottom:15px;">
|
||||||
|
<span class="wmail_h4" style="color:#666; font-size:14px; margin-bottom:5px;" >
|
||||||
|
<%= l(:label_project_news) %>
|
||||||
|
</span>
|
||||||
|
<% @project_news_comments.each do |project_news_comment|%>
|
||||||
|
<li style="clear: both; list-style: none;">
|
||||||
|
<span class="wmail_dis" style="float:left; color:#000000; margin-right:5px;">▪</span>
|
||||||
|
<span class="wmail_b" style="color:#666; font-weight:bold; float:left;">[</span>
|
||||||
|
<% unless project_news_comment.commented.nil? %>
|
||||||
|
<%= link_to truncate(project_news_comment.commented.project.name,length: 30,omission: '...'), project_url(project_news_comment.commented.project, :token => @token.value),
|
||||||
|
:class=> "wmail_column",
|
||||||
|
:style=> " font-weight: bold; display:block; float:left; color:#666;overflow:hidden; white-space: nowrap; text-overflow:ellipsis;" %>
|
||||||
|
<% end %>
|
||||||
|
<span class="wmail_b" style="color:#666; font-weight:bold; float:left;">]</span>
|
||||||
|
<%= link_to project_news_comment.author, user_activities_url(project_news_comment.author,:token => @token.value), :class => "wmail_name",
|
||||||
|
:style => "color:#2E8DD7; float:left;display:block; margin-right:5px; margin-left:5px; overflow:hidden; white-space: nowrap; text-overflow:ellipsis;"%>
|
||||||
|
<span class="wmail_txt" style="float:left; margin-right:5px;color:#ACAEB1;"><%= l(:label_project_mail_notice) %></span>
|
||||||
|
|
||||||
|
<%= link_to truncate(project_news_comment.comments.html_safe,length: 30,omission: '...'), news_url(project_news_comment.commented,:token => @token.value),
|
||||||
|
:class => 'wmail_info',
|
||||||
|
:style => "color:#2E8DD7;float:left; font-weight:normal;margin-right:5px; display:block;overflow:hidden; white-space: nowrap; text-overflow:ellipsis;" %>
|
||||||
|
<span class="wmail_date" style="color:#6e6e6e; float:left;display:block; margin-left:40px;"><%= format_time(project_news_comment.created_on) %></span>
|
||||||
|
</li>
|
||||||
|
<% end %>
|
||||||
|
<div class="cl"></div>
|
||||||
|
</ul><!-- 项目新闻回复end -->
|
||||||
|
<% end %>
|
||||||
|
|
||||||
|
<!-- 项目上传资源 -->
|
||||||
|
<% unless @project_attachments.first.nil? %>
|
||||||
|
<ul class="wmail_ul" style="margin-left:10px; border-bottom:1px dashed #cfcfcf; padding-bottom:15px; width:1020px; margin-bottom:15px;">
|
||||||
|
<span class="wmail_h4" style="color:#666; font-size:14px; margin-bottom:5px;" >
|
||||||
|
<%= l(:label_project_mail_attachments) %>
|
||||||
|
</span>
|
||||||
|
<% @project_attachments.each do |project_attachment|%>
|
||||||
|
<li style="clear: both; list-style: none;">
|
||||||
|
<span class="wmail_dis" style="float:left; color:#000000; margin-right:5px;">▪</span>
|
||||||
|
<span class="wmail_b" style="color:#666; font-weight:bold; float:left;">[</span>
|
||||||
|
|
||||||
|
<%= link_to truncate(project_attachment.project.name,length: 30,omission: '...'), project_url(project_attachment.project, :token => @token.value),
|
||||||
|
:class=> "wmail_column",
|
||||||
|
:style=> " font-weight: bold; display:block; float:left; color:#666;overflow:hidden; white-space: nowrap; text-overflow:ellipsis;" %>
|
||||||
|
<span class="wmail_b" style="color:#666; font-weight:bold; float:left;">]</span>
|
||||||
|
|
||||||
|
<%= link_to project_attachment.author, user_activities_url(project_attachment.author,:token => @token.value), :class => "wmail_name",
|
||||||
|
:style => "color:#2E8DD7; float:left;display:block; margin-right:5px; margin-left:5px; overflow:hidden; white-space: nowrap; text-overflow:ellipsis;"%>
|
||||||
|
<span class="wmail_txt" style="float:left; margin-right:5px;color:#ACAEB1;"><%= l(:label_project_mail_upload) %></span>
|
||||||
|
|
||||||
|
<%= link_to truncate(project_attachment.filename,length: 30,omission: '...'), project_files_url(project_attachment.project,:token => @token.value),
|
||||||
|
:class => 'wmail_info',
|
||||||
|
:style => "color:#2E8DD7;float:left; font-weight:normal;margin-right:5px; display:block;overflow:hidden; white-space: nowrap; text-overflow:ellipsis;"
|
||||||
|
%>
|
||||||
|
<span class="wmail_date" style="color:#6e6e6e; float:left;display:block; margin-left:40px;"><%= format_time(project_attachment.created_on) %></span>
|
||||||
|
</li>
|
||||||
|
<% end %>
|
||||||
|
<div class="cl"></div>
|
||||||
|
</ul><!-- 项目上传资源 end-->
|
||||||
|
<% end %>
|
||||||
|
|
||||||
<!--项目留言-->
|
<!--项目留言-->
|
||||||
<% unless @project_journal_messages.first.nil? %>
|
<% unless @project_journal_messages.first.nil? %>
|
||||||
<ul class="wmail_ul" style="clear: both;margin-left:10px; border-bottom:1px dashed #cfcfcf; padding-bottom:15px; width:1020px; margin-bottom:15px;">
|
<ul class="wmail_ul" style="clear: both;margin-left:10px; border-bottom:1px dashed #cfcfcf; padding-bottom:15px; width:1020px; margin-bottom:15px;">
|
||||||
|
|
|
@ -1,335 +1,234 @@
|
||||||
<%= @subject %>
|
<%= @subject %>
|
||||||
<% if @attachments.first || @course_news.first || @bids.first ||
|
<% if @attachments.first || @course_news.first || @course_news_comments.first || @bids.first ||
|
||||||
@course_journal_messages.first|| @course_messages.first %>
|
@course_journal_messages.first|| @course_messages.first || @attachments.first %>
|
||||||
<%= l(:label_course_overview)%>
|
<%= l(:label_course_overview)%>
|
||||||
<% unless @course_news.first.nil? %>
|
<% unless @course_news.first.nil? %>
|
||||||
<%= l(:label_course_news) %>
|
<%= l(:label_course_news) %>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<% @course_news.each do |course_new|%>
|
<% @course_news.each do |course_new|%>
|
||||||
|
|
||||||
▪
|
▪[<%= link_to truncate(course_new.course.name,length: 30,omission: '...'), course_url(course_new.course, :token => @token.value)%> ]
|
||||||
[
|
|
||||||
|
|
||||||
<%= link_to truncate(course_new.course.name,length: 30,omission: '...'), course_url(course_new.course, :token => @token.value)%>
|
<%= link_to course_new.author, user_activities_url(course_new.author,:token => @token.value) %>
|
||||||
]
|
|
||||||
|
|
||||||
<%= link_to course_new.author, user_activities_url(course_new.author,:token => @token.value)
|
|
||||||
%>
|
|
||||||
<%= l(:label_project_notice) %>
|
<%= l(:label_project_notice) %>
|
||||||
|
<%= link_to truncate(course_new.title,length: 30,omission: '...'), news_url(course_new,:token => @token.value) %>
|
||||||
<%= link_to truncate(course_new.title,length: 30,omission: '...'), news_url(course_new,:token => @token.value)
|
<%= format_time(course_new.created_on) %>
|
||||||
|
<% end %>
|
||||||
|
|
||||||
%> <%= format_time(course_new.created_on) %>
|
|
||||||
|
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
|
<% unless @course_news_comments.first.nil? %>
|
||||||
|
<%= l(:label_course_news) %>
|
||||||
|
<% @course_news_comments.each do |course_news_comment|%>
|
||||||
|
▪[ <% unless course_news_comment.commented.nil? %>
|
||||||
|
<%= link_to truncate(course_news_comment.commented.course.name,length: 30,omission: '...'), course_url(course_news_comment.commented.course, :token => @token.value) %>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
]
|
||||||
|
<%= link_to course_news_comment.author, user_activities_url(course_news_comment.author,:token => @token.value) %>
|
||||||
|
<%= l(:label_project_notice) %>
|
||||||
|
<%= link_to truncate(course_news_comment.comments,length: 30,omission: '...'), news_url(course_news_comment.commented,:token => @token.value) %>
|
||||||
|
<%= format_time(course_news_comment.created_on) %>
|
||||||
|
<% end %>
|
||||||
|
<% end %>
|
||||||
|
|
||||||
<% unless @bids.empty? %>
|
<% unless @bids.empty? %>
|
||||||
<%= l(:label_homework_overview) %>
|
<%= l(:label_homework_overview) %>
|
||||||
<% unless @bids.first.nil?%>
|
<% unless @bids.first.nil?%>
|
||||||
<% @bids.each do |bid| %>
|
<% @bids.each do |bid| %>
|
||||||
▪
|
▪[<%= link_to truncate(bid.course.name,length: 30,omission: '...'),course_url(bid.course, :token => @token.value) %>]
|
||||||
[
|
<%= link_to bid.user, user_activities_url(bid.user,:token => @token.value) %>
|
||||||
|
|
||||||
<%= link_to truncate(bid.course.name,length: 30,omission: '...'),course_url(bid.course, :token => @token.value)
|
|
||||||
|
|
||||||
%>
|
|
||||||
]
|
|
||||||
|
|
||||||
<%= link_to bid.user, user_activities_url(bid.user,:token => @token.value)
|
|
||||||
%>
|
|
||||||
<%= l(:label_course_homework) %>
|
<%= l(:label_course_homework) %>
|
||||||
|
<%= link_to truncate(bid.name, length: 30,omission: '...'), student_work_index_path(:homework => bid.id,:token => @token.value) %>
|
||||||
<%= link_to truncate(bid.name, length: 30,omission: '...'), student_work_index_path(:homework => bid.id,:token => @token.value)
|
|
||||||
|
|
||||||
|
|
||||||
%>
|
|
||||||
<%= format_time(bid.created_at) %>
|
<%= format_time(bid.created_at) %>
|
||||||
|
|
||||||
<% end %>
|
<% end %>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
|
|
||||||
<!--作业动态 end-->
|
<!--作业动态 end-->
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
<% unless @course_journal_messages.first.nil? %>
|
<% unless @course_journal_messages.first.nil? %>
|
||||||
|
|
||||||
<%= l(:view_course_journals_for_messages) %>
|
<%= l(:view_course_journals_for_messages) %>
|
||||||
|
|
||||||
|
|
||||||
<% @course_journal_messages.each do |course_journal_message|%>
|
<% @course_journal_messages.each do |course_journal_message|%>
|
||||||
|
[ <%= link_to truncate(course_journal_message.course.name,length: 30,omission: '...'), course_url(course_journal_message.course, :token => @token.value) %>]
|
||||||
[
|
<%= link_to course_journal_message.user, user_activities_url(course_journal_message.user,:token => @token.value) %>
|
||||||
|
|
||||||
<%= link_to truncate(course_journal_message.course.name,length: 30,omission: '...'), course_url(course_journal_message.course, :token => @token.value)
|
|
||||||
|
|
||||||
%>
|
|
||||||
]
|
|
||||||
|
|
||||||
<%= link_to course_journal_message.user, user_activities_url(course_journal_message.user,:token => @token.value)
|
|
||||||
%>
|
|
||||||
<%= l(:label_send_course_journals_for_messages) %>
|
<%= l(:label_send_course_journals_for_messages) %>
|
||||||
|
<%= link_to truncate(course_journal_message.notes,length: 30,omission: '...'), course_feedback_url(course_journal_message.course,:token => @token.value) %>
|
||||||
<%= link_to truncate(course_journal_message.notes,length: 30,omission: '...'), course_feedback_url(course_journal_message.course,:token => @token.value)
|
|
||||||
|
|
||||||
|
|
||||||
%>
|
|
||||||
<%= format_time(course_journal_message.created_on) %>
|
<%= format_time(course_journal_message.created_on) %>
|
||||||
|
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
|
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
<% unless @course_messages.first.nil? %>
|
<% unless @course_messages.first.nil? %>
|
||||||
|
|
||||||
<%= l(:view_borad_course) %>
|
<%= l(:view_borad_course) %>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<% @course_messages.each do |course_message|%>
|
<% @course_messages.each do |course_message|%>
|
||||||
|
▪[<%= link_to truncate(course_message.course.name,length: 30,omission: '...'), course_url(course_message.course, :token => @token.value)%>]
|
||||||
▪
|
<%= link_to course_message.author, user_activities_url(course_message.author,:token => @token.value) %>
|
||||||
[
|
|
||||||
|
|
||||||
<%= link_to truncate(course_message.course.name,length: 30,omission: '...'), course_url(course_message.course, :token => @token.value)
|
|
||||||
|
|
||||||
%>
|
|
||||||
]
|
|
||||||
|
|
||||||
<%= link_to course_message.author, user_activities_url(course_message.author,:token => @token.value)
|
|
||||||
%>
|
|
||||||
<%= l(:label_send_course_messages) %>
|
<%= l(:label_send_course_messages) %>
|
||||||
|
<%= link_to truncate(course_message.subject,length: 30,omission: '...'),board_message_url(course_message, :board_id => course_message.board_id,:token => @token.value) %>
|
||||||
<%= link_to truncate(course_message.subject,length: 30,omission: '...'),board_message_url(course_message, :board_id => course_message.board_id,:token => @token.value)
|
|
||||||
|
|
||||||
|
|
||||||
%>
|
|
||||||
<%= format_time(course_message.created_on) %>
|
<%= format_time(course_message.created_on) %>
|
||||||
|
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
|
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
<% unless @attachments.first.nil? %>
|
<% unless @attachments.first.nil? %>
|
||||||
|
|
||||||
<%= l(:label_course_attendingcontestwork_download) %>
|
<%= l(:label_course_attendingcontestwork_download) %>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<% @attachments.each do |attachment|%>
|
<% @attachments.each do |attachment|%>
|
||||||
▪[
|
▪[<%= link_to truncate(attachment.course.name,length: 30,omission: '...'), course_url(attachment.course, :token => @token.value) %>]
|
||||||
|
<%= link_to attachment.author, user_activities_url(attachment.author,:token => @token.value) %>
|
||||||
<%= link_to truncate(attachment.course.name,length: 30,omission: '...'), course_url(attachment.course, :token => @token.value)
|
|
||||||
|
|
||||||
%>
|
|
||||||
]
|
|
||||||
|
|
||||||
<%= link_to attachment.author, user_activities_url(attachment.author,:token => @token.value)
|
|
||||||
%>
|
|
||||||
<%= l(:label_course_file_upload) %>
|
<%= l(:label_course_file_upload) %>
|
||||||
|
<%= link_to truncate(attachment.filename,length: 30,omission: '...'),course_files_url(attachment.course,:token => @token.value) %>
|
||||||
<%= link_to truncate(attachment.filename,length: 30,omission: '...'),course_files_url(attachment.course,:token => @token.value)
|
|
||||||
|
|
||||||
|
|
||||||
%>
|
|
||||||
<%= format_time(attachment.created_on) %>
|
<%= format_time(attachment.created_on) %>
|
||||||
</li>
|
|
||||||
<% end %>
|
<% end %>
|
||||||
|
<!--课件下载 end-->
|
||||||
</ul><!--课件下载 end-->
|
|
||||||
<% end %>
|
<% end %>
|
||||||
<% end %><!--课程动态 end-->
|
<% end %><!--课程动态 end-->
|
||||||
|
|
||||||
<% @issues.first || @project_messages.first || @wiki_contents.first || @project_news.first || @project_journal_messages.first %>
|
<!-- 项目动态 -->
|
||||||
|
<!--项目相关-->
|
||||||
|
<% if @issues.first || @project_messages.first || @issues_journals.first || @wiki_contents.first || @project_news.first || @project_news_comments.first || @project_journal_messages.first ||
|
||||||
|
@project_news_comments.first %>
|
||||||
<%= l(:label_project_overview_new)%>
|
<%= l(:label_project_overview_new)%>
|
||||||
<% unless @issues.first.nil? %>
|
<% unless @issues.first.nil? %>
|
||||||
|
|
||||||
<%= l(:label_issue_tracking) %>
|
<%= l(:label_issue_tracking) %>
|
||||||
|
|
||||||
|
|
||||||
<% @issues.each do |issue|%>
|
<% @issues.each do |issue|%>
|
||||||
▪
|
▪[<%= link_to truncate(issue.project.name,length: 30,omission: '...'), project_url(issue.project, :token => @token.value) %>]
|
||||||
[
|
<%= link_to issue.author, user_activities_url(issue.author,:token => @token.value) %>
|
||||||
|
|
||||||
<%= link_to truncate(issue.project.name,length: 30,omission: '...'), project_url(issue.project, :token => @token.value)
|
|
||||||
|
|
||||||
%>
|
|
||||||
]
|
|
||||||
|
|
||||||
<%= link_to issue.author, user_activities_url(issue.author,:token => @token.value)
|
|
||||||
%>
|
|
||||||
<%= l(:label_project_issue) %>
|
<%= l(:label_project_issue) %>
|
||||||
|
<%= link_to truncate(issue.subject,length: 30,omission: '...'),issue_url(issue, :token => @token.value) %>
|
||||||
<%= link_to truncate(issue. subject,length: 30,omission: '...'),issue_url(issue, :token => @token.value)
|
|
||||||
|
|
||||||
|
|
||||||
%>
|
|
||||||
<%= format_time(issue.created_on) %>
|
<%= format_time(issue.created_on) %>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
<!--问题跟踪 end-->
|
||||||
|
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
|
<!-- issues回复 -->
|
||||||
|
<% unless @issues_journals.first.nil? %>
|
||||||
|
<%= l(:label_issue_tracking) %>
|
||||||
|
<% @issues_journals.each do |issues_journal| %>
|
||||||
|
▪[<%= link_to truncate(issues_journal.issue.project.name,length: 30,omission: '...'), project_url(issues_journal.issue.project, :token => @token.value) %>]
|
||||||
|
<%= link_to issues_journal.user, user_activities_url(issues_journal.user,:token => @token.value) %>
|
||||||
|
<%= l(:label_project_issue) %>
|
||||||
|
<% if issues_journal.notes.nil? %>
|
||||||
|
<%= link_to truncate(issues_journal.issue.subject,length: 30,omission: '...'),issue_url(issue, :token => @token.value) %>
|
||||||
|
<% else %>
|
||||||
|
<%= link_to truncate(issues_journal.notes,length: 30,omission: '...'),issue_url(issues_journal.issue, :token => @token.value) %>
|
||||||
|
<% end %>
|
||||||
|
<%= format_time(issues_journal.created_on) %>
|
||||||
|
<% end %>
|
||||||
|
<% end %>
|
||||||
|
|
||||||
|
<!-- 讨论区 -->
|
||||||
<% unless @project_messages.first.nil? %>
|
<% unless @project_messages.first.nil? %>
|
||||||
|
|
||||||
<%= l(:project_moule_boards_show) %>
|
<%= l(:project_moule_boards_show) %>
|
||||||
|
|
||||||
|
|
||||||
<% @project_messages.each do |project_message|%>
|
<% @project_messages.each do |project_message|%>
|
||||||
▪[
|
▪[<%= link_to truncate(project_message.project.name,length: 30,omission: '...'), project_url(project_message.project, :token => @token.value) %>]
|
||||||
|
<%= link_to project_message.author, user_activities_url(project_message.author,:token => @token.value) %>
|
||||||
<%= link_to truncate(project_message.project.name,length: 30,omission: '...'), project_url(project_message.project, :token => @token.value)
|
|
||||||
|
|
||||||
%>
|
|
||||||
]
|
|
||||||
|
|
||||||
<%= link_to project_message.author, board_message_url(project_message, :board_id => project_message.board_id,:token => @token.value)
|
|
||||||
%>
|
|
||||||
<%= l(:label_send_course_messages) %>
|
<%= l(:label_send_course_messages) %>
|
||||||
|
<%= link_to truncate(project_message.subject,length: 30,omission: '...'),board_message_url(project_message, :board_id => project_message.board_id,:token => @token.value) %>
|
||||||
<%= link_to truncate(project_message. subject,length: 30,omission: '...'),board_message_url(project_message, :board_id => project_message.board_id,:token => @token.value)
|
|
||||||
|
|
||||||
|
|
||||||
%>
|
|
||||||
<%= format_time(project_message.created_on) %>
|
<%= format_time(project_message.created_on) %>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
<!--项目论坛 end-->
|
||||||
|
<% end %>
|
||||||
|
|
||||||
|
<!--项目wiki-->
|
||||||
<% unless @wiki_contents.first.nil? %>
|
<% unless @wiki_contents.first.nil? %>
|
||||||
|
|
||||||
<%= l(:label_wiki) %>
|
<%= l(:label_wiki) %>
|
||||||
|
|
||||||
<% @wiki_contents.each do |wikicontent|%>
|
<% @wiki_contents.each do |wikicontent|%>
|
||||||
▪[
|
▪[<% unless wikicontent.page.nil? %>
|
||||||
<% unless wikicontent.page.nil? %>
|
<%= link_to truncate(wikicontent.page.wiki.project.name,length: 30,omission: '...'), project_url(wikicontent.page.wiki.project, :token => @token.value) %>
|
||||||
<%= link_to truncate(wikicontent.page.wiki.project.name,length: 30,omission: '...'), project_url(wikicontent.page.wiki.project, :token => @token.value)
|
|
||||||
%>
|
|
||||||
<% end %>
|
<% end %>
|
||||||
]
|
]
|
||||||
<%= link_to wikicontent.author, user_activities_url(wikicontent.author,:token => @token.value) %>
|
<%= link_to wikicontent.author, user_activities_url(wikicontent.author,:token => @token.value) %>
|
||||||
<%= l(:label_project_notice) %>
|
<%= l(:label_wiki_mail_notification) %>
|
||||||
<% unless wikicontent.page.nil? %>
|
<% unless wikicontent.page.nil? %>
|
||||||
<%= link_to truncate(wikicontent.text.html_safe, length: 30,omission: '...'), project_wiki_url(wikicontent.page.wiki,:token => @token.value) %>
|
<%= link_to truncate(wikicontent.text.html_safe, length: 30,omission: '...'), project_wiki_url(wikicontent.page.wiki,:token => @token.value) %>
|
||||||
<% end %>
|
<% end %>
|
||||||
<%= format_time(wikicontent.updated_on) %>
|
<%= format_time(wikicontent.updated_on) %>
|
||||||
|
|
||||||
<% end %>
|
<% end %>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
<!--项目新闻-->
|
<!--项目新闻-->
|
||||||
<% unless @project_news.first.nil? %>
|
<% unless @project_news.first.nil? %>
|
||||||
|
|
||||||
<%= l(:label_project_news) %>
|
<%= l(:label_project_news) %>
|
||||||
|
|
||||||
<% @project_news.each do |project_new|%>
|
<% @project_news.each do |project_new|%>
|
||||||
▪[
|
▪[<%= link_to truncate(project_new.project.name,length: 30,omission: '...'), project_url(project_new.project, :token => @token.value) %> ]
|
||||||
|
<%= link_to project_new.author, user_activities_url(project_new.author,:token => @token.value) %>
|
||||||
<%= link_to truncate(project_new.project.name,length: 30,omission: '...'), project_url(project_new.project, :token => @token.value)
|
<%= l(:label_project_mail_notice) %>
|
||||||
%>
|
<%= link_to truncate(project_new.title,length: 30,omission: '...'), news_url(project_new,:token => @token.value) %>
|
||||||
]
|
|
||||||
<%= link_to project_new.author, user_activities_url(project_new.author,:token => @token.value)
|
|
||||||
%>
|
|
||||||
<%= l(:label_project_notice) %>
|
|
||||||
|
|
||||||
<%= link_to truncate(project_new.title,length: 30,omission: '...'), news_url(project_new,:token => @token.value)
|
|
||||||
%>
|
|
||||||
<%= format_time(project_new.created_on) %>
|
<%= format_time(project_new.created_on) %>
|
||||||
|
|
||||||
<% end %>
|
<% end %>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
|
<!-- 项目新闻回复 -->
|
||||||
|
<% unless @project_news_comments.first.nil? %>
|
||||||
|
<%= l(:label_project_news) %>
|
||||||
|
<% @project_news_comments.each do |project_news_comment|%>
|
||||||
|
▪[ <% unless project_news_comment.commented.nil? %>
|
||||||
|
<%= link_to truncate(project_news_comment.commented.project.name,length: 30,omission: '...'), project_url(project_news_comment.commented.project, :token => @token.value) %>
|
||||||
|
<% end %>]
|
||||||
|
<%= link_to project_news_comment.author, user_activities_url(project_news_comment.author,:token => @token.value) %>
|
||||||
|
<%= l(:label_project_mail_notice) %>
|
||||||
|
<%= link_to truncate(project_news_comment.comments.html_safe,length: 30,omission: '...'), news_url(project_news_comment.commented,:token => @token.value) %>
|
||||||
|
<%= format_time(project_news_comment.created_on) %>
|
||||||
|
<% end %>
|
||||||
|
<!-- 项目新闻回复end -->
|
||||||
|
<% end %>
|
||||||
|
|
||||||
|
<!-- 项目上传资源 -->
|
||||||
|
<% unless @project_attachments.first.nil? %>
|
||||||
|
<%= l(:label_project_mail_attachments) %>
|
||||||
|
<% @project_attachments.each do |project_attachment|%>
|
||||||
|
▪[<%= link_to truncate(project_attachment.project.name,length: 30,omission: '...'), project_url(project_attachment.project, :token => @token.value) %>]
|
||||||
|
<%= link_to project_attachment.author, user_activities_url(project_attachment.author,:token => @token.value) %>
|
||||||
|
<%= l(:label_project_mail_upload) %>
|
||||||
|
<%= link_to truncate(project_attachment.filename,length: 30,omission: '...'),project_files_url(project_attachment.project,:token => @token.value) %>
|
||||||
|
<%= format_time(project_attachment.created_on) %>
|
||||||
|
<% end %> <!-- 项目上传资源 end-->
|
||||||
|
<% end %>
|
||||||
|
|
||||||
<!--项目留言-->
|
<!--项目留言-->
|
||||||
<% unless @project_journal_messages.first.nil? %>
|
<% unless @project_journal_messages.first.nil? %>
|
||||||
<%= l(:label_project_mail_feedback) %>
|
<%= l(:label_project_mail_feedback) %>
|
||||||
|
|
||||||
<% @project_journal_messages.each do |project_journal_message|%>
|
<% @project_journal_messages.each do |project_journal_message|%>
|
||||||
▪[
|
▪[<%= link_to truncate(project_journal_message.project.name,length: 30,omission: '...'), project_url(project_journal_message.project, :token => @token.value) %> ]
|
||||||
|
|
||||||
<%= link_to truncate(project_journal_message.project.name,length: 30,omission: '...'), project_url(project_journal_message.project, :token => @token.value)
|
|
||||||
%>
|
|
||||||
]
|
|
||||||
|
|
||||||
<%= link_to project_journal_message.user, user_activities_url(project_journal_message.user,:token => @token.value) %>
|
<%= link_to project_journal_message.user, user_activities_url(project_journal_message.user,:token => @token.value) %>
|
||||||
<%= l(:label_send_course_journals_for_messages) %>
|
<%= l(:label_send_course_journals_for_messages) %>
|
||||||
|
<%= link_to truncate(project_journal_message.notes.html_safe,length: 30,omission: '...'), project_feedback_url(project_journal_message.project,:token => @token.value) %>
|
||||||
<%= link_to truncate(project_journal_message.notes.html_safe,length: 30,omission: '...'), project_feedback_url(project_journal_message.project,:token => @token.value)
|
|
||||||
%>
|
|
||||||
<%= format_time(project_journal_message.created_on) %>
|
<%= format_time(project_journal_message.created_on) %>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
<!--项目留言 end-->
|
||||||
<% end %>
|
<% end %>
|
||||||
|
</div>
|
||||||
|
<% end %><!-- 项目动态end -->
|
||||||
|
|
||||||
<% end %>
|
|
||||||
|
|
||||||
|
|
||||||
<% unless @user_journal_messages.first.nil? %>
|
<% unless @user_journal_messages.first.nil? %>
|
||||||
<%= l(:label_activities) %>
|
<%= l(:label_activities) %>
|
||||||
|
|
||||||
|
|
||||||
<%= l(:label_user_message) %>
|
<%= l(:label_user_message) %>
|
||||||
(<%= @user_journal_messages.count %>)
|
(<%= @user_journal_messages.count %>)
|
||||||
|
|
||||||
<% @user_journal_messages.each do |user_journal_message|%>
|
<% @user_journal_messages.each do |user_journal_message|%>
|
||||||
▪
|
▪ <%= link_to user_journal_message.user, user_activities_url(user_journal_message.user,:token => @token.value)%>
|
||||||
|
|
||||||
<%= link_to user_journal_message.user, user_activities_url(user_journal_message.user,:token => @token.value)
|
|
||||||
|
|
||||||
%>
|
|
||||||
<%= l(:label_show_your_message) %>
|
<%= l(:label_show_your_message) %>
|
||||||
|
<%= link_to truncate(user_journal_message.notes,length: 30,omission: '...'), feedback_url(@user,:token => @token.value) %>
|
||||||
<%= link_to truncate(user_journal_message.notes,length: 30,omission: '...'), feedback_url(@user,:token => @token.value)
|
|
||||||
|
|
||||||
|
|
||||||
%>
|
|
||||||
<%= format_time(user_journal_message.created_on) %>
|
<%= format_time(user_journal_message.created_on) %>
|
||||||
|
<% end %>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
|
|
||||||
<% end %>
|
|
||||||
<% if @forums.first || @memos.first %>
|
<% if @forums.first || @memos.first %>
|
||||||
<%= l(:lable_bar_active) %>
|
<%= l(:lable_bar_active) %>
|
||||||
<% unless @forums.first.nil? %>
|
<% unless @forums.first.nil? %>
|
||||||
|
|
||||||
<%= l(:label_user_forum) %>
|
<%= l(:label_user_forum) %>
|
||||||
|
|
||||||
|
|
||||||
<% @forums.each do |forum|%>
|
<% @forums.each do |forum|%>
|
||||||
▪
|
▪<%= link_to forum.creator, user_activities_url(forum.creator,:token => @token.value) %>
|
||||||
|
|
||||||
<%= link_to forum.creator, user_activities_url(forum.creator,:token => @token.value) %>
|
|
||||||
<%= l(:label_forum_new) %>
|
<%= l(:label_forum_new) %>
|
||||||
|
<%= link_to truncate(forum.name,length: 30,omission: '...'),forum_url(forum,:token => @token.value) %>
|
||||||
<%= link_to truncate(forum.name,length: 30,omission: '...'),forum_url(forum,:token => @token.value)
|
|
||||||
%>
|
|
||||||
<%= format_time(forum.created_at) %>
|
<%= format_time(forum.created_at) %>
|
||||||
|
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
<!-- 新建贴吧 end-->
|
<!-- 新建贴吧 end-->
|
||||||
<% end %>
|
<% end %>
|
||||||
<% unless @memos.first.nil? %>
|
<% unless @memos.first.nil? %>
|
||||||
|
|
||||||
<%= l(:label_user_message_forum) %>
|
<%= l(:label_user_message_forum) %>
|
||||||
|
|
||||||
|
|
||||||
<% @memos.each do |memo|%>
|
<% @memos.each do |memo|%>
|
||||||
▪
|
▪<%= link_to memo.author, user_activities_url(memo.author,:token => @token.value)%>
|
||||||
|
|
||||||
<%= link_to memo.author, user_activities_url(memo.author,:token => @token.value)%>
|
|
||||||
<%= memo.parent_id.nil? ? l(:label_memo_new_from_forum) : l(:label_reply) %>
|
<%= memo.parent_id.nil? ? l(:label_memo_new_from_forum) : l(:label_reply) %>
|
||||||
|
<%= link_to truncate(memo.subject,length: 30,omission: '...'),forum_memo_url(memo.forum, (memo.parent_id.nil? ? memo : memo.parent_id))%>
|
||||||
<%= link_to truncate(memo.subject,length: 30,omission: '...'),forum_memo_url(memo.forum, (memo.parent_id.nil? ? memo : memo.parent_id))
|
|
||||||
%>
|
|
||||||
<%= format_time(memo.created_at) %>
|
<%= format_time(memo.created_at) %>
|
||||||
|
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
|
|
||||||
<!-- 新建贴吧 end-->
|
<!-- 新建贴吧 end-->
|
||||||
<% end %>
|
<% end %>
|
||||||
<!--贴吧动态 end-->
|
<!--贴吧动态 end-->
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<!-- <h1>New memo</h1> -->
|
<!-- <h1>New memo</h1> -->
|
||||||
<% @replying = !@memo.parent.nil? %>
|
<% @replying = !@memo.parent.nil? %>
|
||||||
<%= javascript_include_tag "/assets/kindeditor/kindeditor" %>
|
<%= javascript_include_tag "/assets/kindeditor/kindeditor",'/assets/kindeditor/pasteimg' %>
|
||||||
<h3><%=l(:label_memo_edit)%></h3>
|
<h3><%=l(:label_memo_edit)%></h3>
|
||||||
<%= labelled_form_for(@memo, :url => forum_memo_path(@memo.forum_id, @memo)) do |f| %>
|
<%= labelled_form_for(@memo, :url => forum_memo_path(@memo.forum_id, @memo)) do |f| %>
|
||||||
<% if @memo.errors.any? %>
|
<% if @memo.errors.any? %>
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
@nav_dispaly_main_contest_label = 1 %>
|
@nav_dispaly_main_contest_label = 1 %>
|
||||||
<% @nav_dispaly_forum_label = 1%>
|
<% @nav_dispaly_forum_label = 1%>
|
||||||
<!-- <h1>New memo</h1> -->
|
<!-- <h1>New memo</h1> -->
|
||||||
<%= javascript_include_tag "/assets/kindeditor/kindeditor" %>
|
<%= javascript_include_tag "/assets/kindeditor/kindeditor",'/assets/kindeditor/pasteimg' %>
|
||||||
<div class="top-content">
|
<div class="top-content">
|
||||||
<table>
|
<table>
|
||||||
<tr>
|
<tr>
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
margin-bottom: 13px;
|
margin-bottom: 13px;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
<%= javascript_include_tag "/assets/kindeditor/kindeditor" %>
|
<%= javascript_include_tag "/assets/kindeditor/kindeditor",'/assets/kindeditor/pasteimg' %>
|
||||||
<div class="lz">
|
<div class="lz">
|
||||||
<!-- 在这里添加赞和踩-->
|
<!-- 在这里添加赞和踩-->
|
||||||
<span id="praise_tread" style="float: right"> <%= render :partial => "/praise_tread/praise_tread",:locals => {:obj => @memo,:show_flag => true,:user_id =>User.current.id,:horizontal => true}%> </span>
|
<span id="praise_tread" style="float: right"> <%= render :partial => "/praise_tread/praise_tread",:locals => {:obj => @memo,:show_flag => true,:user_id =>User.current.id,:horizontal => true}%> </span>
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<%= javascript_include_tag "/assets/kindeditor/kindeditor" %>
|
<%= javascript_include_tag "/assets/kindeditor/kindeditor",'/assets/kindeditor/pasteimg' %>
|
||||||
<%= error_messages_for 'message' %>
|
<%= error_messages_for 'message' %>
|
||||||
<% replying ||= false %>
|
<% replying ||= false %>
|
||||||
<% extra_option = replying ? { hidden: "hidden"} : { maxlength: 200 } %>
|
<% extra_option = replying ? { hidden: "hidden"} : { maxlength: 200 } %>
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<%= javascript_include_tag "/assets/kindeditor/kindeditor" %>
|
<%= javascript_include_tag "/assets/kindeditor/kindeditor",'/assets/kindeditor/pasteimg' %>
|
||||||
<li>
|
<li>
|
||||||
<label><span class="c_red">*</span> <%= l(:field_title) %> :</label>
|
<label><span class="c_red">*</span> <%= l(:field_title) %> :</label>
|
||||||
<input type="text" name="news[title]" class="hwork_input" id="news_title" size="60" onkeyup="regexTitle();" maxlength="60" placeholder="60个字符以内" value="<%= is_new ? '' : @news.title %>">
|
<input type="text" name="news[title]" class="hwork_input" id="news_title" size="60" onkeyup="regexTitle();" maxlength="60" placeholder="60个字符以内" value="<%= is_new ? '' : @news.title %>">
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<%= javascript_include_tag "/assets/kindeditor/kindeditor" %>
|
<%= javascript_include_tag "/assets/kindeditor/kindeditor",'/assets/kindeditor/pasteimg' %>
|
||||||
<div class="project_r_h">
|
<div class="project_r_h">
|
||||||
<h2 class="project_h2"><%= l(:label_course_news) %></h2>
|
<h2 class="project_h2"><%= l(:label_course_news) %></h2>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<%= javascript_include_tag "/assets/kindeditor/kindeditor" %>
|
<%= javascript_include_tag "/assets/kindeditor/kindeditor",'/assets/kindeditor/pasteimg' %>
|
||||||
<li>
|
<li>
|
||||||
<label><span class="c_red">*</span> <%= l(:field_title) %> :</label>
|
<label><span class="c_red">*</span> <%= l(:field_title) %> :</label>
|
||||||
<input type="text" name="news[title]" class="hwork_input_news" id="news_title" width="576px" onkeyup="regexTitle();" maxlength="60" placeholder="60个字符以内" value="<%= is_new ? '' : @news.title %>">
|
<input type="text" name="news[title]" class="hwork_input_news" id="news_title" width="576px" onkeyup="regexTitle();" maxlength="60" placeholder="60个字符以内" value="<%= is_new ? '' : @news.title %>">
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<%= javascript_include_tag "/assets/kindeditor/kindeditor" %>
|
<%= javascript_include_tag "/assets/kindeditor/kindeditor",'/assets/kindeditor/pasteimg' %>
|
||||||
<div class="project_r_h">
|
<div class="project_r_h">
|
||||||
<h2 class="project_h2"><%= l(:label_course_news) %></h2>
|
<h2 class="project_h2"><%= l(:label_course_news) %></h2>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
div.recall_con{width:570px;}
|
div.recall_con{width:570px;}
|
||||||
div.recall_con .reply_btn{margin-left:525px;margin-top:5px;}
|
div.recall_con .reply_btn{margin-left:525px;margin-top:5px;}
|
||||||
</style>
|
</style>
|
||||||
<%= javascript_include_tag "/assets/kindeditor/kindeditor" %>
|
<%= javascript_include_tag "/assets/kindeditor/kindeditor",'/assets/kindeditor/pasteimg' %>
|
||||||
<div class="msg_box" id='leave-message' nhname='new_message' style="height:auto;">
|
<div class="msg_box" id='leave-message' nhname='new_message' style="height:auto;">
|
||||||
<% reply_allow = JournalsForMessage.create_by_user? User.current %>
|
<% reply_allow = JournalsForMessage.create_by_user? User.current %>
|
||||||
<h4><%= l(:label_user_response) %></h4>
|
<h4><%= l(:label_user_response) %></h4>
|
||||||
|
|
|
@ -12,7 +12,7 @@
|
||||||
<!--</div>-->
|
<!--</div>-->
|
||||||
<div class="hwork_ctt">
|
<div class="hwork_ctt">
|
||||||
<div class="hwork_dis" id="tbc_01">
|
<div class="hwork_dis" id="tbc_01">
|
||||||
<%= labelled_form_for @work do |f|%>
|
<%= labelled_form_for @work,:html => { :multipart => true } do |f|%>
|
||||||
<div class="N_con">
|
<div class="N_con">
|
||||||
<p>
|
<p>
|
||||||
<label class="fl"><span class="c_red">*</span> 作品名称 :</label>
|
<label class="fl"><span class="c_red">*</span> 作品名称 :</label>
|
||||||
|
|
|
@ -18,7 +18,6 @@
|
||||||
返<br/>回<br/>顶<br/>部
|
返<br/>回<br/>顶<br/>部
|
||||||
</div>
|
</div>
|
||||||
<div class="cl"></div>
|
<div class="cl"></div>
|
||||||
|
|
||||||
<div id="contentbox">
|
<div id="contentbox">
|
||||||
<div id="tb_" class="hwork_tb_">
|
<div id="tb_" class="hwork_tb_">
|
||||||
<ul>
|
<ul>
|
||||||
|
@ -37,6 +36,7 @@
|
||||||
<% if @show_all%>
|
<% if @show_all%>
|
||||||
<input type="text" value="<%= @name%>" placeholder="昵称、学号、姓名搜索" class="min_search ml10 fl" onkeypress="SearchByName($(this),'<%= student_work_index_path(:homework => @homework.id)%>',event);">
|
<input type="text" value="<%= @name%>" placeholder="昵称、学号、姓名搜索" class="min_search ml10 fl" onkeypress="SearchByName($(this),'<%= student_work_index_path(:homework => @homework.id)%>',event);">
|
||||||
<a class="student_work_search fl" onclick="SearchByName_1($(this).prev(),'<%= student_work_index_path(:homework => @homework.id)%>');" href="javascript:void(0)">搜索</a>
|
<a class="student_work_search fl" onclick="SearchByName_1($(this).prev(),'<%= student_work_index_path(:homework => @homework.id)%>');" href="javascript:void(0)">搜索</a>
|
||||||
|
<%= link_to "缺评情况",student_work_absence_penalty_student_work_index_path(:homework => @homework.id), :class => "student_work_search fl", :target => "_blank" if @is_teacher%>
|
||||||
<% end%>
|
<% end%>
|
||||||
<% if @is_teacher%>
|
<% if @is_teacher%>
|
||||||
<div class="fr">
|
<div class="fr">
|
||||||
|
|
|
@ -0,0 +1,50 @@
|
||||||
|
<div class="project_r_h">
|
||||||
|
<h2 class="project_h2">
|
||||||
|
缺评情况
|
||||||
|
</h2>
|
||||||
|
</div>
|
||||||
|
<div class="cl"></div>
|
||||||
|
|
||||||
|
<div class="st_box">
|
||||||
|
<ul class="st_box_top">
|
||||||
|
<li class="ml10" style="padding-right: 15px;">
|
||||||
|
<a href="javascript:void(0)">学号</a>
|
||||||
|
</li>
|
||||||
|
<li class="ml90" style="padding-right: 5px;">
|
||||||
|
<a href="javascript:void(0)">姓名</a>
|
||||||
|
</li>
|
||||||
|
<li class="ml320">
|
||||||
|
<a href="javascript:void(0)">应评</a>
|
||||||
|
</li>
|
||||||
|
<li class="ml30">
|
||||||
|
<a href="javascript:void(0)">实评</a>
|
||||||
|
</li>
|
||||||
|
<li class="ml30">
|
||||||
|
<%= link_to "缺评",student_work_absence_penalty_student_work_index_path(:homework => @homework.id,:order => @order)%>
|
||||||
|
<a href="javascript:void(0);" class="<%= @order == 'desc' ? 'st_up' : 'st_down'%>" ></a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<div class="cl"></div><!--st_box_top end-->
|
||||||
|
|
||||||
|
<% @stundet_works.each do |student_work|%>
|
||||||
|
<ul class="hwork_ul <%= cycle("b_grey", "") %>" id="student_work_<%= student_work.id%>">
|
||||||
|
<li class="hwork_num_ab mr10 ml10">
|
||||||
|
<span>
|
||||||
|
<%= student_work.user.user_extensions.nil? ? "--" : student_work.user.user_extensions.student_id%>
|
||||||
|
</span>
|
||||||
|
</li>
|
||||||
|
<li class=" hwork_name_ab ">
|
||||||
|
<%= link_to student_work.user.show_name,user_path(student_work.user),:title => student_work.user.show_name, :class => "c_blue02"%>
|
||||||
|
</li>
|
||||||
|
<li class="absence c_grey">
|
||||||
|
<%= student_work.all_count%>
|
||||||
|
</li>
|
||||||
|
<li class="absence c_grey">
|
||||||
|
<%= student_work.has_count%>
|
||||||
|
</li>
|
||||||
|
<li class="absence <%= student_work.absence == 0 ? 'c_green' : 'c_red'%>">
|
||||||
|
<%= student_work.absence%>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<% end%>
|
||||||
|
</div>
|
|
@ -11,7 +11,7 @@
|
||||||
div.recall_con{width:600px;}
|
div.recall_con{width:600px;}
|
||||||
div.recall_con .reply_btn{margin-left:555px;margin-top:5px;}
|
div.recall_con .reply_btn{margin-left:555px;margin-top:5px;}
|
||||||
</style>
|
</style>
|
||||||
<%= javascript_include_tag "/assets/kindeditor/kindeditor" %>
|
<%= javascript_include_tag "/assets/kindeditor/kindeditor",'/assets/kindeditor/pasteimg' %>
|
||||||
<div class="dis">
|
<div class="dis">
|
||||||
<div class="msg_box" id='leave-message'>
|
<div class="msg_box" id='leave-message'>
|
||||||
<% reply_allow = JournalsForMessage.create_by_user? User.current %>
|
<% reply_allow = JournalsForMessage.create_by_user? User.current %>
|
||||||
|
|
|
@ -21,3 +21,6 @@ zh:
|
||||||
mail_issue_from_project: "项目问题跟踪"
|
mail_issue_from_project: "项目问题跟踪"
|
||||||
mail_issue_attachments: "附件:"
|
mail_issue_attachments: "附件:"
|
||||||
mail_issue_reply: "我要回复"
|
mail_issue_reply: "我要回复"
|
||||||
|
mail_course_title_userin: "在课程"
|
||||||
|
mail_course_homework_active: "中发布了作业"
|
||||||
|
mail_attention: "请您关注!"
|
||||||
|
|
|
@ -42,6 +42,8 @@ en:
|
||||||
|
|
||||||
label_member: "Members"
|
label_member: "Members"
|
||||||
project_module_attachments: "Resources"
|
project_module_attachments: "Resources"
|
||||||
|
label_project_mail_attachments: Project Resources
|
||||||
|
label_project_mail_upload: had uploaded project resources
|
||||||
|
|
||||||
label_invite: Invitation
|
label_invite: Invitation
|
||||||
label_invite_new_user: "Send email to invite new user"
|
label_invite_new_user: "Send email to invite new user"
|
||||||
|
|
|
@ -63,6 +63,8 @@ zh:
|
||||||
|
|
||||||
label_member: 成员
|
label_member: 成员
|
||||||
project_module_attachments: 资源
|
project_module_attachments: 资源
|
||||||
|
label_project_mail_attachments: 项目资源
|
||||||
|
label_project_mail_upload: 上传了资源
|
||||||
|
|
||||||
label_invite: 邀请
|
label_invite: 邀请
|
||||||
|
|
||||||
|
|
|
@ -97,6 +97,7 @@ RedmineApp::Application.routes.draw do
|
||||||
collection do
|
collection do
|
||||||
post 'add_score_reply'
|
post 'add_score_reply'
|
||||||
get 'destroy_score_reply'
|
get 'destroy_score_reply'
|
||||||
|
get 'student_work_absence_penalty'
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -66,7 +66,8 @@ upload_avatar_max_size:
|
||||||
### delayjob for send email.
|
### delayjob for send email.
|
||||||
delayjob_enabled:
|
delayjob_enabled:
|
||||||
default: 1
|
default: 1
|
||||||
|
course_cahce_enabled:
|
||||||
|
default: 1
|
||||||
bcc_recipients:
|
bcc_recipients:
|
||||||
default: 1
|
default: 1
|
||||||
plain_text_mail:
|
plain_text_mail:
|
||||||
|
@ -89,6 +90,12 @@ host_user:
|
||||||
default: user.trustie.net
|
default: user.trustie.net
|
||||||
host_repository:
|
host_repository:
|
||||||
default: repository.trustie.net
|
default: repository.trustie.net
|
||||||
|
url_course:
|
||||||
|
default: course.trustie.net
|
||||||
|
url_contest:
|
||||||
|
default: contest.trustie.net
|
||||||
|
url_user:
|
||||||
|
default: user.trustie.net
|
||||||
protocol:
|
protocol:
|
||||||
default: http
|
default: http
|
||||||
feeds_limit:
|
feeds_limit:
|
||||||
|
|
|
@ -16,7 +16,8 @@ module RailsKindeditor
|
||||||
input_html = input_html.merge(style: 'display:none')
|
input_html = input_html.merge(style: 'display:none')
|
||||||
output_buffer = ActiveSupport::SafeBuffer.new
|
output_buffer = ActiveSupport::SafeBuffer.new
|
||||||
output_buffer << build_text_area_tag(name, method, self, options, input_html)
|
output_buffer << build_text_area_tag(name, method, self, options, input_html)
|
||||||
output_buffer << javascript_tag(js_replace(input_html['id'],options.merge(window_onload: 'true')))
|
output_buffer << javascript_tag(js_replace(input_html['id'],options.merge(window_onload: 'true',
|
||||||
|
afterCreate: 'eval(function(){enablePasteImg(self);})')))
|
||||||
end
|
end
|
||||||
|
|
||||||
def kindeditor_upload_json_path(*args)
|
def kindeditor_upload_json_path(*args)
|
||||||
|
@ -52,12 +53,12 @@ module RailsKindeditor
|
||||||
"var old_onload_#{random_name};
|
"var old_onload_#{random_name};
|
||||||
if(typeof window.onload == 'function') old_onload_#{random_name} = window.onload;
|
if(typeof window.onload == 'function') old_onload_#{random_name} = window.onload;
|
||||||
window.onload = function() {
|
window.onload = function() {
|
||||||
#{editor_id}KindEditor.create('##{dom_id}', #{get_options(options).to_json}).loadPlugin('paste');
|
#{editor_id}KindEditor.create('##{dom_id}', #{get_options(options).to_json});
|
||||||
if(old_onload_#{random_name}) old_onload_#{random_name}();
|
if(old_onload_#{random_name}) old_onload_#{random_name}();
|
||||||
}"
|
}"
|
||||||
else
|
else
|
||||||
"KindEditor.ready(function(K){
|
"KindEditor.ready(function(K){
|
||||||
#{editor_id}K.create('##{dom_id}', #{get_options(options).to_json}).loadPlugin('paste');
|
#{editor_id}K.create('##{dom_id}', #{get_options(options).to_json});
|
||||||
});"
|
});"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -0,0 +1,31 @@
|
||||||
|
#coding=utf-8
|
||||||
|
|
||||||
|
module Trustie
|
||||||
|
module Cache
|
||||||
|
module ClearCourseEvent
|
||||||
|
def self.included(base)
|
||||||
|
base.class_eval{
|
||||||
|
after_create :clear_course_events
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
def clear_course_events
|
||||||
|
if Rails.env.production? && Setting.course_cahce_enabled?
|
||||||
|
Rails.cache.delete(cache_key)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def cache_key
|
||||||
|
course_id = nil
|
||||||
|
if Message === self.act
|
||||||
|
course_id = self.act.board.course_id
|
||||||
|
elsif self.act.respond_to?(:course_id)
|
||||||
|
course_id = self.act.course_id
|
||||||
|
end
|
||||||
|
"course_events_#{course_id}".to_sym
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
|
@ -5097,6 +5097,9 @@ KEditor.prototype = {
|
||||||
}
|
}
|
||||||
self.afterCreate();
|
self.afterCreate();
|
||||||
if (self.options.afterCreate) {
|
if (self.options.afterCreate) {
|
||||||
|
if (typeof self.options.afterCreate == 'string'){
|
||||||
|
self.options.afterCreate = eval(self.options.afterCreate);
|
||||||
|
}
|
||||||
self.options.afterCreate.call(self);
|
self.options.afterCreate.call(self);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,385 @@
|
||||||
|
// Generated by CoffeeScript 1.9.0
|
||||||
|
|
||||||
|
/*
|
||||||
|
paste.js is an interface to read data ( text / image ) from clipboard in different browsers. It also contains several hacks.
|
||||||
|
https://github.com/layerssss/paste.js
|
||||||
|
*/
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
var $, Paste, createHiddenEditable, dataURLtoBlob;
|
||||||
|
|
||||||
|
$ = window.jQuery;
|
||||||
|
|
||||||
|
$.paste = function(pasteContainer) {
|
||||||
|
var pm;
|
||||||
|
if (typeof console !== "undefined" && console !== null) {
|
||||||
|
console.log("DEPRECATED: This method is deprecated. Please use $.fn.pastableNonInputable() instead.");
|
||||||
|
}
|
||||||
|
pm = Paste.mountNonInputable(pasteContainer);
|
||||||
|
return pm._container;
|
||||||
|
};
|
||||||
|
|
||||||
|
$.fn.pastableNonInputable = function() {
|
||||||
|
var el, _i, _len;
|
||||||
|
for (_i = 0, _len = this.length; _i < _len; _i++) {
|
||||||
|
el = this[_i];
|
||||||
|
Paste.mountNonInputable(el);
|
||||||
|
}
|
||||||
|
return this;
|
||||||
|
};
|
||||||
|
|
||||||
|
$.fn.pastableTextarea = function() {
|
||||||
|
var el, _i, _len;
|
||||||
|
for (_i = 0, _len = this.length; _i < _len; _i++) {
|
||||||
|
el = this[_i];
|
||||||
|
Paste.mountTextarea(el);
|
||||||
|
}
|
||||||
|
return this;
|
||||||
|
};
|
||||||
|
|
||||||
|
$.fn.pastableContenteditable = function() {
|
||||||
|
var el, _i, _len;
|
||||||
|
for (_i = 0, _len = this.length; _i < _len; _i++) {
|
||||||
|
el = this[_i];
|
||||||
|
Paste.mountContenteditable(el);
|
||||||
|
}
|
||||||
|
return this;
|
||||||
|
};
|
||||||
|
|
||||||
|
dataURLtoBlob = function(dataURL, sliceSize) {
|
||||||
|
var b64Data, byteArray, byteArrays, byteCharacters, byteNumbers, contentType, i, m, offset, slice, _ref;
|
||||||
|
if (sliceSize == null) {
|
||||||
|
sliceSize = 512;
|
||||||
|
}
|
||||||
|
if (!(m = dataURL.match(/^data\:([^\;]+)\;base64\,(.+)$/))) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
_ref = m, m = _ref[0], contentType = _ref[1], b64Data = _ref[2];
|
||||||
|
byteCharacters = atob(b64Data);
|
||||||
|
byteArrays = [];
|
||||||
|
offset = 0;
|
||||||
|
while (offset < byteCharacters.length) {
|
||||||
|
slice = byteCharacters.slice(offset, offset + sliceSize);
|
||||||
|
byteNumbers = new Array(slice.length);
|
||||||
|
i = 0;
|
||||||
|
while (i < slice.length) {
|
||||||
|
byteNumbers[i] = slice.charCodeAt(i);
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
byteArray = new Uint8Array(byteNumbers);
|
||||||
|
byteArrays.push(byteArray);
|
||||||
|
offset += sliceSize;
|
||||||
|
}
|
||||||
|
return new Blob(byteArrays, {
|
||||||
|
type: contentType
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
createHiddenEditable = function() {
|
||||||
|
return $(document.createElement('div')).attr('contenteditable', true).css({
|
||||||
|
width: 1,
|
||||||
|
height: 1,
|
||||||
|
position: 'fixed',
|
||||||
|
left: -100,
|
||||||
|
overflow: 'hidden'
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
Paste = (function() {
|
||||||
|
Paste.prototype._target = null;
|
||||||
|
|
||||||
|
Paste.prototype._container = null;
|
||||||
|
|
||||||
|
Paste.mountNonInputable = function(nonInputable) {
|
||||||
|
var paste;
|
||||||
|
paste = new Paste(createHiddenEditable().appendTo(nonInputable), nonInputable);
|
||||||
|
$(nonInputable).on('click', (function(_this) {
|
||||||
|
return function() {
|
||||||
|
return paste._container.focus();
|
||||||
|
};
|
||||||
|
})(this));
|
||||||
|
paste._container.on('focus', (function(_this) {
|
||||||
|
return function() {
|
||||||
|
return $(nonInputable).addClass('pastable-focus');
|
||||||
|
};
|
||||||
|
})(this));
|
||||||
|
return paste._container.on('blur', (function(_this) {
|
||||||
|
return function() {
|
||||||
|
return $(nonInputable).removeClass('pastable-focus');
|
||||||
|
};
|
||||||
|
})(this));
|
||||||
|
};
|
||||||
|
|
||||||
|
Paste.mountTextarea = function(textarea) {
|
||||||
|
var ctlDown, paste;
|
||||||
|
if (-1 !== navigator.userAgent.toLowerCase().indexOf('chrome')) {
|
||||||
|
return this.mountContenteditable(textarea);
|
||||||
|
}
|
||||||
|
paste = new Paste(createHiddenEditable().insertBefore(textarea), textarea);
|
||||||
|
ctlDown = false;
|
||||||
|
$(textarea).on('keyup', function(ev) {
|
||||||
|
var _ref;
|
||||||
|
if ((_ref = ev.keyCode) === 17 || _ref === 224) {
|
||||||
|
return ctlDown = false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
$(textarea).on('keydown', function(ev) {
|
||||||
|
var _ref;
|
||||||
|
if ((_ref = ev.keyCode) === 17 || _ref === 224) {
|
||||||
|
ctlDown = true;
|
||||||
|
}
|
||||||
|
if (ctlDown && ev.keyCode === 86) {
|
||||||
|
return paste._container.focus();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
$(paste._target).on('pasteImage', (function(_this) {
|
||||||
|
return function() {
|
||||||
|
return $(textarea).focus();
|
||||||
|
};
|
||||||
|
})(this));
|
||||||
|
$(paste._target).on('pasteText', (function(_this) {
|
||||||
|
return function() {
|
||||||
|
return $(textarea).focus();
|
||||||
|
};
|
||||||
|
})(this));
|
||||||
|
$(textarea).on('focus', (function(_this) {
|
||||||
|
return function() {
|
||||||
|
return $(textarea).addClass('pastable-focus');
|
||||||
|
};
|
||||||
|
})(this));
|
||||||
|
return $(textarea).on('blur', (function(_this) {
|
||||||
|
return function() {
|
||||||
|
return $(textarea).removeClass('pastable-focus');
|
||||||
|
};
|
||||||
|
})(this));
|
||||||
|
};
|
||||||
|
|
||||||
|
Paste.mountContenteditable = function(contenteditable) {
|
||||||
|
var paste;
|
||||||
|
paste = new Paste(contenteditable, contenteditable);
|
||||||
|
$(contenteditable).on('focus', (function(_this) {
|
||||||
|
return function() {
|
||||||
|
return $(contenteditable).addClass('pastable-focus');
|
||||||
|
};
|
||||||
|
})(this));
|
||||||
|
return $(contenteditable).on('blur', (function(_this) {
|
||||||
|
return function() {
|
||||||
|
return $(contenteditable).removeClass('pastable-focus');
|
||||||
|
};
|
||||||
|
})(this));
|
||||||
|
};
|
||||||
|
|
||||||
|
function Paste(_at__container, _at__target) {
|
||||||
|
this._container = _at__container;
|
||||||
|
this._target = _at__target;
|
||||||
|
this._container = $(this._container);
|
||||||
|
this._target = $(this._target).addClass('pastable');
|
||||||
|
this._container.on('paste', (function(_this) {
|
||||||
|
return function(ev) {
|
||||||
|
var clipboardData, file, item, reader, text, _i, _j, _len, _len1, _ref, _ref1, _ref2, _ref3, _results;
|
||||||
|
if (((_ref = ev.originalEvent) != null ? _ref.clipboardData : void 0) != null) {
|
||||||
|
clipboardData = ev.originalEvent.clipboardData;
|
||||||
|
if (clipboardData.items) {
|
||||||
|
_ref1 = clipboardData.items;
|
||||||
|
for (_i = 0, _len = _ref1.length; _i < _len; _i++) {
|
||||||
|
item = _ref1[_i];
|
||||||
|
if (item.type.match(/^image\//)) {
|
||||||
|
reader = new FileReader();
|
||||||
|
reader.onload = function(event) {
|
||||||
|
return _this._handleImage(event.target.result);
|
||||||
|
};
|
||||||
|
reader.readAsDataURL(item.getAsFile());
|
||||||
|
}
|
||||||
|
if (item.type === 'text/plain') {
|
||||||
|
item.getAsString(function(string) {
|
||||||
|
return _this._target.trigger('pasteText', {
|
||||||
|
text: string
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (-1 !== Array.prototype.indexOf.call(clipboardData.types, 'text/plain')) {
|
||||||
|
text = clipboardData.getData('Text');
|
||||||
|
_this._target.trigger('pasteText', {
|
||||||
|
text: text
|
||||||
|
});
|
||||||
|
}
|
||||||
|
_this._checkImagesInContainer(function(src) {
|
||||||
|
return _this._handleImage(src);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (clipboardData = window.clipboardData) {
|
||||||
|
if ((_ref2 = (text = clipboardData.getData('Text'))) != null ? _ref2.length : void 0) {
|
||||||
|
return _this._target.trigger('pasteText', {
|
||||||
|
text: text
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
_ref3 = clipboardData.files;
|
||||||
|
_results = [];
|
||||||
|
for (_j = 0, _len1 = _ref3.length; _j < _len1; _j++) {
|
||||||
|
file = _ref3[_j];
|
||||||
|
_this._handleImage(URL.createObjectURL(file));
|
||||||
|
_results.push(_this._checkImagesInContainer(function() {}));
|
||||||
|
}
|
||||||
|
return _results;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
})(this));
|
||||||
|
}
|
||||||
|
|
||||||
|
Paste.prototype._handleImage = function(src) {
|
||||||
|
var loader;
|
||||||
|
loader = new Image();
|
||||||
|
loader.onload = (function(_this) {
|
||||||
|
return function() {
|
||||||
|
var blob, canvas, ctx, dataURL;
|
||||||
|
canvas = document.createElement('canvas');
|
||||||
|
canvas.width = loader.width;
|
||||||
|
canvas.height = loader.height;
|
||||||
|
ctx = canvas.getContext('2d');
|
||||||
|
ctx.drawImage(loader, 0, 0, canvas.width, canvas.height);
|
||||||
|
dataURL = null;
|
||||||
|
try {
|
||||||
|
dataURL = canvas.toDataURL('image/png');
|
||||||
|
blob = dataURLtoBlob(dataURL);
|
||||||
|
} catch (_error) {}
|
||||||
|
if (dataURL) {
|
||||||
|
return _this._target.trigger('pasteImage', {
|
||||||
|
blob: blob,
|
||||||
|
dataURL: dataURL,
|
||||||
|
width: loader.width,
|
||||||
|
height: loader.height
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
})(this);
|
||||||
|
return loader.src = src;
|
||||||
|
};
|
||||||
|
|
||||||
|
Paste.prototype._checkImagesInContainer = function(cb) {
|
||||||
|
var img, timespan, _i, _len, _ref;
|
||||||
|
timespan = Math.floor(1000 * Math.random());
|
||||||
|
_ref = this._container.find('img');
|
||||||
|
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
||||||
|
img = _ref[_i];
|
||||||
|
img["_paste_marked_" + timespan] = true;
|
||||||
|
}
|
||||||
|
return setTimeout((function(_this) {
|
||||||
|
return function() {
|
||||||
|
var _j, _len1, _ref1, _results;
|
||||||
|
_ref1 = _this._container.find('img');
|
||||||
|
_results = [];
|
||||||
|
for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) {
|
||||||
|
img = _ref1[_j];
|
||||||
|
if (!img["_paste_marked_" + timespan]) {
|
||||||
|
cb(img.src);
|
||||||
|
}
|
||||||
|
_results.push($(img).remove());
|
||||||
|
}
|
||||||
|
return _results;
|
||||||
|
};
|
||||||
|
})(this), 1);
|
||||||
|
};
|
||||||
|
|
||||||
|
return Paste;
|
||||||
|
|
||||||
|
})();
|
||||||
|
|
||||||
|
}).call(this);
|
||||||
|
|
||||||
|
function enablePasteImg(_editor) {
|
||||||
|
var editor = _editor,
|
||||||
|
name = 'paste';
|
||||||
|
//这样貌似多编辑器就不会冲突了
|
||||||
|
if(editor.edit == undefined || editor.edit.iframe == undefined){
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var contentWindow = editor.edit.iframe[0].contentWindow;
|
||||||
|
//var contentWindow = editor.iframeDoc;
|
||||||
|
//var contentWindow = document.getElementsByTagName('iframe')[0].contentWindow;
|
||||||
|
var nodeBody = contentWindow.document.getElementsByTagName('body')[0];
|
||||||
|
console.log(nodeBody);
|
||||||
|
$(nodeBody).pastableContenteditable();
|
||||||
|
|
||||||
|
dataURItoBlob = function(dataURI) {
|
||||||
|
// convert base64/URLEncoded data component to raw binary data held in a string
|
||||||
|
var byteString;
|
||||||
|
if (dataURI.split(',')[0].indexOf('base64') >= 0)
|
||||||
|
byteString = atob(dataURI.split(',')[1]);
|
||||||
|
else
|
||||||
|
byteString = unescape(dataURI.split(',')[1]);
|
||||||
|
|
||||||
|
// separate out the mime component
|
||||||
|
var mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0];
|
||||||
|
|
||||||
|
// write the bytes of the string to a typed array
|
||||||
|
var ia = new Uint8Array(byteString.length);
|
||||||
|
for (var i = 0; i < byteString.length; i++) {
|
||||||
|
ia[i] = byteString.charCodeAt(i);
|
||||||
|
}
|
||||||
|
|
||||||
|
return new Blob([ia], {type:mimeString});
|
||||||
|
};
|
||||||
|
|
||||||
|
$(nodeBody).on('pasteImage', function(ev, data) {
|
||||||
|
console.log('pasteImage');
|
||||||
|
console.log("dataURL: " + data.dataURL);
|
||||||
|
console.log("width: " + data.width);
|
||||||
|
console.log("height: " + data.height);
|
||||||
|
console.log(data.blob);
|
||||||
|
var blob = dataURItoBlob(data.dataURL);
|
||||||
|
if (data.blob !== null) {
|
||||||
|
var data = new FormData();
|
||||||
|
data.append("imgFile",blob, "imageFilename.png");
|
||||||
|
console.log(data);
|
||||||
|
$.ajax({
|
||||||
|
url: '/kindeditor/upload?dir=image',
|
||||||
|
contentType: false,
|
||||||
|
type: 'POST',
|
||||||
|
data: data,
|
||||||
|
processData: false,
|
||||||
|
success: function(data) {
|
||||||
|
editor.exec('insertimage', JSON.parse(data).url);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
return;
|
||||||
|
contentWindow.document.getElementsByTagName('body')[0].onpaste = function(event) {
|
||||||
|
// use event.originalEvent.clipboard for newer chrome versions
|
||||||
|
var items = (event.clipboardData || event.originalEvent.clipboardData).items;
|
||||||
|
console.log(JSON.stringify(items)); // will give you the mime types
|
||||||
|
// find pasted image among pasted items
|
||||||
|
var blob = null;
|
||||||
|
for (var i = 0; i < items.length; i++) {
|
||||||
|
if (items[i].type.indexOf("image") === 0) {
|
||||||
|
blob = items[i].getAsFile();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// load image if there is a pasted image
|
||||||
|
if (blob !== null) {
|
||||||
|
var reader = new FileReader();
|
||||||
|
reader.onload = function(event) {
|
||||||
|
console.log(event.target.result); // data url!
|
||||||
|
var data = new FormData();
|
||||||
|
data.append("imgFile", blob, "imageFilename.png");
|
||||||
|
console.log(blob);
|
||||||
|
$.ajax({
|
||||||
|
url: '/kindeditor/upload?dir=image',
|
||||||
|
contentType: false,
|
||||||
|
type: 'POST',
|
||||||
|
data: data,
|
||||||
|
processData: false,
|
||||||
|
success: function(data) {
|
||||||
|
editor.exec('insertimage', JSON.parse(data).url);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
reader.readAsDataURL(blob);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
|
@ -1,8 +1,7 @@
|
||||||
/* Redmine - project management software
|
/* Redmine - project management software
|
||||||
Copyright (C) 2006-2013 Jean-Philippe Lang */
|
Copyright (C) 2006-2013 Jean-Philippe Lang */
|
||||||
|
|
||||||
function postUpMsg(attachmentId)
|
function postUpMsg(attachmentId) {
|
||||||
{
|
|
||||||
$.ajax({
|
$.ajax({
|
||||||
url: '/attachments/renderTag',
|
url: '/attachments/renderTag',
|
||||||
type: "GET",
|
type: "GET",
|
||||||
|
@ -30,14 +29,40 @@ function addFile_board(inputEl, file, eagerUpload, id) {
|
||||||
deleteallfiles = $(inputEl).data('deleteAllFiles');
|
deleteallfiles = $(inputEl).data('deleteAllFiles');
|
||||||
var attachmentId = addFile.nextAttachmentId++;
|
var attachmentId = addFile.nextAttachmentId++;
|
||||||
|
|
||||||
var fileSpan = $('<span>', { 'id': 'attachments_' + attachmentId, 'class':'attachment' });
|
var fileSpan = $('<span>', {
|
||||||
|
'id': 'attachments_' + attachmentId,
|
||||||
|
'class': 'attachment'
|
||||||
|
});
|
||||||
|
|
||||||
fileSpan.append(
|
fileSpan.append(
|
||||||
$('<input>', { 'type': 'text', 'class': 'filename readonly', 'name': 'attachments[' + attachmentId + '][filename]', 'readonly': 'readonly'} ).val(file.name),
|
$('<input>', {
|
||||||
$('<input>', { 'type': 'text', 'class': 'description', 'name': 'attachments[' + attachmentId + '][description]', 'maxlength': 254, 'placeholder': $(inputEl).data('descriptionPlaceholder') } ).toggle(!eagerUpload),
|
'type': 'text',
|
||||||
$('<span >'+$(inputEl).data('fieldIsPublic')+':</span>').attr({ 'class': 'ispublic-label' }) ,
|
'class': 'filename readonly',
|
||||||
$('<input>', { 'type': 'checkbox', 'class': 'is_public_checkbox','value':1, 'name': 'attachments[' + attachmentId + '][is_public_checkbox]', checked:'checked' } ).toggle(!eagerUpload),
|
'name': 'attachments[' + attachmentId + '][filename]',
|
||||||
$('<a> </a>').attr({ 'href': "#", 'class': 'remove-upload', 'data-containerid':id }).click(function(){
|
'readonly': 'readonly'
|
||||||
|
}).val(file.name),
|
||||||
|
$('<input>', {
|
||||||
|
'type': 'text',
|
||||||
|
'class': 'description',
|
||||||
|
'name': 'attachments[' + attachmentId + '][description]',
|
||||||
|
'maxlength': 254,
|
||||||
|
'placeholder': $(inputEl).data('descriptionPlaceholder')
|
||||||
|
}).toggle(!eagerUpload),
|
||||||
|
$('<span >' + $(inputEl).data('fieldIsPublic') + ':</span>').attr({
|
||||||
|
'class': 'ispublic-label'
|
||||||
|
}),
|
||||||
|
$('<input>', {
|
||||||
|
'type': 'checkbox',
|
||||||
|
'class': 'is_public_checkbox',
|
||||||
|
'value': 1,
|
||||||
|
'name': 'attachments[' + attachmentId + '][is_public_checkbox]',
|
||||||
|
checked: 'checked'
|
||||||
|
}).toggle(!eagerUpload),
|
||||||
|
$('<a> </a>').attr({
|
||||||
|
'href': "#",
|
||||||
|
'class': 'remove-upload',
|
||||||
|
'data-containerid': id
|
||||||
|
}).click(function() {
|
||||||
if (confirm($(inputEl).data('areYouSure'))) {
|
if (confirm($(inputEl).data('areYouSure'))) {
|
||||||
removeFile();
|
removeFile();
|
||||||
if (!eagerUpload) {
|
if (!eagerUpload) {
|
||||||
|
@ -48,7 +73,10 @@ function addFile_board(inputEl, file, eagerUpload, id) {
|
||||||
}
|
}
|
||||||
|
|
||||||
}).toggle(!eagerUpload),
|
}).toggle(!eagerUpload),
|
||||||
$('<div>', { 'class': 'div_attachments', 'name': 'div_'+'attachments_' + attachmentId} )
|
$('<div>', {
|
||||||
|
'class': 'div_attachments',
|
||||||
|
'name': 'div_' + 'attachments_' + attachmentId
|
||||||
|
})
|
||||||
).appendTo(attachments_frame);
|
).appendTo(attachments_frame);
|
||||||
|
|
||||||
if (eagerUpload) {
|
if (eagerUpload) {
|
||||||
|
@ -59,6 +87,7 @@ function addFile_board(inputEl, file, eagerUpload, id) {
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
function addFile(inputEl, file, eagerUpload) {
|
function addFile(inputEl, file, eagerUpload) {
|
||||||
|
|
||||||
var attachments_frame = '#attachments_fields';
|
var attachments_frame = '#attachments_fields';
|
||||||
|
@ -66,14 +95,39 @@ function addFile(inputEl, file, eagerUpload) {
|
||||||
deleteallfiles = $(inputEl).data('deleteAllFiles');
|
deleteallfiles = $(inputEl).data('deleteAllFiles');
|
||||||
var attachmentId = addFile.nextAttachmentId++;
|
var attachmentId = addFile.nextAttachmentId++;
|
||||||
|
|
||||||
var fileSpan = $('<span>', { 'id': 'attachments_' + attachmentId, 'class':'attachment' });
|
var fileSpan = $('<span>', {
|
||||||
|
'id': 'attachments_' + attachmentId,
|
||||||
|
'class': 'attachment'
|
||||||
|
});
|
||||||
|
|
||||||
fileSpan.append(
|
fileSpan.append(
|
||||||
$('<input>', { 'type': 'text', 'class': 'filename readonly', 'name': 'attachments[' + attachmentId + '][filename]', 'readonly': 'readonly'} ).val(file.name),
|
$('<input>', {
|
||||||
$('<input>', { 'type': 'text', 'class': 'description', 'name': 'attachments[' + attachmentId + '][description]', 'maxlength': 254, 'placeholder': $(inputEl).data('descriptionPlaceholder') } ).toggle(!eagerUpload),
|
'type': 'text',
|
||||||
$('<span >'+$(inputEl).data('fieldIsPublic')+':</span>').attr({ 'class': 'ispublic-label' }) ,
|
'class': 'filename readonly',
|
||||||
$('<input>', { 'type': 'checkbox', 'class': 'is_public_checkbox','value':1, 'name': 'attachments[' + attachmentId + '][is_public_checkbox]', checked:'checked' } ).toggle(!eagerUpload),
|
'name': 'attachments[' + attachmentId + '][filename]',
|
||||||
$('<a> </a>').attr({ 'href': "#", 'class': 'remove-upload' }).click(function(){
|
'readonly': 'readonly'
|
||||||
|
}).val(file.name),
|
||||||
|
$('<input>', {
|
||||||
|
'type': 'text',
|
||||||
|
'class': 'description',
|
||||||
|
'name': 'attachments[' + attachmentId + '][description]',
|
||||||
|
'maxlength': 254,
|
||||||
|
'placeholder': $(inputEl).data('descriptionPlaceholder')
|
||||||
|
}).toggle(!eagerUpload),
|
||||||
|
$('<span >' + $(inputEl).data('fieldIsPublic') + ':</span>').attr({
|
||||||
|
'class': 'ispublic-label'
|
||||||
|
}),
|
||||||
|
$('<input>', {
|
||||||
|
'type': 'checkbox',
|
||||||
|
'class': 'is_public_checkbox',
|
||||||
|
'value': 1,
|
||||||
|
'name': 'attachments[' + attachmentId + '][is_public_checkbox]',
|
||||||
|
checked: 'checked'
|
||||||
|
}).toggle(!eagerUpload),
|
||||||
|
$('<a> </a>').attr({
|
||||||
|
'href': "#",
|
||||||
|
'class': 'remove-upload'
|
||||||
|
}).click(function() {
|
||||||
if (confirm($(inputEl).data('areYouSure'))) {
|
if (confirm($(inputEl).data('areYouSure'))) {
|
||||||
removeFile();
|
removeFile();
|
||||||
if (!eagerUpload) {
|
if (!eagerUpload) {
|
||||||
|
@ -84,7 +138,10 @@ function addFile(inputEl, file, eagerUpload) {
|
||||||
}
|
}
|
||||||
|
|
||||||
}).toggle(!eagerUpload),
|
}).toggle(!eagerUpload),
|
||||||
$('<div>', { 'class': 'div_attachments', 'name': 'div_'+'attachments_' + attachmentId} )
|
$('<div>', {
|
||||||
|
'class': 'div_attachments',
|
||||||
|
'name': 'div_' + 'attachments_' + attachmentId
|
||||||
|
})
|
||||||
).appendTo('#attachments_fields');
|
).appendTo('#attachments_fields');
|
||||||
|
|
||||||
if (eagerUpload) {
|
if (eagerUpload) {
|
||||||
|
@ -126,8 +183,7 @@ function ajaxUpload(file, attachmentId, fileSpan, inputEl) {
|
||||||
})
|
})
|
||||||
.fail(function(result) {
|
.fail(function(result) {
|
||||||
progressSpan.text(result.statusText);
|
progressSpan.text(result.statusText);
|
||||||
if($("#network_issue"))
|
if ($("#network_issue")) {
|
||||||
{
|
|
||||||
$("#network_issue").show();
|
$("#network_issue").show();
|
||||||
}
|
}
|
||||||
}).always(function() {
|
}).always(function() {
|
||||||
|
@ -151,7 +207,11 @@ function ajaxUpload(file, attachmentId, fileSpan, inputEl) {
|
||||||
var add_attachs = $('.add_attachment');
|
var add_attachs = $('.add_attachment');
|
||||||
var delete_all = $('.remove_all');
|
var delete_all = $('.remove_all');
|
||||||
if (delete_all.length < 1) {
|
if (delete_all.length < 1) {
|
||||||
add_attachs.append($("<a> </a>").attr({"href":"javascript:void(0)", 'class': 'remove_all',"onclick": "removeAll()"}));
|
add_attachs.append($("<a> </a>").attr({
|
||||||
|
"href": "javascript:void(0)",
|
||||||
|
'class': 'remove_all',
|
||||||
|
"onclick": "removeAll()"
|
||||||
|
}));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -254,7 +314,6 @@ function uploadBlob(blob, uploadUrl, attachmentId, options) {
|
||||||
|
|
||||||
function addInputFiles(inputEl) {
|
function addInputFiles(inputEl) {
|
||||||
// var clearedFileInput = $(inputEl).clone().val('');
|
// var clearedFileInput = $(inputEl).clone().val('');
|
||||||
|
|
||||||
if (inputEl.files) {
|
if (inputEl.files) {
|
||||||
// upload files using ajax
|
// upload files using ajax
|
||||||
uploadAndAttachFiles(inputEl.files, inputEl);
|
uploadAndAttachFiles(inputEl.files, inputEl);
|
||||||
|
@ -263,15 +322,22 @@ function addInputFiles(inputEl) {
|
||||||
// browser not supporting the file API, upload on form submission
|
// browser not supporting the file API, upload on form submission
|
||||||
var attachmentId;
|
var attachmentId;
|
||||||
var aFilename = inputEl.value.split(/\/|\\/);
|
var aFilename = inputEl.value.split(/\/|\\/);
|
||||||
attachmentId = addFile(inputEl, { name: aFilename[ aFilename.length - 1 ] }, false);
|
var count = $('#attachments_fields>span').length;
|
||||||
|
attachmentId = addFile(inputEl, {
|
||||||
|
name: aFilename[aFilename.length - 1]
|
||||||
|
}, false);
|
||||||
if (attachmentId) {
|
if (attachmentId) {
|
||||||
$(inputEl).attr({ name: 'attachments[' + attachmentId + '][file]'}).hide();
|
$(inputEl).attr({
|
||||||
|
name: 'attachments[' + attachmentId + '][file]'
|
||||||
|
}).hide();
|
||||||
|
if (count <= 0) count = 1;
|
||||||
$('#upload_file_count').html("<span id=\"count\">" + count + "</span>" + $(inputEl).data('fileCount'));
|
$('#upload_file_count').html("<span id=\"count\">" + count + "</span>" + $(inputEl).data('fileCount'));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//clearedFileInput.insertAfter('#attachments_fields');
|
//clearedFileInput.insertAfter('#attachments_fields');
|
||||||
}
|
}
|
||||||
|
|
||||||
function addInputFiles_board(inputEl, id) {
|
function addInputFiles_board(inputEl, id) {
|
||||||
// var clearedFileInput = $(inputEl).clone().val('');
|
// var clearedFileInput = $(inputEl).clone().val('');
|
||||||
|
|
||||||
|
@ -283,15 +349,20 @@ function addInputFiles_board(inputEl, id) {
|
||||||
// browser not supporting the file API, upload on form submission
|
// browser not supporting the file API, upload on form submission
|
||||||
var attachmentId;
|
var attachmentId;
|
||||||
var aFilename = inputEl.value.split(/\/|\\/);
|
var aFilename = inputEl.value.split(/\/|\\/);
|
||||||
attachmentId = addFile_board(inputEl, { name: aFilename[ aFilename.length - 1 ] }, false, id);
|
attachmentId = addFile_board(inputEl, {
|
||||||
|
name: aFilename[aFilename.length - 1]
|
||||||
|
}, false, id);
|
||||||
if (attachmentId) {
|
if (attachmentId) {
|
||||||
$(inputEl).attr({ name: 'attachments[' + attachmentId + '][file]'}).hide();
|
$(inputEl).attr({
|
||||||
|
name: 'attachments[' + attachmentId + '][file]'
|
||||||
|
}).hide();
|
||||||
$('#upload_file_count').html("<span id=\"count\">" + count + "</span>" + $(inputEl).data('fileCount'));
|
$('#upload_file_count').html("<span id=\"count\">" + count + "</span>" + $(inputEl).data('fileCount'));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//clearedFileInput.insertAfter('#attachments_fields');
|
//clearedFileInput.insertAfter('#attachments_fields');
|
||||||
}
|
}
|
||||||
|
|
||||||
function uploadAndAttachFiles(files, inputEl) {
|
function uploadAndAttachFiles(files, inputEl) {
|
||||||
|
|
||||||
var maxFileSize = $(inputEl).data('max-file-size');
|
var maxFileSize = $(inputEl).data('max-file-size');
|
||||||
|
@ -299,14 +370,19 @@ function uploadAndAttachFiles(files, inputEl) {
|
||||||
|
|
||||||
var sizeExceeded = false;
|
var sizeExceeded = false;
|
||||||
$.each(files, function() {
|
$.each(files, function() {
|
||||||
if (this.size && maxFileSize != null && this.size > parseInt(maxFileSize)) {sizeExceeded=true;}
|
if (this.size && maxFileSize != null && this.size > parseInt(maxFileSize)) {
|
||||||
|
sizeExceeded = true;
|
||||||
|
}
|
||||||
});
|
});
|
||||||
if (sizeExceeded) {
|
if (sizeExceeded) {
|
||||||
window.alert(maxFileSizeExceeded);
|
window.alert(maxFileSizeExceeded);
|
||||||
} else {
|
} else {
|
||||||
$.each(files, function() {addFile(inputEl, this, true);});
|
$.each(files, function() {
|
||||||
|
addFile(inputEl, this, true);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function uploadAndAttachFiles_board(files, inputEl, id) {
|
function uploadAndAttachFiles_board(files, inputEl, id) {
|
||||||
|
|
||||||
var maxFileSize = $(inputEl).data('max-file-size');
|
var maxFileSize = $(inputEl).data('max-file-size');
|
||||||
|
@ -314,14 +390,19 @@ function uploadAndAttachFiles_board(files, inputEl, id) {
|
||||||
|
|
||||||
var sizeExceeded = false;
|
var sizeExceeded = false;
|
||||||
$.each(files, function() {
|
$.each(files, function() {
|
||||||
if (this.size && maxFileSize != null && this.size > parseInt(maxFileSize)) {sizeExceeded=true;}
|
if (this.size && maxFileSize != null && this.size > parseInt(maxFileSize)) {
|
||||||
|
sizeExceeded = true;
|
||||||
|
}
|
||||||
});
|
});
|
||||||
if (sizeExceeded) {
|
if (sizeExceeded) {
|
||||||
window.alert(maxFileSizeExceeded);
|
window.alert(maxFileSizeExceeded);
|
||||||
} else {
|
} else {
|
||||||
$.each(files, function() {addFile_board(inputEl, this, true, id);});
|
$.each(files, function() {
|
||||||
|
addFile_board(inputEl, this, true, id);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function handleFileDropEvent(e) {
|
function handleFileDropEvent(e) {
|
||||||
|
|
||||||
$(this).removeClass('fileover');
|
$(this).removeClass('fileover');
|
||||||
|
@ -345,7 +426,9 @@ function dragOutHandler(e) {
|
||||||
function setupFileDrop() {
|
function setupFileDrop() {
|
||||||
if (window.File && window.FileList && window.ProgressEvent && window.FormData) {
|
if (window.File && window.FileList && window.ProgressEvent && window.FormData) {
|
||||||
|
|
||||||
$.event.fixHooks.drop = { props: [ 'dataTransfer' ] };
|
$.event.fixHooks.drop = {
|
||||||
|
props: ['dataTransfer']
|
||||||
|
};
|
||||||
|
|
||||||
$('form div.box').has('input:file').each(function() {
|
$('form div.box').has('input:file').each(function() {
|
||||||
$(this).on({
|
$(this).on({
|
||||||
|
|
|
@ -635,6 +635,8 @@ a:hover.icon_add{background:url(images/icons.png) -20px -310px no-repeat;}
|
||||||
.mr18{ margin-right:18px;}
|
.mr18{ margin-right:18px;}
|
||||||
a.hwork_center{ display:block; width:60px; margin-right:5px;overflow: hidden; white-space: nowrap; text-overflow:ellipsis;}
|
a.hwork_center{ display:block; width:60px; margin-right:5px;overflow: hidden; white-space: nowrap; text-overflow:ellipsis;}
|
||||||
.hwork_name{ display:block;width:80px; overflow: hidden;white-space: nowrap; text-overflow:ellipsis;min-height: 1px;}
|
.hwork_name{ display:block;width:80px; overflow: hidden;white-space: nowrap; text-overflow:ellipsis;min-height: 1px;}
|
||||||
|
.absence_penalty{ display:block;width:45px; overflow: hidden;white-space: nowrap; text-overflow:ellipsis;min-height: 1px;}
|
||||||
|
.border_ce {border: 1px solid #e4e4e4;}
|
||||||
.show_hwork{ border:2px solid #64bdd9; width:646px; padding:10px; color:#666666; padding-bottom:0px; }
|
.show_hwork{ border:2px solid #64bdd9; width:646px; padding:10px; color:#666666; padding-bottom:0px; }
|
||||||
.show_hwork ul li{ margin-bottom:5px;}
|
.show_hwork ul li{ margin-bottom:5px;}
|
||||||
.show_hwork_arrow{ position:relative; top:2px; left:25px;background:url(../images/course/arrow_up.jpg) 0 0 no-repeat; width:20px; height:11px;}
|
.show_hwork_arrow{ position:relative; top:2px; left:25px;background:url(../images/course/arrow_up.jpg) 0 0 no-repeat; width:20px; height:11px;}
|
||||||
|
@ -657,7 +659,9 @@ a:hover.down_btn{ background:#14ad5a; color:#fff; border:1px solid #14ad5a;}
|
||||||
.info_ni{ width:100px; padding:5px;position: absolute;display:none;-moz-border-radius:3px; -webkit-border-radius:3px; border-radius:3px; box-shadow:0px 0px 5px #194a81; color:#666; background:#fff; text-align:left;}
|
.info_ni{ width:100px; padding:5px;position: absolute;display:none;-moz-border-radius:3px; -webkit-border-radius:3px; border-radius:3px; box-shadow:0px 0px 5px #194a81; color:#666; background:#fff; text-align:left;}
|
||||||
/*返回顶部*/
|
/*返回顶部*/
|
||||||
.to_top{width: 19px;height: 74px;position: fixed;top: 50px;right: 1px;color: white;background: #15bccf; line-height: 1.2; padding-top: 10px;padding-left: 5px;font-size: 14px;cursor: pointer;}
|
.to_top{width: 19px;height: 74px;position: fixed;top: 50px;right: 1px;color: white;background: #15bccf; line-height: 1.2; padding-top: 10px;padding-left: 5px;font-size: 14px;cursor: pointer;}
|
||||||
|
.hwork_num_ab{ width:120px; display:block; overflow:hidden; white-space: nowrap; text-overflow:ellipsis;min-height: 1px;}
|
||||||
|
.hwork_name_ab{ display:block;width:340px; overflow: hidden;white-space: nowrap; text-overflow:ellipsis;min-height: 1px;}
|
||||||
|
.absence{width: 50px;text-align: center;}
|
||||||
/* 评分插件 */
|
/* 评分插件 */
|
||||||
input#score{ width:40px;}
|
input#score{ width:40px;}
|
||||||
.ui-slider{position:relative;width:200px;float:left;margin-right:10px;height:14px; margin-top:2px;background:#e2e2e2; }
|
.ui-slider{position:relative;width:200px;float:left;margin-right:10px;height:14px; margin-top:2px;background:#e2e2e2; }
|
||||||
|
@ -666,7 +670,7 @@ input#score{ width:40px;}
|
||||||
.ui-slider .ui-slider-handle:active{background-image:none;}
|
.ui-slider .ui-slider-handle:active{background-image:none;}
|
||||||
.ui-slider .ui-slider-range{position:absolute;z-index:1;font-size:.7em;display:block;border:0;top:0;height:100%;background:#64bdd9;left:0;}
|
.ui-slider .ui-slider-range{position:absolute;z-index:1;font-size:.7em;display:block;border:0;top:0;height:100%;background:#64bdd9;left:0;}
|
||||||
|
|
||||||
.filename { background: url(../images/pic_file.png) 0 -25px no-repeat;color: #3ca5c6;max-width: 150px;border: none; padding-left: 20px;margin-right: 10px;margin-bottom: 5px;}
|
.filename { background: url(../images/pic_file.png) 0 -25px no-repeat;color: #3ca5c6;max-width: 150px;border: none; padding-left: 20px;margin-right: 10px;margin-bottom: 5px; white-space: nowrap; text-overflow:ellipsis;}
|
||||||
.evaluation{position: relative;}
|
.evaluation{position: relative;}
|
||||||
.evaluation_submit{position: absolute;right: 0px;bottom: 5px;}
|
.evaluation_submit{position: absolute;right: 0px;bottom: 5px;}
|
||||||
.student_work_search{background-color: #64bdd9;color: white !important;padding: 2px 7px;margin-left: 10px;cursor: pointer; }
|
.student_work_search{background-color: #64bdd9;color: white !important;padding: 2px 7px;margin-left: 10px;cursor: pointer; }
|
||||||
|
|
|
@ -69,6 +69,7 @@ h4{ font-size:14px; color:#3b3b3b;}
|
||||||
.ml90{ margin-left:90px;}
|
.ml90{ margin-left:90px;}
|
||||||
.ml100{ margin-left:100px;}
|
.ml100{ margin-left:100px;}
|
||||||
.ml110{ margin-left:110px;}
|
.ml110{ margin-left:110px;}
|
||||||
|
.ml320{ margin-left:320px;}
|
||||||
.mr5{ margin-right:5px;}
|
.mr5{ margin-right:5px;}
|
||||||
.mr10{ margin-right:10px;}
|
.mr10{ margin-right:10px;}
|
||||||
.mr20{ margin-right:20px;}
|
.mr20{ margin-right:20px;}
|
||||||
|
|
Loading…
Reference in New Issue