Merge branch 'szzh' into sw_new_course

sw_new_course
sw 10 years ago
commit 177b211edd

@ -0,0 +1,54 @@
class ActivityNotifysController < ApplicationController
# layout 'base_projects'#by young
# default_search_scope :messages
before_filter :find_project_by_project_id#, :find_board_if_available
# before_filter :authorize, :except => [:new, :show, :create, :index]
# accept_rss_auth :index, :show
helper :activities
def index
query = nil
if @course
query = ActivityNotify.where('activity_container_id=? and activity_container_type=? and notify_to=?',@course.id,'Course',User.current.id);
else
@events_by_day = []
end
if( query != nil )
logger.info('xxoo')
limit = 10;
@obj_count = query.count();
@obj_pages = Paginator.new @obj_count,limit,params['page']
list = query.order('id desc').limit(limit).offset(@obj_pages.offset).all();
events=[];
for item in list
event = item.activity;
event.set_notify_id(item.id)
event.set_notify_is_read(item.is_read)
events << event
end
@events_by_day = events.group_by {|event| User.current.time_to_date(event.event_datetime)}
@controller_name = 'ActivityNotifys'
logger.info('aavv')
end
respond_to do |format|
format.html {render :template => 'courses/show', :layout => 'base_courses'}
end
end
def chang_read_flag
if @course
if(params[:an_id] != nil )
query = ActivityNotify.where('id=? and notify_to=?',params[:an_id],User.current.id)
else
query = ActivityNotify.where('activity_container_id=? and activity_container_type=? and notify_to=? and is_read=0',@course.id,'Course',User.current.id)
end
@result = query.update_all('is_read=1');
else
@result = false;
end
respond_to do |format|
format.html{render :layout => nil}
end
end
end

@ -71,7 +71,7 @@ class AttachmentsController < ApplicationController
if stale?(:etag => @attachment.digest) if stale?(:etag => @attachment.digest)
convered_file = File.join(Rails.root, "files", "convered_office", @attachment.disk_filename + ".html") convered_file = File.join(Rails.root, "files", "convered_office", @attachment.disk_filename + ".html")
if File.exist?(convered_file) if File.exist?(convered_file)
render :text => File.open(convered_file).read send_file convered_file, :type => 'text/html; charset=utf-8', :disposition => 'inline'
else else
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),
@ -191,9 +191,19 @@ class AttachmentsController < ApplicationController
if !@attachment.container.nil? && if !@attachment.container.nil? &&
(@attachment.container.is_a?(Course) || ((@attachment.container.has_attribute?(:course) || @attachment.container.has_attribute?(:course_id) ) && (@attachment.container.is_a?(Course) || ((@attachment.container.has_attribute?(:course) || @attachment.container.has_attribute?(:course_id) ) &&
@attachment.container.course ) || ((@attachment.container.has_attribute?(:board) || @attachment.container.has_attribute?(:board_id)) && @attachment.container.course ) || ((@attachment.container.has_attribute?(:board) || @attachment.container.has_attribute?(:board_id)) &&
@attachment.container.board && @attachment.container.board.course ) ) @attachment.container.board && @attachment.container.board.course ) || @attachment.container.is_a?(StudentWorksScore) || @attachment.container.is_a?(HomeworkCommon) ||
@attachment.container.is_a?(StudentWork))
if @attachment.container.is_a?(News) if @attachment.container.is_a?(News)
format.html { redirect_to_referer_or news_path(@attachment.container) } format.html { redirect_to_referer_or news_path(@attachment.container) }
elsif @attachment.container.is_a?(StudentWorksScore)
@is_destroy = true #根据ID删除页面对应的数据js刷新页面
format.js
elsif @attachment.container.is_a?(HomeworkCommon)
@is_destroy = true #根据ID删除页面对应的数据js刷新页面
format.js
elsif @attachment.container.is_a?(StudentWork)
@is_destroy = true #根据ID删除页面对应的数据js刷新页面
format.js
elsif @attachment.container.is_a?(Message) elsif @attachment.container.is_a?(Message)
format.html { redirect_to_referer_or new_board_message_path(@attachment.container) } format.html { redirect_to_referer_or new_board_message_path(@attachment.container) }
elsif @course.nil? elsif @course.nil?
@ -431,7 +441,7 @@ private
@attachment.container.board.course) @attachment.container.board.course)
@course = @attachment.container.board.course @course = @attachment.container.board.course
else else
unless @attachment.container_type == 'Bid' || @attachment.container_type == 'HomeworkAttach' || @attachment.container_type == 'Memo' || @attachment.container_type == 'Softapplication' || @attachment.container_type == 'PhoneAppVersion' || @attachment.container_type == 'StudentWorksScore'|| @attachment.container_type == 'StudentWorks' unless @attachment.container_type == 'Bid' || @attachment.container_type == 'HomeworkAttach' || @attachment.container_type == 'Memo' || @attachment.container_type == 'Softapplication' || @attachment.container_type == 'PhoneAppVersion' || @attachment.container_type == 'StudentWorksScore'|| @attachment.container_type == 'StudentWork'
@project = @attachment.project @project = @attachment.project
end end
end end

@ -88,14 +88,40 @@ class BoardsController < ApplicationController
preload(:author, {:last_reply => :author}). preload(:author, {:last_reply => :author}).
all all
elsif @course elsif @course
board_topics = @board ? @board.topics.reorder("#{Message.table_name}.sticky DESC, #{Message.table_name}.created_on desc"). #
includes(:last_reply). # board_topics = @board ? @board.topics.reorder("#{Message.table_name}.sticky DESC, #{Message.table_name}.created_on desc").
# limit(@topic_pages.per_page). # includes(:last_reply).
# offset(@topic_pages.offset). # # limit(@topic_pages.per_page).
# # offset(@topic_pages.offset).
preload(:author, {:last_reply => :author}). #
all : [] # preload(:author, {:last_reply => :author}).
@topics = paginateHelper board_topics,10 # all : []
# @topics = paginateHelper board_topics,10
if( @board )
limit = 10;
pageno = params[:page];
if(pageno == nil || pageno=='')
dw_topic = nil;
if( params[:parent_id]!=nil && params[:parent_id]!='' )
dw_topic = @board.topics.where(id:params[:parent_id]).first();
end
if( dw_topic != nil )
dw_count = @board.topics.where('(sticky>?) or (sticky=? and created_on>?)',dw_topic.sticky,dw_topic.sticky,dw_topic.created_on).count();
dw_count = dw_count+1;
pageno = dw_count%10==0 ? (dw_count/limit) : (dw_count/limit+1)
end
end
if(pageno == nil || pageno=='')
pageno=1;
end
@topic_count = @board.topics.count();
@topic_pages = Paginator.new @topic_count, limit, pageno
@topics = @board.topics.reorder("#{Message.table_name}.sticky DESC, #{Message.table_name}.created_on desc").
limit(limit).offset(@topic_pages.offset).includes(:last_reply).
preload(:author, {:last_reply => :author}).all();
else
@topics = [];
end
end end
@message = Message.new(:board => @board) @message = Message.new(:board => @board)
@ -103,6 +129,7 @@ class BoardsController < ApplicationController
if @project if @project
render :action => 'show', :layout => 'base_projects' render :action => 'show', :layout => 'base_projects'
elsif @course elsif @course
@params=params
render :action => 'show', :layout => 'base_courses' render :action => 'show', :layout => 'base_courses'
end end
} }

@ -334,9 +334,8 @@ class HomeworkAttachController < ApplicationController
@homework.name = name @homework.name = name
@homework.description = description @homework.description = description
@homework.project_id = params[:project_id] || 0 @homework.project_id = params[:project_id] || 0
if params[:attachments] @homework.save_attachments(params[:attachments])
@homework.save_attachments(params[:attachments]) render_attachment_warning_if_needed(@homework)
end
if @homework.save if @homework.save
respond_to do |format| respond_to do |format|
format.html { redirect_to course_for_bid_url @homework.bid } format.html { redirect_to course_for_bid_url @homework.bid }

@ -5,7 +5,7 @@ class HomeworkCommonController < ApplicationController
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]
def index def index
homeworks = @course.homework_commons homeworks = @course.homework_commons.order("created_at desc")
@is_teacher = User.current.logged? && (User.current.admin? || User.current.allowed_to?(:as_teacher,@course)) @is_teacher = User.current.logged? && (User.current.admin? || User.current.allowed_to?(:as_teacher,@course))
@is_student = User.current.logged? && (User.current.admin? || (User.current.member_of_course?(@course) && !@is_teacher)) @is_student = User.current.logged? && (User.current.admin? || (User.current.member_of_course?(@course) && !@is_teacher))
@homeworks = paginateHelper homeworks,20 @homeworks = paginateHelper homeworks,20
@ -17,14 +17,14 @@ class HomeworkCommonController < ApplicationController
def new def new
@homework = HomeworkCommon.new @homework = HomeworkCommon.new
@homework.safe_attributes = params[:homework_common] @homework.safe_attributes = params[:homework_common]
@homework.late_penalty = 2 @homework.late_penalty = 0
@homework.end_time = (Time.now + 3600 * 24).strftime('%Y-%m-%d') @homework.end_time = (Time.now + 3600 * 24).strftime('%Y-%m-%d')
@homework.publish_time = Time.now.strftime('%Y-%m-%d') @homework.publish_time = Time.now.strftime('%Y-%m-%d')
#匿评作业相关属性 #匿评作业相关属性
@homework_detail_manual = HomeworkDetailManual.new @homework_detail_manual = HomeworkDetailManual.new
@homework_detail_manual.ta_proportion = 0.6 @homework_detail_manual.ta_proportion = 0.6
@homework_detail_manual.absence_penalty = 2 @homework_detail_manual.absence_penalty = 0
@homework_detail_manual.evaluation_num = 3 @homework_detail_manual.evaluation_num = 3
@homework_detail_manual.evaluation_start = Time.now.strftime('%Y-%m-%d') @homework_detail_manual.evaluation_start = Time.now.strftime('%Y-%m-%d')
@homework_detail_manual.evaluation_end = (Time.now + 3600 * 24).strftime('%Y-%m-%d') @homework_detail_manual.evaluation_end = (Time.now + 3600 * 24).strftime('%Y-%m-%d')
@ -101,6 +101,9 @@ class HomeworkCommonController < ApplicationController
@homework_detail_manual.evaluation_num = params[:evaluation_num] @homework_detail_manual.evaluation_num = params[:evaluation_num]
@homework_detail_manual.absence_penalty = params[:absence_penalty] @homework_detail_manual.absence_penalty = params[:absence_penalty]
@homework.save_attachments(params[:attachments])
render_attachment_warning_if_needed(@homework)
if @homework.save && @homework_detail_manual.save if @homework.save && @homework_detail_manual.save
respond_to do |format| respond_to do |format|
format.html { format.html {
@ -197,7 +200,7 @@ class HomeworkCommonController < ApplicationController
end end
#是不是课程的老师 #是不是课程的老师
def teacher_of_course def teacher_of_course
render_403 unless User.current.allowed_to?(:as_teacher,@course) render_403 unless User.current.allowed_to?(:as_teacher,@course) || User.current.admin?
end end
def get_assigned_homeworks(student_works, n, index) def get_assigned_homeworks(student_works, n, index)

@ -31,6 +31,8 @@ class MessagesController < ApplicationController
include AttachmentsHelper include AttachmentsHelper
helper :project_score helper :project_score
include CoursesHelper
REPLIES_PER_PAGE = 25 unless const_defined?(:REPLIES_PER_PAGE) REPLIES_PER_PAGE = 25 unless const_defined?(:REPLIES_PER_PAGE)
# Show a topic and its replies # Show a topic and its replies
@ -91,6 +93,29 @@ class MessagesController < ApplicationController
ids = params[:asset_id].split(',') ids = params[:asset_id].split(',')
update_kindeditor_assets_owner ids,@message.id,OwnerTypeHelper::MESSAGE update_kindeditor_assets_owner ids,@message.id,OwnerTypeHelper::MESSAGE
end end
# 与我相关动态的记录add start
if(@board.course_id>0) #项目的先不管
teachers = searchTeacherAndAssistant(@board.course);
for teacher in teachers
if(teacher.user_id != User.current.id)
notify = ActivityNotify.new()
if(@board.course_id>0)
notify.activity_container_id = @board.course_id
notify.activity_container_type = 'Course'
else
notify.activity_container_id = @board.project_id
notify.activity_container_type = 'Project'
end
notify.activity_id = @message.id
notify.activity_type = 'Message'
notify.notify_to = teacher.user_id
notify.is_read = 0
notify.save()
end
end
end
# 与我相关动态的记录add end
call_hook(:controller_messages_new_after_save, { :params => params, :message => @message}) call_hook(:controller_messages_new_after_save, { :params => params, :message => @message})
render_attachment_warning_if_needed(@message) render_attachment_warning_if_needed(@message)
if params[:is_board] if params[:is_board]
@ -151,6 +176,35 @@ class MessagesController < ApplicationController
ids = params[:asset_id].split(',') ids = params[:asset_id].split(',')
update_kindeditor_assets_owner ids,@reply.id,OwnerTypeHelper::MESSAGE update_kindeditor_assets_owner ids,@reply.id,OwnerTypeHelper::MESSAGE
end end
# 与我相关动态的记录add start
if(@board.course_id>0) #项目的先不管
notifyto_arr = {}
notifyto_arr[@topic.author_id] = @topic.author_id
if( params[:parent_topic] != nil && params[:parent_topic] != '')
parent_topic = Message.find(params[:parent_topic])
notifyto_arr[parent_topic.author_id] = parent_topic.author_id
end
notifyto_arr.each do |k,user_id|
if(user_id != User.current.id)
notify = ActivityNotify.new()
if(@board.course_id>0)
notify.activity_container_id = @board.course_id
notify.activity_container_type = 'Course'
else
notify.activity_container_id = @board.project_id
notify.activity_container_type = 'Project'
end
notify.activity_id = @reply.id
notify.activity_type = 'Message'
notify.notify_to = user_id
notify.is_read = 0
notify.save()
end
end
end
# 与我相关动态的记录add end
call_hook(:controller_messages_reply_after_save, { :params => params, :message => @reply}) call_hook(:controller_messages_reply_after_save, { :params => params, :message => @reply})
attachments = Attachment.attach_files(@reply, params[:attachments]) attachments = Attachment.attach_files(@reply, params[:attachments])
render_attachment_warning_if_needed(@reply) render_attachment_warning_if_needed(@reply)

@ -253,13 +253,13 @@ class StudentWorkController < ApplicationController
#是不是当前课程的成员 #是不是当前课程的成员
#当前课程成员才可以看到作品列表 #当前课程成员才可以看到作品列表
def member_of_course def member_of_course
render_403 unless User.current.member_of_course? @course render_403 unless User.current.member_of_course? @course || User.current.admin?
end end
#判断是不是当前作品的提交者 #判断是不是当前作品的提交者
#提交者 && (非匿评作业 || 未开启匿评) 可以编辑作品 #提交者 && (非匿评作业 || 未开启匿评) 可以编辑作品
def author_of_work def author_of_work
render_403 unless User.current.id == @work.user_id && (@homework.homework_type != 1 || @homework.homework_detail_manual.comment_status == 1 ) render_403 unless (User.current.id == @work.user_id || User.current.admin?) && (@homework.homework_type != 1 || @homework.homework_detail_manual.comment_status == 1 )
end end
#根据条件过滤作业结果 #根据条件过滤作业结果

@ -3,7 +3,7 @@ module HomeworkCommonHelper
#迟交扣分下拉框 #迟交扣分下拉框
def late_penalty_option def late_penalty_option
type = [] type = []
for i in (1..5) for i in (0..5)
option = [] option = []
option << i option << i
option << i option << i
@ -29,7 +29,7 @@ module HomeworkCommonHelper
#缺评扣分 #缺评扣分
def absence_penalty_option def absence_penalty_option
type = [] type = []
i = 1 i = 0
while i <= 5 while i <= 5
option = [] option = []
option << i option << i

@ -0,0 +1,3 @@
class ActivityNotify < ActiveRecord::Base
belongs_to :activity, polymorphic: true
end

@ -72,7 +72,7 @@ class Attachment < ActiveRecord::Base
@@thumbnails_storage_path = File.join(Rails.root, "tmp", "thumbnails") @@thumbnails_storage_path = File.join(Rails.root, "tmp", "thumbnails")
before_save :files_to_final_location before_save :files_to_final_location
after_create :be_user_score ,:act_as_forge_activity# user_score after_create :office_conver, :be_user_score ,:act_as_forge_activity# user_score
after_update :be_user_score after_update :be_user_score
after_destroy :delete_from_disk,:down_user_score after_destroy :delete_from_disk,:down_user_score
@ -258,6 +258,15 @@ class Attachment < ActiveRecord::Base
filename filename
end end
def office_conver
saved_path = File.join(Rails.root, "files", "convered_office")
unless Dir.exist?(saved_path)
Dir.mkdir(saved_path)
end
convered_file = File.join(saved_path, self.disk_filename + ".html")
OfficeConverTask.new.conver(self.diskfile, convered_file)
end
# Copies the temporary file to its final location # Copies the temporary file to its final location
# and computes its MD5 hash # and computes its MD5 hash
def files_to_final_location def files_to_final_location

@ -34,6 +34,8 @@ class Message < ActiveRecord::Base
has_many :forge_acts, :class_name => 'ForgeActivity',:as =>:forge_act ,:dependent => :destroy has_many :forge_acts, :class_name => 'ForgeActivity',:as =>:forge_act ,:dependent => :destroy
# end # end
has_many :ActivityNotifies,:as => :activity, :dependent => :destroy
acts_as_searchable :columns => ['subject', 'content'], acts_as_searchable :columns => ['subject', 'content'],
:include => {:board => :project}, :include => {:board => :project},
:project_key => "#{Board.table_name}.project_id", :project_key => "#{Board.table_name}.project_id",
@ -148,6 +150,19 @@ class Message < ActiveRecord::Base
usr && usr.logged? && (usr.allowed_to?(:delete_messages, project) || (self.author == usr && usr.allowed_to?(:delete_own_messages, project))) usr && usr.logged? && (usr.allowed_to?(:delete_messages, project) || (self.author == usr && usr.allowed_to?(:delete_own_messages, project)))
end end
def set_notify_id(notify_id)
@notify_id= notify_id
end
def get_notify_id()
return @notify_id
end
def set_notify_is_read(notify_is_read)
@notify_is_read = notify_is_read
end
def get_notify_is_read()
return @notify_is_read
end
private private
def add_author_as_watcher def add_author_as_watcher
@ -218,4 +233,5 @@ class Message < ActiveRecord::Base
def delete_kindeditor_assets def delete_kindeditor_assets
delete_kindeditor_assets_from_disk self.id,OwnerTypeHelper::MESSAGE delete_kindeditor_assets_from_disk self.id,OwnerTypeHelper::MESSAGE
end end
end end

@ -0,0 +1,12 @@
#coding=utf-8
#
class OfficeConverTask
def conver(source_file, saved_file)
office = Trustie::Utils::Office.new(source_file)
if office.conver(saved_file)
Rails.logger.info "process ok: #{saved_file} "
end
end
handle_asynchronously :conver,:queue => 'office_conver'
end

@ -0,0 +1 @@
<%= @result == false ? 'false' : 'true' %>

@ -1,26 +1,30 @@
var attachment_html_obj = $('#attachments_<%= j params[:attachment_id] %>'); <% if @is_destroy%>
//modify by yutao 2015-5-14 当1个页面存在多个上传控件时此块代码存在bug 故改之 start $("#attachment_<%= @attachment.id%>").remove();
var containerid=$('.remove-upload',attachment_html_obj).data('containerid'); <%else%>
if(containerid==undefined){ var attachment_html_obj = $('#attachments_<%= j params[:attachment_id] %>');
$('#attachments_<%= j params[:attachment_id] %>').remove(); //modify by yutao 2015-5-14 当1个页面存在多个上传控件时此块代码存在bug 故改之 start
var count=$('#attachments_fields>span').length; var containerid=$('.remove-upload',attachment_html_obj).data('containerid');
if(count<=0){ if(containerid==undefined){
$("#upload_file_count").text('<%= l(:label_no_file_uploaded)%>'); $('#attachments_<%= j params[:attachment_id] %>').remove();
$(".remove_all").remove(); var count=$('#attachments_fields>span').length;
if(count<=0){
$("#upload_file_count").text('<%= l(:label_no_file_uploaded)%>');
$(".remove_all").remove();
}else{
$("#upload_file_count").html("<span id=\"count\">"+count+"</span>"+"个文件"+"已上传");
}
}else{ }else{
$("#upload_file_count").html("<span id=\"count\">"+count+"</span>"+"个文件"+"已上传"); $('#attachments_<%= j params[:attachment_id] %>').remove();
var count=$('#attachments_fields'+containerid+'>span').length;
if(count<=0){
$('#upload_file_count'+containerid).text('<%= l(:label_no_file_uploaded)%>');
var remove_all_html_obj = $(".remove_all").filter(function(index){
return $(this).data('containerid')==containerid;
});
remove_all_html_obj.remove();
}else{
$('#upload_file_count'+containerid).html("<span id=\"count\">"+count+"</span>"+"个文件"+"已上传");
}
} }
}else{ //modify by yutao 2015-5-14 当1个页面存在多个上传控件时此块代码存在bug 故改之 end
$('#attachments_<%= j params[:attachment_id] %>').remove(); <% end%>
var count=$('#attachments_fields'+containerid+'>span').length;
if(count<=0){
$('#upload_file_count'+containerid).text('<%= l(:label_no_file_uploaded)%>');
var remove_all_html_obj = $(".remove_all").filter(function(index){
return $(this).data('containerid')==containerid;
});
remove_all_html_obj.remove();
}else{
$('#upload_file_count'+containerid).html("<span id=\"count\">"+count+"</span>"+"个文件"+"已上传");
}
}
//modify by yutao 2015-5-14 当1个页面存在多个上传控件时此块代码存在bug 故改之 end

@ -109,6 +109,7 @@
:html => {:nhname=>"form",:multipart => true, :id => 'message_form' + topic.id.to_s, :name=>'message-form'} do |f| %> :html => {:nhname=>"form",:multipart => true, :id => 'message_form' + topic.id.to_s, :name=>'message-form'} do |f| %>
<%= render :partial => 'form_project', :locals => {:f => f, :replying => true} %> <%= render :partial => 'form_project', :locals => {:f => f, :replying => true} %>
<input name="parent_topic" type="hidden" value=""/>
<div class="fl" style="padding-top:5px;" nhname="toolbar_container"></div> <div class="fl" style="padding-top:5px;" nhname="toolbar_container"></div>
<div style="padding-top:5px;" class="fr"> <div style="padding-top:5px;" class="fr">
<a href="javascript:void(0)" nhname="cancelbtn" class="grey_btn fr ml10" style=""><%= l(:button_cancel)%></a> <a href="javascript:void(0)" nhname="cancelbtn" class="grey_btn fr ml10" style=""><%= l(:button_cancel)%></a>
@ -127,7 +128,7 @@
<ul> <ul>
<% replies_all.each do |message| %> <% replies_all.each do |message| %>
<% replies_all_i=replies_all_i+1 %> <% replies_all_i=replies_all_i+1 %>
<li nhname="reply_rec" style="display:<%= replies_all_i>2?'none':'' %>"> <li nhname="reply_rec" style="display:<%= replies_all_i>2?'none':'' %>" id="topic<%=message.id%>">
<%= link_to image_tag(url_to_avatar(message.author), :width => '34',:height => '34'), user_path(message.author), :class =>'Msg_pic' %> <%= link_to image_tag(url_to_avatar(message.author), :width => '34',:height => '34'), user_path(message.author), :class =>'Msg_pic' %>
<div class="Msg_txt"> <div class="Msg_txt">
<%= link_to_user_header message.author,false,:class => 'fl c_orange ' %> <%= link_to_user_header message.author,false,:class => 'fl c_orange ' %>
@ -151,6 +152,7 @@
:nhname =>'showbtn_child_reply', :nhname =>'showbtn_child_reply',
:class => ' c_dblue fr', :class => ' c_dblue fr',
:style => 'margin-right: 10px;', :style => 'margin-right: 10px;',
'data-topic-id' =>message.id,
:title => l(:button_reply)) if !topic.locked? && authorize_for('messages', 'reply') %> :title => l(:button_reply)) if !topic.locked? && authorize_for('messages', 'reply') %>
</div> </div>
<div class="cl"></div> <div class="cl"></div>
@ -172,7 +174,8 @@
<p class="nodata"><%= l(:label_no_data) %></p> <p class="nodata"><%= l(:label_no_data) %></p>
<% end %> <% end %>
<ul class="wlist"> <ul class="wlist">
<%= pagination_links_full @obj_pages, @obj_count, :per_page_links => false, :remote => false, :flag => true%> <%#= pagination_links_full @obj_pages, @obj_count, :per_page_links => false, :remote => false, :flag => true%>
<%= pagination_links_full @topic_pages, @topic_count, :per_page_links => false, :remote => false, :flag => true %>
</ul> </ul>
<%# other_formats_links do |f| %> <%# other_formats_links do |f| %>
<%#= f.link_to 'Atom', :url => {:key => User.current.rss_key} %> <%#= f.link_to 'Atom', :url => {:key => User.current.rss_key} %>
@ -255,6 +258,18 @@
} }
nh_init_board(params); nh_init_board(params);
}); });
<% if( @params[:topic_id]!=nil && @params[:topic_id]!='' && @params[:page]==nil ) %>
var nh_dw_html = $("#topic<%=@params[:topic_id]%>");
if(nh_dw_html!=undefined && nh_dw_html.length!=0){
if(nh_dw_html.is(':hidden')){
$("a[nhname='reply_ex_btn']",nh_dw_html.parent('ul').parent('div').parent('div')).click();
}
$("#nhjump").attr('href','#'+nh_dw_html.attr('id'));
$("#nhjump")[0].click();
}
<% end %>
<% if(!@flag.nil? && @flag=='true') %> <% if(!@flag.nil? && @flag=='true') %>
if($("#new_topic_btn")!=undefined)$("#new_topic_btn").click(); if($("#new_topic_btn")!=undefined)$("#new_topic_btn").click();
<% end %> <% end %>

@ -1,11 +1,11 @@
<style> <style type="text/css">
.ke-toolbar{display:none;width:400px;border:none;background:none;padding:0px 0px;} div.ke-toolbar{display:none;width:400px;border:none;background:none;padding:0px 0px;}
.ke-toolbar-icon{line-height:26px;font-size:14px;padding-left:26px;} span.ke-toolbar-icon{line-height:26px;font-size:14px;padding-left:26px;}
.ke-toolbar-icon-url{background-image:url( '/images/public_icon.png' )} span.ke-toolbar-icon-url{background-image:url( /images/public_icon.png )}
.ke-toolbar .ke-outline{padding:0px 0px;line-height:26px;font-size:14px;} div.ke-toolbar .ke-outline{padding:0px 0px;line-height:26px;font-size:14px;}
.ke-icon-emoticons{background-position:0px -671px;width:50px;height:26px;} span.ke-icon-emoticons{background-position:0px -671px;width:50px;height:26px;}
.ke-icon-emoticons:hover{background-position:-79px -671px;width:50px;height:26px;} span.ke-icon-emoticons:hover{background-position:-79px -671px;width:50px;height:26px;}
.ke-toolbar .ke-outline{border:none;} div.ke-toolbar .ke-outline{border:none;}
.break_word {width:100%;} .break_word {width:100%;}
</style> </style>
<script type="text/javascript"> <script type="text/javascript">
@ -13,7 +13,9 @@
var menuids=["TopUserNav"] //Enter id(s) of SuckerTree UL menus, separated by commas var menuids=["TopUserNav"] //Enter id(s) of SuckerTree UL menus, separated by commas
function buildsubmenus(){ function buildsubmenus(){
for (var i=0; i<menuids.length; i++){ for (var i=0; i<menuids.length; i++){
var ultags=document.getElementById(menuids[i]).getElementsByTagName("ul") var div = document.getElementById(menuids[i]);
if(div == undefined)continue;
var ultags=div.getElementsByTagName("ul")
for (var t=0; t<ultags.length; t++){ for (var t=0; t<ultags.length; t++){
ultags[t].parentNode.getElementsByTagName("a")[0].className="subfolderstyle" ultags[t].parentNode.getElementsByTagName("a")[0].className="subfolderstyle"
ultags[t].parentNode.onmouseover=function(){ ultags[t].parentNode.onmouseover=function(){
@ -201,6 +203,8 @@ function nh_init_board(params){
params.cancelbtn.click(); params.cancelbtn.click();
} }
} }
var parent_topic_id = $(this).data('topic-id');
if(parent_topic_id!=undefined)$("input[name='parent_topic']",params.form).val(parent_topic_id);
var ref_str = params.get_ref_str_call($(this)); var ref_str = params.get_ref_str_call($(this));
params.quote_show.html(ref_str); params.quote_show.html(ref_str);
params.quote_input.html(ref_str); params.quote_input.html(ref_str);

@ -1,24 +1,5 @@
<style> <style>
table,tr,td{border:0; cellspacing:0; cellpadding:0;}
ul,li{ list-style-type:none}
.cl{ clear:both; overflow:hidden; }
a{ text-decoration:none; text-align:center; }
a:hover{ text-decoration:underline;}
/**** 常用***/
.f_l{ float:left;}
.f_r{ float:right;}
.b_lblue{ background:#64bdd9;}
.b_dblue{ background:#55a1b9; cursor:pointer;}
.f_b{ font-weight: bold;}
.c_blue{ color:#64bdd9;}
.c_grey{ color:#999999;}
.c_grey02{ color:#666666;} .c_grey02{ color:#666666;}
.f_14{ font-size:14px;}
.c_dblue{ color:#3e6d8e;}
.w90{width:90px;}
.ml10{margin-left:10px;}
.ml5{margin-left:5px;}
.b_grey{ background:#a3a3a3;}
.c_blue02{ color:#15bcce; font-weight: bold;} .c_blue02{ color:#15bcce; font-weight: bold;}
.w280{ display:block; width:280px;float:left;} .w280{ display:block; width:280px;float:left;}
.w70{ display:block;width:70px; text-align:center; float:left;} .w70{ display:block;width:70px; text-align:center; float:left;}
@ -26,9 +7,6 @@
.c_blue03{ color:#0d90c4;} .c_blue03{ color:#0d90c4;}
/***弹框***/
/*#popbox_tscore{width:480px;position:absolute;z-index:100;left:50%;top:50%;margin:-215px 0 0 -300px; background:#fff; -moz-border-radius:5px; -webkit-border-radius:5px; border-radius:5px; box-shadow:0px 0px 8px #194a81; overflow:auto;}*/
/*.alert .close02{width:26px;height:26px;overflow:hidden;position:absolute;top:-10px;right:-490px;background:url(images/close.png) no-repeat;cursor:pointer;}*/
.tscore_con h2{ display:block; background:#eaeaea; font-size:14px; color:#343333; height:31px; width: auto; text-align: center; padding-top:5px;} .tscore_con h2{ display:block; background:#eaeaea; font-size:14px; color:#343333; height:31px; width: auto; text-align: center; padding-top:5px;}
.tscore_box{ width:350px; margin:15px auto;} .tscore_box{ width:350px; margin:15px auto;}
.tscore_box li{ height:25px;} .tscore_box li{ height:25px;}
@ -40,11 +18,16 @@
<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_homework_score[0].each do |homework_score| %> <% @member_score.student_homework_score[0].each do |homework_score| %>
<li>
<li><span class="c_grey02 w280"><%= homework_score.name %></span><span class="c_red w70"><%= format("%0.2f",homework_score[:score].nil? ? 0 : homework_score[:score]) %></span></li> <span class="c_grey02 w280">
<%= homework_score.name %>
</span>
<span class="c_red w70">
<%= format("%0.2f",homework_score[:score].nil? ? 0 : homework_score[:score]) %>
</span>
</li>
<% end %> <% end %>
<li><span class="c_blue03 w280">作业积分(总得分)</span><span class="c_red w70"><%= @member_score.student_homework_score[1] %></span></li> <li><span class="c_blue03 w280">作业积分(总得分)</span><span class="c_red w70"><%= @member_score.student_homework_score[1] %></span></li>
</ul> </ul>
</div> </div>

@ -1,11 +1,22 @@
<div class="project_r_h"> <div class="project_r_h">
<h2 class="project_h2"><%= l(:label_activity)%></h2> <% if @controller_name=='ActivityNotifys' %>
<a class="fl about_me" href="<%=course_path(@course)%>"><%= l(:label_activity)%></a>
<h2 class="fl project_h2">与我相关</h2>
<div class="fr mt10 mr5 c_grey02">
<label class="mr5" style="cursor:pointer;" data-href="<%= course_activity_notifys_path(@course) %>/chang_read_flag" nhname='nh_act_link_all'>全部标为已读</label>
</div>
<% else %>
<h2 class="fl project_h2"><%= l(:label_activity)%></h2>
<% if User.current.logged? %>
<a class="fl about_me" href="<%=course_activity_notifys_path(@course)%>">与我相关</a>
<% end %>
<% end %>
</div> </div>
<% if @events_by_day != nil && @events_by_day.size >0 %> <% if @events_by_day != nil && @events_by_day.size >0 %>
<% @events_by_day.keys.sort.reverse.each do |day| %> <% @events_by_day.keys.sort.reverse.each do |day| %>
<% sort_activity_events(@events_by_day[day]).each do |e, in_group| -%> <% sort_activity_events(@events_by_day[day]).each do |e, in_group| -%>
<div class="problem_main"> <div class="problem_main" nhname="container">
<a class="problem_pic fl"> <a class="problem_pic fl">
<%= image_tag(url_to_avatar(e.event_author), :width => "42", :height => "42") %> <%= image_tag(url_to_avatar(e.event_author), :width => "42", :height => "42") %>
</a> </a>
@ -14,8 +25,19 @@
<%= link_to_user_header("(#{e.event_author})", @canShowRealName,:class => 'problem_name c_orange fl') if @canShowRealName && e.respond_to?(:event_author) %> <%= link_to_user_header("(#{e.event_author})", @canShowRealName,:class => 'problem_name c_orange fl') if @canShowRealName && e.respond_to?(:event_author) %>
<span class="fl"> &nbsp;</span> <span class="fl"> &nbsp;</span>
<span class="fl"> <%= l(:label_new_activity) %></span> <span class="fl"> <%= l(:label_new_activity) %></span>
<%= link_to "#{eventToLanguageCourse(e.event_type, @course)} "<< format_activity_title(e.event_title), (e.event_type.eql?("attachment")&&e.container.kind_of?(Course)) ? course_files_path(e.container) : <%
(e.event_type.eql?("bid") ? homework_course_path(@course) : (e.event_type.eql?("message") || e.event_type.eql?("reply") ? course_boards_path(@course,:topic_id => e.id) : e.event_url)),:class => "problem_tit c_dblue fl fb"%> link = (e.event_type.eql?("attachment")&&e.container.kind_of?(Course)) ? course_files_path(e.container) :
(e.event_type.eql?("bid") ? homework_course_path(@course) :
(e.event_type.eql?("message") || e.event_type.eql?("reply") ?
course_boards_path(@course,:topic_id => e.id,:parent_id=>(e.parent_id ? e.parent_id : e.id)) : e.event_url))
%>
<%= link_to "#{eventToLanguageCourse(e.event_type, @course)} "<< format_activity_title(e.event_title), link,
:class => "problem_tit c_dblue fl fb",'data-type'=>e.event_type,
'data-notify-id'=>(e.respond_to?('get_notify_id') ? e.get_notify_id : ''),:nhname=>"nh_act_link",
'data-href'=>(course_activity_notifys_path(@course)+"/chang_read_flag?an_id="+(e.respond_to?('get_notify_id') ? e.get_notify_id : '').to_s)%>
<%if @controller_name=='ActivityNotifys' && !e.get_notify_is_read%>
<span nhname="nh_act_flag" class="ml10 fl"><img src="/images/new.png" width="35" height="15"/></span>
<%end%>
<br /> <br />
<p class="mt5 break_word"><%= e.event_description.html_safe %> <p class="mt5 break_word"><%= e.event_description.html_safe %>
<br /> <br />
@ -28,7 +50,7 @@
<% end%> <% end%>
<% end%> <% end%>
<% end%> <% end%>
<% if @obj_pages.next_page.nil? %> <% if @obj_pages.next_page.nil? && @controller_name!='ActivityNotifys' %>
<div class="problem_main"> <div class="problem_main">
<a class="problem_pic fl"> <a class="problem_pic fl">
<%= image_tag(url_to_avatar(@user), :width => "42", :height => "42") %> <%= image_tag(url_to_avatar(@user), :width => "42", :height => "42") %>
@ -51,3 +73,35 @@
<%= pagination_links_full @obj_pages, @obj_count, :per_page_links => false, :remote => false, :flag => true%> <%= pagination_links_full @obj_pages, @obj_count, :per_page_links => false, :remote => false, :flag => true%>
</ul> </ul>
<div class="cl"></div> <div class="cl"></div>
<script type="text/javascript">
$(function(){
$("div[nhname='container']").each(function(){
var container = $(this);
var btn = $("a[nhname='nh_act_link']",container);
if(btn.data('notify-id')>0){
btn.attr('target','_blank');
btn.click(function(){
var flag = $("span[nhname='nh_act_flag']",container);
if(flag!=undefined){
var url = $(this).data('href');
$.ajax({url:url,dataType:'text',success:function(data){
if(data == 'true'){
flag.remove();
}
}});
}
return true;
});
}
});
$("label[nhname='nh_act_link_all']").click(function(){
var url = $(this).data('href');
$.ajax({url:url,dataType:'text',success:function(data){
if(data == 'true'){
$("span[nhname='nh_act_flag']").remove();
}
}});
});
});
</script>

@ -6,8 +6,8 @@ $('#ajax-modal').html('<%= escape_javascript(render :partial => 'courses/show_me
showModal('ajax-modal', '400px'); showModal('ajax-modal', '400px');
//$('#ajax-modal').css('height','569px'); //$('#ajax-modal').css('height','569px');
$('#ajax-modal').siblings().remove(); $('#ajax-modal').siblings().remove();
$('#ajax-modal').before("<span style='float: right;cursor:pointer;padding-left: 513px;'>" + $('#ajax-modal').before("<span>" +
"<a href='javascript:void(0)' onclick='hidden_homework_score_form();'><img src='/images/bid/close.png' width='26px' height='26px' style='margin-left: -30px;' /></a></span>"); "<a href='javascript:void(0)' onclick='hidden_homework_score_form();'><img src='/images/bid/close.png' width='26px' height='26px' style='margin-left: 375px;' /></a></span>");
//$('#ajax-modal').parent().removeClass(); //$('#ajax-modal').parent().removeClass();
$('#ajax-modal').parent().css("top","30%").css("left","40%").css("position","fixed"); $('#ajax-modal').parent().css("top","30%").css("left","40%").css("position","fixed");
$('#ajax-modal').parent().addClass("new-watcher"); $('#ajax-modal').parent().addClass("new-watcher");

@ -44,7 +44,7 @@
<% end %> <% end %>
</div> </div>
<div class="cl"></div> <div class="cl"></div>
<div class=""> <div class="mt5">
<p class="f_l mb5 c_grey02">文件大小:<%= number_to_human_size(file.filesize) %></p> <p class="f_l mb5 c_grey02">文件大小:<%= number_to_human_size(file.filesize) %></p>
<%= link_to( l(:button_delete), attachment_path(file), <%= link_to( l(:button_delete), attachment_path(file),
:data => {:confirm => l(:text_are_you_sure)}, :method => :delete,:class => "f_r re_de") if delete_allowed && file.container_id == @course.id && file.container_type == "Course"%> :data => {:confirm => l(:text_are_you_sure)}, :method => :delete,:class => "f_r re_de") if delete_allowed && file.container_id == @course.id && file.container_type == "Course"%>

@ -33,7 +33,7 @@
<%= calendar_for('homework_end_time')%> <%= calendar_for('homework_end_time')%>
<div class="cl"></div> <div class="cl"></div>
</li> </li>
<li class="fl ml100"> <li class="fl ml100" style="display: none;">
<label class="label02">&nbsp;发布日期:&nbsp;</label> <label class="label02">&nbsp;发布日期:&nbsp;</label>
<input type="text" name="homework_common[publish_time]" id="homework_publish_time" class="hwork_input02 fl" readonly="readonly" value="<%= homework.publish_time%>" > <input type="text" name="homework_common[publish_time]" id="homework_publish_time" class="hwork_input02 fl" readonly="readonly" value="<%= homework.publish_time%>" >
<%= calendar_for('homework_publish_time')%> <%= calendar_for('homework_publish_time')%>
@ -45,7 +45,7 @@
<p class="fl ml20 f14 mb10 c_orange">基本规则设置总分为100分</p> <p class="fl ml20 f14 mb10 c_orange">基本规则设置总分为100分</p>
<div class="cl"></div> <div class="cl"></div>
<ul class="ml10"> <ul class="ml10">
<li> <li style="display: none;">
<label class="label02">迟交扣分:&nbsp;</label> <label class="label02">迟交扣分:&nbsp;</label>
<%= select_tag :late_penalty,options_for_select(late_penalty_option,homework.late_penalty), {:class => "fl mb10 h26 w70"} %> <%= select_tag :late_penalty,options_for_select(late_penalty_option,homework.late_penalty), {:class => "fl mb10 h26 w70"} %>
<span class="fl mt5">&nbsp;分</span> <span class="fl mt5">&nbsp;分</span>
@ -78,13 +78,13 @@
<p class="fl ml20 f14 mb10 c_orange">学生互评设置</p> <p class="fl ml20 f14 mb10 c_orange">学生互评设置</p>
<div class="cl"></div> <div class="cl"></div>
<ul class="ml10"> <ul class="ml10">
<li > <li style="display: none;">
<label class="label02">互评启动时间:&nbsp;</label> <label class="label02">互评启动时间:&nbsp;</label>
<input type="text" name="evaluation_start" id="evaluation_start_time" class="hwork_input02 fl" readonly="readonly" value="<%= homework.homework_detail_manual.evaluation_start%>" > <input type="text" name="evaluation_start" id="evaluation_start_time" class="hwork_input02 fl" readonly="readonly" value="<%= homework.homework_detail_manual.evaluation_start%>" >
<%= calendar_for('evaluation_start_time')%> <%= calendar_for('evaluation_start_time')%>
<div class="cl"></div> <div class="cl"></div>
</li> </li>
<li > <li style="display: none;">
<label class="label02">互评结束时间:&nbsp;</label> <label class="label02">互评结束时间:&nbsp;</label>
<input type="text" name="evaluation_end" id="evaluation_end_time" class="hwork_input02 fl" readonly="readonly" value="<%= homework.homework_detail_manual.evaluation_end%>" > <input type="text" name="evaluation_end" id="evaluation_end_time" class="hwork_input02 fl" readonly="readonly" value="<%= homework.homework_detail_manual.evaluation_end%>" >
<%= calendar_for('evaluation_end_time')%> <%= calendar_for('evaluation_end_time')%>
@ -97,7 +97,7 @@
<div class="cl"></div> <div class="cl"></div>
</li> </li>
<li > <li style="display: none;">
<label class="label02">缺评扣分:&nbsp;</label> <label class="label02">缺评扣分:&nbsp;</label>
<%= select_tag :absence_penalty,options_for_select(absence_penalty_option,homework.homework_detail_manual.absence_penalty), {:class => "fl mb10 h26 w70"} %> <%= select_tag :absence_penalty,options_for_select(absence_penalty_option,homework.homework_detail_manual.absence_penalty), {:class => "fl mb10 h26 w70"} %>
<span class="fl mt5">&nbsp;分</span> <span class="fl mt5">&nbsp;分</span>

@ -18,15 +18,15 @@
<% if User.current.logged? -%> <% if User.current.logged? -%>
<li id="current_user_li"> <li id="current_user_li">
<%= link_to "#{User.current.login}<span class='pic_triangle'></span>".html_safe, {:controller=> 'users', :action => 'show', id: User.current.id, host: Setting.host_user}, :class => "uses_name"%> <%= link_to "#{User.current.login}<span class='pic_triangle'></span>".html_safe, {:controller=> 'users', :action => 'show', id: User.current.id, host: Setting.host_user}, target:"_blank", :class => "uses_name"%>
<ul id="user_sub_menu" style="right: 0px;display: none;"> <ul id="user_sub_menu" style="right: 0px;display: none;">
<% unless User.current.projects.empty? %> <% unless User.current.projects.empty? %>
<li id="my_projects_li"> <li id="my_projects_li">
<%= link_to l(:label_my_projects), {:controller => 'users', :action => 'user_projects', id: User.current.id, host: Setting.host_name}, :class => "parent" %> <%= link_to l(:label_my_projects), {:controller => 'users', :action => 'user_projects', id: User.current.id, host: Setting.host_name},target:"_blank", :class => "parent" %>
<ul id="my_projects_ul"> <ul id="my_projects_ul" >
<% User.current.projects.each do |project| %> <% User.current.projects.each do |project| %>
<li title="<%=project.name%>"> <li title="<%=project.name%>">
<%= link_to project.name, {:controller => 'projects', :action => 'show',id: project.id, host: Setting.host_name } %> <%= link_to project.name, {:controller => 'projects', :action => 'show',id: project.id, host: Setting.host_name }, target:"_blank" %>
</li> </li>
<% end %> <% end %>
</ul> </ul>
@ -37,11 +37,11 @@
<% user_course = get_user_course User.current%> <% user_course = get_user_course User.current%>
<% unless user_course.empty? %> <% unless user_course.empty? %>
<li id="my_courses_li"> <li id="my_courses_li">
<%=link_to l(:label_my_course), {:controller => 'users', :action => 'user_courses', id: User.current.id}, :class => "parent" %> <%=link_to l(:label_my_course), {:controller => 'users', :action => 'user_courses', id: User.current.id},target:"_blank", :class => "parent" %>
<ul id="my_courses_ul"> <ul id="my_courses_ul">
<% user_course.each do |course| %> <% user_course.each do |course| %>
<li title="<%=course.name%>"> <li title="<%=course.name%>">
<%= link_to course.name, {:controller => 'courses',:action => 'show',:id => course.id} %> <%= link_to course.name, {:controller => 'courses',:action => 'show',:id => course.id},target:"_blank" %>
</li> </li>
<% end %> <% end %>
</ul> </ul>

@ -16,7 +16,7 @@
<%= render :partial => 'student_work/student_work_attachment_form', :locals => {:work => work,:score => score} %> <%= render :partial => 'student_work/student_work_attachment_form', :locals => {:work => work,:score => score} %>
</div> </div>
<%end%> <%end%>
<a href="javascript:void(0);" class="blue_n_btn fr" onclick="$(this).parent().parent().submit();">提交</a> <a href="javascript:void(0);" class="blue_n_btn fr evaluation_submit" onclick="$(this).parent().parent().submit();">提交</a>
<div class="cl"></div> <div class="cl"></div>
</li> </li>
<% end%> <% end%>

@ -1,22 +1,22 @@
<!-- 匿评作品列表,显示某一个作品的信息 --> <!-- 匿评作品列表,显示某一个作品的信息 -->
<ul class="hwork_ul <%= cycle("b_grey", "") %>" id="student_work_<%= student_work.id%>"> <ul class="hwork_ul <%= cycle("b_grey", "") %>" id="student_work_<%= student_work.id%>">
<% is_my_work = student_work.user == User.current%> <% is_my_work = student_work.user == User.current%>
<li style="min-height: 1px;width: 65px;"> <li class="hwork_num">
<% if is_my_work%> <% if is_my_work%>
<%= link_to student_work.user.user_extensions.nil? ? "--" : student_work.user.user_extensions.student_id,user_path(student_work.user),:class => "c_blue02 hwork_center"%> <span>
<% else%> <%= student_work.user.user_extensions.nil? ? "--" : student_work.user.user_extensions.student_id%>
<%= link_to "--", "javascript:void(0)",:class => "c_blue02 hwork_center"%> </span>
<% end%> <% end%>
</li> </li>
<li> <li class="hwork_name">
<% if is_my_work%> <% if is_my_work%>
<%= link_to student_work.user.show_name,user_path(student_work.user),:class => "c_blue02 hwork_name"%> <%= link_to student_work.user.show_name,user_path(student_work.user),:title => student_work.user.show_name %>
<% else%> <% else%>
<%= link_to "匿名","javascript:void(0)",:class => "c_blue02 hwork_name"%> <%= link_to "匿名","javascript:void(0)"%>
<% end%> <% end%>
</li> </li>
<li class=" hwork_tit_e" style="width: 440px"> <li class=" hwork_tit_e" style="width: 410px">
<%= link_to student_work.name, student_work_path(student_work),:remote => true%> <%= link_to student_work.name, student_work_path(student_work),:remote => true, :title => student_work.name, :class => "c_blue02"%>
</li> </li>
<% my_score = student_work_score(student_work,User.current) %> <% my_score = student_work_score(student_work,User.current) %>
<li class=" hwork_code <%= my_score.nil? ? 'c_grey' : 'c_red'%>"> <li class=" hwork_code <%= my_score.nil? ? 'c_grey' : 'c_red'%>">

@ -1,7 +1,7 @@
<li class="w70 "> <li class="hwork_num ">
<span href="javascript:void(0);" class="c_dark f14 fb fl ml15 ">学号</span> <span class="f14 f_b c_dark fl ">学号</span>
</li> </li>
<li class="w70"> <li class="hwork_name f14 fb c_dark">
<span class="c_dark f14 fb fl ">学生姓名</span> <span class="c_dark f14 fb fl ">学生姓名</span>
</li> </li>
<li class="hwork_tit_e"> <li class="hwork_tit_e">

@ -35,9 +35,9 @@
<% end%> <% end%>
<li > <li >
<span class="tit_fb ">内容:</span> <span class="tit_fb ">内容:</span>
<p class="show_hwork_p break_word"> <div class="show_hwork_p break_word">
<%= @work.description%> <%= textilizable @work.description%>
</p> </div>
<div class="cl"></div> <div class="cl"></div>
</li> </li>
<li > <li >
@ -54,13 +54,13 @@
<% if @is_teacher || (@homework.homework_type == 1 && @homework.homework_detail_manual.comment_status == 2 && @work.user != User.current )%> <% if @is_teacher || (@homework.homework_type == 1 && @homework.homework_detail_manual.comment_status == 2 && @work.user != User.current )%>
<!-- 老师 || 匿评作业 && 开启匿评状态 && 不是当前用户自己的作品 --> <!-- 老师 || 匿评作业 && 开启匿评状态 && 不是当前用户自己的作品 -->
<div id="add_student_score_<%= @work.id%>" class="mt10 "> <div id="add_student_score_<%= @work.id%>" class="mt10 evaluation">
<%= render :partial => 'add_score',:locals => {:work => @work,:score => @score}%> <%= render :partial => 'add_score',:locals => {:work => @work,:score => @score}%>
</div> </div>
<% end%> <% end%>
</ul> </ul>
<div class="ping_box" id="score_list_<%= @work.id%>" style="<%= @work.student_works_scores.empty? ? 'padding:0px;' : ''%>"> <div class="ping_box mt10" id="score_list_<%= @work.id%>" style="<%= @work.student_works_scores.empty? ? 'padding:0px;' : ''%>">
<%@work.student_works_scores.order("created_at desc").each do |score|%> <%@work.student_works_scores.order("created_at desc").each do |score|%>
<div id="work_score_<%= score.id%>"> <div id="work_score_<%= score.id%>">
<%= render :partial => 'student_work_score',:locals => {:score => score}%> <%= render :partial => 'student_work_score',:locals => {:score => score}%>

@ -1,21 +1,23 @@
<!-- 作品列表,显示某一个作品的信息 --> <!-- 作品列表,显示某一个作品的信息 -->
<ul class="hwork_ul <%= cycle("b_grey", "") %>" id="student_work_<%= student_work.id%>"> <ul class="hwork_ul <%= cycle("b_grey", "") %>" id="student_work_<%= student_work.id%>">
<li style="min-height: 1px;width: 65px;"> <li class="hwork_num">
<%= link_to student_work.user.user_extensions.nil? ? "--" : student_work.user.user_extensions.student_id,user_path(student_work.user),:class => "c_blue02 hwork_center"%> <span>
<%= student_work.user.user_extensions.nil? ? "--" : student_work.user.user_extensions.student_id%>
</span>
</li> </li>
<li> <li class=" hwork_name ">
<%= link_to student_work.user.show_name,user_path(student_work.user),:class => "c_blue02 hwork_name"%> <%= link_to student_work.user.show_name,user_path(student_work.user),:title => student_work.user.show_name%>
</li> </li>
<li class=" hwork_tit"> <li class=" hwork_tit">
<%= link_to student_work.name, student_work_path(student_work),:remote => true%> <%= link_to student_work.name, student_work_path(student_work),:remote => true,:title => student_work.name, :class => "c_blue02"%>
</li> </li>
<li class=" hwork_code <%= student_work.teacher_score.nil? ? 'c_grey' : 'c_red'%>"> <li class=" hwork_code <%= student_work.teacher_score.nil? ? 'c_grey' : 'c_red'%> mr18">
<%= student_work.teacher_score.nil? ? "--" : format("%.2f",student_work.teacher_score)%> <%= student_work.teacher_score.nil? ? "--" : format("%.2f",student_work.teacher_score)%>
</li> </li>
<li class=" hwork_code <%= student_work.teaching_asistant_score.nil? ? 'c_grey' : 'c_red'%>"> <li class=" hwork_code <%= student_work.teaching_asistant_score.nil? ? 'c_grey' : 'c_red'%> mr18">
<%= student_work.teaching_asistant_score.nil? ? "--" : format("%.2f",student_work.teaching_asistant_score)%> <%= student_work.teaching_asistant_score.nil? ? "--" : format("%.2f",student_work.teaching_asistant_score)%>
</li> </li>
<li class=" hwork_code02 <%= student_work.student_score.nil? ? 'c_grey' : 'c_red'%> student_score_info"> <li class=" hwork_code02 <%= student_work.student_score.nil? ? 'c_grey' : 'c_red'%> mr18 student_score_info" >
<%= student_work.student_score.nil? ? "--" : format("%.2f",student_work.student_score)%> <%= student_work.student_score.nil? ? "--" : format("%.2f",student_work.student_score)%>
<% unless student_work.student_score.nil?%> <% unless student_work.student_score.nil?%>
<span class="c_blue"> <span class="c_blue">
@ -29,7 +31,7 @@
</div> </div>
<% end%> <% end%>
</li> </li>
<li class=" hwork_code02 <%= student_work.final_score.nil? ? 'c_grey' : 'c_red'%>"> <li class=" hwork_code <%= student_work.final_score.nil? ? 'c_grey' : 'c_red'%>">
<%= student_work.final_score.nil? ? "--" : format("%.2f",student_work.final_score)%> <%= student_work.final_score.nil? ? "--" : format("%.2f",student_work.final_score)%>
</li> </li>
<div class="cl"></div> <div class="cl"></div>

@ -1,32 +1,32 @@
<li class="w70 "> <li class="hwork_num ">
<span href="javascript:void(0);" class="c_dark f14 fb fl ">学号</span> <a href="javascript:void(0);" class=" f14 f_b c_dark fl" >学号</a>
</li> </li>
<li class="w70"> <li class=" hwork_name f14 fb c_dark">
<span class="c_dark f14 fb fl ">学生姓名</span> 学生姓名
</li> </li>
<li class="hwork_tit"> <li class="hwork_tit">
<span class="c_dark f14 fb fl">作品名称</span> <span class="c_dark f14 fb fl">作品名称</span>
</li> </li>
<li class="w70 mr5" > <li class="mr5 w70">
<%= link_to "教师评分",@show_all ? student_work_index_path(:homework => @homework.id,:order => "teacher_score", :sort => @score, :name => @name) : "javascript:void(0)",:class => "c_dark f14 fb fl"%> <%= link_to "教师评分",@show_all ? student_work_index_path(:homework => @homework.id,:order => "teacher_score", :sort => @score, :name => @name) : "javascript:void(0)",:class => "f14 f_b c_dark fl hwork_code"%>
<% if @show_all && @order == "teacher_score"%> <% if @show_all && @order == "teacher_score"%>
<a href="javascript:void(0);" class="<%= @score == 'desc' ? 'st_up' : 'st_down'%>" ></a> <a href="javascript:void(0);" class="<%= @score == 'desc' ? 'st_up' : 'st_down'%>" ></a>
<% end%> <% end%>
</li> </li>
<li class="w70 mr5"> <li class="mr5 w70">
<%= link_to "教辅评分",@show_all ? student_work_index_path(:homework => @homework.id,:order => "teaching_asistant_score", :sort => @score, :name => @name) : "javascript:void(0)",:class => "c_dark f14 fb fl"%> <%= link_to "教辅评分",@show_all ? student_work_index_path(:homework => @homework.id,:order => "teaching_asistant_score", :sort => @score, :name => @name) : "javascript:void(0)",:class => "f14 f_b c_dark fl hwork_code"%>
<% if @show_all && @order == "teaching_asistant_score"%> <% if @show_all && @order == "teaching_asistant_score"%>
<a href="javascript:void(0);" class="<%= @score == 'desc' ? 'st_up' : 'st_down'%>" ></a> <a href="javascript:void(0);" class="<%= @score == 'desc' ? 'st_up' : 'st_down'%>" ></a>
<% end%> <% end%>
</li> </li>
<li class="w60 mr5 ml10"> <li class="mr5 ml15 w40">
<%= link_to "匿评",@show_all ? student_work_index_path(:homework => @homework.id,:order => "student_score", :sort => @score, :name => @name) : "javascript:void(0)",:class => "c_dark f14 fb fl"%> <%= link_to "匿评",@show_all ? student_work_index_path(:homework => @homework.id,:order => "student_score", :sort => @score, :name => @name) : "javascript:void(0)",:class => "f14 f_b c_dark fl"%>
<% if @show_all && @order == "student_score"%> <% if @show_all && @order == "student_score"%>
<a href="javascript:void(0);" class="<%= @score == 'desc' ? 'st_up' : 'st_down'%>" ></a> <a href="javascript:void(0);" class="<%= @score == 'desc' ? 'st_up' : 'st_down'%>" ></a>
<% end%> <% end%>
</li> </li>
<li class="w40 ml10" id="final_sort"> <li class="ml30">
<%= link_to "成绩",@show_all ? student_work_index_path(:homework => @homework.id,:order => "final_score", :sort => @score, :name => @name) : "javascript:void(0)",:class => "c_dark f14 fb fl"%> <%= link_to "成绩",@show_all ? student_work_index_path(:homework => @homework.id,:order => "final_score", :sort => @score, :name => @name) : "javascript:void(0)",:class => "f14 f_b c_dark fl"%>
<% if @show_all && @order == "final_score"%> <% if @show_all && @order == "final_score"%>
<a href="javascript:void(0);" class="<%= @score == 'desc' ? 'st_up' : 'st_down'%>" ></a> <a href="javascript:void(0);" class="<%= @score == 'desc' ? 'st_up' : 'st_down'%>" ></a>
<% end%> <% end%>

@ -1,5 +1,8 @@
<% for attachment in attachments %> <% attachments.each_with_index do |attachment,i| %>
<%= link_to_short_attachment attachment, :class => 'link_file', :download => true -%> <div id="attachment_<%= attachment.id%>">
<span class="ml5">(<%= number_to_human_size attachment.filesize %>)</span> <%= link_to_short_attachment attachment, :class => 'link_file', :download => true -%>
<div class="cl"></div> <%= link_to('&nbsp;'.html_safe, attachment_path(attachment, :format => 'js'), :method => 'delete', :remote => true, :title => '删除', :class => 'remove-upload', :confirm => l(:text_are_you_sure)) if attachment.id && User.current == attachment.author %>
<span class="ml5">(<%= number_to_human_size attachment.filesize %>)</span>
<div class="cl"></div>
</div>
<% end -%> <% end -%>

@ -36,6 +36,7 @@
</span> </span>
<% 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($(this).prev(),'<%= student_work_index_path(:homework => @homework.id)%>');" href="javascript:void(0)">搜索</a>
<% end%> <% end%>
<% if @is_teacher%> <% if @is_teacher%>
<div class="fr"> <div class="fr">

@ -140,9 +140,7 @@
<%break if Time.new.strftime("%Y").to_i - year_now >= 2%> <%break if Time.new.strftime("%Y").to_i - year_now >= 2%>
<% all_new_hot_course += find_all_new_hot_course(course_count-all_new_hot_course.count, @school_id, year_now, course_term)%> <% all_new_hot_course += find_all_new_hot_course(course_count-all_new_hot_course.count, @school_id, year_now, course_term)%>
<% end%> <% end%>
<% cache all_new_hot_course.max().created_at do %> <%= render :partial => 'course_list', :locals => {:course_list => all_new_hot_course} %>
<%= render :partial => 'course_list', :locals => {:course_list => all_new_hot_course} %>
<% end %>
</ul> </ul>
</div> </div>
<% else %> <% else %>
@ -175,9 +173,7 @@
<%break if Time.new.strftime("%Y").to_i - year_now >= 2%> <%break if Time.new.strftime("%Y").to_i - year_now >= 2%>
<% all_new_hot_course += find_all_new_hot_course(9-(all_new_hot_course.count + cur_school_course.count), @school_id, year_now, course_term)%> <% all_new_hot_course += find_all_new_hot_course(9-(all_new_hot_course.count + cur_school_course.count), @school_id, year_now, course_term)%>
<% end%> <% end%>
<% cache all_new_hot_course.max().created_at do %> <%= render :partial => 'course_list', :locals => {:course_list => all_new_hot_course} %>
<%= render :partial => 'course_list', :locals => {:course_list => all_new_hot_course} %>
<% end %>
<% end %> <% end %>
</ul> </ul>
</div> </div>

@ -68,7 +68,6 @@
</div> </div>
<div style="clear:both"></div> <div style="clear:both"></div>
<% cache :expire_in => 2.hours do%>
<div id="J_Slide" class="d-p-index-box d-p-index-hot"> <div id="J_Slide" class="d-p-index-box d-p-index-hot">
<h3 style="margin-left: 5px; color: #e8770d;"><strong> <%= l(:lable_hot_projects)%> </strong></h3> <h3 style="margin-left: 5px; color: #e8770d;"><strong> <%= l(:lable_hot_projects)%> </strong></h3>
<span style="margin-top: -20px;float: right; display: block;"> <% if User.current.logged? %> <span style="margin-top: -20px;float: right; display: block;"> <% if User.current.logged? %>
@ -113,7 +112,6 @@
</ul> </ul>
</div> </div>
</div> </div>
<% end %>
<div class="right" style="float: right; width: 48%; padding-top: 8px;"> <div class="right" style="float: right; width: 48%; padding-top: 8px;">
<ul class="welcome-message-list"> <ul class="welcome-message-list">
<div class="forum-topic" style="height: 25px; width: 98%; margin-left: 2px;"> <div class="forum-topic" style="height: 25px; width: 98%; margin-left: 2px;">

@ -112,7 +112,7 @@ zh:
field_project: 项目 field_project: 项目
field_issue: 问题 field_issue: 问题
field_notes: 说明 field_notes: 内容
field_is_closed: 已关闭的问题 field_is_closed: 已关闭的问题
field_is_default: 默认值 field_is_default: 默认值

@ -710,6 +710,12 @@ RedmineApp::Application.routes.draw do
resources :news, :except => [:show, :edit, :update, :destroy] resources :news, :except => [:show, :edit, :update, :destroy]
resources :boards resources :boards
match '/homework', :to => 'courses#homework', :as => 'homework', :via => :get match '/homework', :to => 'courses#homework', :as => 'homework', :via => :get
resources :activity_notifys do
collection do
match 'chang_read_flag', :via => :get
end
end
end # end of resources :courses end # end of resources :courses
match 'courses/:id/feedback', :to => 'courses#feedback', :via => :get, :as => 'course_feedback' match 'courses/:id/feedback', :to => 'courses#feedback', :via => :get, :as => 'course_feedback'
match '/courses/search', :via => [:get, :post] match '/courses/search', :via => [:get, :post]

@ -0,0 +1,17 @@
class CreateActivityNotifies < ActiveRecord::Migration
def change
create_table :activity_notifies do |t|
t.integer :activity_container_id
t.string :activity_container_type
t.integer :activity_id
t.string :activity_type
t.integer :notify_to
t.datetime :created_on
t.integer :is_read
end
add_index "activity_notifies", ["notify_to"], :name => "index_an_notify_to"
add_index "activity_notifies", ["created_on"], :name => "index_an_created_on"
add_index "activity_notifies", ["activity_container_id","activity_container_type"], :name => "index_an_activity_container_id"
end
end

@ -11,7 +11,7 @@
# #
# It's strongly recommended to check this file into your version control system. # It's strongly recommended to check this file into your version control system.
ActiveRecord::Schema.define(:version => 20150602055730) do ActiveRecord::Schema.define(:version => 20150604153000) do
create_table "activities", :force => true do |t| create_table "activities", :force => true do |t|
t.integer "act_id", :null => false t.integer "act_id", :null => false
@ -23,6 +23,20 @@ ActiveRecord::Schema.define(:version => 20150602055730) do
add_index "activities", ["user_id", "act_type"], :name => "index_activities_on_user_id_and_act_type" add_index "activities", ["user_id", "act_type"], :name => "index_activities_on_user_id_and_act_type"
add_index "activities", ["user_id"], :name => "index_activities_on_user_id" add_index "activities", ["user_id"], :name => "index_activities_on_user_id"
create_table "activity_notifies", :force => true do |t|
t.integer "activity_container_id"
t.string "activity_container_type"
t.integer "activity_id"
t.string "activity_type"
t.integer "notify_to"
t.datetime "created_on"
t.integer "is_read"
end
add_index "activity_notifies", ["activity_container_id", "activity_container_type"], :name => "index_an_activity_container_id"
add_index "activity_notifies", ["created_on"], :name => "index_an_created_on"
add_index "activity_notifies", ["notify_to"], :name => "index_an_notify_to"
create_table "api_keys", :force => true do |t| create_table "api_keys", :force => true do |t|
t.string "access_token" t.string "access_token"
t.datetime "expires_at" t.datetime "expires_at"
@ -606,6 +620,13 @@ ActiveRecord::Schema.define(:version => 20150602055730) do
t.datetime "updated_at", :null => false t.datetime "updated_at", :null => false
end end
create_table "invite_lists", :force => true do |t|
t.integer "project_id"
t.integer "user_id"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
end
create_table "issue_categories", :force => true do |t| create_table "issue_categories", :force => true do |t|
t.integer "project_id", :default => 0, :null => false t.integer "project_id", :default => 0, :null => false
t.string "name", :limit => 30, :default => "", :null => false t.string "name", :limit => 30, :default => "", :null => false

@ -1,23 +1,19 @@
namespace :office do namespace :office do
desc "conver any files to html" desc "conver any files to html"
task :conver => :environment do task :conver => :environment do
all_count = Attachment.count
i = 0
Attachment.find_each do |a| Attachment.find_each do |a|
convered_file = File.join(Rails.root, "files", "convered_office", a.disk_filename + ".html") i += 1
unless File.exist?(convered_file) puts "process [#{i}/#{all_count}] => id #{a.id}"
if File.exist? a.diskfile saved_path = File.join(Rails.root, "files", "convered_office")
if %w(doc docx ppt pptx xls xlsx pdf).any?{|word| a.diskfile.downcase.end_with?(word)} unless Dir.exist?(saved_path)
begin Dir.mkdir(saved_path)
req = RestClient.post 'http://192.168.80.107/Any2HtmlHandler.ashx', :txtDes => File.new(a.diskfile, 'rb') end
File.new(convered_file, "ab+") do |f| convered_file = File.join(saved_path, a.disk_filename + ".html")
f.write(req.body) office = Trustie::Utils::Office.new(a.diskfile)
end if office.conver(convered_file)
rescue =>e puts "process ok: #{convered_file} "
puts e.message
end
end
else
puts "can't find file #{a.diskfile}"
end
end end
end end
end end

@ -0,0 +1,42 @@
module Trustie
module Utils
class Office
def initialize(file)
@file = file
end
def office?
%w(doc docx ppt pptx xls xlsx pdf).any?{|word| @file.downcase.end_with?(word)}
end
def conver(saved_file, force=false)
if force || !File.exist?(saved_file)
if File.exist? @file
if office?
begin
resource = RestClient::Resource.new(
'http://192.168.80.107/Any2HtmlHandler.ashx',
:timeout => -1,
:open_timeout => -1
)
req = resource.post :txtDes => File.new(@file, 'rb')
File.open(saved_file, "wb+") do |f|
f.write(req.body)
end
return true
rescue =>e
puts e.message
end
end
else
puts "can't find file #{@file}"
end
end
false
end
end
end
end

@ -260,7 +260,7 @@ K.options = {
items : [ 'emoticons', items : [ 'emoticons',
'source','plainpaste', 'wordpaste', '|', 'justifyleft', 'justifycenter', 'justifyright', 'insertorderedlist', '|', 'source','plainpaste', 'wordpaste', '|', 'justifyleft', 'justifycenter', 'justifyright', 'insertorderedlist', '|',
'formatblock', 'fontsize', '|', 'forecolor', 'hilitecolor', 'bold', 'formatblock', 'fontsize', '|', 'forecolor', 'hilitecolor', 'bold',
'italic', 'underline', 'removeformat', '|','imagedirectupload','table', 'link',"more" 'italic', 'underline', 'removeformat', '|','imagedirectupload','table', 'media',"more"
], ],
noDisableItems : ['source', 'fullscreen'], noDisableItems : ['source', 'fullscreen'],
colorTable : [ colorTable : [

@ -9,9 +9,9 @@
KindEditor.plugin('media', function(K) { KindEditor.plugin('media', function(K) {
var self = this, name = 'media', lang = self.lang(name + '.'), var self = this, name = 'media', lang = self.lang(name + '.'),
allowMediaUpload = K.undef(self.allowMediaUpload, true), allowMediaUpload = K.undef(self.allowMediaUpload, false),
allowFileManager = K.undef(self.allowFileManager, false), allowFileManager = K.undef(self.allowFileManager, false),
formatUploadUrl = K.undef(self.formatUploadUrl, true), formatUploadUrl = K.undef(self.formatUploadUrl, false),
extraParams = K.undef(self.extraFileUploadParams, {}), extraParams = K.undef(self.extraFileUploadParams, {}),
filePostName = K.undef(self.filePostName, 'imgFile'), filePostName = K.undef(self.filePostName, 'imgFile'),
uploadJson = K.undef(self.uploadJson, self.basePath + 'php/upload_json.php'); uploadJson = K.undef(self.uploadJson, self.basePath + 'php/upload_json.php');
@ -22,10 +22,8 @@ KindEditor.plugin('media', function(K) {
//url //url
'<div class="ke-dialog-row">', '<div class="ke-dialog-row">',
'<label for="keUrl" style="width:60px;">' + lang.url + '</label>', '<label for="keUrl" style="width:60px;">' + lang.url + '</label>',
'<input class="ke-input-text" type="text" id="keUrl" name="url" value="" style="width:160px;" /> &nbsp;', '<input class="ke-input-text" type="text" id="keUrl" name="url" value="" style="width:200px;" /> &nbsp;(<a href="http://www.youku.com/help/view/fid/4#q2">支持优酷的flash地址</a>)',
'<input type="button" class="ke-upload-button" value="' + lang.upload + '" /> &nbsp;',
'<span class="ke-button-common ke-button-outer">', '<span class="ke-button-common ke-button-outer">',
'<input type="button" class="ke-button-common ke-button" name="viewServer" value="' + lang.viewServer + '" />',
'</span>', '</span>',
'</div>', '</div>',
//width //width
@ -38,11 +36,6 @@ KindEditor.plugin('media', function(K) {
'<label for="keHeight" style="width:60px;">' + lang.height + '</label>', '<label for="keHeight" style="width:60px;">' + lang.height + '</label>',
'<input type="text" id="keHeight" class="ke-input-text ke-input-number" name="height" value="400" maxlength="4" />', '<input type="text" id="keHeight" class="ke-input-text ke-input-number" name="height" value="400" maxlength="4" />',
'</div>', '</div>',
//autostart
'<div class="ke-dialog-row">',
'<label for="keAutostart">' + lang.autostart + '</label>',
'<input type="checkbox" id="keAutostart" name="autostart" value="" /> ',
'</div>',
'</div>' '</div>'
].join(''); ].join('');
var dialog = self.createDialog({ var dialog = self.createDialog({
@ -72,14 +65,8 @@ KindEditor.plugin('media', function(K) {
heightBox[0].focus(); heightBox[0].focus();
return; return;
} }
var html = K.mediaImg(self.themesPath + 'common/blank.gif', {
src : url, var html = '<embed src="'+url+'" allowFullScreen="true" quality="high" width="'+width+'" height="'+height+'" align="middle" allowScriptAccess="always" type="application/x-shockwave-flash"></embed>';
type : K.mediaType(url),
width : width,
height : height,
autostart : autostartBox[0].checked ? 'true' : 'false',
loop : 'true'
});
self.insertHtml(html).hideDialog().focus(); self.insertHtml(html).hideDialog().focus();
} }
} }

@ -0,0 +1,170 @@
/*******************************************************************************
* KindEditor - WYSIWYG HTML Editor for Internet
* Copyright (C) 2006-2011 kindsoft.net
*
* @author Roddy <luolonghao@gmail.com>
* @site http://www.kindsoft.net/
* @licence http://www.kindsoft.net/license.php
*******************************************************************************/
KindEditor.plugin('media', function(K) {
var self = this, name = 'media', lang = self.lang(name + '.'),
allowMediaUpload = K.undef(self.allowMediaUpload, true),
allowFileManager = K.undef(self.allowFileManager, false),
formatUploadUrl = K.undef(self.formatUploadUrl, true),
extraParams = K.undef(self.extraFileUploadParams, {}),
filePostName = K.undef(self.filePostName, 'imgFile'),
uploadJson = K.undef(self.uploadJson, self.basePath + 'php/upload_json.php');
self.plugin.media = {
edit : function() {
var html = [
'<div style="padding:20px;">',
//url
'<div class="ke-dialog-row">',
'<label for="keUrl" style="width:60px;">' + lang.url + '</label>',
'<input class="ke-input-text" type="text" id="keUrl" name="url" value="" style="width:160px;" /> &nbsp;',
'<input type="button" class="ke-upload-button" value="' + lang.upload + '" /> &nbsp;',
'<span class="ke-button-common ke-button-outer">',
'<input type="button" class="ke-button-common ke-button" name="viewServer" value="' + lang.viewServer + '" />',
'</span>',
'</div>',
//width
'<div class="ke-dialog-row">',
'<label for="keWidth" style="width:60px;">' + lang.width + '</label>',
'<input type="text" id="keWidth" class="ke-input-text ke-input-number" name="width" value="550" maxlength="4" />',
'</div>',
//height
'<div class="ke-dialog-row">',
'<label for="keHeight" style="width:60px;">' + lang.height + '</label>',
'<input type="text" id="keHeight" class="ke-input-text ke-input-number" name="height" value="400" maxlength="4" />',
'</div>',
//autostart
'<div class="ke-dialog-row">',
'<label for="keAutostart">' + lang.autostart + '</label>',
'<input type="checkbox" id="keAutostart" name="autostart" value="" /> ',
'</div>',
'</div>'
].join('');
var dialog = self.createDialog({
name : name,
width : 450,
height : 230,
title : self.lang(name),
body : html,
yesBtn : {
name : self.lang('yes'),
click : function(e) {
var url = K.trim(urlBox.val()),
width = widthBox.val(),
height = heightBox.val();
if (url == 'http://' || K.invalidUrl(url)) {
alert(self.lang('invalidUrl'));
urlBox[0].focus();
return;
}
if (!/^\d*$/.test(width)) {
alert(self.lang('invalidWidth'));
widthBox[0].focus();
return;
}
if (!/^\d*$/.test(height)) {
alert(self.lang('invalidHeight'));
heightBox[0].focus();
return;
}
var html = K.mediaImg(self.themesPath + 'common/blank.gif', {
src : url,
type : K.mediaType(url),
width : width,
height : height,
autostart : autostartBox[0].checked ? 'true' : 'false',
loop : 'true'
});
self.insertHtml(html).hideDialog().focus();
}
}
}),
div = dialog.div,
urlBox = K('[name="url"]', div),
viewServerBtn = K('[name="viewServer"]', div),
widthBox = K('[name="width"]', div),
heightBox = K('[name="height"]', div),
autostartBox = K('[name="autostart"]', div);
urlBox.val('http://');
if (allowMediaUpload) {
var uploadbutton = K.uploadbutton({
button : K('.ke-upload-button', div)[0],
fieldName : filePostName,
extraParams : extraParams,
url : K.addParam(uploadJson, 'dir=media'),
afterUpload : function(data) {
dialog.hideLoading();
if (data.error === 0) {
var url = data.url;
if (formatUploadUrl) {
url = K.formatUrl(url, 'absolute');
}
urlBox.val(url);
if (self.afterUpload) {
self.afterUpload.call(self, url, data, name);
}
alert(self.lang('uploadSuccess'));
} else {
alert(data.message);
}
},
afterError : function(html) {
dialog.hideLoading();
self.errorDialog(html);
}
});
uploadbutton.fileBox.change(function(e) {
dialog.showLoading(self.lang('uploadLoading'));
uploadbutton.submit();
});
} else {
K('.ke-upload-button', div).hide();
}
if (allowFileManager) {
viewServerBtn.click(function(e) {
self.loadPlugin('filemanager', function() {
self.plugin.filemanagerDialog({
viewType : 'LIST',
dirName : 'media',
clickFn : function(url, title) {
if (self.dialogs.length > 1) {
K('[name="url"]', div).val(url);
if (self.afterSelectFile) {
self.afterSelectFile.call(self, url);
}
self.hideDialog();
}
}
});
});
});
} else {
viewServerBtn.hide();
}
var img = self.plugin.getSelectedMedia();
if (img) {
var attrs = K.mediaAttrs(img.attr('data-ke-tag'));
urlBox.val(attrs.src);
widthBox.val(K.removeUnit(img.css('width')) || attrs.width || 0);
heightBox.val(K.removeUnit(img.css('height')) || attrs.height || 0);
autostartBox[0].checked = (attrs.autostart === 'true');
}
urlBox[0].focus();
urlBox[0].select();
},
'delete' : function() {
self.plugin.getSelectedMedia().remove();
// [IE] 删除图片后立即点击图片按钮出错
self.addBookmark();
}
};
self.clickToolbar(name, self.plugin.media.edit);
});

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

@ -673,8 +673,7 @@ $.fn.peSlider = function(settings){
friendlyVal = input.val() + ' ' + thisUnits; friendlyVal = input.val() + ' ' + thisUnits;
slider.find('a').attr({ slider.find('a').attr({
'aria-valuenow': ui.value, 'aria-valuenow': ui.value,
'aria-valuetext': friendlyVal, 'aria-valuetext': friendlyVal
'title': friendlyVal
}); });
}) })
.find('a') .find('a')
@ -684,7 +683,6 @@ $.fn.peSlider = function(settings){
'aria-valuemax': input.attr('max'), 'aria-valuemax': input.attr('max'),
'aria-valuenow': input.val(), 'aria-valuenow': input.val(),
'aria-valuetext': friendlyVal, 'aria-valuetext': friendlyVal,
'title': friendlyVal,
'aria-labelledby': thisLabel 'aria-labelledby': thisLabel
}); });
input input
@ -795,6 +793,10 @@ function SearchByName(obj,url,event)
location.href = url + "&name=" + obj.val(); location.href = url + "&name=" + obj.val();
} }
} }
function SearchByName(obj,url)
{
location.href = url + "&name=" + obj.val();
}
$(function(){ $(function(){
$("#about_project label").eq(1).remove(); $("#about_project label").eq(1).remove();

@ -53,9 +53,9 @@ a:hover.problem_new_btn{ background:#ff7143; color:#fff;}
a.problem_pic{ display:block; width:42px; height:42px; padding:3px; border:1px solid #e3e3e3;} a.problem_pic{ display:block; width:42px; height:42px; padding:3px; border:1px solid #e3e3e3;}
a:hover.problem_pic{border:1px solid #64bdd9;} a:hover.problem_pic{border:1px solid #64bdd9;}
.problem_txt{ width:610px; margin-left:10px; color:#777777;word-break: break-all;word-wrap: break-word;} .problem_txt{ width:610px; margin-left:10px; color:#777777;word-break: break-all;word-wrap: break-word;}
a.problem_name{ color:#ff5722;} a.problem_name{ color:#ff5722;max-width:60px;overflow: hidden;white-space: nowrap;text-overflow: ellipsis;}
a:hover.problem_name{ color:#d33503;} a:hover.problem_name{ color:#d33503;}
a.problem_tit{ color:#0781b4; max-width:430px; display:block; overflow:hidden; white-space: nowrap; text-overflow:ellipsis;} a.problem_tit{ color:#0781b4; max-width:410px; display:block; overflow:hidden; white-space: nowrap; text-overflow:ellipsis;}
a:hover.problem_tit{ color:#09658c; } a:hover.problem_tit{ color:#09658c; }
.problem_main{ border-bottom:1px dashed #d4d4d4; padding-bottom:10px; margin-bottom:10px;} .problem_main{ border-bottom:1px dashed #d4d4d4; padding-bottom:10px; margin-bottom:10px;}
/****翻页***/ /****翻页***/
@ -502,9 +502,6 @@ blockquote {
} }
a.member_search_edit {width: 43px;background: #15bccf;color: #fff;text-align: center;text-decoration: none;padding: 2px;} a.member_search_edit {width: 43px;background: #15bccf;color: #fff;text-align: center;text-decoration: none;padding: 2px;}
.min_search_edit {width: 150px;height: 20px;border: 1px solid #d0d0d0 !important;color: #666;} .min_search_edit {width: 150px;height: 20px;border: 1px solid #d0d0d0 !important;color: #666;}
a.link_file{ background:url(../images/pic_file.png) 0 2px no-repeat; padding-left:20px; color:#64bdd9; }
a:hover.link_file{ background:url(../images/pic_file.png) 0 -25px no-repeat; color:#3ca5c6;}
.r_txt_tit{max-width:450px; overflow:hidden; white-space: nowrap; text-overflow:ellipsis;color:#15bccf; float:left; color:#09658c; font-size:14px;} .r_txt_tit{max-width:450px; overflow:hidden; white-space: nowrap; text-overflow:ellipsis;color:#15bccf; float:left; color:#09658c; font-size:14px;}
/*日历选择图*/ /*日历选择图*/
@ -633,14 +630,17 @@ a:hover.icon_add{background:url(images/icons.png) -20px -310px no-repeat;}
.w300{ width:300px;} .w300{ width:300px;}
.w80{ width:80px;} .w80{ width:80px;}
.t_c{ text-align:center;} .t_c{ text-align:center;}
.hwork_tit{ width:240px; float:left; }
.hwork_tit a{ width:255px; display:block; overflow:hidden; white-space: nowrap; text-overflow:ellipsis; } .hwork_tit{ width:210px; float:left; }
.hwork_tit_e{ width:440px; float:left; } .hwork_tit a{ width:205px; display:block; overflow:hidden; white-space: nowrap; text-overflow:ellipsis; }
.hwork_tit_e a{ width:455px; display:block; overflow:hidden; white-space: nowrap; text-overflow:ellipsis; } .hwork_code{ width:56px; text-align:center; }
.hwork_code{ width:60px; text-align:center; margin-right:15px;} .hwork_code02{ width:60px; text-align:center; }
.hwork_code02{ width:60px; text-align:center; margin-right:10px;} .hwork_tit_e{ width:420px; float:left; }
a.hwork_center{ display:block; width:60px; text-align:center; margin-right:5px;overflow: hidden; white-space: nowrap; text-overflow:ellipsis;} .hwork_tit_e a{ width:405px; display:block; overflow:hidden; white-space: nowrap; text-overflow:ellipsis; }
a.hwork_name{ display:block;width:65px; text-align:center; margin-right:10px;overflow: hidden;white-space: nowrap; text-overflow:ellipsis;min-height: 1px;} .hwork_num{ width:90px; display:block; overflow:hidden; white-space: nowrap; text-overflow:ellipsis;min-height: 1px;}
.mr18{ margin-right:18px;}
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;}
.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;}
@ -659,7 +659,6 @@ a:hover.ping_pic{border:1px solid #64bdd9;}
a.down_btn{ border:1px solid #CCC; color:#999; padding:0px 5px; font-size:12px; text-align:center; display:block;} a.down_btn{ border:1px solid #CCC; color:#999; padding:0px 5px; font-size:12px; text-align:center; display:block;}
a:hover.down_btn{ background:#14ad5a; color:#fff; border:1px solid #14ad5a;} a:hover.down_btn{ background:#14ad5a; color:#fff; border:1px solid #14ad5a;}
.fr{ float:right;} .fr{ float:right;}
.min_search{ width:200px; height:20px; border:1px solid #d0d0d0; color:#666; background:url(../images/public_icon.png) 185px -193px no-repeat; cursor:pointer;}
.li_min_search{ float:right; margin-right:-10px;} .li_min_search{ float:right; margin-right:-10px;}
.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;}
/*返回顶部*/ /*返回顶部*/
@ -674,8 +673,14 @@ input#score{ width:40px;}
.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;}
.evaluation{position: relative;}
.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; }
/* 与我相关 */
.new_icon{background:url(../images/new_icon.png) 0px 0px no-repeat; width:35px; height:15px; display:block;}
a.about_me{ width:80px;text-align:center;font-size:16px; color:#64bdd9; margin:10px 0 0 10px;}
a:hover.about_me{ color:#0781b4;}

@ -18,7 +18,7 @@ table{ background:#fff;}
.no_line{ border-bottom:none;} .no_line{ border-bottom:none;}
.line{border-bottom:1px dashed #d4d4d4; padding-bottom:10px; margin-bottom:10px;} .line{border-bottom:1px dashed #d4d4d4; padding-bottom:10px; margin-bottom:10px;}
.no_border{ border:none;} .no_border{ border:none;}
.min_search{ width:150px; height:20px; border:1px solid #d0d0d0; color:#666; background:url(../images/new_project/public_icon.png) 135px -193px no-repeat; cursor:pointer;} .min_search{ width:150px; height:20px; border:1px solid #d0d0d0; color:#666; background:url(../images/new_project/public_icon.png) 135px -193px no-repeat;}
/* font & color */ /* font & color */
h2{ font-size:18px; color:#15bccf;} h2{ font-size:18px; color:#15bccf;}
@ -59,6 +59,7 @@ h4{ font-size:14px; color:#3b3b3b;}
.ml10{ margin-left:10px;} .ml10{ margin-left:10px;}
.ml15{ margin-left:15px;} .ml15{ margin-left:15px;}
.ml20{ margin-left:20px;} .ml20{ margin-left:20px;}
.ml35{margin-left: 35px;}
.ml40{ margin-left:40px;} .ml40{ margin-left:40px;}
.ml45{ margin-left:45px;} .ml45{ margin-left:45px;}
.ml55{ margin-left:55px;} .ml55{ margin-left:55px;}
@ -86,6 +87,7 @@ h4{ font-size:14px; color:#3b3b3b;}
.mb20{ margin-bottom:20px;} .mb20{ margin-bottom:20px;}
.pl15{ padding-left:15px;} .pl15{ padding-left:15px;}
.w20{ width:20px;} .w20{ width:20px;}
.w40{width: 40px;}
.w45{ width: 45px;} .w45{ width: 45px;}
.w60{ width:60px;} .w60{ width:60px;}
.w70{ width:70px;} .w70{ width:70px;}

Loading…
Cancel
Save