<% if User.current.member_of?(@project) %>
-
<%= l(:label_invite)%>
-
+ <%= l(:label_invite)%>
+
<%= link_to l(:label_invite_new_user), :controller=>"projects", :action=>"invite_members_by_mail", :id => @project %>
<% if User.current.allowed_to?(:manage_members, @project) %>
<%= link_to l(:label_invite_trustie_user), :controller=>"projects", :action=>"invite_members", :id => @project %>
diff --git a/app/views/poll/publish_poll.js.erb b/app/views/poll/publish_poll.js.erb
index 4e29a46fd..516e32f34 100644
--- a/app/views/poll/publish_poll.js.erb
+++ b/app/views/poll/publish_poll.js.erb
@@ -1,10 +1,10 @@
-$("#polls_<%= @poll.id %>").html("<%= escape_javascript(render :partial => 'poll',:locals => {:poll => @poll}) %>");
-$('#ajax-modal').html("<%= escape_javascript(render :partial => 'alert', locals: { :message => l(:label_memo_create_succ)}) %>");
-showModal('ajax-modal', '250px');
-//$('#ajax-modal').css('height','111px');
-$('#ajax-modal').siblings().remove();
-$('#ajax-modal').before("" +
- " ");
-$('#ajax-modal').parent().removeClass("alert_praise");
-$('#ajax-modal').parent().css("top","").css("left","");
+$("#polls_<%= @poll.id %>").html("<%= escape_javascript(render :partial => 'poll',:locals => {:poll => @poll}) %>");
+$('#ajax-modal').html("<%= escape_javascript(render :partial => 'alert', locals: { :message => l(:label_memo_create_succ)}) %>");
+showModal('ajax-modal', '250px');
+//$('#ajax-modal').css('height','111px');
+$('#ajax-modal').siblings().remove();
+$('#ajax-modal').before("" +
+ " ");
+$('#ajax-modal').parent().removeClass("alert_praise");
+$('#ajax-modal').parent().css("top","").css("left","");
$('#ajax-modal').parent().addClass("poll_alert_form");
\ No newline at end of file
diff --git a/app/views/poll/republish_poll.js.erb b/app/views/poll/republish_poll.js.erb
index 764a4eb3b..3b5c5bd3b 100644
--- a/app/views/poll/republish_poll.js.erb
+++ b/app/views/poll/republish_poll.js.erb
@@ -1,10 +1,10 @@
-$("#polls_<%= @poll.id %>").html("<%= escape_javascript(render :partial => 'poll',:locals => {:poll => @poll}) %>");
-$('#ajax-modal').html("<%= escape_javascript(render :partial => 'alert', locals: { :message => l(:label_poll_republish_success)}) %>");
-showModal('ajax-modal', '250px');
-//$('#ajax-modal').css('height','80px');
-$('#ajax-modal').siblings().remove();
-$('#ajax-modal').before("" +
- " ");
-$('#ajax-modal').parent().removeClass("alert_praise");
-$('#ajax-modal').parent().css("top","").css("left","");
+$("#polls_<%= @poll.id %>").html("<%= escape_javascript(render :partial => 'poll',:locals => {:poll => @poll}) %>");
+$('#ajax-modal').html("<%= escape_javascript(render :partial => 'alert', locals: { :message => l(:label_poll_republish_success)}) %>");
+showModal('ajax-modal', '250px');
+//$('#ajax-modal').css('height','80px');
+$('#ajax-modal').siblings().remove();
+$('#ajax-modal').before("" +
+ " ");
+$('#ajax-modal').parent().removeClass("alert_praise");
+$('#ajax-modal').parent().css("top","").css("left","");
$('#ajax-modal').parent().addClass("poll_alert_form");
\ No newline at end of file
diff --git a/app/views/projects/invite_members.html.erb b/app/views/projects/invite_members.html.erb
index ad6148d5a..d30ecd8e4 100644
--- a/app/views/projects/invite_members.html.erb
+++ b/app/views/projects/invite_members.html.erb
@@ -33,8 +33,18 @@
<% roles.each do |role| %>
- <%= check_box_tag 'membership[role_ids][]', role.id %>
- <%= h role %>
+ <%= check_box_tag 'membership[role_ids][]', role.id %>
+ <% if User.current.language == "zh" %>
+ <% if role.id == 3 %>
+ 管理人员
+ <% elsif role.id == 4 %>
+ 开发人员
+ <% else %>
+ 报告人员
+ <% end %>
+ <% else %>
+ <%= h role %>
+ <% end %>
<% end %>
diff --git a/app/views/projects/settings/_new_members.html.erb b/app/views/projects/settings/_new_members.html.erb
index 2cdcd4cf5..d91cd0475 100644
--- a/app/views/projects/settings/_new_members.html.erb
+++ b/app/views/projects/settings/_new_members.html.erb
@@ -2,7 +2,12 @@
<%
roles = Role.givable.all
if @project.project_type == Project::ProjectType_course
- roles = roles[3..5]
+ if User.current.language == "zh"
+ roles = ["管理人员","开发者","报告人员"]
+ else
+ roles = ["管理人员","开发者","报告人员"]
+ # roles = roles[3..5]
+ end
else
roles = roles[0..2]
end
@@ -18,7 +23,23 @@
<%= link_to_user_header member.principal,false,:class => "w140_h c_setting_blue fl" %>
- <%= h member.roles.sort.collect(&:to_s).join(', ') %>
+
+ <% if User.current.language == "zh" %>
+ <% zh_roles = [] %>
+ <% member.roles.each do |role| %>
+ <% if role.id == 3
+ zh_roles << "管理人员"
+ elsif role.id == 4
+ zh_roles << "开发人员"
+ else
+ zh_roles << "报告人员"
+ end
+ %>
+ <% end %>
+ <%= h zh_roles.sort.reverse.collect(&:to_s).join(', ') %>
+ <% else %>
+ <%= h member.roles.sort.collect(&:to_s).join(', ') %>
+ <% end %>
<%= form_for(member, {:as => :membership, :remote => true, :url => membership_path(member),
:method => :put,
:html => {:id => "member-#{member.id}-roles-form", :class => 'hol'}}
@@ -27,7 +48,18 @@
<%= check_box_tag 'membership[role_ids][]', role.id, member.roles.include?(role),
:disabled => member.member_roles.detect { |mr| mr.role_id == role.id && !mr.inherited_from.nil? } %>
- <%= h role %>
+
+ <% if User.current.language == "zh" %>
+ <% if role.id == 3 %>
+ 管理人员
+ <% elsif role.id == 4 %>
+ 开发人员
+ <% else %>
+ 报告人员
+ <% end %>
+ <% else %>
+ <%= h role %>
+ <% end %>
<% end %>
@@ -107,7 +139,17 @@
<% roles.each do |role| %>
<%= check_box_tag 'membership[role_ids][]', role.id %>
- <%= h role %>
+ <% if User.current.language == "zh" %>
+ <% if role.id == 3 %>
+ 管理人员
+ <% elsif role.id == 4 %>
+ 开发人员
+ <% else %>
+ 报告人员
+ <% end %>
+ <% else %>
+ <%= h role %>
+ <% end %>
<% end %>
diff --git a/app/views/repositories/newrepo.html.erb b/app/views/repositories/newrepo.html.erb
index 3facbe96b..323c1dbca 100644
--- a/app/views/repositories/newrepo.html.erb
+++ b/app/views/repositories/newrepo.html.erb
@@ -1,8 +1,8 @@
-
-
-
<%= l(:label_repository_new_repos) %>
-
-<%= labelled_form_for :repository, @repository, :url =>project_repositories_path(@project),:html => {:id => 'repository-form'} do |f| %>
- <%= render :partial => 'form_create', :locals => {:f => f} %>
-
+
+
+
<%= l(:label_repository_new_repos) %>
+
+<%= labelled_form_for :repository, @repository, :url =>project_repositories_path(@project),:html => {:id => 'repository-form'} do |f| %>
+ <%= render :partial => 'form_create', :locals => {:f => f} %>
+
<% end %>
\ No newline at end of file
diff --git a/app/views/tags/_tag_name.html.erb b/app/views/tags/_tag_name.html.erb
index df4260a4d..cb00ac8d7 100644
--- a/app/views/tags/_tag_name.html.erb
+++ b/app/views/tags/_tag_name.html.erb
@@ -1,110 +1,110 @@
-
-
-<% @tags = obj.reload.tag_list %>
-<% if non_list_all and (@tags.size > 0) %>
-
- <% if @tags.size > Setting.show_tags_length.to_i then %>
- <% i = 0 %>
- <% until i>Setting.show_tags_length.to_i do %>
-
- <%= link_to @tags[i], :controller => "tags", :action => "index", :q => @tags[i], :object_flag => object_flag, :obj_id => obj.id %>
-
- <% i += 1 %>
- <% end %>
- <%= more_tags(obj.id,object_flag)%>
- <% else %>
- <% @tags.each do |tag| %>
-
- <%= link_to tag, :controller => "tags", :action => "index", :q => tag, :object_flag => object_flag, :obj_id => obj.id %>
-
- <% end %>
- <% end %>
-<% else %>
-
- <% if @tags.size > 0 %>
- <% @tags.each do |tag| %>
-
- <% if object_flag == '2' %>
-
- <%= link_to tag, :controller => "tags", :action => "index", :q => tag, :object_flag => object_flag, :obj_id => obj.id, :class => 'pt5' %>
- <% if (ProjectInfo.find_by_project_id(obj.id)).try(:user_id) == User.current.id %>
- <%= link_to 'x', :controller => "tags", :action => "remove_tag", :remote => true, :tag_name => tag,
- :taggable_id => obj.id, :taggable_type => object_flag %>
- <% end %>
-
- <% else %>
-
-
- <%= link_to tag, :controller => "tags", :action => "index", :q => tag, :object_flag => object_flag, :obj_id => obj.id %>
-
- <% case object_flag %>
- <% when '1' %>
- <% if User.current.eql?(obj) %>
-
- <%= link_to 'x', :controller => "tags", :action => "remove_tag", :remote => true, :tag_name => tag,
- :taggable_id => obj.id, :taggable_type => object_flag %>
-
- <% end %>
- <% when '3' %>
- <% if (ProjectInfo.find_by_project_id(obj.project_id)).try(:user_id) == User.current.id %>
-
- <%= link_to 'x', :controller => "tags", :action => "remove_tag", :remote => true, :tag_name => tag,
- :taggable_id => obj.id, :taggable_type => object_flag %>
-
- <% end %>
- <% when '4' %>
- <% if obj.author_id == User.current.id %>
-
- <%= link_to 'x', :controller => "tags", :action => "remove_tag", :remote => true, :tag_name => tag,
- :taggable_id => obj.id, :taggable_type => object_flag %>
-
- <% end %>
- <% when '5' %>
- <% test = Forum.find(obj.id) %>
- <% if test && test.creator_id == User.current.id %>
-
- <%= link_to 'x', :controller => "tags", :action => "remove_tag", :remote => true, :tag_name => tag,
- :taggable_id => obj.id, :taggable_type => object_flag %>
-
- <% end %>
- <% when '6' %>
- <%# if (User.current.logged? &&
- User.current.admin?
- # && (@project && User.current.member_of?(@project))
- )
- %>
- <% if obj.author_id == User.current.id || User.current.admin?%>
-
- <%= link_to 'x', :controller => "tags", :action => "remove_tag", :remote => true, :tag_name => tag,
- :taggable_id => obj.id, :taggable_type => object_flag %>
-
- <% end %>
- <% when '7' %>
- <% if obj.author_id == User.current.id %>
-
- <%= link_to 'x', :controller => "tags", :action => "remove_tag", :remote => true, :tag_name => tag,
- :taggable_id => obj.id, :taggable_type => object_flag %>
-
- <% end %>
- <% when '9' %>
- <% if (CourseInfos.find_by_course_id(obj.id)).try(:user_id) == User.current.id %>
-
- <%= link_to 'x', :controller => "tags", :action => "remove_tag", :remote => true, :tag_name => tag,
- :taggable_id => obj.id, :taggable_type => object_flag %>
-
- <% end %>
- <% end %>
-
-
- <% end %>
- <% end %>
- <% end %>
+
+
+<% @tags = obj.reload.tag_list %>
+<% if non_list_all and (@tags.size > 0) %>
+
+ <% if @tags.size > Setting.show_tags_length.to_i then %>
+ <% i = 0 %>
+ <% until i>Setting.show_tags_length.to_i do %>
+
+ <%= link_to @tags[i], :controller => "tags", :action => "index", :q => @tags[i], :object_flag => object_flag, :obj_id => obj.id %>
+
+ <% i += 1 %>
+ <% end %>
+ <%= more_tags(obj.id,object_flag)%>
+ <% else %>
+ <% @tags.each do |tag| %>
+
+ <%= link_to tag, :controller => "tags", :action => "index", :q => tag, :object_flag => object_flag, :obj_id => obj.id %>
+
+ <% end %>
+ <% end %>
+<% else %>
+
+ <% if @tags.size > 0 %>
+ <% @tags.each do |tag| %>
+
+ <% if object_flag == '2' %>
+
+ <%= link_to tag, :controller => "tags", :action => "index", :q => tag, :object_flag => object_flag, :obj_id => obj.id, :class => 'pt5' %>
+ <% if (ProjectInfo.find_by_project_id(obj.id)).try(:user_id) == User.current.id %>
+ <%= link_to 'x', :controller => "tags", :action => "remove_tag", :remote => true, :tag_name => tag,
+ :taggable_id => obj.id, :taggable_type => object_flag %>
+ <% end %>
+
+ <% else %>
+
+
+ <%= link_to tag, :controller => "tags", :action => "index", :q => tag, :object_flag => object_flag, :obj_id => obj.id %>
+
+ <% case object_flag %>
+ <% when '1' %>
+ <% if User.current.eql?(obj) %>
+
+ <%= link_to 'x', :controller => "tags", :action => "remove_tag", :remote => true, :tag_name => tag,
+ :taggable_id => obj.id, :taggable_type => object_flag %>
+
+ <% end %>
+ <% when '3' %>
+ <% if (ProjectInfo.find_by_project_id(obj.project_id)).try(:user_id) == User.current.id %>
+
+ <%= link_to 'x', :controller => "tags", :action => "remove_tag", :remote => true, :tag_name => tag,
+ :taggable_id => obj.id, :taggable_type => object_flag %>
+
+ <% end %>
+ <% when '4' %>
+ <% if obj.author_id == User.current.id %>
+
+ <%= link_to 'x', :controller => "tags", :action => "remove_tag", :remote => true, :tag_name => tag,
+ :taggable_id => obj.id, :taggable_type => object_flag %>
+
+ <% end %>
+ <% when '5' %>
+ <% test = Forum.find(obj.id) %>
+ <% if test && test.creator_id == User.current.id %>
+
+ <%= link_to 'x', :controller => "tags", :action => "remove_tag", :remote => true, :tag_name => tag,
+ :taggable_id => obj.id, :taggable_type => object_flag %>
+
+ <% end %>
+ <% when '6' %>
+ <%# if (User.current.logged? &&
+ User.current.admin?
+ # && (@project && User.current.member_of?(@project))
+ )
+ %>
+ <% if obj.author_id == User.current.id || User.current.admin?%>
+
+ <%= link_to 'x', :controller => "tags", :action => "remove_tag", :remote => true, :tag_name => tag,
+ :taggable_id => obj.id, :taggable_type => object_flag %>
+
+ <% end %>
+ <% when '7' %>
+ <% if obj.author_id == User.current.id %>
+
+ <%= link_to 'x', :controller => "tags", :action => "remove_tag", :remote => true, :tag_name => tag,
+ :taggable_id => obj.id, :taggable_type => object_flag %>
+
+ <% end %>
+ <% when '9' %>
+ <% if (CourseInfos.find_by_course_id(obj.id)).try(:user_id) == User.current.id %>
+
+ <%= link_to 'x', :controller => "tags", :action => "remove_tag", :remote => true, :tag_name => tag,
+ :taggable_id => obj.id, :taggable_type => object_flag %>
+
+ <% end %>
+ <% end %>
+
+
+ <% end %>
+ <% end %>
+ <% end %>
<% end %>
\ No newline at end of file
diff --git a/app/views/watchers/_set_watcher.js.erb b/app/views/watchers/_set_watcher.js.erb
index 92fcbd489..3f469f5c6 100644
--- a/app/views/watchers/_set_watcher.js.erb
+++ b/app/views/watchers/_set_watcher.js.erb
@@ -1,11 +1,11 @@
-<% selector = ".#{watcher_css(watched)}" %>
-<% id_selector = "#{watcher_css(watched)}" %>
-if($("<%= selector %>").get(0) == undefined)
-{
- $("#<%= id_selector %>").each(function(){$(this).replaceWith("<%= escape_javascript watcher_link_for_project(watched, user) %>")});
-}
-else
-{
- $("<%= selector %>").each(function(){$(this).replaceWith("<%= escape_javascript watcher_link(watched, user) %>")});
-}
-
+<% selector = ".#{watcher_css(watched)}" %>
+<% id_selector = "#{watcher_css(watched)}" %>
+if($("<%= selector %>").get(0) == undefined)
+{
+ $("#<%= id_selector %>").each(function(){$(this).replaceWith("<%= escape_javascript watcher_link_for_project(watched, user) %>")});
+}
+else
+{
+ $("<%= selector %>").each(function(){$(this).replaceWith("<%= escape_javascript watcher_link(watched, user) %>")});
+}
+
diff --git a/app/views/welcome/_hot_projects_list.html.erb b/app/views/welcome/_hot_projects_list.html.erb
index ff41fa532..3c13bec4d 100644
--- a/app/views/welcome/_hot_projects_list.html.erb
+++ b/app/views/welcome/_hot_projects_list.html.erb
@@ -1,25 +1,25 @@
-
-
- <%= image_tag(get_project_avatar(project), :class => "avatar-4") %>
-
-
-
- <% unless project.is_public %>
-
- <%= l(:label_private) %>
-
- <% end %>
- <%= link_to( project.name, project_path(project.id), :class => "d-g-blue d-p-project-name",:title => "#{project.name}" )%>
- (<%= link_to l(:label_project_member_amount, :count => projectCount(project)), project_member_path(project) ,:course =>'0' %>)
-
-
- <%=project.description.truncate(90, omission: '...')%>
-
-
- <%= content_tag "span", l(:label_project_score)+ ":" + red_project_scores(project).to_i.to_s,
- :style => "cursor: pointer; display: inline-block; float: right; color: #ec6300;",
- :title => l(:label_project_score_tips),
- :class => "tooltip",
- :id => "tooltip-#{project.id}" %>
-
+
+
+ <%= image_tag(get_project_avatar(project), :class => "avatar-4") %>
+
+
+
+ <% unless project.is_public %>
+
+ <%= l(:label_private) %>
+
+ <% end %>
+ <%= link_to( project.name, project_path(project.id), :class => "d-g-blue d-p-project-name",:title => "#{project.name}" )%>
+ (<%= link_to l(:label_project_member_amount, :count => projectCount(project)), project_member_path(project) ,:course =>'0' %>)
+
+
+ <%=project.description.truncate(90, omission: '...')%>
+
+
+ <%= content_tag "span", l(:label_project_score)+ ":" + red_project_scores(project).to_i.to_s,
+ :style => "cursor: pointer; display: inline-block; float: right; color: #ec6300;",
+ :title => l(:label_project_score_tips),
+ :class => "tooltip",
+ :id => "tooltip-#{project.id}" %>
+
\ No newline at end of file
diff --git a/db/schema.rb b/db/schema.rb
index fa82de59a..cd5cb1599 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -1,1469 +1,1469 @@
-# encoding: UTF-8
-# This file is auto-generated from the current state of the database. Instead
-# of editing this file, please use the migrations feature of Active Record to
-# incrementally modify your database, and then regenerate this schema definition.
-#
-# Note that this schema.rb definition is the authoritative source for your
-# database schema. If you need to create the application database on another
-# system, you should be using db:schema:load, not running all the migrations
-# from scratch. The latter is a flawed and unsustainable approach (the more migrations
-# you'll amass, the slower it'll run and the greater likelihood for issues).
-#
-# It's strongly recommended to check this file into your version control system.
-
-ActiveRecord::Schema.define(:version => 20150505025537) do
-
- create_table "activities", :force => true do |t|
- t.integer "act_id", :null => false
- t.string "act_type", :null => false
- t.integer "user_id", :null => false
- end
-
- add_index "activities", ["act_id", "act_type"], :name => "index_activities_on_act_id_and_act_type"
- add_index "activities", ["user_id", "act_type"], :name => "index_activities_on_user_id_and_act_type"
- add_index "activities", ["user_id"], :name => "index_activities_on_user_id"
-
- create_table "api_keys", :force => true do |t|
- t.string "access_token"
- t.datetime "expires_at"
- t.integer "user_id"
- t.boolean "active", :default => true
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- end
-
- 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"
-
- create_table "applied_projects", :force => true do |t|
- t.integer "project_id", :null => false
- t.integer "user_id", :null => false
- end
-
- create_table "apply_project_masters", :force => true do |t|
- t.integer "user_id"
- t.string "apply_type"
- t.integer "apply_id"
- t.integer "status"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- end
-
- create_table "attachments", :force => true do |t|
- t.integer "container_id"
- t.string "container_type", :limit => 30
- t.string "filename", :default => "", :null => false
- t.string "disk_filename", :default => "", :null => false
- t.integer "filesize", :default => 0, :null => false
- t.string "content_type", :default => ""
- t.string "digest", :limit => 40, :default => "", :null => false
- t.integer "downloads", :default => 0, :null => false
- t.integer "author_id", :default => 0, :null => false
- t.datetime "created_on"
- t.string "description"
- t.string "disk_directory"
- t.integer "attachtype", :default => 1
- t.integer "is_public", :default => 1
- t.integer "copy_from"
- t.integer "quotes"
- end
-
- add_index "attachments", ["author_id"], :name => "index_attachments_on_author_id"
- add_index "attachments", ["container_id", "container_type"], :name => "index_attachments_on_container_id_and_container_type"
- add_index "attachments", ["created_on"], :name => "index_attachments_on_created_on"
-
- create_table "attachmentstypes", :force => true do |t|
- t.integer "typeId", :null => false
- t.string "typeName", :limit => 50
- end
-
- create_table "auth_sources", :force => true do |t|
- t.string "type", :limit => 30, :default => "", :null => false
- t.string "name", :limit => 60, :default => "", :null => false
- t.string "host", :limit => 60
- t.integer "port"
- t.string "account"
- t.string "account_password", :default => ""
- t.string "base_dn"
- t.string "attr_login", :limit => 30
- t.string "attr_firstname", :limit => 30
- t.string "attr_lastname", :limit => 30
- t.string "attr_mail", :limit => 30
- t.boolean "onthefly_register", :default => false, :null => false
- t.boolean "tls", :default => false, :null => false
- t.string "filter"
- t.integer "timeout"
- end
-
- add_index "auth_sources", ["id", "type"], :name => "index_auth_sources_on_id_and_type"
-
- create_table "biding_projects", :force => true do |t|
- t.integer "project_id"
- t.integer "bid_id"
- t.integer "user_id"
- t.string "description"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- t.string "reward"
- end
-
- create_table "bids", :force => true do |t|
- t.string "name"
- t.string "budget", :null => false
- t.integer "author_id"
- t.date "deadline"
- t.text "description"
- t.datetime "created_on", :null => false
- t.datetime "updated_on", :null => false
- t.integer "commit"
- t.integer "reward_type"
- t.integer "homework_type"
- t.integer "parent_id"
- t.string "password"
- t.integer "is_evaluation"
- t.integer "proportion", :default => 60
- t.integer "comment_status", :default => 0
- t.integer "evaluation_num", :default => 3
- t.integer "open_anonymous_evaluation", :default => 1
- end
-
- create_table "boards", :force => true do |t|
- t.integer "project_id", :null => false
- t.string "name", :default => "", :null => false
- t.string "description"
- t.integer "position", :default => 1
- t.integer "topics_count", :default => 0, :null => false
- t.integer "messages_count", :default => 0, :null => false
- t.integer "last_message_id"
- t.integer "parent_id"
- t.integer "course_id"
- end
-
- add_index "boards", ["last_message_id"], :name => "index_boards_on_last_message_id"
- add_index "boards", ["project_id"], :name => "boards_project_id"
-
- create_table "bug_to_osps", :force => true do |t|
- t.integer "osp_id"
- t.integer "relative_memo_id"
- t.string "description"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- end
-
- create_table "changes", :force => true do |t|
- t.integer "changeset_id", :null => false
- t.string "action", :limit => 1, :default => "", :null => false
- t.text "path", :null => false
- t.text "from_path"
- t.string "from_revision"
- t.string "revision"
- t.string "branch"
- end
-
- add_index "changes", ["changeset_id"], :name => "changesets_changeset_id"
-
- create_table "changeset_parents", :id => false, :force => true do |t|
- t.integer "changeset_id", :null => false
- t.integer "parent_id", :null => false
- end
-
- add_index "changeset_parents", ["changeset_id"], :name => "changeset_parents_changeset_ids"
- add_index "changeset_parents", ["parent_id"], :name => "changeset_parents_parent_ids"
-
- create_table "changesets", :force => true do |t|
- t.integer "repository_id", :null => false
- t.string "revision", :null => false
- t.string "committer"
- t.datetime "committed_on", :null => false
- t.text "comments"
- t.date "commit_date"
- t.string "scmid"
- t.integer "user_id"
- end
-
- add_index "changesets", ["committed_on"], :name => "index_changesets_on_committed_on"
- add_index "changesets", ["repository_id", "revision"], :name => "changesets_repos_rev", :unique => true
- add_index "changesets", ["repository_id", "scmid"], :name => "changesets_repos_scmid"
- add_index "changesets", ["repository_id"], :name => "index_changesets_on_repository_id"
- add_index "changesets", ["user_id"], :name => "index_changesets_on_user_id"
-
- create_table "changesets_issues", :id => false, :force => true do |t|
- t.integer "changeset_id", :null => false
- t.integer "issue_id", :null => false
- end
-
- add_index "changesets_issues", ["changeset_id", "issue_id"], :name => "changesets_issues_ids", :unique => true
-
- create_table "code_review_assignments", :force => true do |t|
- t.integer "issue_id"
- t.integer "change_id"
- t.integer "attachment_id"
- t.string "file_path"
- t.string "rev"
- t.string "rev_to"
- t.string "action_type"
- t.integer "changeset_id"
- end
-
- create_table "code_review_project_settings", :force => true do |t|
- t.integer "project_id"
- t.integer "tracker_id"
- t.datetime "created_at"
- t.datetime "updated_at"
- t.integer "updated_by"
- t.boolean "hide_code_review_tab", :default => false
- t.integer "auto_relation", :default => 1
- t.integer "assignment_tracker_id"
- t.text "auto_assign"
- t.integer "lock_version", :default => 0, :null => false
- t.boolean "tracker_in_review_dialog", :default => false
- end
-
- create_table "code_review_user_settings", :force => true do |t|
- t.integer "user_id", :default => 0, :null => false
- t.integer "mail_notification", :default => 0, :null => false
- t.datetime "created_at"
- t.datetime "updated_at"
- end
-
- create_table "code_reviews", :force => true do |t|
- t.integer "project_id"
- t.integer "change_id"
- t.datetime "created_at"
- t.datetime "updated_at"
- t.integer "line"
- t.integer "updated_by_id"
- t.integer "lock_version", :default => 0, :null => false
- t.integer "status_changed_from"
- t.integer "status_changed_to"
- t.integer "issue_id"
- t.string "action_type"
- t.string "file_path"
- t.string "rev"
- t.string "rev_to"
- t.integer "attachment_id"
- t.integer "file_count", :default => 0, :null => false
- t.boolean "diff_all"
- end
-
- create_table "comments", :force => true do |t|
- t.string "commented_type", :limit => 30, :default => "", :null => false
- t.integer "commented_id", :default => 0, :null => false
- t.integer "author_id", :default => 0, :null => false
- t.text "comments"
- t.datetime "created_on", :null => false
- t.datetime "updated_on", :null => false
- end
-
- add_index "comments", ["author_id"], :name => "index_comments_on_author_id"
- add_index "comments", ["commented_id", "commented_type"], :name => "index_comments_on_commented_id_and_commented_type"
-
- create_table "contest_notifications", :force => true do |t|
- t.text "title"
- t.text "content"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- end
-
- create_table "contesting_projects", :force => true do |t|
- t.integer "project_id"
- t.string "contest_id"
- t.integer "user_id"
- t.string "description"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- t.string "reward"
- end
-
- create_table "contesting_softapplications", :force => true do |t|
- t.integer "softapplication_id"
- t.integer "contest_id"
- t.integer "user_id"
- t.string "description"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- t.string "reward"
- end
-
- create_table "contestnotifications", :force => true do |t|
- t.integer "contest_id"
- t.string "title"
- t.string "summary"
- t.text "description"
- t.integer "author_id"
- t.integer "notificationcomments_count"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- end
-
- create_table "contests", :force => true do |t|
- t.string "name"
- t.string "budget", :default => ""
- t.integer "author_id"
- t.date "deadline"
- t.string "description"
- t.integer "commit"
- t.string "password"
- t.datetime "created_on", :null => false
- t.datetime "updated_on", :null => false
- end
-
- create_table "course_attachments", :force => true do |t|
- t.string "filename"
- t.string "disk_filename"
- t.integer "filesize"
- t.string "content_type"
- t.string "digest"
- t.integer "downloads"
- t.string "author_id"
- t.string "integer"
- t.string "description"
- t.string "disk_directory"
- t.integer "attachtype"
- t.integer "is_public"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- t.integer "container_id", :default => 0
- end
-
- create_table "course_groups", :force => true do |t|
- t.string "name"
- t.integer "course_id"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- end
-
- create_table "course_infos", :force => true do |t|
- t.integer "course_id"
- t.integer "user_id"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- end
-
- create_table "course_statuses", :force => true do |t|
- t.integer "changesets_count"
- t.integer "watchers_count"
- t.integer "course_id"
- t.float "grade", :default => 0.0
- t.integer "course_ac_para", :default => 0
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- end
-
- create_table "courses", :force => true do |t|
- t.integer "tea_id"
- t.string "name"
- t.integer "state"
- t.string "code"
- t.integer "time"
- t.string "extra"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- t.string "location"
- t.string "term"
- t.string "string"
- t.string "password"
- t.string "setup_time"
- t.string "endup_time"
- t.string "class_period"
- t.integer "school_id"
- t.text "description"
- t.integer "status", :default => 1
- t.integer "attachmenttype", :default => 2
- t.integer "lft"
- t.integer "rgt"
- t.integer "is_public", :limit => 1, :default => 1
- t.integer "inherit_members", :limit => 1, :default => 1
- t.integer "open_student", :default => 0
- end
-
- create_table "custom_fields", :force => true do |t|
- t.string "type", :limit => 30, :default => "", :null => false
- t.string "name", :limit => 30, :default => "", :null => false
- t.string "field_format", :limit => 30, :default => "", :null => false
- t.text "possible_values"
- t.string "regexp", :default => ""
- t.integer "min_length", :default => 0, :null => false
- t.integer "max_length", :default => 0, :null => false
- t.boolean "is_required", :default => false, :null => false
- t.boolean "is_for_all", :default => false, :null => false
- t.boolean "is_filter", :default => false, :null => false
- t.integer "position", :default => 1
- t.boolean "searchable", :default => false
- t.text "default_value"
- t.boolean "editable", :default => true
- t.boolean "visible", :default => true, :null => false
- t.boolean "multiple", :default => false
- end
-
- add_index "custom_fields", ["id", "type"], :name => "index_custom_fields_on_id_and_type"
-
- create_table "custom_fields_projects", :id => false, :force => true do |t|
- t.integer "custom_field_id", :default => 0, :null => false
- t.integer "project_id", :default => 0, :null => false
- end
-
- add_index "custom_fields_projects", ["custom_field_id", "project_id"], :name => "index_custom_fields_projects_on_custom_field_id_and_project_id", :unique => true
-
- create_table "custom_fields_trackers", :id => false, :force => true do |t|
- t.integer "custom_field_id", :default => 0, :null => false
- t.integer "tracker_id", :default => 0, :null => false
- end
-
- add_index "custom_fields_trackers", ["custom_field_id", "tracker_id"], :name => "index_custom_fields_trackers_on_custom_field_id_and_tracker_id", :unique => true
-
- create_table "custom_values", :force => true do |t|
- t.string "customized_type", :limit => 30, :default => "", :null => false
- t.integer "customized_id", :default => 0, :null => false
- t.integer "custom_field_id", :default => 0, :null => false
- t.text "value"
- end
-
- add_index "custom_values", ["custom_field_id"], :name => "index_custom_values_on_custom_field_id"
- add_index "custom_values", ["customized_type", "customized_id"], :name => "custom_values_customized"
-
- create_table "delayed_jobs", :force => true do |t|
- t.integer "priority", :default => 0, :null => false
- t.integer "attempts", :default => 0, :null => false
- t.text "handler", :null => false
- t.text "last_error"
- t.datetime "run_at"
- t.datetime "locked_at"
- t.datetime "failed_at"
- t.string "locked_by"
- t.string "queue"
- t.datetime "created_at"
- t.datetime "updated_at"
- end
-
- add_index "delayed_jobs", ["priority", "run_at"], :name => "delayed_jobs_priority"
-
- create_table "documents", :force => true do |t|
- t.integer "project_id", :default => 0, :null => false
- t.integer "category_id", :default => 0, :null => false
- t.string "title", :limit => 60, :default => "", :null => false
- t.text "description"
- t.datetime "created_on"
- t.integer "user_id", :default => 0
- t.integer "is_public", :default => 1
- end
-
- add_index "documents", ["category_id"], :name => "index_documents_on_category_id"
- add_index "documents", ["created_on"], :name => "index_documents_on_created_on"
- add_index "documents", ["project_id"], :name => "documents_project_id"
-
- create_table "enabled_modules", :force => true do |t|
- t.integer "project_id"
- t.string "name", :null => false
- t.integer "course_id"
- end
-
- add_index "enabled_modules", ["project_id"], :name => "enabled_modules_project_id"
-
- create_table "enumerations", :force => true do |t|
- t.string "name", :limit => 30, :default => "", :null => false
- t.integer "position", :default => 1
- t.boolean "is_default", :default => false, :null => false
- t.string "type"
- t.boolean "active", :default => true, :null => false
- t.integer "project_id"
- t.integer "parent_id"
- t.string "position_name", :limit => 30
- end
-
- add_index "enumerations", ["id", "type"], :name => "index_enumerations_on_id_and_type"
- add_index "enumerations", ["project_id"], :name => "index_enumerations_on_project_id"
-
- create_table "first_pages", :force => true do |t|
- t.string "web_title"
- t.string "title"
- t.text "description"
- t.string "page_type"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- t.integer "sort_type"
- t.integer "image_width", :default => 107
- t.integer "image_height", :default => 63
- t.integer "show_course", :default => 1
- t.integer "show_contest", :default => 1
- end
-
- create_table "forge_activities", :force => true do |t|
- t.integer "user_id"
- t.integer "project_id"
- t.integer "forge_act_id"
- t.string "forge_act_type"
- t.integer "org_id"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- end
-
- add_index "forge_activities", ["forge_act_id"], :name => "index_forge_activities_on_forge_act_id"
-
- create_table "forums", :force => true do |t|
- t.string "name", :null => false
- t.text "description"
- t.integer "topic_count", :default => 0
- t.integer "memo_count", :default => 0
- t.integer "last_memo_id", :default => 0
- t.integer "creator_id", :null => false
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- t.integer "sticky"
- t.integer "locked"
- end
-
- create_table "groups_users", :id => false, :force => true do |t|
- t.integer "group_id", :null => false
- t.integer "user_id", :null => false
- end
-
- add_index "groups_users", ["group_id", "user_id"], :name => "groups_users_ids", :unique => true
-
- create_table "homework_attaches", :force => true do |t|
- t.integer "bid_id"
- t.integer "user_id"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- t.string "reward"
- t.string "name"
- t.text "description"
- t.integer "state"
- t.integer "project_id", :default => 0
- t.float "score", :default => 0.0
- t.integer "is_teacher_score", :default => 0
- end
-
- add_index "homework_attaches", ["bid_id"], :name => "index_homework_attaches_on_bid_id"
-
- create_table "homework_evaluations", :force => true do |t|
- t.string "user_id"
- t.string "homework_attach_id"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- end
-
- create_table "homework_for_courses", :force => true do |t|
- t.integer "course_id"
- t.integer "bid_id"
- end
-
- add_index "homework_for_courses", ["bid_id"], :name => "index_homework_for_courses_on_bid_id"
- add_index "homework_for_courses", ["course_id"], :name => "index_homework_for_courses_on_course_id"
-
- create_table "homework_users", :force => true do |t|
- t.string "homework_attach_id"
- t.string "user_id"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- end
-
- create_table "issue_categories", :force => true do |t|
- t.integer "project_id", :default => 0, :null => false
- t.string "name", :limit => 30, :default => "", :null => false
- t.integer "assigned_to_id"
- end
-
- add_index "issue_categories", ["assigned_to_id"], :name => "index_issue_categories_on_assigned_to_id"
- add_index "issue_categories", ["project_id"], :name => "issue_categories_project_id"
-
- create_table "issue_relations", :force => true do |t|
- t.integer "issue_from_id", :null => false
- t.integer "issue_to_id", :null => false
- t.string "relation_type", :default => "", :null => false
- t.integer "delay"
- end
-
- add_index "issue_relations", ["issue_from_id", "issue_to_id"], :name => "index_issue_relations_on_issue_from_id_and_issue_to_id", :unique => true
- add_index "issue_relations", ["issue_from_id"], :name => "index_issue_relations_on_issue_from_id"
- add_index "issue_relations", ["issue_to_id"], :name => "index_issue_relations_on_issue_to_id"
-
- create_table "issue_statuses", :force => true do |t|
- t.string "name", :limit => 30, :default => "", :null => false
- t.boolean "is_closed", :default => false, :null => false
- t.boolean "is_default", :default => false, :null => false
- t.integer "position", :default => 1
- t.integer "default_done_ratio"
- end
-
- add_index "issue_statuses", ["is_closed"], :name => "index_issue_statuses_on_is_closed"
- add_index "issue_statuses", ["is_default"], :name => "index_issue_statuses_on_is_default"
- add_index "issue_statuses", ["position"], :name => "index_issue_statuses_on_position"
-
- create_table "issues", :force => true do |t|
- t.integer "tracker_id", :null => false
- t.integer "project_id", :null => false
- t.string "subject", :default => "", :null => false
- t.text "description"
- t.date "due_date"
- t.integer "category_id"
- t.integer "status_id", :null => false
- t.integer "assigned_to_id"
- t.integer "priority_id", :null => false
- t.integer "fixed_version_id"
- t.integer "author_id", :null => false
- t.integer "lock_version", :default => 0, :null => false
- t.datetime "created_on"
- t.datetime "updated_on"
- t.date "start_date"
- t.integer "done_ratio", :default => 0, :null => false
- t.float "estimated_hours"
- t.integer "parent_id"
- t.integer "root_id"
- t.integer "lft"
- t.integer "rgt"
- t.boolean "is_private", :default => false, :null => false
- t.datetime "closed_on"
- t.integer "project_issues_index"
- end
-
- add_index "issues", ["assigned_to_id"], :name => "index_issues_on_assigned_to_id"
- add_index "issues", ["author_id"], :name => "index_issues_on_author_id"
- add_index "issues", ["category_id"], :name => "index_issues_on_category_id"
- add_index "issues", ["created_on"], :name => "index_issues_on_created_on"
- add_index "issues", ["fixed_version_id"], :name => "index_issues_on_fixed_version_id"
- add_index "issues", ["priority_id"], :name => "index_issues_on_priority_id"
- add_index "issues", ["project_id"], :name => "issues_project_id"
- add_index "issues", ["root_id", "lft", "rgt"], :name => "index_issues_on_root_id_and_lft_and_rgt"
- add_index "issues", ["status_id"], :name => "index_issues_on_status_id"
- add_index "issues", ["tracker_id"], :name => "index_issues_on_tracker_id"
-
- create_table "join_in_competitions", :force => true do |t|
- t.integer "user_id"
- t.integer "competition_id"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- end
-
- create_table "join_in_contests", :force => true do |t|
- t.integer "user_id"
- t.integer "bid_id"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- end
-
- create_table "journal_details", :force => true do |t|
- t.integer "journal_id", :default => 0, :null => false
- t.string "property", :limit => 30, :default => "", :null => false
- t.string "prop_key", :limit => 30, :default => "", :null => false
- t.text "old_value"
- t.text "value"
- end
-
- add_index "journal_details", ["journal_id"], :name => "journal_details_journal_id"
-
- create_table "journal_replies", :id => false, :force => true do |t|
- t.integer "journal_id"
- t.integer "user_id"
- t.integer "reply_id"
- end
-
- add_index "journal_replies", ["journal_id"], :name => "index_journal_replies_on_journal_id"
- add_index "journal_replies", ["reply_id"], :name => "index_journal_replies_on_reply_id"
- add_index "journal_replies", ["user_id"], :name => "index_journal_replies_on_user_id"
-
- create_table "journals", :force => true do |t|
- t.integer "journalized_id", :default => 0, :null => false
- t.string "journalized_type", :limit => 30, :default => "", :null => false
- t.integer "user_id", :default => 0, :null => false
- t.text "notes"
- t.datetime "created_on", :null => false
- t.boolean "private_notes", :default => false, :null => false
- end
-
- add_index "journals", ["created_on"], :name => "index_journals_on_created_on"
- add_index "journals", ["journalized_id", "journalized_type"], :name => "journals_journalized_id"
- add_index "journals", ["journalized_id"], :name => "index_journals_on_journalized_id"
- add_index "journals", ["user_id"], :name => "index_journals_on_user_id"
-
- create_table "journals_for_messages", :force => true do |t|
- t.integer "jour_id"
- t.string "jour_type"
- t.integer "user_id"
- t.text "notes"
- t.integer "status"
- t.integer "reply_id"
- t.datetime "created_on", :null => false
- t.datetime "updated_on", :null => false
- t.string "m_parent_id"
- t.boolean "is_readed"
- t.integer "m_reply_count"
- t.integer "m_reply_id"
- t.integer "is_comprehensive_evaluation"
- end
-
- create_table "kindeditor_assets", :force => true do |t|
- t.string "asset"
- t.integer "file_size"
- t.string "file_type"
- t.integer "owner_id"
- t.string "asset_type"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- t.integer "owner_type", :default => 0
- end
-
- create_table "member_roles", :force => true do |t|
- t.integer "member_id", :null => false
- t.integer "role_id", :null => false
- t.integer "inherited_from"
- end
-
- add_index "member_roles", ["member_id"], :name => "index_member_roles_on_member_id"
- add_index "member_roles", ["role_id"], :name => "index_member_roles_on_role_id"
-
- create_table "members", :force => true do |t|
- t.integer "user_id", :default => 0, :null => false
- t.integer "project_id", :default => 0
- t.datetime "created_on"
- t.boolean "mail_notification", :default => false, :null => false
- t.integer "course_id", :default => -1
- t.integer "course_group_id", :default => 0
- end
-
- add_index "members", ["project_id"], :name => "index_members_on_project_id"
- add_index "members", ["user_id", "project_id", "course_id"], :name => "index_members_on_user_id_and_project_id", :unique => true
- add_index "members", ["user_id"], :name => "index_members_on_user_id"
-
- create_table "memos", :force => true do |t|
- t.integer "forum_id", :null => false
- t.integer "parent_id"
- t.string "subject", :null => false
- t.text "content", :null => false
- t.integer "author_id", :null => false
- t.integer "replies_count", :default => 0
- t.integer "last_reply_id"
- t.boolean "lock", :default => false
- t.boolean "sticky", :default => false
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- t.integer "viewed_count", :default => 0
- end
-
- create_table "messages", :force => true do |t|
- t.integer "board_id", :null => false
- t.integer "parent_id"
- t.string "subject", :default => "", :null => false
- t.text "content"
- t.integer "author_id"
- t.integer "replies_count", :default => 0, :null => false
- t.integer "last_reply_id"
- t.datetime "created_on", :null => false
- t.datetime "updated_on", :null => false
- t.boolean "locked", :default => false
- t.integer "sticky", :default => 0
- end
-
- add_index "messages", ["author_id"], :name => "index_messages_on_author_id"
- add_index "messages", ["board_id"], :name => "messages_board_id"
- add_index "messages", ["created_on"], :name => "index_messages_on_created_on"
- add_index "messages", ["last_reply_id"], :name => "index_messages_on_last_reply_id"
- add_index "messages", ["parent_id"], :name => "messages_parent_id"
-
- create_table "news", :force => true do |t|
- t.integer "project_id"
- t.string "title", :limit => 60, :default => "", :null => false
- t.string "summary", :default => ""
- t.text "description"
- t.integer "author_id", :default => 0, :null => false
- t.datetime "created_on"
- t.integer "comments_count", :default => 0, :null => false
- t.integer "course_id"
- end
-
- add_index "news", ["author_id"], :name => "index_news_on_author_id"
- add_index "news", ["created_on"], :name => "index_news_on_created_on"
- add_index "news", ["project_id"], :name => "news_project_id"
-
- create_table "no_uses", :force => true do |t|
- t.integer "user_id", :null => false
- t.string "no_use_type"
- t.integer "no_use_id"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- end
-
- create_table "notificationcomments", :force => true do |t|
- t.string "notificationcommented_type"
- t.integer "notificationcommented_id"
- t.integer "author_id"
- t.text "notificationcomments"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- end
-
- create_table "open_id_authentication_associations", :force => true do |t|
- t.integer "issued"
- t.integer "lifetime"
- t.string "handle"
- t.string "assoc_type"
- t.binary "server_url"
- t.binary "secret"
- end
-
- create_table "open_id_authentication_nonces", :force => true do |t|
- t.integer "timestamp", :null => false
- t.string "server_url"
- t.string "salt", :null => false
- end
-
- create_table "open_source_projects", :force => true do |t|
- t.string "name"
- t.text "description"
- t.integer "commit_count", :default => 0
- t.integer "code_line", :default => 0
- t.integer "users_count", :default => 0
- t.date "last_commit_time"
- t.string "url"
- t.date "date_collected"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- end
-
- create_table "option_numbers", :force => true do |t|
- t.integer "user_id"
- t.integer "memo"
- t.integer "messages_for_issues"
- t.integer "issues_status"
- t.integer "replay_for_message"
- t.integer "replay_for_memo"
- t.integer "follow"
- t.integer "tread"
- t.integer "praise_by_one"
- t.integer "praise_by_two"
- t.integer "praise_by_three"
- t.integer "tread_by_one"
- t.integer "tread_by_two"
- t.integer "tread_by_three"
- t.integer "changeset"
- t.integer "document"
- t.integer "attachment"
- t.integer "issue_done_ratio"
- t.integer "post_issue"
- t.integer "score_type"
- t.integer "total_score"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- t.integer "project_id"
- end
-
- create_table "organizations", :force => true do |t|
- t.string "name"
- t.string "logo_link"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- end
-
- create_table "phone_app_versions", :force => true do |t|
- t.string "version"
- t.text "description"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- end
-
- create_table "poll_answers", :force => true do |t|
- t.integer "poll_question_id"
- t.text "answer_text"
- t.integer "answer_position"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- end
-
- create_table "poll_questions", :force => true do |t|
- t.string "question_title"
- t.integer "question_type"
- t.integer "is_necessary"
- t.integer "poll_id"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- t.integer "question_number"
- end
-
- create_table "poll_users", :force => true do |t|
- t.integer "user_id"
- t.integer "poll_id"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- end
-
- create_table "poll_votes", :force => true do |t|
- t.integer "user_id"
- t.integer "poll_question_id"
- t.integer "poll_answer_id"
- t.text "vote_text"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- end
-
- create_table "polls", :force => true do |t|
- t.string "polls_name"
- t.string "polls_type"
- t.integer "polls_group_id"
- t.integer "polls_status"
- t.integer "user_id"
- t.datetime "published_at"
- t.datetime "closed_at"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- t.text "polls_description"
- t.integer "show_result", :default => 1
- end
-
- create_table "praise_tread_caches", :force => true do |t|
- t.integer "object_id", :null => false
- t.string "object_type"
- t.integer "praise_num"
- t.integer "tread_num"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- end
-
- create_table "praise_treads", :force => true do |t|
- t.integer "user_id", :null => false
- t.integer "praise_tread_object_id"
- t.string "praise_tread_object_type"
- t.integer "praise_or_tread"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- end
-
- create_table "project_infos", :force => true do |t|
- t.integer "project_id"
- t.integer "user_id"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- end
-
- create_table "project_scores", :force => true do |t|
- t.string "project_id"
- t.integer "score"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- t.integer "issue_num", :default => 0
- t.integer "issue_journal_num", :default => 0
- t.integer "news_num", :default => 0
- t.integer "documents_num", :default => 0
- t.integer "changeset_num", :default => 0
- t.integer "board_message_num", :default => 0
- end
-
- create_table "project_statuses", :force => true do |t|
- t.integer "changesets_count"
- t.integer "watchers_count"
- t.integer "project_id"
- t.integer "project_type"
- t.float "grade", :default => 0.0
- t.integer "course_ac_para", :default => 0
- end
-
- add_index "project_statuses", ["grade"], :name => "index_project_statuses_on_grade"
-
- create_table "projecting_softapplictions", :force => true do |t|
- t.integer "user_id"
- t.integer "softapplication_id"
- t.integer "project_id"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- end
-
- create_table "projects", :force => true do |t|
- t.string "name", :default => "", :null => false
- t.text "description"
- t.string "homepage", :default => ""
- t.boolean "is_public", :default => true, :null => false
- t.integer "parent_id"
- t.datetime "created_on"
- t.datetime "updated_on"
- t.string "identifier"
- t.integer "status", :default => 1, :null => false
- t.integer "lft"
- t.integer "rgt"
- t.boolean "inherit_members", :default => false, :null => false
- t.integer "project_type"
- t.boolean "hidden_repo", :default => false, :null => false
- t.integer "attachmenttype", :default => 1
- t.integer "user_id"
- t.integer "dts_test", :default => 0
- t.string "enterprise_name"
- t.integer "organization_id"
- t.integer "project_new_type"
- end
-
- add_index "projects", ["lft"], :name => "index_projects_on_lft"
- add_index "projects", ["rgt"], :name => "index_projects_on_rgt"
-
- create_table "projects_trackers", :id => false, :force => true do |t|
- t.integer "project_id", :default => 0, :null => false
- t.integer "tracker_id", :default => 0, :null => false
- end
-
- 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"
-
- create_table "queries", :force => true do |t|
- t.integer "project_id"
- t.string "name", :default => "", :null => false
- t.text "filters"
- t.integer "user_id", :default => 0, :null => false
- t.boolean "is_public", :default => false, :null => false
- t.text "column_names"
- t.text "sort_criteria"
- t.string "group_by"
- t.string "type"
- end
-
- add_index "queries", ["project_id"], :name => "index_queries_on_project_id"
- add_index "queries", ["user_id"], :name => "index_queries_on_user_id"
-
- create_table "relative_memo_to_open_source_projects", :force => true do |t|
- t.integer "osp_id"
- t.integer "relative_memo_id"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- end
-
- create_table "relative_memos", :force => true do |t|
- t.integer "osp_id"
- t.integer "parent_id"
- t.string "subject", :null => false
- t.text "content", :limit => 16777215, :null => false
- t.integer "author_id"
- t.integer "replies_count", :default => 0
- t.integer "last_reply_id"
- t.boolean "lock", :default => false
- t.boolean "sticky", :default => false
- t.boolean "is_quote", :default => false
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- t.integer "viewed_count_crawl", :default => 0
- t.integer "viewed_count_local", :default => 0
- t.string "url"
- t.string "username"
- t.string "userhomeurl"
- t.date "date_collected"
- t.string "topic_resource"
- end
-
- create_table "repositories", :force => true do |t|
- t.integer "project_id", :default => 0, :null => false
- t.string "url", :default => "", :null => false
- t.string "login", :limit => 60, :default => ""
- t.string "password", :default => ""
- t.string "root_url", :default => ""
- t.string "type"
- t.string "path_encoding", :limit => 64
- t.string "log_encoding", :limit => 64
- t.text "extra_info"
- t.string "identifier"
- t.boolean "is_default", :default => false
- t.boolean "hidden", :default => false
- end
-
- add_index "repositories", ["project_id"], :name => "index_repositories_on_project_id"
-
- create_table "rich_rich_files", :force => true do |t|
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- t.string "rich_file_file_name"
- t.string "rich_file_content_type"
- t.integer "rich_file_file_size"
- t.datetime "rich_file_updated_at"
- t.string "owner_type"
- t.integer "owner_id"
- t.text "uri_cache"
- t.string "simplified_type", :default => "file"
- end
-
- create_table "roles", :force => true do |t|
- t.string "name", :limit => 30, :default => "", :null => false
- t.integer "position", :default => 1
- t.boolean "assignable", :default => true
- t.integer "builtin", :default => 0, :null => false
- t.text "permissions"
- t.string "issues_visibility", :limit => 30, :default => "default", :null => false
- end
-
- create_table "schools", :force => true do |t|
- t.string "name"
- t.string "province"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- t.string "logo_link"
- end
-
- create_table "seems_rateable_cached_ratings", :force => true do |t|
- t.integer "cacheable_id", :limit => 8
- t.string "cacheable_type"
- t.float "avg", :null => false
- t.integer "cnt", :null => false
- t.string "dimension"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- end
-
- create_table "seems_rateable_rates", :force => true do |t|
- t.integer "rater_id", :limit => 8
- t.integer "rateable_id"
- t.string "rateable_type"
- t.float "stars", :null => false
- t.string "dimension"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- t.integer "is_teacher_score", :default => 0
- end
-
- create_table "settings", :force => true do |t|
- t.string "name", :default => "", :null => false
- t.text "value"
- t.datetime "updated_on"
- end
-
- add_index "settings", ["name"], :name => "index_settings_on_name"
-
- create_table "shares", :force => true do |t|
- t.date "created_on"
- t.string "url"
- t.string "title"
- t.integer "share_type"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- t.integer "project_id"
- t.integer "user_id"
- t.string "description"
- end
-
- create_table "softapplications", :force => true do |t|
- t.string "name"
- t.text "description"
- t.integer "app_type_id"
- t.string "app_type_name"
- t.string "android_min_version_available"
- t.integer "user_id"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- t.integer "contest_id"
- t.integer "softapplication_id"
- t.integer "is_public"
- t.string "application_developers"
- t.string "deposit_project_url"
- t.string "deposit_project"
- t.integer "project_id"
- end
-
- create_table "students_for_courses", :force => true do |t|
- t.integer "student_id"
- t.integer "course_id"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- end
-
- add_index "students_for_courses", ["course_id"], :name => "index_students_for_courses_on_course_id"
- add_index "students_for_courses", ["student_id"], :name => "index_students_for_courses_on_student_id"
-
- create_table "taggings", :force => true do |t|
- t.integer "tag_id"
- t.integer "taggable_id"
- t.string "taggable_type"
- t.integer "tagger_id"
- t.string "tagger_type"
- t.string "context", :limit => 128
- t.datetime "created_at"
- end
-
- add_index "taggings", ["tag_id"], :name => "index_taggings_on_tag_id"
- add_index "taggings", ["taggable_id", "taggable_type", "context"], :name => "index_taggings_on_taggable_id_and_taggable_type_and_context"
- add_index "taggings", ["taggable_type"], :name => "index_taggings_on_taggable_type"
-
- create_table "tags", :force => true do |t|
- t.string "name"
- end
-
- create_table "teachers", :force => true do |t|
- t.string "tea_name"
- t.string "location"
- t.integer "couurse_time"
- t.integer "course_code"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- t.string "extra"
- end
-
- create_table "time_entries", :force => true do |t|
- t.integer "project_id", :null => false
- t.integer "user_id", :null => false
- t.integer "issue_id"
- t.float "hours", :null => false
- t.string "comments"
- t.integer "activity_id", :null => false
- t.date "spent_on", :null => false
- t.integer "tyear", :null => false
- t.integer "tmonth", :null => false
- t.integer "tweek", :null => false
- t.datetime "created_on", :null => false
- t.datetime "updated_on", :null => false
- end
-
- add_index "time_entries", ["activity_id"], :name => "index_time_entries_on_activity_id"
- add_index "time_entries", ["created_on"], :name => "index_time_entries_on_created_on"
- add_index "time_entries", ["issue_id"], :name => "time_entries_issue_id"
- add_index "time_entries", ["project_id"], :name => "time_entries_project_id"
- add_index "time_entries", ["user_id"], :name => "index_time_entries_on_user_id"
-
- create_table "tokens", :force => true do |t|
- t.integer "user_id", :default => 0, :null => false
- t.string "action", :limit => 30, :default => "", :null => false
- t.string "value", :limit => 40, :default => "", :null => false
- t.datetime "created_on", :null => false
- end
-
- add_index "tokens", ["user_id"], :name => "index_tokens_on_user_id"
- add_index "tokens", ["value"], :name => "tokens_value", :unique => true
-
- create_table "trackers", :force => true do |t|
- t.string "name", :limit => 30, :default => "", :null => false
- t.boolean "is_in_chlog", :default => false, :null => false
- t.integer "position", :default => 1
- t.boolean "is_in_roadmap", :default => true, :null => false
- t.integer "fields_bits", :default => 0
- end
-
- create_table "user_extensions", :force => true do |t|
- t.integer "user_id", :null => false
- t.date "birthday"
- t.string "brief_introduction"
- t.integer "gender"
- t.string "location"
- t.string "occupation"
- t.integer "work_experience"
- t.integer "zip_code"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- t.string "technical_title"
- t.integer "identity"
- t.string "student_id"
- t.string "teacher_realname"
- t.string "student_realname"
- t.string "location_city"
- t.integer "school_id"
- end
-
- create_table "user_grades", :force => true do |t|
- t.integer "user_id", :null => false
- t.integer "project_id", :null => false
- t.float "grade", :default => 0.0
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- end
-
- add_index "user_grades", ["grade"], :name => "index_user_grades_on_grade"
- add_index "user_grades", ["project_id"], :name => "index_user_grades_on_project_id"
- add_index "user_grades", ["user_id"], :name => "index_user_grades_on_user_id"
-
- create_table "user_levels", :force => true do |t|
- t.integer "user_id"
- t.integer "level"
- end
-
- create_table "user_preferences", :force => true do |t|
- t.integer "user_id", :default => 0, :null => false
- t.text "others"
- t.boolean "hide_mail", :default => false
- t.string "time_zone"
- end
-
- add_index "user_preferences", ["user_id"], :name => "index_user_preferences_on_user_id"
-
- create_table "user_score_details", :force => true do |t|
- t.integer "current_user_id"
- t.integer "target_user_id"
- t.string "score_type"
- t.string "score_action"
- t.integer "user_id"
- t.integer "old_score"
- t.integer "new_score"
- t.integer "current_user_level"
- t.integer "target_user_level"
- t.integer "score_changeable_obj_id"
- t.string "score_changeable_obj_type"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- end
-
- create_table "user_scores", :force => true do |t|
- t.integer "user_id", :null => false
- t.integer "collaboration"
- t.integer "influence"
- t.integer "skill"
- t.integer "active"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- end
-
- create_table "user_statuses", :force => true do |t|
- t.integer "changesets_count"
- t.integer "watchers_count"
- t.integer "user_id"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- t.float "grade", :default => 0.0
- end
-
- add_index "user_statuses", ["changesets_count"], :name => "index_user_statuses_on_changesets_count"
- add_index "user_statuses", ["grade"], :name => "index_user_statuses_on_grade"
- add_index "user_statuses", ["watchers_count"], :name => "index_user_statuses_on_watchers_count"
-
- create_table "users", :force => true do |t|
- t.string "login", :default => "", :null => false
- t.string "hashed_password", :limit => 40, :default => "", :null => false
- t.string "firstname", :limit => 30, :default => "", :null => false
- t.string "lastname", :default => "", :null => false
- t.string "mail", :limit => 60, :default => "", :null => false
- t.boolean "admin", :default => false, :null => false
- t.integer "status", :default => 1, :null => false
- t.datetime "last_login_on"
- t.string "language", :limit => 5, :default => ""
- t.integer "auth_source_id"
- t.datetime "created_on"
- t.datetime "updated_on"
- t.string "type"
- t.string "identity_url"
- t.string "mail_notification", :default => "", :null => false
- t.string "salt", :limit => 64
- end
-
- add_index "users", ["auth_source_id"], :name => "index_users_on_auth_source_id"
- add_index "users", ["id", "type"], :name => "index_users_on_id_and_type"
- add_index "users", ["type"], :name => "index_users_on_type"
-
- create_table "versions", :force => true do |t|
- t.integer "project_id", :default => 0, :null => false
- t.string "name", :default => "", :null => false
- t.string "description", :default => ""
- t.date "effective_date"
- t.datetime "created_on"
- t.datetime "updated_on"
- t.string "wiki_page_title"
- t.string "status", :default => "open"
- t.string "sharing", :default => "none", :null => false
- end
-
- add_index "versions", ["project_id"], :name => "versions_project_id"
- add_index "versions", ["sharing"], :name => "index_versions_on_sharing"
-
- create_table "watchers", :force => true do |t|
- t.string "watchable_type", :default => "", :null => false
- t.integer "watchable_id", :default => 0, :null => false
- t.integer "user_id"
- end
-
- add_index "watchers", ["user_id", "watchable_type"], :name => "watchers_user_id_type"
- add_index "watchers", ["user_id"], :name => "index_watchers_on_user_id"
- add_index "watchers", ["watchable_id", "watchable_type"], :name => "index_watchers_on_watchable_id_and_watchable_type"
-
- create_table "web_footer_companies", :force => true do |t|
- t.string "name"
- t.string "logo_size"
- t.string "url"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- end
-
- create_table "web_footer_oranizers", :force => true do |t|
- t.string "name"
- t.text "description"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- end
-
- create_table "wiki_content_versions", :force => true do |t|
- t.integer "wiki_content_id", :null => false
- t.integer "page_id", :null => false
- t.integer "author_id"
- t.binary "data", :limit => 2147483647
- t.string "compression", :limit => 6, :default => ""
- t.string "comments", :default => ""
- t.datetime "updated_on", :null => false
- t.integer "version", :null => false
- end
-
- add_index "wiki_content_versions", ["updated_on"], :name => "index_wiki_content_versions_on_updated_on"
- add_index "wiki_content_versions", ["wiki_content_id"], :name => "wiki_content_versions_wcid"
-
- create_table "wiki_contents", :force => true do |t|
- t.integer "page_id", :null => false
- t.integer "author_id"
- t.text "text", :limit => 2147483647
- t.string "comments", :default => ""
- t.datetime "updated_on", :null => false
- t.integer "version", :null => false
- end
-
- add_index "wiki_contents", ["author_id"], :name => "index_wiki_contents_on_author_id"
- add_index "wiki_contents", ["page_id"], :name => "wiki_contents_page_id"
-
- create_table "wiki_pages", :force => true do |t|
- t.integer "wiki_id", :null => false
- t.string "title", :null => false
- t.datetime "created_on", :null => false
- t.boolean "protected", :default => false, :null => false
- t.integer "parent_id"
- end
-
- add_index "wiki_pages", ["parent_id"], :name => "index_wiki_pages_on_parent_id"
- add_index "wiki_pages", ["wiki_id", "title"], :name => "wiki_pages_wiki_id_title"
- add_index "wiki_pages", ["wiki_id"], :name => "index_wiki_pages_on_wiki_id"
-
- create_table "wiki_redirects", :force => true do |t|
- t.integer "wiki_id", :null => false
- t.string "title"
- t.string "redirects_to"
- t.datetime "created_on", :null => false
- end
-
- add_index "wiki_redirects", ["wiki_id", "title"], :name => "wiki_redirects_wiki_id_title"
- add_index "wiki_redirects", ["wiki_id"], :name => "index_wiki_redirects_on_wiki_id"
-
- create_table "wikis", :force => true do |t|
- t.integer "project_id", :null => false
- t.string "start_page", :null => false
- t.integer "status", :default => 1, :null => false
- end
-
- add_index "wikis", ["project_id"], :name => "wikis_project_id"
-
- create_table "workflows", :force => true do |t|
- t.integer "tracker_id", :default => 0, :null => false
- t.integer "old_status_id", :default => 0, :null => false
- t.integer "new_status_id", :default => 0, :null => false
- t.integer "role_id", :default => 0, :null => false
- t.boolean "assignee", :default => false, :null => false
- t.boolean "author", :default => false, :null => false
- t.string "type", :limit => 30
- t.string "field_name", :limit => 30
- t.string "rule", :limit => 30
- end
-
- add_index "workflows", ["new_status_id"], :name => "index_workflows_on_new_status_id"
- add_index "workflows", ["old_status_id"], :name => "index_workflows_on_old_status_id"
- add_index "workflows", ["role_id", "tracker_id", "old_status_id"], :name => "wkfs_role_tracker_old_status"
- add_index "workflows", ["role_id"], :name => "index_workflows_on_role_id"
-
- create_table "works_categories", :force => true do |t|
- t.string "category"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- end
-
- create_table "zip_packs", :force => true do |t|
- t.integer "user_id"
- t.integer "homework_id"
- t.string "file_digest"
- t.string "file_path"
- t.integer "pack_times", :default => 1
- t.integer "pack_size", :default => 0
- t.text "file_digests"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- end
-
-end
+# encoding: UTF-8
+# This file is auto-generated from the current state of the database. Instead
+# of editing this file, please use the migrations feature of Active Record to
+# incrementally modify your database, and then regenerate this schema definition.
+#
+# Note that this schema.rb definition is the authoritative source for your
+# database schema. If you need to create the application database on another
+# system, you should be using db:schema:load, not running all the migrations
+# from scratch. The latter is a flawed and unsustainable approach (the more migrations
+# you'll amass, the slower it'll run and the greater likelihood for issues).
+#
+# It's strongly recommended to check this file into your version control system.
+
+ActiveRecord::Schema.define(:version => 20150505025537) do
+
+ create_table "activities", :force => true do |t|
+ t.integer "act_id", :null => false
+ t.string "act_type", :null => false
+ t.integer "user_id", :null => false
+ end
+
+ add_index "activities", ["act_id", "act_type"], :name => "index_activities_on_act_id_and_act_type"
+ add_index "activities", ["user_id", "act_type"], :name => "index_activities_on_user_id_and_act_type"
+ add_index "activities", ["user_id"], :name => "index_activities_on_user_id"
+
+ create_table "api_keys", :force => true do |t|
+ t.string "access_token"
+ t.datetime "expires_at"
+ t.integer "user_id"
+ t.boolean "active", :default => true
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ end
+
+ 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"
+
+ create_table "applied_projects", :force => true do |t|
+ t.integer "project_id", :null => false
+ t.integer "user_id", :null => false
+ end
+
+ create_table "apply_project_masters", :force => true do |t|
+ t.integer "user_id"
+ t.string "apply_type"
+ t.integer "apply_id"
+ t.integer "status"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ end
+
+ create_table "attachments", :force => true do |t|
+ t.integer "container_id"
+ t.string "container_type", :limit => 30
+ t.string "filename", :default => "", :null => false
+ t.string "disk_filename", :default => "", :null => false
+ t.integer "filesize", :default => 0, :null => false
+ t.string "content_type", :default => ""
+ t.string "digest", :limit => 40, :default => "", :null => false
+ t.integer "downloads", :default => 0, :null => false
+ t.integer "author_id", :default => 0, :null => false
+ t.datetime "created_on"
+ t.string "description"
+ t.string "disk_directory"
+ t.integer "attachtype", :default => 1
+ t.integer "is_public", :default => 1
+ t.integer "copy_from"
+ t.integer "quotes"
+ end
+
+ add_index "attachments", ["author_id"], :name => "index_attachments_on_author_id"
+ add_index "attachments", ["container_id", "container_type"], :name => "index_attachments_on_container_id_and_container_type"
+ add_index "attachments", ["created_on"], :name => "index_attachments_on_created_on"
+
+ create_table "attachmentstypes", :force => true do |t|
+ t.integer "typeId", :null => false
+ t.string "typeName", :limit => 50
+ end
+
+ create_table "auth_sources", :force => true do |t|
+ t.string "type", :limit => 30, :default => "", :null => false
+ t.string "name", :limit => 60, :default => "", :null => false
+ t.string "host", :limit => 60
+ t.integer "port"
+ t.string "account"
+ t.string "account_password", :default => ""
+ t.string "base_dn"
+ t.string "attr_login", :limit => 30
+ t.string "attr_firstname", :limit => 30
+ t.string "attr_lastname", :limit => 30
+ t.string "attr_mail", :limit => 30
+ t.boolean "onthefly_register", :default => false, :null => false
+ t.boolean "tls", :default => false, :null => false
+ t.string "filter"
+ t.integer "timeout"
+ end
+
+ add_index "auth_sources", ["id", "type"], :name => "index_auth_sources_on_id_and_type"
+
+ create_table "biding_projects", :force => true do |t|
+ t.integer "project_id"
+ t.integer "bid_id"
+ t.integer "user_id"
+ t.string "description"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ t.string "reward"
+ end
+
+ create_table "bids", :force => true do |t|
+ t.string "name"
+ t.string "budget", :null => false
+ t.integer "author_id"
+ t.date "deadline"
+ t.text "description"
+ t.datetime "created_on", :null => false
+ t.datetime "updated_on", :null => false
+ t.integer "commit"
+ t.integer "reward_type"
+ t.integer "homework_type"
+ t.integer "parent_id"
+ t.string "password"
+ t.integer "is_evaluation"
+ t.integer "proportion", :default => 60
+ t.integer "comment_status", :default => 0
+ t.integer "evaluation_num", :default => 3
+ t.integer "open_anonymous_evaluation", :default => 1
+ end
+
+ create_table "boards", :force => true do |t|
+ t.integer "project_id", :null => false
+ t.string "name", :default => "", :null => false
+ t.string "description"
+ t.integer "position", :default => 1
+ t.integer "topics_count", :default => 0, :null => false
+ t.integer "messages_count", :default => 0, :null => false
+ t.integer "last_message_id"
+ t.integer "parent_id"
+ t.integer "course_id"
+ end
+
+ add_index "boards", ["last_message_id"], :name => "index_boards_on_last_message_id"
+ add_index "boards", ["project_id"], :name => "boards_project_id"
+
+ create_table "bug_to_osps", :force => true do |t|
+ t.integer "osp_id"
+ t.integer "relative_memo_id"
+ t.string "description"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ end
+
+ create_table "changes", :force => true do |t|
+ t.integer "changeset_id", :null => false
+ t.string "action", :limit => 1, :default => "", :null => false
+ t.text "path", :null => false
+ t.text "from_path"
+ t.string "from_revision"
+ t.string "revision"
+ t.string "branch"
+ end
+
+ add_index "changes", ["changeset_id"], :name => "changesets_changeset_id"
+
+ create_table "changeset_parents", :id => false, :force => true do |t|
+ t.integer "changeset_id", :null => false
+ t.integer "parent_id", :null => false
+ end
+
+ add_index "changeset_parents", ["changeset_id"], :name => "changeset_parents_changeset_ids"
+ add_index "changeset_parents", ["parent_id"], :name => "changeset_parents_parent_ids"
+
+ create_table "changesets", :force => true do |t|
+ t.integer "repository_id", :null => false
+ t.string "revision", :null => false
+ t.string "committer"
+ t.datetime "committed_on", :null => false
+ t.text "comments"
+ t.date "commit_date"
+ t.string "scmid"
+ t.integer "user_id"
+ end
+
+ add_index "changesets", ["committed_on"], :name => "index_changesets_on_committed_on"
+ add_index "changesets", ["repository_id", "revision"], :name => "changesets_repos_rev", :unique => true
+ add_index "changesets", ["repository_id", "scmid"], :name => "changesets_repos_scmid"
+ add_index "changesets", ["repository_id"], :name => "index_changesets_on_repository_id"
+ add_index "changesets", ["user_id"], :name => "index_changesets_on_user_id"
+
+ create_table "changesets_issues", :id => false, :force => true do |t|
+ t.integer "changeset_id", :null => false
+ t.integer "issue_id", :null => false
+ end
+
+ add_index "changesets_issues", ["changeset_id", "issue_id"], :name => "changesets_issues_ids", :unique => true
+
+ create_table "code_review_assignments", :force => true do |t|
+ t.integer "issue_id"
+ t.integer "change_id"
+ t.integer "attachment_id"
+ t.string "file_path"
+ t.string "rev"
+ t.string "rev_to"
+ t.string "action_type"
+ t.integer "changeset_id"
+ end
+
+ create_table "code_review_project_settings", :force => true do |t|
+ t.integer "project_id"
+ t.integer "tracker_id"
+ t.datetime "created_at"
+ t.datetime "updated_at"
+ t.integer "updated_by"
+ t.boolean "hide_code_review_tab", :default => false
+ t.integer "auto_relation", :default => 1
+ t.integer "assignment_tracker_id"
+ t.text "auto_assign"
+ t.integer "lock_version", :default => 0, :null => false
+ t.boolean "tracker_in_review_dialog", :default => false
+ end
+
+ create_table "code_review_user_settings", :force => true do |t|
+ t.integer "user_id", :default => 0, :null => false
+ t.integer "mail_notification", :default => 0, :null => false
+ t.datetime "created_at"
+ t.datetime "updated_at"
+ end
+
+ create_table "code_reviews", :force => true do |t|
+ t.integer "project_id"
+ t.integer "change_id"
+ t.datetime "created_at"
+ t.datetime "updated_at"
+ t.integer "line"
+ t.integer "updated_by_id"
+ t.integer "lock_version", :default => 0, :null => false
+ t.integer "status_changed_from"
+ t.integer "status_changed_to"
+ t.integer "issue_id"
+ t.string "action_type"
+ t.string "file_path"
+ t.string "rev"
+ t.string "rev_to"
+ t.integer "attachment_id"
+ t.integer "file_count", :default => 0, :null => false
+ t.boolean "diff_all"
+ end
+
+ create_table "comments", :force => true do |t|
+ t.string "commented_type", :limit => 30, :default => "", :null => false
+ t.integer "commented_id", :default => 0, :null => false
+ t.integer "author_id", :default => 0, :null => false
+ t.text "comments"
+ t.datetime "created_on", :null => false
+ t.datetime "updated_on", :null => false
+ end
+
+ add_index "comments", ["author_id"], :name => "index_comments_on_author_id"
+ add_index "comments", ["commented_id", "commented_type"], :name => "index_comments_on_commented_id_and_commented_type"
+
+ create_table "contest_notifications", :force => true do |t|
+ t.text "title"
+ t.text "content"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ end
+
+ create_table "contesting_projects", :force => true do |t|
+ t.integer "project_id"
+ t.string "contest_id"
+ t.integer "user_id"
+ t.string "description"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ t.string "reward"
+ end
+
+ create_table "contesting_softapplications", :force => true do |t|
+ t.integer "softapplication_id"
+ t.integer "contest_id"
+ t.integer "user_id"
+ t.string "description"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ t.string "reward"
+ end
+
+ create_table "contestnotifications", :force => true do |t|
+ t.integer "contest_id"
+ t.string "title"
+ t.string "summary"
+ t.text "description"
+ t.integer "author_id"
+ t.integer "notificationcomments_count"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ end
+
+ create_table "contests", :force => true do |t|
+ t.string "name"
+ t.string "budget", :default => ""
+ t.integer "author_id"
+ t.date "deadline"
+ t.string "description"
+ t.integer "commit"
+ t.string "password"
+ t.datetime "created_on", :null => false
+ t.datetime "updated_on", :null => false
+ end
+
+ create_table "course_attachments", :force => true do |t|
+ t.string "filename"
+ t.string "disk_filename"
+ t.integer "filesize"
+ t.string "content_type"
+ t.string "digest"
+ t.integer "downloads"
+ t.string "author_id"
+ t.string "integer"
+ t.string "description"
+ t.string "disk_directory"
+ t.integer "attachtype"
+ t.integer "is_public"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ t.integer "container_id", :default => 0
+ end
+
+ create_table "course_groups", :force => true do |t|
+ t.string "name"
+ t.integer "course_id"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ end
+
+ create_table "course_infos", :force => true do |t|
+ t.integer "course_id"
+ t.integer "user_id"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ end
+
+ create_table "course_statuses", :force => true do |t|
+ t.integer "changesets_count"
+ t.integer "watchers_count"
+ t.integer "course_id"
+ t.float "grade", :default => 0.0
+ t.integer "course_ac_para", :default => 0
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ end
+
+ create_table "courses", :force => true do |t|
+ t.integer "tea_id"
+ t.string "name"
+ t.integer "state"
+ t.string "code"
+ t.integer "time"
+ t.string "extra"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ t.string "location"
+ t.string "term"
+ t.string "string"
+ t.string "password"
+ t.string "setup_time"
+ t.string "endup_time"
+ t.string "class_period"
+ t.integer "school_id"
+ t.text "description"
+ t.integer "status", :default => 1
+ t.integer "attachmenttype", :default => 2
+ t.integer "lft"
+ t.integer "rgt"
+ t.integer "is_public", :limit => 1, :default => 1
+ t.integer "inherit_members", :limit => 1, :default => 1
+ t.integer "open_student", :default => 0
+ end
+
+ create_table "custom_fields", :force => true do |t|
+ t.string "type", :limit => 30, :default => "", :null => false
+ t.string "name", :limit => 30, :default => "", :null => false
+ t.string "field_format", :limit => 30, :default => "", :null => false
+ t.text "possible_values"
+ t.string "regexp", :default => ""
+ t.integer "min_length", :default => 0, :null => false
+ t.integer "max_length", :default => 0, :null => false
+ t.boolean "is_required", :default => false, :null => false
+ t.boolean "is_for_all", :default => false, :null => false
+ t.boolean "is_filter", :default => false, :null => false
+ t.integer "position", :default => 1
+ t.boolean "searchable", :default => false
+ t.text "default_value"
+ t.boolean "editable", :default => true
+ t.boolean "visible", :default => true, :null => false
+ t.boolean "multiple", :default => false
+ end
+
+ add_index "custom_fields", ["id", "type"], :name => "index_custom_fields_on_id_and_type"
+
+ create_table "custom_fields_projects", :id => false, :force => true do |t|
+ t.integer "custom_field_id", :default => 0, :null => false
+ t.integer "project_id", :default => 0, :null => false
+ end
+
+ add_index "custom_fields_projects", ["custom_field_id", "project_id"], :name => "index_custom_fields_projects_on_custom_field_id_and_project_id", :unique => true
+
+ create_table "custom_fields_trackers", :id => false, :force => true do |t|
+ t.integer "custom_field_id", :default => 0, :null => false
+ t.integer "tracker_id", :default => 0, :null => false
+ end
+
+ add_index "custom_fields_trackers", ["custom_field_id", "tracker_id"], :name => "index_custom_fields_trackers_on_custom_field_id_and_tracker_id", :unique => true
+
+ create_table "custom_values", :force => true do |t|
+ t.string "customized_type", :limit => 30, :default => "", :null => false
+ t.integer "customized_id", :default => 0, :null => false
+ t.integer "custom_field_id", :default => 0, :null => false
+ t.text "value"
+ end
+
+ add_index "custom_values", ["custom_field_id"], :name => "index_custom_values_on_custom_field_id"
+ add_index "custom_values", ["customized_type", "customized_id"], :name => "custom_values_customized"
+
+ create_table "delayed_jobs", :force => true do |t|
+ t.integer "priority", :default => 0, :null => false
+ t.integer "attempts", :default => 0, :null => false
+ t.text "handler", :null => false
+ t.text "last_error"
+ t.datetime "run_at"
+ t.datetime "locked_at"
+ t.datetime "failed_at"
+ t.string "locked_by"
+ t.string "queue"
+ t.datetime "created_at"
+ t.datetime "updated_at"
+ end
+
+ add_index "delayed_jobs", ["priority", "run_at"], :name => "delayed_jobs_priority"
+
+ create_table "documents", :force => true do |t|
+ t.integer "project_id", :default => 0, :null => false
+ t.integer "category_id", :default => 0, :null => false
+ t.string "title", :limit => 60, :default => "", :null => false
+ t.text "description"
+ t.datetime "created_on"
+ t.integer "user_id", :default => 0
+ t.integer "is_public", :default => 1
+ end
+
+ add_index "documents", ["category_id"], :name => "index_documents_on_category_id"
+ add_index "documents", ["created_on"], :name => "index_documents_on_created_on"
+ add_index "documents", ["project_id"], :name => "documents_project_id"
+
+ create_table "enabled_modules", :force => true do |t|
+ t.integer "project_id"
+ t.string "name", :null => false
+ t.integer "course_id"
+ end
+
+ add_index "enabled_modules", ["project_id"], :name => "enabled_modules_project_id"
+
+ create_table "enumerations", :force => true do |t|
+ t.string "name", :limit => 30, :default => "", :null => false
+ t.integer "position", :default => 1
+ t.boolean "is_default", :default => false, :null => false
+ t.string "type"
+ t.boolean "active", :default => true, :null => false
+ t.integer "project_id"
+ t.integer "parent_id"
+ t.string "position_name", :limit => 30
+ end
+
+ add_index "enumerations", ["id", "type"], :name => "index_enumerations_on_id_and_type"
+ add_index "enumerations", ["project_id"], :name => "index_enumerations_on_project_id"
+
+ create_table "first_pages", :force => true do |t|
+ t.string "web_title"
+ t.string "title"
+ t.text "description"
+ t.string "page_type"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ t.integer "sort_type"
+ t.integer "image_width", :default => 107
+ t.integer "image_height", :default => 63
+ t.integer "show_course", :default => 1
+ t.integer "show_contest", :default => 1
+ end
+
+ create_table "forge_activities", :force => true do |t|
+ t.integer "user_id"
+ t.integer "project_id"
+ t.integer "forge_act_id"
+ t.string "forge_act_type"
+ t.integer "org_id"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ end
+
+ add_index "forge_activities", ["forge_act_id"], :name => "index_forge_activities_on_forge_act_id"
+
+ create_table "forums", :force => true do |t|
+ t.string "name", :null => false
+ t.text "description"
+ t.integer "topic_count", :default => 0
+ t.integer "memo_count", :default => 0
+ t.integer "last_memo_id", :default => 0
+ t.integer "creator_id", :null => false
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ t.integer "sticky"
+ t.integer "locked"
+ end
+
+ create_table "groups_users", :id => false, :force => true do |t|
+ t.integer "group_id", :null => false
+ t.integer "user_id", :null => false
+ end
+
+ add_index "groups_users", ["group_id", "user_id"], :name => "groups_users_ids", :unique => true
+
+ create_table "homework_attaches", :force => true do |t|
+ t.integer "bid_id"
+ t.integer "user_id"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ t.string "reward"
+ t.string "name"
+ t.text "description"
+ t.integer "state"
+ t.integer "project_id", :default => 0
+ t.float "score", :default => 0.0
+ t.integer "is_teacher_score", :default => 0
+ end
+
+ add_index "homework_attaches", ["bid_id"], :name => "index_homework_attaches_on_bid_id"
+
+ create_table "homework_evaluations", :force => true do |t|
+ t.string "user_id"
+ t.string "homework_attach_id"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ end
+
+ create_table "homework_for_courses", :force => true do |t|
+ t.integer "course_id"
+ t.integer "bid_id"
+ end
+
+ add_index "homework_for_courses", ["bid_id"], :name => "index_homework_for_courses_on_bid_id"
+ add_index "homework_for_courses", ["course_id"], :name => "index_homework_for_courses_on_course_id"
+
+ create_table "homework_users", :force => true do |t|
+ t.string "homework_attach_id"
+ t.string "user_id"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ end
+
+ create_table "issue_categories", :force => true do |t|
+ t.integer "project_id", :default => 0, :null => false
+ t.string "name", :limit => 30, :default => "", :null => false
+ t.integer "assigned_to_id"
+ end
+
+ add_index "issue_categories", ["assigned_to_id"], :name => "index_issue_categories_on_assigned_to_id"
+ add_index "issue_categories", ["project_id"], :name => "issue_categories_project_id"
+
+ create_table "issue_relations", :force => true do |t|
+ t.integer "issue_from_id", :null => false
+ t.integer "issue_to_id", :null => false
+ t.string "relation_type", :default => "", :null => false
+ t.integer "delay"
+ end
+
+ add_index "issue_relations", ["issue_from_id", "issue_to_id"], :name => "index_issue_relations_on_issue_from_id_and_issue_to_id", :unique => true
+ add_index "issue_relations", ["issue_from_id"], :name => "index_issue_relations_on_issue_from_id"
+ add_index "issue_relations", ["issue_to_id"], :name => "index_issue_relations_on_issue_to_id"
+
+ create_table "issue_statuses", :force => true do |t|
+ t.string "name", :limit => 30, :default => "", :null => false
+ t.boolean "is_closed", :default => false, :null => false
+ t.boolean "is_default", :default => false, :null => false
+ t.integer "position", :default => 1
+ t.integer "default_done_ratio"
+ end
+
+ add_index "issue_statuses", ["is_closed"], :name => "index_issue_statuses_on_is_closed"
+ add_index "issue_statuses", ["is_default"], :name => "index_issue_statuses_on_is_default"
+ add_index "issue_statuses", ["position"], :name => "index_issue_statuses_on_position"
+
+ create_table "issues", :force => true do |t|
+ t.integer "tracker_id", :null => false
+ t.integer "project_id", :null => false
+ t.string "subject", :default => "", :null => false
+ t.text "description"
+ t.date "due_date"
+ t.integer "category_id"
+ t.integer "status_id", :null => false
+ t.integer "assigned_to_id"
+ t.integer "priority_id", :null => false
+ t.integer "fixed_version_id"
+ t.integer "author_id", :null => false
+ t.integer "lock_version", :default => 0, :null => false
+ t.datetime "created_on"
+ t.datetime "updated_on"
+ t.date "start_date"
+ t.integer "done_ratio", :default => 0, :null => false
+ t.float "estimated_hours"
+ t.integer "parent_id"
+ t.integer "root_id"
+ t.integer "lft"
+ t.integer "rgt"
+ t.boolean "is_private", :default => false, :null => false
+ t.datetime "closed_on"
+ t.integer "project_issues_index"
+ end
+
+ add_index "issues", ["assigned_to_id"], :name => "index_issues_on_assigned_to_id"
+ add_index "issues", ["author_id"], :name => "index_issues_on_author_id"
+ add_index "issues", ["category_id"], :name => "index_issues_on_category_id"
+ add_index "issues", ["created_on"], :name => "index_issues_on_created_on"
+ add_index "issues", ["fixed_version_id"], :name => "index_issues_on_fixed_version_id"
+ add_index "issues", ["priority_id"], :name => "index_issues_on_priority_id"
+ add_index "issues", ["project_id"], :name => "issues_project_id"
+ add_index "issues", ["root_id", "lft", "rgt"], :name => "index_issues_on_root_id_and_lft_and_rgt"
+ add_index "issues", ["status_id"], :name => "index_issues_on_status_id"
+ add_index "issues", ["tracker_id"], :name => "index_issues_on_tracker_id"
+
+ create_table "join_in_competitions", :force => true do |t|
+ t.integer "user_id"
+ t.integer "competition_id"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ end
+
+ create_table "join_in_contests", :force => true do |t|
+ t.integer "user_id"
+ t.integer "bid_id"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ end
+
+ create_table "journal_details", :force => true do |t|
+ t.integer "journal_id", :default => 0, :null => false
+ t.string "property", :limit => 30, :default => "", :null => false
+ t.string "prop_key", :limit => 30, :default => "", :null => false
+ t.text "old_value"
+ t.text "value"
+ end
+
+ add_index "journal_details", ["journal_id"], :name => "journal_details_journal_id"
+
+ create_table "journal_replies", :id => false, :force => true do |t|
+ t.integer "journal_id"
+ t.integer "user_id"
+ t.integer "reply_id"
+ end
+
+ add_index "journal_replies", ["journal_id"], :name => "index_journal_replies_on_journal_id"
+ add_index "journal_replies", ["reply_id"], :name => "index_journal_replies_on_reply_id"
+ add_index "journal_replies", ["user_id"], :name => "index_journal_replies_on_user_id"
+
+ create_table "journals", :force => true do |t|
+ t.integer "journalized_id", :default => 0, :null => false
+ t.string "journalized_type", :limit => 30, :default => "", :null => false
+ t.integer "user_id", :default => 0, :null => false
+ t.text "notes"
+ t.datetime "created_on", :null => false
+ t.boolean "private_notes", :default => false, :null => false
+ end
+
+ add_index "journals", ["created_on"], :name => "index_journals_on_created_on"
+ add_index "journals", ["journalized_id", "journalized_type"], :name => "journals_journalized_id"
+ add_index "journals", ["journalized_id"], :name => "index_journals_on_journalized_id"
+ add_index "journals", ["user_id"], :name => "index_journals_on_user_id"
+
+ create_table "journals_for_messages", :force => true do |t|
+ t.integer "jour_id"
+ t.string "jour_type"
+ t.integer "user_id"
+ t.text "notes"
+ t.integer "status"
+ t.integer "reply_id"
+ t.datetime "created_on", :null => false
+ t.datetime "updated_on", :null => false
+ t.string "m_parent_id"
+ t.boolean "is_readed"
+ t.integer "m_reply_count"
+ t.integer "m_reply_id"
+ t.integer "is_comprehensive_evaluation"
+ end
+
+ create_table "kindeditor_assets", :force => true do |t|
+ t.string "asset"
+ t.integer "file_size"
+ t.string "file_type"
+ t.integer "owner_id"
+ t.string "asset_type"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ t.integer "owner_type", :default => 0
+ end
+
+ create_table "member_roles", :force => true do |t|
+ t.integer "member_id", :null => false
+ t.integer "role_id", :null => false
+ t.integer "inherited_from"
+ end
+
+ add_index "member_roles", ["member_id"], :name => "index_member_roles_on_member_id"
+ add_index "member_roles", ["role_id"], :name => "index_member_roles_on_role_id"
+
+ create_table "members", :force => true do |t|
+ t.integer "user_id", :default => 0, :null => false
+ t.integer "project_id", :default => 0
+ t.datetime "created_on"
+ t.boolean "mail_notification", :default => false, :null => false
+ t.integer "course_id", :default => -1
+ t.integer "course_group_id", :default => 0
+ end
+
+ add_index "members", ["project_id"], :name => "index_members_on_project_id"
+ add_index "members", ["user_id", "project_id", "course_id"], :name => "index_members_on_user_id_and_project_id", :unique => true
+ add_index "members", ["user_id"], :name => "index_members_on_user_id"
+
+ create_table "memos", :force => true do |t|
+ t.integer "forum_id", :null => false
+ t.integer "parent_id"
+ t.string "subject", :null => false
+ t.text "content", :null => false
+ t.integer "author_id", :null => false
+ t.integer "replies_count", :default => 0
+ t.integer "last_reply_id"
+ t.boolean "lock", :default => false
+ t.boolean "sticky", :default => false
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ t.integer "viewed_count", :default => 0
+ end
+
+ create_table "messages", :force => true do |t|
+ t.integer "board_id", :null => false
+ t.integer "parent_id"
+ t.string "subject", :default => "", :null => false
+ t.text "content"
+ t.integer "author_id"
+ t.integer "replies_count", :default => 0, :null => false
+ t.integer "last_reply_id"
+ t.datetime "created_on", :null => false
+ t.datetime "updated_on", :null => false
+ t.boolean "locked", :default => false
+ t.integer "sticky", :default => 0
+ end
+
+ add_index "messages", ["author_id"], :name => "index_messages_on_author_id"
+ add_index "messages", ["board_id"], :name => "messages_board_id"
+ add_index "messages", ["created_on"], :name => "index_messages_on_created_on"
+ add_index "messages", ["last_reply_id"], :name => "index_messages_on_last_reply_id"
+ add_index "messages", ["parent_id"], :name => "messages_parent_id"
+
+ create_table "news", :force => true do |t|
+ t.integer "project_id"
+ t.string "title", :limit => 60, :default => "", :null => false
+ t.string "summary", :default => ""
+ t.text "description"
+ t.integer "author_id", :default => 0, :null => false
+ t.datetime "created_on"
+ t.integer "comments_count", :default => 0, :null => false
+ t.integer "course_id"
+ end
+
+ add_index "news", ["author_id"], :name => "index_news_on_author_id"
+ add_index "news", ["created_on"], :name => "index_news_on_created_on"
+ add_index "news", ["project_id"], :name => "news_project_id"
+
+ create_table "no_uses", :force => true do |t|
+ t.integer "user_id", :null => false
+ t.string "no_use_type"
+ t.integer "no_use_id"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ end
+
+ create_table "notificationcomments", :force => true do |t|
+ t.string "notificationcommented_type"
+ t.integer "notificationcommented_id"
+ t.integer "author_id"
+ t.text "notificationcomments"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ end
+
+ create_table "open_id_authentication_associations", :force => true do |t|
+ t.integer "issued"
+ t.integer "lifetime"
+ t.string "handle"
+ t.string "assoc_type"
+ t.binary "server_url"
+ t.binary "secret"
+ end
+
+ create_table "open_id_authentication_nonces", :force => true do |t|
+ t.integer "timestamp", :null => false
+ t.string "server_url"
+ t.string "salt", :null => false
+ end
+
+ create_table "open_source_projects", :force => true do |t|
+ t.string "name"
+ t.text "description"
+ t.integer "commit_count", :default => 0
+ t.integer "code_line", :default => 0
+ t.integer "users_count", :default => 0
+ t.date "last_commit_time"
+ t.string "url"
+ t.date "date_collected"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ end
+
+ create_table "option_numbers", :force => true do |t|
+ t.integer "user_id"
+ t.integer "memo"
+ t.integer "messages_for_issues"
+ t.integer "issues_status"
+ t.integer "replay_for_message"
+ t.integer "replay_for_memo"
+ t.integer "follow"
+ t.integer "tread"
+ t.integer "praise_by_one"
+ t.integer "praise_by_two"
+ t.integer "praise_by_three"
+ t.integer "tread_by_one"
+ t.integer "tread_by_two"
+ t.integer "tread_by_three"
+ t.integer "changeset"
+ t.integer "document"
+ t.integer "attachment"
+ t.integer "issue_done_ratio"
+ t.integer "post_issue"
+ t.integer "score_type"
+ t.integer "total_score"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ t.integer "project_id"
+ end
+
+ create_table "organizations", :force => true do |t|
+ t.string "name"
+ t.string "logo_link"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ end
+
+ create_table "phone_app_versions", :force => true do |t|
+ t.string "version"
+ t.text "description"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ end
+
+ create_table "poll_answers", :force => true do |t|
+ t.integer "poll_question_id"
+ t.text "answer_text"
+ t.integer "answer_position"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ end
+
+ create_table "poll_questions", :force => true do |t|
+ t.string "question_title"
+ t.integer "question_type"
+ t.integer "is_necessary"
+ t.integer "poll_id"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ t.integer "question_number"
+ end
+
+ create_table "poll_users", :force => true do |t|
+ t.integer "user_id"
+ t.integer "poll_id"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ end
+
+ create_table "poll_votes", :force => true do |t|
+ t.integer "user_id"
+ t.integer "poll_question_id"
+ t.integer "poll_answer_id"
+ t.text "vote_text"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ end
+
+ create_table "polls", :force => true do |t|
+ t.string "polls_name"
+ t.string "polls_type"
+ t.integer "polls_group_id"
+ t.integer "polls_status"
+ t.integer "user_id"
+ t.datetime "published_at"
+ t.datetime "closed_at"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ t.text "polls_description"
+ t.integer "show_result", :default => 1
+ end
+
+ create_table "praise_tread_caches", :force => true do |t|
+ t.integer "object_id", :null => false
+ t.string "object_type"
+ t.integer "praise_num"
+ t.integer "tread_num"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ end
+
+ create_table "praise_treads", :force => true do |t|
+ t.integer "user_id", :null => false
+ t.integer "praise_tread_object_id"
+ t.string "praise_tread_object_type"
+ t.integer "praise_or_tread"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ end
+
+ create_table "project_infos", :force => true do |t|
+ t.integer "project_id"
+ t.integer "user_id"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ end
+
+ create_table "project_scores", :force => true do |t|
+ t.string "project_id"
+ t.integer "score"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ t.integer "issue_num", :default => 0
+ t.integer "issue_journal_num", :default => 0
+ t.integer "news_num", :default => 0
+ t.integer "documents_num", :default => 0
+ t.integer "changeset_num", :default => 0
+ t.integer "board_message_num", :default => 0
+ end
+
+ create_table "project_statuses", :force => true do |t|
+ t.integer "changesets_count"
+ t.integer "watchers_count"
+ t.integer "project_id"
+ t.integer "project_type"
+ t.float "grade", :default => 0.0
+ t.integer "course_ac_para", :default => 0
+ end
+
+ add_index "project_statuses", ["grade"], :name => "index_project_statuses_on_grade"
+
+ create_table "projecting_softapplictions", :force => true do |t|
+ t.integer "user_id"
+ t.integer "softapplication_id"
+ t.integer "project_id"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ end
+
+ create_table "projects", :force => true do |t|
+ t.string "name", :default => "", :null => false
+ t.text "description"
+ t.string "homepage", :default => ""
+ t.boolean "is_public", :default => true, :null => false
+ t.integer "parent_id"
+ t.datetime "created_on"
+ t.datetime "updated_on"
+ t.string "identifier"
+ t.integer "status", :default => 1, :null => false
+ t.integer "lft"
+ t.integer "rgt"
+ t.boolean "inherit_members", :default => false, :null => false
+ t.integer "project_type"
+ t.boolean "hidden_repo", :default => false, :null => false
+ t.integer "attachmenttype", :default => 1
+ t.integer "user_id"
+ t.integer "dts_test", :default => 0
+ t.string "enterprise_name"
+ t.integer "organization_id"
+ t.integer "project_new_type"
+ end
+
+ add_index "projects", ["lft"], :name => "index_projects_on_lft"
+ add_index "projects", ["rgt"], :name => "index_projects_on_rgt"
+
+ create_table "projects_trackers", :id => false, :force => true do |t|
+ t.integer "project_id", :default => 0, :null => false
+ t.integer "tracker_id", :default => 0, :null => false
+ end
+
+ 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"
+
+ create_table "queries", :force => true do |t|
+ t.integer "project_id"
+ t.string "name", :default => "", :null => false
+ t.text "filters"
+ t.integer "user_id", :default => 0, :null => false
+ t.boolean "is_public", :default => false, :null => false
+ t.text "column_names"
+ t.text "sort_criteria"
+ t.string "group_by"
+ t.string "type"
+ end
+
+ add_index "queries", ["project_id"], :name => "index_queries_on_project_id"
+ add_index "queries", ["user_id"], :name => "index_queries_on_user_id"
+
+ create_table "relative_memo_to_open_source_projects", :force => true do |t|
+ t.integer "osp_id"
+ t.integer "relative_memo_id"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ end
+
+ create_table "relative_memos", :force => true do |t|
+ t.integer "osp_id"
+ t.integer "parent_id"
+ t.string "subject", :null => false
+ t.text "content", :limit => 16777215, :null => false
+ t.integer "author_id"
+ t.integer "replies_count", :default => 0
+ t.integer "last_reply_id"
+ t.boolean "lock", :default => false
+ t.boolean "sticky", :default => false
+ t.boolean "is_quote", :default => false
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ t.integer "viewed_count_crawl", :default => 0
+ t.integer "viewed_count_local", :default => 0
+ t.string "url"
+ t.string "username"
+ t.string "userhomeurl"
+ t.date "date_collected"
+ t.string "topic_resource"
+ end
+
+ create_table "repositories", :force => true do |t|
+ t.integer "project_id", :default => 0, :null => false
+ t.string "url", :default => "", :null => false
+ t.string "login", :limit => 60, :default => ""
+ t.string "password", :default => ""
+ t.string "root_url", :default => ""
+ t.string "type"
+ t.string "path_encoding", :limit => 64
+ t.string "log_encoding", :limit => 64
+ t.text "extra_info"
+ t.string "identifier"
+ t.boolean "is_default", :default => false
+ t.boolean "hidden", :default => false
+ end
+
+ add_index "repositories", ["project_id"], :name => "index_repositories_on_project_id"
+
+ create_table "rich_rich_files", :force => true do |t|
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ t.string "rich_file_file_name"
+ t.string "rich_file_content_type"
+ t.integer "rich_file_file_size"
+ t.datetime "rich_file_updated_at"
+ t.string "owner_type"
+ t.integer "owner_id"
+ t.text "uri_cache"
+ t.string "simplified_type", :default => "file"
+ end
+
+ create_table "roles", :force => true do |t|
+ t.string "name", :limit => 30, :default => "", :null => false
+ t.integer "position", :default => 1
+ t.boolean "assignable", :default => true
+ t.integer "builtin", :default => 0, :null => false
+ t.text "permissions"
+ t.string "issues_visibility", :limit => 30, :default => "default", :null => false
+ end
+
+ create_table "schools", :force => true do |t|
+ t.string "name"
+ t.string "province"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ t.string "logo_link"
+ end
+
+ create_table "seems_rateable_cached_ratings", :force => true do |t|
+ t.integer "cacheable_id", :limit => 8
+ t.string "cacheable_type"
+ t.float "avg", :null => false
+ t.integer "cnt", :null => false
+ t.string "dimension"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ end
+
+ create_table "seems_rateable_rates", :force => true do |t|
+ t.integer "rater_id", :limit => 8
+ t.integer "rateable_id"
+ t.string "rateable_type"
+ t.float "stars", :null => false
+ t.string "dimension"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ t.integer "is_teacher_score", :default => 0
+ end
+
+ create_table "settings", :force => true do |t|
+ t.string "name", :default => "", :null => false
+ t.text "value"
+ t.datetime "updated_on"
+ end
+
+ add_index "settings", ["name"], :name => "index_settings_on_name"
+
+ create_table "shares", :force => true do |t|
+ t.date "created_on"
+ t.string "url"
+ t.string "title"
+ t.integer "share_type"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ t.integer "project_id"
+ t.integer "user_id"
+ t.string "description"
+ end
+
+ create_table "softapplications", :force => true do |t|
+ t.string "name"
+ t.text "description"
+ t.integer "app_type_id"
+ t.string "app_type_name"
+ t.string "android_min_version_available"
+ t.integer "user_id"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ t.integer "contest_id"
+ t.integer "softapplication_id"
+ t.integer "is_public"
+ t.string "application_developers"
+ t.string "deposit_project_url"
+ t.string "deposit_project"
+ t.integer "project_id"
+ end
+
+ create_table "students_for_courses", :force => true do |t|
+ t.integer "student_id"
+ t.integer "course_id"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ end
+
+ add_index "students_for_courses", ["course_id"], :name => "index_students_for_courses_on_course_id"
+ add_index "students_for_courses", ["student_id"], :name => "index_students_for_courses_on_student_id"
+
+ create_table "taggings", :force => true do |t|
+ t.integer "tag_id"
+ t.integer "taggable_id"
+ t.string "taggable_type"
+ t.integer "tagger_id"
+ t.string "tagger_type"
+ t.string "context", :limit => 128
+ t.datetime "created_at"
+ end
+
+ add_index "taggings", ["tag_id"], :name => "index_taggings_on_tag_id"
+ add_index "taggings", ["taggable_id", "taggable_type", "context"], :name => "index_taggings_on_taggable_id_and_taggable_type_and_context"
+ add_index "taggings", ["taggable_type"], :name => "index_taggings_on_taggable_type"
+
+ create_table "tags", :force => true do |t|
+ t.string "name"
+ end
+
+ create_table "teachers", :force => true do |t|
+ t.string "tea_name"
+ t.string "location"
+ t.integer "couurse_time"
+ t.integer "course_code"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ t.string "extra"
+ end
+
+ create_table "time_entries", :force => true do |t|
+ t.integer "project_id", :null => false
+ t.integer "user_id", :null => false
+ t.integer "issue_id"
+ t.float "hours", :null => false
+ t.string "comments"
+ t.integer "activity_id", :null => false
+ t.date "spent_on", :null => false
+ t.integer "tyear", :null => false
+ t.integer "tmonth", :null => false
+ t.integer "tweek", :null => false
+ t.datetime "created_on", :null => false
+ t.datetime "updated_on", :null => false
+ end
+
+ add_index "time_entries", ["activity_id"], :name => "index_time_entries_on_activity_id"
+ add_index "time_entries", ["created_on"], :name => "index_time_entries_on_created_on"
+ add_index "time_entries", ["issue_id"], :name => "time_entries_issue_id"
+ add_index "time_entries", ["project_id"], :name => "time_entries_project_id"
+ add_index "time_entries", ["user_id"], :name => "index_time_entries_on_user_id"
+
+ create_table "tokens", :force => true do |t|
+ t.integer "user_id", :default => 0, :null => false
+ t.string "action", :limit => 30, :default => "", :null => false
+ t.string "value", :limit => 40, :default => "", :null => false
+ t.datetime "created_on", :null => false
+ end
+
+ add_index "tokens", ["user_id"], :name => "index_tokens_on_user_id"
+ add_index "tokens", ["value"], :name => "tokens_value", :unique => true
+
+ create_table "trackers", :force => true do |t|
+ t.string "name", :limit => 30, :default => "", :null => false
+ t.boolean "is_in_chlog", :default => false, :null => false
+ t.integer "position", :default => 1
+ t.boolean "is_in_roadmap", :default => true, :null => false
+ t.integer "fields_bits", :default => 0
+ end
+
+ create_table "user_extensions", :force => true do |t|
+ t.integer "user_id", :null => false
+ t.date "birthday"
+ t.string "brief_introduction"
+ t.integer "gender"
+ t.string "location"
+ t.string "occupation"
+ t.integer "work_experience"
+ t.integer "zip_code"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ t.string "technical_title"
+ t.integer "identity"
+ t.string "student_id"
+ t.string "teacher_realname"
+ t.string "student_realname"
+ t.string "location_city"
+ t.integer "school_id"
+ end
+
+ create_table "user_grades", :force => true do |t|
+ t.integer "user_id", :null => false
+ t.integer "project_id", :null => false
+ t.float "grade", :default => 0.0
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ end
+
+ add_index "user_grades", ["grade"], :name => "index_user_grades_on_grade"
+ add_index "user_grades", ["project_id"], :name => "index_user_grades_on_project_id"
+ add_index "user_grades", ["user_id"], :name => "index_user_grades_on_user_id"
+
+ create_table "user_levels", :force => true do |t|
+ t.integer "user_id"
+ t.integer "level"
+ end
+
+ create_table "user_preferences", :force => true do |t|
+ t.integer "user_id", :default => 0, :null => false
+ t.text "others"
+ t.boolean "hide_mail", :default => false
+ t.string "time_zone"
+ end
+
+ add_index "user_preferences", ["user_id"], :name => "index_user_preferences_on_user_id"
+
+ create_table "user_score_details", :force => true do |t|
+ t.integer "current_user_id"
+ t.integer "target_user_id"
+ t.string "score_type"
+ t.string "score_action"
+ t.integer "user_id"
+ t.integer "old_score"
+ t.integer "new_score"
+ t.integer "current_user_level"
+ t.integer "target_user_level"
+ t.integer "score_changeable_obj_id"
+ t.string "score_changeable_obj_type"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ end
+
+ create_table "user_scores", :force => true do |t|
+ t.integer "user_id", :null => false
+ t.integer "collaboration"
+ t.integer "influence"
+ t.integer "skill"
+ t.integer "active"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ end
+
+ create_table "user_statuses", :force => true do |t|
+ t.integer "changesets_count"
+ t.integer "watchers_count"
+ t.integer "user_id"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ t.float "grade", :default => 0.0
+ end
+
+ add_index "user_statuses", ["changesets_count"], :name => "index_user_statuses_on_changesets_count"
+ add_index "user_statuses", ["grade"], :name => "index_user_statuses_on_grade"
+ add_index "user_statuses", ["watchers_count"], :name => "index_user_statuses_on_watchers_count"
+
+ create_table "users", :force => true do |t|
+ t.string "login", :default => "", :null => false
+ t.string "hashed_password", :limit => 40, :default => "", :null => false
+ t.string "firstname", :limit => 30, :default => "", :null => false
+ t.string "lastname", :default => "", :null => false
+ t.string "mail", :limit => 60, :default => "", :null => false
+ t.boolean "admin", :default => false, :null => false
+ t.integer "status", :default => 1, :null => false
+ t.datetime "last_login_on"
+ t.string "language", :limit => 5, :default => ""
+ t.integer "auth_source_id"
+ t.datetime "created_on"
+ t.datetime "updated_on"
+ t.string "type"
+ t.string "identity_url"
+ t.string "mail_notification", :default => "", :null => false
+ t.string "salt", :limit => 64
+ end
+
+ add_index "users", ["auth_source_id"], :name => "index_users_on_auth_source_id"
+ add_index "users", ["id", "type"], :name => "index_users_on_id_and_type"
+ add_index "users", ["type"], :name => "index_users_on_type"
+
+ create_table "versions", :force => true do |t|
+ t.integer "project_id", :default => 0, :null => false
+ t.string "name", :default => "", :null => false
+ t.string "description", :default => ""
+ t.date "effective_date"
+ t.datetime "created_on"
+ t.datetime "updated_on"
+ t.string "wiki_page_title"
+ t.string "status", :default => "open"
+ t.string "sharing", :default => "none", :null => false
+ end
+
+ add_index "versions", ["project_id"], :name => "versions_project_id"
+ add_index "versions", ["sharing"], :name => "index_versions_on_sharing"
+
+ create_table "watchers", :force => true do |t|
+ t.string "watchable_type", :default => "", :null => false
+ t.integer "watchable_id", :default => 0, :null => false
+ t.integer "user_id"
+ end
+
+ add_index "watchers", ["user_id", "watchable_type"], :name => "watchers_user_id_type"
+ add_index "watchers", ["user_id"], :name => "index_watchers_on_user_id"
+ add_index "watchers", ["watchable_id", "watchable_type"], :name => "index_watchers_on_watchable_id_and_watchable_type"
+
+ create_table "web_footer_companies", :force => true do |t|
+ t.string "name"
+ t.string "logo_size"
+ t.string "url"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ end
+
+ create_table "web_footer_oranizers", :force => true do |t|
+ t.string "name"
+ t.text "description"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ end
+
+ create_table "wiki_content_versions", :force => true do |t|
+ t.integer "wiki_content_id", :null => false
+ t.integer "page_id", :null => false
+ t.integer "author_id"
+ t.binary "data", :limit => 2147483647
+ t.string "compression", :limit => 6, :default => ""
+ t.string "comments", :default => ""
+ t.datetime "updated_on", :null => false
+ t.integer "version", :null => false
+ end
+
+ add_index "wiki_content_versions", ["updated_on"], :name => "index_wiki_content_versions_on_updated_on"
+ add_index "wiki_content_versions", ["wiki_content_id"], :name => "wiki_content_versions_wcid"
+
+ create_table "wiki_contents", :force => true do |t|
+ t.integer "page_id", :null => false
+ t.integer "author_id"
+ t.text "text", :limit => 2147483647
+ t.string "comments", :default => ""
+ t.datetime "updated_on", :null => false
+ t.integer "version", :null => false
+ end
+
+ add_index "wiki_contents", ["author_id"], :name => "index_wiki_contents_on_author_id"
+ add_index "wiki_contents", ["page_id"], :name => "wiki_contents_page_id"
+
+ create_table "wiki_pages", :force => true do |t|
+ t.integer "wiki_id", :null => false
+ t.string "title", :null => false
+ t.datetime "created_on", :null => false
+ t.boolean "protected", :default => false, :null => false
+ t.integer "parent_id"
+ end
+
+ add_index "wiki_pages", ["parent_id"], :name => "index_wiki_pages_on_parent_id"
+ add_index "wiki_pages", ["wiki_id", "title"], :name => "wiki_pages_wiki_id_title"
+ add_index "wiki_pages", ["wiki_id"], :name => "index_wiki_pages_on_wiki_id"
+
+ create_table "wiki_redirects", :force => true do |t|
+ t.integer "wiki_id", :null => false
+ t.string "title"
+ t.string "redirects_to"
+ t.datetime "created_on", :null => false
+ end
+
+ add_index "wiki_redirects", ["wiki_id", "title"], :name => "wiki_redirects_wiki_id_title"
+ add_index "wiki_redirects", ["wiki_id"], :name => "index_wiki_redirects_on_wiki_id"
+
+ create_table "wikis", :force => true do |t|
+ t.integer "project_id", :null => false
+ t.string "start_page", :null => false
+ t.integer "status", :default => 1, :null => false
+ end
+
+ add_index "wikis", ["project_id"], :name => "wikis_project_id"
+
+ create_table "workflows", :force => true do |t|
+ t.integer "tracker_id", :default => 0, :null => false
+ t.integer "old_status_id", :default => 0, :null => false
+ t.integer "new_status_id", :default => 0, :null => false
+ t.integer "role_id", :default => 0, :null => false
+ t.boolean "assignee", :default => false, :null => false
+ t.boolean "author", :default => false, :null => false
+ t.string "type", :limit => 30
+ t.string "field_name", :limit => 30
+ t.string "rule", :limit => 30
+ end
+
+ add_index "workflows", ["new_status_id"], :name => "index_workflows_on_new_status_id"
+ add_index "workflows", ["old_status_id"], :name => "index_workflows_on_old_status_id"
+ add_index "workflows", ["role_id", "tracker_id", "old_status_id"], :name => "wkfs_role_tracker_old_status"
+ add_index "workflows", ["role_id"], :name => "index_workflows_on_role_id"
+
+ create_table "works_categories", :force => true do |t|
+ t.string "category"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ end
+
+ create_table "zip_packs", :force => true do |t|
+ t.integer "user_id"
+ t.integer "homework_id"
+ t.string "file_digest"
+ t.string "file_path"
+ t.integer "pack_times", :default => 1
+ t.integer "pack_size", :default => 0
+ t.text "file_digests"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ end
+
+end
diff --git a/lib/git_refresh_changes.py b/lib/git_refresh_changes.py
index a0250243e..a0767bf15 100644
--- a/lib/git_refresh_changes.py
+++ b/lib/git_refresh_changes.py
@@ -1,30 +1,30 @@
-#coding=utf-8
-#!/usr/bin/env python
-
-# 脚本用于刷新版本库,由git hooks里进行调用,传入参数为git仓库路径
-# 需要配置rails项目地址
-# 必须装此文件放在git的存放目录,现在是 /home/pdl/redmine-2.3.2-0/apache2/htdocs
-
-import sys
-import os
-import urllib
-import urllib2
-
-RAILS_URL = 'http://192.168.128.128:3000/'
-
-def get_git_path():
- return sys.argv[1]
- path=os.path.realpath(sys.argv[0])
- if os.path.isfile(path):
- path=os.path.dirname(os.path.dirname(path))
- return os.path.abspath(path)
-
-def post_http_data(url, data):
- data_urlencode = urllib.urlencode(data)
- req = urllib2.Request(url = url,data =data_urlencode)
- res_data = urllib2.urlopen(req)
- #res = res_data.read()
- #return res
-
-path = get_git_path()
-post_http_data(RAILS_URL + 'git_callback/post_update', {'root_url': path})
+#coding=utf-8
+#!/usr/bin/env python
+
+# 脚本用于刷新版本库,由git hooks里进行调用,传入参数为git仓库路径
+# 需要配置rails项目地址
+# 必须装此文件放在git的存放目录,现在是 /home/pdl/redmine-2.3.2-0/apache2/htdocs
+
+import sys
+import os
+import urllib
+import urllib2
+
+RAILS_URL = 'http://192.168.128.128:3000/'
+
+def get_git_path():
+ return sys.argv[1]
+ path=os.path.realpath(sys.argv[0])
+ if os.path.isfile(path):
+ path=os.path.dirname(os.path.dirname(path))
+ return os.path.abspath(path)
+
+def post_http_data(url, data):
+ data_urlencode = urllib.urlencode(data)
+ req = urllib2.Request(url = url,data =data_urlencode)
+ res_data = urllib2.urlopen(req)
+ #res = res_data.read()
+ #return res
+
+path = get_git_path()
+post_http_data(RAILS_URL + 'git_callback/post_update', {'root_url': path})
diff --git a/plugins/redmine_ckeditor/Gemfile b/plugins/redmine_ckeditor/Gemfile
index 2a2862162..ce2f3c583 100644
--- a/plugins/redmine_ckeditor/Gemfile
+++ b/plugins/redmine_ckeditor/Gemfile
@@ -1,6 +1,6 @@
-source 'http://ruby.taobao.org'
-
-gem 'rich', '1.4.6'
-gem 'kaminari'
-gem 'htmlentities'
-gem 'paperclip', '~> 3.5.4'
+source 'http://ruby.taobao.org'
+
+gem 'rich', '1.4.6'
+gem 'kaminari'
+gem 'htmlentities'
+gem 'paperclip', '~> 3.5.4'
diff --git a/public/javascripts/application.js b/public/javascripts/application.js
index f61738935..4e5b5591e 100644
--- a/public/javascripts/application.js
+++ b/public/javascripts/application.js
@@ -1,914 +1,914 @@
-//= require_directory ./rateable
-//= require jquery.min
-//= require jquery.infinitescroll
-
-/* Redmine - project management software
- Copyright (C) 2006-2013 Jean-Philippe Lang */
-
-function cleanArray (actual){
- var newArray = new Array();
- for (var i = 0; i< actual.length; i++){
- if (actual[i]){
- newArray.push(actual[i]);
- }
- }
- return newArray;
-}
-
-function checkAll(id, checked) {
- if (checked) {
- $('#'+id).find('input[type=checkbox]').attr('checked', true);
- } else {
- $('#'+id).find('input[type=checkbox]').removeAttr('checked');
- }
-}
-
-function toggleCheckboxesBySelector(selector) {
- var all_checked = true;
- $(selector).each(function(index) {
- if (!$(this).is(':checked')) { all_checked = false; }
- });
- $(selector).attr('checked', !all_checked);
-}
-
-function showAndScrollTo(id, focus) {
- $('#'+id).show();
- if (focus !== null) {
- $('#'+focus).focus();
- }
- $('html, body').animate({scrollTop: $('#'+id).offset().top}, 400);
-}
-
-function toggleRowGroup(el) {
- var tr = $(el).parents('tr').first();
- var n = tr.next();
- tr.toggleClass('open');
- while (n.length && !n.hasClass('group')) {
- n.toggle();
- n = n.next('tr');
- }
-}
-
-function collapseAllRowGroups(el) {
- var tbody = $(el).parents('tbody').first();
- tbody.children('tr').each(function(index) {
- if ($(this).hasClass('group')) {
- $(this).removeClass('open');
- } else {
- $(this).hide();
- }
- });
-}
-
-function expandAllRowGroups(el) {
- var tbody = $(el).parents('tbody').first();
- tbody.children('tr').each(function(index) {
- if ($(this).hasClass('group')) {
- $(this).addClass('open');
- } else {
- $(this).show();
- }
- });
-}
-
-function toggleAllRowGroups(el) {
- var tr = $(el).parents('tr').first();
- if (tr.hasClass('open')) {
- collapseAllRowGroups(el);
- } else {
- expandAllRowGroups(el);
- }
-}
-
-function toggleFieldset(el) {
- var fieldset = $(el).parents('fieldset').first();
- fieldset.toggleClass('collapsed');
- fieldset.children('div').toggle();
-}
-
-function hideFieldset(el) {
- var fieldset = $(el).parents('fieldset').first();
- fieldset.toggleClass('collapsed');
- fieldset.children('div').hide();
-}
-
-function initFilters(){
- $('#add_filter_select').change(function(){
- addFilter($(this).val(), '', []);
- });
- $('#filters-table td.field input[type=checkbox]').each(function(){
- toggleFilter($(this).val());
- });
- $('#filters-table td.field input[type=checkbox]').live('click',function(){
- toggleFilter($(this).val());
- });
- $('#filters-table .toggle-multiselect').live('click',function(){
- toggleMultiSelect($(this).siblings('select'));
- });
- $('#filters-table input[type=text]').live('keypress', function(e){
- if (e.keyCode == 13) submit_query_form("query_form");
- });
-}
-
-function addFilter(field, operator, values) {
- var fieldId = field.replace('.', '_');
- var tr = $('#tr_'+fieldId);
- if (tr.length > 0) {
- tr.show();
- } else {
- buildFilterRow(field, operator, values);
- }
- $('#cb_'+fieldId).attr('checked', true);
- toggleFilter(field);
- $('#add_filter_select').val('').children('option').each(function(){
- if ($(this).attr('value') == field) {
- $(this).attr('disabled', true);
- }
- });
-}
-
-function buildFilterRow(field, operator, values) {
- var fieldId = field.replace('.', '_');
- var filterTable = $("#filters-table");
- var filterOptions = availableFilters[field];
- var operators = operatorByType[filterOptions['type']];
- var filterValues = filterOptions['values'];
- var i, select;
-
- var tr = $('
').attr('id', 'tr_'+fieldId).html(
- ' '+filterOptions['name']+' ' +
- ' ' +
- ' '
- );
- filterTable.append(tr);
-
- select = tr.find('td.operator select');
- for (i=0;i').val(operators[i]).text(operatorLabels[operators[i]]);
- if (operators[i] == operator) { option.attr('selected', true); }
- select.append(option);
- }
- select.change(function(){ toggleOperator(field); });
-
- switch (filterOptions['type']){
- case "list":
- case "list_optional":
- case "list_status":
- case "list_subprojects":
- tr.find('td.values').append(
- ' ' +
- ' 复选/multi-select '
- );
- select = tr.find('td.values select');
- if (values.length > 1) { select.attr('multiple', true); }
- for (i=0;i');
- if ($.isArray(filterValue)) {
- option.val(filterValue[1]).text(filterValue[0]);
- if ($.inArray(filterValue[1], values) > -1) {option.attr('selected', true);}
- } else {
- option.val(filterValue).text(filterValue);
- if ($.inArray(filterValue, values) > -1) {option.attr('selected', true);}
- }
- select.append(option);
- }
- break;
- case "date":
- case "date_past":
- tr.find('td.values').append(
- ' ' +
- ' ' +
- ' '+labelDayPlural+' '
- );
- $('#values_'+fieldId+'_1').val(values[0]).datepicker(datepickerOptions);
- $('#values_'+fieldId+'_2').val(values[1]).datepicker(datepickerOptions);
- $('#values_'+fieldId).val(values[0]);
- break;
- case "string":
- case "text":
- tr.find('td.values').append(
- ' '
- );
- $('#values_'+fieldId).val(values[0]);
- break;
- case "relation":
- tr.find('td.values').append(
- ' ' +
- ' '
- );
- $('#values_'+fieldId).val(values[0]);
- select = tr.find('td.values select');
- for (i=0;i');
- option.val(filterValue[1]).text(filterValue[0]);
- if (values[0] == filterValue[1]) { option.attr('selected', true); }
- select.append(option);
- }
- case "integer":
- case "float":
- tr.find('td.values').append(
- ' ' +
- ' '
- );
- $('#values_'+fieldId+'_1').val(values[0]);
- $('#values_'+fieldId+'_2').val(values[1]);
- break;
- }
-}
-
-function toggleFilter(field) {
- var fieldId = field.replace('.', '_');
- if ($('#cb_' + fieldId).is(':checked')) {
- $("#operators_" + fieldId).show().removeAttr('disabled');
- toggleOperator(field);
- } else {
- $("#operators_" + fieldId).hide().attr('disabled', true);
- enableValues(field, []);
- }
-}
-
-function enableValues(field, indexes) {
- var fieldId = field.replace('.', '_');
- $('#tr_'+fieldId+' td.values .value').each(function(index) {
- if ($.inArray(index, indexes) >= 0) {
- $(this).removeAttr('disabled');
- $(this).parents('span').first().show();
- } else {
- $(this).val('');
- $(this).attr('disabled', true);
- $(this).parents('span').first().hide();
- }
-
- if ($(this).hasClass('group')) {
- $(this).addClass('open');
- } else {
- $(this).show();
- }
- });
-}
-
-function toggleOperator(field) {
- var fieldId = field.replace('.', '_');
- var operator = $("#operators_" + fieldId);
- switch (operator.val()) {
- case "!*":
- case "*":
- case "t":
- case "ld":
- case "w":
- case "lw":
- case "l2w":
- case "m":
- case "lm":
- case "y":
- case "o":
- case "c":
- enableValues(field, []);
- break;
- case "><":
- enableValues(field, [0,1]);
- break;
- case "t+":
- case ">t-":
- case "0) {
- lis.eq(i-1).show();
- }
-}
-
-function displayTabsButtons() {
- var lis;
- var tabsWidth = 0;
- var el;
- $('div.tabs').each(function() {
- el = $(this);
- lis = el.find('ul').children();
- lis.each(function(){
- if ($(this).is(':visible')) {
- tabsWidth += $(this).width() + 6;
- }
- });
- if ((tabsWidth < el.width() - 60) && (lis.first().is(':visible'))) {
- el.find('div.tabs-buttons').hide();
- } else {
- el.find('div.tabs-buttons').show();
- }
- });
-}
-
-function setPredecessorFieldsVisibility() {
- var relationType = $('#relation_relation_type');
- if (relationType.val() == "precedes" || relationType.val() == "follows") {
- $('#predecessor_fields').show();
- } else {
- $('#predecessor_fields').hide();
- }
-}
-
-function showModal(id, width) {
- var el = $('#'+id).first();
- if (el.length === 0 || el.is(':visible')) {return;}
- var title = el.find('h3.title').text();
- el.dialog({
- width: width,
- modal: true,
- resizable: false,
- dialogClass: 'modal',
- title: title
- });
- el.find("input[type=text], input[type=submit]").first().focus();
-}
-
-function hideModal(el) {
- var modal;
- if (el) {
- modal = $(el).parents('.ui-dialog-content');
- } else {
- modal = $('#ajax-modal');
- }
- modal.dialog("close");
-}
-
-function submitPreview(url, form, target) {
- $.ajax({
- url: url,
- type: 'post',
- data: $('#'+form).serialize(),
- success: function(data){
- $('#'+target).html(data);
- }
- });
-}
-
-function collapseScmEntry(id) {
- $('.'+id).each(function() {
- if ($(this).hasClass('open')) {
- collapseScmEntry($(this).attr('id'));
- }
- $(this).hide();
- });
- $('#'+id).removeClass('open');
-}
-
-function expandScmEntry(id) {
- $('.'+id).each(function() {
- $(this).show();
- if ($(this).hasClass('loaded') && !$(this).hasClass('collapsed')) {
- expandScmEntry($(this).attr('id'));
- }
- });
- $('#'+id).addClass('open');
-}
-
-function scmEntryClick(id, url) {
- el = $('#'+id);
- if (el.hasClass('open')) {
- collapseScmEntry(id);
- el.addClass('collapsed');
- return false;
- } else if (el.hasClass('loaded')) {
- expandScmEntry(id);
- el.removeClass('collapsed');
- return false;
- }
- if (el.hasClass('loading')) {
- return false;
- }
- el.addClass('loading');
- $.ajax({
- url: url,
- success: function(data){
- el.after(data);
- el.addClass('open').addClass('loaded').removeClass('loading');
- }
- });
- return true;
-}
-
-function randomKey(size) {
- var chars = new Array('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z');
- var key = '';
- for (i = 0; i < size; i++) {
- key += chars[Math.floor(Math.random() * chars.length)];
- }
- return key;
-}
-
-// Can't use Rails' remote select because we need the form data
-function updateIssueFrom(url) {
- $.ajax({
- url: url,
- type: 'post',
- data: $('#issue-form').serialize()
- });
-}
-
-function updateBulkEditFrom(url) {
- $.ajax({
- url: url,
- type: 'post',
- data: $('#bulk_edit_form').serialize()
- });
-}
-
-function clearMessage(id) {
- $('#'+id).val("");
-}
-
-
-function observeAutocompleteField(fieldId, url, options) {
- $(document).ready(function() {
- $('#'+fieldId).autocomplete($.extend({
- source: url,
- select: function(e,ui){self.location="/issues/"+ui.item.value;},
- minLength: 1,
- search: function(){$('#'+fieldId).addClass('ajax-loading');},
- response: function(){$('#'+fieldId).removeClass('ajax-loading');
- }
- }, options));
- $('#'+fieldId).addClass('autocomplete');
-
- });
-
-}
-
-function observeSearchfield(fieldId, targetId, url) {
- $('#'+fieldId).each(function() {
- var $this = $(this);
- $this.addClass('autocomplete');
- $this.attr('data-value-was', $this.val());
- var check = function() {
- var val = $this.val();
- if ($this.attr('data-value-was') != val){
- $this.attr('data-value-was', val);
- $.ajax({
- url: url,
- type: 'get',
- data: {q: $this.val()},
- success: function(data){ if(targetId) $('#'+targetId).html(data); },
- beforeSend: function(){ $this.addClass('ajax-loading'); },
- complete: function(){ $this.removeClass('ajax-loading'); }
- });
- }
- };
- var reset = function() {
- if (timer) {
- clearInterval(timer);
- timer = setInterval(check, 300);
- }
- };
- var timer = setInterval(check, 300);
- $this.bind('keyup click mousemove', reset);
- });
-}
-
-function observeProjectModules() {
- var f = function() {
- /* Hides trackers and issues custom fields on the new project form when issue_tracking module is disabled */
- if ($('#project_enabled_module_names_issue_tracking').attr('checked')) {
- $('#project_trackers').show();
- }else{
- $('#project_trackers').hide();
- }
- };
-
- $(window).load(f);
- $('#project_enabled_module_names_issue_tracking').change(f);
-}
-
-function initMyPageSortable(list, url) {
- $('#list-'+list).sortable({
- connectWith: '.block-receiver',
- tolerance: 'pointer',
- update: function(){
- $.ajax({
- url: url,
- type: 'post',
- data: {'blocks': $.map($('#list-'+list).children(), function(el){return $(el).attr('id');})}
- });
- }
- });
- $("#list-top, #list-left, #list-right").disableSelection();
-}
-
-var warnLeavingUnsavedMessage;
-function warnLeavingUnsaved(message) {
- warnLeavingUnsavedMessage = message;
-
- $('form').submit(function(){
- $('textarea').removeData('changed');
- });
- $('textarea').change(function(){
- $(this).data('changed', 'changed');
- });
- window.onbeforeunload = function(){
- var warn = false;
- $('textarea').blur().each(function(){
- if ($(this).data('changed')) {
- warn = true;
- }
- });
- if (warn) {return warnLeavingUnsavedMessage;}
- };
-}
-
-function setupAjaxIndicator() {
-
- $('#ajax-indicator').bind('ajaxSend', function(event, xhr, settings) {
-
- if ($('.ajax-loading').length === 0 && settings.contentType != 'application/octet-stream') {
- $('#ajax-indicator').show();
- }
- });
-
- $('#ajax-indicator').bind('ajaxStop', function() {
- $('#ajax-indicator').hide();
- });
-}
-
-function hideOnLoad() {
- $('.hol').hide();
-}
-
-function addFormObserversForDoubleSubmit() {
- $('form[method=post]').each(function() {
- if (!$(this).hasClass('multiple-submit')) {
- $(this).submit(function(form_submission) {
- if ($(form_submission.target).attr('data-submitted')) {
- form_submission.preventDefault();
- } else {
- $(form_submission.target).attr('data-submitted', true);
- }
- });
- }
- });
-}
-
-function blockEventPropagation(event) {
- event.stopPropagation();
- event.preventDefault();
-}
-
-function toggleAndSettingWordsVal(parent_widget, text_widget, value){
- text_widget.val(value)
- parent_widget.slideToggle(400)
-}
-function transpotUrl (scope) {
- $(scope).each(function(){
- var tmpContent = $(this).html();
- tmpContent = tmpContent.replace(/(^|[^\"\'])(http|ftp|mms|rstp|news|https)(\:\/\/[^<\s\+,,]+)/gi,"$1$2$3<\/a>");
- // tmpContent = tmpContent.replace(/(^|[^\/])(www\.[^<\s\+,,]+)/gi,"$1 $2 ");
- $(this).html(tmpContent);
- });
-}
-
-$(document).ready(setupAjaxIndicator);
-$(document).ready(hideOnLoad);
-$(document).ready(addFormObserversForDoubleSubmit);
-
-function img_thumbnails() {
- $('.thumbnails a').colorbox({rel:'nofollow'});
- $('.attachments').find('a').each(function(index, element) {
- var href_value = $(element).attr('href');
- if (/\.(jpg|png|gif|bmp|jpeg|PNG|BMP|GIF|JPG|JPEG)$/.test(href_value)) {
- $(element).colorbox({rel:'nofollow'});
- }
- });
- $('.for_img_thumbnails').find('a').each(function(index, element) {
- var href_value = $(element).attr('href');
- if (/\.(jpg|png|gif|bmp|jpeg|PNG|BMP|GIF|JPG|JPEG)$/.test(href_value)) {
- $(element).colorbox({rel:'nofollow'});
- }
- });
-}
-$(document).ready(img_thumbnails);
-
-function TimeClose(dateText, inst) {
- if(inst.id=="issue_start_date"){
- time=dateText;
- }
-}
-var time=new Date();
-function TimeBeforeShow(input){
- if(input.id=="issue_due_date"){
- //var minDate = $(input).datepicker('option', 'minDate');
- var tempdata=$("#issue_start_date").attr("value");
-
- $(input).datepicker('option', 'minDate',new Date(tempdata.replace(/-/g, "/")));
- //$('.selector').datepicker('option', 'minDate', '12/25/2012');
- }
-}
-
-function SetMinValue(){
- /// var tempdata=$("#issue_start_date").attr("value");
- //$('.selector').datepicker('option', 'minDate', '12/25/2012');
- //alert(tempdata);
- //$("#issue_due_date").datepicker({
- // minDate: new Date(2014,08,23)
- //var datepickerOptions=
- //{dateFormat: 'yy-mm-dd',minDate: new Date(2014,08,23), showOn: 'button', buttonImageOnly: true, buttonImage: "path_to_image('/images/calendar.png')", showButtonPanel: true, showWeek: true, showOtherMonths: true, selectOtherMonths: true};
- //alert( $('.issue_due_date').length);
- //$('.selector')[1].datepicker('option', 'minDate', new Date(2014, 0 - 8, 23));
- //$("#issue_due_date").datepicker(datepickerOptions);
- //$("##{issue_due_date}").datepicker(datepickerOptions);
- //$("#issue_due_date").datepicker(
- // {dateFormat: 'yy-mm-dd',minDate: new Date(2014,08,23), showOn: 'button', buttonImageOnly: true, buttonImage: "path_to_image('/images/calendar.png')", showButtonPanel: true, showWeek: true, showOtherMonths: true, selectOtherMonths: true}
- //)
- //});
-}
-function PrecentChange(obj){
- var _v= obj;
- if(_v==100)
- {
- //var select=$("select[id='issue_status_id']");
- $("select[id='issue_status_id']").find("option[value='3']").attr("selected","selected");
- }
- else if(_v==0)
- {
- //alert(1);
- $("select[id='issue_status_id']").find("option[value='1']").attr("selected","selected");
- }
- else if(_v!=100&&_v!=0)
- {
- // alert(2);
- $("select[id='issue_status_id']").find("option[value='2']").attr("selected","selected");
- }
-}
-
-//added by lizanle 日期選擇js
-function HS_DateAdd(interval,number,date){
- number = parseInt(number);
- if (typeof(date)=="string"){var date = new Date(date.split("-")[0],date.split("-")[1],date.split("-")[2])}
- if (typeof(date)=="object"){var date = date}
- switch(interval){
- case "y":return new Date(date.getFullYear()+number,date.getMonth(),date.getDate()); break;
- case "m":return new Date(date.getFullYear(),date.getMonth()+number,checkDate(date.getFullYear(),date.getMonth()+number,date.getDate())); break;
- case "d":return new Date(date.getFullYear(),date.getMonth(),date.getDate()+number); break;
- case "w":return new Date(date.getFullYear(),date.getMonth(),7*number+date.getDate()); break;
- }
-}
-function checkDate(year,month,date){
- var enddate = ["31","28","31","30","31","30","31","31","30","31","30","31"];
- var returnDate = "";
- if (year%4==0){enddate[1]="29"}
- if (date>enddate[month]){returnDate = enddate[month]}else{returnDate = date}
- return returnDate;
-}
-
-function WeekDay(date){
- var theDate;
- if (typeof(date)=="string"){theDate = new Date(date.split("-")[0],date.split("-")[1],date.split("-")[2]);}
- if (typeof(date)=="object"){theDate = date}
- return theDate.getDay();
-}
-function HS_calender(){
- var lis = "";
- var style = "";
- /*可以把下面的css剪切出去独立一个css文件*/
- style +="";
-
- var now;
- if (typeof(arguments[0])=="string"){
- selectDate = arguments[0].split("-");
- var year = selectDate[0];
- var month = parseInt(selectDate[1])-1+"";
- var date = selectDate[2];
- now = new Date(year,month,date);
- }else if (typeof(arguments[0])=="object"){
- now = arguments[0];
- }
- var lastMonthEndDate = HS_DateAdd("d","-1",now.getFullYear()+"-"+now.getMonth()+"-01").getDate();
- var lastMonthDate = WeekDay(now.getFullYear()+"-"+now.getMonth()+"-01");
- var thisMonthLastDate = HS_DateAdd("d","-1",now.getFullYear()+"-"+(parseInt(now.getMonth())+1).toString()+"-01");
- var thisMonthEndDate = thisMonthLastDate.getDate();
- var thisMonthEndDay = thisMonthLastDate.getDay();
- var todayObj = new Date();
- today = todayObj.getFullYear()+"-"+todayObj.getMonth()+"-"+todayObj.getDate();
-
- for (i=0; i" + lis;
- lastMonthEndDate--;
- }
- for (i=1; i<=thisMonthEndDate; i++){ // Current Month's Date
-
- if(today == now.getFullYear()+"-"+now.getMonth()+"-"+i){
- var todayString = now.getFullYear()+"-"+(parseInt(now.getMonth())+1).toString()+"-"+i;
- lis += ""+i+" ";
- }else{
- lis += ""+i+" ";
- }
-
- }
- var j=1;
- for (i=thisMonthEndDay; i<6; i++){ // Next Month's Date
- lis += ""+j+" ";
- j++;
- }
- lis += style;
-
- var CalenderTitle = "» ";
- CalenderTitle += "« ";
- CalenderTitle += ""+now.getFullYear()+" 年"+(parseInt(now.getMonth())+1).toString()+" 月";
-
- if (arguments.length>1){
- arguments[1].parentNode.parentNode.getElementsByTagName("ul")[1].innerHTML = lis;
- arguments[1].parentNode.innerHTML = CalenderTitle;
-
- }else{
- var CalenderBox = style+"";
- return CalenderBox;
- }
-}
-function _selectThisDay(d){
- var boxObj = d.parentNode.parentNode.parentNode.parentNode.parentNode;
- boxObj.targetObj.value = d.title;
- boxObj.parentNode.removeChild(boxObj);
-}
-function closeCalender(d){
- var boxObj = d.parentNode.parentNode.parentNode;
- boxObj.parentNode.removeChild(boxObj);
-}
-
-function CalenderselectYear(obj){
- var opt = "";
- var thisYear = obj.innerHTML;
- for (i=1970; i<=2020; i++){
- if (i==thisYear){
- opt += ""+i+" ";
- }else{
- opt += ""+i+" ";
- }
- }
- opt = ""+opt+" ";
- obj.parentNode.innerHTML = opt;
-}
-
-function selectThisYear(obj){
- HS_calender(obj.value+"-"+obj.parentNode.parentNode.getElementsByTagName("span")[1].getElementsByTagName("a")[0].innerHTML+"-1",obj.parentNode);
-}
-
-function CalenderselectMonth(obj){
- var opt = "";
- var thisMonth = obj.innerHTML;
- for (i=1; i<=12; i++){
- if (i==thisMonth){
- opt += ""+i+" ";
- }else{
- opt += ""+i+" ";
- }
- }
- opt = ""+opt+" ";
- obj.parentNode.innerHTML = opt;
-}
-function selectThisMonth(obj){
- HS_calender(obj.parentNode.parentNode.getElementsByTagName("span")[0].getElementsByTagName("a")[0].innerHTML+"-"+obj.value+"-1",obj.parentNode);
-}
-function HS_setDate(inputObj){
- var calenderObj = document.createElement("span");
- calenderObj.innerHTML = HS_calender(new Date());
- calenderObj.style.position = "absolute";
- calenderObj.targetObj = inputObj;
- inputObj.parentNode.insertBefore(calenderObj,inputObj.nextSibling);
-}
-//lizanle 刷新函数
-function redo() {
- window.location.reload()
-}
-
-
-//// 作业附件删除
-$(function(){
- $('.attachments a.delete-homework-icon').bind('ajax:complete', //this will work
- function(event, data, status, xhr) { //note parametes
- $(this).parent('p').remove();
- console.log("delete complete.");
- });
-
- $('a.tb_all').bind('ajax:complete', function (event, data, status, xhr) {
- if(status == 'success'){
- var res = JSON.parse(data.responseText);
- if(res.length<1){
- return;
- }
-
- if(res.length==1){
- location.href = '/zipdown/download?file='+res[0].file;return;
- }
-
- document.getElementById('light').style.display='block';
- $container = $('#light .upload_box_ul');
- $container.empty();
- for(var i = 0; i 1){
- des = '第'+res[i].index+'-'+(res[i].count+res[i].index-1)+'个学生的作品下载';
- } else {
- des = '第'+res[i].index+'个学生的作品下载';
- }
- $(''+(i+1)+'. '+des+' (共'+res[i].size+'M) ').appendTo($container);
-
- }
- }
-
- })
-});
-
-
-//firefox的pre标签换行
-$(document).ready(function () {
- var userAgent = navigator.userAgent.toLowerCase();
- var browser = {
- version: (userAgent.match(/.+(?:rv|it|ra|ie)[/: ]([d.]+)/) || [])[1],
- safari: /webkit/.test(userAgent),
- opera: /opera/.test(userAgent),
- msie: /msie/.test(userAgent) && !/opera/.test(userAgent),
- mozilla: /mozilla/.test(userAgent) && !/(compatible|webkit)/.test(userAgent)
- };
- if (browser.mozilla || browser.opera){
- $("pre").addClass("break_word_firefox");
- }
- else{
- $("pre").addClass("break_word");
- }
-});
+//= require_directory ./rateable
+//= require jquery.min
+//= require jquery.infinitescroll
+
+/* Redmine - project management software
+ Copyright (C) 2006-2013 Jean-Philippe Lang */
+
+function cleanArray (actual){
+ var newArray = new Array();
+ for (var i = 0; i< actual.length; i++){
+ if (actual[i]){
+ newArray.push(actual[i]);
+ }
+ }
+ return newArray;
+}
+
+function checkAll(id, checked) {
+ if (checked) {
+ $('#'+id).find('input[type=checkbox]').attr('checked', true);
+ } else {
+ $('#'+id).find('input[type=checkbox]').removeAttr('checked');
+ }
+}
+
+function toggleCheckboxesBySelector(selector) {
+ var all_checked = true;
+ $(selector).each(function(index) {
+ if (!$(this).is(':checked')) { all_checked = false; }
+ });
+ $(selector).attr('checked', !all_checked);
+}
+
+function showAndScrollTo(id, focus) {
+ $('#'+id).show();
+ if (focus !== null) {
+ $('#'+focus).focus();
+ }
+ $('html, body').animate({scrollTop: $('#'+id).offset().top}, 400);
+}
+
+function toggleRowGroup(el) {
+ var tr = $(el).parents('tr').first();
+ var n = tr.next();
+ tr.toggleClass('open');
+ while (n.length && !n.hasClass('group')) {
+ n.toggle();
+ n = n.next('tr');
+ }
+}
+
+function collapseAllRowGroups(el) {
+ var tbody = $(el).parents('tbody').first();
+ tbody.children('tr').each(function(index) {
+ if ($(this).hasClass('group')) {
+ $(this).removeClass('open');
+ } else {
+ $(this).hide();
+ }
+ });
+}
+
+function expandAllRowGroups(el) {
+ var tbody = $(el).parents('tbody').first();
+ tbody.children('tr').each(function(index) {
+ if ($(this).hasClass('group')) {
+ $(this).addClass('open');
+ } else {
+ $(this).show();
+ }
+ });
+}
+
+function toggleAllRowGroups(el) {
+ var tr = $(el).parents('tr').first();
+ if (tr.hasClass('open')) {
+ collapseAllRowGroups(el);
+ } else {
+ expandAllRowGroups(el);
+ }
+}
+
+function toggleFieldset(el) {
+ var fieldset = $(el).parents('fieldset').first();
+ fieldset.toggleClass('collapsed');
+ fieldset.children('div').toggle();
+}
+
+function hideFieldset(el) {
+ var fieldset = $(el).parents('fieldset').first();
+ fieldset.toggleClass('collapsed');
+ fieldset.children('div').hide();
+}
+
+function initFilters(){
+ $('#add_filter_select').change(function(){
+ addFilter($(this).val(), '', []);
+ });
+ $('#filters-table td.field input[type=checkbox]').each(function(){
+ toggleFilter($(this).val());
+ });
+ $('#filters-table td.field input[type=checkbox]').live('click',function(){
+ toggleFilter($(this).val());
+ });
+ $('#filters-table .toggle-multiselect').live('click',function(){
+ toggleMultiSelect($(this).siblings('select'));
+ });
+ $('#filters-table input[type=text]').live('keypress', function(e){
+ if (e.keyCode == 13) submit_query_form("query_form");
+ });
+}
+
+function addFilter(field, operator, values) {
+ var fieldId = field.replace('.', '_');
+ var tr = $('#tr_'+fieldId);
+ if (tr.length > 0) {
+ tr.show();
+ } else {
+ buildFilterRow(field, operator, values);
+ }
+ $('#cb_'+fieldId).attr('checked', true);
+ toggleFilter(field);
+ $('#add_filter_select').val('').children('option').each(function(){
+ if ($(this).attr('value') == field) {
+ $(this).attr('disabled', true);
+ }
+ });
+}
+
+function buildFilterRow(field, operator, values) {
+ var fieldId = field.replace('.', '_');
+ var filterTable = $("#filters-table");
+ var filterOptions = availableFilters[field];
+ var operators = operatorByType[filterOptions['type']];
+ var filterValues = filterOptions['values'];
+ var i, select;
+
+ var tr = $('').attr('id', 'tr_'+fieldId).html(
+ ' '+filterOptions['name']+' ' +
+ ' ' +
+ ' '
+ );
+ filterTable.append(tr);
+
+ select = tr.find('td.operator select');
+ for (i=0;i').val(operators[i]).text(operatorLabels[operators[i]]);
+ if (operators[i] == operator) { option.attr('selected', true); }
+ select.append(option);
+ }
+ select.change(function(){ toggleOperator(field); });
+
+ switch (filterOptions['type']){
+ case "list":
+ case "list_optional":
+ case "list_status":
+ case "list_subprojects":
+ tr.find('td.values').append(
+ ' ' +
+ ' 复选/multi-select '
+ );
+ select = tr.find('td.values select');
+ if (values.length > 1) { select.attr('multiple', true); }
+ for (i=0;i');
+ if ($.isArray(filterValue)) {
+ option.val(filterValue[1]).text(filterValue[0]);
+ if ($.inArray(filterValue[1], values) > -1) {option.attr('selected', true);}
+ } else {
+ option.val(filterValue).text(filterValue);
+ if ($.inArray(filterValue, values) > -1) {option.attr('selected', true);}
+ }
+ select.append(option);
+ }
+ break;
+ case "date":
+ case "date_past":
+ tr.find('td.values').append(
+ ' ' +
+ ' ' +
+ ' '+labelDayPlural+' '
+ );
+ $('#values_'+fieldId+'_1').val(values[0]).datepicker(datepickerOptions);
+ $('#values_'+fieldId+'_2').val(values[1]).datepicker(datepickerOptions);
+ $('#values_'+fieldId).val(values[0]);
+ break;
+ case "string":
+ case "text":
+ tr.find('td.values').append(
+ ' '
+ );
+ $('#values_'+fieldId).val(values[0]);
+ break;
+ case "relation":
+ tr.find('td.values').append(
+ ' ' +
+ ' '
+ );
+ $('#values_'+fieldId).val(values[0]);
+ select = tr.find('td.values select');
+ for (i=0;i');
+ option.val(filterValue[1]).text(filterValue[0]);
+ if (values[0] == filterValue[1]) { option.attr('selected', true); }
+ select.append(option);
+ }
+ case "integer":
+ case "float":
+ tr.find('td.values').append(
+ ' ' +
+ ' '
+ );
+ $('#values_'+fieldId+'_1').val(values[0]);
+ $('#values_'+fieldId+'_2').val(values[1]);
+ break;
+ }
+}
+
+function toggleFilter(field) {
+ var fieldId = field.replace('.', '_');
+ if ($('#cb_' + fieldId).is(':checked')) {
+ $("#operators_" + fieldId).show().removeAttr('disabled');
+ toggleOperator(field);
+ } else {
+ $("#operators_" + fieldId).hide().attr('disabled', true);
+ enableValues(field, []);
+ }
+}
+
+function enableValues(field, indexes) {
+ var fieldId = field.replace('.', '_');
+ $('#tr_'+fieldId+' td.values .value').each(function(index) {
+ if ($.inArray(index, indexes) >= 0) {
+ $(this).removeAttr('disabled');
+ $(this).parents('span').first().show();
+ } else {
+ $(this).val('');
+ $(this).attr('disabled', true);
+ $(this).parents('span').first().hide();
+ }
+
+ if ($(this).hasClass('group')) {
+ $(this).addClass('open');
+ } else {
+ $(this).show();
+ }
+ });
+}
+
+function toggleOperator(field) {
+ var fieldId = field.replace('.', '_');
+ var operator = $("#operators_" + fieldId);
+ switch (operator.val()) {
+ case "!*":
+ case "*":
+ case "t":
+ case "ld":
+ case "w":
+ case "lw":
+ case "l2w":
+ case "m":
+ case "lm":
+ case "y":
+ case "o":
+ case "c":
+ enableValues(field, []);
+ break;
+ case "><":
+ enableValues(field, [0,1]);
+ break;
+ case "t+":
+ case ">t-":
+ case "0) {
+ lis.eq(i-1).show();
+ }
+}
+
+function displayTabsButtons() {
+ var lis;
+ var tabsWidth = 0;
+ var el;
+ $('div.tabs').each(function() {
+ el = $(this);
+ lis = el.find('ul').children();
+ lis.each(function(){
+ if ($(this).is(':visible')) {
+ tabsWidth += $(this).width() + 6;
+ }
+ });
+ if ((tabsWidth < el.width() - 60) && (lis.first().is(':visible'))) {
+ el.find('div.tabs-buttons').hide();
+ } else {
+ el.find('div.tabs-buttons').show();
+ }
+ });
+}
+
+function setPredecessorFieldsVisibility() {
+ var relationType = $('#relation_relation_type');
+ if (relationType.val() == "precedes" || relationType.val() == "follows") {
+ $('#predecessor_fields').show();
+ } else {
+ $('#predecessor_fields').hide();
+ }
+}
+
+function showModal(id, width) {
+ var el = $('#'+id).first();
+ if (el.length === 0 || el.is(':visible')) {return;}
+ var title = el.find('h3.title').text();
+ el.dialog({
+ width: width,
+ modal: true,
+ resizable: false,
+ dialogClass: 'modal',
+ title: title
+ });
+ el.find("input[type=text], input[type=submit]").first().focus();
+}
+
+function hideModal(el) {
+ var modal;
+ if (el) {
+ modal = $(el).parents('.ui-dialog-content');
+ } else {
+ modal = $('#ajax-modal');
+ }
+ modal.dialog("close");
+}
+
+function submitPreview(url, form, target) {
+ $.ajax({
+ url: url,
+ type: 'post',
+ data: $('#'+form).serialize(),
+ success: function(data){
+ $('#'+target).html(data);
+ }
+ });
+}
+
+function collapseScmEntry(id) {
+ $('.'+id).each(function() {
+ if ($(this).hasClass('open')) {
+ collapseScmEntry($(this).attr('id'));
+ }
+ $(this).hide();
+ });
+ $('#'+id).removeClass('open');
+}
+
+function expandScmEntry(id) {
+ $('.'+id).each(function() {
+ $(this).show();
+ if ($(this).hasClass('loaded') && !$(this).hasClass('collapsed')) {
+ expandScmEntry($(this).attr('id'));
+ }
+ });
+ $('#'+id).addClass('open');
+}
+
+function scmEntryClick(id, url) {
+ el = $('#'+id);
+ if (el.hasClass('open')) {
+ collapseScmEntry(id);
+ el.addClass('collapsed');
+ return false;
+ } else if (el.hasClass('loaded')) {
+ expandScmEntry(id);
+ el.removeClass('collapsed');
+ return false;
+ }
+ if (el.hasClass('loading')) {
+ return false;
+ }
+ el.addClass('loading');
+ $.ajax({
+ url: url,
+ success: function(data){
+ el.after(data);
+ el.addClass('open').addClass('loaded').removeClass('loading');
+ }
+ });
+ return true;
+}
+
+function randomKey(size) {
+ var chars = new Array('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z');
+ var key = '';
+ for (i = 0; i < size; i++) {
+ key += chars[Math.floor(Math.random() * chars.length)];
+ }
+ return key;
+}
+
+// Can't use Rails' remote select because we need the form data
+function updateIssueFrom(url) {
+ $.ajax({
+ url: url,
+ type: 'post',
+ data: $('#issue-form').serialize()
+ });
+}
+
+function updateBulkEditFrom(url) {
+ $.ajax({
+ url: url,
+ type: 'post',
+ data: $('#bulk_edit_form').serialize()
+ });
+}
+
+function clearMessage(id) {
+ $('#'+id).val("");
+}
+
+
+function observeAutocompleteField(fieldId, url, options) {
+ $(document).ready(function() {
+ $('#'+fieldId).autocomplete($.extend({
+ source: url,
+ select: function(e,ui){self.location="/issues/"+ui.item.value;},
+ minLength: 1,
+ search: function(){$('#'+fieldId).addClass('ajax-loading');},
+ response: function(){$('#'+fieldId).removeClass('ajax-loading');
+ }
+ }, options));
+ $('#'+fieldId).addClass('autocomplete');
+
+ });
+
+}
+
+function observeSearchfield(fieldId, targetId, url) {
+ $('#'+fieldId).each(function() {
+ var $this = $(this);
+ $this.addClass('autocomplete');
+ $this.attr('data-value-was', $this.val());
+ var check = function() {
+ var val = $this.val();
+ if ($this.attr('data-value-was') != val){
+ $this.attr('data-value-was', val);
+ $.ajax({
+ url: url,
+ type: 'get',
+ data: {q: $this.val()},
+ success: function(data){ if(targetId) $('#'+targetId).html(data); },
+ beforeSend: function(){ $this.addClass('ajax-loading'); },
+ complete: function(){ $this.removeClass('ajax-loading'); }
+ });
+ }
+ };
+ var reset = function() {
+ if (timer) {
+ clearInterval(timer);
+ timer = setInterval(check, 300);
+ }
+ };
+ var timer = setInterval(check, 300);
+ $this.bind('keyup click mousemove', reset);
+ });
+}
+
+function observeProjectModules() {
+ var f = function() {
+ /* Hides trackers and issues custom fields on the new project form when issue_tracking module is disabled */
+ if ($('#project_enabled_module_names_issue_tracking').attr('checked')) {
+ $('#project_trackers').show();
+ }else{
+ $('#project_trackers').hide();
+ }
+ };
+
+ $(window).load(f);
+ $('#project_enabled_module_names_issue_tracking').change(f);
+}
+
+function initMyPageSortable(list, url) {
+ $('#list-'+list).sortable({
+ connectWith: '.block-receiver',
+ tolerance: 'pointer',
+ update: function(){
+ $.ajax({
+ url: url,
+ type: 'post',
+ data: {'blocks': $.map($('#list-'+list).children(), function(el){return $(el).attr('id');})}
+ });
+ }
+ });
+ $("#list-top, #list-left, #list-right").disableSelection();
+}
+
+var warnLeavingUnsavedMessage;
+function warnLeavingUnsaved(message) {
+ warnLeavingUnsavedMessage = message;
+
+ $('form').submit(function(){
+ $('textarea').removeData('changed');
+ });
+ $('textarea').change(function(){
+ $(this).data('changed', 'changed');
+ });
+ window.onbeforeunload = function(){
+ var warn = false;
+ $('textarea').blur().each(function(){
+ if ($(this).data('changed')) {
+ warn = true;
+ }
+ });
+ if (warn) {return warnLeavingUnsavedMessage;}
+ };
+}
+
+function setupAjaxIndicator() {
+
+ $('#ajax-indicator').bind('ajaxSend', function(event, xhr, settings) {
+
+ if ($('.ajax-loading').length === 0 && settings.contentType != 'application/octet-stream') {
+ $('#ajax-indicator').show();
+ }
+ });
+
+ $('#ajax-indicator').bind('ajaxStop', function() {
+ $('#ajax-indicator').hide();
+ });
+}
+
+function hideOnLoad() {
+ $('.hol').hide();
+}
+
+function addFormObserversForDoubleSubmit() {
+ $('form[method=post]').each(function() {
+ if (!$(this).hasClass('multiple-submit')) {
+ $(this).submit(function(form_submission) {
+ if ($(form_submission.target).attr('data-submitted')) {
+ form_submission.preventDefault();
+ } else {
+ $(form_submission.target).attr('data-submitted', true);
+ }
+ });
+ }
+ });
+}
+
+function blockEventPropagation(event) {
+ event.stopPropagation();
+ event.preventDefault();
+}
+
+function toggleAndSettingWordsVal(parent_widget, text_widget, value){
+ text_widget.val(value)
+ parent_widget.slideToggle(400)
+}
+function transpotUrl (scope) {
+ $(scope).each(function(){
+ var tmpContent = $(this).html();
+ tmpContent = tmpContent.replace(/(^|[^\"\'])(http|ftp|mms|rstp|news|https)(\:\/\/[^<\s\+,,]+)/gi,"$1$2$3<\/a>");
+ // tmpContent = tmpContent.replace(/(^|[^\/])(www\.[^<\s\+,,]+)/gi,"$1 $2 ");
+ $(this).html(tmpContent);
+ });
+}
+
+$(document).ready(setupAjaxIndicator);
+$(document).ready(hideOnLoad);
+$(document).ready(addFormObserversForDoubleSubmit);
+
+function img_thumbnails() {
+ $('.thumbnails a').colorbox({rel:'nofollow'});
+ $('.attachments').find('a').each(function(index, element) {
+ var href_value = $(element).attr('href');
+ if (/\.(jpg|png|gif|bmp|jpeg|PNG|BMP|GIF|JPG|JPEG)$/.test(href_value)) {
+ $(element).colorbox({rel:'nofollow'});
+ }
+ });
+ $('.for_img_thumbnails').find('a').each(function(index, element) {
+ var href_value = $(element).attr('href');
+ if (/\.(jpg|png|gif|bmp|jpeg|PNG|BMP|GIF|JPG|JPEG)$/.test(href_value)) {
+ $(element).colorbox({rel:'nofollow'});
+ }
+ });
+}
+$(document).ready(img_thumbnails);
+
+function TimeClose(dateText, inst) {
+ if(inst.id=="issue_start_date"){
+ time=dateText;
+ }
+}
+var time=new Date();
+function TimeBeforeShow(input){
+ if(input.id=="issue_due_date"){
+ //var minDate = $(input).datepicker('option', 'minDate');
+ var tempdata=$("#issue_start_date").attr("value");
+
+ $(input).datepicker('option', 'minDate',new Date(tempdata.replace(/-/g, "/")));
+ //$('.selector').datepicker('option', 'minDate', '12/25/2012');
+ }
+}
+
+function SetMinValue(){
+ /// var tempdata=$("#issue_start_date").attr("value");
+ //$('.selector').datepicker('option', 'minDate', '12/25/2012');
+ //alert(tempdata);
+ //$("#issue_due_date").datepicker({
+ // minDate: new Date(2014,08,23)
+ //var datepickerOptions=
+ //{dateFormat: 'yy-mm-dd',minDate: new Date(2014,08,23), showOn: 'button', buttonImageOnly: true, buttonImage: "path_to_image('/images/calendar.png')", showButtonPanel: true, showWeek: true, showOtherMonths: true, selectOtherMonths: true};
+ //alert( $('.issue_due_date').length);
+ //$('.selector')[1].datepicker('option', 'minDate', new Date(2014, 0 - 8, 23));
+ //$("#issue_due_date").datepicker(datepickerOptions);
+ //$("##{issue_due_date}").datepicker(datepickerOptions);
+ //$("#issue_due_date").datepicker(
+ // {dateFormat: 'yy-mm-dd',minDate: new Date(2014,08,23), showOn: 'button', buttonImageOnly: true, buttonImage: "path_to_image('/images/calendar.png')", showButtonPanel: true, showWeek: true, showOtherMonths: true, selectOtherMonths: true}
+ //)
+ //});
+}
+function PrecentChange(obj){
+ var _v= obj;
+ if(_v==100)
+ {
+ //var select=$("select[id='issue_status_id']");
+ $("select[id='issue_status_id']").find("option[value='3']").attr("selected","selected");
+ }
+ else if(_v==0)
+ {
+ //alert(1);
+ $("select[id='issue_status_id']").find("option[value='1']").attr("selected","selected");
+ }
+ else if(_v!=100&&_v!=0)
+ {
+ // alert(2);
+ $("select[id='issue_status_id']").find("option[value='2']").attr("selected","selected");
+ }
+}
+
+//added by lizanle 日期選擇js
+function HS_DateAdd(interval,number,date){
+ number = parseInt(number);
+ if (typeof(date)=="string"){var date = new Date(date.split("-")[0],date.split("-")[1],date.split("-")[2])}
+ if (typeof(date)=="object"){var date = date}
+ switch(interval){
+ case "y":return new Date(date.getFullYear()+number,date.getMonth(),date.getDate()); break;
+ case "m":return new Date(date.getFullYear(),date.getMonth()+number,checkDate(date.getFullYear(),date.getMonth()+number,date.getDate())); break;
+ case "d":return new Date(date.getFullYear(),date.getMonth(),date.getDate()+number); break;
+ case "w":return new Date(date.getFullYear(),date.getMonth(),7*number+date.getDate()); break;
+ }
+}
+function checkDate(year,month,date){
+ var enddate = ["31","28","31","30","31","30","31","31","30","31","30","31"];
+ var returnDate = "";
+ if (year%4==0){enddate[1]="29"}
+ if (date>enddate[month]){returnDate = enddate[month]}else{returnDate = date}
+ return returnDate;
+}
+
+function WeekDay(date){
+ var theDate;
+ if (typeof(date)=="string"){theDate = new Date(date.split("-")[0],date.split("-")[1],date.split("-")[2]);}
+ if (typeof(date)=="object"){theDate = date}
+ return theDate.getDay();
+}
+function HS_calender(){
+ var lis = "";
+ var style = "";
+ /*可以把下面的css剪切出去独立一个css文件*/
+ style +="";
+
+ var now;
+ if (typeof(arguments[0])=="string"){
+ selectDate = arguments[0].split("-");
+ var year = selectDate[0];
+ var month = parseInt(selectDate[1])-1+"";
+ var date = selectDate[2];
+ now = new Date(year,month,date);
+ }else if (typeof(arguments[0])=="object"){
+ now = arguments[0];
+ }
+ var lastMonthEndDate = HS_DateAdd("d","-1",now.getFullYear()+"-"+now.getMonth()+"-01").getDate();
+ var lastMonthDate = WeekDay(now.getFullYear()+"-"+now.getMonth()+"-01");
+ var thisMonthLastDate = HS_DateAdd("d","-1",now.getFullYear()+"-"+(parseInt(now.getMonth())+1).toString()+"-01");
+ var thisMonthEndDate = thisMonthLastDate.getDate();
+ var thisMonthEndDay = thisMonthLastDate.getDay();
+ var todayObj = new Date();
+ today = todayObj.getFullYear()+"-"+todayObj.getMonth()+"-"+todayObj.getDate();
+
+ for (i=0; i" + lis;
+ lastMonthEndDate--;
+ }
+ for (i=1; i<=thisMonthEndDate; i++){ // Current Month's Date
+
+ if(today == now.getFullYear()+"-"+now.getMonth()+"-"+i){
+ var todayString = now.getFullYear()+"-"+(parseInt(now.getMonth())+1).toString()+"-"+i;
+ lis += ""+i+" ";
+ }else{
+ lis += ""+i+" ";
+ }
+
+ }
+ var j=1;
+ for (i=thisMonthEndDay; i<6; i++){ // Next Month's Date
+ lis += ""+j+" ";
+ j++;
+ }
+ lis += style;
+
+ var CalenderTitle = "» ";
+ CalenderTitle += "« ";
+ CalenderTitle += ""+now.getFullYear()+" 年"+(parseInt(now.getMonth())+1).toString()+" 月";
+
+ if (arguments.length>1){
+ arguments[1].parentNode.parentNode.getElementsByTagName("ul")[1].innerHTML = lis;
+ arguments[1].parentNode.innerHTML = CalenderTitle;
+
+ }else{
+ var CalenderBox = style+"";
+ return CalenderBox;
+ }
+}
+function _selectThisDay(d){
+ var boxObj = d.parentNode.parentNode.parentNode.parentNode.parentNode;
+ boxObj.targetObj.value = d.title;
+ boxObj.parentNode.removeChild(boxObj);
+}
+function closeCalender(d){
+ var boxObj = d.parentNode.parentNode.parentNode;
+ boxObj.parentNode.removeChild(boxObj);
+}
+
+function CalenderselectYear(obj){
+ var opt = "";
+ var thisYear = obj.innerHTML;
+ for (i=1970; i<=2020; i++){
+ if (i==thisYear){
+ opt += ""+i+" ";
+ }else{
+ opt += ""+i+" ";
+ }
+ }
+ opt = ""+opt+" ";
+ obj.parentNode.innerHTML = opt;
+}
+
+function selectThisYear(obj){
+ HS_calender(obj.value+"-"+obj.parentNode.parentNode.getElementsByTagName("span")[1].getElementsByTagName("a")[0].innerHTML+"-1",obj.parentNode);
+}
+
+function CalenderselectMonth(obj){
+ var opt = "";
+ var thisMonth = obj.innerHTML;
+ for (i=1; i<=12; i++){
+ if (i==thisMonth){
+ opt += ""+i+" ";
+ }else{
+ opt += ""+i+" ";
+ }
+ }
+ opt = ""+opt+" ";
+ obj.parentNode.innerHTML = opt;
+}
+function selectThisMonth(obj){
+ HS_calender(obj.parentNode.parentNode.getElementsByTagName("span")[0].getElementsByTagName("a")[0].innerHTML+"-"+obj.value+"-1",obj.parentNode);
+}
+function HS_setDate(inputObj){
+ var calenderObj = document.createElement("span");
+ calenderObj.innerHTML = HS_calender(new Date());
+ calenderObj.style.position = "absolute";
+ calenderObj.targetObj = inputObj;
+ inputObj.parentNode.insertBefore(calenderObj,inputObj.nextSibling);
+}
+//lizanle 刷新函数
+function redo() {
+ window.location.reload()
+}
+
+
+//// 作业附件删除
+$(function(){
+ $('.attachments a.delete-homework-icon').bind('ajax:complete', //this will work
+ function(event, data, status, xhr) { //note parametes
+ $(this).parent('p').remove();
+ console.log("delete complete.");
+ });
+
+ $('a.tb_all').bind('ajax:complete', function (event, data, status, xhr) {
+ if(status == 'success'){
+ var res = JSON.parse(data.responseText);
+ if(res.length<1){
+ return;
+ }
+
+ if(res.length==1){
+ location.href = '/zipdown/download?file='+res[0].file;return;
+ }
+
+ document.getElementById('light').style.display='block';
+ $container = $('#light .upload_box_ul');
+ $container.empty();
+ for(var i = 0; i 1){
+ des = '第'+res[i].index+'-'+(res[i].count+res[i].index-1)+'个学生的作品下载';
+ } else {
+ des = '第'+res[i].index+'个学生的作品下载';
+ }
+ $(''+(i+1)+'. '+des+' (共'+res[i].size+'M) ').appendTo($container);
+
+ }
+ }
+
+ })
+});
+
+
+//firefox的pre标签换行
+$(document).ready(function () {
+ var userAgent = navigator.userAgent.toLowerCase();
+ var browser = {
+ version: (userAgent.match(/.+(?:rv|it|ra|ie)[/: ]([d.]+)/) || [])[1],
+ safari: /webkit/.test(userAgent),
+ opera: /opera/.test(userAgent),
+ msie: /msie/.test(userAgent) && !/opera/.test(userAgent),
+ mozilla: /mozilla/.test(userAgent) && !/(compatible|webkit)/.test(userAgent)
+ };
+ if (browser.mozilla || browser.opera){
+ $("pre").addClass("break_word_firefox");
+ }
+ else{
+ $("pre").addClass("break_word");
+ }
+});
diff --git a/public/javascripts/project.js b/public/javascripts/project.js
index 6dbc90271..0bc094b1d 100644
--- a/public/javascripts/project.js
+++ b/public/javascripts/project.js
@@ -33,9 +33,10 @@ function expand_tools_expand(content) {
$("#expand_tools_expand_invit").next(".navContent").slideToggle(500).siblings(".navContent").slideUp(500);
}
else {
- $("#expand_tools_expand").toggleClass("currentDd").siblings(".subNav").removeClass("currentDd");
- $("#expand_tools_expand").toggleClass("currentDt").siblings(".subNav").removeClass("currentDt");
- $("#expand_tools_expand").next(".navContent").slideToggle(500).siblings(".navContent").slideUp(500);
+// $("#expand_tools_expand").toggleClass("currentDd").siblings(".subNav").removeClass("currentDd");
+// $("#expand_tools_expand").toggleClass("currentDt").siblings(".subNav").removeClass("currentDt");
+// $("#expand_tools_expand").next(".navContent").slideToggle(500).siblings(".navContent").slideUp(500);
+ $("#navContent").toggle(500);
}
// 修改数字控制速度, slideUp(500)控制卷起速度
@@ -64,12 +65,12 @@ function show_more_reply(contentid, id2, id3) {
var arrow = $(id3);
var val = information.attr("value");
if (val == "show_more") {
- $(id2).text("收起");
+ $(id2).text("[收起]");
information.attr("value", "hide_more");
arrow.attr("src", "/images/jiantouup.jpg")
}
else {
- $(id2).text("展开更多信息");
+ $(id2).text("[展开]");
information.attr("value", "show_more");
arrow.attr("src", "/images/jiantou.jpg")
}
@@ -99,7 +100,7 @@ function showhelpAndScrollTo(id) {
information.attr("value", "show_help");
}
}
-function showhelpAndScrollToMessage(id, id1) {
+function showhelpAndScrollToMessage(id, id1, count) {
$('#' + id).toggle();
if(cookieget("repositories_visiable") == "true")
{
@@ -113,12 +114,12 @@ function showhelpAndScrollToMessage(id, id1) {
var val = information.attr("value");
if(val=="show_help")
{
- $(id1).text("收起回复");
+ $(id1).text("收起回复(" + count + ")" );
information.attr("value", "hide_help");
}
else
{
- $(id1).text("展开回复");
+ $(id1).text("展开回复(" + count + ")");
information.attr("value", "show_help");
}
}
diff --git a/public/stylesheets/courses.css b/public/stylesheets/courses.css
index c303cd6ca..4643be06b 100644
--- a/public/stylesheets/courses.css
+++ b/public/stylesheets/courses.css
@@ -534,7 +534,7 @@ a.files_tag_select{ background:#64bdd9; color:#fff; border:1px solid #64bdd9; pa
.w664{ width:664px;}
.w140{ width:140px;}
.talklist_box{ }
-.talkmain_box{ width:670px; border-bottom:1px dashed #d9d9d9; padding-bottom:20px; margin-bottom:20px;}
+.talkmain_box{ width:670px; border-bottom:1px dashed #d9d9d9; margin-bottom:20px; margin-top: 10px;}
.talkmain_pic{}
a.talkmain_pic{ display:block; width:42px; height:42px; padding:2px; border:1px solid #e3e3e3;}
a:hover.talkmain_pic{border:1px solid #64bdd9;}
@@ -576,3 +576,4 @@ a:hover.Reply_pic{border:1px solid #64bdd9;}
+
diff --git a/public/stylesheets/pleft.css b/public/stylesheets/pleft.css
index baca16c9c..4d495e999 100644
--- a/public/stylesheets/pleft.css
+++ b/public/stylesheets/pleft.css
@@ -49,6 +49,7 @@ a:hover.subnav_green{ background:#14ad5a;}
/*简介*/
.project_intro{ width:220px; padding:10px; background:#fff; margin-top:10px; padding-top:5px; color:#6d6d6d; line-height:1.9;}
.course_description{max-height: 112px;overflow:hidden; word-break: break-all;word-wrap: break-word;}
+.project_board_content{overflow: hidden;max-height: 50px;word-break: break-all;word-wrap: break-word;}
.course_description_none{max-height: none;}
.lg-foot{ border:1px solid #e8eef2; color: #929598; text-align:center; width:220px; height:23px; cursor:pointer;display: none;}
.lg-foot:hover{ color:#787b7e; border:1px solid #d4d4d4;}
diff --git a/public/stylesheets/project.css b/public/stylesheets/project.css
index 4da93d6ea..98194b73c 100644
--- a/public/stylesheets/project.css
+++ b/public/stylesheets/project.css
@@ -697,7 +697,7 @@ tr.open span.expander {background-image: url(../images/bullet_toggle_minus.png);
.w664{ width:664px;}
.w140{ width:140px;}
.talklist_box{ }
-.talkmain_box{ width:670px; border-bottom:1px dashed #d9d9d9; padding-bottom:20px; margin-bottom:20px;}
+.talkmain_box{ width:670px; border-bottom:1px dashed #d9d9d9; margin-bottom:20px; margin-top: 10px;}
.talkmain_pic{}
a.talkmain_pic{ display:block; width:42px; height:42px; padding:2px; border:1px solid #e3e3e3;}
a:hover.talkmain_pic{border:1px solid #64bdd9;}
@@ -726,3 +726,4 @@ a:hover.Reply_pic{border:1px solid #64bdd9;}
.newtalk { margin-top:8px; margin-right:8px;}
.talk_new{ border-bottom:1px dashed #d9d9d9; padding-bottom:10px;}
#about_newtalk{ display:none;}
+