Merge branch 'develop' of https://git.trustie.net/jacknudt/trustieforge into develop

This commit is contained in:
Tim 2016-02-01 10:41:30 +08:00
commit d092891b2a
18 changed files with 152 additions and 34 deletions

View File

@ -344,7 +344,7 @@ class HomeworkCommonController < ApplicationController
#当前用户是不是课程的成员 #当前用户是不是课程的成员
def member_of_course def member_of_course
render_403 unless @course.is_public || User.current.member_of_course?(@course) || User.current.admin? render_403 unless @course.is_public==1 || User.current.member_of_course?(@course) || User.current.admin?
end end
def get_assigned_homeworks(student_works, n, index) def get_assigned_homeworks(student_works, n, index)

View File

@ -192,11 +192,13 @@ class UsersController < ApplicationController
forge_querys = ForgeMessage.where("user_id =? and viewed =?", user, 0) forge_querys = ForgeMessage.where("user_id =? and viewed =?", user, 0)
user_querys = UserFeedbackMessage.where("user_id =? and viewed =?", user, 0) user_querys = UserFeedbackMessage.where("user_id =? and viewed =?", user, 0)
forum_querys = MemoMessage.where("user_id =? and viewed =?", user, 0) forum_querys = MemoMessage.where("user_id =? and viewed =?", user, 0)
org_querys = OrgMessage.where("user_id=? and viewed=0", user)
if User.current.id == @user.id if User.current.id == @user.id
course_querys.update_all(:viewed => true) course_querys.update_all(:viewed => true)
forge_querys.update_all(:viewed => true) forge_querys.update_all(:viewed => true)
user_querys.update_all(:viewed => true) user_querys.update_all(:viewed => true)
forum_querys.update_all(:viewed => true) forum_querys.update_all(:viewed => true)
org_querys.update_all(:viewed => true)
end end
end end

View File

@ -89,10 +89,11 @@ module UsersHelper
def unviewed_message(user) def unviewed_message(user)
course_count = CourseMessage.where("user_id =? and viewed =?", user, 0).count course_count = CourseMessage.where("user_id =? and viewed =?", user, 0).count
forge_count = ForgeMessage.where("user_id =? and viewed =?", user, 0).count forge_count = ForgeMessage.where("user_id =? and viewed =?", user, 0).count
org_count = OrgMessage.where("user_id =? and viewed =?", user, 0).count
user_feedback_count = UserFeedbackMessage.where("user_id =? and viewed =?", user, 0).count user_feedback_count = UserFeedbackMessage.where("user_id =? and viewed =?", user, 0).count
user_memo_count = MemoMessage.where("user_id =? and viewed =?", user, 0).count user_memo_count = MemoMessage.where("user_id =? and viewed =?", user, 0).count
at_count = user.at_messages.where(viewed: false).count at_count = user.at_messages.where(viewed: false).count
messages_count = course_count + forge_count + user_feedback_count + user_memo_count + at_count messages_count = course_count + forge_count + user_feedback_count + user_memo_count + at_count + org_count
end end
def user_mail_notification_options(user) def user_mail_notification_options(user)

View File

@ -150,7 +150,7 @@ class Member < ActiveRecord::Base
#当前学生在指定作业内的得分 #当前学生在指定作业内的得分
def homework_common_score homework_common def homework_common_score homework_common
StudentWork.select("final_score").where(:homework_common_id => homework_common.id,:user_id => self.user_id) StudentWork.select("IF(final_score is null,null,final_score - absence_penalty - late_penalty) as final_score").where(:homework_common_id => homework_common.id,:user_id => self.user_id)
end end
def student_work_score_avg def student_work_score_avg
@ -158,7 +158,12 @@ class Member < ActiveRecord::Base
end end
def student_work_score_sum def student_work_score_sum
StudentWork.joins(:homework_common).where("student_works.user_id = #{self.user_id} and homework_commons.course_id = #{self.course_id}").sum(:final_score).try(:round, 2).to_f sql_select = "SELECT (SUM(IF(student_works.final_score is null,null,student_works.final_score - student_works.absence_penalty - student_works.late_penalty))) as score
FROM student_works,homework_commons
WHERE student_works.homework_common_id = homework_commons.id
AND homework_commons.course_id = #{self.course_id}
AND student_works.user_id = #{self.user_id}"
score = StudentWork.find_by_sql(sql_select)
end end
protected protected

View File

@ -345,7 +345,8 @@ class User < Principal
user_memo_count = MemoMessage.where("user_id =? and viewed =? and created_at >?", User.current.id, 0, User.current.onclick_time.onclick_time).count user_memo_count = MemoMessage.where("user_id =? and viewed =? and created_at >?", User.current.id, 0, User.current.onclick_time.onclick_time).count
system_messages_count = SystemMessage.where("created_at >?", User.current.onclick_time.onclick_time).count system_messages_count = SystemMessage.where("created_at >?", User.current.onclick_time.onclick_time).count
at_count = AtMessage.where("user_id =? and viewed =? and created_at >?", User.current.id, 0, User.current.onclick_time.onclick_time).count at_count = AtMessage.where("user_id =? and viewed =? and created_at >?", User.current.id, 0, User.current.onclick_time.onclick_time).count
messages_count = course_count + forge_count + user_feedback_count + user_memo_count + system_messages_count + at_count org_count = OrgMessage.where("user_id=? and viewed =? and created_at >?", User.current.id,0, User.current.onclick_time.onclick_time).count
messages_count = course_count + forge_count + user_feedback_count + user_memo_count + system_messages_count + at_count + org_count
end end
# 查询指派给我的缺陷记录 # 查询指派给我的缺陷记录

View File

@ -28,7 +28,7 @@
</span> </span>
</li> </li>
<% end %> <% end %>
<li><span class="c_blue03 w280">作业积分(总分)</span><span class="c_red w70"><%= @member_score.student_work_score_sum %></span></li> <li><span class="c_blue03 w280">作业积分(总分)</span><span class="c_red w70"><%= (@member_score.student_work_score_sum).first.score %></span></li>
</ul> </ul>
</div> </div>

View File

@ -1,6 +1,6 @@
<%= form_tag( url_for(:controller => 'courses',:action => 'homework_search',:id=>course.id), <%= form_tag( url_for(:controller => 'courses',:action => 'homework_search',:id=>course.id),
:remote=>true ,:method => 'get',:class=>'resourcesSearchloadBox',:id=>'resource_search_form') do %> :remote=>true ,:method => 'get',:class=>'resourcesSearchloadBox',:id=>'resource_search_form') do %>
<input type="text" name="search" placeholder="输入作业关键词进行搜索" class="searchResource" /> <input type="text" name="search" placeholder="输入作业名称进行搜索" class="searchResource" />
<%= submit_tag '',:class=>'homepageSearchIcon',:onfocus=>'this.blur();',:style=>'border-style:none' %> <%= submit_tag '',:class=>'homepageSearchIcon',:onfocus=>'this.blur();',:style=>'border-style:none' %>
<!--<a href="javascript:void(0);" onclick='this.parent.submit();return false;' class="searchIcon"></a>--> <!--<a href="javascript:void(0);" onclick='this.parent.submit();return false;' class="searchIcon"></a>-->
<% end %> <% end %>

View File

@ -57,8 +57,10 @@
) if activity.org_subfield_editable_by?(User.current) %> ) if activity.org_subfield_editable_by?(User.current) %>
</li> </li>
<li> <li>
<%= delete_link( <%= link_to(
l(:button_delete),
{:controller => 'messages', :action => 'destroy', :id => activity, :board_id => activity.board_id}, {:controller => 'messages', :action => 'destroy', :id => activity, :board_id => activity.board_id},
:method => 'post',
:data => {:confirm => l(:text_are_you_sure)}, :data => {:confirm => l(:text_are_you_sure)},
:class => 'postOptionLink' :class => 'postOptionLink'
) if activity.org_subfield_editable_by?(User.current) %> ) if activity.org_subfield_editable_by?(User.current) %>

View File

@ -58,6 +58,11 @@
<div class="w607 fr">http// <div class="w607 fr">http//
<input type="text" name="organization[domain]" id="domain" value="<%= @organization.domain%>" class="orgUrlInput" /> <input type="text" name="organization[domain]" id="domain" value="<%= @organization.domain%>" class="orgUrlInput" />
.trustie.net<a href="javascript:void(0);" class="linkBlue ml15" style="text-decoration:underline;" onclick="apply_subdomain(<%= @organization.id %>,$('#domain').val());">申请</a> .trustie.net<a href="javascript:void(0);" class="linkBlue ml15" style="text-decoration:underline;" onclick="apply_subdomain(<%= @organization.id %>,$('#domain').val());">申请</a>
<% if @organization.domain.present? and OrgMessage.where("organization_id=? and message_type='ApplySubdomain'", @organization.id).order("updated_at desc").first.content == @organization.domain %>
<span>(已批准)</span>
<% elsif OrgMessage.where("organization_id=? and message_type='ApplySubdomain'", @organization.id).count > 0 %>
<span>(您申请了子域名<%= OrgMessage.where("organization_id=? and message_type='ApplySubdomain'", @organization.id).order("updated_at desc").first.content %>,还未批准)</span>
<% end %>
<p class="c_green f12" id="apply_hint" ></p></div> <p class="c_green f12" id="apply_hint" ></p></div>
<!--class="c_green f12" 您的申请已提交,系统会以消息的形式通知您结果 --> <!--class="c_green f12" 您的申请已提交,系统会以消息的形式通知您结果 -->
</div> </div>

View File

@ -0,0 +1,13 @@
<a href="javascript:void(0);" class="CloseBtn" title="关闭弹框"></a>
<div class="ni_con">
<p id="switch_homework_type_notice" class="fontGrey">
</p>
<div class="ni_btn">
<a href="javascript:" class="tijiao" id="switch_type" style="margin-bottom: 20px;" >
继&nbsp;&nbsp;续
</a>
<a href="javascript:" class="tijiao" id="cancel_switch" style="margin-bottom: 20px;">
取&nbsp;&nbsp;消
</a>
</div>
</div>

View File

@ -16,7 +16,7 @@
<p class="c_red">提醒勾选后各小组必须在Trustie平台创建项目教师可随时观察平台对各小组最新进展的实时统计。</p> <p class="c_red">提醒勾选后各小组必须在Trustie平台创建项目教师可随时观察平台对各小组最新进展的实时统计。</p>
</div> </div>
<div class="courseSendSubmit"> <div class="courseSendSubmit">
<a href="javascript:void(0);" class="group_btn sendSourceText">确定</a> <a href="javascript:void(0);" class="group_save_btn sendSourceText">确定</a>
</div> </div>
<div class="courseSendCancel"> <div class="courseSendCancel">
<a href="javascript:void(0);" class="sendSourceText linkGrey6" id="cancel_group">取消</a> <a href="javascript:void(0);" class="sendSourceText linkGrey6" id="cancel_group">取消</a>

View File

@ -72,11 +72,15 @@
<a href="javascript:void(0);" class="AnnexBtn fl mt3 mr15" onclick="$('#_file').click();" title="请选择文件上传">上传附件</a> <a href="javascript:void(0);" class="AnnexBtn fl mt3 mr15" onclick="$('#_file').click();" title="请选择文件上传">上传附件</a>
<%= link_to "资源库",{:controller => 'users',:action=>'user_import_resource',:id=>User.current.id,:homework_id=>container.id},:class => "FilesBtn fl mt3 mr15",:title=>"请从资源库中选择文件作为作品的附件",:remote => true%> <%= link_to "资源库",{:controller => 'users',:action=>'user_import_resource',:id=>User.current.id,:homework_id=>container.id},:class => "FilesBtn fl mt3 mr15",:title=>"请从资源库中选择文件作为作品的附件",:remote => true%>
<% if defined?(has_program) && has_program %> <% if defined?(has_program) && has_program %>
<div id="program_setting" class="fl">
<a href="javascript:void(0);" class="ProBtn fl mt3"title="请设置编程语言和输入测试集">编程</a> <a href="javascript:void(0);" class="ProBtn fl mt3"title="请设置编程语言和输入测试集">编程</a>
<span class="fl C_lgrey mt3 program_detail_info mr15"></span> <span class="fl C_lgrey mt3 program_detail_info mr15"></span>
</div>
<% end %> <% end %>
<% if defined?(has_group) && has_group %> <% if defined?(has_group) && has_group %>
<div id="group_setting" class="fl">
<a href="javascript:void(0);" class="groupBtn fl mt3" title="请设置分组作业的相关参数">分组</a> <a href="javascript:void(0);" class="groupBtn fl mt3" title="请设置分组作业的相关参数">分组</a>
</div>
<% end %> <% end %>
</div> </div>

View File

@ -9,9 +9,11 @@
} else { } else {
$("#anonymous_comment").attr('checked',false); $("#anonymous_comment").attr('checked',false);
} }
<% if edit_mode && homework.is_program_homework? %>
$("#BluePopupBox a.BlueCirBtn").click(); $("#BluePopupBox a.BlueCirBtn").click();
<% end %>
<% if edit_mode && homework.is_group_homework? %> <% if edit_mode && homework.is_group_homework? %>
$("#GroupPopupBox a.group_btn").click(); $("#GroupPopupBox a.group_save_btn").click();
<% end %> <% end %>
}); });
function checked_val() { function checked_val() {
@ -142,3 +144,9 @@
<div class="BluePopupBox" style="display:none;" id="GroupPopupBox"> <div class="BluePopupBox" style="display:none;" id="GroupPopupBox">
<%= render :partial => 'users/user_group_attr', :locals => {:edit_mode => edit_mode, :homework=>homework}%> <%= render :partial => 'users/user_group_attr', :locals => {:edit_mode => edit_mode, :homework=>homework}%>
</div> </div>
<% unless edit_mode %>
<div class="BluePopupBox" style="display:none;" id="NoticePopupBox">
<%= render :partial => 'users/homework_type_notice', :locals => {:edit_mode => edit_mode, :homework=>homework}%>
</div>
<% end %>

View File

@ -42,7 +42,7 @@
<% if activity.user == User.current || User.current.admin?%> <% if activity.user == User.current || User.current.admin?%>
<div class="homepagePostSetting"> <div class="homepagePostSetting">
<ul> <ul>
<li class="homepagePostSettingIcon"> <li class="<%= activity.private == 1 ? 'whiteSettingIcon' : 'homepagePostSettingIcon' %>">
<ul class="homepagePostSettiongText"> <ul class="homepagePostSettiongText">
<li> <li>
<%= link_to(l(:label_bid_respond_delete), <%= link_to(l(:label_bid_respond_delete),

View File

@ -46,6 +46,7 @@ RedmineApp::Application.routes.draw do
end end
end end
member do member do
get 'edit'
get 'setting'#, :action => 'settings', :as => 'settings' get 'setting'#, :action => 'settings', :as => 'settings'
get 'clear_org_avatar_temp' get 'clear_org_avatar_temp'
put 'set_homepage' put 'set_homepage'

View File

@ -107,6 +107,45 @@ $(function(){
$(this).parent().prev().first().focus(); $(this).parent().prev().first().focus();
}) })
$("#NoticePopupBox").dialog({
modal: true,
autoOpen: false,
dialogClass: 'BluePopupBox',
minWidth: 500
});
$('#NoticePopupBox').parent().resizable("disable");
$('#NoticePopupBox').parent().removeClass("ui-state-disabled");
$('#NoticePopupBox').parent().css("border","3px solid #269ac9").css("padding","10px");
$('a#switch_type').live('click', function(){
if($("input[name=homework_type]").val() == "3"){
$("#NoticePopupBox" ).dialog("close");
$("input[name=homework_type]").val(1);
$('span.group_detail_info').text('');
$("#group_setting a").removeClass("fontBlue2");
$("#BluePopupBox").dialog("open");
$(".ui-dialog-titlebar").hide();
$("a.CloseBtn").on('click', function(){
$("#BluePopupBox" ).dialog("close");
});
$('#textarea_input_test').focus();
} else if($("input[name=homework_type]").val() == "2") {
$("#NoticePopupBox" ).dialog("close");
$("input[name=homework_type]").val(1);
$('span.program_detail_info').text("");
$("span.program_detail_info").removeClass("fontBlue2");
$("#program_setting a").removeClass("fontBlue2");
$("#GroupPopupBox").dialog("open");
$(".ui-dialog-titlebar").hide();
$("a.popClose").on('click', function(){
$("#GroupPopupBox" ).dialog("close");
});
$("#cancel_group").on('click', function(){
$("#GroupPopupBox" ).dialog("close");
});
$('#min_num').focus();
}
});
$("#BluePopupBox").dialog({ $("#BluePopupBox").dialog({
modal: true, modal: true,
@ -120,12 +159,25 @@ $(function(){
$('#BluePopupBox').parent().css("position","fixed"); $('#BluePopupBox').parent().css("position","fixed");
$('a.ProBtn').live('click', function(){ $('a.ProBtn').live('click', function(){
if($("input[name=homework_type]").val() == "3"){
$("#NoticePopupBox").dialog("open");
$(".ui-dialog-titlebar").hide();
$("a.CloseBtn").on('click', function(){
$("#NoticePopupBox" ).dialog("close");
});
$("#cancel_switch").on('click', function(){
$("#NoticePopupBox" ).dialog("close");
});
$("#switch_homework_type_notice").text("您的作业类型将改为“分组作业”,并且您的编程设置将被清除。请问是否继续?");
}
else {
$("#BluePopupBox").dialog("open"); $("#BluePopupBox").dialog("open");
$(".ui-dialog-titlebar").hide(); $(".ui-dialog-titlebar").hide();
$("a.CloseBtn").on('click', function(){ $("a.CloseBtn").on('click', function(){
$("#BluePopupBox" ).dialog("close"); $("#BluePopupBox" ).dialog("close");
}); });
$('#textarea_input_test').focus(); $('#textarea_input_test').focus();
}
}); });
var saveProgramAnswers = function() { var saveProgramAnswers = function() {
@ -162,7 +214,9 @@ $(function(){
if (valid) { if (valid) {
$("input[name=homework_type]").val(2); $("input[name=homework_type]").val(2);
$('span.program_detail_info').text('('+language+''+test_numbers/2+'组测试)'); $('span.program_detail_info').text('('+language+'语言,'+test_numbers/2+'组测试)');
$("span.program_detail_info").addClass("fontBlue2");
$("#program_setting a").addClass("fontBlue2");
//保存js值 //保存js值
var data = { var data = {
language_type: $('select.language_type').val(), language_type: $('select.language_type').val(),
@ -213,6 +267,18 @@ $(function(){
$('#GroupPopupBox').parent().css("border","3px solid #269ac9").css("padding","10px"); $('#GroupPopupBox').parent().css("border","3px solid #269ac9").css("padding","10px");
$('a.groupBtn').live('click', function(){ $('a.groupBtn').live('click', function(){
if($("input[name=homework_type]").val() == "2"){
$("#NoticePopupBox").dialog("open");
$(".ui-dialog-titlebar").hide();
$("a.CloseBtn").on('click', function(){
$("#NoticePopupBox" ).dialog("close");
});
$("#cancel_switch").on('click', function(){
$("#NoticePopupBox" ).dialog("close");
});
$("#switch_homework_type_notice").text("您的作业类型将改为“编程作业”,并且您的分组设置将被清除。请问是否继续?");
}
else {
$("#GroupPopupBox").dialog("open"); $("#GroupPopupBox").dialog("open");
$(".ui-dialog-titlebar").hide(); $(".ui-dialog-titlebar").hide();
$("a.popClose").on('click', function () { $("a.popClose").on('click', function () {
@ -222,6 +288,7 @@ $(function(){
$("#GroupPopupBox").dialog("close"); $("#GroupPopupBox").dialog("close");
}); });
$('#min_num').focus(); $('#min_num').focus();
}
}); });
var saveGroupAttr = function() { var saveGroupAttr = function() {
@ -245,6 +312,7 @@ $(function(){
if (valid) { if (valid) {
$("input[name=homework_type]").val(3); $("input[name=homework_type]").val(3);
$('span.group_detail_info').text('分组人数:'+min+'-'+max+' 人'); $('span.group_detail_info').text('分组人数:'+min+'-'+max+' 人');
$("#group_setting a").addClass("fontBlue2");
//保存js值 //保存js值
var data = { var data = {
base_on_project: base_on_project, base_on_project: base_on_project,
@ -259,7 +327,7 @@ $(function(){
return valid; return valid;
}; };
$("#GroupPopupBox a.group_btn").live('click', function(){ $("#GroupPopupBox a.group_save_btn").live('click', function(){
if(saveGroupAttr()){ if(saveGroupAttr()){
if($( "#GroupPopupBox" ).dialog( "isOpen" )){ if($( "#GroupPopupBox" ).dialog( "isOpen" )){
$("#GroupPopupBox").dialog( "close" ); $("#GroupPopupBox").dialog( "close" );

View File

@ -195,6 +195,7 @@ a.c_green{ color:#28be6c;}
.fontBlue {color:#3498db;} .fontBlue {color:#3498db;}
a.underline {text-decoration:underline;} a.underline {text-decoration:underline;}
a.fontBlue {color:#297fb8;} a.fontBlue {color:#297fb8;}
.fontBlue2 {color:#269ac9 !important;}
a.fontGrey {color:#cecece;} a.fontGrey {color:#cecece;}
a.fontGrey2 {color:#888888;} a.fontGrey2 {color:#888888;}
a.linkOrange {color:#ff7143;} a.linkOrange {color:#ff7143;}
@ -1458,3 +1459,6 @@ a.chooseActive {background-color:#269ac9; color:#ffffff;}
.subjectContent {color:#888888; line-height:18px; font-size:12px;} .subjectContent {color:#888888; line-height:18px; font-size:12px;}
.popupClose {background:url(../images/resource_icon_list.png) 0px -40px no-repeat; width:20px; height:20px; display:inline-block; position: absolute; z-index: 1000; right:10px; top:5px;} .popupClose {background:url(../images/resource_icon_list.png) 0px -40px no-repeat; width:20px; height:20px; display:inline-block; position: absolute; z-index: 1000; right:10px; top:5px;}
.subjectContent p,.subjectContent div,.subjectContent em, .subjectContent span{text-align: justify; text-justify:inter-ideograph; word-break: normal !important; word-wrap: break-word !important; line-height: 18px !important; color:#888888 !important; font-size:12px !important;} .subjectContent p,.subjectContent div,.subjectContent em, .subjectContent span{text-align: justify; text-justify:inter-ideograph; word-break: normal !important; word-wrap: break-word !important; line-height: 18px !important; color:#888888 !important; font-size:12px !important;}
.whiteSettingIcon {background:url(../images/hwork_icon.png) -5px -302px no-repeat; width:20px; height:20px;}
.whiteSettingIcon:hover {background:url(../images/homepage_icon.png) -93px -44px no-repeat;}

View File

@ -225,6 +225,7 @@ a.c_green{ color:#28be6c;}
.fontGrey3 {color:#484848;} .fontGrey3 {color:#484848;}
.fontGrey4{color:#999999;} .fontGrey4{color:#999999;}
.fontBlue {color:#3498db;} .fontBlue {color:#3498db;}
.fontBlue2 {color:#269ac9 !important;}
a.underline {text-decoration:underline;} a.underline {text-decoration:underline;}
a.fontBlue {color:#297fb8;} a.fontBlue {color:#297fb8;}
a.fontGrey {color:#cecece;} a.fontGrey {color:#cecece;}
@ -1042,3 +1043,6 @@ a.chooseActive {background-color:#269ac9; color:#ffffff;}
.subjectContent {color:#888888; line-height:18px; font-size:12px;} .subjectContent {color:#888888; line-height:18px; font-size:12px;}
.popupClose {background:url(../images/resource_icon_list.png) 0px -40px no-repeat; width:20px; height:20px; display:inline-block; position: absolute; z-index: 1000; right:10px; top:5px;} .popupClose {background:url(../images/resource_icon_list.png) 0px -40px no-repeat; width:20px; height:20px; display:inline-block; position: absolute; z-index: 1000; right:10px; top:5px;}
.subjectContent p,.subjectContent div,.subjectContent em, .subjectContent span{text-align: justify; text-justify:inter-ideograph; word-break: normal !important; word-wrap: break-word !important; line-height: 18px !important; color:#888888 !important; font-size:12px !important;} .subjectContent p,.subjectContent div,.subjectContent em, .subjectContent span{text-align: justify; text-justify:inter-ideograph; word-break: normal !important; word-wrap: break-word !important; line-height: 18px !important; color:#888888 !important; font-size:12px !important;}
.whiteSettingIcon {background:url(../images/hwork_icon.png) -5px -302px no-repeat; width:20px; height:20px;}
.whiteSettingIcon:hover {background:url(../images/homepage_icon.png) -93px -44px no-repeat;}