diff --git a/app/controllers/admin_controller.rb b/app/controllers/admin_controller.rb index c6298555e..584de36e7 100644 --- a/app/controllers/admin_controller.rb +++ b/app/controllers/admin_controller.rb @@ -1,1176 +1,1174 @@ - -# 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 shixuns - @shixuns = Shixun.all - end - - #实训认证 - def shixun_authentication - @shixun = Shixun.find(params[:id]) - @shixun.update_attribute(:authentication, !@shixun.authentication) - respond_to do |format| - format.js - 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], :applied_type => 'ApplyAddSchools').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表示未批准; status:1表示已批准; 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 - ApplyAddDepartment.where(:school_id => aas.school_id).update_all(:school_id => school[0].id) - Department.where(:school_id => aas.school_id).update_all(:school_id => school[0].id) - 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) - # 单位对应的部门审核也应做删除处理 - applied_departments = ApplyAddDepartment.where(:school_id => applied_school.school_id) - applied_departments.update_all(:status => 3) - AppliedMessage.where(:applied_id => applied_departments.map(&:id), :applied_type => "ApplyAddDepartment").update_all(: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 ) - if applied_departments.first - AppliedMessage.create(:user_id => applied_departments.first.user_id, :status => 3, :viewed => 0, :applied_id => applied_departments.first.id, :applied_type => "ApplyAddDepartment", :name => applied_departments.first.name ) - end -# 删除学校的用户 - users = UserExtensions.where("school_id = #{applied_school.school_id}") - users.update_all(:school_id => nil, :department_id => nil) - applied_school.school.destroy - applied_school.school.departments.destroy_all - redirect_to unapplied_schools_url - # 已审批删除 - elsif params[:tip] == "applied" - applied_school.destroy - redirect_to applied_schools_url - end - end - - # 部门审核 - # 未审批tab页 - # status: 0 未审批; 1 已批阅; 2已更改; 3拒绝; - def applied_departments - # 更新消息状态 - if params[:flag] - applied_message = AppliedMessage.where(:id => params[:applied_message_id], :applied_type => 'ApplyAddDepartment').first - applied_message.update_attribute(:viewed, true) - end - - @name = params[:name] || "" - condition = "#{@name.strip}".gsub(" ","") - @apply_status = ApplyAddDepartment.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 - - def has_applied_departments - @name = params[:name] || "" - condition = "#{@name.strip}".gsub(" ","") - - @has_apply_status = ApplyAddDepartment.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 - - def approve_applied_departments - applied_department = ApplyAddDepartment.find params[:id] - applied_message = AppliedMessage.where(:applied_id => applied_department.id, :applied_type => "ApplyAddDepartment") - applied_message.update_all(:status => 1) - applied_department.update_column('status', 1) unless applied_department.nil? - AppliedMessage.create(:user_id => applied_department.user_id, :status => 1, :viewed => 0, :applied_id => applied_department.id, :applied_type => "ApplyAddDepartment", :name => applied_department.name ) - respond_to do |format| - format.html{ redirect_to unapplied_departments_path } - end - end - - def delete_applied_departments - applied_department = ApplyAddDepartment.find params[:id] - applied_message = AppliedMessage.where(:applied_id => applied_department.id, :applied_type => "ApplyAddDepartment") - applied_message.update_all(:status => 3) - applied_department.update_attribute(:status, 3) - # 未审批删除 - if params[:tip] == "unapplied" - AppliedMessage.create(:user_id => applied_department.user_id, :status => 3, :viewed => 0, :applied_id => applied_department.id, :applied_type => "ApplyAddDepartment", :name => applied_department.name ) - # 删除学校的用户 - users = UserExtensions.where("department_id = #{applied_department.department_id}") - users.update_all(:department_id => nil) - applied_department.department.destroy - redirect_to unapplied_departments_path - # 已审批删除 - elsif params[:tip] == "applied" - applied_department.destroy - redirect_to applied_departments_path - end - end - - #移动端版本管理 - def mobile_version - @versions = PhoneAppVersion.reorder('created_at desc') - @new_version = PhoneAppVersion.new - - end - - # 身份认证 - def identity_authentication - type = params[:type] || 0 # 存在type 就用type 没有就为 0 - - user_id = User.find_by_sql("select id from users where concat(lastname,firstname) like '%#{params[:name]}%'") - @unapproved_user = ApplyUserAuthentication.where(:status => type, :user_id => user_id).order("updated_at desc") - - - respond_to do |format| - format.html{ render :layout => 'base_edu' } - format.js - end - end - - # 拒绝身份认证 - def reject_authentication - apply_user = ApplyUserAuthentication.find(params[:apply_id]) - reason = apply_user.update_attributes(:status => 2, :remarks => params[:reject_reason]) - render :json => {success: reason} - end - - # 统一身份认证 - def agree_authentication - apply_user = ApplyUserAuthentication.find(params[:apply_id]) - user = User.find(apply_user.user_id) - apply_user.update_attribute(:status, 1) - user.update_attribute(:authentication, true) - @unapproved_user = ApplyUserAuthentication.where(:status => 0).order("updated_at desc") - respond_to do |format| - format.js - end - 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 + +# 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 shixuns + @shixuns = Shixun.all + end + + #实训认证 + def shixun_authentication + @shixun = Shixun.find(params[:id]) + @shixun.update_attribute(:authentication, !@shixun.authentication) + respond_to do |format| + format.js + 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], :applied_type => 'ApplyAddSchools').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表示未批准; status:1表示已批准; 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 + ApplyAddDepartment.where(:school_id => aas.school_id).update_all(:school_id => school[0].id) + Department.where(:school_id => aas.school_id).update_all(:school_id => school[0].id) + 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) + # 单位对应的部门审核也应做删除处理 + applied_departments = ApplyAddDepartment.where(:school_id => applied_school.school_id) + applied_departments.update_all(:status => 3) + AppliedMessage.where(:applied_id => applied_departments.map(&:id), :applied_type => "ApplyAddDepartment").update_all(: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 ) + if applied_departments.first + AppliedMessage.create(:user_id => applied_departments.first.user_id, :status => 3, :viewed => 0, :applied_id => applied_departments.first.id, :applied_type => "ApplyAddDepartment", :name => applied_departments.first.name ) + end +# 删除学校的用户 + users = UserExtensions.where("school_id = #{applied_school.school_id}") + users.update_all(:school_id => nil, :department_id => nil) + applied_school.school.destroy + applied_school.school.departments.destroy_all + redirect_to unit_managements_path + # 已审批删除 + elsif params[:tip] == "applied" + applied_school.destroy + redirect_to unit_managements_path + end + end + + # 部门审核 + # 未审批tab页 + # status: 0 未审批; 1 已批阅; 2已更改; 3拒绝; + def applied_departments + # 更新消息状态 + if params[:flag] + applied_message = AppliedMessage.where(:id => params[:applied_message_id], :applied_type => 'ApplyAddDepartment').first + applied_message.update_attribute(:viewed, true) + end + + @name = params[:name] || "" + condition = "#{@name.strip}".gsub(" ","") + @apply_status = ApplyAddDepartment.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 + + def has_applied_departments + @name = params[:name] || "" + condition = "#{@name.strip}".gsub(" ","") + @has_apply_status = ApplyAddDepartment.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 + + def approve_applied_departments + applied_department = ApplyAddDepartment.find params[:id] + applied_message = AppliedMessage.where(:applied_id => applied_department.id, :applied_type => "ApplyAddDepartment") + applied_message.update_all(:status => 1) + applied_department.update_column('status', 1) unless applied_department.nil? + AppliedMessage.create(:user_id => applied_department.user_id, :status => 1, :viewed => 0, :applied_id => applied_department.id, :applied_type => "ApplyAddDepartment", :name => applied_department.name ) + respond_to do |format| + format.html{ redirect_to depart_managements_path } + end + end + + def delete_applied_departments + applied_department = ApplyAddDepartment.find params[:id] + applied_message = AppliedMessage.where(:applied_id => applied_department.id, :applied_type => "ApplyAddDepartment") + applied_message.update_all(:status => 3) + applied_department.update_attribute(:status, 3) + # 未审批删除 + if params[:tip] == "unapplied" + AppliedMessage.create(:user_id => applied_department.user_id, :status => 3, :viewed => 0, :applied_id => applied_department.id, :applied_type => "ApplyAddDepartment", :name => applied_department.name ) + # 删除学校的用户 + users = UserExtensions.where("department_id = #{applied_department.department_id}") + users.update_all(:department_id => nil) + applied_department.department.destroy + redirect_to depart_managements_path + # 已审批删除 + elsif params[:tip] == "applied" + applied_department.destroy + redirect_to depart_managements_path + end + end + + #移动端版本管理 + def mobile_version + @versions = PhoneAppVersion.reorder('created_at desc') + @new_version = PhoneAppVersion.new + + end + + # 身份认证 + def identity_authentication + type = params[:type] || 0 # 存在type 就用type 没有就为 0 + + user_id = User.find_by_sql("select id from users where concat(lastname,firstname) like '%#{params[:name]}%'") + @unapproved_user = ApplyUserAuthentication.where(:status => type, :user_id => user_id).order("updated_at desc") + + + respond_to do |format| + format.html{ render :layout => 'base_edu' } + format.js + end + end + + # 拒绝身份认证 + def reject_authentication + apply_user = ApplyUserAuthentication.find(params[:apply_id]) + reason = apply_user.update_attributes(:status => 2, :remarks => params[:reject_reason]) + render :json => {success: reason} + end + + # 统一身份认证 + def agree_authentication + apply_user = ApplyUserAuthentication.find(params[:apply_id]) + user = User.find(apply_user.user_id) + apply_user.update_attribute(:status, 1) + user.update_attribute(:authentication, true) + @unapproved_user = ApplyUserAuthentication.where(:status => 0).order("updated_at desc") + respond_to do |format| + format.js + end + 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 diff --git a/app/controllers/managements_controller.rb b/app/controllers/managements_controller.rb index 790778ac4..7ca87b49b 100644 --- a/app/controllers/managements_controller.rb +++ b/app/controllers/managements_controller.rb @@ -69,12 +69,13 @@ end # 增加课程所属专业 def add_major - - if prams[:major] && params[:major] != 0 - major = MajorCourse.create(:course_list_id=> "15",:major_id => "#{params[:major]}") + data = {result: 0} + id = MajorCourse.where(:course_list_id => params[:course_list_id]).first + if (id.nil?) || (params[:major_id].to_i != '0' && params[:major_id].to_i != id.major_id) + MajorCourse.create(:course_list_id => params[:course_list_id],:major_id=>params[:major_id]) + data[:result] = 1 end - - redirect_to applicable_course_managements_path + render :json => data end # 单位部门列表 @@ -132,7 +133,7 @@ end @menu_type = 10 @sub_type = 3 search = params[:search] - @apply_status = ApplyAddDepartment.where("0=0") + @apply_status = ApplyAddDepartment.where(:status=>0) @sx_order = params[:sx_order].blank? ? "desc" : params[:sx_order] if search.blank? @apply_status = @apply_status.where("0=0") @@ -158,7 +159,7 @@ end @sub_type = 4 search = params[:search] @sx_order = params[:sx_order].blank? ? "desc" : params[:sx_order] - @apply_status = ApplyAddSchools.where("0=0") + @apply_status = ApplyAddSchools.where(:status=>0) if search.blank? @apply_status = @apply_status.where("0=0") else @@ -176,6 +177,69 @@ end format.html end end + # 单位审批批准 + def approve_applied_schools + applied_school = ApplyAddSchools.where(:id =>params[:id]).first + 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) + unless applied_school.nil? + applied_school.update_column('status', 1) + end + 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 ) + redirect_to unit_managements_path + 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 + # redirect_to unit_managements_path + 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.id) + if aas.school_id != school.id.to_i + aas.school.destroy + end + ApplyAddDepartment.where(:school_id => aas.school_id).update_all(:school_id => school.id) + Department.where(:school_id => aas.school_id).update_all(:school_id => school.id) + aas.update_attribute(:school_id, school.id) + rescue Exception => e + puts e + end + # applied_schools = ApplyAddSchools.find params[:applied_id] + # applied_schools.update_column('name', params[:name]) + redirect_to unit_managements_path + end + # 部门修改 # 课堂列表 def classroom @@ -250,7 +314,7 @@ end @keyword = params[:keyword].blank? ? "u_name" : params[:keyword] # 根据姓名/课程名搜索 status = params[:status].to_i - if params[:school_id] && params[:school_id] != '0' + if params[:school_id] && params[:school_id] != '' @school_id = params[:school_id] @courses =Course.joins("join users u on courses.tea_id = u.id").joins("join user_extensions ue on u.id = ue.user_id").where("ue.school_id = #{params[:school_id]}") end diff --git a/app/controllers/welcome_controller.rb b/app/controllers/welcome_controller.rb index 439ecdd27..fe6e7588e 100644 --- a/app/controllers/welcome_controller.rb +++ b/app/controllers/welcome_controller.rb @@ -1,298 +1,298 @@ -# 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 WelcomeController < ApplicationController - # layout "base_welcome" - include ApplicationHelper - include WelcomeHelper - helper :project_score - caches_action :robots, :course, :contest, expires_in: 2.hours, layout: false - #before_filter :find_first_page, :only => [:index] - # before_filter :fake, :only => [:index, :course] - before_filter :entry_select, :only => [:index] - skip_before_filter :check_authentication, :only => [:index] - - def index - # @welcome是因为有的页面不需要导航 - @welcome = true - @courses = Course.where(:is_excellent => 1).limit(6) - @shixuns = Shixun.where(:authentication => 1).limit(6) - render :layout => 'login_bigdata' - end - - def robots - @projects = Project.all_public.active - render :layout => false, :content_type => 'text/plain' - end - - def course - redirect_to signin_path - return - # - # @course_page = FirstPage.find_by_page_type('course') - # @school_id = params[:school_id] || User.current.user_extensions.school.try(:id) || 117 - # @logoLink ||= logolink() - end - - def logolink() - @course_page = FirstPage.find_by_page_type('course') - logo = get_avatar?(@course_page) - id = params[:school_id] - logo_link = "" - if id.nil? && (User.current.user_extensions.nil? || User.current.user_extensions.school.nil?) - if logo - logo_link = url_to_avatar(@course_page) - else - logo_link = '/images/transparent.png' - end - - else - if id == "0" - if logo - logo_link = url_to_avatar(@course_page) - else - logo_link = '/images/transparent.png' - end - else - if id.nil? - if School.find(User.current.user_extensions.school.id).logo_link.nil? - logo_link = '/images/transparent.png' - else - logo_link = School.find(User.current.user_extensions.school.id).logo_link - end - else - logo_link = School.find(id).logo_link - - end - end - end - return logo_link - end - - - def contest - redirect_to signin_path - return - - # @contest_page = FirstPage.find_by_page_type('contest') - # @contest_notifications = Contestnotification.order("created_at desc").limit(5) - end - - def search - @name = params[:q] - @search_type = params[:search_type] - page = (params[:page] || 1).to_i - - @users_count = User.search(@name).results.total - @syllabus_count = Syllabus.search(@name).results.total - @course_count = Course.search(@name).results.total - @attach_count = Attachment.search(@name).results.total - @project_count = Project.search(@name).results.total - @memo_count = Memo.search(@name).results.total - @total_count = Elasticsearch::Model.search({ - query: { - multi_match: { - query: @name, - type:"most_fields", - operator: "or", - fields: ['login', 'firstname','lastname','title','name','description^0.5','filename','subject','content^0.5'] - } - }, - highlight: { - pre_tags: [''], - post_tags: [''], - fields: { - login: {}, - firstname: {}, - lastname: {}, - title:{}, - name:{}, - description:{}, - filename:{}, - subject:{}, - content:{} - } - } - },[User,Syllabus,Course,Attachment,Project,Memo] ).results.total - - - case params[:search_type] - when 'all' - if (page-1)*20 >= @total_count - page = 1 - params[:page] = "1" - end - @alls = Elasticsearch::Model.search({ - query: { - multi_match: { - query: @name, - type:"most_fields", - operator: "or", - fields: ['login', 'firstname','lastname','title','name','description^0.5','filename','subject','content^0.5'] - } - }, - highlight: { - pre_tags: [''], - post_tags: [''], - fields: { - login: {}, - firstname: {}, - lastname: {}, - title:{}, - name:{}, - description:{}, - filename:{}, - subject:{}, - content:{} - } - } - },[User,Syllabus,Course,Attachment,Project,Memo] ).page(page).per(20).results - when 'user' - if (page-1)*20 >= @users_count - page = 1 - params[:page] = "1" - end - @users = User.search(@name).page(page).per(20) - when 'syllabus' - if (page-1)*20 >= @syllabus_count - page = 1 - params[:page] = "1" - end - @syllabuses = Syllabus.search(@name).page(page).per(20).results - when 'project' - if (page-1)*20 >= @project_count - page = 1 - end - @projects = Project.search(@name).page(page).per(20).results - when 'course' - if (page-1)*20 >= @course_count - page = 1 - params[:page] = "1" - end - @courses = Course.search(@name).page(page).per(20).results - when 'attachment' - if (page-1)*20 >= @attach_count - page = 1 - params[:page] = "1" - end - @attachments = Attachment.search(@name).page(page).per(20).results - when 'memo' - if (page-1)*20 >= @memo_count - page = 1 - params[:page] = "1" - end - @memos = Memo.search(@name).page(page).per(20).results - else - if (page-1)*20 >= @total_count - page = 1 - params[:page] = "1" - end - @alls = Elasticsearch::Model.search({ - query: { - multi_match: { - query: @name, - type:"most_fields", - operator: "or", - fields: ['login', 'firstname','lastname','title','name','description^0.5','filename','subject','content^0.5'] - } - }, - highlight: { - pre_tags: [''], - post_tags: [''], - fields: { - login: {}, - firstname: {}, - lastname: {}, - title:{}, - name:{}, - description:{}, - filename:{}, - subject:{}, - content:{} - } - } - },[User,Syllabus,Course,Attachment,Project,Memo] ).page(page).per(20).results - - end - - - - # search_type = params[:search_type].to_sym unless search_condition.blank? - # search_by = params[:search_by] - # - # if search_type.nil? && params[:contests_search] && params[:name] != "" - # search_type = :contests - # search_condition = params[:name] - # end - - respond_to do |format| - format.js - format.html{ render :layout=>'users_base'} - end - end - - private - # 判断网站的入口,是课程 course 则跳过index去渲染 course 方法 - def entry_select - # url = request.original_url.gsub('/','') - # if url.include?(Setting.url_course.gsub('/','')) - # if @first_page.show_course == 1 - # course - # render :course - # else - # render_404 - # end - # - # return 0 - # elsif url.include?(Setting.url_contest.gsub('/','')) - # if @first_page.show_contest == 1 - # contest - # render :contest - # else - # render_404 - # end - # - # return 0 - # elsif url.include?(Setting.url_user.gsub('/','')) - # #redirect_to(:controller => "users", :action => "index") - # end - - - end - - # def render(*args) - # _fake if @fake_filter - # super - # end - - # private - - # def fake - # @fake_filter = true - # end - - # # 骗子方法 - # def _fake - # instance_variables.map { |variable| - # if variable.to_s =~ /Count$/ - # self.instance_variable_set(variable.to_sym, - # ("1" + (self.instance_variable_get(variable.to_sym).to_s)).to_i) - # end - # } - # end - -end +# 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 WelcomeController < ApplicationController + # layout "base_welcome" + include ApplicationHelper + include WelcomeHelper + helper :project_score + caches_action :robots, :course, :contest, expires_in: 2.hours, layout: false + #before_filter :find_first_page, :only => [:index] + # before_filter :fake, :only => [:index, :course] + before_filter :entry_select, :only => [:index] + skip_before_filter :check_authentication, :only => [:index] + + def index + # @welcome是因为有的页面不需要导航 + @welcome = true + @courses = Course.where(:homepage_show => 1).limit(6) + @shixuns = Shixun.where(:homepage_show => 1).limit(6) + render :layout => 'login_bigdata' + end + + def robots + @projects = Project.all_public.active + render :layout => false, :content_type => 'text/plain' + end + + def course + redirect_to signin_path + return + # + # @course_page = FirstPage.find_by_page_type('course') + # @school_id = params[:school_id] || User.current.user_extensions.school.try(:id) || 117 + # @logoLink ||= logolink() + end + + def logolink() + @course_page = FirstPage.find_by_page_type('course') + logo = get_avatar?(@course_page) + id = params[:school_id] + logo_link = "" + if id.nil? && (User.current.user_extensions.nil? || User.current.user_extensions.school.nil?) + if logo + logo_link = url_to_avatar(@course_page) + else + logo_link = '/images/transparent.png' + end + + else + if id == "0" + if logo + logo_link = url_to_avatar(@course_page) + else + logo_link = '/images/transparent.png' + end + else + if id.nil? + if School.find(User.current.user_extensions.school.id).logo_link.nil? + logo_link = '/images/transparent.png' + else + logo_link = School.find(User.current.user_extensions.school.id).logo_link + end + else + logo_link = School.find(id).logo_link + + end + end + end + return logo_link + end + + + def contest + redirect_to signin_path + return + + # @contest_page = FirstPage.find_by_page_type('contest') + # @contest_notifications = Contestnotification.order("created_at desc").limit(5) + end + + def search + @name = params[:q] + @search_type = params[:search_type] + page = (params[:page] || 1).to_i + + @users_count = User.search(@name).results.total + @syllabus_count = Syllabus.search(@name).results.total + @course_count = Course.search(@name).results.total + @attach_count = Attachment.search(@name).results.total + @project_count = Project.search(@name).results.total + @memo_count = Memo.search(@name).results.total + @total_count = Elasticsearch::Model.search({ + query: { + multi_match: { + query: @name, + type:"most_fields", + operator: "or", + fields: ['login', 'firstname','lastname','title','name','description^0.5','filename','subject','content^0.5'] + } + }, + highlight: { + pre_tags: [''], + post_tags: [''], + fields: { + login: {}, + firstname: {}, + lastname: {}, + title:{}, + name:{}, + description:{}, + filename:{}, + subject:{}, + content:{} + } + } + },[User,Syllabus,Course,Attachment,Project,Memo] ).results.total + + + case params[:search_type] + when 'all' + if (page-1)*20 >= @total_count + page = 1 + params[:page] = "1" + end + @alls = Elasticsearch::Model.search({ + query: { + multi_match: { + query: @name, + type:"most_fields", + operator: "or", + fields: ['login', 'firstname','lastname','title','name','description^0.5','filename','subject','content^0.5'] + } + }, + highlight: { + pre_tags: [''], + post_tags: [''], + fields: { + login: {}, + firstname: {}, + lastname: {}, + title:{}, + name:{}, + description:{}, + filename:{}, + subject:{}, + content:{} + } + } + },[User,Syllabus,Course,Attachment,Project,Memo] ).page(page).per(20).results + when 'user' + if (page-1)*20 >= @users_count + page = 1 + params[:page] = "1" + end + @users = User.search(@name).page(page).per(20) + when 'syllabus' + if (page-1)*20 >= @syllabus_count + page = 1 + params[:page] = "1" + end + @syllabuses = Syllabus.search(@name).page(page).per(20).results + when 'project' + if (page-1)*20 >= @project_count + page = 1 + end + @projects = Project.search(@name).page(page).per(20).results + when 'course' + if (page-1)*20 >= @course_count + page = 1 + params[:page] = "1" + end + @courses = Course.search(@name).page(page).per(20).results + when 'attachment' + if (page-1)*20 >= @attach_count + page = 1 + params[:page] = "1" + end + @attachments = Attachment.search(@name).page(page).per(20).results + when 'memo' + if (page-1)*20 >= @memo_count + page = 1 + params[:page] = "1" + end + @memos = Memo.search(@name).page(page).per(20).results + else + if (page-1)*20 >= @total_count + page = 1 + params[:page] = "1" + end + @alls = Elasticsearch::Model.search({ + query: { + multi_match: { + query: @name, + type:"most_fields", + operator: "or", + fields: ['login', 'firstname','lastname','title','name','description^0.5','filename','subject','content^0.5'] + } + }, + highlight: { + pre_tags: [''], + post_tags: [''], + fields: { + login: {}, + firstname: {}, + lastname: {}, + title:{}, + name:{}, + description:{}, + filename:{}, + subject:{}, + content:{} + } + } + },[User,Syllabus,Course,Attachment,Project,Memo] ).page(page).per(20).results + + end + + + + # search_type = params[:search_type].to_sym unless search_condition.blank? + # search_by = params[:search_by] + # + # if search_type.nil? && params[:contests_search] && params[:name] != "" + # search_type = :contests + # search_condition = params[:name] + # end + + respond_to do |format| + format.js + format.html{ render :layout=>'users_base'} + end + end + + private + # 判断网站的入口,是课程 course 则跳过index去渲染 course 方法 + def entry_select + # url = request.original_url.gsub('/','') + # if url.include?(Setting.url_course.gsub('/','')) + # if @first_page.show_course == 1 + # course + # render :course + # else + # render_404 + # end + # + # return 0 + # elsif url.include?(Setting.url_contest.gsub('/','')) + # if @first_page.show_contest == 1 + # contest + # render :contest + # else + # render_404 + # end + # + # return 0 + # elsif url.include?(Setting.url_user.gsub('/','')) + # #redirect_to(:controller => "users", :action => "index") + # end + + + end + + # def render(*args) + # _fake if @fake_filter + # super + # end + + # private + + # def fake + # @fake_filter = true + # end + + # # 骗子方法 + # def _fake + # instance_variables.map { |variable| + # if variable.to_s =~ /Count$/ + # self.instance_variable_set(variable.to_sym, + # ("1" + (self.instance_variable_get(variable.to_sym).to_s)).to_i) + # end + # } + # end + +end diff --git a/app/models/apply_add_schools.rb b/app/models/apply_add_schools.rb index 60c2c404f..820bd3ce1 100644 --- a/app/models/apply_add_schools.rb +++ b/app/models/apply_add_schools.rb @@ -1,8 +1,8 @@ -class ApplyAddSchools < ActiveRecord::Base - # status:0 未审批 ; 1 已批阅 - attr_accessible :address, :city, :name, :province, :remarks, :school_id, :status - has_many :applied_messages, :class_name =>'AppliedMessage', :as => :applied - belongs_to :school - - #after_create :send_massage -end +class ApplyAddSchools < ActiveRecord::Base + # status:0 未审批 ; 1 已批阅, :2 已拒绝 + attr_accessible :address, :city, :name, :province, :remarks, :school_id, :status + has_many :applied_messages, :class_name =>'AppliedMessage', :as => :applied + belongs_to :school + + #after_create :send_massage +end diff --git a/app/views/managements/_all_schools.html.erb b/app/views/managements/_all_schools.html.erb new file mode 100644 index 000000000..d7a8d4c3f --- /dev/null +++ b/app/views/managements/_all_schools.html.erb @@ -0,0 +1,56 @@ +