diff --git a/app/assets/javascripts/sub_document_comments.js.coffee b/app/assets/javascripts/sub_document_comments.js.coffee
new file mode 100644
index 000000000..761567942
--- /dev/null
+++ b/app/assets/javascripts/sub_document_comments.js.coffee
@@ -0,0 +1,3 @@
+# Place all the behaviors and hooks related to the matching controller here.
+# All this logic will automatically be available in application.js.
+# You can use CoffeeScript in this file: http://jashkenas.github.com/coffee-script/
diff --git a/app/assets/stylesheets/sub_document_comments.css.scss b/app/assets/stylesheets/sub_document_comments.css.scss
new file mode 100644
index 000000000..c88f77750
--- /dev/null
+++ b/app/assets/stylesheets/sub_document_comments.css.scss
@@ -0,0 +1,3 @@
+// Place all the styles related to the sub_document_comments controller here.
+// They will automatically be included in application.css.
+// You can use Sass (SCSS) here: http://sass-lang.com/
diff --git a/app/controllers/organizations_controller.rb b/app/controllers/organizations_controller.rb
index d8eb98559..b1bf93052 100644
--- a/app/controllers/organizations_controller.rb
+++ b/app/controllers/organizations_controller.rb
@@ -84,35 +84,13 @@ class OrganizationsController < ApplicationController
@subfield_content = @organization.org_subfields.order("priority")
@organization = Organization.find(params[:id])
- # @org_subfield = OrgSubfield.find(params[:org_subfield_id])
- # @org_subfield_ids = @org_subfield.org_document_comments.map(&:id) << 0
- # @org_acts = OrgActivity.where("(org_act_type='OrgDocumentComment'and org_act_id in (#{@org_subfield_ids.join(",")})) || (container_type='OrgSubfield' and container_id=#{@org_subfield.id})").order('updated_at desc').page(params[:page] || 1).per(10)
-
- shield_project_ids = ShieldActivity.where("container_type='Organization' and container_id=#{@organization.id} and shield_type='Project'").map(&:shield_id)
- shield_course_ids = ShieldActivity.where("container_type='Organization' and container_id=#{@organization.id} and shield_type='Course'").map(&:shield_id)
- project_ids = (@organization.projects.map(&:id)-shield_project_ids) << 0
- course_ids = (@organization.courses.map(&:id)-shield_course_ids) << 0
- course_types = "('Message','News','HomeworkCommon','Poll','Course')"
- @project_acts = get_project_activities_org @organization, project_ids
- @course_acts = get_course_activities_org @organization, course_ids
- #@org_acts = OrgActivity.where("container_id =? and container_type =?",@organization.id, 'Organization').order('updated_at desc')
- #@project_acts = OrgActivity.where("(container_id =? and container_type =?) " +
- # "or (container_type ='Project' and org_act_type in ('Issue','Message') and container_id in (#{project_ids.join(',')})) ",
- # @organization.id, 'Organization').order('updated_at desc').limit(8)
-
- #@course_acts = OrgActivity.where("(container_id =? and container_type =?) " +
- # "or (container_type ='Course' and org_act_type in #{course_types} and container_id in (#{course_ids.join(',')}))",
- # @organization.id, 'Organization').order('updated_at desc').limit(8)
-
-
-
- # 项目两种动态
- #@project_acts = get_project_activities_org @organization
-
- # 课程动态
- #@project_acts_issues = get_project_activities_org @organization
- #@course_acts = get_course_activities_org @organization
-
+ shield_project_ids = ShieldActivity.where("container_type='Organization' and container_id=#{@organization.id} and shield_type='Project'").map(&:shield_id)
+ shield_course_ids = ShieldActivity.where("container_type='Organization' and container_id=#{@organization.id} and shield_type='Course'").map(&:shield_id)
+ project_ids = (@organization.projects.map(&:id)-shield_project_ids) << 0
+ course_ids = (@organization.courses.map(&:id)-shield_course_ids) << 0
+ course_types = "('Message','News','HomeworkCommon','Poll','Course')"
+ @project_acts = get_project_activities_org @organization, project_ids
+ @course_acts = get_course_activities_org @organization, course_ids
render :layout => 'base_org2'
else
render_403
diff --git a/app/controllers/sub_document_comments_controller.rb b/app/controllers/sub_document_comments_controller.rb
new file mode 100644
index 000000000..2ff07a533
--- /dev/null
+++ b/app/controllers/sub_document_comments_controller.rb
@@ -0,0 +1,186 @@
+class SubDocumentCommentsController < ApplicationController
+ before_filter :find_subdomain_and_subfield, :only => [:new, :create, :show, :index]
+ before_filter :find_subfield_content, :only => [:show, :index]
+ helper :attachments,:organizations
+ layout 'base_sub_domain'
+
+ def new
+ @sub_document_comment = SubDocumentComment.new
+ end
+
+
+ def create
+ @sub_document_comment = SubDocumentComment.new(:sub_domain_id => params[:sub_domain_id], :creator_id => User.current.id, :org_subfield_id => params[:org_subfield_id])
+ @sub_document_comment.title = params[:sub_document_comment][:title]
+ @sub_document_comment.content = params[:sub_document_comment][:content]
+ # @sub_document_comment.save_attachments(params[:attachments])
+ if params[:field_id]
+ @sub_document_comment.org_subfield_id = params[:field_id].to_i
+ end
+ if @sub_document_comment.save
+ flash.keep[:notice] = l(:notice_successful_create)
+ redirect_to org_subfield_sub_domain_sub_document_comments_path(:org_subfield_id => @org_subfield.id, :sub_domain_id => @subdomain.id)
+ # EditorOfDocument.create(:editor_id => User.current.id, :org_document_comment_id => @sub_document_comment.id, :created_at => @sub_document_comment.updated_at)
+ # if params[:field_id]
+ # @org_subfield = OrgSubfield.find(params[:field_id])
+ # if @org_subfield.subfield_subdomain_dir.nil?
+ # redirect_to organization_path(@organization, :org_subfield_id => params[:field_id])
+ # else
+ # redirect_to show_org_subfield_organization_path(:id => @organization.id, :sub_dir_name => @org_subfield.subfield_subdomain_dir.name)
+ # end
+ # else
+ # redirect_to organization_org_document_comments_path(@organization)
+ # end
+ else
+ redirect_to new_org_document_comment_path(:organization_id => @organization.id)
+ end
+ end
+
+ def show
+ @document = OrgDocumentComment.find(params[:id])
+ end
+
+ def index
+ if @organization.is_public? || User.current.admin? || User.current.member_of_org?(@organization)
+ @documents = @subdomain.sub_document_comments.where("parent_id is null").order("created_at desc")
+ respond_to do |format|
+ format.html {render :layout => 'base_org'}
+ end
+ else
+ render_403
+ end
+ end
+
+ def update
+ @org_document = OrgDocumentComment.find(params[:id])
+ @org_document.update_attributes(:title => params[:org_document_comment][:title], :content => params[:org_document_comment][:content])
+ Attachment.attach_files(@org_document, params[:attachments])
+ # @org_document.save_attachments(params[:attachments])
+ if @org_document.parent.nil?
+ act = OrgActivity.where("org_act_type='OrgDocumentComment' and org_act_id =?", @org_document.id).first
+ act.update_attributes(:updated_at => @org_document.updated_at)
+ EditorOfDocument.create(:editor_id => User.current.id, :org_document_comment_id => @org_document.id, :created_at => Time.now)
+ end
+ respond_to do |format|
+ format.html {
+ if params[:flag].to_i == 0
+ redirect_to organization_org_document_comments_path(:organization_id => @org_document.organization.id)
+ else
+ if params[:flag].to_i == 1
+ redirect_to org_document_comment_path(@org_document.root.id, :organization_id => @org_document.organization.id)
+ else
+ redirect_to organization_path(@org_document.organization.id, :org_subfield_id => params[:org_subfield_id])
+ end
+ end
+ }
+ end
+ end
+
+ def edit
+ @org_document = OrgDocumentComment.find(params[:id])
+ @flag = params[:flag]
+ @organization = Organization.find(params[:organization_id])
+ end
+
+ def add_reply
+ @document = OrgDocumentComment.find(params[:id]).root
+ @act = OrgActivity.find(params[:id])
+ @comment = OrgDocumentComment.new(:organization_id => @document.organization_id, :creator_id => User.current.id, :reply_id => params[:id])
+ @comment.content = params[:org_content]
+ @document.children << @comment
+ @document.save
+ end
+
+ def add_reply_in_doc
+ @document = OrgDocumentComment.find(params[:id]).root
+ @comment = OrgDocumentComment.new(:organization_id => @document.organization_id, :creator_id => User.current.id, :reply_id => params[:id])
+ @comment.content = params[:org_comment][:org_content]
+ @document.children << @comment
+ @document.save
+ respond_to do |format|
+ format.html {redirect_to org_document_comment_path(:id => @document.id, :organization_id => @document.organization_id)}
+ end
+ end
+
+ def destroy
+ @sub_document_comment = OrgDocumentComment.find(params[:id])
+ org = @sub_document_comment.organization
+ if @sub_document_comment.id == org.home_id
+ org.update_attributes(:home_id => nil)
+ end
+ if @sub_document_comment.destroy
+ end
+ respond_to do |format|
+ format.js
+ end
+ end
+
+ def delete_reply
+ @sub_document_comment = OrgDocumentComment.find(params[:id])
+ @document = @sub_document_comment.root
+ org = @sub_document_comment.organization
+ @sub_document_comment.destroy
+ respond_to do |format|
+ format.html {redirect_to org_document_comment_path(:id => @document.id, :organization_id => @document.organization_id)}
+ end
+ end
+ def quote
+ @org_comment = OrgDocumentComment.find(params[:id])
+ @subject = @org_comment.content
+ @subject = "RE: #{@subject}" unless @subject.starts_with?('RE:')
+
+ @content = "> #{ll(Setting.default_language, :text_user_wrote, User.find(@org_comment.creator_id).realname)}\n> "
+ @temp = OrgDocumentComment.new
+ #@course_id = params[:course_id]
+ @temp.content = "
#{ll(Setting.default_language, :text_user_wrote, User.find(@org_comment.creator_id).realname)}
#{@org_comment.content.html_safe}
".html_safe
+ respond_to do | format|
+ format.js
+ end
+ end
+
+ def reply
+ @document = OrgDocumentComment.find(params[:id]).root
+ @quote = params[:quote][:quote]
+ @org_document = OrgDocumentComment.new(:creator_id => User.current.id, :reply_id => params[:id])
+
+ # params[:blog_comment][:sticky] = params[:blog_comment][:sticky] || 0
+ # params[:blog_comment][:locked] = params[:blog_comment][:locked] || 0
+ @org_document.title = params[:org_document_comment][:title]
+ @org_document.content = params[:org_document_comment][:content]
+ @org_document.content = @quote + @org_document.content
+ #@org_document.title = "RE: #{@article.title}" unless params[:blog_comment][:title]
+ @document.children << @org_document
+ # @user_activity_id = params[:user_activity_id]
+ # user_activity = UserActivity.where("act_type='BlogComment' and act_id =#{@article.id}").first
+ # if user_activity
+ # user_activity.updated_at = Time.now
+ # user_activity.save
+ # end
+ # attachments = Attachment.attach_files(@org_document, params[:attachments])
+ # render_attachment_warning_if_needed(@org_document)
+ #@article.save
+ # redirect_to user_blogs_path(:user_id=>params[:user_id])
+ respond_to do |format|
+ format.html {
+ # if params[:course_id] #如果呆了course_id过来了,那么这是要跳到课程大纲去的
+ # redirect_to syllabus_course_path(:id=>params[:course_id])
+ # else
+ redirect_to org_document_comment_path(:id => @document.id, :organization_id => @document.organization_id)
+ # end
+
+ }
+ format.js
+ end
+ end
+
+ private
+ def find_subdomain_and_subfield
+ @subdomain = SubDomain.find(params[:sub_domain_id])
+ @org_subfield = OrgSubfield.find(params[:org_subfield_id])
+ @organization = @org_subfield.organization
+ end
+
+ def find_subfield_content
+ @subfield_content = @organization.org_subfields.order("priority")
+ end
+end
diff --git a/app/controllers/sub_domains_controller.rb b/app/controllers/sub_domains_controller.rb
index 4fbff45a2..9e614cdde 100644
--- a/app/controllers/sub_domains_controller.rb
+++ b/app/controllers/sub_domains_controller.rb
@@ -1,5 +1,6 @@
class SubDomainsController < ApplicationController
layout 'base_org'
+ before_filter :find_org_subfield_and_subdomain, :only => [:show, :index]
def create
if SubDomain.where("org_subfield_id=#{params[:org_subfield_id]} and name=?",params[:name]).count == 0
@@ -22,7 +23,19 @@ class SubDomainsController < ApplicationController
end
def show
+ @subfield_content = @organization.org_subfields.order("priority")
@subdomain = SubDomain.find(params[:id])
- render layout: 'base'
+ render layout: 'base_sub_domain'
+ end
+
+ def index
+
+ end
+
+ private
+ def find_org_subfield_and_subdomain
+ @subfield = OrgSubfield.find(params[:org_subfield_id])
+ @subdomain = SubDomain.find(params[:id])
+ @organization = @subfield.organization
end
end
diff --git a/app/helpers/sub_document_comments_helper.rb b/app/helpers/sub_document_comments_helper.rb
new file mode 100644
index 000000000..c1f2a4de1
--- /dev/null
+++ b/app/helpers/sub_document_comments_helper.rb
@@ -0,0 +1,2 @@
+module SubDocumentCommentsHelper
+end
diff --git a/app/models/sub_document_comment.rb b/app/models/sub_document_comment.rb
new file mode 100644
index 000000000..a9f7bdbdc
--- /dev/null
+++ b/app/models/sub_document_comment.rb
@@ -0,0 +1,10 @@
+class SubDocumentComment < ActiveRecord::Base
+ attr_accessible :content, :creator_id, :locked, :org_subfield_id, :parent_id, :reply_id, :sticky, :sub_domain_id, :title
+
+ include Redmine::SafeAttributes
+ include ApplicationHelper
+ belongs_to :sub_domain
+ belongs_to :creator, :class_name => 'User', :foreign_key => 'creator_id'
+ acts_as_tree :order => "#{SubDocumentComment.table_name}.sticky asc, #{SubDocumentComment.table_name}.created_at desc"
+ acts_as_attachable
+end
diff --git a/app/models/sub_domain.rb b/app/models/sub_domain.rb
index d2ccec8a4..831edf17d 100644
--- a/app/models/sub_domain.rb
+++ b/app/models/sub_domain.rb
@@ -1,4 +1,5 @@
class SubDomain < ActiveRecord::Base
attr_accessible :field_type, :hide, :name, :org_subfield_id, :priority, :status
belongs_to :org_subfield, :foreign_key => :org_subfield_id
+ has_many :sub_document_comments
end
diff --git a/app/views/layouts/base_sub_domain.html.erb b/app/views/layouts/base_sub_domain.html.erb
new file mode 100644
index 000000000..c0b98d0e3
--- /dev/null
+++ b/app/views/layouts/base_sub_domain.html.erb
@@ -0,0 +1,173 @@
+
+
+
+
+ <%= h html_title %>
+
+
+ <%= csrf_meta_tag %>
+ <%= favicon %>
+ <%= javascript_heads %>
+ <%= heads_for_theme %>
+ <%= stylesheet_link_tag 'org2','jquery/jquery-ui-1.9.2' %>
+ <%= javascript_include_tag 'cookie','project', 'organization','header','prettify','select_list_move','org'%>
+ <%= javascript_include_tag 'attachments' %>
+ <%#= call_hook :view_layouts_base_html_head %>
+
+ <%#= yield :header_tags -%>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<%# 更新访问数,刷新的时候更新访问次数 %>
+<% update_visiti_count @organization %>
+<%# over %>
+
+
+
+<%= render_flash_messages %>
+<%= yield %>
+<%= call_hook :view_layouts_base_content %>
+
+
+
+
+
+ <%= l(:label_loading) %>
+
+<%#= call_hook :view_layouts_base_body_bottom %>
+
+
+
diff --git a/app/views/sub_document_comments/_attachment.html.erb b/app/views/sub_document_comments/_attachment.html.erb
new file mode 100644
index 000000000..9acdc2dc8
--- /dev/null
+++ b/app/views/sub_document_comments/_attachment.html.erb
@@ -0,0 +1,79 @@
+
+
+
+<% if defined?(container) && container && container.saved_attachments %>
+ <% container.attachments.each_with_index do |attachment, i| %>
+
+ <%= text_field_tag("attachments[p#{i}][filename]", attachment.filename, :class => 'upload_filename readonly', :readonly => 'readonly') %><%= text_field_tag("attachments[p#{i}][description]", attachment.description, :maxlength => 254, :placeholder => l(:label_optional_description), :class => 'description', :style => "display: inline-block;") %><%= l(:field_is_public) %>:
+ <%= check_box_tag("attachments[p#{i}][is_public_checkbox]", attachment.is_public, attachment.is_public == 1 ? true : false, :class => 'is_public') %>
+ <%= if attachment.id.nil?
+ #待补充代码
+ else
+ link_to(' '.html_safe, attachment_path(attachment, :attachment_id => "p#{i}", :format => 'js'), :method => 'delete', :remote => true, :class => 'remove-upload')
+ end
+ %>
+ <%#= render :partial => 'tags/tag', :locals => {:obj => attachment, :object_flag => "6"} %>
+
+ <%= hidden_field_tag "attachments[p#{i}][token]", "#{attachment.token}" %>
+
+
+ <% end %>
+ <% container.saved_attachments.each_with_index do |attachment, i| %>
+
+ <%= text_field_tag("attachments[p#{i}][filename]", attachment.filename, :class => 'filename readonly', :readonly => 'readonly') %>
+ <%= text_field_tag("attachments[p#{i}][description]", attachment.description, :maxlength => 254, :placeholder => l(:label_optional_description), :class => 'description', :style => "display: inline-block;") %>
+ <%= l(:field_is_public) %>:
+ <%= check_box_tag("attachments[p#{i}][is_public_checkbox]", attachment.is_public, attachment.is_public == 1 ? true : false, :class => 'is_public') %>
+ <%= if attachment.id.nil?
+ #待补充代码
+ else
+ link_to(' '.html_safe, attachment_path(attachment, :attachment_id => "p#{i}", :format => 'js'), :method => 'delete', :remote => true, :class => 'remove-upload')
+ end
+ %>
+ <%#= render :partial => 'tags/tag', :locals => {:obj => attachment, :object_flag => "6"} %>
+
+ <%= hidden_field_tag "attachments[p#{i}][token]", "#{attachment.token}" %>
+
+
+ <% end %>
+<% end %>
+
+
+
+ <%#= button_tag "浏览", :type=>"button", :onclick=>"CompatibleSend();" %>
+
+ <%#= button_tag "文件浏览", :type=>"button", :onclick=>"$('#_file').click();",:onmouseover => 'this.focus()',:class => 'sub_btn' %>
+ 上传附件
+ <%= file_field_tag 'attachments[dummy][file]',
+ :id => '_file',
+ :class => 'file_selector',
+ :multiple => true,
+ :onchange => 'addInputFiles(this);',
+ :style => ie8? ? '' : 'display:none',
+ :data => {
+ :max_file_size => Setting.attachment_max_size.to_i.kilobytes,
+ :max_file_size_message => l(:error_attachment_too_big, :max_size => number_to_human_size(Setting.attachment_max_size.to_i.kilobytes)),
+ :max_concurrent_uploads => Redmine::Configuration['max_concurrent_ajax_uploads'].to_i,
+ :upload_path => uploads_path(:format => 'js'),
+ :description_placeholder => l(:label_optional_description),
+ :field_is_public => l(:field_is_public),
+ :are_you_sure => l(:text_are_you_sure),
+ :file_count => l(:label_file_count),
+ :lebel_file_uploding => l(:lebel_file_uploding),
+ :delete_all_files => l(:text_are_you_sure_all)
+ } %>
+
+ <%= l(:label_no_file_uploaded) %>
+
+ (<%= l(:label_max_size) %>:
+ <%= number_to_human_size(Setting.attachment_max_size.to_i.kilobytes) %>)
+
+
+ <% content_for :header_tags do %>
+ <%= javascript_include_tag 'attachments' %>
+ <% end %>
+
+
diff --git a/app/views/sub_document_comments/_new.html.erb b/app/views/sub_document_comments/_new.html.erb
new file mode 100644
index 000000000..c6cc13164
--- /dev/null
+++ b/app/views/sub_document_comments/_new.html.erb
@@ -0,0 +1,70 @@
+<%= content_for(:header_tags) do %>
+ <%= import_ke(enable_at: false, prettify: false, init_activity: false) %>
+ <%= javascript_include_tag "des_kindEditor" %>
+<% end %>
+
+
+
+ <%= form_tag org_subfield_sub_domain_sub_document_comments_path(:org_subfield_id => @org_subfield.id, :sub_domain_id => @subdomain.id), :id => 'new_sub_document_form' do |f| %>
+
+
+
+
+
+
+
+
+ <%#= kindeditor_tag 'sub_document_comment[content]','', :editor_id => 'org_document_description_editor', :height => "150px" %>
+
+
+
+
+
+
+
+
+ <%#= render :partial => 'sub_document_comments/attachment', :locals => {:container => nil} %>
+
+
+
+
+
+ <% end %>
+
diff --git a/app/views/sub_document_comments/_show_sub_document.html.erb b/app/views/sub_document_comments/_show_sub_document.html.erb
new file mode 100644
index 000000000..ed1d3b230
--- /dev/null
+++ b/app/views/sub_document_comments/_show_sub_document.html.erb
@@ -0,0 +1,155 @@
+
+
+
+ <%= link_to image_tag(url_to_avatar(User.find(document.creator_id)), :width => 45, :heigth => 45), user_url_in_org(document.creator_id) %>
+ <%= render :partial => 'users/show_detail_info', :locals => {:user => User.find(document.creator_id)} %>
+
+
+
+ <%= link_to User.find(document.creator_id), user_url_in_org(document.creator.id), :class => "newsBlue mr15" %>
+ TO <%= link_to document.sub_domain.name, organization_sub_domains_path(document.organization), :class => "newsBlue" %>
+ |
+ <%= document.org_subfield_id.nil? ? "组织文章" :"#{OrgSubfield.find(document.org_subfield_id).name}" %>
+ <% if document.organization.home_id == document.id %>
+ 已设为首页
+ <% end %>
+
+
<%= link_to document.title, org_document_comment_path(:id => document.id, :organization_id => document.organization.id) %>
+
+ 发布时间:<%= format_activity_day(document.created_at) %> <%= format_time(document.created_at, false) %>
+
+
+ 更新时间:<%= format_time(OrgActivity.where("org_act_type='#{document.class}' and org_act_id =#{document.id}").first.updated_at) %>
+
+
+ <% unless document.content.blank? %>
+ <%=render :partial =>"users/intro_content", :locals=>{:user_activity_id =>document.id, :content=>document.content} %>
+ <% end %>
+
+
+
+
+
+ <%= render :partial=>"attachments/activity_attach", :locals=>{:activity => document} %>
+
+
+ <% if User.current.admin? || User.current.admin_of_org?(Organization.find(document.organization_id)) || User.current.id == document.creator_id %>
+
+
+ -
+
+ -
+ <%= form_for('new_form', :url => {:controller => 'organizations', :action => 'set_homepage', :id => document.organization_id, :home_id => document.id, :show_homepage => 1}, :method => "put", :remote => true) do |f| %>
+ 设为首页
+ <% end %>
+
+ -
+ <%= link_to "编辑文章", edit_org_document_comment_path(:id => document.id, :organization_id => document.organization_id, :flag => flag, :org_subfield_id => params[:org_subfield_id] ), :class => "postOptionLink" %>
+
+ -
+ <%= link_to "删除文章", org_document_comment_path(:id => document.id, :organization_id => document.organization_id), :method => 'delete',
+ :data => {:confirm => l(:text_are_you_sure)},
+ :remote => true, :class => 'postOptionLink' %>
+
+
+
+
+
+
+ <% end %>
+
+
+ <% comments_for_doc = document.children.reorder("created_at desc") %>
+ <% count = document.children.count() %>
+
+
+
+
回复
+ <%= count>0 ? "(#{count})" : "" %>▪
+
+ <% if document.creator_id.to_i == User.current.id.to_i %>
+ 赞<%= get_praise_num(document) > 0 ? "(#{get_praise_num(document)})" : "" %>
+ <% else %>
+ <%=render :partial=> "praise_tread/praise", :locals => {:activity=>document, :user_activity_id=>document.id,:type=>"activity"}%>
+ <% end %>
+
+
+ <% if count > 3 %>
+
+ <% end %>
+
+
+
+ <% reply_id = 0 %>
+ <% comments_for_doc.each do |comment| %>
+ <% reply_id += 1 %>
+ -
+
<%= link_to image_tag(url_to_avatar(User.find(comment.creator_id)), :width => 33, :height => 33, :alt => "用户头像"), user_url_in_org(comment.creator_id) %>
+
+
+ <%= link_to User.find(comment.creator_id), user_url_in_org(comment.creator_id), :class => "newsBlue mr10 f14" %>
+ <%= format_activity_day(comment.created_at) %> <%= format_time(comment.created_at, false) %>
+
+
+ <% unless comment.content.blank? %>
+
<%= comment.content.html_safe %>
+ <% end %>
+
+
+
+ <% end %>
+
+
+
+
+ <%= link_to image_tag(url_to_avatar(User.current), :width => "33", :height => "33", :alt => "用户头像"), user_url_in_org(User.current.id) %>
+
+
+
+ <%= form_for('new_form', :url => add_reply_org_document_comment_path(:id => document.id, :act_id => act.id, :flag => flag), :method => "post", :remote => true) do |f| %>
+
+
+
+
发送
+
+
+
+ <% end %>
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/views/sub_document_comments/edit.html.erb b/app/views/sub_document_comments/edit.html.erb
new file mode 100644
index 000000000..70b79fcc8
--- /dev/null
+++ b/app/views/sub_document_comments/edit.html.erb
@@ -0,0 +1,63 @@
+<%= content_for(:header_tags) do %>
+ <%= import_ke(enable_at: false, prettify: false, init_activity: false) %>
+ <%= javascript_include_tag "des_kindEditor" %>
+<% end %>
+
+
+
+
+
+
+ <%= form_tag url_for(:controller => 'org_document_comments',:action => 'update', :id => @org_document.id, :flag => @flag, :org_subfield_id => params[:org_subfield_id]),:method => 'put', :id => 'new_org_document_form' do |f| %>
+
+
+
+
+
+
+
+
+ <%#= kindeditor_tag 'org_document_comment[content]','', :editor_id => 'org_document_description_editor', :height => "150px" %>
+
+
+
+
+
+
+
+
+
+
+ <%= render :partial => 'org_document_comments/attachment', :locals => {:container => @org_document} %>
+
+
+
+
+
+ <% end %>
+
+
\ No newline at end of file
diff --git a/app/views/sub_document_comments/index.html.erb b/app/views/sub_document_comments/index.html.erb
new file mode 100644
index 000000000..342be8d7a
--- /dev/null
+++ b/app/views/sub_document_comments/index.html.erb
@@ -0,0 +1,15 @@
+<%= content_for(:header_tags) do %>
+ <%= import_ke(enable_at: false, prettify: false, init_activity: true) %>
+<% end %>
+
+<%= render :partial => 'new' %>
+<% unless @documents.nil? %>
+ <% @documents.each do |document| %>
+
+
+
+
+
+ <%= render :partial => 'organizations/show_org_document', :locals => {:document => document, :act => OrgActivity.where("org_act_type='OrgDocumentComment'and org_act_id=?", document.id).first, :flag => 0} %>
+ <% end %>
+<% end %>
\ No newline at end of file
diff --git a/app/views/sub_document_comments/new.html.erb b/app/views/sub_document_comments/new.html.erb
new file mode 100644
index 000000000..de8436f7c
--- /dev/null
+++ b/app/views/sub_document_comments/new.html.erb
@@ -0,0 +1,71 @@
+<%= content_for(:header_tags) do %>
+ <%= import_ke(enable_at: false, prettify: false, init_activity: false) %>
+ <%= javascript_include_tag "des_kindEditor" %>
+<% end %>
+
+
+
+
+ <%= form_tag org_subfield_sub_domain_sub_document_comment_path(:org_subfield_id => @org_subfield.id, :sub_domain_id => @subdomain.id), :id => 'new_sub_document_form' do |f| %>
+
+
+
+
+
+
+
+
+
+ <%#= kindeditor_tag 'org_document_comment[content]','', :editor_id => 'org_document_description_editor', :height => "150px" %>
+
+
+
+
+
+
+
+
+ <%#= render :partial => 'org_document_comments/attachment', :locals => {:container => nil} %>
+
+
+
+
+
+
+ <% end %>
+
diff --git a/app/views/sub_document_comments/show.html.erb b/app/views/sub_document_comments/show.html.erb
new file mode 100644
index 000000000..f1bae6e6a
--- /dev/null
+++ b/app/views/sub_document_comments/show.html.erb
@@ -0,0 +1,178 @@
+<%= javascript_include_tag "/assets/kindeditor/kindeditor",'/assets/kindeditor/pasteimg',"create_kindeditor",'blog' %>
+
+
+
+
+ <%= link_to image_tag(url_to_avatar(User.find(@document.creator_id)), :width => 45, :heigth => 45), user_url_in_org(@document.creator_id) %>
+
+
+
+ <%= link_to User.find(@document.creator_id), user_url_in_org(@document.creator_id), :class => "newsBlue mr15" %>
+ TO <%= link_to @document.organization.name, organization_path(@document.organization), :class => "newsBlue" %>
+ |
+ <% if @document.organization.home_id == @document.id %>
+ 首页
+ <% else %>
+ 组织文章
+ <% end %>
+
+
<%= link_to @document.title, org_document_comment_path(:id => @document.id, :organization_id => @document.organization.id) %>
+
+ 发布时间:<%= format_activity_day(@document.created_at) %> <%= format_time(@document.created_at, false) %>
+ <% unless @document.content.blank? %>
+
+ <%= @document.content.html_safe %>
+
+ <% end %>
+
+ <%= render :partial=>"attachments/activity_attach", :locals=>{:activity => @document} %>
+ <%#= link_to_attachments_course @document, :author => false %>
+
+
+ <% if User.current.admin? || User.current.admin_of_org?(Organization.find(@document.organization_id) || User.current.id == @document.creator_id) %>
+
+
+ -
+
+ -
+ <%= form_for('new_form', :url => {:controller => 'organizations', :action => 'set_homepage', :id => @document.organization_id, :home_id => @document.id}, :method => "put", :remote => true) do |f| %>
+ 设为首页
+ <% end %>
+
+ -
+ <%= link_to "编辑文章", edit_org_document_comment_path(:id => @document.id, :organization_id => @document.organization_id, :flag => 1), :class => "postOptionLink" %>
+
+ -
+ <%= link_to "删除文章", org_document_comment_path(:id => @document.id, :organization_id => @document.organization_id, :detail_page => 1), :method => 'delete',
+ :data => {:confirm => l(:text_are_you_sure)},
+ :remote => true, :class => 'postOptionLink' %>
+
+
+
+
+
+
+ <% end %>
+
+
+ <% comments_for_doc = @document.children.reorder("created_at desc") %>
+ <% count = @document.children.count() %>
+
+
+ <%# if count > 0 %>
+
+
回复
+ <%= count>0 ? "(#{count})" : "" %>▪
+
+ <% if @document.creator_id.to_i == User.current.id.to_i %>
+ 赞<%= get_praise_num(@document) > 0 ? "(#{get_praise_num(@document)})" : "" %>
+ <% else %>
+ <%=render :partial=> "praise_tread/praise", :locals => {:activity=>@document, :user_activity_id=>@document.id,:type=>"activity"}%>
+ <% end %>
+
+
+
+
+ <% comments_for_doc.each_with_index do |reply,i| %>
+
+ <% user = User.find(reply.creator_id) %>
+
+
+ <%= link_to image_tag(url_to_avatar(user), :width => 33,:height => 33), user_url_in_org(user.id) %>
+
+
+ <%= link_to User.find(reply.creator_id).realname, user_url_in_org(reply.creator_id), :class => "newsBlue mr10 f14" %>
+
+ <%= reply.content.html_safe unless reply.content.nil? %>
+
+
+ <%= format_time(reply.created_at) %>
+
+ <% if reply.creator_id.to_i == User.current.id.to_i %>
+ 赞<%= get_praise_num(reply) > 0 ? "(#{get_praise_num(reply)})" : "" %>
+ <% else %>
+ <%=render :partial=> "praise_tread/praise", :locals => {:activity=>reply, :user_activity_id=>reply.id,:type=>"reply"}%>
+ <% end %>
+
+
+
+
+
+
+
+ <% end %>
+
+
+ <%# end %>
+ <% if User.current.logged?%>
+
+
+
+
+ <%= form_for :org_comment, :url => {:action => 'add_reply_in_doc',:controller => 'org_document_comments', :id => @document.id}, :html => {:multipart => true, :id => 'message_form'} do |f| %>
+ <%= f.kindeditor :org_content,:width=>'99%',:height => '100px;',:editor_id=>'message_content_editor' %>
+ <%= link_to l(:button_cancel), "javascript:void(0)", :onclick => 'message_content_editor.html("");', :class => " grey_btn fr c_white mt10 mr5" %>
+ <%= link_to l(:button_reply), "javascript:void(0)", :onclick => "message_content_editor.sync();$('#message_form').submit();", :class => "blue_btn fr c_white mt10 mb10", :style => "margin-right: 5px;" %>
+ <% end %>
+
+
+
+ <% end %>
+
+
+
+
\ No newline at end of file
diff --git a/app/views/sub_domains/show.html.erb b/app/views/sub_domains/show.html.erb
index e69de29bb..1435c13e5 100644
--- a/app/views/sub_domains/show.html.erb
+++ b/app/views/sub_domains/show.html.erb
@@ -0,0 +1 @@
+666666666666666
\ No newline at end of file
diff --git a/config/routes.rb b/config/routes.rb
index 9aac36026..5905abd89 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -119,6 +119,18 @@ RedmineApp::Application.routes.draw do
end
resources :sub_domains, :only => [:index, :new, :create, :show] do
+ resources :sub_document_comments, :only => [:index, :new, :create, :show] do
+ member do
+ post 'add_reply'
+
+ post 'reply'
+
+ end
+ collection do
+
+ end
+ end
+
collection do
end
member do
diff --git a/db/migrate/20160428065243_create_sub_document_comments.rb b/db/migrate/20160428065243_create_sub_document_comments.rb
new file mode 100644
index 000000000..8dcd202f3
--- /dev/null
+++ b/db/migrate/20160428065243_create_sub_document_comments.rb
@@ -0,0 +1,17 @@
+class CreateSubDocumentComments < ActiveRecord::Migration
+ def change
+ create_table :sub_document_comments do |t|
+ t.text :content
+ t.text :title
+ t.integer :sub_domain_id
+ t.integer :creator_id
+ t.integer :parent_id
+ t.integer :reply_id
+ t.integer :locked
+ t.integer :sticky
+ t.integer :org_subfield_id
+
+ t.timestamps
+ end
+ end
+end
diff --git a/db/schema.rb b/db/schema.rb
index 831b2d4d4..af6253243 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -11,7 +11,7 @@
#
# It's strongly recommended to check this file into your version control system.
-ActiveRecord::Schema.define(:version => 20160427070237) do
+ActiveRecord::Schema.define(:version => 20160428065243) do
create_table "activities", :force => true do |t|
t.integer "act_id", :null => false
@@ -52,6 +52,28 @@ ActiveRecord::Schema.define(:version => 20160427070237) do
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 "application_settings", :force => true do |t|
+ t.integer "default_projects_limit"
+ t.boolean "signup_enabled"
+ t.boolean "signin_enabled"
+ t.boolean "gravatar_enabled"
+ t.text "sign_in_text"
+ t.datetime "created_at"
+ t.datetime "updated_at"
+ t.string "home_page_url"
+ t.integer "default_branch_protection", :default => 2
+ t.boolean "twitter_sharing_enabled", :default => true
+ t.text "restricted_visibility_levels"
+ t.boolean "version_check_enabled", :default => true
+ t.integer "max_attachment_size", :default => 10, :null => false
+ t.integer "default_project_visibility"
+ t.integer "default_snippet_visibility"
+ t.text "restricted_signup_domains"
+ t.boolean "user_oauth_applications", :default => true
+ t.string "after_sign_out_path"
+ t.integer "session_expire_delay", :default => 10080, :null => false
+ end
+
create_table "applied_projects", :force => true do |t|
t.integer "project_id", :null => false
t.integer "user_id", :null => false
@@ -133,6 +155,20 @@ ActiveRecord::Schema.define(:version => 20160427070237) do
t.string "typeName", :limit => 50
end
+ create_table "audit_events", :force => true do |t|
+ t.integer "author_id", :null => false
+ t.string "type", :null => false
+ t.integer "entity_id", :null => false
+ t.string "entity_type", :null => false
+ t.text "details"
+ t.datetime "created_at"
+ t.datetime "updated_at"
+ end
+
+ add_index "audit_events", ["author_id"], :name => "index_audit_events_on_author_id"
+ add_index "audit_events", ["entity_id", "entity_type"], :name => "index_audit_events_on_entity_id_and_entity_type"
+ add_index "audit_events", ["type"], :name => "index_audit_events_on_type"
+
create_table "auth_sources", :force => true do |t|
t.string "type", :limit => 30, :default => "", :null => false
t.string "name", :limit => 60, :default => "", :null => false
@@ -230,6 +266,17 @@ ActiveRecord::Schema.define(:version => 20160427070237) do
add_index "boards", ["last_message_id"], :name => "index_boards_on_last_message_id"
add_index "boards", ["project_id"], :name => "boards_project_id"
+ create_table "broadcast_messages", :force => true do |t|
+ t.text "message", :null => false
+ t.datetime "starts_at"
+ t.datetime "ends_at"
+ t.integer "alert_type"
+ t.datetime "created_at"
+ t.datetime "updated_at"
+ t.string "color"
+ t.string "font"
+ end
+
create_table "bug_to_osps", :force => true do |t|
t.integer "osp_id"
t.integer "relative_memo_id"
@@ -516,6 +563,9 @@ ActiveRecord::Schema.define(:version => 20160427070237) do
t.integer "visits", :default => 0
end
+ add_index "courses", ["id"], :name => "id", :unique => true
+ add_index "courses", ["visits"], :name => "visits"
+
create_table "custom_fields", :force => true do |t|
t.string "type", :limit => 30, :default => "", :null => false
t.string "name", :limit => 30, :default => "", :null => false
@@ -577,6 +627,15 @@ ActiveRecord::Schema.define(:version => 20160427070237) do
add_index "delayed_jobs", ["priority", "run_at"], :name => "delayed_jobs_priority"
+ create_table "deploy_keys_projects", :force => true do |t|
+ t.integer "deploy_key_id", :null => false
+ t.integer "project_id", :null => false
+ t.datetime "created_at"
+ t.datetime "updated_at"
+ end
+
+ add_index "deploy_keys_projects", ["project_id"], :name => "index_deploy_keys_projects_on_project_id"
+
create_table "discuss_demos", :force => true do |t|
t.string "title"
t.text "body"
@@ -626,6 +685,16 @@ ActiveRecord::Schema.define(:version => 20160427070237) do
t.datetime "created_at"
end
+ create_table "emails", :force => true do |t|
+ t.integer "user_id", :null => false
+ t.string "email", :null => false
+ t.datetime "created_at"
+ t.datetime "updated_at"
+ end
+
+ add_index "emails", ["email"], :name => "index_emails_on_email", :unique => true
+ add_index "emails", ["user_id"], :name => "index_emails_on_user_id"
+
create_table "enabled_modules", :force => true do |t|
t.integer "project_id"
t.string "name", :null => false
@@ -648,6 +717,25 @@ ActiveRecord::Schema.define(:version => 20160427070237) do
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 "events", :force => true do |t|
+ t.string "target_type"
+ t.integer "target_id"
+ t.string "title"
+ t.text "data"
+ t.integer "project_id"
+ t.datetime "created_at"
+ t.datetime "updated_at"
+ t.integer "action"
+ t.integer "author_id"
+ end
+
+ add_index "events", ["action"], :name => "index_events_on_action"
+ add_index "events", ["author_id"], :name => "index_events_on_author_id"
+ add_index "events", ["created_at"], :name => "index_events_on_created_at"
+ add_index "events", ["project_id"], :name => "index_events_on_project_id"
+ add_index "events", ["target_id"], :name => "index_events_on_target_id"
+ add_index "events", ["target_type"], :name => "index_events_on_target_type"
+
create_table "exercise_answers", :force => true do |t|
t.integer "user_id"
t.integer "exercise_question_id"
@@ -750,6 +838,15 @@ ActiveRecord::Schema.define(:version => 20160427070237) do
add_index "forge_messages", ["forge_message_id", "forge_message_type"], :name => "index_forge_messages_on_forge_message_id_and_forge_message_type"
add_index "forge_messages", ["user_id", "project_id", "created_at"], :name => "index_forge_messages_on_user_id_and_project_id_and_created_at"
+ create_table "forked_project_links", :force => true do |t|
+ t.integer "forked_to_project_id", :null => false
+ t.integer "forked_from_project_id", :null => false
+ t.datetime "created_at"
+ t.datetime "updated_at"
+ end
+
+ add_index "forked_project_links", ["forked_to_project_id"], :name => "index_forked_project_links_on_forked_to_project_id", :unique => true
+
create_table "forums", :force => true do |t|
t.string "name", :null => false
t.text "description"
@@ -878,6 +975,17 @@ ActiveRecord::Schema.define(:version => 20160427070237) do
t.datetime "updated_at", :null => false
end
+ create_table "identities", :force => true do |t|
+ t.string "extern_uid"
+ t.string "provider"
+ t.integer "user_id"
+ t.datetime "created_at"
+ t.datetime "updated_at"
+ end
+
+ add_index "identities", ["created_at", "id"], :name => "index_identities_on_created_at_and_id"
+ add_index "identities", ["user_id"], :name => "index_identities_on_user_id"
+
create_table "invite_lists", :force => true do |t|
t.integer "project_id"
t.integer "user_id"
@@ -1021,6 +1129,20 @@ ActiveRecord::Schema.define(:version => 20160427070237) do
t.integer "private", :default => 0
end
+ create_table "keys", :force => true do |t|
+ t.integer "user_id"
+ t.datetime "created_at"
+ t.datetime "updated_at"
+ t.text "key"
+ t.string "title"
+ t.string "type"
+ t.string "fingerprint"
+ t.boolean "public", :default => false, :null => false
+ end
+
+ add_index "keys", ["created_at", "id"], :name => "index_keys_on_created_at_and_id"
+ add_index "keys", ["user_id"], :name => "index_keys_on_user_id"
+
create_table "kindeditor_assets", :force => true do |t|
t.string "asset"
t.integer "file_size"
@@ -1032,6 +1154,27 @@ ActiveRecord::Schema.define(:version => 20160427070237) do
t.integer "owner_type", :default => 0
end
+ create_table "label_links", :force => true do |t|
+ t.integer "label_id"
+ t.integer "target_id"
+ t.string "target_type"
+ t.datetime "created_at"
+ t.datetime "updated_at"
+ end
+
+ add_index "label_links", ["label_id"], :name => "index_label_links_on_label_id"
+ add_index "label_links", ["target_id", "target_type"], :name => "index_label_links_on_target_id_and_target_type"
+
+ create_table "labels", :force => true do |t|
+ t.string "title"
+ t.string "color"
+ t.integer "project_id"
+ t.datetime "created_at"
+ t.datetime "updated_at"
+ end
+
+ add_index "labels", ["project_id"], :name => "index_labels_on_project_id"
+
create_table "member_roles", :force => true do |t|
t.integer "member_id", :null => false
t.integer "role_id", :null => false
@@ -1082,6 +1225,47 @@ ActiveRecord::Schema.define(:version => 20160427070237) do
t.integer "viewed_count", :default => 0
end
+ create_table "merge_request_diffs", :force => true do |t|
+ t.string "state"
+ t.text "st_commits", :limit => 2147483647
+ t.text "st_diffs", :limit => 2147483647
+ t.integer "merge_request_id", :null => false
+ t.datetime "created_at"
+ t.datetime "updated_at"
+ end
+
+ add_index "merge_request_diffs", ["merge_request_id"], :name => "index_merge_request_diffs_on_merge_request_id", :unique => true
+
+ create_table "merge_requests", :force => true do |t|
+ t.string "target_branch", :null => false
+ t.string "source_branch", :null => false
+ t.integer "source_project_id", :null => false
+ t.integer "author_id"
+ t.integer "assignee_id"
+ t.string "title"
+ t.datetime "created_at"
+ t.datetime "updated_at"
+ t.integer "milestone_id"
+ t.string "state"
+ t.string "merge_status"
+ t.integer "target_project_id", :null => false
+ t.integer "iid"
+ t.text "description"
+ t.integer "position", :default => 0
+ t.datetime "locked_at"
+ end
+
+ add_index "merge_requests", ["assignee_id"], :name => "index_merge_requests_on_assignee_id"
+ add_index "merge_requests", ["author_id"], :name => "index_merge_requests_on_author_id"
+ add_index "merge_requests", ["created_at", "id"], :name => "index_merge_requests_on_created_at_and_id"
+ add_index "merge_requests", ["created_at"], :name => "index_merge_requests_on_created_at"
+ add_index "merge_requests", ["milestone_id"], :name => "index_merge_requests_on_milestone_id"
+ add_index "merge_requests", ["source_branch"], :name => "index_merge_requests_on_source_branch"
+ add_index "merge_requests", ["source_project_id"], :name => "index_merge_requests_on_source_project_id"
+ add_index "merge_requests", ["target_branch"], :name => "index_merge_requests_on_target_branch"
+ add_index "merge_requests", ["target_project_id", "iid"], :name => "index_merge_requests_on_target_project_id_and_iid", :unique => true
+ add_index "merge_requests", ["title"], :name => "index_merge_requests_on_title"
+
create_table "message_alls", :force => true do |t|
t.integer "user_id"
t.integer "message_id"
@@ -1116,6 +1300,39 @@ ActiveRecord::Schema.define(:version => 20160427070237) do
add_index "messages", ["last_reply_id"], :name => "index_messages_on_last_reply_id"
add_index "messages", ["parent_id"], :name => "messages_parent_id"
+ create_table "milestones", :force => true do |t|
+ t.string "title", :null => false
+ t.integer "project_id", :null => false
+ t.text "description"
+ t.date "due_date"
+ t.datetime "created_at"
+ t.datetime "updated_at"
+ t.string "state"
+ t.integer "iid"
+ end
+
+ add_index "milestones", ["created_at", "id"], :name => "index_milestones_on_created_at_and_id"
+ add_index "milestones", ["due_date"], :name => "index_milestones_on_due_date"
+ add_index "milestones", ["project_id", "iid"], :name => "index_milestones_on_project_id_and_iid", :unique => true
+ add_index "milestones", ["project_id"], :name => "index_milestones_on_project_id"
+
+ create_table "namespaces", :force => true do |t|
+ t.string "name", :null => false
+ t.string "path", :null => false
+ t.integer "owner_id"
+ t.datetime "created_at"
+ t.datetime "updated_at"
+ t.string "type"
+ t.string "description", :default => "", :null => false
+ t.string "avatar"
+ end
+
+ add_index "namespaces", ["created_at", "id"], :name => "index_namespaces_on_created_at_and_id"
+ add_index "namespaces", ["name"], :name => "index_namespaces_on_name", :unique => true
+ add_index "namespaces", ["owner_id"], :name => "index_namespaces_on_owner_id"
+ add_index "namespaces", ["path"], :name => "index_namespaces_on_path", :unique => true
+ add_index "namespaces", ["type"], :name => "index_namespaces_on_type"
+
create_table "news", :force => true do |t|
t.integer "project_id"
t.string "title", :limit => 60, :default => "", :null => false
@@ -1141,6 +1358,31 @@ ActiveRecord::Schema.define(:version => 20160427070237) do
t.datetime "updated_at", :null => false
end
+ create_table "notes", :force => true do |t|
+ t.text "note"
+ t.string "noteable_type"
+ t.integer "author_id"
+ t.datetime "created_at"
+ t.datetime "updated_at"
+ t.integer "project_id"
+ t.string "attachment"
+ t.string "line_code"
+ t.string "commit_id"
+ t.integer "noteable_id"
+ t.boolean "system", :default => false, :null => false
+ t.text "st_diff", :limit => 2147483647
+ end
+
+ add_index "notes", ["author_id"], :name => "index_notes_on_author_id"
+ add_index "notes", ["commit_id"], :name => "index_notes_on_commit_id"
+ add_index "notes", ["created_at", "id"], :name => "index_notes_on_created_at_and_id"
+ add_index "notes", ["created_at"], :name => "index_notes_on_created_at"
+ add_index "notes", ["noteable_id", "noteable_type"], :name => "index_notes_on_noteable_id_and_noteable_type"
+ add_index "notes", ["noteable_type"], :name => "index_notes_on_noteable_type"
+ add_index "notes", ["project_id", "noteable_type"], :name => "index_notes_on_project_id_and_noteable_type"
+ add_index "notes", ["project_id"], :name => "index_notes_on_project_id"
+ add_index "notes", ["updated_at"], :name => "index_notes_on_updated_at"
+
create_table "notificationcomments", :force => true do |t|
t.string "notificationcommented_type"
t.integer "notificationcommented_id"
@@ -1150,6 +1392,49 @@ ActiveRecord::Schema.define(:version => 20160427070237) do
t.datetime "updated_at", :null => false
end
+ create_table "oauth_access_grants", :force => true do |t|
+ t.integer "resource_owner_id", :null => false
+ t.integer "application_id", :null => false
+ t.string "token", :null => false
+ t.integer "expires_in", :null => false
+ t.text "redirect_uri", :null => false
+ t.datetime "created_at", :null => false
+ t.datetime "revoked_at"
+ t.string "scopes"
+ end
+
+ add_index "oauth_access_grants", ["token"], :name => "index_oauth_access_grants_on_token", :unique => true
+
+ create_table "oauth_access_tokens", :force => true do |t|
+ t.integer "resource_owner_id"
+ t.integer "application_id"
+ t.string "token", :null => false
+ t.string "refresh_token"
+ t.integer "expires_in"
+ t.datetime "revoked_at"
+ t.datetime "created_at", :null => false
+ t.string "scopes"
+ end
+
+ add_index "oauth_access_tokens", ["refresh_token"], :name => "index_oauth_access_tokens_on_refresh_token", :unique => true
+ add_index "oauth_access_tokens", ["resource_owner_id"], :name => "index_oauth_access_tokens_on_resource_owner_id"
+ add_index "oauth_access_tokens", ["token"], :name => "index_oauth_access_tokens_on_token", :unique => true
+
+ create_table "oauth_applications", :force => true do |t|
+ t.string "name", :null => false
+ t.string "uid", :null => false
+ t.string "secret", :null => false
+ t.text "redirect_uri", :null => false
+ t.string "scopes", :default => "", :null => false
+ t.datetime "created_at"
+ t.datetime "updated_at"
+ t.integer "owner_id"
+ t.string "owner_type"
+ end
+
+ add_index "oauth_applications", ["owner_id", "owner_type"], :name => "index_oauth_applications_on_owner_id_and_owner_type"
+ add_index "oauth_applications", ["uid"], :name => "index_oauth_applications_on_uid", :unique => true
+
create_table "onclick_times", :force => true do |t|
t.integer "user_id"
t.datetime "onclick_time"
@@ -1305,6 +1590,23 @@ ActiveRecord::Schema.define(:version => 20160427070237) do
t.integer "show_mode", :default => 0
end
+ create_table "permissions", :force => true do |t|
+ t.string "controller", :limit => 30, :default => "", :null => false
+ t.string "action", :limit => 30, :default => "", :null => false
+ t.string "description", :limit => 60, :default => "", :null => false
+ t.boolean "is_public", :default => false, :null => false
+ t.integer "sort", :default => 0, :null => false
+ t.boolean "mail_option", :default => false, :null => false
+ t.boolean "mail_enabled", :default => false, :null => false
+ end
+
+ create_table "permissions_roles", :id => false, :force => true do |t|
+ t.integer "permission_id", :default => 0, :null => false
+ t.integer "role_id", :default => 0, :null => false
+ end
+
+ add_index "permissions_roles", ["role_id"], :name => "permissions_roles_role_id"
+
create_table "phone_app_versions", :force => true do |t|
t.string "version"
t.text "description"
@@ -1387,6 +1689,11 @@ ActiveRecord::Schema.define(:version => 20160427070237) do
t.datetime "updated_at", :null => false
end
+ create_table "project_import_data", :force => true do |t|
+ t.integer "project_id"
+ t.text "data"
+ end
+
create_table "project_infos", :force => true do |t|
t.integer "project_id"
t.integer "user_id"
@@ -1476,6 +1783,16 @@ ActiveRecord::Schema.define(:version => 20160427070237) do
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 "protected_branches", :force => true do |t|
+ t.integer "project_id", :null => false
+ t.string "name", :null => false
+ t.datetime "created_at"
+ t.datetime "updated_at"
+ t.boolean "developers_can_push", :default => false, :null => false
+ end
+
+ add_index "protected_branches", ["project_id"], :name => "index_protected_branches_on_project_id"
+
create_table "queries", :force => true do |t|
t.integer "project_id"
t.string "name", :default => "", :null => false
@@ -1610,6 +1927,25 @@ ActiveRecord::Schema.define(:version => 20160427070237) do
t.integer "is_teacher_score", :default => 0
end
+ create_table "services", :force => true do |t|
+ t.string "type"
+ t.string "title"
+ t.integer "project_id"
+ t.datetime "created_at"
+ t.datetime "updated_at"
+ t.boolean "active", :default => false, :null => false
+ t.text "properties"
+ t.boolean "template", :default => false
+ t.boolean "push_events", :default => true
+ t.boolean "issues_events", :default => true
+ t.boolean "merge_requests_events", :default => true
+ t.boolean "tag_push_events", :default => true
+ t.boolean "note_events", :default => true, :null => false
+ end
+
+ add_index "services", ["created_at", "id"], :name => "index_services_on_created_at_and_id"
+ add_index "services", ["project_id"], :name => "index_services_on_project_id"
+
create_table "settings", :force => true do |t|
t.string "name", :default => "", :null => false
t.text "value"
@@ -1639,6 +1975,26 @@ ActiveRecord::Schema.define(:version => 20160427070237) do
t.datetime "updated_at", :null => false
end
+ create_table "snippets", :force => true do |t|
+ t.string "title"
+ t.text "content", :limit => 2147483647
+ t.integer "author_id", :null => false
+ t.integer "project_id"
+ t.datetime "created_at"
+ t.datetime "updated_at"
+ t.string "file_name"
+ t.datetime "expires_at"
+ t.string "type"
+ t.integer "visibility_level", :default => 0, :null => false
+ end
+
+ add_index "snippets", ["author_id"], :name => "index_snippets_on_author_id"
+ add_index "snippets", ["created_at", "id"], :name => "index_snippets_on_created_at_and_id"
+ add_index "snippets", ["created_at"], :name => "index_snippets_on_created_at"
+ add_index "snippets", ["expires_at"], :name => "index_snippets_on_expires_at"
+ add_index "snippets", ["project_id"], :name => "index_snippets_on_project_id"
+ add_index "snippets", ["visibility_level"], :name => "index_snippets_on_visibility_level"
+
create_table "softapplications", :force => true do |t|
t.string "name"
t.text "description"
@@ -1728,15 +2084,29 @@ ActiveRecord::Schema.define(:version => 20160427070237) do
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 "sub_document_comments", :force => true do |t|
+ t.text "content"
+ t.text "title"
+ t.integer "sub_domain_id"
+ t.integer "creator_id"
+ t.integer "parent_id"
+ t.integer "reply_id"
+ t.integer "locked"
+ t.integer "sticky"
+ t.integer "org_subfield_id"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ end
+
create_table "sub_domains", :force => true do |t|
t.integer "org_subfield_id"
- t.integer "priority", :default => 0
+ t.integer "priority"
t.string "name"
t.string "field_type"
- t.integer "hide", :default => 0
- t.integer "status", :default => 0
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
+ t.integer "hide"
+ t.integer "status"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
end
create_table "subfield_subdomain_dirs", :force => true do |t|
@@ -1746,6 +2116,17 @@ ActiveRecord::Schema.define(:version => 20160427070237) do
t.datetime "updated_at", :null => false
end
+ create_table "subscriptions", :force => true do |t|
+ t.integer "user_id"
+ t.integer "subscribable_id"
+ t.string "subscribable_type"
+ t.boolean "subscribed"
+ t.datetime "created_at"
+ t.datetime "updated_at"
+ end
+
+ add_index "subscriptions", ["subscribable_id", "subscribable_type", "user_id"], :name => "subscriptions_user_id_and_ref_fields", :unique => true
+
create_table "system_messages", :force => true do |t|
t.integer "user_id"
t.string "content"
@@ -1940,6 +2321,25 @@ ActiveRecord::Schema.define(:version => 20160427070237) do
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 "user_wechats", :force => true do |t|
+ t.integer "subscribe"
+ t.string "openid"
+ t.string "nickname"
+ t.integer "sex"
+ t.string "language"
+ t.string "city"
+ t.string "province"
+ t.string "country"
+ t.string "headimgurl"
+ t.string "subscribe_time"
+ t.string "unionid"
+ t.string "remark"
+ t.integer "groupid"
+ t.integer "user_id"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ end
+
create_table "users", :force => true do |t|
t.string "login", :default => "", :null => false
t.string "hashed_password", :limit => 40, :default => "", :null => false
@@ -1965,6 +2365,17 @@ ActiveRecord::Schema.define(:version => 20160427070237) do
add_index "users", ["id", "type"], :name => "index_users_on_id_and_type"
add_index "users", ["type"], :name => "index_users_on_type"
+ create_table "users_star_projects", :force => true do |t|
+ t.integer "project_id", :null => false
+ t.integer "user_id", :null => false
+ t.datetime "created_at"
+ t.datetime "updated_at"
+ end
+
+ add_index "users_star_projects", ["project_id"], :name => "index_users_star_projects_on_project_id"
+ add_index "users_star_projects", ["user_id", "project_id"], :name => "index_users_star_projects_on_user_id_and_project_id", :unique => true
+ add_index "users_star_projects", ["user_id"], :name => "index_users_star_projects_on_user_id"
+
create_table "versions", :force => true do |t|
t.integer "project_id", :default => 0, :null => false
t.string "name", :default => "", :null => false
@@ -2016,6 +2427,31 @@ ActiveRecord::Schema.define(:version => 20160427070237) do
t.datetime "updated_at", :null => false
end
+ create_table "web_hooks", :force => true do |t|
+ t.string "url"
+ t.integer "project_id"
+ t.datetime "created_at"
+ t.datetime "updated_at"
+ t.string "type", :default => "ProjectHook"
+ t.integer "service_id"
+ t.boolean "push_events", :default => true, :null => false
+ t.boolean "issues_events", :default => false, :null => false
+ t.boolean "merge_requests_events", :default => false, :null => false
+ t.boolean "tag_push_events", :default => false
+ t.boolean "note_events", :default => false, :null => false
+ end
+
+ add_index "web_hooks", ["created_at", "id"], :name => "index_web_hooks_on_created_at_and_id"
+ add_index "web_hooks", ["project_id"], :name => "index_web_hooks_on_project_id"
+
+ create_table "wechat_logs", :force => true do |t|
+ t.string "openid", :null => false
+ t.text "request_raw"
+ t.text "response_raw"
+ t.text "session_raw"
+ t.datetime "created_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
diff --git a/spec/controllers/sub_document_comments_controller_spec.rb b/spec/controllers/sub_document_comments_controller_spec.rb
new file mode 100644
index 000000000..53f650132
--- /dev/null
+++ b/spec/controllers/sub_document_comments_controller_spec.rb
@@ -0,0 +1,5 @@
+require 'rails_helper'
+
+RSpec.describe SubDocumentCommentsController, :type => :controller do
+
+end
diff --git a/spec/factories/sub_document_comments.rb b/spec/factories/sub_document_comments.rb
new file mode 100644
index 000000000..61bb4352f
--- /dev/null
+++ b/spec/factories/sub_document_comments.rb
@@ -0,0 +1,14 @@
+FactoryGirl.define do
+ factory :sub_document_comment do
+ content "MyText"
+title "MyText"
+sub_domain_id 1
+creator_id 1
+parent_id 1
+reply_id 1
+locked 1
+sticky 1
+org_subfield_id 1
+ end
+
+end
diff --git a/spec/models/sub_document_comment_spec.rb b/spec/models/sub_document_comment_spec.rb
new file mode 100644
index 000000000..48693951f
--- /dev/null
+++ b/spec/models/sub_document_comment_spec.rb
@@ -0,0 +1,5 @@
+require 'rails_helper'
+
+RSpec.describe SubDocumentComment, :type => :model do
+ pending "add some examples to (or delete) #{__FILE__}"
+end