socialforge/app/controllers/admin_controller.rb

1052 lines
39 KiB
Ruby
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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
helper :Settings,SchoolHelper
include SortHelper
def index
@no_configuration_data = Redmine::DefaultData::Loader::no_data?
end
def export_rep_static_users
rev = params[:rev]
cycle = params[:cycle]
cycle_name = (params[:cycle] == "admin_week" ? l(:label_per_week) : (params[:cycle] == "admin_month" ? l(:label_per_month) : l(:label_per_all)))
respond_to do |format|
format.html
format.xls{
filename = "#{l(:label_user_rep_xls)}_#{cycle_name}.xls"
send_data(admin_export_rep_xls(:rev => rev, :cycle => "1"), :type => 'application/octet-stream', :filename => filename_for_content_disposition(filename))
}
end
end
# 管理员界面导出所有项目代码、提交次数统计
def admin_export_rep_xls (options = {})
cycle = params[:cycle]
g = Gitlab.client
users_results = []
User.all.each do |user|
unless user.mail.nil?
user_mail = user.mail
user.projects.where("gpid is not null").each do |project|
begin
g.branches(project.gpid).each do |branch|
if cycle == "admin_week"
statics = g.admin_rep_stats_week(project.gpid, :rev => branch.name, :user_mail => user_mail)
elsif cycle == "admin_month"
statics = g.admin_rep_stats_month(project.gpid, :rev => branch.name, :user_mail => user_mail)
elsif cycle == "admin_all"
statics = g.admin_rep_stats_all(project.gpid, :rev => branch.name, :user_mail => user_mail)
end
unless statics.first.commits_num == "0"
user_details = {:user_id => user.id, :user_name => user.show_name, :project_id => project.id, :project_name => project.name,
:commits_num => statics.first.commits_num, :add => statics.first.add, :del => statics.first.del, :changes => statics.first.changes, :branch => branch.name}
users_results << user_details
end
end
rescue Exception => e
puts e
end
end
end
end
xls_report = StringIO.new
book = Spreadsheet::Workbook.new
sheet1 = book.create_worksheet :name => l(:project_module_repository)
blue = Spreadsheet::Format.new :color => :blue, :weight => :bold, :size => 10
sheet1.row(0).default_format = blue
sheet1.row(0).concat([l(:label_rep_user_id),l(:label_rep_user_name),l(:label_rep_project_id),l(:label_rep_project_name),l(:rep_branch),l(:rep_changeset),l(:rep_code_add),l(:rep_code_delete),l(:rep_code_modified),l(:rep_sode_time)])
count_row = 1
users_results.each do |static|
sheet1[count_row,0] = static[:user_id]
sheet1[count_row,1] = static[:user_name]
sheet1[count_row,2] = static[:project_id]
sheet1[count_row,3] = static[:project_name]
sheet1[count_row,4] = static[:branch]
sheet1[count_row,5] = static[:commits_num]
sheet1[count_row,6] = static[:add]
sheet1[count_row,7] = static[:del]
sheet1[count_row,8] = static[:changes]
sheet1[count_row,9] = Time.now.strftime('%Y-%m-%d %H:%M:%S')
count_row += 1
end
book.write xls_report
xls_report.string
end
# 管理员界面 项目列表
def projects
=begin
@status = params[:status] || 1
scope = Project.status(@status)
scope = scope.like(params[:name]) if params[:name].present?
@projects = scope.where(project_type: Project::ProjectType_project).reorder("created_on desc").all
=end
# 搜索功能
@name = params[:name] || ""
condition = "#{@name.strip}".gsub(" ","")
@status = params[:status] || ""
unless @status.empty?
@projects = Project.where(:status=>@status).like(condition).order('created_on desc')
else
@projects = Project.like(condition).order('created_on desc')
end
# 分页
@projects = paginateHelper @projects,30
@page = (params['page'] || 1).to_i - 1
render :action => "projects", :layout => false if request.xhr?
end
def contests
@name = params[:name]
@contests = Contest.where("id >= 780 and name like '%#{@name}%'").order('created_at desc')
@contests = paginateHelper @contests,30
@page = (params['page'] || 1).to_i - 1
respond_to do |format|
format.html
end
end
def syllabuses
@name = params[:name]
@syllabuses = Syllabus.like(@name).order('created_at desc')
@syllabuses = paginateHelper @syllabuses,30
@page = (params['page'] || 1).to_i - 1
respond_to do |format|
format.html
end
end
#为班级选择课程
def select_course_syllabus
@flag = false
if params[:syllabus_id] && params[:course_id]
course = Course.where("id = #{params[:course_id].to_i}").first
unless course.nil?
course.update_attribute(:syllabus_id, params[:syllabus_id].to_i)
@flag = true
end
end
if @flag
render :text=> "succ"
else
render :text=>'fail'
end
end
#新建课程
def create_syllabus
if params[:course_id]
course = Course.where("id = #{params[:course_id]}").first
if course
@user = course.teacher
syllabus = Syllabus.new
syllabus.update_attributes(:title => params[:title], :eng_name => params[:eng_name], :user_id => @user.id)
syllabus.description = Message.where("id = 19412").first.nil? ? nil : Message.where("id = 19412").first.content
if syllabus.save
course.update_attribute(:syllabus_id, params[:syllabus_id].to_i)
@flag = params[:flag].to_i
@course = course
respond_to do |format|
format.js
end
end
end
end
end
def courses
@name = params[:name].to_s.strip.downcase
if @name && @name != ""
all_user_ids = Course.all.map{|course| course.tea_id}
user_str_ids = search_user_by_name all_user_ids, @name
user_ids = user_str_ids.empty? ? "(-1)" : "(" + user_str_ids.join(",") + ")"
@courses = Course.where("tea_id in #{user_ids} or name like '%#{@name}%'").reorder("created_at desc")
else
@courses = Course.order('created_at desc')
end
@courses = paginateHelper @courses,30
@page = (params['page'] || 1).to_i - 1
respond_to do |format|
format.html
end
end
#未配置班级列表
def non_syllabus_courses
@name = params[:name].to_s.strip.downcase
if @name && @name != ""
@courses = Course.where("syllabus_id is null and is_delete = 0").select{ |course| (course.teacher[:lastname].to_s.downcase + course.teacher[:firstname].to_s.downcase).include?(@name) || course.name.include?(@name)}
@courses = @courses.sort{|x, y| y.created_at <=> x.created_at}
else
@courses = Course.where("syllabus_id is null and is_delete = 0").order('created_at desc')
end
@courses = paginateHelper @courses,30
@page = (params['page'] || 1).to_i - 1
respond_to do |format|
format.html
end
end
#修改班级名称
def update_course_name
@course = Course.where("id = #{params[:course_id].to_i}").first
unless @course.nil?
@course.update_column("name", params[:name])
respond_to do |format|
format.js
end
end
end
#修改课程名称
def update_syllabus_title
@syllabus = Syllabus.where("id = #{params[:syllabus_id].to_i}").first
unless @syllabus.nil?
@syllabus.update_column("title", params[:name])
respond_to do |format|
format.js
end
end
end
#管理员界面精品课程列表
def excellent_courses
@courses = Course.where("is_excellent =? or excellent_option =?", 1, 1 )
respond_to do |format|
format.html
end
end
# 单位名称列表下的已审批按照名字排序
def apply_shcool_sort
@order = ""
@sort = ""
if params[:sort] && (params[:order] == 'name')
# courses = School.find_by_sql("SELECT c.*,count(c.id) FROM courses c,course_activities ca WHERE c.id = ca.course_id AND c.name like '%#{name}%' GROUP BY c.id ORDER BY count(c.id) #{params[:sort]}, c.id desc")
school = School.find_by_sql(" SELECT aas.name FROM apply_add_schools aas where aas.status = '0' ORDER BY CONVERT(aas.name USING gbk) #{params[:sort]}, aas.id asc ")
@order = params[:order]
@sort = params[:sort]
end
redirect_to unapplied_schools_url
end
#精品课程下的全部课程
def excellent_all_courses
name = params[:name]
@order = ""
@sort = ""
if params[:sort] && (params[:order] == 'act')
courses = Course.find_by_sql("SELECT c.*,count(c.id) FROM courses c,course_activities ca WHERE c.id = ca.course_id AND c.name like '%#{name}%' GROUP BY c.id ORDER BY count(c.id) #{params[:sort]}, c.id desc")
@order = params[:order]
@sort = params[:sort]
elsif params[:sort] && (params[:order] == 'time')
courses = Course.find_by_sql("SELECT * FROM courses WHERE name like '%#{name}%' ORDER BY time #{params[:sort]}, id desc")
@order = params[:order]
@sort = params[:sort]
elsif params[:sort] && (params[:order] == 'post')
courses = Course.find_by_sql("SELECT c.*, count(m.id) count FROM boards b, courses c, messages m WHERE m.board_id = b.id AND b.course_id = c.id AND c.name like '%#{name}%' GROUP BY c.id ORDER BY count #{params[:sort]}, c.id desc")
@order = params[:order]
@sort = params[:sort]
elsif params[:sort] && (params[:order] == 'res')
courses = Course.find_by_sql("SELECT c.*, count(at.container_id) cat FROM attachments at, courses c WHERE at.container_type = 'Course' AND at.container_id = c.id AND c.name like '%#{name}%' GROUP BY c.id ORDER BY cat #{params[:sort]}, id desc")
@order = params[:order]
@sort = params[:sort]
elsif params[:sort] && (params[:order] == 'works')
courses = Course.find_by_sql("SELECT c.*, count(hc.id) chc FROM courses c, homework_commons hc,student_works sw WHERE c.id = hc.course_id AND sw.homework_common_id = hc.id AND c.name like '%#{name}%' GROUP BY c.id ORDER BY chc #{params[:sort]}, id desc")
@order = params[:order]
@sort = params[:sort]
elsif params[:sort] && (params[:order] == 'homework')
courses = Course.find_by_sql("SELECT c.*, count(sw.id) csw FROM student_works sw, courses c, homework_commons hc WHERE c.id = hc.course_id AND sw.id = c.id AND c.name like '%#{name}%' GROUP BY c.id ORDER BY csw #{params[:sort]}, id desc")
@order = params[:order]
@sort = params[:sort]
elsif params[:sort] && (params[:order] == 'std')
courses = Course.find_by_sql("SELECT c.*, count(sfc.id) sfc FROM courses c, students_for_courses sfc WHERE sfc.course_id = c.id AND c.name like '%#{name}%' GROUP BY c.id ORDER BY sfc #{params[:sort]}, id desc")
@order = params[:order]
@sort = params[:sort]
elsif params[:sort] && (params[:order] == 'open')
courses = Course.find_by_sql("SELECT * FROM courses WHERE name like '%#{name}%' ORDER BY is_public #{params[:sort]},id desc")
@order = params[:order]
@sort = params[:sort]
else
courses = Course.like(name).order('created_at desc')
end
@courses = paginateHelper courses,30
@page = (params['page'] || 1).to_i - 1
respond_to do |format|
format.html
end
end
#设为精品
def set_excellent_course
@course = Course.find params[:id]
unless @course.nil?
if @course.is_excellent == 1 || @course.excellent_option == 1
@course.update_column('is_excellent', 0)
@course.update_column('excellent_option', 0)
else
@course.update_column('is_excellent', 1)
end
respond_to do |format|
format.js
end
end
end
#取消精品
def cancel_excellent_course
@course = Course.find params[:id]
unless @course.nil?
if @course.is_excellent == 1 || @course.excellent_option == 1
@course.update_column('is_excellent', 0)
@course.update_column('excellent_option', 0)
end
end
respond_to do |format|
format.html{
redirect_to excellent_courses_url
}
end
end
#管理员界面课程资源列表
def course_resource_list
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'
@resource = Attachment.where(:container_type => 'Course').order("downloads desc")
else
@resource = Attachment.where(:container_type => 'Course').order("created_on desc")
end
@resource = paginateHelper @resource,30
@page = (params['page'] || 1).to_i - 1
respond_to do |format|
format.html
end
end
#管理员界面項目资源列表
def project_resource_list
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
@pro_resource = paginateHelper @pro_resource,30
@page = (params['page'] || 1).to_i - 1
respond_to do |format|
format.html
end
end
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'
@offset, @limit = api_offset_and_limit({:limit => 50})
else
@limit = 50 #per_page_option
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
# 系统消息
def messages
@admin_messages = SystemMessage.new
end
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)
scope = scope.like(params[:name],params[:search_by][:id]) if params[:name].present?
@user_count = scope.count
@user_pages = Paginator.new @user_count, @limit, params['page']
@user_base_tag = params[:id] ? 'base_users':'base'
@users = scope.order(sort_clause).offset(@user_pages.offset).limit(@user_pages.per_page).all
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
#企业主页定制
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
#组织
def organization
@organizations = Organization.find_by_sql("SELECT * FROM organizations ORDER BY created_at DESC")
#@organizations = Organization.all.order("created_at desc")
@organization_count = @organizations.count
@organization_pages = Paginator.new @organization_count, 30, params['page'] || 1
@organizations = paginateHelper @organizations,30
@page = (params['page'] || 1).to_i - 1
respond_to do |format|
format.html
end
end
#学校列表
def schools
@order = ""
@sort = ""
@schools = School.find_by_sql("SELECT * FROM schools ORDER BY created_at DESC")
if params[:sort] && (params[:order] == 'num')
@order = params[:order]
@sort = params[:sort]
@schools.each do |school|
count = UserExtensions.where("school_id = #{school.id} or occupation = '#{school.name}'").count
school[:infocount] = count.to_i
end
@sort == 'asc' ? (@schools = @schools.sort{|x,y| x[:infocount] <=> y[:infocount] }) : (@schools = @schools.sort{|x,y| y[:infocount] <=> x[:infocount]})
end
@school_count = @schools.count
@school_pages = Paginator.new @school_count, 30, params['page'] || 1
@schools = paginateHelper @schools,30
@page = (params['page'] || 1).to_i - 1
respond_to do |format|
format.html
end
end
# 单位审核
# 未审批tab页
# status: 0 未审批; 1 已批阅; 2已更改 3拒绝
def applied_schools
# 更新消息状态
if params[:flag]
applied_message = AppliedMessage.where(:id => params[:applied_message_id]).first
applied_message.update_attribute(:viewed, true)
end
@name = params[:name] || ""
condition = "#{@name.strip}".gsub(" ","")
@apply_status = ApplyAddSchools.where("status = 0 and name like '%#{condition}%'").order('created_at desc')
@apply_count = @apply_status.count
@apply_pages = Paginator.new @apply_count, 30, params['page'] || 1
@apply_status = paginateHelper @apply_status, 30
@page = (params['page'] || 1).to_i - 1
respond_to do |format|
format.html
end
end
# 单位审核
# 已审批tab页
def has_applied_schools
@name = params[:name] || ""
condition = "#{@name.strip}".gsub(" ","")
@has_apply_status = ApplyAddSchools.where("(status = 1 or status = 2) and name like '%#{condition}%'").order('created_at desc')
@has_apply_count = @has_apply_status.count
@has_apply_pages = Paginator.new @has_apply_count, 30, params['page'] || 1
@has_apply_status = paginateHelper @has_apply_status, 30
@page = (params['page'] || 1).to_i - 1
respond_to do |format|
format.html
end
end
# 单位审核:批准
# 消息发送,发送对象为申请人
# status: 0表示未批准 status1表示已批准 status 2表示已更改 status 3表示已拒绝 status: 4表示已更改后废除的高校
def approve_applied_schools
applied_school = ApplyAddSchools.find params[:id]
applied_message_id = applied_school.school_id
applied_message = AppliedMessage.where(:applied_id => applied_message_id, :applied_type => "ApplyAddSchools")
applied_message.update_all(:status => 1)
applied_school.update_column('status', 1) unless applied_school.nil?
school = applied_school.school
school.update_attribute("province", applied_school.province)
AppliedMessage.create(:user_id => applied_school.user_id, :status => 1, :viewed => 0, :applied_id => applied_school.id, :applied_type => "ApplyAddSchools", :name => applied_school.name )
# School.create(:user_id => applied_school.user_id, :status => 1, :viewed => true, :applied_id => applied_school.id, :applied_type => "ApplyAddSchools", :name => applied_school.name )
respond_to do |format|
format.html{ redirect_to unapplied_schools_url }
end
end
# 单位审核:更改
# 修改该字段
# 同步修改使用了改名称的用户单位
def edit_applied_schools
aas = ApplyAddSchools.find(params[:applied_id])
# aas.update_attribute(:name, params[:name])
#applied_add_school = ApplyAddSchools.where(:name => aas.name)
school = School.find params[:school_id]
begin
#更新消息表的status
applied_message_id = aas.school_id
applied_message = AppliedMessage.where(:applied_id => applied_message_id, :applied_type => "ApplyAddSchools")
applied_message.update_all(:status => 4)
aas.update_attribute(:status, 2)
AppliedMessage.create(:user_id => aas.user_id, :status => 2, :viewed => 0, :applied_id => aas.id, :applied_type => "ApplyAddSchools", :name => school[0].name )
users = UserExtensions.where("school_id = #{aas.school_id}")
users.update_all(:school_id => school[0].id)
if aas.school_id != school[0].id.to_i
aas.school.destroy
end
aas.update_attribute(:school_id, school[0].id)
rescue Exception => e
puts e
end
# applied_schools = ApplyAddSchools.find params[:applied_id]
# applied_schools.update_column('name', params[:name])
redirect_to unapplied_schools_url
end
# 单位审核:更改功能搜索合法学校弹框
def all_schools
apply_schools = ApplyAddSchools.where("status = 0")
apply_school_ids = apply_schools.empty? ? "(-1)" : "(" + apply_schools.map{|sc| sc.school_id}.join(',') + ")"
if !params[:search].nil?
search = "%#{params[:search].to_s.strip.downcase}%"
@schools = School.where("id not in #{apply_school_ids} and #{School.table_name}.name like :p", :p => search)
#@schools = School.all
else
#@course = @user.courses.where("is_delete = 0 and #{Course.table_name}.id != #{homework.course_id}").select { |course| @user.allowed_to?(:as_teacher,course)}
@schools = School.where("id not in #{apply_school_ids}")
end
@edit_id = params[:school_id]
@search = params[:search]
respond_to do |format|
format.js
end
end
# 单位审核:删除
def delete_applied_schools
applied_school = ApplyAddSchools.find(params[:id])
applied_message_id = applied_school.school_id
applied_message = AppliedMessage.where(:applied_id => applied_message_id, :applied_type => "ApplyAddSchools")
applied_message.update_all(:status => 3)
applied_school.update_attribute(:status, 3)
# 未审批删除
if params[:tip] == "unapplied"
AppliedMessage.create(:user_id => applied_school.user_id, :status => 3, :viewed => 0, :applied_id => applied_school.id, :applied_type => "ApplyAddSchools", :name => applied_school.name )
# 删除学校的用户
users = UserExtensions.where("school_id = #{applied_school.school_id}")
users.update_all(:school_id => nil)
applied_school.school.destroy
redirect_to unapplied_schools_url
# 已审批删除
elsif params[:tip] == "applied"
applied_school.destroy
redirect_to applied_schools_url
end
end
#移动端版本管理
def mobile_version
@versions = PhoneAppVersion.reorder('created_at desc')
@new_version = PhoneAppVersion.new
end
def create_version
@versions = PhoneAppVersion.reorder('created_at desc')
@new_version = PhoneAppVersion.new
@new_version.version = params[:version]
@new_version.description = params[:description]
if params[:attachments][:dummy][:file].nil? || params[:attachments][:dummy][:file] == ""
respond_to do |format|
flash.now[:error] = "#{l :label_version_create_fail}: #{l(:label_client_need)}"
#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
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
end
end
#留言列表
def leave_messages
notes1, notes2, notes3 = '', '', ''
begin
notes1 = Message.find(19292).content
notes2 = Message.find(19291).content
notes3 = Message.find(19504).content
rescue => e
end
@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')))) AND j1.notes !='#{notes1}' AND j1.notes !='#{notes2}' AND j1.notes !='#{notes3}' order by created_on desc")
@jour = paginateHelper @jour,30
@page = (params['page'] || 1).to_i - 1
respond_to do |format|
format.html
end
end
#帖子
def messages_list
@memo = Memo.reorder("created_at desc")
@memo = paginateHelper @memo,30
@page = (params['page'] || 1).to_i - 1
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')
@course_ms = paginateHelper @course_ms,30
@page = (params['page'] || 1).to_i - 1
respond_to do |format|
format.html
end
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')
@project_ms = paginateHelper @project_ms,30
@page = (params['page'] || 1).to_i - 1
respond_to do |format|
format.html
end
end
#通知
def notices
@news = News.where('course_id is not NULL').order('created_on desc')
@news = paginateHelper @news,30
@page = (params['page'] || 1).to_i - 1
respond_to do |format|
format.html
end
end
#最近登录用户列表
def latest_login_users
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?
@users = scope
@users = paginateHelper @users,30
@page = (params['page'] || 1).to_i - 1
respond_to do |format|
format.html
end
end
#最近登录老师列表
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
#作业
def homework
#@homework = HomeworkCommon.order('end_time desc')
if params[:type] == "2"
@homework = HomeworkCommon.where(:homework_type => 2).order( 'created_at desc ')
else
@homework = HomeworkCommon.order( 'created_at desc ')
end
@homework = paginateHelper @homework,30
@page = (params['page'] || 1).to_i - 1
respond_to do |format|
format.html
end
end
#代码测试列表
def code_work_tests
#求出所有条数
tCount = CodeTests.count()
#设置个空的数组 以便paginateHelper来分页
@code_work_tests = []
if tCount >= 1
@code_work_tests[tCount-1] = {}
end
@code_work_tests = paginateHelper @code_work_tests,30
@page = (params['page'] || 1).to_i - 1
#取出需要的那一页数据
tStart = @page*30
@code_work_tests = CodeTests.find_by_sql("select * from code_tests order by id desc limit #{tStart},30 ")
#取出各个作品是否是模拟答题的
is_test = {}
#作品是否存在
link_swork = {}
#作业是否存在
link_hwork = {}
@code_work_tests.each do |test|
#作品是否存在
if is_test[test['student_work_id']] != nil
test['link_swork'] = link_swork[test['student_work_id']]
test['is_test'] = is_test[test['student_work_id']]
else
work = StudentWork.where("id=?",test['student_work_id']).first
test['link_swork'] = !work.nil?
test['is_test'] = work.nil? ? false : work.is_test
#test['is_test'] = CodeTests.find_by_sql("select is_test from student_works where id = #{test['student_work_id']}").first['is_test']
is_test[test['student_work_id']] = test['is_test']
link_swork[test['student_work_id']] = test['link_swork']
end
#作业是否存在
if link_hwork[test['homework_id']] != nil
test['link_hwork'] = link_hwork[test['homework_id']]
else
hwork = HomeworkCommon.where("id=?",test['homework_id']).first
test['link_hwork'] = !hwork.nil?
link_hwork[test['homework_id']] = test['link_hwork']
end
end
respond_to do |format|
format.html
end
end
#分享作业申请
def apply_for_homework
homeworks = ApplyHomework.where("user_id != 0")
@homework = paginateHelper homeworks,30
@page = (params['page'] || 1).to_i - 1
respond_to do |format|
format.html
end
end
end