Merge branch 'develop' into yuanke
This commit is contained in:
commit
3a46a409a9
|
@ -33,3 +33,4 @@ vendor/cache
|
||||||
/tags
|
/tags
|
||||||
/config/initializers/gitlab_config.rb
|
/config/initializers/gitlab_config.rb
|
||||||
1234567
|
1234567
|
||||||
|
public/javascripts/wechat/node_modules/
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
#coding=utf-8
|
||||||
|
|
||||||
module Mobile
|
module Mobile
|
||||||
require_relative 'middleware/error_handler'
|
require_relative 'middleware/error_handler'
|
||||||
require_relative 'apis/auth'
|
require_relative 'apis/auth'
|
||||||
|
@ -29,16 +31,22 @@ module Mobile
|
||||||
end
|
end
|
||||||
|
|
||||||
def authenticate!
|
def authenticate!
|
||||||
raise('Unauthorized. Invalid or expired token.') unless current_user
|
raise('Unauthorized. 用户认证失败.') unless current_user
|
||||||
end
|
end
|
||||||
|
|
||||||
def current_user
|
def current_user
|
||||||
|
openid = params[:openid]
|
||||||
|
if openid
|
||||||
|
uw = UserWechat.find_by_openid(params[:openid])
|
||||||
|
return uw.user if uw
|
||||||
|
end
|
||||||
|
|
||||||
token = ApiKey.where(access_token: params[:token]).first
|
token = ApiKey.where(access_token: params[:token]).first
|
||||||
if token && !token.expired?
|
if token && !token.expired?
|
||||||
@current_user = User.find(token.user_id)
|
return User.find(token.user_id)
|
||||||
else
|
|
||||||
nil
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
nil
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -12,7 +12,9 @@ module Mobile
|
||||||
requires :openid, type: String
|
requires :openid, type: String
|
||||||
end
|
end
|
||||||
post do
|
post do
|
||||||
user = UserWechat.find_by_openid(params[:openid]).user
|
authenticate!
|
||||||
|
|
||||||
|
user = current_user
|
||||||
|
|
||||||
shield_project_ids = ShieldActivity.select("shield_id").where("container_type='User' and container_id=#{user.id} and shield_type='Project'").map(&:shield_id)
|
shield_project_ids = ShieldActivity.select("shield_id").where("container_type='User' and container_id=#{user.id} and shield_type='Project'").map(&:shield_id)
|
||||||
shield_course_ids = ShieldActivity.select("shield_id").where("container_type='User' and container_id=#{user.id} and shield_type='Course'").map(&:shield_id)
|
shield_course_ids = ShieldActivity.select("shield_id").where("container_type='User' and container_id=#{user.id} and shield_type='Course'").map(&:shield_id)
|
||||||
|
|
|
@ -97,7 +97,6 @@ module Mobile
|
||||||
|
|
||||||
desc "加入课程"
|
desc "加入课程"
|
||||||
params do
|
params do
|
||||||
requires :token, type: String
|
|
||||||
requires :course_password, type: String
|
requires :course_password, type: String
|
||||||
end
|
end
|
||||||
post ":id" do
|
post ":id" do
|
||||||
|
|
|
@ -106,7 +106,7 @@ class WordsController < ApplicationController
|
||||||
elsif @journal_destroyed.jour_type == 'HomeworkCommon'
|
elsif @journal_destroyed.jour_type == 'HomeworkCommon'
|
||||||
@homework = HomeworkCommon.find @journal_destroyed.jour_id
|
@homework = HomeworkCommon.find @journal_destroyed.jour_id
|
||||||
if params[:user_activity_id]
|
if params[:user_activity_id]
|
||||||
@user_activity_id = params[:user_activity_id]
|
@user_activity_id = params[:user_activity_id].to_i
|
||||||
else
|
else
|
||||||
@user_activity_id = -1
|
@user_activity_id = -1
|
||||||
end
|
end
|
||||||
|
|
|
@ -24,8 +24,10 @@
|
||||||
<ul class="st_box_top">
|
<ul class="st_box_top">
|
||||||
<li class="ml50" style="padding-right: 5px;"><span class="fontGrey6 fb">姓名</span></li>
|
<li class="ml50" style="padding-right: 5px;"><span class="fontGrey6 fb">姓名</span></li>
|
||||||
<li class="ml10" style="padding-right: 15px;"><span class="fontGrey6 fb">学号</span></li>
|
<li class="ml10" style="padding-right: 15px;"><span class="fontGrey6 fb">学号</span></li>
|
||||||
|
<% unless @course.course_groups.empty? %>
|
||||||
<li style="padding-right: 55px; margin-left: 160px;"><span class="fontGrey6 fb">分班</span></li>
|
<li style="padding-right: 55px; margin-left: 160px;"><span class="fontGrey6 fb">分班</span></li>
|
||||||
<li class="st_list_score ml10">
|
<% end %>
|
||||||
|
<li class="st_list_score <%= @course.course_groups.empty? ? 'ml250' : 'ml10' %>">
|
||||||
<%= link_to '英雄榜', member_score_sort_course_path(:sort_type => 'score', :sort_by => (@score_sort_by == "desc" ? "asc" : "desc"), :group_id => (@group ? @group.id : 0),:search_name => (@search_name ? @search_name : nil)) ,:result => members,method: 'get', remote: true, :class => 'ml35'%>
|
<%= link_to '英雄榜', member_score_sort_course_path(:sort_type => 'score', :sort_by => (@score_sort_by == "desc" ? "asc" : "desc"), :group_id => (@group ? @group.id : 0),:search_name => (@search_name ? @search_name : nil)) ,:result => members,method: 'get', remote: true, :class => 'ml35'%>
|
||||||
<% if @sort_type == "score" && @score_sort_by == 'desc' %>
|
<% if @sort_type == "score" && @score_sort_by == 'desc' %>
|
||||||
<a id="pic" href="javascript:" class= "st_down"></a>
|
<a id="pic" href="javascript:" class= "st_down"></a>
|
||||||
|
@ -59,6 +61,7 @@
|
||||||
<li><%= link_to("#{l(:label_bidding_user_studentcode)}:<span >#{member.user.user_extensions.student_id}</span>".html_safe,user_path(member.user)) %></li>
|
<li><%= link_to("#{l(:label_bidding_user_studentcode)}:<span >#{member.user.user_extensions.student_id}</span>".html_safe,user_path(member.user)) %></li>
|
||||||
<% end%>
|
<% end%>
|
||||||
</ul>
|
</ul>
|
||||||
|
<% unless @course.course_groups.empty? %>
|
||||||
<% if User.current.allowed_to?(:as_teacher, @course) || User.current.admin? %>
|
<% if User.current.allowed_to?(:as_teacher, @course) || User.current.admin? %>
|
||||||
<% if @course.course_groups.nil? || @group %>
|
<% if @course.course_groups.nil? || @group %>
|
||||||
<div class="select-class-option fl" style="margin-left: 5px;">
|
<div class="select-class-option fl" style="margin-left: 5px;">
|
||||||
|
@ -79,11 +82,12 @@
|
||||||
<span style="width: 100px; text-align: center; float: left;" class="hidden"><%=member.course_group_id == 0 ? "暂无" : member.course_group.name %></span>
|
<span style="width: 100px; text-align: center; float: left;" class="hidden"><%=member.course_group_id == 0 ? "暂无" : member.course_group.name %></span>
|
||||||
</div>
|
</div>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
<% end %>
|
||||||
<%= link_to format("%0.2f",member.score.nil? ? 0 : member.score.to_s), {
|
<%= link_to format("%0.2f",member.score.nil? ? 0 : member.score.to_s), {
|
||||||
:action => 'show_member_score',
|
:action => 'show_member_score',
|
||||||
:member_id => member.id,
|
:member_id => member.id,
|
||||||
:remote => true},
|
:remote => true},
|
||||||
:class => 'st_list_score c_red' %>
|
:class => "st_list_score c_red #{@course.course_groups.empty? ? 'ml130' : ''}" %>
|
||||||
<%= link_to member.act_score.nil? ? 0 : member.act_score.to_s, {
|
<%= link_to member.act_score.nil? ? 0 : member.act_score.to_s, {
|
||||||
:action => 'show_member_act_score',
|
:action => 'show_member_act_score',
|
||||||
:member_id => member.id,
|
:member_id => member.id,
|
||||||
|
|
|
@ -57,7 +57,7 @@
|
||||||
<% when 'Message' %>
|
<% when 'Message' %>
|
||||||
<%= render :partial => 'users/project_message', :locals => {:activity => Message.find(act.org_act_id),:user_activity_id =>act.id, :is_course=>0, :is_board=>0} %>
|
<%= render :partial => 'users/project_message', :locals => {:activity => Message.find(act.org_act_id),:user_activity_id =>act.id, :is_course=>0, :is_board=>0} %>
|
||||||
<% when 'Project'%>
|
<% when 'Project'%>
|
||||||
<%= render :partial => 'users/project_create', :locals => {:activity => act,:user_activity_id =>act.id} %>
|
<%= render :partial => 'organizations/project_create', :locals => {:activity => act,:user_activity_id =>act.id} %>
|
||||||
<% end %>
|
<% end %>
|
||||||
<% end %>
|
<% end %>
|
||||||
<% if act.container_type == 'Course' %>
|
<% if act.container_type == 'Course' %>
|
||||||
|
|
|
@ -1,6 +1,3 @@
|
||||||
<% if @subfield_acts.blank? %>
|
|
||||||
<p class="fontGrey2 f14 mt10 mb5">该模块暂时没有相关内容</p>
|
|
||||||
<% else %>
|
|
||||||
<div class="sn-inner-body">
|
<div class="sn-inner-body">
|
||||||
<div class="sn-innner-content">
|
<div class="sn-innner-content">
|
||||||
<div class="sn-row sn-bg-white">
|
<div class="sn-row sn-bg-white">
|
||||||
|
@ -9,6 +6,10 @@
|
||||||
<a class = "sn-link-grey2"><%= @org_subfield.name %></a>
|
<a class = "sn-link-grey2"><%= @org_subfield.name %></a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<% if @subfield_acts.blank? %>
|
||||||
|
<p class="fontGrey2 f14 mt10 mb5">该模块暂时没有相关内容</p>
|
||||||
|
<% else %>
|
||||||
|
|
||||||
<div class="sn-inner-newslist mt15">
|
<div class="sn-inner-newslist mt15">
|
||||||
<h2 class="sn-inner-newsh2"><%= @org_subfield.name %></h2>
|
<h2 class="sn-inner-newsh2"><%= @org_subfield.name %></h2>
|
||||||
<ul>
|
<ul>
|
||||||
|
@ -40,6 +41,7 @@
|
||||||
<!--</ul>-->
|
<!--</ul>-->
|
||||||
<!--</div>-->
|
<!--</div>-->
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<% end %>
|
<% end %>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
|
@ -73,7 +73,7 @@
|
||||||
<li class="orgListType"><%= org_subfield_type field %></li>
|
<li class="orgListType"><%= org_subfield_type field %></li>
|
||||||
<li class="orgListCatalog hidden">
|
<li class="orgListCatalog hidden">
|
||||||
<% if Secdomain.where("sub_type=2 and pid=?", @organization.id).count > 0 %>
|
<% if Secdomain.where("sub_type=2 and pid=?", @organization.id).count > 0 %>
|
||||||
<div id="sub_dir_show_<%= field.id %>" ondblclick="edit_dir('#sub_dir_show_<%= field.id %>','#sub_dir_edit_<%= field.id %>');" style="cursor:pointer;background-color:#fffce6;color: #0d90c3; width:30px; margin-left:20px;" title="双击可编辑">
|
<div id="sub_dir_show_<%= field.id %>" ondblclick="edit_dir('#sub_dir_show_<%= field.id %>','#sub_dir_edit_<%= field.id %>');" style="cursor:pointer;background-color:#fffce6;color: #0d90c3; width:75px;overflow: hidden; white-space: nowrap;text-overflow: ellipsis;" title="双击可编辑">
|
||||||
<%= field.subfield_subdomain_dir.nil? ? '未设置': field.subfield_subdomain_dir.name %>
|
<%= field.subfield_subdomain_dir.nil? ? '未设置': field.subfield_subdomain_dir.name %>
|
||||||
</div>
|
</div>
|
||||||
<% else %>
|
<% else %>
|
||||||
|
|
|
@ -75,9 +75,9 @@
|
||||||
<div class="orgRow mb10 mt5">
|
<div class="orgRow mb10 mt5">
|
||||||
<span style="margin-left:10px;" >显示模式 : </span>
|
<span style="margin-left:10px;" >显示模式 : </span>
|
||||||
<input type="radio" id="show_mode_ordinary" value="0" name="show_mode" style="margin-left:5px;" <%= @organization.show_mode == 0 ? "checked" : "" %> />
|
<input type="radio" id="show_mode_ordinary" value="0" name="show_mode" style="margin-left:5px;" <%= @organization.show_mode == 0 ? "checked" : "" %> />
|
||||||
<label for="show_mode_ordinary">社区模式一</label>
|
<label for="show_mode_ordinary">简洁模式</label>
|
||||||
<input type="radio" id="show_mode_special" value="1" name="show_mode" style="margin-left:10px;" <%= @organization.show_mode == 1 ? "checked" : "" %> />
|
<input type="radio" id="show_mode_special" value="1" name="show_mode" style="margin-left:10px;" <%= @organization.show_mode == 1 ? "checked" : "" %> />
|
||||||
<label for="show_mode_special">社区模式二</label>
|
<label for="show_mode_special">门户模式</label>
|
||||||
</div>
|
</div>
|
||||||
<div class="orgRow mb10 mt5"><span style="margin-left:38px;" >公开 : </span>
|
<div class="orgRow mb10 mt5"><span style="margin-left:38px;" >公开 : </span>
|
||||||
<input type="checkbox" id="is_public" onclick="disable_down($(this), $('#allow_download'),$('#allow_down_hint'));" name="organization[is_public]" <%= @organization.is_public ? 'checked': ''%> class="ml3" />
|
<input type="checkbox" id="is_public" onclick="disable_down($(this), $('#allow_download'),$('#allow_down_hint'));" name="organization[is_public]" <%= @organization.is_public ? 'checked': ''%> class="ml3" />
|
||||||
|
|
|
@ -63,7 +63,7 @@
|
||||||
</span>
|
</span>
|
||||||
<!--<a action-type="reply" href="javascript:;" poped="false" class="fr mr20 linkGrey3" title="回复">回复</a>-->
|
<!--<a action-type="reply" href="javascript:;" poped="false" class="fr mr20 linkGrey3" title="回复">回复</a>-->
|
||||||
<% if User.current.admin? ||is_teacher || comment.user == User.current%>
|
<% if User.current.admin? ||is_teacher || comment.user == User.current%>
|
||||||
<%= link_to('删除', {:controller => 'words', :action => 'destroy', :object_id => comment, :user_id => comment.user,:is_in_course => is_in_course, :course_activity => course_activity},
|
<%= link_to('删除', {:controller => 'words', :action => 'destroy', :object_id => comment, :user_id => comment.user,:is_in_course => is_in_course, :user_activity_id => user_activity_id, :course_activity => course_activity},
|
||||||
:remote => true, :confirm => l(:text_are_you_sure), :method => 'delete', :class => "fr mr20", :title => l(:button_delete)) %>
|
:remote => true, :confirm => l(:text_are_you_sure), :method => 'delete', :class => "fr mr20", :title => l(:button_delete)) %>
|
||||||
<% end %>
|
<% end %>
|
||||||
</span>
|
</span>
|
||||||
|
|
|
@ -6,25 +6,21 @@
|
||||||
<meta charset='utf-8' />
|
<meta charset='utf-8' />
|
||||||
<meta name="keywords" content="" />
|
<meta name="keywords" content="" />
|
||||||
<meta name="description" content="" />
|
<meta name="description" content="" />
|
||||||
<meta name="apple-mobile-web-app-capable" content="no">
|
<meta name="apple-mobile-web-app-capable" content="no" />
|
||||||
<meta content='True' name='HandheldFriendly' />
|
<meta content='True' name='HandheldFriendly' />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" />
|
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" />
|
||||||
|
|
||||||
<link type="text/css" rel="stylesheet" href="/stylesheets/weui/weixin.css" />
|
<link type="text/css" rel="stylesheet" href="/stylesheets/weui/weixin.css" />
|
||||||
|
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
window.g_openid = '<%= @wechat_user.openid %>';
|
window.g_openid = '<%= @wechat_user.openid %>';
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div ng-view>
|
<div ng-view>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<script src="/javascripts/wechat/build/angular.all.min.js"></script>
|
||||||
<script src="/javascripts/wechat/angular.js"></script>
|
|
||||||
<script src="/javascripts/wechat/angular-route.js"></script>
|
|
||||||
<script src="/javascripts/wechat/angular-sanitize.min.js"></script>
|
|
||||||
<script src="/javascripts/wechat/angular-cookies.js"></script>
|
|
||||||
<script src="/javascripts/jquery-1.3.2.js"></script>
|
|
||||||
<script src="/javascripts/wechat/app.js"></script>
|
<script src="/javascripts/wechat/app.js"></script>
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
|
|
|
@ -2,19 +2,35 @@ button:
|
||||||
-
|
-
|
||||||
type: "view"
|
type: "view"
|
||||||
name: "我的动态"
|
name: "我的动态"
|
||||||
url: "https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx8e1ab05163a28e37&redirect_uri=https://www.trustie.net/wechat/user_activities&response_type=code&scope=snsapi_base&state=123#wechat_redirect"
|
url: "https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxf694495398c7d470&redirect_uri=http://wechat.trustie.net/wechat/user_activities&response_type=code&scope=snsapi_base&state=123#wechat_redirect"
|
||||||
-
|
-
|
||||||
type: "click"
|
name: "我的课程"
|
||||||
name: "意见反馈"
|
sub_button:
|
||||||
key: "FEEDBACK"
|
-
|
||||||
|
type: "view"
|
||||||
|
name: "课程"
|
||||||
|
url: "https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxf694495398c7d470&redirect_uri=http://wechat.trustie.net/wechat/user_activities&response_type=code&scope=snsapi_base&state=123#wechat_redirect"
|
||||||
|
-
|
||||||
|
type: "view"
|
||||||
|
name: "资源"
|
||||||
|
url: "https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxf694495398c7d470&redirect_uri=http://wechat.trustie.net/wechat/user_activities&response_type=code&scope=snsapi_base&state=123#wechat_redirect"
|
||||||
|
|
||||||
-
|
-
|
||||||
name: "更多"
|
name: "更多"
|
||||||
sub_button:
|
sub_button:
|
||||||
-
|
-
|
||||||
type: "view"
|
type: "view"
|
||||||
name: "进入网站"
|
name: "加入班级"
|
||||||
url: "https://www.trustie.net/"
|
url: "https://www.trustie.net/"
|
||||||
-
|
-
|
||||||
type: "view"
|
type: "view"
|
||||||
name: "使用手册"
|
name: "点名"
|
||||||
url: "https://www.trustie.net/organizations/1/downloads"
|
url: "https://www.trustie.net/organizations/1/downloads"
|
||||||
|
-
|
||||||
|
type: "click"
|
||||||
|
name: "反馈"
|
||||||
|
key: "FEEDBACK"
|
||||||
|
-
|
||||||
|
type: "view"
|
||||||
|
name: "历史推文"
|
||||||
|
url: "http://mp.weixin.qq.com/mp/getmasssendmsg?__biz=MzIwOTM2NDkxMA==#wechat_webview_type=1&wechat_redirect"
|
||||||
|
|
|
@ -0,0 +1,10 @@
|
||||||
|
class UpdateOrgSubfiledDefault < ActiveRecord::Migration
|
||||||
|
def up
|
||||||
|
OrgSubfield.where(:name => "activity").update_all(:status => false)
|
||||||
|
OrgSubfield.where(:name => "course").update_all(:status => 2)
|
||||||
|
OrgSubfield.where(:name => "project").update_all(:status => 2)
|
||||||
|
end
|
||||||
|
|
||||||
|
def down
|
||||||
|
end
|
||||||
|
end
|
|
@ -0,0 +1,8 @@
|
||||||
|
class UpdateOrgSubfiledResource < ActiveRecord::Migration
|
||||||
|
def up
|
||||||
|
OrgSubfield.where(:field_type => "Resource").update_all(:status => 6)
|
||||||
|
end
|
||||||
|
|
||||||
|
def down
|
||||||
|
end
|
||||||
|
end
|
406
db/schema.rb
406
db/schema.rb
|
@ -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 => 20160606064856) do
|
ActiveRecord::Schema.define(:version => 20160612043259) 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
|
||||||
|
@ -52,28 +52,6 @@ ActiveRecord::Schema.define(:version => 20160606064856) do
|
||||||
add_index "api_keys", ["access_token"], :name => "index_api_keys_on_access_token"
|
add_index "api_keys", ["access_token"], :name => "index_api_keys_on_access_token"
|
||||||
add_index "api_keys", ["user_id"], :name => "index_api_keys_on_user_id"
|
add_index "api_keys", ["user_id"], :name => "index_api_keys_on_user_id"
|
||||||
|
|
||||||
create_table "application_settings", :force => true do |t|
|
|
||||||
t.integer "default_projects_limit"
|
|
||||||
t.boolean "signup_enabled"
|
|
||||||
t.boolean "signin_enabled"
|
|
||||||
t.boolean "gravatar_enabled"
|
|
||||||
t.text "sign_in_text"
|
|
||||||
t.datetime "created_at"
|
|
||||||
t.datetime "updated_at"
|
|
||||||
t.string "home_page_url"
|
|
||||||
t.integer "default_branch_protection", :default => 2
|
|
||||||
t.boolean "twitter_sharing_enabled", :default => true
|
|
||||||
t.text "restricted_visibility_levels"
|
|
||||||
t.boolean "version_check_enabled", :default => true
|
|
||||||
t.integer "max_attachment_size", :default => 10, :null => false
|
|
||||||
t.integer "default_project_visibility"
|
|
||||||
t.integer "default_snippet_visibility"
|
|
||||||
t.text "restricted_signup_domains"
|
|
||||||
t.boolean "user_oauth_applications", :default => true
|
|
||||||
t.string "after_sign_out_path"
|
|
||||||
t.integer "session_expire_delay", :default => 10080, :null => false
|
|
||||||
end
|
|
||||||
|
|
||||||
create_table "applied_projects", :force => true do |t|
|
create_table "applied_projects", :force => true do |t|
|
||||||
t.integer "project_id", :null => false
|
t.integer "project_id", :null => false
|
||||||
t.integer "user_id", :null => false
|
t.integer "user_id", :null => false
|
||||||
|
@ -178,20 +156,6 @@ ActiveRecord::Schema.define(:version => 20160606064856) do
|
||||||
t.string "typeName", :limit => 50
|
t.string "typeName", :limit => 50
|
||||||
end
|
end
|
||||||
|
|
||||||
create_table "audit_events", :force => true do |t|
|
|
||||||
t.integer "author_id", :null => false
|
|
||||||
t.string "type", :null => false
|
|
||||||
t.integer "entity_id", :null => false
|
|
||||||
t.string "entity_type", :null => false
|
|
||||||
t.text "details"
|
|
||||||
t.datetime "created_at"
|
|
||||||
t.datetime "updated_at"
|
|
||||||
end
|
|
||||||
|
|
||||||
add_index "audit_events", ["author_id"], :name => "index_audit_events_on_author_id"
|
|
||||||
add_index "audit_events", ["entity_id", "entity_type"], :name => "index_audit_events_on_entity_id_and_entity_type"
|
|
||||||
add_index "audit_events", ["type"], :name => "index_audit_events_on_type"
|
|
||||||
|
|
||||||
create_table "auth_sources", :force => true do |t|
|
create_table "auth_sources", :force => true do |t|
|
||||||
t.string "type", :limit => 30, :default => "", :null => false
|
t.string "type", :limit => 30, :default => "", :null => false
|
||||||
t.string "name", :limit => 60, :default => "", :null => false
|
t.string "name", :limit => 60, :default => "", :null => false
|
||||||
|
@ -289,17 +253,6 @@ ActiveRecord::Schema.define(:version => 20160606064856) do
|
||||||
add_index "boards", ["last_message_id"], :name => "index_boards_on_last_message_id"
|
add_index "boards", ["last_message_id"], :name => "index_boards_on_last_message_id"
|
||||||
add_index "boards", ["project_id"], :name => "boards_project_id"
|
add_index "boards", ["project_id"], :name => "boards_project_id"
|
||||||
|
|
||||||
create_table "broadcast_messages", :force => true do |t|
|
|
||||||
t.text "message", :null => false
|
|
||||||
t.datetime "starts_at"
|
|
||||||
t.datetime "ends_at"
|
|
||||||
t.integer "alert_type"
|
|
||||||
t.datetime "created_at"
|
|
||||||
t.datetime "updated_at"
|
|
||||||
t.string "color"
|
|
||||||
t.string "font"
|
|
||||||
end
|
|
||||||
|
|
||||||
create_table "bug_to_osps", :force => true do |t|
|
create_table "bug_to_osps", :force => true do |t|
|
||||||
t.integer "osp_id"
|
t.integer "osp_id"
|
||||||
t.integer "relative_memo_id"
|
t.integer "relative_memo_id"
|
||||||
|
@ -599,10 +552,6 @@ ActiveRecord::Schema.define(:version => 20160606064856) do
|
||||||
t.integer "visits", :default => 0
|
t.integer "visits", :default => 0
|
||||||
end
|
end
|
||||||
|
|
||||||
add_index "courses", ["id"], :name => "id", :unique => true
|
|
||||||
add_index "courses", ["tea_id"], :name => "tea_id"
|
|
||||||
add_index "courses", ["visits"], :name => "visits"
|
|
||||||
|
|
||||||
create_table "custom_fields", :force => true do |t|
|
create_table "custom_fields", :force => true do |t|
|
||||||
t.string "type", :limit => 30, :default => "", :null => false
|
t.string "type", :limit => 30, :default => "", :null => false
|
||||||
t.string "name", :limit => 30, :default => "", :null => false
|
t.string "name", :limit => 30, :default => "", :null => false
|
||||||
|
@ -664,15 +613,6 @@ ActiveRecord::Schema.define(:version => 20160606064856) do
|
||||||
|
|
||||||
add_index "delayed_jobs", ["priority", "run_at"], :name => "delayed_jobs_priority"
|
add_index "delayed_jobs", ["priority", "run_at"], :name => "delayed_jobs_priority"
|
||||||
|
|
||||||
create_table "deploy_keys_projects", :force => true do |t|
|
|
||||||
t.integer "deploy_key_id", :null => false
|
|
||||||
t.integer "project_id", :null => false
|
|
||||||
t.datetime "created_at"
|
|
||||||
t.datetime "updated_at"
|
|
||||||
end
|
|
||||||
|
|
||||||
add_index "deploy_keys_projects", ["project_id"], :name => "index_deploy_keys_projects_on_project_id"
|
|
||||||
|
|
||||||
create_table "discuss_demos", :force => true do |t|
|
create_table "discuss_demos", :force => true do |t|
|
||||||
t.string "title"
|
t.string "title"
|
||||||
t.text "body"
|
t.text "body"
|
||||||
|
@ -722,16 +662,6 @@ ActiveRecord::Schema.define(:version => 20160606064856) do
|
||||||
t.datetime "created_at"
|
t.datetime "created_at"
|
||||||
end
|
end
|
||||||
|
|
||||||
create_table "emails", :force => true do |t|
|
|
||||||
t.integer "user_id", :null => false
|
|
||||||
t.string "email", :null => false
|
|
||||||
t.datetime "created_at"
|
|
||||||
t.datetime "updated_at"
|
|
||||||
end
|
|
||||||
|
|
||||||
add_index "emails", ["email"], :name => "index_emails_on_email", :unique => true
|
|
||||||
add_index "emails", ["user_id"], :name => "index_emails_on_user_id"
|
|
||||||
|
|
||||||
create_table "enabled_modules", :force => true do |t|
|
create_table "enabled_modules", :force => true do |t|
|
||||||
t.integer "project_id"
|
t.integer "project_id"
|
||||||
t.string "name", :null => false
|
t.string "name", :null => false
|
||||||
|
@ -754,25 +684,6 @@ ActiveRecord::Schema.define(:version => 20160606064856) do
|
||||||
add_index "enumerations", ["id", "type"], :name => "index_enumerations_on_id_and_type"
|
add_index "enumerations", ["id", "type"], :name => "index_enumerations_on_id_and_type"
|
||||||
add_index "enumerations", ["project_id"], :name => "index_enumerations_on_project_id"
|
add_index "enumerations", ["project_id"], :name => "index_enumerations_on_project_id"
|
||||||
|
|
||||||
create_table "events", :force => true do |t|
|
|
||||||
t.string "target_type"
|
|
||||||
t.integer "target_id"
|
|
||||||
t.string "title"
|
|
||||||
t.text "data"
|
|
||||||
t.integer "project_id"
|
|
||||||
t.datetime "created_at"
|
|
||||||
t.datetime "updated_at"
|
|
||||||
t.integer "action"
|
|
||||||
t.integer "author_id"
|
|
||||||
end
|
|
||||||
|
|
||||||
add_index "events", ["action"], :name => "index_events_on_action"
|
|
||||||
add_index "events", ["author_id"], :name => "index_events_on_author_id"
|
|
||||||
add_index "events", ["created_at"], :name => "index_events_on_created_at"
|
|
||||||
add_index "events", ["project_id"], :name => "index_events_on_project_id"
|
|
||||||
add_index "events", ["target_id"], :name => "index_events_on_target_id"
|
|
||||||
add_index "events", ["target_type"], :name => "index_events_on_target_type"
|
|
||||||
|
|
||||||
create_table "exercise_answers", :force => true do |t|
|
create_table "exercise_answers", :force => true do |t|
|
||||||
t.integer "user_id"
|
t.integer "user_id"
|
||||||
t.integer "exercise_question_id"
|
t.integer "exercise_question_id"
|
||||||
|
@ -875,15 +786,6 @@ ActiveRecord::Schema.define(:version => 20160606064856) do
|
||||||
add_index "forge_messages", ["forge_message_id", "forge_message_type"], :name => "index_forge_messages_on_forge_message_id_and_forge_message_type"
|
add_index "forge_messages", ["forge_message_id", "forge_message_type"], :name => "index_forge_messages_on_forge_message_id_and_forge_message_type"
|
||||||
add_index "forge_messages", ["user_id", "project_id", "created_at"], :name => "index_forge_messages_on_user_id_and_project_id_and_created_at"
|
add_index "forge_messages", ["user_id", "project_id", "created_at"], :name => "index_forge_messages_on_user_id_and_project_id_and_created_at"
|
||||||
|
|
||||||
create_table "forked_project_links", :force => true do |t|
|
|
||||||
t.integer "forked_to_project_id", :null => false
|
|
||||||
t.integer "forked_from_project_id", :null => false
|
|
||||||
t.datetime "created_at"
|
|
||||||
t.datetime "updated_at"
|
|
||||||
end
|
|
||||||
|
|
||||||
add_index "forked_project_links", ["forked_to_project_id"], :name => "index_forked_project_links_on_forked_to_project_id", :unique => true
|
|
||||||
|
|
||||||
create_table "forums", :force => true do |t|
|
create_table "forums", :force => true do |t|
|
||||||
t.string "name", :null => false
|
t.string "name", :null => false
|
||||||
t.text "description"
|
t.text "description"
|
||||||
|
@ -1013,17 +915,6 @@ ActiveRecord::Schema.define(:version => 20160606064856) do
|
||||||
t.datetime "updated_at", :null => false
|
t.datetime "updated_at", :null => false
|
||||||
end
|
end
|
||||||
|
|
||||||
create_table "identities", :force => true do |t|
|
|
||||||
t.string "extern_uid"
|
|
||||||
t.string "provider"
|
|
||||||
t.integer "user_id"
|
|
||||||
t.datetime "created_at"
|
|
||||||
t.datetime "updated_at"
|
|
||||||
end
|
|
||||||
|
|
||||||
add_index "identities", ["created_at", "id"], :name => "index_identities_on_created_at_and_id"
|
|
||||||
add_index "identities", ["user_id"], :name => "index_identities_on_user_id"
|
|
||||||
|
|
||||||
create_table "invite_lists", :force => true do |t|
|
create_table "invite_lists", :force => true do |t|
|
||||||
t.integer "project_id"
|
t.integer "project_id"
|
||||||
t.integer "user_id"
|
t.integer "user_id"
|
||||||
|
@ -1167,20 +1058,6 @@ ActiveRecord::Schema.define(:version => 20160606064856) do
|
||||||
t.integer "private", :default => 0
|
t.integer "private", :default => 0
|
||||||
end
|
end
|
||||||
|
|
||||||
create_table "keys", :force => true do |t|
|
|
||||||
t.integer "user_id"
|
|
||||||
t.datetime "created_at"
|
|
||||||
t.datetime "updated_at"
|
|
||||||
t.text "key"
|
|
||||||
t.string "title"
|
|
||||||
t.string "type"
|
|
||||||
t.string "fingerprint"
|
|
||||||
t.boolean "public", :default => false, :null => false
|
|
||||||
end
|
|
||||||
|
|
||||||
add_index "keys", ["created_at", "id"], :name => "index_keys_on_created_at_and_id"
|
|
||||||
add_index "keys", ["user_id"], :name => "index_keys_on_user_id"
|
|
||||||
|
|
||||||
create_table "kindeditor_assets", :force => true do |t|
|
create_table "kindeditor_assets", :force => true do |t|
|
||||||
t.string "asset"
|
t.string "asset"
|
||||||
t.integer "file_size"
|
t.integer "file_size"
|
||||||
|
@ -1192,27 +1069,6 @@ ActiveRecord::Schema.define(:version => 20160606064856) do
|
||||||
t.integer "owner_type", :default => 0
|
t.integer "owner_type", :default => 0
|
||||||
end
|
end
|
||||||
|
|
||||||
create_table "label_links", :force => true do |t|
|
|
||||||
t.integer "label_id"
|
|
||||||
t.integer "target_id"
|
|
||||||
t.string "target_type"
|
|
||||||
t.datetime "created_at"
|
|
||||||
t.datetime "updated_at"
|
|
||||||
end
|
|
||||||
|
|
||||||
add_index "label_links", ["label_id"], :name => "index_label_links_on_label_id"
|
|
||||||
add_index "label_links", ["target_id", "target_type"], :name => "index_label_links_on_target_id_and_target_type"
|
|
||||||
|
|
||||||
create_table "labels", :force => true do |t|
|
|
||||||
t.string "title"
|
|
||||||
t.string "color"
|
|
||||||
t.integer "project_id"
|
|
||||||
t.datetime "created_at"
|
|
||||||
t.datetime "updated_at"
|
|
||||||
end
|
|
||||||
|
|
||||||
add_index "labels", ["project_id"], :name => "index_labels_on_project_id"
|
|
||||||
|
|
||||||
create_table "member_roles", :force => true do |t|
|
create_table "member_roles", :force => true do |t|
|
||||||
t.integer "member_id", :null => false
|
t.integer "member_id", :null => false
|
||||||
t.integer "role_id", :null => false
|
t.integer "role_id", :null => false
|
||||||
|
@ -1263,47 +1119,6 @@ ActiveRecord::Schema.define(:version => 20160606064856) do
|
||||||
t.integer "viewed_count", :default => 0
|
t.integer "viewed_count", :default => 0
|
||||||
end
|
end
|
||||||
|
|
||||||
create_table "merge_request_diffs", :force => true do |t|
|
|
||||||
t.string "state"
|
|
||||||
t.text "st_commits", :limit => 2147483647
|
|
||||||
t.text "st_diffs", :limit => 2147483647
|
|
||||||
t.integer "merge_request_id", :null => false
|
|
||||||
t.datetime "created_at"
|
|
||||||
t.datetime "updated_at"
|
|
||||||
end
|
|
||||||
|
|
||||||
add_index "merge_request_diffs", ["merge_request_id"], :name => "index_merge_request_diffs_on_merge_request_id", :unique => true
|
|
||||||
|
|
||||||
create_table "merge_requests", :force => true do |t|
|
|
||||||
t.string "target_branch", :null => false
|
|
||||||
t.string "source_branch", :null => false
|
|
||||||
t.integer "source_project_id", :null => false
|
|
||||||
t.integer "author_id"
|
|
||||||
t.integer "assignee_id"
|
|
||||||
t.string "title"
|
|
||||||
t.datetime "created_at"
|
|
||||||
t.datetime "updated_at"
|
|
||||||
t.integer "milestone_id"
|
|
||||||
t.string "state"
|
|
||||||
t.string "merge_status"
|
|
||||||
t.integer "target_project_id", :null => false
|
|
||||||
t.integer "iid"
|
|
||||||
t.text "description"
|
|
||||||
t.integer "position", :default => 0
|
|
||||||
t.datetime "locked_at"
|
|
||||||
end
|
|
||||||
|
|
||||||
add_index "merge_requests", ["assignee_id"], :name => "index_merge_requests_on_assignee_id"
|
|
||||||
add_index "merge_requests", ["author_id"], :name => "index_merge_requests_on_author_id"
|
|
||||||
add_index "merge_requests", ["created_at", "id"], :name => "index_merge_requests_on_created_at_and_id"
|
|
||||||
add_index "merge_requests", ["created_at"], :name => "index_merge_requests_on_created_at"
|
|
||||||
add_index "merge_requests", ["milestone_id"], :name => "index_merge_requests_on_milestone_id"
|
|
||||||
add_index "merge_requests", ["source_branch"], :name => "index_merge_requests_on_source_branch"
|
|
||||||
add_index "merge_requests", ["source_project_id"], :name => "index_merge_requests_on_source_project_id"
|
|
||||||
add_index "merge_requests", ["target_branch"], :name => "index_merge_requests_on_target_branch"
|
|
||||||
add_index "merge_requests", ["target_project_id", "iid"], :name => "index_merge_requests_on_target_project_id_and_iid", :unique => true
|
|
||||||
add_index "merge_requests", ["title"], :name => "index_merge_requests_on_title"
|
|
||||||
|
|
||||||
create_table "message_alls", :force => true do |t|
|
create_table "message_alls", :force => true do |t|
|
||||||
t.integer "user_id"
|
t.integer "user_id"
|
||||||
t.integer "message_id"
|
t.integer "message_id"
|
||||||
|
@ -1338,39 +1153,6 @@ ActiveRecord::Schema.define(:version => 20160606064856) do
|
||||||
add_index "messages", ["last_reply_id"], :name => "index_messages_on_last_reply_id"
|
add_index "messages", ["last_reply_id"], :name => "index_messages_on_last_reply_id"
|
||||||
add_index "messages", ["parent_id"], :name => "messages_parent_id"
|
add_index "messages", ["parent_id"], :name => "messages_parent_id"
|
||||||
|
|
||||||
create_table "milestones", :force => true do |t|
|
|
||||||
t.string "title", :null => false
|
|
||||||
t.integer "project_id", :null => false
|
|
||||||
t.text "description"
|
|
||||||
t.date "due_date"
|
|
||||||
t.datetime "created_at"
|
|
||||||
t.datetime "updated_at"
|
|
||||||
t.string "state"
|
|
||||||
t.integer "iid"
|
|
||||||
end
|
|
||||||
|
|
||||||
add_index "milestones", ["created_at", "id"], :name => "index_milestones_on_created_at_and_id"
|
|
||||||
add_index "milestones", ["due_date"], :name => "index_milestones_on_due_date"
|
|
||||||
add_index "milestones", ["project_id", "iid"], :name => "index_milestones_on_project_id_and_iid", :unique => true
|
|
||||||
add_index "milestones", ["project_id"], :name => "index_milestones_on_project_id"
|
|
||||||
|
|
||||||
create_table "namespaces", :force => true do |t|
|
|
||||||
t.string "name", :null => false
|
|
||||||
t.string "path", :null => false
|
|
||||||
t.integer "owner_id"
|
|
||||||
t.datetime "created_at"
|
|
||||||
t.datetime "updated_at"
|
|
||||||
t.string "type"
|
|
||||||
t.string "description", :default => "", :null => false
|
|
||||||
t.string "avatar"
|
|
||||||
end
|
|
||||||
|
|
||||||
add_index "namespaces", ["created_at", "id"], :name => "index_namespaces_on_created_at_and_id"
|
|
||||||
add_index "namespaces", ["name"], :name => "index_namespaces_on_name", :unique => true
|
|
||||||
add_index "namespaces", ["owner_id"], :name => "index_namespaces_on_owner_id"
|
|
||||||
add_index "namespaces", ["path"], :name => "index_namespaces_on_path", :unique => true
|
|
||||||
add_index "namespaces", ["type"], :name => "index_namespaces_on_type"
|
|
||||||
|
|
||||||
create_table "news", :force => true do |t|
|
create_table "news", :force => true do |t|
|
||||||
t.integer "project_id"
|
t.integer "project_id"
|
||||||
t.string "title", :limit => 60, :default => "", :null => false
|
t.string "title", :limit => 60, :default => "", :null => false
|
||||||
|
@ -1396,31 +1178,6 @@ ActiveRecord::Schema.define(:version => 20160606064856) do
|
||||||
t.datetime "updated_at", :null => false
|
t.datetime "updated_at", :null => false
|
||||||
end
|
end
|
||||||
|
|
||||||
create_table "notes", :force => true do |t|
|
|
||||||
t.text "note"
|
|
||||||
t.string "noteable_type"
|
|
||||||
t.integer "author_id"
|
|
||||||
t.datetime "created_at"
|
|
||||||
t.datetime "updated_at"
|
|
||||||
t.integer "project_id"
|
|
||||||
t.string "attachment"
|
|
||||||
t.string "line_code"
|
|
||||||
t.string "commit_id"
|
|
||||||
t.integer "noteable_id"
|
|
||||||
t.boolean "system", :default => false, :null => false
|
|
||||||
t.text "st_diff", :limit => 2147483647
|
|
||||||
end
|
|
||||||
|
|
||||||
add_index "notes", ["author_id"], :name => "index_notes_on_author_id"
|
|
||||||
add_index "notes", ["commit_id"], :name => "index_notes_on_commit_id"
|
|
||||||
add_index "notes", ["created_at", "id"], :name => "index_notes_on_created_at_and_id"
|
|
||||||
add_index "notes", ["created_at"], :name => "index_notes_on_created_at"
|
|
||||||
add_index "notes", ["noteable_id", "noteable_type"], :name => "index_notes_on_noteable_id_and_noteable_type"
|
|
||||||
add_index "notes", ["noteable_type"], :name => "index_notes_on_noteable_type"
|
|
||||||
add_index "notes", ["project_id", "noteable_type"], :name => "index_notes_on_project_id_and_noteable_type"
|
|
||||||
add_index "notes", ["project_id"], :name => "index_notes_on_project_id"
|
|
||||||
add_index "notes", ["updated_at"], :name => "index_notes_on_updated_at"
|
|
||||||
|
|
||||||
create_table "notificationcomments", :force => true do |t|
|
create_table "notificationcomments", :force => true do |t|
|
||||||
t.string "notificationcommented_type"
|
t.string "notificationcommented_type"
|
||||||
t.integer "notificationcommented_id"
|
t.integer "notificationcommented_id"
|
||||||
|
@ -1430,49 +1187,6 @@ ActiveRecord::Schema.define(:version => 20160606064856) do
|
||||||
t.datetime "updated_at", :null => false
|
t.datetime "updated_at", :null => false
|
||||||
end
|
end
|
||||||
|
|
||||||
create_table "oauth_access_grants", :force => true do |t|
|
|
||||||
t.integer "resource_owner_id", :null => false
|
|
||||||
t.integer "application_id", :null => false
|
|
||||||
t.string "token", :null => false
|
|
||||||
t.integer "expires_in", :null => false
|
|
||||||
t.text "redirect_uri", :null => false
|
|
||||||
t.datetime "created_at", :null => false
|
|
||||||
t.datetime "revoked_at"
|
|
||||||
t.string "scopes"
|
|
||||||
end
|
|
||||||
|
|
||||||
add_index "oauth_access_grants", ["token"], :name => "index_oauth_access_grants_on_token", :unique => true
|
|
||||||
|
|
||||||
create_table "oauth_access_tokens", :force => true do |t|
|
|
||||||
t.integer "resource_owner_id"
|
|
||||||
t.integer "application_id"
|
|
||||||
t.string "token", :null => false
|
|
||||||
t.string "refresh_token"
|
|
||||||
t.integer "expires_in"
|
|
||||||
t.datetime "revoked_at"
|
|
||||||
t.datetime "created_at", :null => false
|
|
||||||
t.string "scopes"
|
|
||||||
end
|
|
||||||
|
|
||||||
add_index "oauth_access_tokens", ["refresh_token"], :name => "index_oauth_access_tokens_on_refresh_token", :unique => true
|
|
||||||
add_index "oauth_access_tokens", ["resource_owner_id"], :name => "index_oauth_access_tokens_on_resource_owner_id"
|
|
||||||
add_index "oauth_access_tokens", ["token"], :name => "index_oauth_access_tokens_on_token", :unique => true
|
|
||||||
|
|
||||||
create_table "oauth_applications", :force => true do |t|
|
|
||||||
t.string "name", :null => false
|
|
||||||
t.string "uid", :null => false
|
|
||||||
t.string "secret", :null => false
|
|
||||||
t.text "redirect_uri", :null => false
|
|
||||||
t.string "scopes", :default => "", :null => false
|
|
||||||
t.datetime "created_at"
|
|
||||||
t.datetime "updated_at"
|
|
||||||
t.integer "owner_id"
|
|
||||||
t.string "owner_type"
|
|
||||||
end
|
|
||||||
|
|
||||||
add_index "oauth_applications", ["owner_id", "owner_type"], :name => "index_oauth_applications_on_owner_id_and_owner_type"
|
|
||||||
add_index "oauth_applications", ["uid"], :name => "index_oauth_applications_on_uid", :unique => true
|
|
||||||
|
|
||||||
create_table "onclick_times", :force => true do |t|
|
create_table "onclick_times", :force => true do |t|
|
||||||
t.integer "user_id"
|
t.integer "user_id"
|
||||||
t.datetime "onclick_time"
|
t.datetime "onclick_time"
|
||||||
|
@ -1630,23 +1344,6 @@ ActiveRecord::Schema.define(:version => 20160606064856) do
|
||||||
t.integer "allow_teacher", :default => 0
|
t.integer "allow_teacher", :default => 0
|
||||||
end
|
end
|
||||||
|
|
||||||
create_table "permissions", :force => true do |t|
|
|
||||||
t.string "controller", :limit => 30, :default => "", :null => false
|
|
||||||
t.string "action", :limit => 30, :default => "", :null => false
|
|
||||||
t.string "description", :limit => 60, :default => "", :null => false
|
|
||||||
t.boolean "is_public", :default => false, :null => false
|
|
||||||
t.integer "sort", :default => 0, :null => false
|
|
||||||
t.boolean "mail_option", :default => false, :null => false
|
|
||||||
t.boolean "mail_enabled", :default => false, :null => false
|
|
||||||
end
|
|
||||||
|
|
||||||
create_table "permissions_roles", :id => false, :force => true do |t|
|
|
||||||
t.integer "permission_id", :default => 0, :null => false
|
|
||||||
t.integer "role_id", :default => 0, :null => false
|
|
||||||
end
|
|
||||||
|
|
||||||
add_index "permissions_roles", ["role_id"], :name => "permissions_roles_role_id"
|
|
||||||
|
|
||||||
create_table "phone_app_versions", :force => true do |t|
|
create_table "phone_app_versions", :force => true do |t|
|
||||||
t.string "version"
|
t.string "version"
|
||||||
t.text "description"
|
t.text "description"
|
||||||
|
@ -1729,11 +1426,6 @@ ActiveRecord::Schema.define(:version => 20160606064856) do
|
||||||
t.datetime "updated_at", :null => false
|
t.datetime "updated_at", :null => false
|
||||||
end
|
end
|
||||||
|
|
||||||
create_table "project_import_data", :force => true do |t|
|
|
||||||
t.integer "project_id"
|
|
||||||
t.text "data"
|
|
||||||
end
|
|
||||||
|
|
||||||
create_table "project_infos", :force => true do |t|
|
create_table "project_infos", :force => true do |t|
|
||||||
t.integer "project_id"
|
t.integer "project_id"
|
||||||
t.integer "user_id"
|
t.integer "user_id"
|
||||||
|
@ -1824,16 +1516,6 @@ ActiveRecord::Schema.define(:version => 20160606064856) do
|
||||||
add_index "projects_trackers", ["project_id", "tracker_id"], :name => "projects_trackers_unique", :unique => true
|
add_index "projects_trackers", ["project_id", "tracker_id"], :name => "projects_trackers_unique", :unique => true
|
||||||
add_index "projects_trackers", ["project_id"], :name => "projects_trackers_project_id"
|
add_index "projects_trackers", ["project_id"], :name => "projects_trackers_project_id"
|
||||||
|
|
||||||
create_table "protected_branches", :force => true do |t|
|
|
||||||
t.integer "project_id", :null => false
|
|
||||||
t.string "name", :null => false
|
|
||||||
t.datetime "created_at"
|
|
||||||
t.datetime "updated_at"
|
|
||||||
t.boolean "developers_can_push", :default => false, :null => false
|
|
||||||
end
|
|
||||||
|
|
||||||
add_index "protected_branches", ["project_id"], :name => "index_protected_branches_on_project_id"
|
|
||||||
|
|
||||||
create_table "queries", :force => true do |t|
|
create_table "queries", :force => true do |t|
|
||||||
t.integer "project_id"
|
t.integer "project_id"
|
||||||
t.string "name", :default => "", :null => false
|
t.string "name", :default => "", :null => false
|
||||||
|
@ -1968,25 +1650,6 @@ ActiveRecord::Schema.define(:version => 20160606064856) do
|
||||||
t.integer "is_teacher_score", :default => 0
|
t.integer "is_teacher_score", :default => 0
|
||||||
end
|
end
|
||||||
|
|
||||||
create_table "services", :force => true do |t|
|
|
||||||
t.string "type"
|
|
||||||
t.string "title"
|
|
||||||
t.integer "project_id"
|
|
||||||
t.datetime "created_at"
|
|
||||||
t.datetime "updated_at"
|
|
||||||
t.boolean "active", :default => false, :null => false
|
|
||||||
t.text "properties"
|
|
||||||
t.boolean "template", :default => false
|
|
||||||
t.boolean "push_events", :default => true
|
|
||||||
t.boolean "issues_events", :default => true
|
|
||||||
t.boolean "merge_requests_events", :default => true
|
|
||||||
t.boolean "tag_push_events", :default => true
|
|
||||||
t.boolean "note_events", :default => true, :null => false
|
|
||||||
end
|
|
||||||
|
|
||||||
add_index "services", ["created_at", "id"], :name => "index_services_on_created_at_and_id"
|
|
||||||
add_index "services", ["project_id"], :name => "index_services_on_project_id"
|
|
||||||
|
|
||||||
create_table "settings", :force => true do |t|
|
create_table "settings", :force => true do |t|
|
||||||
t.string "name", :default => "", :null => false
|
t.string "name", :default => "", :null => false
|
||||||
t.text "value"
|
t.text "value"
|
||||||
|
@ -2025,26 +1688,6 @@ ActiveRecord::Schema.define(:version => 20160606064856) do
|
||||||
t.datetime "updated_at", :null => false
|
t.datetime "updated_at", :null => false
|
||||||
end
|
end
|
||||||
|
|
||||||
create_table "snippets", :force => true do |t|
|
|
||||||
t.string "title"
|
|
||||||
t.text "content", :limit => 2147483647
|
|
||||||
t.integer "author_id", :null => false
|
|
||||||
t.integer "project_id"
|
|
||||||
t.datetime "created_at"
|
|
||||||
t.datetime "updated_at"
|
|
||||||
t.string "file_name"
|
|
||||||
t.datetime "expires_at"
|
|
||||||
t.string "type"
|
|
||||||
t.integer "visibility_level", :default => 0, :null => false
|
|
||||||
end
|
|
||||||
|
|
||||||
add_index "snippets", ["author_id"], :name => "index_snippets_on_author_id"
|
|
||||||
add_index "snippets", ["created_at", "id"], :name => "index_snippets_on_created_at_and_id"
|
|
||||||
add_index "snippets", ["created_at"], :name => "index_snippets_on_created_at"
|
|
||||||
add_index "snippets", ["expires_at"], :name => "index_snippets_on_expires_at"
|
|
||||||
add_index "snippets", ["project_id"], :name => "index_snippets_on_project_id"
|
|
||||||
add_index "snippets", ["visibility_level"], :name => "index_snippets_on_visibility_level"
|
|
||||||
|
|
||||||
create_table "softapplications", :force => true do |t|
|
create_table "softapplications", :force => true do |t|
|
||||||
t.string "name"
|
t.string "name"
|
||||||
t.text "description"
|
t.text "description"
|
||||||
|
@ -2117,9 +1760,9 @@ ActiveRecord::Schema.define(:version => 20160606064856) do
|
||||||
t.integer "absence_penalty", :default => 0
|
t.integer "absence_penalty", :default => 0
|
||||||
t.float "system_score", :default => 0.0
|
t.float "system_score", :default => 0.0
|
||||||
t.boolean "is_test", :default => false
|
t.boolean "is_test", :default => false
|
||||||
t.float "work_score"
|
|
||||||
t.integer "simi_id"
|
t.integer "simi_id"
|
||||||
t.integer "simi_value"
|
t.integer "simi_value"
|
||||||
|
t.float "work_score"
|
||||||
end
|
end
|
||||||
|
|
||||||
add_index "student_works", ["homework_common_id", "user_id"], :name => "index_student_works_on_homework_common_id_and_user_id"
|
add_index "student_works", ["homework_common_id", "user_id"], :name => "index_student_works_on_homework_common_id_and_user_id"
|
||||||
|
@ -2167,11 +1810,11 @@ ActiveRecord::Schema.define(:version => 20160606064856) do
|
||||||
|
|
||||||
create_table "sub_domains", :force => true do |t|
|
create_table "sub_domains", :force => true do |t|
|
||||||
t.integer "org_subfield_id"
|
t.integer "org_subfield_id"
|
||||||
t.integer "priority"
|
t.integer "priority", :default => 0
|
||||||
t.string "name"
|
t.string "name"
|
||||||
t.string "field_type"
|
t.string "field_type"
|
||||||
t.integer "hide"
|
t.integer "hide", :default => 0
|
||||||
t.integer "status"
|
t.integer "status", :default => 0
|
||||||
t.datetime "created_at", :null => false
|
t.datetime "created_at", :null => false
|
||||||
t.datetime "updated_at", :null => false
|
t.datetime "updated_at", :null => false
|
||||||
end
|
end
|
||||||
|
@ -2183,17 +1826,6 @@ ActiveRecord::Schema.define(:version => 20160606064856) do
|
||||||
t.datetime "updated_at", :null => false
|
t.datetime "updated_at", :null => false
|
||||||
end
|
end
|
||||||
|
|
||||||
create_table "subscriptions", :force => true do |t|
|
|
||||||
t.integer "user_id"
|
|
||||||
t.integer "subscribable_id"
|
|
||||||
t.string "subscribable_type"
|
|
||||||
t.boolean "subscribed"
|
|
||||||
t.datetime "created_at"
|
|
||||||
t.datetime "updated_at"
|
|
||||||
end
|
|
||||||
|
|
||||||
add_index "subscriptions", ["subscribable_id", "subscribable_type", "user_id"], :name => "subscriptions_user_id_and_ref_fields", :unique => true
|
|
||||||
|
|
||||||
create_table "system_messages", :force => true do |t|
|
create_table "system_messages", :force => true do |t|
|
||||||
t.integer "user_id"
|
t.integer "user_id"
|
||||||
t.string "content"
|
t.string "content"
|
||||||
|
@ -2434,17 +2066,6 @@ ActiveRecord::Schema.define(:version => 20160606064856) do
|
||||||
add_index "users", ["id", "type"], :name => "index_users_on_id_and_type"
|
add_index "users", ["id", "type"], :name => "index_users_on_id_and_type"
|
||||||
add_index "users", ["type"], :name => "index_users_on_type"
|
add_index "users", ["type"], :name => "index_users_on_type"
|
||||||
|
|
||||||
create_table "users_star_projects", :force => true do |t|
|
|
||||||
t.integer "project_id", :null => false
|
|
||||||
t.integer "user_id", :null => false
|
|
||||||
t.datetime "created_at"
|
|
||||||
t.datetime "updated_at"
|
|
||||||
end
|
|
||||||
|
|
||||||
add_index "users_star_projects", ["project_id"], :name => "index_users_star_projects_on_project_id"
|
|
||||||
add_index "users_star_projects", ["user_id", "project_id"], :name => "index_users_star_projects_on_user_id_and_project_id", :unique => true
|
|
||||||
add_index "users_star_projects", ["user_id"], :name => "index_users_star_projects_on_user_id"
|
|
||||||
|
|
||||||
create_table "versions", :force => true do |t|
|
create_table "versions", :force => true do |t|
|
||||||
t.integer "project_id", :default => 0, :null => false
|
t.integer "project_id", :default => 0, :null => false
|
||||||
t.string "name", :default => "", :null => false
|
t.string "name", :default => "", :null => false
|
||||||
|
@ -2496,23 +2117,6 @@ ActiveRecord::Schema.define(:version => 20160606064856) do
|
||||||
t.datetime "updated_at", :null => false
|
t.datetime "updated_at", :null => false
|
||||||
end
|
end
|
||||||
|
|
||||||
create_table "web_hooks", :force => true do |t|
|
|
||||||
t.string "url"
|
|
||||||
t.integer "project_id"
|
|
||||||
t.datetime "created_at"
|
|
||||||
t.datetime "updated_at"
|
|
||||||
t.string "type", :default => "ProjectHook"
|
|
||||||
t.integer "service_id"
|
|
||||||
t.boolean "push_events", :default => true, :null => false
|
|
||||||
t.boolean "issues_events", :default => false, :null => false
|
|
||||||
t.boolean "merge_requests_events", :default => false, :null => false
|
|
||||||
t.boolean "tag_push_events", :default => false
|
|
||||||
t.boolean "note_events", :default => false, :null => false
|
|
||||||
end
|
|
||||||
|
|
||||||
add_index "web_hooks", ["created_at", "id"], :name => "index_web_hooks_on_created_at_and_id"
|
|
||||||
add_index "web_hooks", ["project_id"], :name => "index_web_hooks_on_project_id"
|
|
||||||
|
|
||||||
create_table "wechat_logs", :force => true do |t|
|
create_table "wechat_logs", :force => true do |t|
|
||||||
t.string "openid", :null => false
|
t.string "openid", :null => false
|
||||||
t.text "request_raw"
|
t.text "request_raw"
|
||||||
|
|
|
@ -27,13 +27,15 @@
|
||||||
<!--<a herf="javascript:void(0);" class="c-grey2 f13 fr mt5 mb10 post-more mr20 undis" text-auto-height>点击展开</a>-->
|
<!--<a herf="javascript:void(0);" class="c-grey2 f13 fr mt5 mb10 post-more mr20 undis" text-auto-height>点击展开</a>-->
|
||||||
<div class="cl"></div>
|
<div class="cl"></div>
|
||||||
</div>
|
</div>
|
||||||
<span class="c-grey f12 fl mr15 mt2">{{act.activity_type_name}}</span>
|
<span ng-if="act.homework_common_detail.homework_type == 1" class="c-grey f12 fl mr15 mt2">普通作业</span>
|
||||||
|
<span ng-if="act.homework_common_detail.homework_type == 2" class="c-grey f12 fl mr15 mt2">编程作业</span>
|
||||||
|
<span ng-if="act.homework_common_detail.homework_type == 3" class="c-grey f12 fl mr15 mt2">分组作业</span>
|
||||||
<span class="c-grey f12 fl mt2">{{act.latest_update}}</span>
|
<span class="c-grey f12 fl mt2">{{act.latest_update}}</span>
|
||||||
<a ng-if="!act.reply_count" ng-click="goDetail('homework',act.act_id, act.id)" class="c-grey2 fr f12"><img src="/images/wechat/w_reply.png" height="15" /><span style="vertical-align:top;">回复</span></a>
|
<a ng-if="!act.reply_count" ng-click="goDetail('homework',act.act_id, act.id)" class="c-grey2 fr f12"><img src="/images/wechat/w_reply.png" height="15" class="mr5" /><span style="vertical-align:top;">回复</span></a>
|
||||||
<a ng-if="act.reply_count" ng-click="goDetail('homework',act.act_id, act.id)" class="c-grey2 fr f12"><img src="/images/wechat/w_reply.png" height="15" /><span style="vertical-align:top;">{{act.reply_count}}</span></a>
|
<a ng-if="act.reply_count" ng-click="goDetail('homework',act.act_id, act.id)" class="c-grey2 fr f12"><img src="/images/wechat/w_reply.png" height="15" class="mr5" /><span style="vertical-align:top;">{{act.reply_count}}</span></a>
|
||||||
<div class="c-grey fr f12 mr25" ng-if="!act.praise_count" ng-click="addPraise(act);"><img src="/images/wechat/w_praise.png" height="15" /><span style="vertical-align:top;">赞</span></div>
|
<div class="c-grey fr f12 mr25" ng-if="!act.praise_count" ng-click="addPraise(act);"><img src="/images/wechat/w_praise.png" height="15" class="mr5" /><span style="vertical-align:top;">赞</span></div>
|
||||||
<div class="c-grey fr f12 mr25" ng-if="act.praise_count && !act.has_praise" ng-click="addPraise(act);"><img src="/images/wechat/w_praise.png" height="15" /><span style="vertical-align:top;">{{act.praise_count}}</span></div>
|
<div class="c-grey fr f12 mr25" ng-if="act.praise_count && !act.has_praise" ng-click="addPraise(act);"><img src="/images/wechat/w_praise.png" height="15" class="mr5" /><span style="vertical-align:top;">{{act.praise_count}}</span></div>
|
||||||
<div class="c-grey fr f12 mr25" ng-if="act.has_praise" ng-click="decreasePraise(act);"><img src="/images/wechat/w_praised.png" height="15" /><span style="vertical-align:top;">{{act.praise_count}}</span></div>
|
<div class="c-grey fr f12 mr25" ng-if="act.has_praise" ng-click="decreasePraise(act);"><img src="/images/wechat/w_praised.png" height="15" class="mr5" /><span style="vertical-align:top;">{{act.praise_count}}</span></div>
|
||||||
<div class="cl"></div>
|
<div class="cl"></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -58,11 +60,11 @@
|
||||||
</div>
|
</div>
|
||||||
<span class="c-grey f12 fl mr15 mt2">{{act.activity_type_name}}</span>
|
<span class="c-grey f12 fl mr15 mt2">{{act.activity_type_name}}</span>
|
||||||
<span class="c-grey f13 fl mt2">{{act.latest_update}}</span>
|
<span class="c-grey f13 fl mt2">{{act.latest_update}}</span>
|
||||||
<a ng-if="!act.reply_count" ng-click="goDetail('course_notice',act.act_id, act.id)" class="c-grey2 fr f12"><img src="/images/wechat/w_reply.png" height="15" /><span style="vertical-align:top;">回复</span></a>
|
<a ng-if="!act.reply_count" ng-click="goDetail('course_notice',act.act_id, act.id)" class="c-grey2 fr f12"><img src="/images/wechat/w_reply.png" height="15" class="mr5" /><span style="vertical-align:top;">回复</span></a>
|
||||||
<a ng-if="act.reply_count" ng-click="goDetail('course_notice',act.act_id, act.id)" class="c-grey2 fr f12"><img src="/images/wechat/w_reply.png" height="15" /><span style="vertical-align:top;">{{act.reply_count}}</span></a>
|
<a ng-if="act.reply_count" ng-click="goDetail('course_notice',act.act_id, act.id)" class="c-grey2 fr f12"><img src="/images/wechat/w_reply.png" height="15" class="mr5" /><span style="vertical-align:top;">{{act.reply_count}}</span></a>
|
||||||
<div class="c-grey fr f12 mr25" ng-if="!act.praise_count" ng-click="addPraise(act);"><img src="/images/wechat/w_praise.png" height="15" /><span style="vertical-align:top;">赞</span></div>
|
<div class="c-grey fr f12 mr25" ng-if="!act.praise_count" ng-click="addPraise(act);"><img src="/images/wechat/w_praise.png" height="15" class="mr5" /><span style="vertical-align:top;">赞</span></div>
|
||||||
<div class="c-grey fr f12 mr25" ng-if="act.praise_count && !act.has_praise" ng-click="addPraise(act);"><img src="/images/wechat/w_praise.png" height="15" /><span style="vertical-align:top;">{{act.praise_count}}</span></div>
|
<div class="c-grey fr f12 mr25" ng-if="act.praise_count && !act.has_praise" ng-click="addPraise(act);"><img src="/images/wechat/w_praise.png" height="15" class="mr5" /><span style="vertical-align:top;">{{act.praise_count}}</span></div>
|
||||||
<div class="c-grey fr f12 mr25" ng-if="act.has_praise" ng-click="decreasePraise(act);"><img src="/images/wechat/w_praised.png" height="15" /><span style="vertical-align:top;">{{act.praise_count}}</span></div>
|
<div class="c-grey fr f12 mr25" ng-if="act.has_praise" ng-click="decreasePraise(act);"><img src="/images/wechat/w_praised.png" height="15" class="mr5" /><span style="vertical-align:top;">{{act.praise_count}}</span></div>
|
||||||
<div class="cl"></div>
|
<div class="cl"></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -87,11 +89,11 @@
|
||||||
</div>
|
</div>
|
||||||
<span class="c-grey f12 fl mr15 mt2">{{act.activity_type_name}}</span>
|
<span class="c-grey f12 fl mr15 mt2">{{act.activity_type_name}}</span>
|
||||||
<span class="c-grey f13 fl mt2">{{act.latest_update}}</span>
|
<span class="c-grey f13 fl mt2">{{act.latest_update}}</span>
|
||||||
<a ng-if="!act.reply_count" ng-click="goDetail('course_discussion',act.act_id, act.id)" class="c-grey2 fr f12"><img src="/images/wechat/w_reply.png" height="15" /><span style="vertical-align:top;">回复</span></a>
|
<a ng-if="!act.reply_count" ng-click="goDetail('course_discussion',act.act_id, act.id)" class="c-grey2 fr f12"><img src="/images/wechat/w_reply.png" height="15" class="mr5" /><span style="vertical-align:top;">回复</span></a>
|
||||||
<a ng-if="act.reply_count" ng-click="goDetail('course_discussion',act.act_id, act.id)" class="c-grey2 fr f12"><img src="/images/wechat/w_reply.png" height="15" /><span style="vertical-align:top;">{{act.reply_count}}</span></a>
|
<a ng-if="act.reply_count" ng-click="goDetail('course_discussion',act.act_id, act.id)" class="c-grey2 fr f12"><img src="/images/wechat/w_reply.png" height="15" class="mr5" /><span style="vertical-align:top;">{{act.reply_count}}</span></a>
|
||||||
<div class="c-grey fr f12 mr25" ng-if="!act.praise_count" ng-click="addPraise(act);"><img src="/images/wechat/w_praise.png" height="15" /><span style="vertical-align:top;">赞</span></div>
|
<div class="c-grey fr f12 mr25" ng-if="!act.praise_count" ng-click="addPraise(act);"><img src="/images/wechat/w_praise.png" height="15" class="mr5" /><span style="vertical-align:top;">赞</span></div>
|
||||||
<div class="c-grey fr f12 mr25" ng-if="act.praise_count && !act.has_praise" ng-click="addPraise(act);"><img src="/images/wechat/w_praise.png" height="15" /><span style="vertical-align:top;">{{act.praise_count}}</span></div>
|
<div class="c-grey fr f12 mr25" ng-if="act.praise_count && !act.has_praise" ng-click="addPraise(act);"><img src="/images/wechat/w_praise.png" height="15" class="mr5" /><span style="vertical-align:top;">{{act.praise_count}}</span></div>
|
||||||
<div class="c-grey fr f12 mr25" ng-if="act.has_praise" ng-click="decreasePraise(act);"><img src="/images/wechat/w_praised.png" height="15" /><span style="vertical-align:top;">{{act.praise_count}}</span></div>
|
<div class="c-grey fr f12 mr25" ng-if="act.has_praise" ng-click="decreasePraise(act);"><img src="/images/wechat/w_praised.png" height="15" class="mr5" /><span style="vertical-align:top;">{{act.praise_count}}</span></div>
|
||||||
<div class="cl"></div>
|
<div class="cl"></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -134,11 +136,11 @@
|
||||||
</div>
|
</div>
|
||||||
<span class="c-grey f12 fl mr15 mt2">{{act.activity_type_name}}</span>
|
<span class="c-grey f12 fl mr15 mt2">{{act.activity_type_name}}</span>
|
||||||
<span class="c-grey f13 fl mt2">{{act.latest_update}}</span>
|
<span class="c-grey f13 fl mt2">{{act.latest_update}}</span>
|
||||||
<a ng-if="!act.reply_count" ng-click="goDetail('issues',act.act_id, act.id)" class="c-grey2 fr f12"><img src="/images/wechat/w_reply.png" height="15" /><span style="vertical-align:top;">回复</span></a>
|
<a ng-if="!act.reply_count" ng-click="goDetail('issues',act.act_id, act.id)" class="c-grey2 fr f12"><img src="/images/wechat/w_reply.png" height="15" class="mr5" /><span style="vertical-align:top;">回复</span></a>
|
||||||
<a ng-if="act.reply_count" ng-click="goDetail('issues',act.act_id, act.id)" class="c-grey2 fr f12"><img src="/images/wechat/w_reply.png" height="15" /><span style="vertical-align:top;">{{act.reply_count}}</span></a>
|
<a ng-if="act.reply_count" ng-click="goDetail('issues',act.act_id, act.id)" class="c-grey2 fr f12"><img src="/images/wechat/w_reply.png" height="15" class="mr5" /><span style="vertical-align:top;">{{act.reply_count}}</span></a>
|
||||||
<div class="c-grey fr f12 mr25" ng-if="!act.praise_count" ng-click="addPraise(act);"><img src="/images/wechat/w_praise.png" height="15" /><span style="vertical-align:top;">赞</span></div>
|
<div class="c-grey fr f12 mr25" ng-if="!act.praise_count" ng-click="addPraise(act);"><img src="/images/wechat/w_praise.png" height="15" class="mr5" /><span style="vertical-align:top;">赞</span></div>
|
||||||
<div class="c-grey fr f12 mr25" ng-if="act.praise_count && !act.has_praise" ng-click="addPraise(act);"><img src="/images/wechat/w_praise.png" height="15" /><span style="vertical-align:top;">{{act.praise_count}}</span></div>
|
<div class="c-grey fr f12 mr25" ng-if="act.praise_count && !act.has_praise" ng-click="addPraise(act);"><img src="/images/wechat/w_praise.png" height="15" class="mr5" /><span style="vertical-align:top;">{{act.praise_count}}</span></div>
|
||||||
<div class="c-grey fr f12 mr25" ng-if="act.has_praise" ng-click="decreasePraise(act);"><img src="/images/wechat/w_praised.png" height="15" /><span style="vertical-align:top;">{{act.praise_count}}</span></div>
|
<div class="c-grey fr f12 mr25" ng-if="act.has_praise" ng-click="decreasePraise(act);"><img src="/images/wechat/w_praised.png" height="15" class="mr5" /><span style="vertical-align:top;">{{act.praise_count}}</span></div>
|
||||||
<div class="cl"></div>
|
<div class="cl"></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -164,11 +166,11 @@
|
||||||
</div>
|
</div>
|
||||||
<span class="c-grey f12 fl mr15 mt2">{{act.activity_type_name}}</span>
|
<span class="c-grey f12 fl mr15 mt2">{{act.activity_type_name}}</span>
|
||||||
<span class="c-grey f13 fl mt2">{{act.latest_update}}</span>
|
<span class="c-grey f13 fl mt2">{{act.latest_update}}</span>
|
||||||
<a ng-if="!act.reply_count" ng-click="goDetail('project_discussion',act.act_id, act.id)" class="c-grey2 fr f12"><img src="/images/wechat/w_reply.png" height="15" /><span style="vertical-align:top;">回复</span></a>
|
<a ng-if="!act.reply_count" ng-click="goDetail('project_discussion',act.act_id, act.id)" class="c-grey2 fr f12"><img src="/images/wechat/w_reply.png" height="15" class="mr5" /><span style="vertical-align:top;">回复</span></a>
|
||||||
<a ng-if="act.reply_count" ng-click="goDetail('project_discussion',act.act_id, act.id)" class="c-grey2 fr f12"><img src="/images/wechat/w_reply.png" height="15" /><span style="vertical-align:top;">{{act.reply_count}}</span></a>
|
<a ng-if="act.reply_count" ng-click="goDetail('project_discussion',act.act_id, act.id)" class="c-grey2 fr f12"><img src="/images/wechat/w_reply.png" height="15" class="mr5" /><span style="vertical-align:top;">{{act.reply_count}}</span></a>
|
||||||
<div class="c-grey fr f12 mr25" ng-if="!act.praise_count" ng-click="addPraise(act);"><img src="/images/wechat/w_praise.png" height="15" /><span style="vertical-align:top;">赞</span></div>
|
<div class="c-grey fr f12 mr25" ng-if="!act.praise_count" ng-click="addPraise(act);"><img src="/images/wechat/w_praise.png" height="15" class="mr5" /><span style="vertical-align:top;">赞</span></div>
|
||||||
<div class="c-grey fr f12 mr25" ng-if="act.praise_count && !act.has_praise" ng-click="addPraise(act);"><img src="/images/wechat/w_praise.png" height="15" /><span style="vertical-align:top;">{{act.praise_count}}</span></div>
|
<div class="c-grey fr f12 mr25" ng-if="act.praise_count && !act.has_praise" ng-click="addPraise(act);"><img src="/images/wechat/w_praise.png" height="15" class="mr5" /><span style="vertical-align:top;">{{act.praise_count}}</span></div>
|
||||||
<div class="c-grey fr f12 mr25" ng-if="act.has_praise" ng-click="decreasePraise(act);"><img src="/images/wechat/w_praised.png" height="15" /><span style="vertical-align:top;">{{act.praise_count}}</span></div>
|
<div class="c-grey fr f12 mr25" ng-if="act.has_praise" ng-click="decreasePraise(act);"><img src="/images/wechat/w_praised.png" height="15" class="mr5" /><span style="vertical-align:top;">{{act.praise_count}}</span></div>
|
||||||
<div class="cl"></div>
|
<div class="cl"></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -207,11 +209,11 @@
|
||||||
<div class="cl"></div>
|
<div class="cl"></div>
|
||||||
</div>
|
</div>
|
||||||
<span class="c-grey f13 fl mt2">{{act.latest_update}}</span>
|
<span class="c-grey f13 fl mt2">{{act.latest_update}}</span>
|
||||||
<a ng-if="!act.reply_count" ng-click="goDetail('journal_for_message',act.act_id, act.id)" class="c-grey2 fr f12"><img src="/images/wechat/w_reply.png" height="15" /><span style="vertical-align:top;">回复</span></a>
|
<a ng-if="!act.reply_count" ng-click="goDetail('journal_for_message',act.act_id, act.id)" class="c-grey2 fr f12"><img src="/images/wechat/w_reply.png" height="15" class="mr5" /><span style="vertical-align:top;">回复</span></a>
|
||||||
<a ng-if="act.reply_count" ng-click="goDetail('journal_for_message',act.act_id, act.id)" class="c-grey2 fr f12"><img src="/images/wechat/w_reply.png" height="15" /><span style="vertical-align:top;">{{act.reply_count}}</span></a>
|
<a ng-if="act.reply_count" ng-click="goDetail('journal_for_message',act.act_id, act.id)" class="c-grey2 fr f12"><img src="/images/wechat/w_reply.png" height="15" class="mr5" /><span style="vertical-align:top;">{{act.reply_count}}</span></a>
|
||||||
<div class="c-grey fr f12 mr25" ng-if="!act.praise_count" ng-click="addPraise(act);"><img src="/images/wechat/w_praise.png" height="15" /><span style="vertical-align:top;">赞</span></div>
|
<div class="c-grey fr f12 mr25" ng-if="!act.praise_count" ng-click="addPraise(act);"><img src="/images/wechat/w_praise.png" height="15" class="mr5" /><span style="vertical-align:top;">赞</span></div>
|
||||||
<div class="c-grey fr f12 mr25" ng-if="act.praise_count && !act.has_praise" ng-click="addPraise(act);"><img src="/images/wechat/w_praise.png" height="15" /><span style="vertical-align:top;">{{act.praise_count}}</span></div>
|
<div class="c-grey fr f12 mr25" ng-if="act.praise_count && !act.has_praise" ng-click="addPraise(act);"><img src="/images/wechat/w_praise.png" height="15" class="mr5" /><span style="vertical-align:top;">{{act.praise_count}}</span></div>
|
||||||
<div class="c-grey fr f12 mr25" ng-if="act.has_praise" ng-click="decreasePraise(act);"><img src="/images/wechat/w_praised.png" height="15" /><span style="vertical-align:top;">{{act.praise_count}}</span></div>
|
<div class="c-grey fr f12 mr25" ng-if="act.has_praise" ng-click="decreasePraise(act);"><img src="/images/wechat/w_praised.png" height="15" class="mr5" /><span style="vertical-align:top;">{{act.praise_count}}</span></div>
|
||||||
<div class="cl"></div>
|
<div class="cl"></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -236,11 +238,11 @@
|
||||||
<div class="cl"></div>
|
<div class="cl"></div>
|
||||||
</div>
|
</div>
|
||||||
<span class="c-grey f13 fl mt2">{{act.latest_update}}</span>
|
<span class="c-grey f13 fl mt2">{{act.latest_update}}</span>
|
||||||
<a ng-if="!act.reply_count" ng-click="goDetail('blog_comment',act.act_id, act.id)" class="c-grey2 fr f12"><img src="/images/wechat/w_reply.png" height="15" /><span style="vertical-align:top;">回复</span></a>
|
<a ng-if="!act.reply_count" ng-click="goDetail('blog_comment',act.act_id, act.id)" class="c-grey2 fr f12"><img src="/images/wechat/w_reply.png" height="15" class="mr5" /><span style="vertical-align:top;">回复</span></a>
|
||||||
<a ng-if="act.reply_count" ng-click="goDetail('blog_comment',act.act_id, act.id)" class="c-grey2 fr f12"><img src="/images/wechat/w_reply.png" height="15" /><span style="vertical-align:top;">{{act.reply_count}}</span></a>
|
<a ng-if="act.reply_count" ng-click="goDetail('blog_comment',act.act_id, act.id)" class="c-grey2 fr f12"><img src="/images/wechat/w_reply.png" height="15" class="mr5" /><span style="vertical-align:top;">{{act.reply_count}}</span></a>
|
||||||
<div class="c-grey fr f12 mr25" ng-if="!act.praise_count" ng-click="addPraise(act);"><img src="/images/wechat/w_praise.png" height="15" /><span style="vertical-align:top;">赞</span></div>
|
<div class="c-grey fr f12 mr25" ng-if="!act.praise_count" ng-click="addPraise(act);"><img src="/images/wechat/w_praise.png" height="15" class="mr5" /><span style="vertical-align:top;">赞</span></div>
|
||||||
<div class="c-grey fr f12 mr25" ng-if="act.praise_count && !act.has_praise" ng-click="addPraise(act);"><img src="/images/wechat/w_praise.png" height="15" /><span style="vertical-align:top;">{{act.praise_count}}</span></div>
|
<div class="c-grey fr f12 mr25" ng-if="act.praise_count && !act.has_praise" ng-click="addPraise(act);"><img src="/images/wechat/w_praise.png" height="15" class="mr5" /><span style="vertical-align:top;">{{act.praise_count}}</span></div>
|
||||||
<div class="c-grey fr f12 mr25" ng-if="act.has_praise" ng-click="decreasePraise(act);"><img src="/images/wechat/w_praised.png" height="15" /><span style="vertical-align:top;">{{act.praise_count}}</span></div>
|
<div class="c-grey fr f12 mr25" ng-if="act.has_praise" ng-click="decreasePraise(act);"><img src="/images/wechat/w_praised.png" height="15" class="mr5" /><span style="vertical-align:top;">{{act.praise_count}}</span></div>
|
||||||
<div class="cl"></div>
|
<div class="cl"></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -17,12 +17,7 @@
|
||||||
<div ng-view>
|
<div ng-view>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<script src="/javascripts/wechat/build/angular.all.min.js"></script>
|
||||||
<script src="/javascripts/wechat/angular.js"></script>
|
|
||||||
<script src="/javascripts/wechat/angular-route.js"></script>
|
|
||||||
<script src="/javascripts/wechat/angular-sanitize.min.js"></script>
|
|
||||||
<script src="/javascripts/wechat/angular-cookies.js"></script>
|
|
||||||
<script src="/javascripts/jquery-1.3.2.js"></script>
|
|
||||||
<script src="/javascripts/wechat/app.js"></script>
|
<script src="/javascripts/wechat/app.js"></script>
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
|
|
|
@ -5,10 +5,10 @@
|
||||||
<div class="post-container">
|
<div class="post-container">
|
||||||
<div class="post-wrapper">
|
<div class="post-wrapper">
|
||||||
<div class="post-main">
|
<div class="post-main">
|
||||||
<div class="post-title mb5"><span class="c-grey3 f15 fb">{{blog.title}}</span></div>
|
<div class="post-title mb5"><span class="c-grey3 f15 fb">{{blog.title}}</span><img ng-if="blog.locked" src="/images/locked.png" style="display:inline-block;" /></div>
|
||||||
<div class="post-title"><a herf="javascript:void(0);" class="mr10">{{blog.user.realname}}</a>发表博客</div>
|
<div class="post-title"><a herf="javascript:void(0);" class="mr10">{{blog.user.realname}}</a>发表博客</div>
|
||||||
<div class="cl"></div>
|
<div class="cl"></div>
|
||||||
<div class="f13 c-grey3 mt10" ng-bind-html="blog.content|safeHtml"></div>
|
<div class="f13 c-grey3 mt10 text-control" ng-bind-html="blog.content|safeHtml"></div>
|
||||||
<div class="cl"></div>
|
<div class="cl"></div>
|
||||||
<span class="c-grey f13 mt10 fl">{{blog.created_at}}</span>
|
<span class="c-grey f13 mt10 fl">{{blog.created_at}}</span>
|
||||||
<div class="cl"></div>
|
<div class="cl"></div>
|
||||||
|
@ -24,7 +24,7 @@
|
||||||
<div class="post-reply-avatar fl"><img ng-src="{{journal.user.img_url}}" width="45" height="45" class="border-radius" /></div>
|
<div class="post-reply-avatar fl"><img ng-src="{{journal.user.img_url}}" width="45" height="45" class="border-radius" /></div>
|
||||||
<div class="ml55">
|
<div class="ml55">
|
||||||
<div class="post-reply-user hidden">{{journal.user.realname}}</div>
|
<div class="post-reply-user hidden">{{journal.user.realname}}</div>
|
||||||
<pre class="post-reply-content c-grey2 mb10" ng-bind-html="journal.content|safeHtml"></pre>
|
<div class="post-reply-content c-grey2 mb10" ng-bind-html="journal.content|safeHtml"></div>
|
||||||
<div class="post-reply-date fl">{{journal.lasted_comment}}</div>
|
<div class="post-reply-date fl">{{journal.lasted_comment}}</div>
|
||||||
<div class="post-reply-trigger fr undis">回复</div>
|
<div class="post-reply-trigger fr undis">回复</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -32,7 +32,7 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="post-input-wrap">
|
<div ng-if="!blog.locked" class="post-input-wrap">
|
||||||
<div class="post-reply-row">
|
<div class="post-reply-row">
|
||||||
<!--<div class="post-reply-avatar fl"><img src="images/post-avatar.jpg" width="30" height="30" /></div>-->
|
<!--<div class="post-reply-avatar fl"><img src="images/post-avatar.jpg" width="30" height="30" /></div>-->
|
||||||
<div class="post-input-container">
|
<div class="post-input-container">
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
<div loading-spinner></div>
|
<div loading-spinner></div>
|
||||||
<div class="post-wrapper">
|
<div class="post-wrapper">
|
||||||
<div class="post-main">
|
<div class="post-main">
|
||||||
<div class="post-title mb5"><span class="c-grey3 f15 fb">{{discussion.subject}}</span></div>
|
<div class="post-title mb5"><span class="c-grey3 f15 fb">{{discussion.subject}}</span><img ng-if="discussion.locked" src="/images/locked.png" style="display:inline-block;" /></div>
|
||||||
<table class="post-detail-info"><tr>
|
<table class="post-detail-info"><tr>
|
||||||
<td class="text-nowrap v-top">发布者:</td>
|
<td class="text-nowrap v-top">发布者:</td>
|
||||||
<td>{{discussion.user.realname}}</td>
|
<td>{{discussion.user.realname}}</td>
|
||||||
|
@ -15,7 +15,7 @@
|
||||||
<td class="text-nowrap v-top">来 源:</td>
|
<td class="text-nowrap v-top">来 源:</td>
|
||||||
<td>{{discussion.course_project_name}} | 课程问答区</td>
|
<td>{{discussion.course_project_name}} | 课程问答区</td>
|
||||||
</tr></table>
|
</tr></table>
|
||||||
<div class="f13 c-grey3 mt10" ng-bind-html="discussion.content|safeHtml"></div>
|
<div class="f13 c-grey3 mt10 text-control" ng-bind-html="discussion.content|safeHtml"></div>
|
||||||
<div class="cl"></div>
|
<div class="cl"></div>
|
||||||
<span class="c-grey f13 mt10 fl">{{discussion.created_on}}</span>
|
<span class="c-grey f13 mt10 fl">{{discussion.created_on}}</span>
|
||||||
<div class="cl"></div>
|
<div class="cl"></div>
|
||||||
|
@ -31,7 +31,7 @@
|
||||||
<div class="post-reply-avatar fl"><img ng-src="{{journal.user.img_url}}" width="45" height="45" class="border-radius" /></div>
|
<div class="post-reply-avatar fl"><img ng-src="{{journal.user.img_url}}" width="45" height="45" class="border-radius" /></div>
|
||||||
<div class="ml55">
|
<div class="ml55">
|
||||||
<div class="post-reply-user hidden">{{journal.user.realname}}</div>
|
<div class="post-reply-user hidden">{{journal.user.realname}}</div>
|
||||||
<pre class="post-reply-content c-grey2 mb10" ng-bind-html="journal.content|safeHtml"></pre>
|
<div class="post-reply-content c-grey2 mb10" ng-bind-html="journal.content|safeHtml"></div>
|
||||||
<div class="post-reply-date fl">{{journal.lasted_comment}}</div>
|
<div class="post-reply-date fl">{{journal.lasted_comment}}</div>
|
||||||
<div class="post-reply-trigger fr undis">回复</div>
|
<div class="post-reply-trigger fr undis">回复</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -39,7 +39,7 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="post-input-wrap">
|
<div ng-if="!discussion.locked" class="post-input-wrap">
|
||||||
<div class="post-reply-row">
|
<div class="post-reply-row">
|
||||||
<!--<div class="post-reply-avatar fl"><img src="images/post-avatar.jpg" width="30" height="30" /></div>-->
|
<!--<div class="post-reply-avatar fl"><img src="images/post-avatar.jpg" width="30" height="30" /></div>-->
|
||||||
<div class="post-input-container">
|
<div class="post-input-container">
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
<td class="text-nowrap v-top">来 源:</td>
|
<td class="text-nowrap v-top">来 源:</td>
|
||||||
<td>{{news.course_name}} | 课程通知</td>
|
<td>{{news.course_name}} | 课程通知</td>
|
||||||
</tr></table>
|
</tr></table>
|
||||||
<div class="f13 c-grey3 mt10" ng-bind-html="news.description|safeHtml"></div>
|
<div class="f13 c-grey3 mt10 text-control" ng-bind-html="news.description|safeHtml"></div>
|
||||||
<div class="cl"></div>
|
<div class="cl"></div>
|
||||||
<span class="c-grey f13 mt10 fl">{{news.created_on}}</span>
|
<span class="c-grey f13 mt10 fl">{{news.created_on}}</span>
|
||||||
<div class="cl"></div>
|
<div class="cl"></div>
|
||||||
|
@ -30,7 +30,7 @@
|
||||||
<div class="post-reply-avatar fl"><img ng-src="{{comments.author.img_url}}" width="45" height="45" class="border-radius" /></div>
|
<div class="post-reply-avatar fl"><img ng-src="{{comments.author.img_url}}" width="45" height="45" class="border-radius" /></div>
|
||||||
<div class="ml55">
|
<div class="ml55">
|
||||||
<div class="post-reply-user hidden">{{comments.author.realname}}</div>
|
<div class="post-reply-user hidden">{{comments.author.realname}}</div>
|
||||||
<pre class="post-reply-content c-grey2 mb10" ng-bind-html="comments.comments|safeHtml"></pre>
|
<div class="post-reply-content c-grey2 mb10" ng-bind-html="comments.comments|safeHtml"></div>
|
||||||
<div class="post-reply-date fl">{{comments.created_on}}</div>
|
<div class="post-reply-date fl">{{comments.created_on}}</div>
|
||||||
<div class="post-reply-trigger fr undis">回复</div>
|
<div class="post-reply-trigger fr undis">回复</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -15,8 +15,16 @@
|
||||||
<tr>
|
<tr>
|
||||||
<td class="text-nowrap v-top">来 源:</td>
|
<td class="text-nowrap v-top">来 源:</td>
|
||||||
<td>{{homework.course_name}} | 课程作业</td>
|
<td>{{homework.course_name}} | 课程作业</td>
|
||||||
</tr></table>
|
</tr>
|
||||||
<div class="f13 c-grey3 mt10 mb10" ng-bind-html="homework.description|safeHtml"></div>
|
<tr>
|
||||||
|
<td class="text-nowrap v-top">类 别:</td>
|
||||||
|
<td><span ng-if="homework.homework_type == 1" class="c-grey f12 fl mr15 mt2">普通作业</span>
|
||||||
|
<span ng-if="homework.homework_type == 2" class="c-grey f12 fl mr15 mt2">编程作业</span>
|
||||||
|
<span ng-if="homework.homework_type == 3" class="c-grey f12 fl mr15 mt2">分组作业</span>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<div class="f13 c-grey3 mt10 mb10 text-control" ng-bind-html="homework.description|safeHtml"></div>
|
||||||
<span class="c-grey f13">迟交扣分:{{homework.late_penalty}}分</span><br/>
|
<span class="c-grey f13">迟交扣分:{{homework.late_penalty}}分</span><br/>
|
||||||
<span ng-if="!homework.anonymous_comment" class="c-grey f13">缺评扣分:{{homework.absence_penalty}}分/作品<br /></span>
|
<span ng-if="!homework.anonymous_comment" class="c-grey f13">缺评扣分:{{homework.absence_penalty}}分/作品<br /></span>
|
||||||
<span ng-if="!homework.anonymous_comment" class="c-grey f13">匿评开启时间:{{homework.evaluation_start}}<br /></span>
|
<span ng-if="!homework.anonymous_comment" class="c-grey f13">匿评开启时间:{{homework.evaluation_start}}<br /></span>
|
||||||
|
@ -36,7 +44,7 @@
|
||||||
<div class="post-reply-avatar fl"><img ng-src="{{journal.user.img_url}}" width="45" height="45" class="border-radius" /></div>
|
<div class="post-reply-avatar fl"><img ng-src="{{journal.user.img_url}}" width="45" height="45" class="border-radius" /></div>
|
||||||
<div class="ml55">
|
<div class="ml55">
|
||||||
<div class="post-reply-user hidden">{{journal.user.realname}}</div>
|
<div class="post-reply-user hidden">{{journal.user.realname}}</div>
|
||||||
<pre class="post-reply-content c-grey2 mb10" ng-bind-html="journal.notes|safeHtml"></pre>
|
<div class="post-reply-content c-grey2 mb10" ng-bind-html="journal.notes|safeHtml"></div>
|
||||||
<div class="post-reply-date fl">{{journal.lasted_comment}}</div>
|
<div class="post-reply-date fl">{{journal.lasted_comment}}</div>
|
||||||
<div class="post-reply-trigger fr undis">回复</div>
|
<div class="post-reply-trigger fr undis">回复</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
<td class="text-nowrap v-top">来 源:</td>
|
<td class="text-nowrap v-top">来 源:</td>
|
||||||
<td>{{issue.project_name}} | 项目问题</td>
|
<td>{{issue.project_name}} | 项目问题</td>
|
||||||
</tr></table>
|
</tr></table>
|
||||||
<div class="f13 c-grey3 mt10 mb10" ng-bind-html="issue.description|safeHtml"></div>
|
<div class="f13 c-grey3 mt10 mb10 text-control" ng-bind-html="issue.description|safeHtml"></div>
|
||||||
<span class="c-grey f13">状 态:{{issue.issue_status}}<br>
|
<span class="c-grey f13">状 态:{{issue.issue_status}}<br>
|
||||||
优先级:{{issue.issue_priority}}<br />
|
优先级:{{issue.issue_priority}}<br />
|
||||||
指派给:{{issue.issue_assigned_to}}<br />
|
指派给:{{issue.issue_assigned_to}}<br />
|
||||||
|
@ -34,7 +34,7 @@
|
||||||
<div class="post-reply-avatar fl"><img ng-src="{{journal.user.img_url}}" width="45" height="45" class="border-radius" /></div>
|
<div class="post-reply-avatar fl"><img ng-src="{{journal.user.img_url}}" width="45" height="45" class="border-radius" /></div>
|
||||||
<div class="ml55">
|
<div class="ml55">
|
||||||
<div class="post-reply-user hidden">{{journal.user.realname}}</div>
|
<div class="post-reply-user hidden">{{journal.user.realname}}</div>
|
||||||
<pre class="post-reply-content c-grey2 mb10" ng-bind-html="journal.notes|safeHtml"></pre>
|
<div class="post-reply-content c-grey2 mb10" ng-bind-html="journal.notes|safeHtml"></div>
|
||||||
<div class="post-reply-date fl">{{journal.created_on}}</div>
|
<div class="post-reply-date fl">{{journal.created_on}}</div>
|
||||||
<div class="post-reply-trigger fr undis">回复</div>
|
<div class="post-reply-trigger fr undis">回复</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
<div class="post-title mb5"><a herf="javascript:void(0);" class="mr10">{{message.user.realname}}</a><span style="vertical-align:top;">给您留言了</span><br /></div>
|
<div class="post-title mb5"><a herf="javascript:void(0);" class="mr10">{{message.user.realname}}</a><span style="vertical-align:top;">给您留言了</span><br /></div>
|
||||||
<div class="post-title">{{message.created_on}}</div>
|
<div class="post-title">{{message.created_on}}</div>
|
||||||
<div class="cl"></div>
|
<div class="cl"></div>
|
||||||
<div class="f13 c-grey3 mt10" ng-bind-html="message.notes|safeHtml"></div>
|
<div class="f13 c-grey3 mt10 text-control" ng-bind-html="message.notes|safeHtml"></div>
|
||||||
<div class="cl"></div>
|
<div class="cl"></div>
|
||||||
</div>
|
</div>
|
||||||
<div class="post-interactive border-bottom">
|
<div class="post-interactive border-bottom">
|
||||||
|
@ -22,7 +22,7 @@
|
||||||
<div class="post-reply-avatar fl"><img ng-src="{{journal.user.img_url}}" width="45" height="45" class="border-radius" /></div>
|
<div class="post-reply-avatar fl"><img ng-src="{{journal.user.img_url}}" width="45" height="45" class="border-radius" /></div>
|
||||||
<div class="ml55">
|
<div class="ml55">
|
||||||
<div class="post-reply-user hidden">{{journal.user.realname}}</div>
|
<div class="post-reply-user hidden">{{journal.user.realname}}</div>
|
||||||
<pre class="post-reply-content c-grey2 mb10" ng-bind-html="journal.notes|safeHtml"></pre>
|
<div class="post-reply-content c-grey2 mb10" ng-bind-html="journal.notes|safeHtml"></div>
|
||||||
<div class="post-reply-date fl">{{journal.lasted_comment}}</div>
|
<div class="post-reply-date fl">{{journal.lasted_comment}}</div>
|
||||||
<div class="post-reply-trigger fr undis">回复</div>
|
<div class="post-reply-trigger fr undis">回复</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
<div class="post-container">
|
<div class="post-container">
|
||||||
<div class="post-wrapper">
|
<div class="post-wrapper">
|
||||||
<div class="post-main">
|
<div class="post-main">
|
||||||
<div class="post-title mb5"><span class="c-grey3 f15 fb">{{discussion.subject}}</span></div>
|
<div class="post-title mb5"><span class="c-grey3 f15 fb">{{discussion.subject}}</span><img ng-if="discussion.locked" src="/images/locked.png" style="display:inline-block;" /></div>
|
||||||
<table class="post-detail-info"><tr>
|
<table class="post-detail-info"><tr>
|
||||||
<td class="text-nowrap v-top">发布者:</td>
|
<td class="text-nowrap v-top">发布者:</td>
|
||||||
<td>{{discussion.user.realname}}</td>
|
<td>{{discussion.user.realname}}</td>
|
||||||
|
@ -14,7 +14,7 @@
|
||||||
<td class="text-nowrap v-top">来 源:</td>
|
<td class="text-nowrap v-top">来 源:</td>
|
||||||
<td>{{discussion.course_project_name}} | 项目讨论区</td>
|
<td>{{discussion.course_project_name}} | 项目讨论区</td>
|
||||||
</tr></table>
|
</tr></table>
|
||||||
<div class="f13 c-grey3 mt10" ng-bind-html="discussion.content|safeHtml"></div>
|
<div class="f13 c-grey3 mt10 text-control" ng-bind-html="discussion.content|safeHtml"></div>
|
||||||
<div class="cl"></div>
|
<div class="cl"></div>
|
||||||
<span class="c-grey f13 mt10 fl">{{discussion.created_on}}</span>
|
<span class="c-grey f13 mt10 fl">{{discussion.created_on}}</span>
|
||||||
<div class="cl"></div>
|
<div class="cl"></div>
|
||||||
|
@ -30,7 +30,7 @@
|
||||||
<div class="post-reply-avatar fl"><img ng-src="{{journal.user.img_url}}" width="45" height="45" class="border-radius" /></div>
|
<div class="post-reply-avatar fl"><img ng-src="{{journal.user.img_url}}" width="45" height="45" class="border-radius" /></div>
|
||||||
<div class="ml55">
|
<div class="ml55">
|
||||||
<div class="post-reply-user hidden">{{journal.user.realname}}</div>
|
<div class="post-reply-user hidden">{{journal.user.realname}}</div>
|
||||||
<pre class="post-reply-content c-grey2 mb10" ng-bind-html="journal.content|safeHtml"></pre>
|
<div class="post-reply-content c-grey2 mb10" ng-bind-html="journal.content|safeHtml"></div>
|
||||||
<div class="post-reply-date fl">{{journal.lasted_comment}}</div>
|
<div class="post-reply-date fl">{{journal.lasted_comment}}</div>
|
||||||
<div class="post-reply-trigger fr undis">回复</div>
|
<div class="post-reply-trigger fr undis">回复</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -38,7 +38,7 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="post-input-wrap">
|
<div ng-if="!discussion.locked" class="post-input-wrap">
|
||||||
<div class="post-reply-row">
|
<div class="post-reply-row">
|
||||||
<!--<div class="post-reply-avatar fl"><img src="images/post-avatar.jpg" width="30" height="30" /></div>-->
|
<!--<div class="post-reply-avatar fl"><img src="images/post-avatar.jpg" width="30" height="30" /></div>-->
|
||||||
<div class="post-input-container">
|
<div class="post-input-container">
|
||||||
|
|
|
@ -1,14 +1,14 @@
|
||||||
var app = angular.module('wechat', ['ngRoute','ngCookies']);
|
var app = angular.module('wechat', ['ngRoute']);
|
||||||
var apiUrl = '/api/v1/';
|
var apiUrl = '/api/v1/';
|
||||||
var debug = false; //调试标志,如果在本地请置为true
|
var debug = false; //调试标志,如果在本地请置为true
|
||||||
|
|
||||||
if(debug===true){
|
if(debug===true){
|
||||||
//apiUrl = 'http://localhost:3000/api/v1/';
|
//apiUrl = 'http://localhost:3000/api/v1/';
|
||||||
apiUrl = 'https://www.trustie.net/api/v1/';
|
apiUrl = 'http://www.trustie.net/api/v1/';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
app.factory('auth', function($http,$routeParams, $cookies, $q){
|
app.factory('auth', function($http,$routeParams, $q){
|
||||||
var _openid = '';
|
var _openid = '';
|
||||||
|
|
||||||
if(typeof g_openid !== 'undefined'){
|
if(typeof g_openid !== 'undefined'){
|
||||||
|
@ -16,7 +16,7 @@ app.factory('auth', function($http,$routeParams, $cookies, $q){
|
||||||
}
|
}
|
||||||
|
|
||||||
if(debug===true){
|
if(debug===true){
|
||||||
_openid = "1";
|
_openid = "orgVLv8TlS6e7FDiI6xdTGHRaaRo"; //guange的帐号
|
||||||
}
|
}
|
||||||
|
|
||||||
var getOpenId = function() {
|
var getOpenId = function() {
|
||||||
|
@ -31,15 +31,6 @@ app.factory('auth', function($http,$routeParams, $cookies, $q){
|
||||||
method: 'POST'
|
method: 'POST'
|
||||||
}).then(function successCallback(response) {
|
}).then(function successCallback(response) {
|
||||||
_openid = response.data.openid;
|
_openid = response.data.openid;
|
||||||
if(typeof _openid !== 'undefined' && _openid.length>0){
|
|
||||||
if(debug !== true){ //如果是生产环境,就存到cookies中
|
|
||||||
$cookies.put("openid", _openid);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if(debug!==true){//考虑从cookies中取出
|
|
||||||
_openid = $cookies.get('openid');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
deferred.resolve(_openid);
|
deferred.resolve(_openid);
|
||||||
}, function errorCallback(response) {
|
}, function errorCallback(response) {
|
||||||
deferred.reject(response);
|
deferred.reject(response);
|
||||||
|
@ -140,12 +131,13 @@ app.factory('common', function($http, auth, $routeParams){
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var temp = data.comment.replace(/\n/g,'<br/>');
|
||||||
|
|
||||||
var userInfo = {
|
var userInfo = {
|
||||||
type: type,
|
type: type,
|
||||||
content: data.comment,
|
content: temp,
|
||||||
openid: auth.openid()
|
openid: auth.openid()
|
||||||
};
|
};
|
||||||
|
|
||||||
//回复按钮禁用
|
//回复按钮禁用
|
||||||
data.disabled = true;
|
data.disabled = true;
|
||||||
|
|
||||||
|
@ -478,24 +470,13 @@ app.directive('inputAuto',function(){
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
app.directive('loadingSpinner', function ($http) {
|
app.directive('loadingSpinner', ['$http', function ($http) {
|
||||||
return {
|
return {
|
||||||
restrict: 'A',
|
restrict: 'A',
|
||||||
replace: true,
|
replace: true,
|
||||||
template: '<div class="loading-bg"><div class="loading-box"><img src="/images/loading.gif" alt=""/><span>加载中...</span></div></div>',
|
template: '<div ng-show="activeCalls>0" class="loading-bg"><div class="loading-box"><img src="/images/loading.gif" alt=""/><span>加载中...</span></div></div>',
|
||||||
link: function (scope, element, attrs) {
|
|
||||||
|
|
||||||
scope.$watch('activeCalls', function (newVal, oldVal) {
|
|
||||||
if (newVal == 0) {
|
|
||||||
$(element).hide();
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
$(element).show();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
});
|
}]);
|
||||||
|
|
||||||
app.config(['$routeProvider',"$httpProvider", "$locationProvider",function ($routeProvider, $httpProvider, $locationProvider) {
|
app.config(['$routeProvider',"$httpProvider", "$locationProvider",function ($routeProvider, $httpProvider, $locationProvider) {
|
||||||
var rootPath = '/assets/wechat/'
|
var rootPath = '/assets/wechat/'
|
||||||
|
|
File diff suppressed because one or more lines are too long
|
@ -0,0 +1,10 @@
|
||||||
|
var gulp = require('gulp'),
|
||||||
|
uglify = require('gulp-uglify');
|
||||||
|
var concat = require('gulp-concat');
|
||||||
|
|
||||||
|
gulp.task('minify', function () {
|
||||||
|
gulp.src(['../jquery-1.3.2.js','angular.js', 'angular-route.js', 'angular-sanitize.min.js'])
|
||||||
|
.pipe(uglify())
|
||||||
|
.pipe(concat('angular.all.min.js'))
|
||||||
|
.pipe(gulp.dest('build'))
|
||||||
|
});
|
File diff suppressed because one or more lines are too long
|
@ -89,7 +89,9 @@ h4{ font-size:14px; }
|
||||||
.ml100{ margin-left:100px;}
|
.ml100{ margin-left:100px;}
|
||||||
.ml110{ margin-left:110px;}
|
.ml110{ margin-left:110px;}
|
||||||
.ml125 { margin-left:125px;}
|
.ml125 { margin-left:125px;}
|
||||||
|
.ml130 { margin-left:130px;}
|
||||||
.ml200 {margin-left:200px;}
|
.ml200 {margin-left:200px;}
|
||||||
|
.ml250 {margin-left:250px;}
|
||||||
.ml320{ margin-left:320px;}
|
.ml320{ margin-left:320px;}
|
||||||
.ml150 { margin-left:150px;}
|
.ml150 { margin-left:150px;}
|
||||||
.mr-5 {margin-right:-5px;}
|
.mr-5 {margin-right:-5px;}
|
||||||
|
|
|
@ -4,16 +4,9 @@
|
||||||
/*基本样式*/
|
/*基本样式*/
|
||||||
body,table,input,textarea,select,button { font-family: "微软雅黑","宋体";}
|
body,table,input,textarea,select,button { font-family: "微软雅黑","宋体";}
|
||||||
h1,h2,h3,h4,h5,p,pre {padding:0px; margin:0px;}
|
h1,h2,h3,h4,h5,p,pre {padding:0px; margin:0px;}
|
||||||
blockquote {
|
img {max-width:100%;}
|
||||||
border:1px solid #d4d4d4;
|
blockquote {border:1px solid #d4d4d4; padding: 0.6em; margin-left: 1.4em; margin-right: 0.4em; border-radius: 4px; font-family: "Microsoft YaHei"; background-size: 100% 100%; margin-top:5px;}
|
||||||
padding: 0.6em;
|
.text-control {word-break:normal; word-wrap:break-word;}
|
||||||
margin-left: 1.4em;
|
|
||||||
margin-right: 0.4em;
|
|
||||||
border-radius: 4px;
|
|
||||||
font-family: "Microsoft YaHei";
|
|
||||||
background-size: 100% 100%;
|
|
||||||
margin-top:5px;
|
|
||||||
}
|
|
||||||
.f12 {font-size:12px;}
|
.f12 {font-size:12px;}
|
||||||
.f13 {font-size:13px;}
|
.f13 {font-size:13px;}
|
||||||
.f15 {font-size:15px;}
|
.f15 {font-size:15px;}
|
||||||
|
@ -24,6 +17,7 @@ blockquote {
|
||||||
.mb5 {margin-bottom:5px;}
|
.mb5 {margin-bottom:5px;}
|
||||||
.mb10 {margin-bottom:10px;}
|
.mb10 {margin-bottom:10px;}
|
||||||
.ml10 {margin-left:10px;}
|
.ml10 {margin-left:10px;}
|
||||||
|
.mr5 {margin-right:5px;}
|
||||||
.mr10 {margin-right:10px;}
|
.mr10 {margin-right:10px;}
|
||||||
.ml15 {margin-left:15px;}
|
.ml15 {margin-left:15px;}
|
||||||
.mr15 {margin-right:15px;}
|
.mr15 {margin-right:15px;}
|
||||||
|
@ -62,8 +56,7 @@ a.underline {text-decoration:underline;}
|
||||||
.fl {float:left;}
|
.fl {float:left;}
|
||||||
.fr {float:right;}
|
.fr {float:right;}
|
||||||
.cl {clear:both; overflow:hidden;}
|
.cl {clear:both; overflow:hidden;}
|
||||||
.post-content {width:100%; font-size:13px; line-height:18px; height:90px; overflow:hidden; word-break:break-all; word-wrap:break-word;}
|
.post-content {width:100%; font-size:13px; line-height:18px; height:95px; overflow:hidden; word-break:break-all; word-wrap:break-word;}
|
||||||
.post-content img {max-width:100%;}
|
|
||||||
.post-interactive {width:100%; height:35px; line-height:35px; vertical-align:middle; border-top:1px solid #e6e6e6; background-color:#f8f9fb;}
|
.post-interactive {width:100%; height:35px; line-height:35px; vertical-align:middle; border-top:1px solid #e6e6e6; background-color:#f8f9fb;}
|
||||||
.post-interactive-column,
|
.post-interactive-column,
|
||||||
.post-interactive-reply,
|
.post-interactive-reply,
|
||||||
|
@ -71,16 +64,16 @@ a.underline {text-decoration:underline;}
|
||||||
.more-wrap {width:100%;}
|
.more-wrap {width:100%;}
|
||||||
.more-events {width:98%; font-size:13px; text-align:center; margin:0 auto; padding: 5px 0; border:1px solid #e6e6e6; border-radius:3px; background-color:#f8f9fb; }
|
.more-events {width:98%; font-size:13px; text-align:center; margin:0 auto; padding: 5px 0; border:1px solid #e6e6e6; border-radius:3px; background-color:#f8f9fb; }
|
||||||
.border-bottom {border-bottom:1px solid #e6e6e6;}
|
.border-bottom {border-bottom:1px solid #e6e6e6;}
|
||||||
.post-reply-wrap, .post-input-wrap {width:100%; line-height:18px; background-color:#f8f9fb;}
|
.post-reply-wrap, .post-input-wrap {width:100%; background-color:#f8f9fb;}
|
||||||
.post-reply-row {padding:10px; color:#9a9a9a;}
|
.post-reply-row {padding:10px; color:#9a9a9a;}
|
||||||
.post-reply-avatar {width:45px; height:30px; text-align:center; margin-right:10px;}
|
.post-reply-avatar {width:45px; height:30px; text-align:center; margin-right:10px;}
|
||||||
.post-reply-user {font-size:13px; text-align:left; margin-bottom:10px;}
|
.post-reply-user {font-size:13px; text-align:left; margin-bottom:10px;}
|
||||||
.post-reply-content {font-size:13px; text-align:left; word-break:break-all; word-wrap:break-word; overflow:hidden;}
|
.post-reply-content {font-size:13px; text-align:left; word-break:break-all; word-wrap:break-word; overflow:hidden;}
|
||||||
.post-reply-content img {max-width:100%;}
|
.post-reply-content img {max-width:100%;}
|
||||||
.post-reply-date, .post-reply-trigger {font-size:13px;}
|
.post-reply-date, .post-reply-trigger {font-size:13px;}
|
||||||
.post-input-container {padding-right:2px;}
|
.post-input-container {padding-right:12px;}
|
||||||
.copy-input {width:100%; height:28px; line-height:28px; border-radius:3px; position:absolute; left:-9999em;}
|
.copy-input {width:100%; height:28px; line-height:28px; padding:0 5px; vertical-align: middle; font-size:12px; border-radius:3px; position:absolute; left:-9999em;}
|
||||||
.post-reply-input {width:100%; height:28px; max-height:84px; line-height:28px; border:1px solid #e6e6e6; outline:none; padding:0; margin:0; border-radius:3px; overflow-y:auto; resize:none;}
|
.post-reply-input {width:100%; height:28px; max-height:84px; line-height:28px; vertical-align: middle; font-size:12px; border:1px solid #e6e6e6; outline:none; padding:0 5px; margin:0; border-radius:3px; overflow-y:auto; resize:none;}
|
||||||
.post-reply-submit {font-size:13px; padding:3px 8px; color:#fff; background-color:#269ac9; outline:none; border:none; display:inline-block;}
|
.post-reply-submit {font-size:13px; padding:3px 8px; color:#fff; background-color:#269ac9; outline:none; border:none; display:inline-block;}
|
||||||
.reply-icon {background:url(/images/wechat/icon_list.gif) -150px -155px no-repeat; width:20px; height:20px; display:inline-block; vertical-align:middle;}
|
.reply-icon {background:url(/images/wechat/icon_list.gif) -150px -155px no-repeat; width:20px; height:20px; display:inline-block; vertical-align:middle;}
|
||||||
.praise-icon {background:url(/images/wechat/icon_list.gif) -36px -88px no-repeat; width:20px; height:20px; display:inline-block; vertical-align:middle;}
|
.praise-icon {background:url(/images/wechat/icon_list.gif) -36px -88px no-repeat; width:20px; height:20px; display:inline-block; vertical-align:middle;}
|
||||||
|
|
Loading…
Reference in New Issue