2014-10-23 11:30:34 +08:00
# Redmine - project management software
# Copyright (C) 2006-2013 Jean-Philippe Lang
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
class AdminController < ApplicationController
layout 'admin'
menu_item :projects , :only = > :projects
menu_item :plugins , :only = > :plugins
menu_item :info , :only = > :info
before_filter :require_admin
helper :sort
helper :Users
2016-03-16 15:24:41 +08:00
helper :Settings , SchoolHelper
2014-10-23 11:30:34 +08:00
include SortHelper
def index
@no_configuration_data = Redmine :: DefaultData :: Loader :: no_data?
end
def projects
2016-03-04 15:55:45 +08:00
= begin
2014-10-23 11:30:34 +08:00
@status = params [ :status ] || 1
2016-03-04 15:55:45 +08:00
scope = Project . status ( @status )
2014-10-23 11:30:34 +08:00
scope = scope . like ( params [ :name ] ) if params [ :name ] . present?
2016-03-04 15:55:45 +08:00
@projects = scope . where ( project_type : Project :: ProjectType_project ) . reorder ( " created_on desc " ) . all
= end
@projects = Project . like ( @name ) . order ( 'created_on desc' )
2014-10-23 11:30:34 +08:00
render :action = > " projects " , :layout = > false if request . xhr?
end
2015-07-01 16:41:17 +08:00
def courses
2015-07-01 17:34:17 +08:00
@name = params [ :name ]
2016-03-04 15:55:45 +08:00
@courses = Course . like ( @name ) . order ( 'created_at desc' )
2015-07-01 17:34:17 +08:00
respond_to do | format |
format . html
end
2015-07-01 16:41:17 +08:00
end
2016-03-07 16:46:02 +08:00
#管理员界面精品课程列表
2016-03-04 15:31:40 +08:00
def excellent_courses
@courses = Course . where ( " is_excellent =? or excellent_option =? " , 1 , 1 )
respond_to do | format |
format . html
end
end
2016-03-07 16:46:02 +08:00
#管理员界面课程资源列表
def course_resource_list
2016-03-15 16:14:53 +08:00
2016-03-15 15:59:49 +08:00
if params [ :sort ] == 'file_size'
@resource = Attachment . where ( :container_type = > 'Course' ) . order ( " filesize desc " )
elsif params [ :sort ] == 'file_upload'
@resource = Attachment . where ( :container_type = > 'Course' ) . order ( " created_on desc " )
elsif params [ :sort ] == 'file_download_times'
2016-03-15 15:23:43 +08:00
@resource = Attachment . where ( :container_type = > 'Course' ) . order ( " downloads desc " )
else
@resource = Attachment . where ( :container_type = > 'Course' ) . order ( " created_on desc " )
end
2016-03-15 15:59:49 +08:00
2016-03-07 16:46:02 +08:00
@resource = paginateHelper @resource , 30
@page = ( params [ 'page' ] || 1 ) . to_i - 1
respond_to do | format |
format . html
end
2016-03-08 11:01:08 +08:00
end
#管理员界面項目资源列表
def project_resource_list
2016-03-15 16:14:53 +08:00
if params [ :sort ] == 'file_size'
@pro_resource = Attachment . where ( :container_type = > 'Project' ) . order ( " filesize desc " )
elsif params [ :sort ] == 'file_upload'
@pro_resource = Attachment . where ( :container_type = > 'Project' ) . order ( " created_on desc " )
elsif params [ :sort ] == 'file_download_times'
@pro_resource = Attachment . where ( :container_type = > 'Project' ) . order ( " downloads desc " )
else
@pro_resource = Attachment . where ( :container_type = > 'Project' ) . order ( " created_on desc " )
end
2016-03-08 11:01:08 +08:00
@pro_resource = paginateHelper @pro_resource , 30
@page = ( params [ 'page' ] || 1 ) . to_i - 1
2016-03-07 16:46:02 +08:00
2016-03-08 11:01:08 +08:00
respond_to do | format |
format . html
end
2016-03-07 16:46:02 +08:00
end
2016-03-08 11:01:08 +08:00
2014-10-23 11:30:34 +08:00
def users
sort_init 'login' , 'asc'
sort_update %w( login firstname lastname mail admin created_on last_login_on )
case params [ :format ]
when 'xml' , 'json'
2016-03-18 12:44:16 +08:00
@offset , @limit = api_offset_and_limit ( { :limit = > 50 } )
2014-10-23 11:30:34 +08:00
else
2016-03-18 12:44:16 +08:00
@limit = 50 #per_page_option
2014-10-23 11:30:34 +08:00
end
@status = params [ :status ] || 1
scope = User . logged . status ( @status )
scope = User . like ( params [ :name ] ) if params [ :name ] . present?
scope = scope . in_group ( params [ :group_id ] ) if params [ :group_id ] . present?
@user_count = scope . count
@user_pages = Paginator . new @user_count , @limit , params [ 'page' ]
@offset || = @user_pages . offset
@users = scope . order ( sort_clause ) . limit ( @limit ) . offset ( @offset ) . all
respond_to do | format |
format . html {
@groups = Group . all . sort
}
format . api
end
end
2015-09-09 17:05:32 +08:00
# 系统消息
def messages
@admin_messages = SystemMessage . new
end
2014-10-23 11:30:34 +08:00
def plugins
@plugins = Redmine :: Plugin . all
end
# Loads the default configuration
# (roles, trackers, statuses, workflow, enumerations)
def default_configuration
if request . post?
begin
Redmine :: DefaultData :: Loader :: load ( params [ :lang ] )
flash [ :notice ] = l ( :notice_default_data_loaded )
rescue Exception = > e
flash [ :error ] = l ( :error_can_t_load_default_data , e . message )
end
end
redirect_to admin_url
end
def test_email
raise_delivery_errors = ActionMailer :: Base . raise_delivery_errors
# Force ActionMailer to raise delivery errors so we can catch it
ActionMailer :: Base . raise_delivery_errors = true
begin
@test = Mailer . test_email ( User . current ) . deliver
flash [ :notice ] = l ( :notice_email_sent , User . current . mail )
rescue Exception = > e
flash [ :error ] = l ( :notice_email_error , e . message )
end
ActionMailer :: Base . raise_delivery_errors = raise_delivery_errors
redirect_to settings_url ( :tab = > 'notifications' )
end
def info
@db_adapter_name = ActiveRecord :: Base . connection . adapter_name
@checklist = [
[ :text_default_administrator_account_changed , User . default_admin_account_changed? ] ,
[ :text_file_repository_writable , File . writable? ( Attachment . storage_path ) ] ,
[ :text_plugin_assets_writable , File . writable? ( Redmine :: Plugin . public_directory ) ] ,
[ :text_rmagick_available , Object . const_defined? ( :Magick ) ]
]
end
#管理功能用户列表的搜索
def search
sort_init 'login' , 'asc'
sort_update %w( login firstname lastname mail admin created_on last_login_on )
case params [ :format ]
when 'xml' , 'json'
@offset , @limit = api_offset_and_limit ( { :limit = > 15 } )
else
@limit = 15 #per_page_option
end
@status = params [ :status ] || 1
scope = User . logged . status ( @status )
2014-11-04 17:14:18 +08:00
scope = scope . like ( params [ :name ] , params [ :search_by ] [ :id ] ) if params [ :name ] . present?
2014-10-23 11:30:34 +08:00
@user_count = scope . count
@user_pages = Paginator . new @user_count , @limit , params [ 'page' ]
@user_base_tag = params [ :id ] ? 'base_users' :'base'
@users = scope . offset ( @user_pages . offset ) . limit ( @user_pages . per_page )
respond_to do | format |
format . html {
@groups = Group . all . sort
}
format . api
end
end
#首页定制
def first_page_made
if request . get?
@first_page = FirstPage . find_by_page_type ( 'project' )
elsif request . post?
@first_page = FirstPage . find_by_page_type ( 'project' )
@first_page . web_title = params [ :web_title ]
@first_page . description = params [ :first_page ] [ :description ]
#@first_page.title = params[:title]
@first_page . image_width = params [ :image_width ]
@first_page . image_height = params [ :image_height ]
@first_page . sort_type = params [ :sort_type ]
@first_page . show_course = params [ :show_course ]
@first_page . show_contest = params [ :show_contest ]
if @first_page . save
respond_to do | format |
flash [ :notice ] = l ( :notice_successful_update )
format . html {
redirect_to first_page_made_url
}
format . api { render_api_ok }
#format.json { render json: @first_page, status: :created, location: @first_page }
end
else
respond_to do | format |
flash . now [ :error ] = " #{ l :label_first_page_create_fail } : #{ @first_page . errors . full_messages [ 0 ] } "
format . html {
render :action = > 'first_page_made'
}
format . api { render_validation_errors ( @first_page ) }
#format.json { render json: @first_page.errors, status: :unprocessable_entity }
end
end
end
end
def course_page_made
if request . get?
@course_page = FirstPage . find_by_page_type ( 'course' )
@first_page = FirstPage . find_by_page_type ( 'project' )
elsif request . post?
@first_page = FirstPage . find_by_page_type ( 'project' )
@course_page = FirstPage . find_by_page_type ( 'course' )
@first_page . web_title = params [ :web_title ]
@course_page . web_title = params [ :web_title ]
@course_page . title = params [ :course_title ]
@course_page . image_width = params [ :image_width ]
@course_page . image_height = params [ :image_height ]
@course_page . description = params [ :course_description ]
if @first_page . save && @course_page . save
respond_to do | format |
format . html {
flash [ :notice ] = l ( :notice_successful_update )
redirect_to course_page_made_url
}
format . api { render_api_ok }
end
else
respond_to do | format |
flash . now [ :error ] = " #{ l :label_first_page_create_fail } : #{ @first_page . errors . full_messages [ 0 ] } \n \t #{ @course_page . errors . full_messages [ 0 ] } "
#flash.now[:error] = "#{l :label_first_page_create_fail}: #{@course_page.errors.full_messages[0]}"
format . html {
render :action = > 'course_page_made'
}
format . api { render_validation_errors ( @first_page ) }
format . api { render_validation_errors ( @course_page ) }
end
end
end
end
def contest_page_made
if request . get?
@contest_page = FirstPage . find_by_page_type ( 'contest' )
@first_page = FirstPage . find_by_page_type ( 'project' )
elsif request . post?
@first_page = FirstPage . find_by_page_type ( 'project' )
@contest_page = FirstPage . find_by_page_type ( 'contest' )
@first_page . web_title = params [ :web_title ]
@contest_page . web_title = params [ :web_title ]
@contest_page . title = params [ :contest_title ]
@contest_page . image_width = params [ :image_width ]
@contest_page . image_height = params [ :image_height ]
@contest_page . description = params [ :contest_description ]
if @first_page . save && @contest_page . save
respond_to do | format |
format . html {
flash [ :notice ] = l ( :notice_successful_update )
redirect_to contest_page_made_url
}
format . api { render_api_ok }
end
else
respond_to do | format |
flash . now [ :error ] = " #{ l :label_first_page_create_fail } : #{ @first_page . errors . full_messages [ 0 ] } \n \t #{ @contest_page . errors . full_messages [ 0 ] } \n \t #{ @notification . errors . full_messages [ 0 ] } "
format . html {
render :action = > 'contest_page_made'
}
format . api { render_validation_errors ( @first_page ) }
format . api { render_validation_errors ( @contest_page ) }
end
end
end
end
def web_footer_made
if request . get?
@organizer = WebFooterOranizer . first
@first_page = FirstPage . find_by_page_type ( 'project' )
#@notification = ContestNotification.all.first;
elsif request . post?
@first_page = FirstPage . find_by_page_type ( 'project' )
@first_page . web_title = params [ :web_title ]
@organizer = WebFooterOranizer . first
if @organizer . nil?
@organizer = WebFooterOranizer . new
end
@organizer . name = params [ :organizer_name ]
@organizer . description = params [ :web_footer_oranizer ] [ :description ]
if @first_page . save && @organizer . save
respond_to do | format |
format . html {
flash [ :notice ] = l ( :notice_successful_update )
redirect_to web_footer_made_url
}
format . api { render_api_ok }
end
else
respond_to do | format |
flash . now [ :error ] = " #{ l :label_first_page_create_fail } : #{ @first_page . errors . full_messages [ 0 ] } \n \t #{ @organizer . errors . full_messages [ 0 ] } } "
format . html {
render :action = > 'web_footer_made'
}
format . api { render_validation_errors ( @first_page ) }
format . api { render_validation_errors ( @contest_page ) }
end
end
end
end
2015-01-31 17:14:01 +08:00
#企业主页定制
def enterprise_page_made
@enterprise_page = FirstPage . find_by_page_type ( 'enterprise' )
if @enterprise_page . nil?
@enterprise_page = FirstPage . new
@enterprise_page . page_type = 'enterprise'
end
if request . get?
@first_page = FirstPage . find_by_page_type ( 'project' )
elsif request . post?
@first_page = FirstPage . find_by_page_type ( 'project' )
@first_page . web_title = params [ :web_title ]
@enterprise_page . web_title = params [ :web_title ]
@enterprise_page . title = params [ :course_title ]
@enterprise_page . image_width = params [ :image_width ]
@enterprise_page . image_height = params [ :image_height ]
@enterprise_page . description = params [ :course_description ]
if @first_page . save && @enterprise_page . save
respond_to do | format |
format . html {
flash [ :notice ] = l ( :notice_successful_update )
redirect_to enterprise_page_made_url
}
format . api { render_api_ok }
end
else
respond_to do | format |
flash . now [ :error ] = " #{ l :label_first_page_create_fail } : #{ @first_page . errors . full_messages [ 0 ] } \n \t #{ @enterprise_page . errors . full_messages [ 0 ] } "
#flash.now[:error] = "#{l :label_first_page_create_fail}: #{@course_page.errors.full_messages[0]}"
format . html {
render :action = > 'enterprise_page_made'
}
format . api { render_validation_errors ( @first_page ) }
format . api { render_validation_errors ( @enterprise_page ) }
end
end
end
end
2015-03-05 15:27:22 +08:00
#组织
def organization
2016-03-17 15:05:14 +08:00
@organizations = Organization . find_by_sql ( " SELECT * FROM organizations ORDER BY created_at DESC " )
#@organizations = Organization.all.order("created_at desc")
2015-03-05 15:27:22 +08:00
respond_to do | format |
format . html
end
end
2015-07-27 16:07:29 +08:00
#学校列表
def schools
2016-03-16 15:24:41 +08:00
@schools = School . find_by_sql ( " SELECT * FROM schools ORDER BY created_at DESC " )
2015-10-16 14:48:59 +08:00
@school_count = @schools . count
2016-03-16 15:24:41 +08:00
@school_pages = Paginator . new @school_count , 50 , params [ 'page' ] || 1
@schools = paginateHelper @schools , 50
@page = ( params [ 'page' ] || 1 ) . to_i - 1
2015-07-27 16:07:29 +08:00
respond_to do | format |
format . html
end
end
2015-03-05 17:37:33 +08:00
#移动端版本管理
def mobile_version
@versions = PhoneAppVersion . reorder ( 'created_at desc' )
2015-03-06 15:33:59 +08:00
@new_version = PhoneAppVersion . new
2015-03-05 17:37:33 +08:00
end
2015-03-07 15:36:00 +08:00
def create_version
2015-03-10 14:41:36 +08:00
@versions = PhoneAppVersion . reorder ( 'created_at desc' )
@new_version = PhoneAppVersion . new
@new_version . version = params [ :version ]
@new_version . description = params [ :description ]
2015-03-10 17:20:30 +08:00
if params [ :attachments ] [ :dummy ] [ :file ] . nil? || params [ :attachments ] [ :dummy ] [ :file ] == " "
2015-03-10 14:41:36 +08:00
respond_to do | format |
2015-03-10 17:20:30 +08:00
flash . now [ :error ] = " #{ l :label_version_create_fail } : #{ l ( :label_client_need ) } "
2015-03-10 14:41:36 +08:00
#flash.now[:error] = "#{l :label_first_page_create_fail}: #{@course_page.errors.full_messages[0]}"
format . html {
render :action = > 'mobile_version'
}
format . api { render_validation_errors ( @new_version ) }
end
2015-03-10 17:20:30 +08:00
else
@new_version . save_attachments ( params [ :attachments ] || ( params [ :version ] && params [ :version ] [ :uploads ] ) )
if @new_version . save
respond_to do | format |
format . html {
flash [ :notice ] = l ( :notice_successful_create )
redirect_to mobile_version_url
}
format . api { render_api_ok }
end
else
respond_to do | format |
flash . now [ :error ] = " #{ l :label_version_create_fail } : #{ @new_version . errors . full_messages [ 0 ] } "
#flash.now[:error] = "#{l :label_first_page_create_fail}: #{@course_page.errors.full_messages[0]}"
format . html {
render :action = > 'mobile_version'
}
format . api { render_validation_errors ( @new_version ) }
end
end
2015-03-10 14:41:36 +08:00
end
2015-03-10 17:20:30 +08:00
2015-03-07 15:36:00 +08:00
end
2015-08-15 17:06:50 +08:00
#留言列表
def leave_messages
2015-08-18 14:40:12 +08:00
@jour = JournalsForMessage . find_by_sql ( " SELECT * FROM journals_for_messages AS j1
WHERE j1 . jour_type IN ( 'Course' , 'Principal' ) AND ( j1 . m_parent_id IS NULL OR ( j1 . m_parent_id IN ( SELECT id FROM journals_for_messages WHERE jour_type IN ( 'Course' , 'Principal' ) ) ) ) order by created_on desc " )
@jour = paginateHelper @jour , 30
@page = ( params [ 'page' ] || 1 ) . to_i - 1
2015-08-15 17:06:50 +08:00
respond_to do | format |
format . html
end
end
#帖子
def messages_list
@memo = Memo . reorder ( " created_at desc " )
2015-08-18 14:40:12 +08:00
@memo = paginateHelper @memo , 30
@page = ( params [ 'page' ] || 1 ) . to_i - 1
2015-08-15 17:06:50 +08:00
respond_to do | format |
format . html
end
end
#课程讨论区的帖子
def course_messages
@course_ms = Message . joins ( " join boards on messages.board_id=boards.id where boards.course_id is not NULL " ) . reorder ( 'created_on desc' )
2015-08-18 14:40:12 +08:00
@course_ms = paginateHelper @course_ms , 30
@page = ( params [ 'page' ] || 1 ) . to_i - 1
respond_to do | format |
format . html
end
2015-08-15 17:06:50 +08:00
end
#项目讨论区的帖子
def project_messages
@project_ms = Message . joins ( " join boards on messages.board_id=boards.id where boards.project_id != -1 " ) . reorder ( 'created_on desc' )
2015-08-18 14:40:12 +08:00
@project_ms = paginateHelper @project_ms , 30
@page = ( params [ 'page' ] || 1 ) . to_i - 1
respond_to do | format |
format . html
end
2015-08-15 17:06:50 +08:00
end
#通知
def notices
@news = News . where ( 'course_id is not NULL' ) . order ( 'created_on desc' )
2015-08-18 14:40:12 +08:00
@news = paginateHelper @news , 30
@page = ( params [ 'page' ] || 1 ) . to_i - 1
respond_to do | format |
format . html
end
2015-08-15 17:06:50 +08:00
end
#最近登录用户列表
def latest_login_users
2015-08-18 14:40:12 +08:00
scope = User . order ( 'last_login_on desc' )
scope = scope . where ( " last_login_on>= ' #{ params [ :startdate ] } 00:00:00' " ) if params [ :startdate ] . present?
scope = scope . where ( " last_login_on <= ' #{ params [ :enddate ] } 23:59:59' " ) if params [ :enddate ] . present?
2016-01-25 10:16:33 +08:00
@users = scope
@users = paginateHelper @users , 30
2015-08-18 14:40:12 +08:00
@page = ( params [ 'page' ] || 1 ) . to_i - 1
respond_to do | format |
format . html
end
2015-08-15 17:06:50 +08:00
end
2016-02-26 16:26:20 +08:00
#最近登录老师列表
def latest_login_teachers
scope = User . find_by_sql ( " SELECT * FROM users,user_extensions WHERE users.id = user_extensions.user_id AND user_extensions.identity=0 ORDER BY last_login_on DESC " )
if params [ :startdate ] . present?
scope = User . find_by_sql ( " SELECT * FROM users,user_extensions WHERE users.id = user_extensions.user_id AND user_extensions.identity=0 and last_login_on>= ' #{ params [ :startdate ] } 00:00:00' ORDER BY last_login_on DESC " )
end
if params [ :enddate ] . present?
scope = User . find_by_sql ( " SELECT * FROM users,user_extensions WHERE users.id = user_extensions.user_id AND user_extensions.identity=0 and last_login_on <= ' #{ params [ :enddate ] } 23:59:59' ORDER BY last_login_on DESC " )
end
@teachers = scope
@teachers = paginateHelper @teachers , 30
@page = ( params [ 'page' ] || 1 ) . to_i - 1
respond_to do | format |
format . html
end
end
2015-08-15 17:06:50 +08:00
#作业
def homework
@homework = HomeworkCommon . order ( 'end_time desc' )
2015-08-18 14:40:12 +08:00
@homework = paginateHelper @homework , 30
@page = ( params [ 'page' ] || 1 ) . to_i - 1
respond_to do | format |
format . html
end
2015-08-15 17:06:50 +08:00
end
2014-10-23 11:30:34 +08:00
end