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

Conflicts:
	db/schema.rb
This commit is contained in:
cxt 2015-12-11 15:00:35 +08:00
commit bb2f49439e
50 changed files with 393 additions and 178 deletions

View File

@ -25,6 +25,7 @@ class CoursesController < ApplicationController
before_filter :authorize_course, :only => [:show, :settings, :update, :course] before_filter :authorize_course, :only => [:show, :settings, :update, :course]
before_filter :authorize_course_global, :only => [:new,:create] before_filter :authorize_course_global, :only => [:new,:create]
before_filter :toggleCourse, :only => [:finishcourse, :restartcourse] before_filter :toggleCourse, :only => [:finishcourse, :restartcourse]
before_filter :is_deleted, :only => [:show, :settings]
before_filter :require_login, :only => [:join, :unjoin] before_filter :require_login, :only => [:join, :unjoin]
#before_filter :allow_join, :only => [:join] #before_filter :allow_join, :only => [:join]
@ -55,11 +56,11 @@ class CoursesController < ApplicationController
def join def join
if User.current.logged? if User.current.logged?
cs = CoursesService.new cs = CoursesService.new
@user = User.current @user = User.current
join = cs.join_course params,@user join = cs.join_course params,@user
@state = join[:state] @state = join[:state]
@course = join[:course] @course = join[:course]
# else # else
# @course = Course.find_by_id params[:object_id] # @course = Course.find_by_id params[:object_id]
# CourseMessage.create(:user_id => @course.tea_id, :course_id => @course.id, :viewed => false,:content=> params[:role],:course_message_id=>User.current.id,:course_message_type=>'JoinCourseRequest') # CourseMessage.create(:user_id => @course.tea_id, :course_id => @course.id, :viewed => false,:content=> params[:role],:course_message_id=>User.current.id,:course_message_type=>'JoinCourseRequest')
@ -70,7 +71,7 @@ class CoursesController < ApplicationController
end end
@object_id = params[:object_id] @object_id = params[:object_id]
respond_to do |format| respond_to do |format|
format.js #{ render :partial => 'set_join', :locals => {:user => @user, :course => @course, :object_id => params[:object_id]} } format.js #{ render :partial => 'set_join', :locals => {:user => @user, :course => @course, :object_id => params[:object_id]} }
end end
end end
@ -98,14 +99,14 @@ class CoursesController < ApplicationController
c = cs.edit_course params,@course,User.current c = cs.edit_course params,@course,User.current
@course = c[:course] @course = c[:course]
if @course.errors.full_messages.count <= 0 if @course.errors.full_messages.count <= 0
respond_to do |format| respond_to do |format|
format.html { format.html {
# render :layout => 'base_courses' # render :layout => 'base_courses'
flash[:notice] = l(:notice_successful_update) flash[:notice] = l(:notice_successful_update)
redirect_to settings_course_url(@course) redirect_to settings_course_url(@course)
} }
format.api { render_api_ok } format.api { render_api_ok }
end end
else else
respond_to do |format| respond_to do |format|
format.html { format.html {
@ -134,8 +135,8 @@ class CoursesController < ApplicationController
courses = Course.visible.where("LOWER(name) like '%#{params[:name].to_s.downcase}%'").order("time desc, created_at desc") courses = Course.visible.where("LOWER(name) like '%#{params[:name].to_s.downcase}%'").order("time desc, created_at desc")
@courses = paginateHelper courses,10 @courses = paginateHelper courses,10
end end
@name = params[:name] @name = params[:name]
@type = 'courses' @type = 'courses'
respond_to do |format| respond_to do |format|
format.html { format.html {
render :layout => 'course_base' render :layout => 'course_base'
@ -427,7 +428,7 @@ class CoursesController < ApplicationController
end end
def course def course
@school_id = params[:school_id] @school_id = params[:school_id]
per_page_option = 10 per_page_option = 10
if @school_id == "0" or @school_id.nil? if @school_id == "0" or @school_id.nil?
@courses_all = Course.active.visible. @courses_all = Course.active.visible.
@ -515,8 +516,8 @@ class CoursesController < ApplicationController
def index def index
if !User.current.admin? if !User.current.admin?
render_404 render_404
return return
end end
@course_type = params[:course_type] @course_type = params[:course_type]
@school_id = params[:school_id] @school_id = params[:school_id]
@ -565,7 +566,7 @@ class CoursesController < ApplicationController
respond_to do |format| respond_to do |format|
format.html { format.html {
render :layout => 'base' render :layout => 'base'
} }
format.atom { format.atom {
courses = Course.visible.order('created_on DESC').limit(Setting.feeds_limit.to_i).all courses = Course.visible.order('created_on DESC').limit(Setting.feeds_limit.to_i).all
@ -581,6 +582,13 @@ class CoursesController < ApplicationController
end end
end end
def is_deleted
if @course.is_delete == 1 and !User.current.admin?
render_404
return
end
end
def get_courses def get_courses
@user = User.current @user = User.current
membership = @user.coursememberships.all membership = @user.coursememberships.all
@ -634,6 +642,11 @@ class CoursesController < ApplicationController
end end
def show def show
# 被删除的课程只有超级管理员才能看到is_delete为1的时候标记课程被删除
# if @course.is_delete == 1 && !User.current.admin?
# render_403
# return
# end
#更新创建课程消息状态 #更新创建课程消息状态
create_course_messages = @course.course_messages.where("user_id =? and course_message_type =? and course_id =? and viewed =?", User.current.id, 'Course', @course.id, 0) create_course_messages = @course.course_messages.where("user_id =? and course_message_type =? and course_id =? and viewed =?", User.current.id, 'Course', @course.id, 0)
create_course_messages.update_all(:viewed => true) create_course_messages.update_all(:viewed => true)
@ -684,10 +697,10 @@ class CoursesController < ApplicationController
end end
def feedback def feedback
@course.journals_for_messages.each do |messages| @course.journals_for_messages.each do |messages|
query = messages.course_messages.where("user_id = ?", User.current.id) query = messages.course_messages.where("user_id = ?", User.current.id)
query.update_all(:viewed => true); query.update_all(:viewed => true);
end end
if (User.current.admin? || @course.is_public == 1 || (@course.is_public == 0 && User.current.member_of_course?(@course))) if (User.current.admin? || @course.is_public == 1 || (@course.is_public == 0 && User.current.member_of_course?(@course)))
page = params[:page] page = params[:page]
@ -738,20 +751,20 @@ class CoursesController < ApplicationController
#从课程创建的老师那里选择课程大纲 #从课程创建的老师那里选择课程大纲
def course_outline def course_outline
@teacher = User.find(@course.tea_id) @teacher = User.find(@course.tea_id)
@blog_articles = @teacher.blog.articles @blog_articles = @teacher.blog.articles
@is_in_show_outline_page = params[:is_in_show_outline_page] @is_in_show_outline_page = params[:is_in_show_outline_page]
respond_to do |format| respond_to do |format|
format.js format.js
end end
end end
#根据关键字搜索,查找方法一样的,但返回内容不一样 #根据关键字搜索,查找方法一样的,但返回内容不一样
def search_course_outline def search_course_outline
@article_title = params[:title] @article_title = params[:title]
@teacher = User.find(@course.tea_id) @teacher = User.find(@course.tea_id)
@blog_articles = @teacher.blog.articles.like(@article_title) @blog_articles = @teacher.blog.articles.like(@article_title)
render :json=>@blog_articles.to_json render :json=>@blog_articles.to_json
end end
#设置或者更改课程的大纲 #设置或者更改课程的大纲
@ -771,10 +784,23 @@ class CoursesController < ApplicationController
format.html {render :layout => 'base_courses'} format.html {render :layout => 'base_courses'}
end end
end end
#删除课程
#删除课程只是将课程的is_delete状态改为falseis_delete为false状态的课程只有管理员可以看到
def destroy
#删除课程
#删除课程只是将课程的is_deleted状态改为falseis_deleted为false状态的课程只有管理员可以看到
def destroy
@course.update_attributes(:is_delete => true)
@course = nil
redirect_to user_url(User.current)
end
# 恢复已删除的课程
def renew
if User.current.admin?
@course.update_attributes(:is_delete => false)
redirect_to course_path(@course)
else
return 404
end
end end
private private
@ -797,7 +823,7 @@ class CoursesController < ApplicationController
def can_show_course def can_show_course
@first_page = FirstPage.find_by_page_type('project') @first_page = FirstPage.find_by_page_type('project')
if @first_page.try(:show_course) == 2 if @first_page.try(:show_course) == 2
render_404 render_404
end end
end end

View File

@ -186,7 +186,7 @@ class FilesController < ApplicationController
@order = "" @order = ""
@is_remote = false @is_remote = false
if params[:project_id] if params[:project_id]
@isproject = true @container_type = 0
if params[:sort] if params[:sort]
params[:sort].split(",").each do |sort_type| params[:sort].split(",").each do |sort_type|
@ -246,7 +246,7 @@ class FilesController < ApplicationController
format.js format.js
end end
elsif params[:course_id] elsif params[:course_id]
@isproject = false @container_type = 1
if params[:sort] if params[:sort]
params[:sort].split(",").each do |sort_type| params[:sort].split(",").each do |sort_type|
@ -297,6 +297,9 @@ class FilesController < ApplicationController
@tag_list = attachment_tag_list @all_attachments @tag_list = attachment_tag_list @all_attachments
render :layout => 'base_courses' render :layout => 'base_courses'
elsif params[:org_subfield_id]
@container_type = 2
# @subfield = params[:org_subfield_id]
end end
end end

View File

@ -109,12 +109,23 @@ class MyController < ApplicationController
# Edit user's account # Edit user's account
def account def account
@user = User.current @user = User.current
lg=@user.login lg=@user.login
@pref = @user.pref @pref = @user.pref
diskfile = disk_filename('User', @user.id) diskfile = disk_filename('User', @user.id)
diskfile1 = diskfile + 'temp' diskfile1 = diskfile + 'temp'
begin begin
if request.post? if request.post?
# 修改邮箱的时候同步修改到gitlab
if @user.mail != params[:user][:mail]
g = Gitlab.client
begin
g.edit_user(@user.gid, :email => params[:user][:mail])
rescue
logger.error "sync user's email of gitlab failed!"
end
end
@user.safe_attributes = params[:user] @user.safe_attributes = params[:user]
@user.pref.attributes = params[:pref] @user.pref.attributes = params[:pref]
@user.pref[:no_self_notified] = (params[:no_self_notified] == '1') @user.pref[:no_self_notified] = (params[:no_self_notified] == '1')

View File

@ -11,10 +11,17 @@ class OrgDocumentCommentsController < ApplicationController
@org_document_comment = OrgDocumentComment.new(:organization_id => @organization.id, :creator_id => User.current.id) @org_document_comment = OrgDocumentComment.new(:organization_id => @organization.id, :creator_id => User.current.id)
@org_document_comment.title = params[:org_document_comment][:title] @org_document_comment.title = params[:org_document_comment][:title]
@org_document_comment.content = params[:org_document_comment][:content] @org_document_comment.content = params[:org_document_comment][:content]
if params[:field_id]
@org_document_comment.org_subfield_id = params[:field_id].to_i
end
if @org_document_comment.save if @org_document_comment.save
flash.keep[:notice] = l(:notice_successful_create) flash.keep[:notice] = l(:notice_successful_create)
EditorOfDocument.create(:editor_id => User.current.id, :org_document_comment_id => @org_document_comment.id, :created_at => @org_document_comment.updated_at) EditorOfDocument.create(:editor_id => User.current.id, :org_document_comment_id => @org_document_comment.id, :created_at => @org_document_comment.updated_at)
redirect_to organization_org_document_comments_path(@organization) if params[:field_id]
redirect_to organization_path(@organization, :org_subfield_id => params[:field_id])
else
redirect_to organization_org_document_comments_path(@organization)
end
else else
redirect_to new_org_document_comment_path(:organization_id => @organization.id) redirect_to new_org_document_comment_path(:organization_id => @organization.id)
end end
@ -46,7 +53,7 @@ class OrgDocumentCommentsController < ApplicationController
if params[:flag].to_i == 1 if params[:flag].to_i == 1
redirect_to org_document_comment_path(@org_document.root.id, :organization_id => @org_document.organization.id) redirect_to org_document_comment_path(@org_document.root.id, :organization_id => @org_document.organization.id)
else else
redirect_to organization_path(@org_document.organization.id) redirect_to organization_path(@org_document.organization.id, :org_subfield_id => params[:org_subfield_id])
end end
end end
} }

View File

@ -3,7 +3,7 @@ class OrgSubfieldsController < ApplicationController
@subfield = OrgSubfield.create(:name => params[:name]) @subfield = OrgSubfield.create(:name => params[:name])
@organization = Organization.find(params[:organization_id]) @organization = Organization.find(params[:organization_id])
@organization.org_subfields << @subfield @organization.org_subfields << @subfield
@subfield.update_attributes(:priority => @subfield.id) @subfield.update_attributes(:priority => @subfield.id, :field_type => params[:field_type])
end end
def destroy def destroy

View File

@ -68,29 +68,35 @@ class OrganizationsController < ApplicationController
def show def show
if @organization.is_public? || User.current.admin? || User.current.member_of_org?(@organization) if @organization.is_public? || User.current.admin? || User.current.member_of_org?(@organization)
@organization = Organization.find(params[:id]) @organization = Organization.find(params[:id])
project_ids = @organization.projects.map(&:id) << 0 if params[:org_subfield_id]
course_ids = @organization.courses.map(&:id) << 0 @org_subfield = OrgSubfield.find(params[:org_subfield_id])
course_types = "('Message','News','HomeworkCommon','Poll','Course')" @org_subfield_ids = @org_subfield.org_document_comments.map(&:id) << 0
case params[:type] @org_activities = OrgActivity.where("org_act_type='OrgDocumentComment'and org_act_id in (#{@org_subfield_ids.join(",")})").order('updated_at desc').page(params[:page] || 1).per(10)
when nil else
@org_activities = OrgActivity.where("(container_id =? and container_type =?) " + project_ids = @organization.projects.map(&:id) << 0
"or (container_type ='Project' and org_act_type in ('Issue','Message','ProjectCreateInfo') and container_id in (#{project_ids.join(',')})) "+ course_ids = @organization.courses.map(&:id) << 0
"or (container_type ='Course' and org_act_type in #{course_types} and container_id in (#{course_ids.join(',')}))", course_types = "('Message','News','HomeworkCommon','Poll','Course')"
@organization.id, 'Organization').order('updated_at desc').page(params[:page] || 1).per(10) case params[:type]
when 'project_issue' when nil
@org_activities = OrgActivity.where("container_type = 'Project' and org_act_type = 'Issue' and container_id in (#{project_ids.join(',')})").order('updated_at desc').page(params[:page] || 1).per(10) @org_activities = OrgActivity.where("(container_id =? and container_type =?) " +
when 'project_message' "or (container_type ='Project' and org_act_type in ('Issue','Message','ProjectCreateInfo') and container_id in (#{project_ids.join(',')})) "+
@org_activities = OrgActivity.where("container_type = 'Project' and org_act_type = 'Message' and container_id in (#{project_ids.join(',')})").order('updated_at desc').page(params[:page] || 1).per(10) "or (container_type ='Course' and org_act_type in #{course_types} and container_id in (#{course_ids.join(',')}))",
when 'org' @organization.id, 'Organization').order('updated_at desc').page(params[:page] || 1).per(10)
@org_activities = OrgActivity.where("container_id =? and container_type =?",@organization.id, 'Organization').order('updated_at desc').page(params[:page] || 1).per(10) when 'project_issue'
when 'course_homework' @org_activities = OrgActivity.where("container_type = 'Project' and org_act_type = 'Issue' and container_id in (#{project_ids.join(',')})").order('updated_at desc').page(params[:page] || 1).per(10)
@org_activities = OrgActivity.where("container_type = 'Course' and org_act_type = 'HomeworkCommon' and container_id in (#{course_ids.join(',')})").order('updated_at desc').page(params[:page] || 1).per(10) when 'project_message'
when 'course_news' @org_activities = OrgActivity.where("container_type = 'Project' and org_act_type = 'Message' and container_id in (#{project_ids.join(',')})").order('updated_at desc').page(params[:page] || 1).per(10)
@org_activities = OrgActivity.where("container_type = 'Course' and org_act_type = 'News' and container_id in (#{course_ids.join(',')})").order('updated_at desc').page(params[:page] || 1).per(10) when 'org'
when 'course_message' @org_activities = OrgActivity.where("container_id =? and container_type =?",@organization.id, 'Organization').order('updated_at desc').page(params[:page] || 1).per(10)
@org_activities = OrgActivity.where("container_type = 'Course' and org_act_type = 'Message' and container_id in (#{course_ids.join(',')})").order('updated_at desc').page(params[:page] || 1).per(10) when 'course_homework'
when 'course_poll' @org_activities = OrgActivity.where("container_type = 'Course' and org_act_type = 'HomeworkCommon' and container_id in (#{course_ids.join(',')})").order('updated_at desc').page(params[:page] || 1).per(10)
@org_activities = OrgActivity.where("container_type = 'Course' and org_act_type = 'Poll' and container_id in (#{course_ids.join(',')})").order('updated_at desc').page(params[:page] || 1).per(10) when 'course_news'
@org_activities = OrgActivity.where("container_type = 'Course' and org_act_type = 'News' and container_id in (#{course_ids.join(',')})").order('updated_at desc').page(params[:page] || 1).per(10)
when 'course_message'
@org_activities = OrgActivity.where("container_type = 'Course' and org_act_type = 'Message' and container_id in (#{course_ids.join(',')})").order('updated_at desc').page(params[:page] || 1).per(10)
when 'course_poll'
@org_activities = OrgActivity.where("container_type = 'Course' and org_act_type = 'Poll' and container_id in (#{course_ids.join(',')})").order('updated_at desc').page(params[:page] || 1).per(10)
end
end end
@page = params[:page] @page = params[:page]
respond_to do |format| respond_to do |format|

View File

@ -697,7 +697,11 @@ class ProjectsController < ApplicationController
flash[:error] = l(:error_can_not_archive_project) flash[:error] = l(:error_can_not_archive_project)
end end
end end
redirect_to admin_projects_url(:status => params[:status]) if params[:type] == "project"
redirect_to user_path(User.current)
else
redirect_to admin_projects_url(:status => params[:status])
end
end end
def unarchive def unarchive

View File

@ -75,6 +75,9 @@ class RepositoriesController < ApplicationController
redirect_to repository_url(@repository) redirect_to repository_url(@repository)
else else
g = Gitlab.client g = Gitlab.client
if User.current.gid.nil?
g.sync_user(User.current)
end
gproject = g.fork(@project.gpid, User.current.gid) gproject = g.fork(@project.gpid, User.current.gid)
if gproject if gproject
copy_project(@project, gproject) copy_project(@project, gproject)
@ -349,7 +352,7 @@ update
@changesets = g.commits(@project.gpid) @changesets = g.commits(@project.gpid, :ref_name => @rev)
# @changesets = @repository.latest_changesets(@path, @rev) # @changesets = @repository.latest_changesets(@path, @rev)
# @changesets_count = @repository.latest_changesets(@path, @rev).count # @changesets_count = @repository.latest_changesets(@path, @rev).count
@changesets_all_count = 0 @changesets_all_count = 0

View File

@ -20,7 +20,7 @@ class Course < ActiveRecord::Base
end end
end end
attr_accessible :code, :extra, :name, :state, :tea_id, :time , :location, :state, :term, :password,:is_public,:description,:class_period, :open_student, :enterprise_name attr_accessible :code, :extra, :name, :state, :tea_id, :time , :location, :state, :term, :password,:is_public,:description,:class_period, :open_student, :enterprise_name, :is_delete
#belongs_to :project, :class_name => 'Course', :foreign_key => :extra, primary_key: :identifier #belongs_to :project, :class_name => 'Course', :foreign_key => :extra, primary_key: :identifier
belongs_to :teacher, :class_name => 'User', :foreign_key => :tea_id # 定义一个方法teacher该方法通过tea_id来调用User表 belongs_to :teacher, :class_name => 'User', :foreign_key => :tea_id # 定义一个方法teacher该方法通过tea_id来调用User表
belongs_to :school, :class_name => 'School', :foreign_key => :school_id #定义一个方法school该方法通过school_id来调用School表 belongs_to :school, :class_name => 'School', :foreign_key => :school_id #定义一个方法school该方法通过school_id来调用School表
@ -86,7 +86,8 @@ class Course < ActiveRecord::Base
'is_public', 'is_public',
'description', 'description',
'class_period', 'class_period',
'open_student' 'open_student',
'is_delete'
acts_as_customizable acts_as_customizable
@ -94,7 +95,7 @@ class Course < ActiveRecord::Base
scope :active, lambda { where(:status => STATUS_ACTIVE) } scope :active, lambda { where(:status => STATUS_ACTIVE) }
scope :status, lambda {|arg| where(arg.blank? ? nil : {:status => arg.to_i}) } scope :status, lambda {|arg| where(arg.blank? ? nil : {:status => arg.to_i}) }
scope :all_public, lambda { where(:is_public => true) } scope :all_public, lambda { where(:is_public => true) }
scope :visible, lambda {|*args| where(Course.visible_condition(args.shift || User.current, *args)) } scope :visible, lambda {|*args| where(Course.where("is_delete =?", 0).visible_condition(args.shift || User.current, *args)) }
scope :allowed_to, lambda {|*args| scope :allowed_to, lambda {|*args|
user = User.current user = User.current
permission = nil permission = nil
@ -114,7 +115,7 @@ class Course < ActiveRecord::Base
where(" LOWER(name) LIKE :p ", :p => pattern) where(" LOWER(name) LIKE :p ", :p => pattern)
end end
} }
scope :indexable,lambda { where('is_public = 1') } scope :indexable,lambda { where('is_public = 1 and is_delete = 0') }
def self.search(query) def self.search(query)
__elasticsearch__.search( __elasticsearch__.search(
{ {
@ -399,12 +400,12 @@ class Course < ActiveRecord::Base
# __elasticsearch__.delete_document # __elasticsearch__.delete_document
# end # end
def create_course_ealasticsearch_index def create_course_ealasticsearch_index
if self.is_public == 1 if self.is_public == 1 and self.is_delete == 0 #公开 和 没有被删除的课程才被索引
self.__elasticsearch__.index_document self.__elasticsearch__.index_document
end end
end end
def update_course_ealasticsearch_index def update_course_ealasticsearch_index
if self.is_public == 1 #如果是初次更新成为公开的情况,会报错,那么这条记录尚未被索引过。没有报错就是更新的其他属性 if self.is_public == 1 and self.is_delete == 0 #如果是初次更新成为公开或者恢复被删除的情况,会报错,那么这条记录尚未被索引过。没有报错就是更新的其他属性
begin begin
self.__elasticsearch__.update_document self.__elasticsearch__.update_document
rescue => e rescue => e

View File

@ -1,3 +1,4 @@
class OrgSubfield < ActiveRecord::Base class OrgSubfield < ActiveRecord::Base
belongs_to :organization, :foreign_key => :organization_id belongs_to :organization, :foreign_key => :organization_id
has_many :org_document_comments, :dependent => :destroy
end end

View File

@ -227,7 +227,7 @@ class User < Principal
validates_uniqueness_of :login, :if => Proc.new { |user| user.login_changed? && user.login.present? }, :case_sensitive => false validates_uniqueness_of :login, :if => Proc.new { |user| user.login_changed? && user.login.present? }, :case_sensitive => false
validates_uniqueness_of :mail, :if => Proc.new { |user| user.mail_changed? && user.mail.present? }, :case_sensitive => false validates_uniqueness_of :mail, :if => Proc.new { |user| user.mail_changed? && user.mail.present? }, :case_sensitive => false
# Login must contain letters, numbers, underscores only # Login must contain letters, numbers, underscores only
validates_format_of :login, :with => /\A[a-z0-9_\-@\.]*\z/i validates_format_of :login, :with => /\A[a-z0-9_\-\.]*\z/i
validates_length_of :login, :maximum => LOGIN_LENGTH_LIMIT validates_length_of :login, :maximum => LOGIN_LENGTH_LIMIT
validates_length_of :firstname, :maximum => 30 validates_length_of :firstname, :maximum => 30
validates_length_of :lastname, :maximum => 30 validates_length_of :lastname, :maximum => 30

View File

@ -235,6 +235,15 @@ class UsersService
if @current_user.check_password?(params[:password]) if @current_user.check_password?(params[:password])
@current_user.password, @current_user.password_confirmation = params[:new_password], params[:new_password_confirmation] @current_user.password, @current_user.password_confirmation = params[:new_password], params[:new_password_confirmation]
@current_user.save @current_user.save
# 修改密码同步gitlab密码修改
unless @current_user.gid.nil?
begin
g = Gitlab.client
g.edit_user(@current_user.gid, :password => params[:new_password])
rescue Exception => e
logger.error "change users password failed! ===> #{e}"
end
end
#raise @current_user.errors.full_message #raise @current_user.errors.full_message
#return @current_user #return @current_user
else else

View File

@ -27,14 +27,14 @@
</div> </div>
<% else %> <% else %>
<div nhname='new_message_' style="display:none;"> <div nhname='new_message_' style="display:none;">
<%= form_for('new_form',:url => {:controller => 'words', :action => 'leave_course_message'},:method => "post") do |f|%> <%= form_for('new_form',:url => {:controller => 'words', :action => 'leave_course_message'}, :html=>{:id => "course_feedback_new"},:method => "post") do |f|%>
<%= hidden_field_tag :asset_id,params[:asset_id],:required => false,:style => 'display:none' %> <%= hidden_field_tag :asset_id,params[:asset_id],:required => false,:style => 'display:none' %>
<textarea placeholder="有问题或有建议,请直接给我留言吧!" nhname='new_message_textarea_' name="new_form[course_message]"></textarea> <textarea placeholder="有问题或有建议,请直接给我留言吧!" nhname='new_message_textarea_' name="new_form[course_message]"></textarea>
<p nhname='contentmsg_'></p> <p nhname='contentmsg_'></p>
<div nhname='toolbar_container_' style="float:left;padding-top:3px;margin-bottom: 15px;"></div> <div nhname='toolbar_container_' style="float:left;padding-top:3px;margin-bottom: 15px;"></div>
<a id="new_message_cancel_btn_" href="javascript:void(0)" class="grey_btn fr mt10">取消</a> <a id="new_message_cancel_btn_" href="javascript:void(0)" class="grey_btn fr mt10">取消</a>
<a id="new_message_submit_btn_" href="javascript:void(0)" class="blue_btn fr ml10 mt10">留言</a> <a href="javascript:void(0);" class="blue_btn fr ml10 mt10" id="submit_feedback_course" >留言</a>
<% end%> <% end %>
</div> </div>
<% end %> <% end %>
</div> </div>
@ -50,7 +50,11 @@
<div style="display:none;"><a href="#" id="nhjump"></a></div> <div style="display:none;"><a href="#" id="nhjump"></a></div>
<script type="text/javascript"> <script type="text/javascript">
$(function(){
$(function(){
$("#submit_feedback_course").one('click',function() {
$("#course_feedback_new").submit();
});
KindEditor.ready(function(K){ KindEditor.ready(function(K){
$("a[nhname='reply_btn']").live('click',function(){ $("a[nhname='reply_btn']").live('click',function(){
var params = {}; var params = {};
@ -83,4 +87,5 @@
}); });
}); });
}); });
</script> </script>

View File

@ -1,6 +1,7 @@
<% @members.each do |member| %> <% @members.each do |member| %>
<li > <li >
<%= link_to_user_header member.principal,true,:class => "w150 c_orange fl" %> <%#= link_to_user_header member.principal,true,:class => "w150 c_orange fl" %>
<%= link_to "#{member.principal}#{member.principal.show_name}", user_path(member.principal), :class => "w150 linkBlue fl" %>
<span class="w150 fl"> <span class="w150 fl">
<%= zh_course_role(h member.roles.sort.collect(&:to_s).join(', ')) %> <%= zh_course_role(h member.roles.sort.collect(&:to_s).join(', ')) %>
<%= form_for(member, {:as => :membership, :remote => true, :url => membership_path(member), <%= form_for(member, {:as => :membership, :remote => true, :url => membership_path(member),

View File

@ -12,3 +12,4 @@
<%= render :partial => 'course_teacher', :locals => {:members => @members} %> <%= render :partial => 'course_teacher', :locals => {:members => @members} %>
<% end%> <% end%>

View File

@ -88,6 +88,15 @@
</li> </li>
<% end %> <% end %>
</ul> </ul>
<% if @course.is_delete == 1 %>
<div class="mt30 fr"><img src="/images/pic_del.gif" class="mr5"><%=link_to "恢复该课程", renew_course_path(@course) %></div>
<% else %>
<div class="mt30">
<img src="/images/pic_del.gif" class="mr5"><%=link_to "删除该课程", course_path(@course), :method => :delete, :confirm=>"确认要删除该课程吗?" %>
<span>(友情提示:删除该课程后如果您想恢复该课程,请联系系统管理员!)</span>
</div>
<% end %>
</div> </div>
<div class="hwork_undis" id="tbc_02"> <div class="hwork_undis" id="tbc_02">

View File

@ -103,17 +103,17 @@
<!--邀请加入--> <!--邀请加入-->
<div class="subNavBox"> <div class="subNavBox">
<% if User.current.member_of?(@project) %> <%# if User.current.member_of?(@project) %>
<div class="subNav currentDd currentDt subNav_jiantou" id="expand_tools_expand_invit" nhtype="toggle4cookie" data-id="expand_invit" data-target="#navContent_invit" data-val="expand"> <!--<div class="subNav currentDd currentDt subNav_jiantou" id="expand_tools_expand_invit" nhtype="toggle4cookie" data-id="expand_invit" data-target="#navContent_invit" data-val="expand">-->
<%= l(:label_invite)%> <!--<%#= l(:label_invite)%>-->
</div> <!--</div>-->
<ul class="navContent " style="display:block" id="navContent_invit"> <!--<ul class="navContent " style="display:block" id="navContent_invit">-->
<li><%= link_to l(:label_invite_new_user), :controller=>"projects", :action=>"invite_members_by_mail", :id => @project %></li> <!--<li><%#= link_to l(:label_invite_new_user), :controller=>"projects", :action=>"invite_members_by_mail", :id => @project %></li>-->
<!--<%# if User.current.allowed_to?(:manage_members, @project) %>--> <!--&lt;!&ndash;<%# if User.current.allowed_to?(:manage_members, @project) %>&ndash;&gt;-->
<!--<li><%#= link_to l(:label_invite_trustie_user), :controller=>"projects", :action=>"invite_members", :id => @project %></li>--> <!--<li><%#= link_to l(:label_invite_trustie_user), :controller=>"projects", :action=>"invite_members", :id => @project %></li>-->
<!--<%# end %>--> <!--<%# end %>-->
</ul> <!--</ul>-->
<% end %><!--end--> <%# end %><!--end-->
<!--menu 左侧工具栏 --> <!--menu 左侧工具栏 -->
<%#--project_new_type: 1为开发组2为科研组3为朋友圈子--%> <%#--project_new_type: 1为开发组2为科研组3为朋友圈子--%>

View File

@ -147,7 +147,7 @@
<% end%> <% end%>
<% end%> <% end%>
</div> </div>
<% courses = @user.courses.visible.select("courses.*,(SELECT MAX(created_at) FROM `course_activities` WHERE course_activities.course_id = courses.id) AS a").order("a desc").limit(5)%> <% courses = @user.courses.visible.where("is_delete =?", 0).select("courses.*,(SELECT MAX(created_at) FROM `course_activities` WHERE course_activities.course_id = courses.id) AS a").order("a desc").limit(5)%>
<div class="homepageLeftMenuCourses <%= courses.empty? ? 'none' : ''%>" id="homepageLeftMenuCourses"> <div class="homepageLeftMenuCourses <%= courses.empty? ? 'none' : ''%>" id="homepageLeftMenuCourses">
<ul> <ul>
<%= render :partial => 'layouts/user_courses', :locals => {:courses => courses,:user => @user, :page => 0} %> <%= render :partial => 'layouts/user_courses', :locals => {:courses => courses,:user => @user, :page => 0} %>

View File

@ -170,7 +170,7 @@
</ul> </ul>
<ul class="setting_right "> <ul class="setting_right ">
<li><input id="password" name="password" class="w210" type="password" required="true" nh_required="1"></li> <li><input id="password" name="password" class="w210" type="password" required="true" nh_required="1"></li>
<li><input id="new_password" name="new_password" class="w210" type="password" required="true" nh_required="1"><span class="c_red ml5">请输入6-12个字符</span></li> <li><input id="new_password" name="new_password" class="w210" type="password" required="true" nh_required="1"><span class="c_red ml5">请输入8-12个字符</span></li>
<li><input id="new_password_confirmation" name="new_password_confirmation" class="w210" type="password" required="true" nh_required="1"></li> <li><input id="new_password_confirmation" name="new_password_confirmation" class="w210" type="password" required="true" nh_required="1"></li>
<li class="ml2"> <li class="ml2">
<a href="javascript:;" id="my_password_form_link" class="blue_btn fl">确认</a> <a href="javascript:;" id="my_password_form_link" class="blue_btn fl">确认</a>

View File

@ -1,2 +1,6 @@
//location.reload(); //location.reload();
window.location.href = '<%= organization_org_document_comments_path(:organization_id => @org_document_comment.root.organization_id)%>' <% if params[:detail_page] %>
window.location.href = '<%= organization_org_document_comments_path(:organization_id => @org_document_comment.root.organization_id)%>';
<% else %>
window.location.reload();
<% end %>

View File

@ -17,7 +17,7 @@
</div> </div>
<div class="cl"></div> <div class="cl"></div>
<div> <div>
<%= form_tag url_for(:controller => 'org_document_comments',:action => 'update', :id => @org_document.id, :flag => @flag),:method => 'put', :id => 'new_org_document_form' do |f| %> <%= 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| %>
<div class="resources"> <div class="resources">
<div> <div>
<input class="postDetailInput fl mr15" style="margin-bottom:15px;" name="org_document_comment[title]" id="document_title" style="resize:none;" onfocus = "$('#org_document_editor').show();" onblur="check_org_title();" value="<%= @org_document.title %>" /> <input class="postDetailInput fl mr15" style="margin-bottom:15px;" name="org_document_comment[title]" id="document_title" style="resize:none;" onfocus = "$('#org_document_editor').show();" onblur="check_org_title();" value="<%= @org_document.title %>" />

View File

@ -1,24 +1,37 @@
<%= javascript_include_tag "/assets/kindeditor/kindeditor",'/assets/kindeditor/pasteimg'%> <%= javascript_include_tag "/assets/kindeditor/kindeditor",'/assets/kindeditor/pasteimg'%>
<script> <script>
function check_org_title(title) function check_org_title()
{ {
if($("#document_title").val().trim() == "") if($("#document_title").val().trim() == "")
{ {
$("#doc_title_hint").html("<span class='c_red'>标题不能为空</span>").show(); $("#doc_title_hint").html("<span class='c_red'>标题不能为空</span>").show();
} return false;
else }
{ else
$("#doc_title_hint").hide(); {
} $("#doc_title_hint").hide();
} return true;
}
}
function create_org_document()
{
if(check_org_title() == true)
{
org_document_description_editor.sync();
$('#new_org_document_form').submit();
}
}
function cancel_create_org_document(){
location.href = document.referrer;
}
</script> </script>
<%= form_tag organization_org_document_comments_path(:organization_id => @organization.id), :id => 'new_org_document_form' do |f| %> <%= form_tag organization_org_document_comments_path(:organization_id => @organization.id, :field_id => params[:field_id]), :id => 'new_org_document_form' do |f| %>
<div class="resources"> <div class="resources">
<div> <div>
<textarea class="postDetailInput fl mr15" style="margin-bottom:15px;" name="org_document_comment[title]" id="document_title" style="resize:none;" onfocus = "$('#org_document_editor').show();" onblur="check_org_title();" placeholder="请输入文章标题"></textarea> <textarea class="postDetailInput fl mr15" style="margin-bottom:15px;" name="org_document_comment[title]" id="document_title" style="resize:none;" onfocus = "$('#org_document_editor').show();" placeholder="请输入文章标题"></textarea>
</div> </div>
<div id="doc_title_hint"></div> <div id="doc_title_hint"></div>
<div id="org_document_editor" class="mt15" style="display: none"> <div id="org_document_editor" class="mt15" >
<div class="mt10"> <div class="mt10">
<%= kindeditor_tag 'org_document_comment[content]','', :editor_id => 'org_document_description_editor', :height => "150px" %> <%= kindeditor_tag 'org_document_comment[content]','', :editor_id => 'org_document_description_editor', :height => "150px" %>
</div> </div>
@ -29,9 +42,9 @@
<div class="cl"></div> <div class="cl"></div>
<div class="mt5"> <div class="mt5">
<a href="javascript:void(0);" class="BlueCirBtnMini fr" onclick="org_document_description_editor.sync();$('#new_org_document_form').submit();">确定</a> <a href="javascript:void(0);" class="BlueCirBtnMini fr" onclick="create_org_document();">确定</a>
<span class="fr mr10 mt3">或</span> <span class="fr mr10 mt3">或</span>
<a href="javascript:void(0);" onclick="$('#org_document_editor').hide(); $('#doc_title_hint').hide();" class="fr mr10 mt3">取消</a> <a href="javascript:void(0);" onclick="cancel_create_org_document();" class="fr mr10 mt3">取消</a>
<div class="cl"></div> <div class="cl"></div>
</div> </div>

View File

@ -46,7 +46,7 @@
<%= link_to "编辑文章", edit_org_document_comment_path(:id => @document.id, :organization_id => @document.organization_id, :flag => 1), :class => "postOptionLink" %> <%= link_to "编辑文章", edit_org_document_comment_path(:id => @document.id, :organization_id => @document.organization_id, :flag => 1), :class => "postOptionLink" %>
</li> </li>
<li> <li>
<%= link_to "删除文章", org_document_comment_path(:id => @document.id, :organization_id => @document.organization_id), :method => 'delete', <%= 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)}, :data => {:confirm => l(:text_are_you_sure)},
:remote => true, :class => 'postOptionLink' %> :remote => true, :class => 'postOptionLink' %>
</li> </li>

View File

@ -2,3 +2,4 @@ $("#org_subfield_list").html("");
$("#org_subfield_list").html("<%= escape_javascript(render :partial => 'organizations/subfield_list',:locals => {:subfields => @organization.org_subfields }) %>"); $("#org_subfield_list").html("<%= escape_javascript(render :partial => 'organizations/subfield_list',:locals => {:subfields => @organization.org_subfields }) %>");
$("#sub_field_left_lists").html(""); $("#sub_field_left_lists").html("");
$("#sub_field_left_lists").html("<%= escape_javascript(render :partial => 'organizations/org_left_subfield_list', :locals => {:organization => @organization}) %>"); $("#sub_field_left_lists").html("<%= escape_javascript(render :partial => 'organizations/org_left_subfield_list', :locals => {:organization => @organization}) %>");
$("#subfield_name").val("");

View File

@ -22,7 +22,7 @@
</div> </div>
<% end %> <% end %>
<% if act.org_act_type == 'OrgDocumentComment' && act.org_act_id != @organization.home_id %> <% if act.org_act_type == 'OrgDocumentComment' && act.org_act_id != @organization.home_id %>
<%= render :partial => 'show_org_document', :locals => {:document => act.org_act, :act => act, :flag => 2} %> <%= render :partial => 'show_org_document', :locals => {:document => act.org_act, :act => act, :flag => 2, :org_subfield_id => params[:org_subfield_id]} %>
<% end %> <% end %>
<% end %> <% end %>
<% if act.container_type == 'Project' %> <% if act.container_type == 'Project' %>

View File

@ -25,8 +25,12 @@
</div> </div>
<% organization.org_subfields.each do |field| %> <% organization.org_subfields.each do |field| %>
<div class="homepageLeftMenuBlock"> <div class="homepageLeftMenuBlock">
<a href="javascript:void(0);" class="homepageMenuText" onclick="$('#homepageLeftMenuCourses_#{field.id}').slideToggle();"><%= field.name %></a> <% if field.field_type == "Post" %>
<%=link_to "", :title => "关联#{field.name}"%> <%= link_to "#{field.name}", organization_path(organization, :org_subfield_id => field.id), :class => "homepageMenuText" %>
<%=link_to "", new_organization_org_document_comment_path(organization, :field_id => field.id), :method => "get", :class => "homepageMenuSetting fr", :title => "发布帖子"%>
<% else %>
<%#= link_to "#{field.name}", org_subfield_files_path(field), :class => "homepageMenuText" %>
<% end %>
</div> </div>
<div class="homepageLeftMenuCourses" id="homepageLeftMenuField_<%= field.id %>" style="display:none;"> <div class="homepageLeftMenuCourses" id="homepageLeftMenuField_<%= field.id %>" style="display:none;">
</div> </div>

View File

@ -11,14 +11,10 @@
<ul style="text-align: left;" > <ul style="text-align: left;" >
<%= radio_button_tag 'org_member[role_ids][]', role.id, member.roles.include?(role) %> <%= radio_button_tag 'org_member[role_ids][]', role.id, member.roles.include?(role) %>
<!--编辑时候显示成员,中英文切换后面需从数据库的角度优化--> <!--编辑时候显示成员,中英文切换后面需从数据库的角度优化-->
<% if User.current.language == "zh" %> <% if role.id == 11 %>
<% if role.id == 11 %> <label >管理人员</label>
<label >管理人员</label> <% elsif role.id == 12 %>
<% elsif role.id == 12 %> <label >组织成员</label>
<label >组织成员</label>
<% end %>
<% else %>
<label ><%= h role %></label>
<% end %> <% end %>
</ul> </ul>
<!--<br/>--> <!--<br/>-->

View File

@ -8,7 +8,7 @@
<%= link_to User.find(document.creator_id), user_path(document.creator.id), :class => "newsBlue mr15" %> <%= link_to User.find(document.creator_id), user_path(document.creator.id), :class => "newsBlue mr15" %>
TO&nbsp;&nbsp;<%= link_to document.organization.name, organization_path(document.organization), :class => "newsBlue" %> TO&nbsp;&nbsp;<%= link_to document.organization.name, organization_path(document.organization), :class => "newsBlue" %>
| |
<span style="color:#269ac9;">组织文章</span> <span style="color:#269ac9;"><%= document.org_subfield_id.nil? ? "组织文章" :"#{OrgSubfield.find(document.org_subfield_id).name}" %></span>
</div> </div>
<div class="homepagePostTitle postGrey"><%= link_to document.title, org_document_comment_path(:id => document.id, :organization_id => document.organization.id) %></div> <div class="homepagePostTitle postGrey"><%= link_to document.title, org_document_comment_path(:id => document.id, :organization_id => document.organization.id) %></div>
<div class="homepagePostDate"> <div class="homepagePostDate">
@ -27,12 +27,12 @@
<li class="homepagePostSettingIcon"> <li class="homepagePostSettingIcon">
<ul class="homepagePostSettiongText"> <ul class="homepagePostSettiongText">
<li> <li>
<%= form_for('new_form', :url => {:controller => 'organizations', :action => 'set_homepage', :id => document.organization_id, :home_id => document.id}, :method => "put", :remote => true) do |f| %> <%= 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| %>
<a href="javascript:void(0);" class="postOptionLink" onclick="$(this).parent().submit();">设为首页</a> <a href="javascript:void(0);" class="postOptionLink" onclick="$(this).parent().submit();">设为首页</a>
<% end %> <% end %>
</li> </li>
<li> <li>
<%= link_to "编辑文章", edit_org_document_comment_path(:id => document.id, :organization_id => document.organization_id, :flag => flag), :class => "postOptionLink" %> <%= 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" %>
</li> </li>
<li> <li>
<%= link_to "删除文章", org_document_comment_path(:id => document.id, :organization_id => document.organization_id), :method => 'delete', <%= link_to "删除文章", org_document_comment_path(:id => document.id, :organization_id => document.organization_id), :method => 'delete',

View File

@ -1,22 +1,26 @@
<ul class="orgListRow"> <ul class="orgListRow">
<li class="orgListUser fb">已有栏目</li> <li class="orgListUser fb">已有栏目</li>
<li class="orgListRole fb">状态</li> <li class="orgListUser fb">状态</li>
<li class="orgListStatus fb">类型</li>
<div class="cl"></div> <div class="cl"></div>
</ul> </ul>
<ul class="orgListRow"> <ul class="orgListRow">
<li class="orgListUser">动态</li> <li class="orgListUser">动态</li>
<li class="orgListUser">默认</li> <li class="orgListUser">默认</li>
<li class="orgListStatus">默认</li>
<div class="cl"></div> <div class="cl"></div>
</ul> </ul>
<ul class="orgListRow"> <ul class="orgListRow">
<li class="orgListUser">项目</li> <li class="orgListUser">项目</li>
<li class="orgListUser">默认</li> <li class="orgListUser">默认</li>
<li class="orgListStatus">默认</li>
<div class="cl"></div> <div class="cl"></div>
</ul> </ul>
<ul class="orgListRow"> <ul class="orgListRow">
<li class="orgListUser">课程</li> <li class="orgListUser">课程</li>
<li class="orgListUser">默认</li> <li class="orgListUser">默认</li>
<li class="orgListStatus">默认</li>
<div class="cl"></div> <div class="cl"></div>
</ul> </ul>
<% subfields.each do |field| %> <% subfields.each do |field| %>
@ -24,6 +28,7 @@
<li class="orgListUser"><div id="subfield_show_<%= field.id %>"><%= field.name %></div><div id="subfield_edit_<%= field.id %>" style="display:none;"> <li class="orgListUser"><div id="subfield_show_<%= field.id %>"><%= field.name %></div><div id="subfield_edit_<%= field.id %>" style="display:none;">
<input type="text" name="name" onblur="update_subfield('#subfield_show_<%= field.id %>','#subfield_edit_<%= field.id %>','<%= field.id %>',$(this).val());" value="<%= field.name %>" style="width:70px;" /></div></li> <input type="text" name="name" onblur="update_subfield('#subfield_show_<%= field.id %>','#subfield_edit_<%= field.id %>','<%= field.id %>',$(this).val());" value="<%= field.name %>" style="width:70px;" /></div></li>
<li class="orgListUser">新增</li> <li class="orgListUser">新增</li>
<li class="orgListStatus"><%= field.field_type == "Post" ? "帖子":"资源" %></li>
<%= link_to "删除",org_subfield_path(field), :method => 'delete',:remote => true, :confirm => "您确定删除吗?", :class => "linkBlue fr mr5" %> <%= link_to "删除",org_subfield_path(field), :method => 'delete',:remote => true, :confirm => "您确定删除吗?", :class => "linkBlue fr mr5" %>
<a href="javascript:void(0);" class="linkBlue fr mr10" onclick="edit('#subfield_show_<%= field.id %>','#subfield_edit_<%= field.id %>');">编辑</a> <a href="javascript:void(0);" class="linkBlue fr mr10" onclick="edit('#subfield_show_<%= field.id %>','#subfield_edit_<%= field.id %>');">编辑</a>
<div class="cl"></div> <div class="cl"></div>

View File

@ -1,2 +1,2 @@
//location.reload(); //location.reload();
window.location.href ='<%= organization_path(@org)%>' window.location.href ='<%= organization_path(@org, :show_homepage => params[:show_homepage])%>';

View File

@ -114,7 +114,18 @@
<p class="fontBlue fb mb5">新增栏目</p> <p class="fontBlue fb mb5">新增栏目</p>
<%= form_tag url_for(:controller => 'org_subfields', :action => 'create', :organization_id => @organization.id), :id=> 'add_subfield_form',:remote => true do %> <%= form_tag url_for(:controller => 'org_subfields', :action => 'create', :organization_id => @organization.id), :id=> 'add_subfield_form',:remote => true do %>
<input type="text" id="subfield_name" name="name" placeholder="栏目名称" class="orgAddSearch mb20" /> <input type="text" id="subfield_name" name="name" placeholder="栏目名称" class="orgAddSearch mb20" />
<div class="cl"></div> <ul class="orgAddRole">
<li class="fontGrey3 fb mb10">栏目类型</li>
<li>
<input type="radio" id="orgMng" value="Post" name="field_type" checked="checked"/>
<label for="orgMng">帖子</label>
</li>
<li>
<input type="radio" id="orgMeb" value="Resource" name="field_type" />
<label for="orgMeb">资源</label>
</li>
</ul>
<div class="cl"></div>
<a href="javascript:void(0);" class="saveBtn db fl mt10" onclick="add_org_subfield();">确定</a> <a href="javascript:void(0);" class="saveBtn db fl mt10" onclick="add_org_subfield();">确定</a>
<% end %> <% end %>
</div> </div>

View File

@ -14,45 +14,47 @@
</style> </style>
<% if params[:show_homepage].nil? %> <% if params[:show_homepage].nil? %>
<div class="homepageRightBanner"> <div class="homepageRightBanner">
<div class="NewsBannerName">最新动态</div> <div class="NewsBannerName"><%= @org_subfield.nil? ? "最新动态":"#{@org_subfield.name}" %></div>
<ul class="resourcesSelect"> <% if params[:org_subfield_id].nil? %>
<li class="resourcesSelected"><a href="javascript:void(0);" class="resourcesIcon"></a> <ul class="resourcesSelect">
<ul class="homepagePostType"> <li class="resourcesSelected"><a href="javascript:void(0);" class="resourcesIcon"></a>
<li> <ul class="homepagePostType">
<ul class="homepagePostTypeHomework fl"> <li>
<li class="f14">课程动态</li> <ul class="homepagePostTypeHomework fl">
<li><%= link_to "作业动态", {:controller => "organizations", :action => "show", :type => "course_homework"}, :class => "homepagePostTypeAssignment postTypeGrey"%> <li class="f14">课程动态</li>
<!--<a href="javascript:void(0);" class="homepagePostTypeAssignment postTypeGrey">作业动态</a>--></li> <li><%= link_to "作业动态", {:controller => "organizations", :action => "show", :type => "course_homework"}, :class => "homepagePostTypeAssignment postTypeGrey"%>
<li><%= link_to "通知动态", {:controller => "organizations", :action => "show", :type => "course_news"}, :class => "homepagePostTypeNotice postTypeGrey"%> <!--<a href="javascript:void(0);" class="homepagePostTypeAssignment postTypeGrey">作业动态</a>--></li>
<!--<li><a href="javascript:void(0);" class="homepagePostTypeNotice postTypeGrey">通知动态</a></li>--> <li><%= link_to "通知动态", {:controller => "organizations", :action => "show", :type => "course_news"}, :class => "homepagePostTypeNotice postTypeGrey"%>
<li><%= link_to "论坛动态", {:controller => "organizations", :action => "show", :type => "course_message"}, :class => "homepagePostTypeForum postTypeGrey"%> <!--<li><a href="javascript:void(0);" class="homepagePostTypeNotice postTypeGrey">通知动态</a></li>-->
<li><%= link_to "问卷动态", {:controller => "organizations", :action => "show", :type => "course_poll"}, :class => "homepagePostTypeQuiz postTypeGrey"%> <li><%= link_to "论坛动态", {:controller => "organizations", :action => "show", :type => "course_message"}, :class => "homepagePostTypeForum postTypeGrey"%>
<!--<li><a href="javascript:void(0);" class="homepagePostTypeForum postTypeGrey">论坛动态</a></li>--> <li><%= link_to "问卷动态", {:controller => "organizations", :action => "show", :type => "course_poll"}, :class => "homepagePostTypeQuiz postTypeGrey"%>
<!--<li><a href="javascript:void(0);" class="homepagePostTypeQuiz postTypeGrey">问卷动态</a></li>--> <!--<li><a href="javascript:void(0);" class="homepagePostTypeForum postTypeGrey">论坛动态</a></li>-->
</ul> <!--<li><a href="javascript:void(0);" class="homepagePostTypeQuiz postTypeGrey">问卷动态</a></li>-->
</li> </ul>
<li> </li>
<ul class="homepagePostTypeProject fl"> <li>
<li class="f14">项目动态</li> <ul class="homepagePostTypeProject fl">
<li><%= link_to "问题动态", {:controller => "organizations", :action => "show", :type => "project_issue"}, :class => "homepagePostTypeQuestion postTypeGrey"%> <li class="f14">项目动态</li>
<li><%= link_to "论坛动态", {:controller => "organizations", :action => "show", :type => "project_message"}, :class => "homepagePostTypeForum postTypeGrey"%> <li><%= link_to "问题动态", {:controller => "organizations", :action => "show", :type => "project_issue"}, :class => "homepagePostTypeQuestion postTypeGrey"%>
<!--<li><a href="javascript:void(0);" class="homepagePostTypeQuestion postTypeGrey">问题动态</a></li> <li><%= link_to "论坛动态", {:controller => "organizations", :action => "show", :type => "project_message"}, :class => "homepagePostTypeForum postTypeGrey"%>
<li><a href="javascript:void(0);" class="homepagePostTypeForum postTypeGrey">论坛动态</a></li>--> <!--<li><a href="javascript:void(0);" class="homepagePostTypeQuestion postTypeGrey">问题动态</a></li>
</ul> <li><a href="javascript:void(0);" class="homepagePostTypeForum postTypeGrey">论坛动态</a></li>-->
</li> </ul>
<li> </li>
<ul class="homepagePostTypeProject fl"> <li>
<li class="f14">更多</li> <ul class="homepagePostTypeProject fl">
<li class="mt-4"><%= link_to "组织动态", {:controller => "organizations", :action => "show", :type => "org"}, :class =>"homepagePostTypeMessage postTypeGrey"%> <li class="f14">更多</li>
<li class="mt-4"><%= link_to "全部动态", {:controller => "organizations", :action => "show", :type => nil}, :class =>"homepagePostTypeAll postTypeGrey"%> <li class="mt-4"><%= link_to "组织动态", {:controller => "organizations", :action => "show", :type => "org"}, :class =>"homepagePostTypeMessage postTypeGrey"%>
<li class="mt-4"><%= link_to "全部动态", {:controller => "organizations", :action => "show", :type => nil}, :class =>"homepagePostTypeAll postTypeGrey"%>
</ul>
</li>
</ul> </ul>
</li> </li>
</ul> </ul>
</li> <% end %>
</ul>
</div> </div>
<% end %> <% end %>
<% if !@organization.home_id.nil? and OrgDocumentComment.where("id = ?", @organization.home_id).count > 0 %> <% if !@organization.home_id.nil? and OrgDocumentComment.where("id = ?", @organization.home_id).count > 0 and params[:org_subfield_id].nil? %>
<script> <script>
$(function() { $(function() {
init_activity_KindEditor_data(<%= OrgActivity.where("org_act_type = 'OrgDocumentComment' and org_act_id =?",@organization.home_id).first.id %>, null, "87%"); init_activity_KindEditor_data(<%= OrgActivity.where("org_act_type = 'OrgDocumentComment' and org_act_id =?",@organization.home_id).first.id %>, null, "87%");

View File

@ -29,7 +29,8 @@
<p nhname="contentmsg"></p> <p nhname="contentmsg"></p>
<div class="fl mt10" style="padding-top:5px;" nhname="toolbar_container"></div> <div class="fl mt10" style="padding-top:5px;" nhname="toolbar_container"></div>
<%#= submit_tag l(:button_leave_meassge), :name => nil , :class => "blue_btn fr mt10 mb10" %> <%#= submit_tag l(:button_leave_meassge), :name => nil , :class => "blue_btn fr mt10 mb10" %>
<%= link_to l(:button_leave_meassge), "javascript:void(0)", :onclick => 'submitProjectFeedback();', :onmouseover => 'submitFocus(this);', :class => 'blue_btn fr mt10 mb10' %> <a href="javascript:void(0);" class="blue_btn fr ml10 mt10" id="submit_feedback_project" >留言</a>
<%#= link_to l(:button_leave_meassge), "javascript:void(0)", :onclick => 'submitProjectFeedback();', :onmouseover => 'submitFocus(this);', :class => 'blue_btn fr mt10 mb10' %>
<% end %> <% end %>
<% end %> <% end %>
@ -43,6 +44,9 @@
<div style="display:none;"><a href="#" id="nhjump"></a></div> <div style="display:none;"><a href="#" id="nhjump"></a></div>
<script type="text/javascript"> <script type="text/javascript">
$(function(){ $(function(){
$("#submit_feedback_project").one('click',function() {
$("#project_feedback_form").submit();
});
function init_editor(params){ function init_editor(params){
params.textarea.removeAttr('placeholder'); params.textarea.removeAttr('placeholder');

View File

@ -26,4 +26,13 @@
</ul> </ul>
<a href="javascript:void(0)" class="blue_btn ml110" onclick="submit_edit_project(<%= @project.id %>);" >保存</a> <a href="javascript:void(0)" class="blue_btn ml110" onclick="submit_edit_project(<%= @project.id %>);" >保存</a>
<% end %> <% end %>
<% if User.current.member_of?(@project) && Member.where(:user_id => User.current.id, :project_id => @project.id).first.roles.to_s.include?("Manager") %>
<div class="mt30">
<img src="/images/pic_del.gif" class="mr5">
<%= link_to(l(:button_delete_project), { :controller => 'projects', :action => 'archive', :id => @project, :status => params[:status], :type =>"project" },
:data => {:confirm => l(:text_are_you_sure)}, :method => :post) unless @project.archived? %>
<%#=link_to "删除该课程", course_path(@course), :method => :delete, :confirm=>"确认要删除该课程吗?" %>
<span>(友情提示:删除该项目后如果您想恢复该项目,请联系系统管理员!)</span>
</div>
<% end %>
<div class="cl"></div> <div class="cl"></div>

View File

@ -25,8 +25,8 @@
<textarea id="copy_rep_content" class="cloneUrl mt5 fl" type="input" ><%=@repository.type.to_s=="Repository::Gitlab" ? @repos_url.to_s.lstrip : @repository.url %></textarea> <textarea id="copy_rep_content" class="cloneUrl mt5 fl" type="input" ><%=@repository.type.to_s=="Repository::Gitlab" ? @repos_url.to_s.lstrip : @repository.url %></textarea>
<a href="javascript:void(0);" class="clone_btn mt5" onclick="jsCopy()"><span class="vl_copy" title="点击复制版本库地址"></span></a> <a href="javascript:void(0);" class="clone_btn mt5" onclick="jsCopy()"><span class="vl_copy" title="点击复制版本库地址"></span></a>
<div class="fl mt5 ml15"><a href="javascript:void(0);" class="vl_btn fb" onclick="zip()"><span class="vl_zip"></span>ZIP</a> </div> <div class="fl mt5 ml15"><a href="javascript:void(0);" class="vl_btn fb" onclick="zip()"><span class="vl_zip"></span>ZIP</a> </div>
<!--<div class="fr mt5"><a href="javascript:void(0);" class="vl_btn fb" onclick="zip()"><span class="vl_fork"></span>Fork</a> <span href="javascript:void(0);" class="vl_btn_2 fb">0</span> </div>--> <%# 针对公开项目:用户必须创建了项目,否则用户无法同步 %>
<% unless User.current.id == @project.user_id %> <% if User.current.id != @project.user_id %>
<div class="fr mt5"><%= link_to "<span class='vl_fork'></span>".html_safe+"Fork", {:controller => 'repositories', :action => 'forked'}, :class=>"vl_btn"%> <div class="fr mt5"><%= link_to "<span class='vl_fork'></span>".html_safe+"Fork", {:controller => 'repositories', :action => 'forked'}, :class=>"vl_btn"%>
<span href="javascript:void(0);" class="vl_btn_2 fb"><%= @project.forked_count.to_i %></span> <span href="javascript:void(0);" class="vl_btn_2 fb"><%= @project.forked_count.to_i %></span>
</div> </div>

View File

@ -22,6 +22,7 @@
<% end %> <% end %>
<!--被管理员拉入项目--> <!--被管理员拉入项目-->
<% if ma.forge_message_type == "JoinProject" %> <% if ma.forge_message_type == "JoinProject" %>
<% unless ma.project.nil? %>
<ul class="homepageNewsList fl"> <ul class="homepageNewsList fl">
<li class="homepageNewsPortrait fl"> <li class="homepageNewsPortrait fl">
<a href="javascript:void(0);"><%=link_to image_tag(url_to_avatar(User.find(ma.forge_message_id)), :width => "30", :height => "30"), user_path(ma.forge_message_id) %></a> <a href="javascript:void(0);"><%=link_to image_tag(url_to_avatar(User.find(ma.forge_message_id)), :width => "30", :height => "30"), user_path(ma.forge_message_id) %></a>
@ -52,9 +53,11 @@
</div> </div>
<li class="homepageNewsTime fl"><%= time_tag(ma.created_at).html_safe %> </li> <li class="homepageNewsTime fl"><%= time_tag(ma.created_at).html_safe %> </li>
</ul> </ul>
<% end %>
<% end %> <% end %>
<!-被管理员移出项目--> <!--被管理员移出项目-->
<% if ma.forge_message_type == "RemoveFromProject" %> <% if ma.forge_message_type == "RemoveFromProject" %>
<% unless ma.project.nil? %>
<ul class="homepageNewsList fl"> <ul class="homepageNewsList fl">
<li class="homepageNewsPortrait fl"> <li class="homepageNewsPortrait fl">
<a href="javascript:void(0);"><%=link_to image_tag(url_to_avatar(User.find(ma.forge_message_id)), :width => "30", :height => "30"), user_path(ma.forge_message_id) %></a> <a href="javascript:void(0);"><%=link_to image_tag(url_to_avatar(User.find(ma.forge_message_id)), :width => "30", :height => "30"), user_path(ma.forge_message_id) %></a>
@ -85,6 +88,7 @@
</div> </div>
<li class="homepageNewsTime fl"><%= time_tag(ma.created_at).html_safe %> </li> <li class="homepageNewsTime fl"><%= time_tag(ma.created_at).html_safe %> </li>
</ul> </ul>
<% end %>
<% end %> <% end %>
<!--邀请加入项目--> <!--邀请加入项目-->
<% if ma.forge_message_type == "ProjectInvite" %> <% if ma.forge_message_type == "ProjectInvite" %>

View File

@ -19,12 +19,12 @@
<div class="message_box mb10" id="users_setting"> <div class="message_box mb10" id="users_setting">
<div nhname='new_message' style="display:none;"> <div nhname='new_message' style="display:none;">
<%= form_for('new_form',:url => leave_user_message_path(@user.id),:method => "post") do |f|%> <%= form_for('new_form',:url => leave_user_message_path(@user.id), :html =>{:id => "user_feedback_new"}, :method => "post") do |f|%>
<textarea placeholder="有问题或有建议,请直接给我留言吧!" style="display: none" nhname='new_message_textarea' name="new_form[user_message]"></textarea> <textarea placeholder="有问题或有建议,请直接给我留言吧!" style="display: none" nhname='new_message_textarea' name="new_form[user_message]"></textarea>
<p nhname='contentmsg'></p> <p nhname='contentmsg'></p>
<div nhname='toolbar_container' style="float:left;padding-top:3px;"></div> <div nhname='toolbar_container' style="float:left;padding-top:3px;"></div>
<a id="new_message_cancel_btn" href="javascript:void(0)" class="grey_n_btn fr " style="margin-top:6px;">取消</a> <a id="new_message_cancel_btn" href="javascript:void(0)" class="grey_n_btn fr " style="margin-top:6px;">取消</a>
<a id="new_message_submit_btn" href="javascript:void(0)" class="blue_n_btn fr mr5 " style="margin-top:6px;">留言</a> <a href="javascript:void(0);" class="blue_n_btn fr mr5" id="submit_feedback_user" style="margin-top:6px;" >留言</a>
<% end%> <% end%>
</div> </div>
<div class="cl"></div> <div class="cl"></div>
@ -44,3 +44,12 @@
<div class="cl"></div> <div class="cl"></div>
</div><!--message_box end--> </div><!--message_box end-->
</div> </div>
<script type="text/javascript">
$(function(){
$("#submit_feedback_user").one('click',function() {
$("#submit_feedback_user").submit();
});
});
</script>

View File

@ -52,7 +52,7 @@ zh:
label_mail_attention: "qq邮箱可能收不到此邮件其他邮箱如果没有收到可能在垃圾邮件中" label_mail_attention: "qq邮箱可能收不到此邮件其他邮箱如果没有收到可能在垃圾邮件中"
label_mail_attention1: "其中gmail与教育网邮箱的激活邮件有时比较慢请耐心等待。" label_mail_attention1: "其中gmail与教育网邮箱的激活邮件有时比较慢请耐心等待。"
# register中js判断密码设置是否合法提示信息 # register中js判断密码设置是否合法提示信息
setting_password_min_length_limit: "密码长度至少大于 %{count} 个字符。" setting_password_min_length_limit: "密码长度至少大于等于 %{count} 个字符。"
setting_password_error: "密码长度不够或密码不一致" setting_password_error: "密码长度不够或密码不一致"
setting_password_success: "密码设置成功" setting_password_success: "密码设置成功"
# account_controller中register方法判断注册成功的提示信息 # account_controller中register方法判断注册成功的提示信息

View File

@ -921,6 +921,7 @@ zh:
button_rollback: 恢复到这个版本 button_rollback: 恢复到这个版本
button_reply: 回复 button_reply: 回复
button_archive: 存档 button_archive: 存档
button_delete_project: 删除项目
button_unarchive: 取消存档 button_unarchive: 取消存档
button_reset: 重置 button_reset: 重置
button_rename: 重命名/重定向 button_rename: 重命名/重定向

View File

@ -895,6 +895,7 @@ RedmineApp::Application.routes.draw do
get 'member_score', :to => 'courses#member_score' get 'member_score', :to => 'courses#member_score'
post 'finishcourse' post 'finishcourse'
post 'restartcourse' post 'restartcourse'
match "renew", :to => 'courses#renew', :via => [:post, :get], :as =>'renew'
match "searchmembers", :controller => 'courses', :action => 'searchmembers', :via => [:post,:get] match "searchmembers", :controller => 'courses', :action => 'searchmembers', :via => [:post,:get]
match "searchgroupmembers", :via => [:post, :get] match "searchgroupmembers", :via => [:post, :get]
match 'member_score_sort', :via => [:get] match 'member_score_sort', :via => [:get]

View File

@ -0,0 +1,5 @@
class AddIsDeleteToCourses < ActiveRecord::Migration
def change
add_column :courses, :is_delete, :integer, :default => 0
end
end

View File

@ -0,0 +1,5 @@
class AddSubfieldToDocument < ActiveRecord::Migration
def change
add_column :org_document_comments, :org_subfield_id, :integer
end
end

View File

@ -0,0 +1,5 @@
class AddTypeToOrgSubfields < ActiveRecord::Migration
def change
add_column :org_subfields, :field_type, :string
end
end

View File

@ -0,0 +1,10 @@
class SetTypeForOrgSubfields < ActiveRecord::Migration
def up
OrgSubfield.all.each do |field|
field.update_attribute(:field_type, "Post")
end
end
def down
end
end

View File

@ -11,7 +11,7 @@
# #
# It's strongly recommended to check this file into your version control system. # It's strongly recommended to check this file into your version control system.
ActiveRecord::Schema.define(:version => 20151208032013) do ActiveRecord::Schema.define(:version => 20151209085942) do
create_table "activities", :force => true do |t| create_table "activities", :force => true do |t|
t.integer "act_id", :null => false t.integer "act_id", :null => false
@ -459,6 +459,7 @@ ActiveRecord::Schema.define(:version => 20151208032013) do
t.integer "open_student", :default => 0 t.integer "open_student", :default => 0
t.integer "outline", :default => 0 t.integer "outline", :default => 0
t.integer "publish_resource", :default => 0 t.integer "publish_resource", :default => 0
t.integer "is_delete", :default => 0
end end
create_table "custom_fields", :force => true do |t| create_table "custom_fields", :force => true do |t|
@ -1160,6 +1161,7 @@ ActiveRecord::Schema.define(:version => 20151208032013) do
t.datetime "updated_at", :null => false t.datetime "updated_at", :null => false
t.boolean "locked", :default => false t.boolean "locked", :default => false
t.integer "sticky", :default => 0 t.integer "sticky", :default => 0
t.integer "org_subfield_id"
end end
create_table "org_member_roles", :force => true do |t| create_table "org_member_roles", :force => true do |t|
@ -1186,6 +1188,7 @@ ActiveRecord::Schema.define(:version => 20151208032013) do
t.string "name" t.string "name"
t.datetime "created_at", :null => false t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false t.datetime "updated_at", :null => false
t.string "field_type"
end end
create_table "organizations", :force => true do |t| create_table "organizations", :force => true do |t|
@ -1551,7 +1554,6 @@ ActiveRecord::Schema.define(:version => 20151208032013) do
end end
add_index "student_works", ["homework_common_id", "user_id"], :name => "index_student_works_on_homework_common_id_and_user_id" add_index "student_works", ["homework_common_id", "user_id"], :name => "index_student_works_on_homework_common_id_and_user_id"
add_index "student_works", ["homework_common_id"], :name => "index"
create_table "student_works_evaluation_distributions", :force => true do |t| create_table "student_works_evaluation_distributions", :force => true do |t|
t.integer "student_work_id" t.integer "student_work_id"

View File

@ -0,0 +1,25 @@
require 'trustie/gitlab/sync'
namespace :gitlab do
namespace :check_members do
desc "check up projects' members "
task :projects => :environment do
s = Trustie::Gitlab::Sync.new
g = Gitlab.client
Project.all.each do |project|
unless project.gpid.nil?
begin
gmembers = g.team_members(project.gpid)
if gmembers.count != project.members.count
puts "gitlab' projects count #{gmembers.count}"
puts "project ID is #{project.id}"
s.only_members(project)
end
rescue
p "This project is wrong #{project.id}"
end
end
end
end
end
end

View File

@ -4186,6 +4186,7 @@ _extend(KUploadButton, {
(options.form ? '</div>' : '</form>'), (options.form ? '</div>' : '</form>'),
'</div>'].join(''); '</div>'].join('');
var div = K(html, button.doc); var div = K(html, button.doc);
$(div).hide()// 如果 以后要用根据 http://kindeditor.net/docs/uploadbutton.html#k-uploadbutton-options来使用uploadButton,那么这里的button会 是隐藏的
button.hide(); button.hide();
button.before(div); button.before(div);
self.div = div; self.div = div;

View File

@ -1381,3 +1381,10 @@ $(function(){
personalized_init(); personalized_init();
}); });
function submit_course_feedback() {
var flag = false;
if(flag == false){
$("#course_feedback_new").submit();
var flag = true
}
}

View File

@ -69,3 +69,5 @@ a.linkGrey8:hover {color:#585858;}
.orgMenuArrow2 {background:url(../images/nav_icon.png) -10px -132px no-repeat; position:relative; display:inline-block; width:20px; height:30px;} .orgMenuArrow2 {background:url(../images/nav_icon.png) -10px -132px no-repeat; position:relative; display:inline-block; width:20px; height:30px;}
.org_login_list{ border:1px solid #eaeaea; background:#fff; padding-left:10px; padding-bottom:10px; padding-top:8px; width:60px; left:-53px; position:absolute; z-index:9999; line-height:2; box-shadow: 0px 2px 8px rgba(146, 153, 169, 0.5); margin-top: 30px;} .org_login_list{ border:1px solid #eaeaea; background:#fff; padding-left:10px; padding-bottom:10px; padding-top:8px; width:60px; left:-53px; position:absolute; z-index:9999; line-height:2; box-shadow: 0px 2px 8px rgba(146, 153, 169, 0.5); margin-top: 30px;}
#orgUserName {max-width:50px; overflow:hidden; white-space: nowrap; text-overflow: ellipsis; display:inline-block;} #orgUserName {max-width:50px; overflow:hidden; white-space: nowrap; text-overflow: ellipsis; display:inline-block;}
.orgListStatus {width:55px; float:left;}

View File

@ -1064,3 +1064,5 @@ a.homepagePostTypeQuiz {
background: transparent url("../images/homepage_icon.png") no-repeat scroll -90px -124px; background: transparent url("../images/homepage_icon.png") no-repeat scroll -90px -124px;
padding-left: 23px; padding-left: 23px;
} }
.loadMore {font-size:14px;width:748px; text-align:center; display:block; border:1px solid #dddddd; background-color:#ffffff; float:right;padding:5px 0; letter-spacing: 1px;}