commit
e55d307d33
@ -1,18 +1,31 @@
|
|||||||
*.swp
|
*.swp
|
||||||
/.project
|
/.project
|
||||||
/.idea
|
/.idea
|
||||||
/.bundle
|
/.bundle
|
||||||
*.swp
|
*.swp
|
||||||
/config/database.yml
|
/config/database.yml
|
||||||
/files/*
|
/config/configuration.yml
|
||||||
/log/*
|
/config/additional_environment.rb
|
||||||
/tmp/*
|
|
||||||
.gitignore
|
/files/*
|
||||||
/public/images/avatars/*
|
/log/*
|
||||||
/Gemfile
|
/public/tmp/*
|
||||||
/Gemfile.lock
|
/tmp/*
|
||||||
/db/schema.rb
|
/public/cache/*
|
||||||
/Gemfile.lock
|
.gitignore
|
||||||
/lib/plugins/acts_as_versioned/test/debug.log
|
/config/newrelic.yml
|
||||||
/config/configuration.yml
|
/public/images/avatars/*
|
||||||
.rbenv-gemsets
|
/Gemfile
|
||||||
|
/Gemfile.lock
|
||||||
|
/db/schema.rb
|
||||||
|
/Gemfile.lock
|
||||||
|
/lib/plugins/acts_as_versioned/test/debug.log
|
||||||
|
.rbenv-gemsets
|
||||||
|
.DS_Store
|
||||||
|
public/api_doc/
|
||||||
|
/.metadata
|
||||||
|
vendor/cache
|
||||||
|
/files
|
||||||
|
/public/images/avatars
|
||||||
|
/public/files
|
||||||
|
/tags
|
||||||
|
@ -1,2 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<connections/>
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -1,7 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<connection>
|
|
||||||
<connection>
|
|
||||||
<name>Default</name>
|
|
||||||
<source>file:/C:/Users/nudt</source>
|
|
||||||
</connection>
|
|
||||||
</connection>
|
|
@ -1,2 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<sites/>
|
|
@ -1,6 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<servers>
|
|
||||||
<server host="0.0.0.0" port="3000" project="E:/code/demo" type="org.radrails.rails.railsServer">
|
|
||||||
<name>demo</name>
|
|
||||||
</server>
|
|
||||||
</servers>
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -0,0 +1,3 @@
|
|||||||
|
#safe table
|
||||||
|
#Mon Jan 05 10:27:54 CST 2015
|
||||||
|
connections=connections.15
|
@ -1,3 +0,0 @@
|
|||||||
#safe table
|
|
||||||
#Tue Mar 11 17:27:27 CST 2014
|
|
||||||
connections=connections.9
|
|
@ -0,0 +1,4 @@
|
|||||||
|
#safe table
|
||||||
|
#Mon Jan 05 10:27:54 CST 2015
|
||||||
|
defaultConnection=defaultConnection.15
|
||||||
|
sites=sites.15
|
@ -1,4 +0,0 @@
|
|||||||
#safe table
|
|
||||||
#Tue Mar 11 17:27:27 CST 2014
|
|
||||||
defaultConnection=defaultConnection.9
|
|
||||||
sites=sites.9
|
|
@ -0,0 +1,3 @@
|
|||||||
|
#safe table
|
||||||
|
#Mon Jan 05 10:27:28 CST 2015
|
||||||
|
webservers=webservers.12
|
@ -1,3 +0,0 @@
|
|||||||
#safe table
|
|
||||||
#Tue Mar 11 17:27:27 CST 2014
|
|
||||||
webservers=webservers.8
|
|
Binary file not shown.
@ -1,2 +1,2 @@
|
|||||||
activeProject=demo
|
activeProject=trustie
|
||||||
eclipse.preferences.version=1
|
eclipse.preferences.version=1
|
||||||
|
@ -1,2 +1,2 @@
|
|||||||
eclipse.preferences.version=1
|
eclipse.preferences.version=1
|
||||||
last_known_studio_version=3.4.0.1358388620
|
last_known_studio_version=3.4.2.1368863613
|
||||||
|
@ -0,0 +1,3 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<session version="1.0">
<refactoring comment="Delete resource 'trustie2'" deleteContents="false" description="Delete resource 'trustie2'" element1="/trustie2" flags="7" id="org.eclipse.ltk.core.refactoring.delete.resources" resources="1" stamp="1420424676858"/>
<refactoring comment="Delete resource 'trustie2'" deleteContents="false" description="Delete resource 'trustie2'" element1="/trustie2" flags="7" id="org.eclipse.ltk.core.refactoring.delete.resources" resources="1" stamp="1420424775104"/>
|
||||||
|
</session>
|
@ -0,0 +1,2 @@
|
|||||||
|
1420424676858 Delete resource 'trustie2'
|
||||||
|
1420424775104 Delete resource 'trustie2'
|
@ -0,0 +1,7 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<section name="Workbench">
|
||||||
|
<section name="RefactoringWizard.preview">
|
||||||
|
<item value="400" key="height"/>
|
||||||
|
<item value="600" key="width"/>
|
||||||
|
</section>
|
||||||
|
</section>
|
@ -1,14 +1,26 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<section name="Workbench">
|
<section name="Workbench">
|
||||||
<list key="installedFeatures">
|
<list key="installedFeatures">
|
||||||
<item value="com.aptana.feature.rcp:3.4.0.201304151603-7o7nFDBFFeFt3XrpXNucaz0uIWkY"/>
|
<item value="com.aptana.feature.rcp:3.4.2.201308081805-7o7nFDFFFcLz-2l0rkQ0UYz0u_Wm"/>
|
||||||
<item value="com.aptana.feature.studio:3.4.0.201304151542-7E7G-7MEMVKUHgFcLgFbkKoz0t-7"/>
|
<item value="com.aptana.feature.studio:3.4.2.201308081736-7W7I57boG98RAi489ctbvKi7VXbq"/>
|
||||||
<item value="com.aptana.feature:3.4.0.1365900908-BW7R8FBu-Ylk0DFYW1DC44EXt-dS"/>
|
<item value="com.aptana.feature:3.4.2.1376005939-B87T88BWOnwWRYdZO1DC44EXtPxS"/>
|
||||||
<item value="com.aptana.php.feature:3.3.0.201304151524-7J7E-7IOW_UXOSJY"/>
|
<item value="com.aptana.php.feature:3.4.2.201308081728-7J7E-7IOYXVXXUJS"/>
|
||||||
<item value="com.aptana.pydev.feature:2.7.0.2013032300-7g9I-8Jez0cfdJcee"/>
|
<item value="com.aptana.pydev.feature:2.7.0.2013032300-7g9I-8Jez0cfdJcee"/>
|
||||||
<item value="org.eclipse.help:1.3.0.v20110530-0844-7i7uFFmFFl8nvqbDpEqTvx"/>
|
<item value="org.eclipse.help:1.3.0.v20110530-0844-7i7uFFmFFl8nvqbDpEqTvx"/>
|
||||||
<item value="org.eclipse.platform:3.7.2.v20120207-1839-9gF7UHPDFxGjd-PqDr2jX_4yKaumkoHTz04_q-q"/>
|
<item value="org.eclipse.platform:3.7.2.v20120207-1839-9gF7UHPDFxGjd-PqDr2jX_4yKaumkoHTz04_q-q"/>
|
||||||
<item value="org.eclipse.rcp:3.7.2.v20120120-1424-9DB5FmnFq5JCf1UA38R-kz0S0272"/>
|
<item value="org.eclipse.rcp:3.7.2.v20120120-1424-9DB5FmnFq5JCf1UA38R-kz0S0272"/>
|
||||||
<item value="org.radrails.rails:3.3.0.201304151525-7e-7Q7f5GRKMDENR"/>
|
<item value="org.radrails.rails:3.4.2.201308081726-7n-7Z7oKfjkqlemv"/>
|
||||||
</list>
|
</list>
|
||||||
|
<section name="ChooseWorkspaceDialogSettings">
|
||||||
|
<item value="316" key="DIALOG_Y_ORIGIN"/>
|
||||||
|
<item value="656" key="DIALOG_X_ORIGIN"/>
|
||||||
|
</section>
|
||||||
|
<section name="WORKBENCH_SETTINGS">
|
||||||
|
<list key="ENABLED_TRANSFERS">
|
||||||
|
</list>
|
||||||
|
</section>
|
||||||
|
<section name="ExternalProjectImportWizard">
|
||||||
|
<item value="false" key="WizardProjectsImportPage.STORE_ARCHIVE_SELECTED"/>
|
||||||
|
<item value="false" key="WizardProjectsImportPage.STORE_COPY_PROJECT_ID"/>
|
||||||
|
</section>
|
||||||
</section>
|
</section>
|
||||||
|
@ -1,136 +1,84 @@
|
|||||||
source 'http://rubygems.org'
|
source 'http://ruby.taobao.org'
|
||||||
#source 'http://ruby.sdutlinux.org/'
|
#source 'http://ruby.sdutlinux.org/'
|
||||||
|
|
||||||
unless RUBY_PLATFORM =~ /w32/
|
unless RUBY_PLATFORM =~ /w32/
|
||||||
# unix-like only
|
# unix-like only
|
||||||
gem 'iconv'
|
gem 'iconv'
|
||||||
gem 'rubyzip'
|
end
|
||||||
gem 'zip-zip'
|
|
||||||
end
|
gem 'rest-client'
|
||||||
|
gem "mysql2", "= 0.3.18"
|
||||||
gem 'seems_rateable', path: 'lib/seems_rateable'
|
gem 'redis-rails'
|
||||||
gem "rails", "3.2.13"
|
gem 'rubyzip'
|
||||||
gem "jquery-rails", "~> 2.0.2"
|
gem 'delayed_job_active_record'#, :group => :production
|
||||||
gem "i18n", "~> 0.6.0"
|
gem 'daemons'
|
||||||
gem "coderay", "~> 1.0.6"
|
gem 'grape', '~> 0.9.0'
|
||||||
gem "fastercsv", "~> 1.5.0", :platforms => [:mri_18, :mingw_18, :jruby]
|
gem 'grape-entity'
|
||||||
gem "builder", "3.0.0"
|
gem 'seems_rateable', '~> 1.0.13'
|
||||||
gem 'acts-as-taggable-on', '2.4.1'
|
gem "rails", "3.2.13"
|
||||||
gem 'spreadsheet'
|
gem "jquery-rails", "~> 2.0.2"
|
||||||
gem 'ruby-ole'
|
gem "i18n", "~> 0.6.0"
|
||||||
|
gem 'coderay', '~> 1.1.0'
|
||||||
group :development do
|
gem "fastercsv", "~> 1.5.0", :platforms => [:mri_18, :mingw_18, :jruby]
|
||||||
gem 'better_errors', path: 'lib/better_errors'
|
gem "builder", "3.0.0"
|
||||||
gem 'rack-mini-profiler', path: 'lib/rack-mini-profiler'
|
gem 'acts-as-taggable-on', '2.4.1'
|
||||||
end
|
gem 'spreadsheet'
|
||||||
|
gem 'ruby-ole'
|
||||||
group :test do
|
gem 'rails_kindeditor',path:'lib/rails_kindeditor'
|
||||||
gem "shoulda", "~> 3.5.0"
|
#gem "rmagick", ">= 2.0.0"
|
||||||
gem "mocha", "~> 1.1.0"
|
|
||||||
gem 'capybara', '~> 2.4.1'
|
group :development do
|
||||||
gem 'nokogiri', '~> 1.6.3'
|
gem 'grape-swagger'
|
||||||
gem 'factory_girl', '~> 4.4.0'
|
gem 'better_errors', '~> 1.1.0'
|
||||||
gem 'selenium-webdriver', '~> 2.42.0'
|
gem 'rack-mini-profiler', '~> 0.9.3'
|
||||||
|
end
|
||||||
|
|
||||||
# platforms :mri, :mingw do
|
group :development, :test do
|
||||||
# group :rmagick do
|
unless RUBY_PLATFORM =~ /w32/
|
||||||
# # RMagick 2 supports ruby 1.9
|
gem 'pry-rails'
|
||||||
# # RMagick 1 would be fine for ruby 1.8 but Bundler does not support
|
if RUBY_VERSION >= '2.0.0'
|
||||||
# # different requirements for the same gem on different platforms
|
gem 'pry-byebug'
|
||||||
# gem "rmagick", ">= 2.0.0"
|
end
|
||||||
# end
|
gem 'pry-stack_explorer'
|
||||||
#end
|
end
|
||||||
end
|
|
||||||
|
gem 'rspec-rails', '~> 3.0'
|
||||||
group :development, :test do
|
gem 'factory_girl_rails'
|
||||||
# gem "guard-rails", '~> 0.5.3'
|
end
|
||||||
gem 'spork-testunit', '~> 0.0.8'
|
|
||||||
# gem 'guard-spork', '~> 1.5.1'
|
# Gems used only for assets and not required
|
||||||
# gem 'guard-test', '~> 1.0.0'
|
# in production environments by default.
|
||||||
gem 'ruby-prof', '~> 0.15.1' unless RUBY_PLATFORM =~ /w32/
|
group :assets do
|
||||||
gem 'pry'
|
gem 'sass-rails', '~> 3.2.3'
|
||||||
gem 'pry-nav'
|
gem 'coffee-rails', '~> 3.2.1'
|
||||||
|
|
||||||
end
|
# See https://github.com/sstephenson/execjs#readme for more supported runtimes
|
||||||
|
gem 'therubyracer', :platforms => :ruby
|
||||||
|
|
||||||
# Gems used only for assets and not required
|
gem 'uglifier', '>= 1.0.3'
|
||||||
# in production environments by default.
|
end
|
||||||
group :assets do
|
|
||||||
gem 'sass-rails', '~> 3.2.3'
|
# Optional gem for LDAP authentication
|
||||||
gem 'coffee-rails', '~> 3.2.1'
|
group :ldap do
|
||||||
|
gem "net-ldap", "~> 0.3.1"
|
||||||
# See https://github.com/sstephenson/execjs#readme for more supported runtimes
|
end
|
||||||
gem 'therubyracer', :platforms => :ruby
|
|
||||||
|
|
||||||
gem 'uglifier', '>= 1.0.3'
|
# Optional gem for OpenID authentication
|
||||||
end
|
group :openid do
|
||||||
|
gem "ruby-openid", "~> 2.1.4", :require => "openid"
|
||||||
# Optional gem for LDAP authentication
|
gem "rack-openid"
|
||||||
group :ldap do
|
end
|
||||||
gem "net-ldap", "~> 0.3.1"
|
|
||||||
end
|
|
||||||
|
database_file = File.join(File.dirname(__FILE__), "config/database.yml")
|
||||||
|
if File.exist?(database_file)
|
||||||
# Optional gem for OpenID authentication
|
else
|
||||||
group :openid do
|
warn("Please configure your config/database.yml first")
|
||||||
gem "ruby-openid", "~> 2.1.4", :require => "openid"
|
end
|
||||||
gem "rack-openid"
|
|
||||||
end
|
# Load plugins' Gemfiles
|
||||||
|
Dir.glob File.expand_path("../plugins/*/Gemfile", __FILE__) do |file|
|
||||||
# Optional gem for exporting the gantt to a PNG file, not supported with jruby
|
puts "Loading #{file} ..." if $DEBUG # `ruby -d` or `bundle -v`
|
||||||
platforms :jruby do
|
instance_eval File.read(file)
|
||||||
# jruby-openssl is bundled with JRuby 1.7.0
|
end
|
||||||
gem "jruby-openssl" if Object.const_defined?(:JRUBY_VERSION) && JRUBY_VERSION < '1.7.0'
|
|
||||||
gem "activerecord-jdbc-adapter", "1.2.5"
|
|
||||||
end
|
|
||||||
|
|
||||||
# Include database gems for the adapters found in the database
|
|
||||||
# configuration file
|
|
||||||
require 'erb'
|
|
||||||
require 'yaml'
|
|
||||||
database_file = File.join(File.dirname(__FILE__), "config/database.yml")
|
|
||||||
if File.exist?(database_file)
|
|
||||||
database_config = YAML::load(ERB.new(IO.read(database_file)).result)
|
|
||||||
adapters = database_config.values.map {|c| c['adapter']}.compact.uniq
|
|
||||||
if adapters.any?
|
|
||||||
adapters.each do |adapter|
|
|
||||||
case adapter
|
|
||||||
when 'mysql2'
|
|
||||||
gem "mysql2", "= 0.3.11", :platforms => [:mri, :mingw]
|
|
||||||
gem "activerecord-jdbcmysql-adapter", :platforms => :jruby
|
|
||||||
when 'mysql'
|
|
||||||
gem "mysql", "~> 2.8.1", :platforms => [:mri, :mingw]
|
|
||||||
gem "activerecord-jdbcmysql-adapter", :platforms => :jruby
|
|
||||||
when /postgresql/
|
|
||||||
gem "pg", ">= 0.11.0", :platforms => [:mri, :mingw]
|
|
||||||
gem "activerecord-jdbcpostgresql-adapter", :platforms => :jruby
|
|
||||||
when /sqlite3/
|
|
||||||
gem "sqlite3", :platforms => [:mri, :mingw]
|
|
||||||
gem "activerecord-jdbcsqlite3-adapter", :platforms => :jruby
|
|
||||||
when /sqlserver/
|
|
||||||
gem "tiny_tds", "~> 0.5.1", :platforms => [:mri, :mingw]
|
|
||||||
gem "activerecord-sqlserver-adapter", :platforms => [:mri, :mingw]
|
|
||||||
else
|
|
||||||
warn("Unknown database adapter `#{adapter}` found in config/database.yml, use Gemfile.local to load your own database gems")
|
|
||||||
end
|
|
||||||
end
|
|
||||||
else
|
|
||||||
warn("No adapter found in config/database.yml, please configure it first")
|
|
||||||
end
|
|
||||||
else
|
|
||||||
warn("Please configure your config/database.yml first")
|
|
||||||
end
|
|
||||||
|
|
||||||
local_gemfile = File.join(File.dirname(__FILE__), "Gemfile.local")
|
|
||||||
if File.exists?(local_gemfile)
|
|
||||||
puts "Loading Gemfile.local ..." if $DEBUG # `ruby -d` or `bundle -v`
|
|
||||||
instance_eval File.read(local_gemfile)
|
|
||||||
end
|
|
||||||
|
|
||||||
# Load plugins' Gemfiles
|
|
||||||
Dir.glob File.expand_path("../plugins/*/Gemfile", __FILE__) do |file|
|
|
||||||
puts "Loading #{file} ..." if $DEBUG # `ruby -d` or `bundle -v`
|
|
||||||
instance_eval File.read(file)
|
|
||||||
end
|
|
||||||
|
@ -0,0 +1,49 @@
|
|||||||
|
module Mobile
|
||||||
|
require_relative 'middleware/error_handler'
|
||||||
|
require_relative 'apis/auth'
|
||||||
|
require_relative 'apis/users'
|
||||||
|
require_relative 'apis/courses'
|
||||||
|
require_relative 'apis/watches'
|
||||||
|
require_relative 'apis/upgrade'
|
||||||
|
require_relative 'apis/homeworks'
|
||||||
|
require_relative 'apis/comments'
|
||||||
|
class API < Grape::API
|
||||||
|
version 'v1', using: :path
|
||||||
|
format :json
|
||||||
|
content_type :json, "application/json;charset=UTF-8"
|
||||||
|
use Mobile::Middleware::ErrorHandler
|
||||||
|
|
||||||
|
helpers do
|
||||||
|
def logger
|
||||||
|
API.logger
|
||||||
|
end
|
||||||
|
|
||||||
|
def authenticate!
|
||||||
|
raise('Unauthorized. Invalid or expired token.') unless current_user
|
||||||
|
end
|
||||||
|
|
||||||
|
def current_user
|
||||||
|
token = ApiKey.where(access_token: params[:token]).first
|
||||||
|
if token && !token.expired?
|
||||||
|
@current_user = User.find(token.user_id)
|
||||||
|
else
|
||||||
|
nil
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
mount Apis::Auth
|
||||||
|
mount Apis::Users
|
||||||
|
mount Apis::Courses
|
||||||
|
mount Apis::Watches
|
||||||
|
mount Apis::Upgrade
|
||||||
|
mount Apis::Homeworks
|
||||||
|
mount Apis::Comments
|
||||||
|
|
||||||
|
#add_swagger_documentation ({api_version: 'v1', base_path: 'http://u06.shellinfo.cn/trustie/api'})
|
||||||
|
#add_swagger_documentation ({api_version: 'v1', base_path: '/api'}) if Rails.env.development?
|
||||||
|
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
@ -0,0 +1,59 @@
|
|||||||
|
#coding=utf-8
|
||||||
|
|
||||||
|
module Mobile
|
||||||
|
|
||||||
|
module Entities
|
||||||
|
class Auth < Grape::Entity
|
||||||
|
expose :token
|
||||||
|
expose :user, using: User
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
module Apis
|
||||||
|
class Auth < Grape::API
|
||||||
|
resource :auth do
|
||||||
|
desc "用户登录"
|
||||||
|
params do
|
||||||
|
requires :login, type: String, desc: 'Username or email'
|
||||||
|
requires :password, type: String, desc: 'Password'
|
||||||
|
end
|
||||||
|
post do
|
||||||
|
user,last_logon = ::User.try_to_login(params[:login], params[:password])
|
||||||
|
if user
|
||||||
|
::ApiKey.delete_all(user_id: user.id)
|
||||||
|
key = ::ApiKey.create!(user_id: user.id)
|
||||||
|
api_user = ::UsersService.new.show_user({id:user.id})
|
||||||
|
present :data, {token: key.access_token, user: api_user}, using: Entities::Auth
|
||||||
|
present :status, 0
|
||||||
|
else
|
||||||
|
raise "无效的用户名或密码"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
desc "用户登出"
|
||||||
|
params do
|
||||||
|
requires :token, type: String
|
||||||
|
end
|
||||||
|
delete do
|
||||||
|
authenticate!
|
||||||
|
::ApiKey.delete_all(user_id: current_user.id)
|
||||||
|
{status: 0}
|
||||||
|
end
|
||||||
|
|
||||||
|
desc "忘记密码"
|
||||||
|
params do
|
||||||
|
requires :mail,type: String
|
||||||
|
end
|
||||||
|
post 'lost_password' do
|
||||||
|
us = UsersService.new
|
||||||
|
message = us.lost_password params
|
||||||
|
present :message, message
|
||||||
|
present :status, 0
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
@ -0,0 +1,49 @@
|
|||||||
|
#coding=utf-8
|
||||||
|
module Mobile
|
||||||
|
module Apis
|
||||||
|
class Watches < Grape::API
|
||||||
|
resource :watches do
|
||||||
|
|
||||||
|
desc "获取所有关注"
|
||||||
|
params do
|
||||||
|
requires :token, type: String
|
||||||
|
end
|
||||||
|
get do
|
||||||
|
authenticate!
|
||||||
|
us = UsersService.new
|
||||||
|
ws = us.user_watcher(id: current_user.id)
|
||||||
|
present :data, ws, with: Mobile::Entities::User
|
||||||
|
present :status, 0
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
desc "关注某人"
|
||||||
|
params do
|
||||||
|
requires :token, type: String
|
||||||
|
requires :object_id, type: Integer, desc: '关注的用户的id'
|
||||||
|
end
|
||||||
|
post do
|
||||||
|
authenticate!
|
||||||
|
ws = WatchesService.new
|
||||||
|
o = ws.watch(params.merge({current_user_id:current_user.id, object_type:'user' }) )
|
||||||
|
present :data, o, with: Mobile::Entities::User
|
||||||
|
present :status, 0
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
desc "取消关注"
|
||||||
|
params do
|
||||||
|
requires :token, type: String
|
||||||
|
requires :object_id, type: Integer, desc: '取消关注的用户的id'
|
||||||
|
end
|
||||||
|
delete do
|
||||||
|
authenticate!
|
||||||
|
ws = WatchesService.new
|
||||||
|
ws.unwatch(params.merge({current_user_id:current_user.id, object_type:'user' }) )
|
||||||
|
{status: 0}
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
@ -0,0 +1,36 @@
|
|||||||
|
module Mobile
|
||||||
|
module Entities
|
||||||
|
#匿评作品页面相关参数
|
||||||
|
class AnonymousWorksParams < Grape::Entity
|
||||||
|
def self.anonymous_works_params_expose(field)
|
||||||
|
expose field do |f,opt|
|
||||||
|
if f.is_a?(Hash) && f.key?(field)
|
||||||
|
f[field]
|
||||||
|
elsif f.is_a?(Hash) && !f.key?(field)
|
||||||
|
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
anonymous_works_params_expose :is_teacher
|
||||||
|
anonymous_works_params_expose :m_score
|
||||||
|
anonymous_works_params_expose :is_anonymous_comments
|
||||||
|
anonymous_works_params_expose :cur_type
|
||||||
|
anonymous_works_params_expose :cur_page
|
||||||
|
expose :jours ,using: Mobile::Entities::Jours do |f, opt|
|
||||||
|
if f.is_a?(Hash) && f.key?(:jours)
|
||||||
|
f[:jours]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
expose :teacher_stars,using: Mobile::Entities::HomeworkJours do |f, opt|
|
||||||
|
if f.is_a?(Hash) && f.key?(:teacher_stars)
|
||||||
|
f[:teacher_stars]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
expose :student_stars , using: Mobile::Entities::HomeworkJours do |f, opt|
|
||||||
|
if f.is_a?(Hash) && f.key?(:student_stars)
|
||||||
|
f[:student_stars]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
@ -0,0 +1,32 @@
|
|||||||
|
module Mobile
|
||||||
|
module Entities
|
||||||
|
class Attachment < Grape::Entity
|
||||||
|
include Redmine::I18n
|
||||||
|
def self.attachment_expose(field)
|
||||||
|
expose field do |f,opt|
|
||||||
|
if f.is_a?(Hash) && f.key?(field)
|
||||||
|
f[field]
|
||||||
|
elsif f.is_a?(::Attachment)
|
||||||
|
if f.respond_to?(field)
|
||||||
|
if field == :created_on
|
||||||
|
format_time(f.send(field))
|
||||||
|
else
|
||||||
|
f.send(field)
|
||||||
|
end
|
||||||
|
else
|
||||||
|
#case field
|
||||||
|
# when ""
|
||||||
|
#end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
attachment_expose :id
|
||||||
|
attachment_expose :filename
|
||||||
|
attachment_expose :description
|
||||||
|
attachment_expose :downloads
|
||||||
|
attachment_expose :quotes
|
||||||
|
attachment_expose :created_on
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
@ -0,0 +1,30 @@
|
|||||||
|
module Mobile
|
||||||
|
module Entities
|
||||||
|
class Comment < Grape::Entity
|
||||||
|
include Redmine::I18n
|
||||||
|
def self.comment_expose(field)
|
||||||
|
expose field do |f,opt|
|
||||||
|
if f.is_a?(Hash) && f.key?(field)
|
||||||
|
f[field]
|
||||||
|
elsif f.is_a?(::Comment)
|
||||||
|
if f.respond_to?(field)
|
||||||
|
if field == :created_on
|
||||||
|
format_time(f.send(field))
|
||||||
|
else
|
||||||
|
f.send(field)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
comment_expose :id
|
||||||
|
expose :author, using: Mobile::Entities::User do |c, opt|
|
||||||
|
if c.is_a? ::Comment
|
||||||
|
c.author
|
||||||
|
end
|
||||||
|
end
|
||||||
|
comment_expose :comments
|
||||||
|
comment_expose :created_on
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
@ -0,0 +1,65 @@
|
|||||||
|
module Mobile
|
||||||
|
module Entities
|
||||||
|
class Course < Grape::Entity
|
||||||
|
include Redmine::I18n
|
||||||
|
def self.course_expose(field)
|
||||||
|
expose field do |f,opt|
|
||||||
|
c = nil
|
||||||
|
if f.is_a? ::Course
|
||||||
|
c = f
|
||||||
|
else
|
||||||
|
c = f[:course]
|
||||||
|
end
|
||||||
|
if f.is_a?(Hash) && f.key?(field)
|
||||||
|
f[field] if f.is_a?(Hash) && f.key?(field)
|
||||||
|
#f.img_url if f.respond_to?(:img_url)
|
||||||
|
elsif field == :created_at || field == :updated_at
|
||||||
|
(format_time(c[field]) if (c.is_a?(Hash) && c.key?(field))) || (format_time(c.send(field)) if c.respond_to?(field))
|
||||||
|
else
|
||||||
|
(c[field] if (c.is_a?(Hash) && c.key?(field))) || (c.send(field) if c.respond_to?(field))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
course_expose :img_url
|
||||||
|
course_expose :attachmenttype
|
||||||
|
course_expose :class_period
|
||||||
|
course_expose :code
|
||||||
|
course_expose :created_at
|
||||||
|
course_expose :description
|
||||||
|
course_expose :endup_time
|
||||||
|
course_expose :extra
|
||||||
|
course_expose :id
|
||||||
|
course_expose :inherit_members
|
||||||
|
course_expose :is_public
|
||||||
|
course_expose :lft
|
||||||
|
course_expose :location
|
||||||
|
course_expose :name
|
||||||
|
course_expose :open_student
|
||||||
|
# course_expose :password
|
||||||
|
course_expose :rgt
|
||||||
|
course_expose :school_id
|
||||||
|
course_expose :setup_time
|
||||||
|
course_expose :state
|
||||||
|
course_expose :status
|
||||||
|
course_expose :string
|
||||||
|
course_expose :tea_id
|
||||||
|
course_expose :term
|
||||||
|
course_expose :time
|
||||||
|
course_expose :updated_at
|
||||||
|
course_expose :course_student_num
|
||||||
|
expose :teacher, using: Mobile::Entities::User do |c, opt|
|
||||||
|
if c.is_a? ::Course
|
||||||
|
c.teacher
|
||||||
|
else
|
||||||
|
c[:course].teacher
|
||||||
|
end
|
||||||
|
end
|
||||||
|
expose :my_homework,using: Mobile::Entities::Homework do |f, opt|
|
||||||
|
f[:my_homework] if f.is_a?(Hash) && f.key?(:my_homework)
|
||||||
|
end
|
||||||
|
course_expose :current_user_is_member
|
||||||
|
course_expose :current_user_is_teacher
|
||||||
|
course_expose :work_unit
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
@ -0,0 +1,129 @@
|
|||||||
|
module Mobile
|
||||||
|
module Entities
|
||||||
|
class CourseDynamic < Grape::Entity
|
||||||
|
include Redmine::I18n
|
||||||
|
def self.course_dynamic_expose(field)
|
||||||
|
expose field do |c,opt|
|
||||||
|
if field == :update_time
|
||||||
|
(format_time(c[field]) if (c.is_a?(Hash) && c.key?(field)))
|
||||||
|
elsif field == :news_count
|
||||||
|
obj = nil
|
||||||
|
c[:dynamics].each do |d|
|
||||||
|
if d[:type] == 1
|
||||||
|
obj = d[:count]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
obj
|
||||||
|
elsif field == :document_count
|
||||||
|
obj = nil
|
||||||
|
c[:dynamics].each do |d|
|
||||||
|
if d[:type] == 3
|
||||||
|
obj = d[:count]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
obj
|
||||||
|
elsif field == :topic_count
|
||||||
|
obj = nil
|
||||||
|
c[:dynamics].each do |d|
|
||||||
|
if d[:type] == 2
|
||||||
|
obj = d[:count]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
obj
|
||||||
|
elsif field == :homework_count
|
||||||
|
obj = nil
|
||||||
|
c[:dynamics].each do |d|
|
||||||
|
if d[:type] == 4
|
||||||
|
obj = d[:count]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
obj
|
||||||
|
elsif field == :homework_submit_num
|
||||||
|
obj = nil
|
||||||
|
c[:dynamics].each do |d|
|
||||||
|
if d[:type] == 4
|
||||||
|
obj = d[:submit_count]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
obj
|
||||||
|
elsif field == :homework_submit_students
|
||||||
|
obj = nil
|
||||||
|
c[:dynamics].each do |d|
|
||||||
|
if d[:type] == 4
|
||||||
|
obj = d[:studentlist]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
obj
|
||||||
|
elsif field == :homework_status
|
||||||
|
obj = nil
|
||||||
|
c[:dynamics].each do |d|
|
||||||
|
if d[:type] == 4
|
||||||
|
obj = d[:homework_status]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
obj
|
||||||
|
else
|
||||||
|
c[field] if (c.is_a?(Hash) && c.key?(field))
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
end
|
||||||
|
course_dynamic_expose :type
|
||||||
|
course_dynamic_expose :count
|
||||||
|
course_dynamic_expose :course_name
|
||||||
|
course_dynamic_expose :course_term
|
||||||
|
course_dynamic_expose :course_time
|
||||||
|
course_dynamic_expose :course_id
|
||||||
|
course_dynamic_expose :course_img_url
|
||||||
|
course_dynamic_expose :message
|
||||||
|
course_dynamic_expose :update_time
|
||||||
|
course_dynamic_expose :count
|
||||||
|
course_dynamic_expose :news_count
|
||||||
|
course_dynamic_expose :document_count
|
||||||
|
course_dynamic_expose :topic_count
|
||||||
|
course_dynamic_expose :homework_count
|
||||||
|
course_dynamic_expose :homework_submit_students
|
||||||
|
course_dynamic_expose :homework_submit_num
|
||||||
|
course_dynamic_expose :homework_status
|
||||||
|
#在dynamics里解析出四种动态
|
||||||
|
expose :document,using:Mobile::Entities::Attachment do |f,opt|
|
||||||
|
obj = nil
|
||||||
|
f[:dynamics].each do |d|
|
||||||
|
if d[:type] == 3
|
||||||
|
obj = d[:documents]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
obj
|
||||||
|
end
|
||||||
|
expose :topic,using:Mobile::Entities::Message do |f,opt|
|
||||||
|
obj = nil
|
||||||
|
f[:dynamics].each do |d|
|
||||||
|
if d[:type] == 2
|
||||||
|
obj = d[:topic]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
obj
|
||||||
|
end
|
||||||
|
expose :homework,using:Mobile::Entities::Homework do |f,opt|
|
||||||
|
obj = nil
|
||||||
|
f[:dynamics].each do |d|
|
||||||
|
if d[:type] == 4
|
||||||
|
obj = d[:homework]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
obj
|
||||||
|
end
|
||||||
|
|
||||||
|
expose :news,using:Mobile::Entities::News do |f,opt|
|
||||||
|
obj = nil
|
||||||
|
f[:dynamics].each do |d|
|
||||||
|
if d[:type] == 1
|
||||||
|
obj = d
|
||||||
|
end
|
||||||
|
end
|
||||||
|
obj
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
@ -0,0 +1,29 @@
|
|||||||
|
module Mobile
|
||||||
|
module Entities
|
||||||
|
#带评分的留言(教师评论、学生匿名评分都属于此类)
|
||||||
|
class HomeworkJours < Grape::Entity
|
||||||
|
include Redmine::I18n
|
||||||
|
def self.homework_jours_expose(field)
|
||||||
|
expose field do |f,opt|
|
||||||
|
if f.is_a?(Hash) && f.key?(field)
|
||||||
|
if field == :created_at
|
||||||
|
format_time(f[field])
|
||||||
|
else
|
||||||
|
f[field]
|
||||||
|
end
|
||||||
|
elsif f.is_a?(::SeemsRateableRates)
|
||||||
|
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
homework_jours_expose :rater_id
|
||||||
|
homework_jours_expose :rater_name
|
||||||
|
homework_jours_expose :created_at
|
||||||
|
homework_jours_expose :stars
|
||||||
|
expose :comment,using: Mobile::Entities::Jours do |f,opt|
|
||||||
|
f[:comment]
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
@ -0,0 +1,18 @@
|
|||||||
|
module Mobile
|
||||||
|
module Entities
|
||||||
|
class Homeworkscore < Grape::Entity
|
||||||
|
include Redmine::I18n
|
||||||
|
include ApplicationHelper
|
||||||
|
def self.homeworkscore_expose(field)
|
||||||
|
expose field do |f,opt|
|
||||||
|
if f.is_a?(Hash) && f.key?(field)
|
||||||
|
f[field]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
homeworkscore_expose :name
|
||||||
|
homeworkscore_expose :score
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
@ -0,0 +1,50 @@
|
|||||||
|
module Mobile
|
||||||
|
module Entities
|
||||||
|
#普通留言
|
||||||
|
class Jours < Grape::Entity
|
||||||
|
include Redmine::I18n
|
||||||
|
include WordsHelper
|
||||||
|
def self.jours_expose(field)
|
||||||
|
expose field do |f,opt|
|
||||||
|
if f.is_a?(Hash) && f.key?(field)
|
||||||
|
f[field]
|
||||||
|
elsif f.is_a?(::JournalsForMessage) && f.respond_to?(field)
|
||||||
|
if field == :created_on
|
||||||
|
format_time(f.send(field))
|
||||||
|
else
|
||||||
|
f.send(field)
|
||||||
|
end
|
||||||
|
else
|
||||||
|
case f
|
||||||
|
when :course_name
|
||||||
|
f[:jour_type] == "Course" ? f.course.name : ""
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
jours_expose :id
|
||||||
|
jours_expose :jour_type
|
||||||
|
jours_expose :jour_id
|
||||||
|
expose :user,using: Mobile::Entities::User do |f, opt|
|
||||||
|
f.user
|
||||||
|
end
|
||||||
|
jours_expose :created_on
|
||||||
|
jours_expose :notes
|
||||||
|
jours_expose :m_reply_id
|
||||||
|
jours_expose :m_parent_id
|
||||||
|
expose :course,using:Mobile::Entities::Course do |f,opt|
|
||||||
|
if f.is_a?(::JournalsForMessage) && f[:jour_type] == "Course"
|
||||||
|
f.course
|
||||||
|
end
|
||||||
|
end
|
||||||
|
expose :reply_user,using: Mobile::Entities::User do |f, opt|
|
||||||
|
f.at_user
|
||||||
|
end
|
||||||
|
expose :child_reply,using: Mobile::Entities::Jours do |f, opt|
|
||||||
|
if f.is_a?(::JournalsForMessage)
|
||||||
|
fetch_user_leaveWord_reply(f)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
@ -0,0 +1,34 @@
|
|||||||
|
module Mobile
|
||||||
|
module Entities
|
||||||
|
class Member < Grape::Entity
|
||||||
|
include ApplicationHelper
|
||||||
|
include ApiHelper
|
||||||
|
def self.member_expose(f)
|
||||||
|
expose f do |u,opt|
|
||||||
|
if u.is_a?(Hash) && u.key?(f)
|
||||||
|
u[f]
|
||||||
|
elsif u.is_a?(::Member)
|
||||||
|
if u.respond_to?(f)
|
||||||
|
u.send(f)
|
||||||
|
else
|
||||||
|
case f
|
||||||
|
when :student_id
|
||||||
|
u.user.user_extensions.student_id
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
expose :user, using: Mobile::Entities::User do |c, opt|
|
||||||
|
if c.is_a?(::Member)
|
||||||
|
c.user
|
||||||
|
end
|
||||||
|
end
|
||||||
|
member_expose :student_id
|
||||||
|
member_expose :score
|
||||||
|
member_expose :id
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
@ -0,0 +1,46 @@
|
|||||||
|
module Mobile
|
||||||
|
module Entities
|
||||||
|
class Message < Grape::Entity
|
||||||
|
include ApplicationHelper
|
||||||
|
include ApiHelper
|
||||||
|
def self.message_expose(f)
|
||||||
|
expose f do |u,opt|
|
||||||
|
if u.is_a?(Hash) && u.key?(f)
|
||||||
|
u[f]
|
||||||
|
elsif u.is_a?(::Message)
|
||||||
|
if u.respond_to?(f)
|
||||||
|
if f == :created_on
|
||||||
|
format_time( u.send(f))
|
||||||
|
else
|
||||||
|
u.send(f)
|
||||||
|
end
|
||||||
|
else
|
||||||
|
# case f
|
||||||
|
# when :xx
|
||||||
|
# #
|
||||||
|
# end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
expose :user, using: Mobile::Entities::User do |c, opt|
|
||||||
|
if c.is_a?(::Message)
|
||||||
|
c.author
|
||||||
|
end
|
||||||
|
end
|
||||||
|
message_expose :board_id
|
||||||
|
message_expose :subject
|
||||||
|
message_expose :content
|
||||||
|
message_expose :replies_count
|
||||||
|
message_expose :created_on
|
||||||
|
message_expose :id
|
||||||
|
expose :message_children,using:Mobile::Entities::Message do |c,opt|
|
||||||
|
if c.is_a? (::Message)
|
||||||
|
c.children
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
@ -0,0 +1,54 @@
|
|||||||
|
module Mobile
|
||||||
|
module Entities
|
||||||
|
class News < Grape::Entity
|
||||||
|
include Redmine::I18n
|
||||||
|
def self.news_expose(field)
|
||||||
|
expose field do |f,opt|
|
||||||
|
if f.is_a?(Hash) && f.key?(field)
|
||||||
|
f[field]
|
||||||
|
elsif f.is_a?(Hash) && !f.key?(field)
|
||||||
|
n = f[:news]
|
||||||
|
comments = f[:comments]
|
||||||
|
if n.is_a?(::News)
|
||||||
|
if field == :created_on
|
||||||
|
format_time(n.send(field)) if n.respond_to?(field)
|
||||||
|
else
|
||||||
|
n.send(field) if n.respond_to?(field)
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
news_expose :id
|
||||||
|
#新闻标题
|
||||||
|
news_expose :title
|
||||||
|
|
||||||
|
expose :author,using: Mobile::Entities::User do |f, opt|
|
||||||
|
n = f[:author]
|
||||||
|
#n.author if n.respond_to?(:author)
|
||||||
|
end
|
||||||
|
#作者id
|
||||||
|
news_expose :author_id
|
||||||
|
#作者名
|
||||||
|
news_expose :author_name
|
||||||
|
#作者头像url
|
||||||
|
news_expose :author_img_url
|
||||||
|
#新闻内容
|
||||||
|
news_expose :description
|
||||||
|
#发布时间
|
||||||
|
news_expose :created_on
|
||||||
|
#评论数量
|
||||||
|
news_expose :comments_count
|
||||||
|
#评论
|
||||||
|
expose :comments, using: Mobile::Entities::Comment do |f, opt|
|
||||||
|
if f.is_a?(Hash) && f.key?(:comments)
|
||||||
|
f[:comments]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
@ -0,0 +1,53 @@
|
|||||||
|
module Mobile
|
||||||
|
module Entities
|
||||||
|
class User < Grape::Entity
|
||||||
|
include ApplicationHelper
|
||||||
|
include ApiHelper
|
||||||
|
def self.user_expose(f)
|
||||||
|
expose f do |u,opt|
|
||||||
|
if u.is_a?(Hash) && u.key?(f)
|
||||||
|
u[f]
|
||||||
|
elsif u.is_a?(::User)
|
||||||
|
if u.respond_to?(f)
|
||||||
|
u.send(f) unless u.user_extensions.nil?
|
||||||
|
else
|
||||||
|
case f
|
||||||
|
when :img_url
|
||||||
|
url_to_avatar(u)
|
||||||
|
when :gender
|
||||||
|
u.nil? || u.user_extensions.nil? || u.user_extensions.gender.nil? ? 0 : u.user_extensions.gender
|
||||||
|
when :work_unit
|
||||||
|
get_user_work_unit u unless u.user_extensions.nil?
|
||||||
|
when :location
|
||||||
|
get_user_location u unless u.user_extensions.nil?
|
||||||
|
when :brief_introduction
|
||||||
|
u.nil? || u.user_extensions.nil? ? "" : u.user_extensions.brief_introduction
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
expose :id
|
||||||
|
#头像
|
||||||
|
user_expose :img_url
|
||||||
|
#昵称
|
||||||
|
expose :nickname
|
||||||
|
#真名
|
||||||
|
expose :realname
|
||||||
|
#性别
|
||||||
|
user_expose :gender
|
||||||
|
#我的二维码
|
||||||
|
#工作单位
|
||||||
|
user_expose :work_unit
|
||||||
|
#邮箱地址
|
||||||
|
user_expose :mail
|
||||||
|
#地区
|
||||||
|
user_expose :location
|
||||||
|
#签名
|
||||||
|
user_expose :brief_introduction
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
@ -0,0 +1,19 @@
|
|||||||
|
module Mobile
|
||||||
|
module Middleware
|
||||||
|
class ErrorHandler < Grape::Middleware::Base
|
||||||
|
def call!(env)
|
||||||
|
@env = env
|
||||||
|
begin
|
||||||
|
@app.call(@env)
|
||||||
|
rescue =>e
|
||||||
|
message = {status: 1, message: e.message }.to_json
|
||||||
|
puts(e.backtrace.join("\n")) if Rails.env.development?
|
||||||
|
status = 200
|
||||||
|
headers = { 'Content-Type' => content_type }
|
||||||
|
Rack::Response.new([message], status, headers).finish
|
||||||
|
# throw :error, :message => e.message || options[:default_message], :status => 500
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
@ -0,0 +1,3 @@
|
|||||||
|
# Place all the behaviors and hooks related to the matching controller here.
|
||||||
|
# All this logic will automatically be available in application.js.
|
||||||
|
# You can use CoffeeScript in this file: http://jashkenas.github.com/coffee-script/
|
@ -0,0 +1,3 @@
|
|||||||
|
# Place all the behaviors and hooks related to the matching controller here.
|
||||||
|
# All this logic will automatically be available in application.js.
|
||||||
|
# You can use CoffeeScript in this file: http://jashkenas.github.com/coffee-script/
|
@ -0,0 +1,3 @@
|
|||||||
|
// Place all the styles related to the Enterprises controller here.
|
||||||
|
// They will automatically be included in application.css.
|
||||||
|
// You can use Sass (SCSS) here: http://sass-lang.com/
|
@ -0,0 +1,3 @@
|
|||||||
|
// Place all the styles related to the system_log controller here.
|
||||||
|
// They will automatically be included in application.css.
|
||||||
|
// You can use Sass (SCSS) here: http://sass-lang.com/
|
@ -0,0 +1,52 @@
|
|||||||
|
class ActivityNotifysController < ApplicationController
|
||||||
|
# layout 'base_projects'#by young
|
||||||
|
# default_search_scope :messages
|
||||||
|
before_filter :find_project_by_project_id#, :find_board_if_available
|
||||||
|
# before_filter :authorize, :except => [:new, :show, :create, :index]
|
||||||
|
# accept_rss_auth :index, :show
|
||||||
|
|
||||||
|
helper :activities
|
||||||
|
def index
|
||||||
|
query = nil
|
||||||
|
if @course
|
||||||
|
query = ActivityNotify.where('activity_container_id=? and activity_container_type=? and notify_to=?',@course.id,'Course',User.current.id);
|
||||||
|
else
|
||||||
|
@events_by_day = []
|
||||||
|
end
|
||||||
|
|
||||||
|
if( query != nil )
|
||||||
|
limit = 10;
|
||||||
|
@obj_count = query.count();
|
||||||
|
@obj_pages = Paginator.new @obj_count,limit,params['page']
|
||||||
|
list = query.order('is_read,id desc').limit(limit).offset(@obj_pages.offset).all();
|
||||||
|
events=[];
|
||||||
|
for item in list
|
||||||
|
event = item.activity;
|
||||||
|
event.set_notify_id(item.id)
|
||||||
|
event.set_notify_is_read(item.is_read)
|
||||||
|
events << event
|
||||||
|
end
|
||||||
|
@events_by_day = events.group_by {|event| User.current.time_to_date(event.event_datetime)}
|
||||||
|
@controller_name = 'ActivityNotifys'
|
||||||
|
end
|
||||||
|
respond_to do |format|
|
||||||
|
format.html {render :template => 'courses/show', :layout => 'base_courses'}
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def chang_read_flag
|
||||||
|
if @course
|
||||||
|
if(params[:an_id] != nil )
|
||||||
|
query = ActivityNotify.where('id=? and notify_to=?',params[:an_id],User.current.id)
|
||||||
|
else
|
||||||
|
query = ActivityNotify.where('activity_container_id=? and activity_container_type=? and notify_to=? and is_read=0',@course.id,'Course',User.current.id)
|
||||||
|
end
|
||||||
|
@result = query.update_all('is_read=1');
|
||||||
|
else
|
||||||
|
@result = false;
|
||||||
|
end
|
||||||
|
respond_to do |format|
|
||||||
|
format.html{render :layout => nil}
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
@ -1,35 +1,59 @@
|
|||||||
class AppliedProjectController < ApplicationController
|
class AppliedProjectController < ApplicationController
|
||||||
|
|
||||||
#申请加入项目
|
#申请加入项目
|
||||||
def applied_join_project
|
def applied_join_project
|
||||||
@user_id = params[:user_id]
|
@user_id = params[:user_id]
|
||||||
@project = Project.find(params[:project_id])
|
@project = Project.find_by_id(params[:project_id])
|
||||||
@applieds = AppliedProject.where("user_id = ? and project_id = ?", params[:user_id],params[:project_id])
|
if params[:project_join]
|
||||||
if @applieds.count == 0
|
if @project
|
||||||
appliedproject = AppliedProject.create(:user_id => params[:user_id], :project_id => params[:project_id])
|
user = User.find @user_id
|
||||||
Mailer.applied_project(appliedproject).deliver
|
if user.member_of?(@project)
|
||||||
end
|
@status = 3
|
||||||
|
else
|
||||||
#redirect_to project_path(params[:project_id])
|
@applieds = AppliedProject.where("user_id = ? and project_id = ?", params[:user_id],params[:project_id])
|
||||||
#redirect_to_referer_or {render :text => ( 'applied success.'), :layout => true}
|
if @applieds.count == 0
|
||||||
respond_to do |format|
|
appliedproject = AppliedProject.create(:user_id => params[:user_id], :project_id => params[:project_id])
|
||||||
format.html { redirect_to_referer_or {render :text => (watching ? 'Watcher added.' : 'Watcher removed.'), :layout => true}}
|
Mailer.run.applied_project(appliedproject)
|
||||||
format.js { render :partial => 'set_applied'}
|
@status = 2
|
||||||
end
|
else
|
||||||
end
|
@status = 1
|
||||||
|
end
|
||||||
#取消申请
|
end
|
||||||
def unapplied_join_project
|
else
|
||||||
@project = Project.find(params[:project_id])
|
@status = 0
|
||||||
#@applied = AppliedProject.find(params[:id])
|
end
|
||||||
#@applied.destroy
|
respond_to do |format|
|
||||||
|
format.js
|
||||||
AppliedProject.deleteappiled(params[:user_id], params[:project_id])
|
end
|
||||||
|
return
|
||||||
respond_to do |format|
|
end
|
||||||
format.html { redirect_to_referer_or {render :text => (watching ? 'Watcher added.' : 'Watcher removed.'), :layout => true}}
|
|
||||||
format.js { render :partial => 'set_applied' }
|
@applieds = AppliedProject.where("user_id = ? and project_id = ?", params[:user_id],params[:project_id])
|
||||||
end
|
if @applieds.count == 0
|
||||||
end
|
appliedproject = AppliedProject.create(:user_id => params[:user_id], :project_id => params[:project_id])
|
||||||
|
Mailer.run.applied_project(appliedproject)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
#redirect_to project_path(params[:project_id])
|
||||||
|
#redirect_to_referer_or {render :text => ( 'applied success.'), :layout => true}
|
||||||
|
respond_to do |format|
|
||||||
|
format.html { redirect_to_referer_or {render :text => (watching ? 'Watcher added.' : 'Watcher removed.'), :layout => true}}
|
||||||
|
format.js { render :partial => 'set_applied'}
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
#取消申请
|
||||||
|
def unapplied_join_project
|
||||||
|
@project = Project.find(params[:project_id])
|
||||||
|
#@applied = AppliedProject.find(params[:id])
|
||||||
|
#@applied.destroy
|
||||||
|
|
||||||
|
AppliedProject.deleteappiled(params[:user_id], params[:project_id])
|
||||||
|
|
||||||
|
respond_to do |format|
|
||||||
|
format.html { redirect_to_referer_or {render :text => (watching ? 'Watcher added.' : 'Watcher removed.'), :layout => true}}
|
||||||
|
format.js { render :partial => 'set_applied' }
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,42 @@
|
|||||||
|
class DiscussDemosController < ApplicationController
|
||||||
|
def index
|
||||||
|
|
||||||
|
@discuss_demo_list = DiscussDemo.where("body is not null").order("created_at desc").page(params[:page] || 1).per(10)
|
||||||
|
end
|
||||||
|
|
||||||
|
def new
|
||||||
|
@discuss_demo = DiscussDemo.create
|
||||||
|
@discuss_demo.save!
|
||||||
|
@discuss_demo
|
||||||
|
end
|
||||||
|
|
||||||
|
def create
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
def update
|
||||||
|
@discuss_demo = DiscussDemo.find(params[:id])
|
||||||
|
@discuss_demo.update_attributes(:title => params[:discuss_demo][:title],:body => params[:discuss_demo][:body])
|
||||||
|
redirect_to :controller=> 'discuss_demos',:action => 'show',:id => params[:id]
|
||||||
|
end
|
||||||
|
|
||||||
|
def delete
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
def destroy
|
||||||
|
asset = Kindeditor::Asset.find_by_owner_id(params[:id])
|
||||||
|
if !asset.nil?
|
||||||
|
filepath = File.join(Rails.root,"public","files","uploads",
|
||||||
|
asset[:created_at].to_s.gsub("+0800","").to_datetime.strftime("%Y%m").to_s,
|
||||||
|
asset[:asset].to_s)
|
||||||
|
File.delete(filepath) if File.exist?filepath
|
||||||
|
end
|
||||||
|
DiscussDemo.destroy(params[:id])
|
||||||
|
redirect_to :controller=> 'discuss_demos',:action => 'index'
|
||||||
|
end
|
||||||
|
|
||||||
|
def show
|
||||||
|
@discuss_demo = DiscussDemo.find(params[:id])
|
||||||
|
end
|
||||||
|
end
|
@ -0,0 +1,9 @@
|
|||||||
|
class GitCallbackController < ApplicationController
|
||||||
|
|
||||||
|
def post_update
|
||||||
|
@repository = Repository.find_by_root_url(params[:root_url])
|
||||||
|
@repository.fetch_changesets
|
||||||
|
render :text => 'success'
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
@ -0,0 +1,55 @@
|
|||||||
|
class OrganizationController < ApplicationController
|
||||||
|
layout 'base_projects'
|
||||||
|
before_filter :require_admin, :except => [:index]
|
||||||
|
|
||||||
|
def index
|
||||||
|
#@projects = Project.find_by_sql("SELECT * FROM projects WHERE id IN (select MAX(id) from projects GROUP BY enterprise_name)")
|
||||||
|
@organizations = Organization.all
|
||||||
|
respond_to do |format|
|
||||||
|
format.html
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def new
|
||||||
|
@organizations = Organization.new
|
||||||
|
respond_to do |format|
|
||||||
|
format.html
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def create
|
||||||
|
@organizations = Organization.new
|
||||||
|
@organizations.name = params[:organization][:name]
|
||||||
|
if @organizations.save
|
||||||
|
redirect_to admin_organization_url
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def edit
|
||||||
|
@organization = Organization.find params[:id]
|
||||||
|
respond_to do |format|
|
||||||
|
format.html
|
||||||
|
end
|
||||||
|
rescue Exception => e
|
||||||
|
render_404
|
||||||
|
end
|
||||||
|
|
||||||
|
def update
|
||||||
|
@organization = Organization.find params[:id]
|
||||||
|
@organization.name = params[:organization][:name]
|
||||||
|
if @organization.save
|
||||||
|
redirect_to admin_organization_url
|
||||||
|
end
|
||||||
|
rescue Exception => e
|
||||||
|
render_404
|
||||||
|
end
|
||||||
|
|
||||||
|
def destroy
|
||||||
|
@organization = Organization.find params[:id]
|
||||||
|
if @organization.destroy
|
||||||
|
redirect_to admin_organization_url
|
||||||
|
end
|
||||||
|
rescue Exception => e
|
||||||
|
render_404
|
||||||
|
end
|
||||||
|
end
|
@ -0,0 +1,420 @@
|
|||||||
|
class StudentWorkController < ApplicationController
|
||||||
|
layout "base_courses"
|
||||||
|
include StudentWorkHelper
|
||||||
|
require 'bigdecimal'
|
||||||
|
before_filter :find_homework, :only => [:new, :index, :create, :student_work_absence_penalty, :absence_penalty_list, :evaluation_list]
|
||||||
|
before_filter :find_work, :only => [:edit, :update, :show, :destroy, :add_score, :praise_student_work]
|
||||||
|
before_filter :member_of_course, :only => [:index, :new, :create, :show, :add_score, :praise_student_work]
|
||||||
|
before_filter :author_of_work, :only => [:edit, :update, :destroy]
|
||||||
|
before_filter :teacher_of_course, :only => [:student_work_absence_penalty, :absence_penalty_list, :evaluation_list]
|
||||||
|
|
||||||
|
def index
|
||||||
|
@order,@b_sort,@name = params[:order] || "final_score",params[:sort] || "desc",params[:name] || ""
|
||||||
|
@is_teacher = User.current.allowed_to?(:as_teacher,@course)
|
||||||
|
#老师 || 非匿评作业 || 匿评结束 显示所有的作品
|
||||||
|
@show_all = @is_teacher || @homework.homework_type != 1 || @homework.homework_detail_manual.comment_status == 3
|
||||||
|
if @show_all
|
||||||
|
if @homework.homework_type == 1 || @is_teacher || User.current.admin?
|
||||||
|
if @order == "name"
|
||||||
|
@stundet_works = search_homework_member @homework.student_works.joins(:user).order("users.lastname #{@b_sort}, users.firstname #{@b_sort}"),@name
|
||||||
|
else
|
||||||
|
@stundet_works = search_homework_member @homework.student_works.order("#{@order} #{@b_sort}"),@name
|
||||||
|
end
|
||||||
|
else
|
||||||
|
my_work = @homework.student_works.where(:user_id => User.current.id)
|
||||||
|
if my_work.empty?
|
||||||
|
@stundet_works = []
|
||||||
|
else
|
||||||
|
if @order == "name"
|
||||||
|
@stundet_works = search_homework_member @homework.student_works.joins(:user).order("users.lastname #{@b_sort}, users.firstname #{@b_sort}"),@name
|
||||||
|
else
|
||||||
|
@stundet_works = search_homework_member @homework.student_works.order("#{@order} #{@b_sort}"),@name
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
else #学生
|
||||||
|
if @homework.homework_detail_manual.comment_status == 1 #未开启匿评,只显示我的作品
|
||||||
|
@stundet_works = @homework.student_works.where(:user_id => User.current.id)
|
||||||
|
elsif @homework.homework_detail_manual.comment_status == 2 #匿评列表,显示匿评作品和我的作品
|
||||||
|
@is_evaluation = true
|
||||||
|
my_work = @homework.student_works.where(:user_id => User.current.id)
|
||||||
|
@stundet_works = my_work + User.current.student_works_evaluation_distributions.map(&:student_work).select { |work| work.homework_common_id == @homework.id}
|
||||||
|
end
|
||||||
|
end
|
||||||
|
@homework_commons = @course.homework_commons.order("created_at desc")
|
||||||
|
@score = @b_sort == "desc" ? "asc" : "desc"
|
||||||
|
respond_to do |format|
|
||||||
|
format.html
|
||||||
|
format.xls {
|
||||||
|
send_data(homework_to_xls(@stundet_works), :type => "text/excel;charset=utf-8; header=present",
|
||||||
|
:filename => "#{@course.teacher.lastname.to_s + @course.teacher.firstname}_#{@course.name}_#{@course.time.to_s + @course.term}_#{@homework.name}#{l(:excel_homework_list)}.xls")
|
||||||
|
}
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def new
|
||||||
|
student_work = @homework.student_works.where("user_id = ?",User.current.id).first
|
||||||
|
if student_work.nil?
|
||||||
|
@stundet_work = StudentWork.new
|
||||||
|
respond_to do |format|
|
||||||
|
format.html
|
||||||
|
end
|
||||||
|
else
|
||||||
|
render_403
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def create
|
||||||
|
if params[:student_work]
|
||||||
|
stundet_work = StudentWork.new
|
||||||
|
stundet_work.name = params[:student_work][:name]
|
||||||
|
stundet_work.description = params[:student_work][:description]
|
||||||
|
stundet_work.project_id = params[:student_work][:project_id]
|
||||||
|
stundet_work.homework_common_id = @homework.id
|
||||||
|
stundet_work.user_id = User.current.id
|
||||||
|
stundet_work.save_attachments(params[:attachments])
|
||||||
|
render_attachment_warning_if_needed(stundet_work)
|
||||||
|
if stundet_work.save
|
||||||
|
respond_to do |format|
|
||||||
|
format.html {
|
||||||
|
flash[:notice] = l(:notice_successful_create)
|
||||||
|
redirect_to student_work_index_url(:homework => @homework.id)
|
||||||
|
}
|
||||||
|
end
|
||||||
|
return
|
||||||
|
end
|
||||||
|
end
|
||||||
|
respond_to do |format|
|
||||||
|
format.html {
|
||||||
|
flash[:notice] = l(:notice_failed_create)
|
||||||
|
redirect_to new_student_work_url(:homework => @homework.id)
|
||||||
|
}
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def edit
|
||||||
|
respond_to do |format|
|
||||||
|
format.html
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def update
|
||||||
|
if params[:student_work]
|
||||||
|
@work.name = params[:student_work][:name]
|
||||||
|
@work.description = params[:student_work][:description]
|
||||||
|
@work.project_id = params[:student_work][:project]
|
||||||
|
@work.save_attachments(params[:attachments])
|
||||||
|
render_attachment_warning_if_needed(@work)
|
||||||
|
if @work.save
|
||||||
|
respond_to do |format|
|
||||||
|
format.html {
|
||||||
|
flash[:notice] = l(:notice_successful_edit)
|
||||||
|
redirect_to student_work_index_url(:homework => @homework.id)
|
||||||
|
}
|
||||||
|
end
|
||||||
|
return
|
||||||
|
end
|
||||||
|
end
|
||||||
|
respond_to do |format|
|
||||||
|
format.html{redirect_to edit_student_work_url(@work)}
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def show
|
||||||
|
@score = student_work_score @work,User.current
|
||||||
|
@is_teacher = User.current.allowed_to?(:as_teacher,@course)
|
||||||
|
respond_to do |format|
|
||||||
|
format.js
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def destroy
|
||||||
|
if @work.destroy
|
||||||
|
respond_to do |format|
|
||||||
|
format.html {
|
||||||
|
redirect_to student_work_index_url(:homework => @homework.id)
|
||||||
|
}
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
#添加评分,已评分则为修改评分
|
||||||
|
def add_score
|
||||||
|
render_403 and return if User.current == @work.user #不可以匿评自己的作品
|
||||||
|
@is_teacher = User.current.allowed_to?(:as_teacher,@course)
|
||||||
|
#老师、教辅可以随时评分,学生只能在匿评作业的匿评阶段进行评分
|
||||||
|
render_403 and return unless @is_teacher || (@homework.homework_type == 1 && @homework.homework_detail_manual.comment_status == 2)
|
||||||
|
@score = student_work_score @work,User.current
|
||||||
|
if @score
|
||||||
|
@score.comment = params[:new_form][:user_message] if params[:new_form] && params[:new_form][:user_message] && params[:new_form][:user_message] != ""
|
||||||
|
@score.score = params[:score] if params[:score]
|
||||||
|
@is_new = false
|
||||||
|
else
|
||||||
|
@score = StudentWorksScore.new
|
||||||
|
@score.score = params[:score] if params[:score]
|
||||||
|
@score.comment = params[:new_form][:user_message] if params[:new_form] && params[:new_form][:user_message] && params[:new_form][:user_message] != ""
|
||||||
|
@score.user_id = User.current.id
|
||||||
|
@score.student_work_id = @work.id
|
||||||
|
role = User.current.members.where("course_id = ?",@course.id).first.roles.first.name
|
||||||
|
User.current.admin? ? @score.reviewer_role = 1 : @score.reviewer_role = get_role_by_name(role)
|
||||||
|
@is_new = true
|
||||||
|
end
|
||||||
|
|
||||||
|
@score.save_attachments(params[:attachments])
|
||||||
|
render_attachment_warning_if_needed(@score)
|
||||||
|
|
||||||
|
if @score.save
|
||||||
|
case @score.reviewer_role
|
||||||
|
when 1 #教师评分:最后一个教师评分为最终评分
|
||||||
|
@work.teacher_score = @score.score
|
||||||
|
@work.final_score = @score.score
|
||||||
|
when 2 #教辅评分 教辅评分显示平均分
|
||||||
|
@work.teaching_asistant_score = @work.student_works_scores.where(:reviewer_role => 2).average(:score).try(:round, 2).to_f
|
||||||
|
if @work.teacher_score.nil?
|
||||||
|
if @work.student_score.nil?
|
||||||
|
@work.final_score = @work.teaching_asistant_score
|
||||||
|
else
|
||||||
|
final_ta_score = BigDecimal.new("#{@work.teaching_asistant_score}") * BigDecimal.new("#{@homework.homework_detail_manual.ta_proportion}")
|
||||||
|
final_s_score = BigDecimal.new("#{@work.student_score}") * (BigDecimal.new('1.0') - BigDecimal.new("#{@homework.homework_detail_manual.ta_proportion}"))
|
||||||
|
final_score = final_ta_score + final_s_score
|
||||||
|
@work.final_score = format("%.2f",final_score.to_f)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
when 3 #学生评分 学生评分显示平均分
|
||||||
|
@work.student_score = @work.student_works_scores.where(:reviewer_role => 3).average(:score).try(:round, 2).to_f
|
||||||
|
if @work.teacher_score.nil?
|
||||||
|
if @work.teaching_asistant_score.nil?
|
||||||
|
@work.final_score = @work.student_score
|
||||||
|
else
|
||||||
|
final_ta_score = BigDecimal.new("#{@work.teaching_asistant_score}") * BigDecimal.new("#{@homework.homework_detail_manual.ta_proportion}")
|
||||||
|
final_s_score = BigDecimal.new("#{@work.student_score}") * (BigDecimal.new('1.0') - BigDecimal.new("#{@homework.homework_detail_manual.ta_proportion}"))
|
||||||
|
final_score = final_ta_score + final_s_score
|
||||||
|
@work.final_score = format("%.2f",final_score.to_f)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
if @work.save
|
||||||
|
respond_to do |format|
|
||||||
|
format.js
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
#添加评分的回复
|
||||||
|
def add_score_reply
|
||||||
|
@score = StudentWorksScore.find params[:score_id]
|
||||||
|
@jour = @score.journals_for_messages.new(:user_id => User.current.id,:notes =>params[:message], :reply_id => 0)
|
||||||
|
if @jour.save
|
||||||
|
@status = 1
|
||||||
|
else
|
||||||
|
@status = 2
|
||||||
|
end
|
||||||
|
respond_to do |format|
|
||||||
|
format.js
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
#删除评分的回复
|
||||||
|
def destroy_score_reply
|
||||||
|
@jour = JournalsForMessage.find params[:jour_id]
|
||||||
|
if @jour.destroy
|
||||||
|
respond_to do |format|
|
||||||
|
format.js
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
#为作品点赞
|
||||||
|
def praise_student_work
|
||||||
|
pt = PraiseTread.new
|
||||||
|
pt.user_id = User.current.id
|
||||||
|
pt.praise_tread_object_id = @work.id
|
||||||
|
pt.praise_tread_object_type = "StudentWork"
|
||||||
|
pt.praise_or_tread = 1
|
||||||
|
if pt.save
|
||||||
|
respond_to do |format|
|
||||||
|
format.js
|
||||||
|
end
|
||||||
|
else
|
||||||
|
render_404
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
#缺评列表显示
|
||||||
|
def student_work_absence_penalty
|
||||||
|
order = params[:order] || "desc"
|
||||||
|
if @homework.student_works.empty?
|
||||||
|
@stundet_works = []
|
||||||
|
else
|
||||||
|
work_ids = "(" + @homework.student_works.map(&:id).join(",") + ")"
|
||||||
|
@stundet_works = StudentWork.find_by_sql("SELECT *,(all_count - has_count) AS absence FROM(
|
||||||
|
SELECT * ,
|
||||||
|
(SELECT evaluation_num FROM homework_detail_manuals WHERE homework_detail_manuals.homework_common_id = #{@homework.id}) AS all_count,
|
||||||
|
(SELECT COUNT(*) FROM `student_works_scores` WHERE user_id = student_works.user_id AND student_work_id IN #{work_ids}) AS has_count
|
||||||
|
FROM `student_works`
|
||||||
|
WHERE homework_common_id = #{@homework.id}
|
||||||
|
) AS table_1
|
||||||
|
ORDER BY absence #{order}")
|
||||||
|
end
|
||||||
|
@order = order == "desc" ? "asc" : "desc"
|
||||||
|
respond_to do |format|
|
||||||
|
format.html
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
#导出缺评列表
|
||||||
|
def absence_penalty_list
|
||||||
|
if @homework.student_works.empty?
|
||||||
|
@stundet_works = []
|
||||||
|
else
|
||||||
|
work_ids = "(" + @homework.student_works.map(&:id).join(",") + ")"
|
||||||
|
@stundet_works = StudentWork.find_by_sql("SELECT * FROM (SELECT *,(all_count - has_count) AS absence FROM(
|
||||||
|
SELECT * ,
|
||||||
|
(SELECT evaluation_num FROM homework_detail_manuals WHERE homework_detail_manuals.homework_common_id = #{@homework.id}) AS all_count,
|
||||||
|
(SELECT COUNT(*) FROM `student_works_scores` WHERE user_id = student_works.user_id AND student_work_id IN #{work_ids}) AS has_count
|
||||||
|
FROM `student_works`
|
||||||
|
WHERE homework_common_id = #{@homework.id}
|
||||||
|
) AS table_1) AS table_2
|
||||||
|
where absence > 0 order by absence")
|
||||||
|
end
|
||||||
|
respond_to do |format|
|
||||||
|
format.xls {
|
||||||
|
send_data(absence_penalty_list_xls(@stundet_works), :type => "text/excel;charset=utf-8; header=present",
|
||||||
|
:filename => "#{@course.teacher.lastname.to_s + @course.teacher.firstname}_#{@course.name}_#{@course.time.to_s + @course.term}_#{@homework.name}#{l(:excel_absence_list)}.xls")
|
||||||
|
}
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
#导出匿评列表
|
||||||
|
def evaluation_list
|
||||||
|
respond_to do |format|
|
||||||
|
format.xls {
|
||||||
|
send_data(evaluation_list_xls(@homework.student_works), :type => "text/excel;charset=utf-8; header=present",
|
||||||
|
:filename => "#{@course.teacher.lastname.to_s + @course.teacher.firstname}_#{@course.name}_#{@course.time.to_s + @course.term}_#{@homework.name}#{l(:excel_evaluation_list)}.xls")
|
||||||
|
}
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
#获取作业
|
||||||
|
def find_homework
|
||||||
|
@homework = HomeworkCommon.find params[:homework]
|
||||||
|
@course = @homework.course
|
||||||
|
rescue
|
||||||
|
render_404
|
||||||
|
end
|
||||||
|
#获取作品
|
||||||
|
def find_work
|
||||||
|
@work = StudentWork.find params[:id]
|
||||||
|
@homework = @work.homework_common
|
||||||
|
@course = @homework.course
|
||||||
|
rescue
|
||||||
|
render_404
|
||||||
|
end
|
||||||
|
|
||||||
|
#是不是当前课程的成员
|
||||||
|
#当前课程成员才可以看到作品列表
|
||||||
|
def member_of_course
|
||||||
|
render_403 unless User.current.member_of_course?(@course) || User.current.admin?
|
||||||
|
end
|
||||||
|
|
||||||
|
#判断是不是当前作品的提交者
|
||||||
|
#提交者 && (非匿评作业 || 未开启匿评) 可以编辑作品
|
||||||
|
def author_of_work
|
||||||
|
render_403 unless (User.current.id == @work.user_id || User.current.admin?) && (@homework.homework_type != 1 || @homework.homework_detail_manual.comment_status == 1 )
|
||||||
|
end
|
||||||
|
|
||||||
|
def teacher_of_course
|
||||||
|
render_403 unless User.current.allowed_to?(:as_teacher,@course)
|
||||||
|
end
|
||||||
|
|
||||||
|
#根据条件过滤作业结果
|
||||||
|
def search_homework_member homeworks,name
|
||||||
|
name = name.downcase
|
||||||
|
select_homework = homeworks.select{ |homework|
|
||||||
|
homework.user[:login].to_s.downcase.include?(name) || homework.user.user_extensions[:student_id].to_s.downcase.include?(name) || (homework.user[:lastname].to_s.downcase + homework.user[:firstname].to_s.downcase).include?(name)
|
||||||
|
}
|
||||||
|
select_homework
|
||||||
|
end
|
||||||
|
|
||||||
|
#作品列表转换为excel
|
||||||
|
def homework_to_xls items
|
||||||
|
xls_report = StringIO.new
|
||||||
|
book = Spreadsheet::Workbook.new
|
||||||
|
sheet1 = book.create_worksheet :name => "homework"
|
||||||
|
blue = Spreadsheet::Format.new :color => :blue, :weight => :bold, :size => 10
|
||||||
|
sheet1.row(0).default_format = blue
|
||||||
|
sheet1.row(0).concat([l(:excel_user_id),l(:excel_user_name),l(:excel_nickname),l(:excel_student_id),l(:excel_mail),l(:excel_homework_name),
|
||||||
|
l(:excel_t_score),l(:excel_ta_score),l(:excel_n_score),l(:excel_f_score),l(:excel_commit_time)])
|
||||||
|
count_row = 1
|
||||||
|
items.each do |homework|
|
||||||
|
sheet1[count_row,0]=homework.user.id
|
||||||
|
sheet1[count_row,1] = homework.user.lastname.to_s + homework.user.firstname.to_s
|
||||||
|
sheet1[count_row,2] = homework.user.login
|
||||||
|
sheet1[count_row,3] = homework.user.user_extensions.student_id
|
||||||
|
sheet1[count_row,4] = homework.user.mail
|
||||||
|
sheet1[count_row,5] = homework.name
|
||||||
|
sheet1[count_row,6] = homework.teacher_score.nil? ? l(:label_without_score) : format("%.2f",homework.teacher_score)
|
||||||
|
sheet1[count_row,7] = homework.teaching_asistant_score.nil? ? l(:label_without_score) : format("%.2f",homework.teaching_asistant_score)
|
||||||
|
sheet1[count_row,8] = homework.student_score.nil? ? l(:label_without_score) : format("%.2f",homework.student_score)
|
||||||
|
sheet1[count_row,9] = homework.final_score.nil? ? l(:label_without_score) : format("%.2f",homework.final_score)
|
||||||
|
sheet1[count_row,10] = format_time(homework.created_at)
|
||||||
|
count_row += 1
|
||||||
|
end
|
||||||
|
book.write xls_report
|
||||||
|
xls_report.string
|
||||||
|
end
|
||||||
|
|
||||||
|
#缺评列表转换为excel
|
||||||
|
def absence_penalty_list_xls items
|
||||||
|
xls_report = StringIO.new
|
||||||
|
book = Spreadsheet::Workbook.new
|
||||||
|
sheet1 = book.create_worksheet :name => "homework"
|
||||||
|
blue = Spreadsheet::Format.new :color => :blue, :weight => :bold, :size => 10
|
||||||
|
sheet1.row(0).default_format = blue
|
||||||
|
|
||||||
|
sheet1.row(0).concat([l(:excel_student_id),l(:excel_nickname),l(:excel_user_name),l(:lable_all_penalty),l(:lable_has_penalty),l(:lable_absence_penalty)])
|
||||||
|
count_row = 1
|
||||||
|
items.each do |homework|
|
||||||
|
sheet1[count_row,0] = homework.user.user_extensions.student_id
|
||||||
|
sheet1[count_row,1] = homework.user.login
|
||||||
|
sheet1[count_row,2] = homework.user.lastname.to_s + homework.user.firstname.to_s
|
||||||
|
sheet1[count_row,3] = homework.all_count
|
||||||
|
sheet1[count_row,4] = homework.has_count
|
||||||
|
sheet1[count_row,5] = homework.absence
|
||||||
|
count_row += 1
|
||||||
|
end
|
||||||
|
book.write xls_report
|
||||||
|
xls_report.string
|
||||||
|
end
|
||||||
|
|
||||||
|
#匿评列表转换为excel
|
||||||
|
def evaluation_list_xls items
|
||||||
|
xls_report = StringIO.new
|
||||||
|
book = Spreadsheet::Workbook.new
|
||||||
|
sheet1 = book.create_worksheet :name => "homework"
|
||||||
|
blue = Spreadsheet::Format.new :color => :blue, :weight => :bold, :size => 10
|
||||||
|
sheet1.row(0).default_format = blue
|
||||||
|
|
||||||
|
sheet1.row(0).concat([l(:label_work_name),l(:label_work_id),l(:label_work_autor),l(:label_evaluation_id),l(:label_evaluation_name),
|
||||||
|
l(:label_evaluation_score),l(:label_evaluation_common),l(:label_evaluation_time)])
|
||||||
|
count_row = 1
|
||||||
|
items.each do |homework|
|
||||||
|
homework.student_works_scores.where(:reviewer_role => 3).each do |score|
|
||||||
|
sheet1[count_row,0] = homework.name
|
||||||
|
sheet1[count_row,1] = homework.user.user_extensions.student_id
|
||||||
|
sheet1[count_row,2] = homework.user.show_name
|
||||||
|
sheet1[count_row,3] = score.user.user_extensions.student_id
|
||||||
|
sheet1[count_row,4] = score.user.show_name
|
||||||
|
sheet1[count_row,5] = score.score
|
||||||
|
sheet1[count_row,6] = score.comment
|
||||||
|
sheet1[count_row,7] = format_time(score.created_at)
|
||||||
|
count_row += 1
|
||||||
|
end
|
||||||
|
end
|
||||||
|
book.write xls_report
|
||||||
|
xls_report.string
|
||||||
|
end
|
||||||
|
end
|
@ -0,0 +1,59 @@
|
|||||||
|
# Time 2015-01-26 17:12:23
|
||||||
|
# Author lizanle
|
||||||
|
# Description 显示和清理系统日志
|
||||||
|
class SystemLogController < ApplicationController
|
||||||
|
|
||||||
|
before_filter :require_admin
|
||||||
|
# 默认每页显示20条记录
|
||||||
|
PER_PAGE = 20
|
||||||
|
layout "base"
|
||||||
|
include SystemLogHelper
|
||||||
|
|
||||||
|
# Time 2015-01-26 17:12:46
|
||||||
|
# Author lizanle
|
||||||
|
# Description 查看所有日志
|
||||||
|
def index
|
||||||
|
@logs = SystemLog.logo_data(params[:page]||1, params[:per]||PER_PAGE, params[:search], params[:day])
|
||||||
|
end
|
||||||
|
|
||||||
|
# Time 2015-01-26 14:42:38
|
||||||
|
# Author lizanle
|
||||||
|
# Description 清除日志
|
||||||
|
def clear
|
||||||
|
SystemLog.clear params[:day]
|
||||||
|
redirect_to :action => :index
|
||||||
|
end
|
||||||
|
|
||||||
|
# Time 2015-01-26 17:24:25
|
||||||
|
# Author lizanle
|
||||||
|
# Description 访问分析
|
||||||
|
def access_analysis
|
||||||
|
#解析日志,然后逆序
|
||||||
|
@log_result = SystemLog.analysis(params[:day]).reverse[1...-1]
|
||||||
|
@access_module = Hash.new
|
||||||
|
#日誌可能為空
|
||||||
|
if @log_result && !@log_result.empty?
|
||||||
|
#将数组中的模块访问统计出来放到hash中 每条记录的第四个值是Controller#action的形式
|
||||||
|
@log_result.collect! { |r| @access_module[r[3]].nil? ?
|
||||||
|
@access_module[r[3]] = 1 : @access_module[r[3]] +=1 }
|
||||||
|
# 去掉key可能为空记录 排序,然后取逆序
|
||||||
|
@access_module = @access_module.delete_if { |k, v| k.nil? }.sort_by { |key, val| val }.reverse
|
||||||
|
else
|
||||||
|
@access_module
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
# Time 2015-01-26 17:24:36
|
||||||
|
# Author lizanle
|
||||||
|
# Description 耗时分析
|
||||||
|
def time_analysis
|
||||||
|
#解析日志
|
||||||
|
@log_result = SystemLog.analysis(params[:day]).reverse[1...-1]
|
||||||
|
if @log_result && !@log_result.empty?
|
||||||
|
#分页
|
||||||
|
@log_result = Kaminari.paginate_array(@log_result).page(params[:page]||1).per(params[:per]||PER_PAGE)
|
||||||
|
else
|
||||||
|
@log_result = []
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue