| @@ -19,9 +19,7 @@ | |||
| /config/newrelic.yml | |||
| /public/images/avatars/* | |||
| /Gemfile | |||
| /Gemfile.lock | |||
| /db/schema.rb | |||
| /Gemfile.lock | |||
| /lib/plugins/acts_as_versioned/test/debug.log | |||
| .rbenv-gemsets | |||
| .DS_Store | |||
| @@ -1,3 +1,3 @@ | |||
| #safe table | |||
| #Mon Jan 05 10:27:54 CST 2015 | |||
| connections=connections.15 | |||
| #safe table | |||
| #Mon Jan 05 10:27:54 CST 2015 | |||
| connections=connections.15 | |||
| @@ -1,4 +1,4 @@ | |||
| #safe table | |||
| #Mon Jan 05 10:27:54 CST 2015 | |||
| defaultConnection=defaultConnection.15 | |||
| sites=sites.15 | |||
| #safe table | |||
| #Mon Jan 05 10:27:54 CST 2015 | |||
| defaultConnection=defaultConnection.15 | |||
| sites=sites.15 | |||
| @@ -1,3 +1,3 @@ | |||
| #safe table | |||
| #Mon Jan 05 10:27:28 CST 2015 | |||
| webservers=webservers.12 | |||
| #safe table | |||
| #Mon Jan 05 10:27:28 CST 2015 | |||
| webservers=webservers.12 | |||
| @@ -1,3 +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"/> | |||
| <?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> | |||
| @@ -1,2 +1,2 @@ | |||
| 1420424676858 Delete resource 'trustie2' | |||
| 1420424775104 Delete resource 'trustie2' | |||
| 1420424676858 Delete resource 'trustie2' | |||
| 1420424775104 Delete resource 'trustie2' | |||
| @@ -1,7 +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> | |||
| <?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,2 +1,2 @@ | |||
| --color | |||
| --require spec_helper | |||
| --color | |||
| --require spec_helper | |||
| @@ -0,0 +1,394 @@ | |||
| PATH | |||
| remote: lib/gitlab-cli | |||
| specs: | |||
| gitlab (3.2.0) | |||
| httparty | |||
| terminal-table | |||
| PATH | |||
| remote: lib/grack | |||
| specs: | |||
| grack (2.0.2) | |||
| rack (~> 1.4.5) | |||
| PATH | |||
| remote: lib/rails_kindeditor | |||
| specs: | |||
| rails_kindeditor (0.4.5) | |||
| carrierwave | |||
| mini_magick | |||
| PATH | |||
| remote: lib/wechat | |||
| specs: | |||
| wechat (0.7.1) | |||
| activerecord (>= 3.2, < 5.1.x) | |||
| http (~> 1.0, >= 1.0.1) | |||
| nokogiri (>= 1.6.0) | |||
| thor | |||
| GEM | |||
| remote: https://gems.ruby-china.com/ | |||
| specs: | |||
| actionmailer (3.2.22.5) | |||
| actionpack (= 3.2.22.5) | |||
| mail (~> 2.5.4) | |||
| actionpack (3.2.22.5) | |||
| activemodel (= 3.2.22.5) | |||
| activesupport (= 3.2.22.5) | |||
| builder (~> 3.0.0) | |||
| erubis (~> 2.7.0) | |||
| journey (~> 1.0.4) | |||
| rack (~> 1.4.5) | |||
| rack-cache (~> 1.2) | |||
| rack-test (~> 0.6.1) | |||
| sprockets (~> 2.2.1) | |||
| activemodel (3.2.22.5) | |||
| activesupport (= 3.2.22.5) | |||
| builder (~> 3.0.0) | |||
| activerecord (3.2.22.5) | |||
| activemodel (= 3.2.22.5) | |||
| activesupport (= 3.2.22.5) | |||
| arel (~> 3.0.2) | |||
| tzinfo (~> 0.3.29) | |||
| activeresource (3.2.22.5) | |||
| activemodel (= 3.2.22.5) | |||
| activesupport (= 3.2.22.5) | |||
| activesupport (3.2.22.5) | |||
| i18n (~> 0.6, >= 0.6.4) | |||
| multi_json (~> 1.0) | |||
| acts-as-taggable-on (2.4.1) | |||
| rails (>= 3, < 5) | |||
| addressable (2.7.0) | |||
| public_suffix (>= 2.0.2, < 5.0) | |||
| ansi (1.5.0) | |||
| arel (3.0.3) | |||
| awesome_print (1.8.0) | |||
| axiom-types (0.1.1) | |||
| descendants_tracker (~> 0.0.4) | |||
| ice_nine (~> 0.11.0) | |||
| thread_safe (~> 0.3, >= 0.3.1) | |||
| better_errors (1.1.0) | |||
| coderay (>= 1.0.0) | |||
| erubis (>= 2.6.6) | |||
| binding_of_caller (0.8.0) | |||
| debug_inspector (>= 0.0.1) | |||
| builder (3.0.0) | |||
| byebug (11.0.1) | |||
| carrierwave (0.11.2) | |||
| activemodel (>= 3.2.0) | |||
| activesupport (>= 3.2.0) | |||
| json (>= 1.7) | |||
| mime-types (>= 1.16) | |||
| mimemagic (>= 0.3.0) | |||
| certified (1.0.0) | |||
| chinese_pinyin (1.0.2) | |||
| climate_control (0.2.0) | |||
| cocaine (0.5.8) | |||
| climate_control (>= 0.0.3, < 1.0) | |||
| coderay (1.1.2) | |||
| coercible (1.0.0) | |||
| descendants_tracker (~> 0.0.1) | |||
| coffee-rails (3.2.2) | |||
| coffee-script (>= 2.2.0) | |||
| railties (~> 3.2.0) | |||
| coffee-script (2.4.1) | |||
| coffee-script-source | |||
| execjs | |||
| coffee-script-source (1.12.2) | |||
| daemons (1.3.1) | |||
| debug_inspector (0.0.3) | |||
| delayed_job (4.1.8) | |||
| activesupport (>= 3.0, < 6.1) | |||
| delayed_job_active_record (4.1.4) | |||
| activerecord (>= 3.0, < 6.1) | |||
| delayed_job (>= 3.0, < 5) | |||
| descendants_tracker (0.0.4) | |||
| thread_safe (~> 0.3, >= 0.3.1) | |||
| domain_name (0.5.20190701) | |||
| unf (>= 0.0.5, < 1.0.0) | |||
| elasticsearch (7.3.0) | |||
| elasticsearch-api (= 7.3.0) | |||
| elasticsearch-transport (= 7.3.0) | |||
| elasticsearch-api (7.3.0) | |||
| multi_json | |||
| elasticsearch-model (7.0.0) | |||
| activesupport (> 3) | |||
| elasticsearch (> 1) | |||
| hashie | |||
| elasticsearch-rails (7.0.0) | |||
| elasticsearch-transport (7.3.0) | |||
| faraday | |||
| multi_json | |||
| equalizer (0.0.11) | |||
| erubis (2.7.0) | |||
| execjs (2.7.0) | |||
| factory_girl (4.9.0) | |||
| activesupport (>= 3.0.0) | |||
| factory_girl_rails (4.9.0) | |||
| factory_girl (~> 4.9.0) | |||
| railties (>= 3.0.0) | |||
| faraday (0.17.0) | |||
| multipart-post (>= 1.2, < 3) | |||
| fastercsv (1.5.5) | |||
| ffi (1.11.1) | |||
| grape (0.9.0) | |||
| activesupport | |||
| builder | |||
| hashie (>= 2.1.0) | |||
| multi_json (>= 1.3.2) | |||
| multi_xml (>= 0.5.2) | |||
| rack (>= 1.3.0) | |||
| rack-accept | |||
| rack-mount | |||
| virtus (>= 1.0.0) | |||
| grape-entity (0.4.5) | |||
| activesupport | |||
| multi_json (>= 1.3.2) | |||
| grape-swagger (0.20.0) | |||
| awesome_print | |||
| grape | |||
| grape-entity | |||
| hashie (3.6.0) | |||
| hike (1.2.3) | |||
| htmlentities (4.3.4) | |||
| http (1.0.4) | |||
| addressable (~> 2.3) | |||
| http-cookie (~> 1.0) | |||
| http-form_data (~> 1.0.1) | |||
| http_parser.rb (~> 0.6.0) | |||
| http-accept (1.7.0) | |||
| http-cookie (1.0.3) | |||
| domain_name (~> 0.5) | |||
| http-form_data (1.0.3) | |||
| http_parser.rb (0.6.0) | |||
| httparty (0.16.2) | |||
| multi_xml (>= 0.5.2) | |||
| i18n (0.6.11) | |||
| ice_nine (0.11.2) | |||
| iconv (1.0.8) | |||
| jenkins_api_client (1.5.3) | |||
| json (>= 1.0) | |||
| mixlib-shellout (>= 1.1.0) | |||
| nokogiri (~> 1.6) | |||
| socksify (>= 1.7.0) | |||
| terminal-table (>= 1.4.0) | |||
| thor (>= 0.16.0) | |||
| journey (1.0.4) | |||
| jquery-rails (2.0.3) | |||
| railties (>= 3.1.0, < 5.0) | |||
| thor (~> 0.14) | |||
| json (1.8.6) | |||
| kaminari (0.17.0) | |||
| actionpack (>= 3.0.0) | |||
| activesupport (>= 3.0.0) | |||
| mail (2.5.5) | |||
| mime-types (~> 1.16) | |||
| treetop (~> 1.4.8) | |||
| method_source (0.9.2) | |||
| mime-types (1.25.1) | |||
| mimemagic (0.3.3) | |||
| mini_magick (4.9.5) | |||
| mini_portile2 (2.4.0) | |||
| mixlib-shellout (3.0.7) | |||
| multi_json (1.14.1) | |||
| multi_xml (0.6.0) | |||
| multipart-post (2.1.1) | |||
| mysql2 (0.3.18) | |||
| net-ldap (0.3.1) | |||
| net-ssh (2.9.1) | |||
| netrc (0.11.0) | |||
| nokogiri (1.10.4) | |||
| mini_portile2 (~> 2.4.0) | |||
| paperclip (3.5.4) | |||
| activemodel (>= 3.0.0) | |||
| activesupport (>= 3.0.0) | |||
| cocaine (~> 0.5.3) | |||
| mime-types | |||
| polyglot (0.3.5) | |||
| power_assert (1.1.5) | |||
| pry (0.12.2) | |||
| coderay (~> 1.1.0) | |||
| method_source (~> 0.9.0) | |||
| pry-byebug (3.7.0) | |||
| byebug (~> 11.0) | |||
| pry (~> 0.10) | |||
| public_suffix (4.0.1) | |||
| rack (1.4.7) | |||
| rack-accept (0.4.5) | |||
| rack (>= 0.4) | |||
| rack-cache (1.9.0) | |||
| rack (>= 0.4) | |||
| rack-cors (1.0.3) | |||
| rack-mini-profiler (0.9.9.2) | |||
| rack (>= 1.2.0) | |||
| rack-mount (0.8.3) | |||
| rack (>= 1.0.0) | |||
| rack-openid (1.4.2) | |||
| rack (>= 1.1.0) | |||
| ruby-openid (>= 2.1.8) | |||
| rack-raw-upload (1.1.1) | |||
| multi_json | |||
| rack-ssl (1.3.4) | |||
| rack | |||
| rack-test (0.6.3) | |||
| rack (>= 1.0) | |||
| rails (3.2.22.5) | |||
| actionmailer (= 3.2.22.5) | |||
| actionpack (= 3.2.22.5) | |||
| activerecord (= 3.2.22.5) | |||
| activeresource (= 3.2.22.5) | |||
| activesupport (= 3.2.22.5) | |||
| bundler (~> 1.0) | |||
| railties (= 3.2.22.5) | |||
| railties (3.2.22.5) | |||
| actionpack (= 3.2.22.5) | |||
| activesupport (= 3.2.22.5) | |||
| rack-ssl (~> 1.3.2) | |||
| rake (>= 0.8.7) | |||
| rdoc (~> 3.4) | |||
| thor (>= 0.14.6, < 2.0) | |||
| rake (13.0.0) | |||
| rb-fsevent (0.10.3) | |||
| rb-inotify (0.10.0) | |||
| ffi (~> 1.0) | |||
| rdoc (3.12.2) | |||
| json (~> 1.4) | |||
| redis (4.1.3) | |||
| redis-actionpack (3.2.4) | |||
| actionpack (~> 3.2.0) | |||
| redis-rack (~> 1.4.4) | |||
| redis-store (~> 1.1.4) | |||
| redis-activesupport (3.2.5) | |||
| activesupport (~> 3.2.0) | |||
| redis-store (~> 1.1.0) | |||
| redis-rack (1.4.4) | |||
| rack (~> 1.4.0) | |||
| redis-store (~> 1.1.4) | |||
| redis-rails (3.2.4) | |||
| redis-actionpack (~> 3.2.4) | |||
| redis-activesupport (~> 3.2.4) | |||
| redis-store (~> 1.1.4) | |||
| redis-store (1.1.7) | |||
| redis (>= 2.2) | |||
| rest-client (2.1.0) | |||
| http-accept (>= 1.7.0, < 2.0) | |||
| http-cookie (>= 1.0.2, < 2.0) | |||
| mime-types (>= 1.16, < 4.0) | |||
| netrc (~> 0.8) | |||
| rich (1.4.6) | |||
| jquery-rails | |||
| kaminari | |||
| mime-types | |||
| paperclip | |||
| rack-raw-upload | |||
| rails (>= 3.2.0) | |||
| sass-rails | |||
| rmagick (2.13.4) | |||
| ruby-ole (1.2.12.2) | |||
| ruby-openid (2.1.8) | |||
| rubyzip (1.3.0) | |||
| sass (3.7.4) | |||
| sass-listen (~> 4.0.0) | |||
| sass-listen (4.0.0) | |||
| rb-fsevent (~> 0.9, >= 0.9.4) | |||
| rb-inotify (~> 0.9, >= 0.9.7) | |||
| sass-rails (3.2.6) | |||
| railties (~> 3.2.0) | |||
| sass (>= 3.1.10) | |||
| tilt (~> 1.3) | |||
| seems_rateable (1.0.13) | |||
| jquery-rails | |||
| rails | |||
| simple_xlsx_reader (1.0.4) | |||
| nokogiri | |||
| rubyzip | |||
| socksify (1.7.1) | |||
| spreadsheet (1.2.4) | |||
| ruby-ole (>= 1.0) | |||
| sprockets (2.2.3) | |||
| hike (~> 1.2) | |||
| multi_json (~> 1.0) | |||
| rack (~> 1.0) | |||
| tilt (~> 1.1, != 1.3.0) | |||
| terminal-table (1.8.0) | |||
| unicode-display_width (~> 1.1, >= 1.1.1) | |||
| test-unit (3.3.4) | |||
| power_assert | |||
| thor (0.20.3) | |||
| thread_safe (0.3.6) | |||
| tilt (1.4.1) | |||
| treetop (1.4.15) | |||
| polyglot | |||
| polyglot (>= 0.3.1) | |||
| tzinfo (0.3.55) | |||
| uglifier (4.2.0) | |||
| execjs (>= 0.3.0, < 3) | |||
| unf (0.1.4) | |||
| unf_ext | |||
| unf_ext (0.0.7.6) | |||
| unicode-display_width (1.6.0) | |||
| virtus (1.0.5) | |||
| axiom-types (~> 0.1) | |||
| coercible (~> 1.0) | |||
| descendants_tracker (~> 0.0, >= 0.0.3) | |||
| equalizer (~> 0.0, >= 0.0.9) | |||
| PLATFORMS | |||
| ruby | |||
| DEPENDENCIES | |||
| acts-as-taggable-on (= 2.4.1) | |||
| ansi | |||
| better_errors (~> 1.1.0) | |||
| binding_of_caller | |||
| builder (= 3.0.0) | |||
| certified | |||
| chinese_pinyin | |||
| coderay (~> 1.1.0) | |||
| coffee-rails (~> 3.2.1) | |||
| daemons | |||
| delayed_job_active_record | |||
| elasticsearch-model | |||
| elasticsearch-rails | |||
| factory_girl_rails | |||
| fastercsv (~> 1.5.0) | |||
| gitlab! | |||
| grack! | |||
| grape (~> 0.9.0) | |||
| grape-entity (= 0.4.5) | |||
| grape-swagger | |||
| htmlentities | |||
| i18n (~> 0.6.0) | |||
| iconv | |||
| jenkins_api_client | |||
| jquery-rails (~> 2.0.2) | |||
| kaminari | |||
| mysql2 (= 0.3.18) | |||
| net-ldap (~> 0.3.1) | |||
| net-ssh (= 2.9.1) | |||
| nokogiri | |||
| paperclip (~> 3.5.4) | |||
| pry-byebug | |||
| rack-cors | |||
| rack-mini-profiler (~> 0.9.3) | |||
| rack-openid | |||
| rails (~> 3.2) | |||
| rails_kindeditor! | |||
| redis-rails | |||
| rest-client | |||
| rich (= 1.4.6) | |||
| rmagick (~> 2.13.1) | |||
| ruby-ole | |||
| ruby-openid (~> 2.1.4) | |||
| rubyzip | |||
| sass-rails (~> 3.2.3) | |||
| seems_rateable (~> 1.0.13) | |||
| simple_xlsx_reader | |||
| spreadsheet | |||
| test-unit (~> 3.0) | |||
| uglifier (>= 1.0.3) | |||
| wechat! | |||
| BUNDLED WITH | |||
| 1.17.3 | |||
| @@ -1,40 +1,40 @@ | |||
| # More info at https://github.com/guard/guard#readme | |||
| # guard 'rails' do | |||
| # watch('Gemfile.lock') | |||
| # watch(%r{^(config|lib)/.*}) | |||
| # end | |||
| # | |||
| guard 'spork', :test_unit => true, :test_unit_env => {'RAILS_ENV' => 'test'}, :wait => 60 do | |||
| watch(%r{app/models/.+\.rb}) | |||
| watch('config/application.rb') | |||
| watch('config/environment.rb') | |||
| watch('config/environments/test.rb') | |||
| watch(%r{^config/initializers/.+\.rb$}) | |||
| watch('Gemfile.lock') | |||
| watch('spec/spec_helper.rb') { :rspec } | |||
| watch('test/test_helper.rb') { :test_unit } | |||
| watch(%r{features/support/}) { :cucumber } | |||
| end | |||
| guard :test, :drb => true, :all_after_pass => false, :all_on_start => false do | |||
| watch(%r{^test/.+_test\.rb$}) | |||
| watch('test/test_helper.rb') { 'test' } | |||
| # Non-rails | |||
| watch(%r{^lib/(.+)\.rb$}) { |m| "test/#{m[1]}_test.rb" } | |||
| # Rails 4 | |||
| # watch(%r{^app/(.+)\.rb}) { |m| "test/#{m[1]}_test.rb" } | |||
| # watch(%r{^app/controllers/application_controller\.rb}) { 'test/controllers' } | |||
| # watch(%r{^app/controllers/(.+)_controller\.rb}) { |m| "test/integration/#{m[1]}_test.rb" } | |||
| # watch(%r{^app/views/(.+)_mailer/.+}) { |m| "test/mailers/#{m[1]}_mailer_test.rb" } | |||
| # watch(%r{^lib/(.+)\.rb}) { |m| "test/lib/#{m[1]}_test.rb" } | |||
| # Rails < 4 | |||
| watch(%r{^app/models/(.+)\.rb$}) { |m| "test/unit/#{m[1]}_test.rb" } | |||
| watch(%r{^app/controllers/(.+)\.rb$}) { |m| "test/functional/#{m[1]}_test.rb" } | |||
| watch(%r{^app/views/(.+)/.+\.erb$}) { |m| "test/functional/#{m[1]}_controller_test.rb" } | |||
| watch(%r{^app/views/.+$}) { 'test/integration' } | |||
| watch('app/controllers/application_controller.rb') { ['test/functional', 'test/integration'] } | |||
| end | |||
| # More info at https://github.com/guard/guard#readme | |||
| # guard 'rails' do | |||
| # watch('Gemfile.lock') | |||
| # watch(%r{^(config|lib)/.*}) | |||
| # end | |||
| # | |||
| guard 'spork', :test_unit => true, :test_unit_env => {'RAILS_ENV' => 'test'}, :wait => 60 do | |||
| watch(%r{app/models/.+\.rb}) | |||
| watch('config/application.rb') | |||
| watch('config/environment.rb') | |||
| watch('config/environments/test.rb') | |||
| watch(%r{^config/initializers/.+\.rb$}) | |||
| watch('Gemfile.lock') | |||
| watch('spec/spec_helper.rb') { :rspec } | |||
| watch('test/test_helper.rb') { :test_unit } | |||
| watch(%r{features/support/}) { :cucumber } | |||
| end | |||
| guard :test, :drb => true, :all_after_pass => false, :all_on_start => false do | |||
| watch(%r{^test/.+_test\.rb$}) | |||
| watch('test/test_helper.rb') { 'test' } | |||
| # Non-rails | |||
| watch(%r{^lib/(.+)\.rb$}) { |m| "test/#{m[1]}_test.rb" } | |||
| # Rails 4 | |||
| # watch(%r{^app/(.+)\.rb}) { |m| "test/#{m[1]}_test.rb" } | |||
| # watch(%r{^app/controllers/application_controller\.rb}) { 'test/controllers' } | |||
| # watch(%r{^app/controllers/(.+)_controller\.rb}) { |m| "test/integration/#{m[1]}_test.rb" } | |||
| # watch(%r{^app/views/(.+)_mailer/.+}) { |m| "test/mailers/#{m[1]}_mailer_test.rb" } | |||
| # watch(%r{^lib/(.+)\.rb}) { |m| "test/lib/#{m[1]}_test.rb" } | |||
| # Rails < 4 | |||
| watch(%r{^app/models/(.+)\.rb$}) { |m| "test/unit/#{m[1]}_test.rb" } | |||
| watch(%r{^app/controllers/(.+)\.rb$}) { |m| "test/functional/#{m[1]}_test.rb" } | |||
| watch(%r{^app/views/(.+)/.+\.erb$}) { |m| "test/functional/#{m[1]}_controller_test.rb" } | |||
| watch(%r{^app/views/.+$}) { 'test/integration' } | |||
| watch('app/controllers/application_controller.rb') { ['test/functional', 'test/integration'] } | |||
| end | |||
| @@ -1,5 +1,5 @@ | |||
| = Redmine | |||
| Redmine is a flexible project management web application written using Ruby on Rails framework. | |||
| More details can be found in the doc directory or on the official website http://www.redmine.org | |||
| = Redmine | |||
| Redmine is a flexible project management web application written using Ruby on Rails framework. | |||
| More details can be found in the doc directory or on the official website http://www.redmine.org | |||
| @@ -1,7 +1,7 @@ | |||
| #!/usr/bin/env rake | |||
| # Add your own tasks in files placed in lib/tasks ending in .rake, | |||
| # for example lib/tasks/capistrano.rake, and they will automatically be available to Rake. | |||
| require File.expand_path('../config/application', __FILE__) | |||
| RedmineApp::Application.load_tasks | |||
| #!/usr/bin/env rake | |||
| # Add your own tasks in files placed in lib/tasks ending in .rake, | |||
| # for example lib/tasks/capistrano.rake, and they will automatically be available to Rake. | |||
| require File.expand_path('../config/application', __FILE__) | |||
| RedmineApp::Application.load_tasks | |||
| @@ -54,6 +54,17 @@ module Mobile | |||
| return User.find(token.user_id) | |||
| end | |||
| # 通过另外一种方式验证当前用户 username, password | |||
| username = params[:username] | |||
| password = params[:password] | |||
| if username && password | |||
| us = UsersService.new | |||
| user = us.verify_user username, password | |||
| if user != nil | |||
| return user | |||
| end | |||
| end | |||
| nil | |||
| end | |||
| end | |||
| @@ -77,6 +88,7 @@ module Mobile | |||
| mount Apis::Resources | |||
| mount Apis::Syllabuses | |||
| mount Apis::Projects | |||
| mount Apis::Blockchains | |||
| add_swagger_documentation ({api_version: 'v1', base_path: '/api'}) if Rails.env.development? | |||
| @@ -1,60 +1,60 @@ | |||
| #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 | |||
| present :message, "无效的用户名或密码" | |||
| present :status,1 | |||
| 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 | |||
| #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 | |||
| present :message, "无效的用户名或密码" | |||
| present :status,1 | |||
| 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,289 @@ | |||
| #coding=utf-8 | |||
| module Mobile | |||
| module Apis | |||
| class Blockchains < Grape::API | |||
| resources :blockchains do | |||
| desc "创建项目" | |||
| params do | |||
| requires :username, type: String | |||
| requires :reponame, type: String | |||
| requires :password, type: String | |||
| # requires :genesis_content, type: String # 以太坊过期参数 | |||
| # requires :network_id, type: Integer | |||
| # requires :connect_ip, type: String | |||
| # requires :port, type: Integer | |||
| # requires :enode, type: String | |||
| # requires :node_id, type: String | |||
| # user_id, created_at, updated_at需要在程序中创建 | |||
| end | |||
| post 'create' do | |||
| authenticate! | |||
| ps = ProjectsService.new # 创建项目 | |||
| user = current_user | |||
| status, project = ps.createNewProjectBlockchain params,user | |||
| if status == 0 | |||
| # 表示项目创建成功 | |||
| # 创建版本库 | |||
| rs = RepositoriesService.new | |||
| params_repository = ActiveSupport::HashWithIndifferentAccess.new(identifier: project.name) | |||
| Rails.logger.info("!!!!!!!!!!!!!params_repository is: ") | |||
| Rails.logger.info(params_repository) | |||
| status, repository = rs.createNewRepoBlockchain project, params_repository | |||
| Rails.logger.info("!!!!!!!!!!!!!in line 34 repository identifier is:") | |||
| Rails.logger.info(repository.identifier) | |||
| gitlab_address = Redmine::Configuration['gitlab_address'] | |||
| gitUrl = gitlab_address.to_s+"/"+project.owner.to_s+"/"+ repository.identifier + "."+"git" | |||
| Rails.logger.info("!!!!!!!!!!!!git url is :" + gitUrl) | |||
| gitUrl = Base64.encode64(gitUrl) | |||
| if status == 0 | |||
| bs = BlockchainsService.new | |||
| status, blockchain = bs.create_item project, user, params # 创建blockchain item | |||
| if status == 0 | |||
| # 表示插入blockchains表成功了 | |||
| # bpcs = BlockchainProjectClientsService.new # 删除以太坊过期内容 | |||
| # status, bpc = bpcs.create_item project, user, params | |||
| # if status == 0 | |||
| # 表示插入blockchain_project_clients表也成功了 | |||
| present :gitUrl, gitUrl | |||
| # end | |||
| end | |||
| present :status, status # status -1:表示创建失败; 0:表示创建成功 | |||
| end | |||
| end | |||
| present :status, status # status -1:表示创建失败; 0:表示创建成功 | |||
| end | |||
| desc "获取用户已经创建的东西" | |||
| params do | |||
| requires :username, type: String | |||
| requires :password, type: String | |||
| end | |||
| post 'get_already_things' do | |||
| authenticate! | |||
| bs = BlockchainsService.new | |||
| user = current_user | |||
| result_hash = bs.get_already_things(user) | |||
| present result_hash | |||
| end | |||
| desc "加入已经创建的项目" | |||
| params do | |||
| requires :username, type: String | |||
| requires :password, type: String | |||
| requires :repo_url, type: String | |||
| end | |||
| post 'join' do | |||
| authenticate! | |||
| # 根据repo_git_url找到repository对应的项目 | |||
| rs = RepositoriesService.new | |||
| status, project, reponame = rs.findProjectByRepoUrl(params[:repo_url]) | |||
| if project | |||
| blockchain = Blockchain.find_by_project_id(project.id) | |||
| if blockchain | |||
| {status:status, reponame: reponame} # 去除blockchains表中过期的attributes | |||
| else | |||
| {status:-1, message: '数据库有问题,blockchain信息不存在'} | |||
| end | |||
| else | |||
| {status:-1, message: '该项目不存在' } | |||
| end | |||
| end | |||
| ### | |||
| # | |||
| # 测试 | |||
| # ## | |||
| desc "测试" | |||
| get 'test' do | |||
| puts "pause" | |||
| end | |||
| desc "获取两次代码提交之间的区别" | |||
| params do | |||
| requires :username, type: String | |||
| requires :password, type: String | |||
| requires :shaList, type: Array[String] | |||
| requires :branch, type: String | |||
| requires :ownername, type: String | |||
| requires :reponame, type: String | |||
| end | |||
| post 'getCommitInfo' do | |||
| authenticate! | |||
| owner = User.find_by_login(params[:ownername]) | |||
| Rails.logger.info "1111111111111122222222!!!1111111111111111111111111111" | |||
| if owner | |||
| project = Project.find_by_user_id_name(owner.id, params[:reponame]) | |||
| if project | |||
| g = Gitlab.client # 用于通过gitlab api进行查询 | |||
| result = [] | |||
| branch_sha_array = [] # 存储分支branch上所有的commit sha | |||
| branch_commits = g.commits(project.gpid, :ref_name => params[:branch]) # 查询branch的所有commit | |||
| branch_commits.each do |branch_commit| | |||
| branch_sha_array << branch_commit.id | |||
| end | |||
| modificationLines = 0 | |||
| Rails.logger.info "111111111111111111111111111111111111111111111111111111" | |||
| params[:shaList].each do |sha| | |||
| Rails.logger.info project.gpid | |||
| commit = g.commit(project.gpid, sha) | |||
| if commit | |||
| if branch_sha_array.include?(commit.id) | |||
| # result << commit | |||
| result << true | |||
| else | |||
| Rails.logger.info "当前的commit不属于这个分支" | |||
| result << false # 表示当前的commit不属于这个分支 | |||
| end | |||
| else | |||
| result << false | |||
| end | |||
| Rails.logger.info "222222222222222222222222222222222222222222222" | |||
| # add by qiubing start | |||
| commit_diff = g.commit_diff(project.gpid, sha) | |||
| Rails.logger.info("111111111111111111qiubingqiubing1111111111111111111111111") | |||
| (0...commit_diff.length).each do |i| | |||
| tempDiff = commit_diff[i] | |||
| tempDiffArry = tempDiff.diff.split("\n") | |||
| (2...tempDiffArry.length).each do |j| | |||
| Rails.logger.info tempDiffArry[j] | |||
| if tempDiffArry[j][0] == "+" or tempDiffArry[j][0] == "-" | |||
| modificationLines += 1 | |||
| end | |||
| end | |||
| end | |||
| # add by qiubing end | |||
| end | |||
| # {status:0, result:result} | |||
| Rails.logger.info("ssssssssssssssssssssssssssssssssssssssucess!!!") | |||
| Rails.logger.info(0) | |||
| Rails.logger.info(result) | |||
| Rails.logger.info(modificationLines) | |||
| {status:0, result:result, modificationLines:modificationLines} | |||
| else | |||
| Rails.logger.info("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeerror!!!") | |||
| Rails.logger.info(1) | |||
| Rails.logger.info('the project did\'t exist or has been deleted') | |||
| {status:1, message: 'the project did\'t exist or has been deleted' } | |||
| end | |||
| else | |||
| Rails.logger.info("eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeerror!!!") | |||
| Rails.logger.info(1) | |||
| Rails.logger.info('the project did\'t exist or has been deleted') | |||
| {status:1, message: 'the project did\'t exist or has been deleted' } | |||
| end | |||
| end | |||
| desc "查询用户哪些客户端已经加入到了项目对应的区块链网络中" | |||
| params do | |||
| requires :username, type: String | |||
| requires :password, type: String | |||
| requires :repo_url, type: String | |||
| requires :ownername, type: String # 可以选择是通过repo_url来查询project,还是通过ownername, reponame定位project | |||
| requires :reponame, type: String | |||
| end | |||
| post 'getJoinInfo' do | |||
| authenticate! | |||
| # 根据repo_git_url找到repository对应的项目 | |||
| rs = RepositoriesService.new | |||
| if params[:ownername] != nil and params[:reponame] != nil | |||
| owner = User.find_by_login(params[:ownername]) | |||
| if owner | |||
| project = Project.find_by_user_id_name(owner.id, params[:reponame]) | |||
| node_ids = BlockchainProjectClient.find_by_sql("select node_id from blockchain_project_clients where project_id='#{project.id}' and user_id='#{current_user.id}'").map(&:node_id) | |||
| result = {:node_ids => node_ids, :status => status} # 定义变量记录返回值 | |||
| present result | |||
| else | |||
| # 表示没有查到用户信息 | |||
| {status:1, message: '用户不存在'} | |||
| end | |||
| else # 通过repo_url定位项目信息 | |||
| status, project, reponame = rs.findProjectByRepoUrl(params[:repo_url]) | |||
| if status != 0 | |||
| {status: status, message: '项目的git地址有误'} | |||
| else | |||
| node_ids = BlockchainProjectClient.find_by_sql("select node_id from blockchain_project_clients where project_id='#{project.id}' and user_id='#{current_user.id}'").map(&:node_id) | |||
| result = {:node_ids => node_ids, :status => status} # 定义变量记录返回值 | |||
| present result | |||
| end | |||
| end | |||
| end | |||
| desc "判断client是否已经记录在表中,如果不在则记录" | |||
| params do | |||
| requires :username, type: String | |||
| requires :password, type: String | |||
| requires :repo_url, type: String | |||
| requires :ownername, type: String # 可以选择是通过repo_url来查询project,还是通过ownername, reponame定位project | |||
| requires :reponame, type: String | |||
| requires :node_id, type: String | |||
| end | |||
| post 'judgeAndInsertJoinInfo' do | |||
| authenticate! | |||
| # 根据repo_git_url找到repository对应的项目 | |||
| rs = RepositoriesService.new | |||
| if params[:ownername] != nil and params[:reponame] != nil | |||
| owner = User.find_by_login(params[:ownername]) | |||
| if owner | |||
| project = Project.find_by_user_id_name(owner.id, params[:reponame]) | |||
| node_ids = BlockchainProjectClient.find_by_sql("select node_id from blockchain_project_clients where project_id='#{project.id}' and user_id='#{current_user.id}'").map(&:node_id) | |||
| # 判断node_id是否在node_id列表中 | |||
| if node_ids.include?(params[:node_id]) == false | |||
| bpc = BlockchainProjectClient.new # 不存在,则插入数据库中 | |||
| bpc.node_id = params[:node_id] | |||
| bpc.project_id = project.id | |||
| bpc.user_id = current_user.id | |||
| bpc.save | |||
| {status: 0} | |||
| else | |||
| {status: 0, message: '当前client已经注册过了'} | |||
| end | |||
| else | |||
| # 表示没有查到用户信息 | |||
| {status:1, message: '用户不存在'} | |||
| end | |||
| else # 通过repo_url定位项目信息 | |||
| status, project, reponame = rs.findProjectByRepoUrl(params[:repo_url]) | |||
| if status != 0 | |||
| {status: status, message: '项目的git地址有误'} | |||
| else | |||
| node_ids = BlockchainProjectClient.find_by_sql("select node_id from blockchain_project_clients where project_id='#{project.id}' and user_id='#{current_user.id}'").map(&:node_id) | |||
| # 判断node_id是否在node_id列表中 | |||
| if node_ids.include?(params[:node_id]) == false | |||
| bpc = BlockchainProjectClient.new # 不存在,则插入数据库中 | |||
| bpc.node_id = params[:node_id] | |||
| bpc.project_id = project.id | |||
| bpc.user_id = current_user.id | |||
| bpc.save | |||
| {status: 0} | |||
| else | |||
| {status: 0, message: '当前client已经注册过了'} | |||
| end | |||
| end | |||
| end | |||
| end | |||
| desc "判断用户是否注册了Trustie" | |||
| params do | |||
| requires :username, type: String | |||
| requires :password, type: String | |||
| end | |||
| post 'isRegisteredInTrustie' do | |||
| authenticate! | |||
| owner = User.find_by_login(params[:ownername]) | |||
| if owner | |||
| {status:0, result:true} | |||
| else | |||
| {status:0, result:false} | |||
| end | |||
| end | |||
| end | |||
| end | |||
| end | |||
| end | |||
| @@ -1,31 +1,31 @@ | |||
| #coding=utf-8 | |||
| module Mobile | |||
| module Apis | |||
| class BlogComments< Grape::API | |||
| resources :blog_comments do | |||
| desc "get special topic" | |||
| post ':id' do | |||
| begin | |||
| user = current_user | |||
| #0一级回复的更多 1 二级回复的更多 | |||
| type = params[:type] || 0 | |||
| page = params[:page] || 0 | |||
| blog = BlogComment.find params[:id] | |||
| present :data, blog, with: Mobile::Entities::BlogComment,user: user,type: type,page: page | |||
| present :type, type | |||
| present :page, page | |||
| present :status, 0 | |||
| rescue Exception=>e | |||
| present :status, -1 | |||
| present :message, e.message | |||
| end | |||
| end | |||
| end | |||
| end | |||
| end | |||
| end | |||
| #coding=utf-8 | |||
| module Mobile | |||
| module Apis | |||
| class BlogComments< Grape::API | |||
| resources :blog_comments do | |||
| desc "get special topic" | |||
| post ':id' do | |||
| begin | |||
| user = current_user | |||
| #0一级回复的更多 1 二级回复的更多 | |||
| type = params[:type] || 0 | |||
| page = params[:page] || 0 | |||
| blog = BlogComment.find params[:id] | |||
| present :data, blog, with: Mobile::Entities::BlogComment,user: user,type: type,page: page | |||
| present :type, type | |||
| present :page, page | |||
| present :status, 0 | |||
| rescue Exception=>e | |||
| present :status, -1 | |||
| present :message, e.message | |||
| end | |||
| end | |||
| end | |||
| end | |||
| end | |||
| end | |||
| @@ -1,157 +1,157 @@ | |||
| #coding=utf-8 | |||
| module Mobile | |||
| module Apis | |||
| class Homeworks < Grape::API | |||
| def self.get_service | |||
| HomeworkService.new | |||
| end | |||
| resources :homeworks do | |||
| desc "作业详情" | |||
| params do | |||
| requires :id, type: Integer, desc: "作业ID" | |||
| end | |||
| route_param :id do | |||
| get do | |||
| homework = Homeworks.get_service.show_homework params | |||
| present :data, homework, with: Mobile::Entities::Homework | |||
| present :status, 0 | |||
| end | |||
| end | |||
| desc "我的作品列表" | |||
| params do | |||
| requires :token, type: String | |||
| end | |||
| get ':user_id/homework_attachs' do | |||
| ue = Homeworks.get_service.my_homework_list params,current_user.nil? ? User.find(2):current_user | |||
| present :data, ue,with: Mobile::Entities::Course | |||
| present :status, 0 | |||
| end | |||
| # desc "启动匿评" | |||
| # params do | |||
| # requires :token, type: String | |||
| # end | |||
| # post ':id/start_anonymous_comment' do | |||
| # statue = Homeworks.get_service.start_anonymous_comment params,current_user.nil? ? User.find(2):current_user | |||
| # messages = "" | |||
| # case statue | |||
| # when 1 | |||
| # messages = "启动成功" | |||
| # when 2 | |||
| # messages = "启动失败,作业总数大于等于2份时才能启动匿评" | |||
| # when 3 | |||
| # messages = "已开启匿评,请务重复开启" | |||
| # end | |||
| # present :data,messages | |||
| # present :status, statue | |||
| # end | |||
| # | |||
| # desc "关闭匿评" | |||
| # params do | |||
| # requires :token, type: String | |||
| # end | |||
| # post ':id/stop_anonymous_comment' do | |||
| # Homeworks.get_service.stop_anonymous_comment params,current_user.nil? ? User.find(2):current_user | |||
| # present :status, 0 | |||
| # end | |||
| desc "匿评作品详情" | |||
| params do | |||
| requires :token, type: String | |||
| end | |||
| get ':homework_id/anonymous_works_show' do | |||
| works,par = Homeworks.get_service.anonymous_works_show params.merge(:id => params[:homework_id]),current_user.nil? ? User.find(2):current_user | |||
| present :data, works ,with: Mobile::Entities::HomeworkAttach | |||
| present :otherdata,par,with: Mobile::Entities::AnonymousWorksParams | |||
| present :status, 0 | |||
| end | |||
| desc "作品打分" | |||
| params do | |||
| requires :token, type: String | |||
| requires :is_teacher, type: String,desc: '是否为教师(匿评作品详情返回的结果中可获取此参数的值)' | |||
| requires :is_anonymous_comments, type: String, desc: '是否为匿评(匿评作品详情返回的结果中可获取此参数的值)' | |||
| optional :stars_value, type: Integer,desc: '用户给出的评分' | |||
| optional :cur_page,type: Integer,desc: '匿评作品详情返回的结果中可获取此参数的值' | |||
| optional :cur_type, type: Integer,desc: '匿评作品详情返回的结果中可获取此参数的值' | |||
| optional :user_message, type: String, desc: '用户评论' | |||
| end | |||
| post ':homework_id/scoring' do | |||
| cs_params = { | |||
| new_form: params.reject{|k,v| [:token,:is_teacher,:is_anonymous_comments,:stars_value,:cur_page,:cur_type,:homework_id].include?(k)}, | |||
| token: params[:token], | |||
| is_teacher: params[:is_teacher], | |||
| is_anonymous_comments: params[:is_anonymous_comments], | |||
| stars_value: params[:stars_value], | |||
| cur_page: params[:cur_page], | |||
| cur_type: params[:cur_type], | |||
| homework_id: params[:homework_id] | |||
| } | |||
| Homeworks.get_service.add_score_and_jour cs_params,current_user | |||
| present :status, 0 | |||
| end | |||
| desc '创建作业' | |||
| params do | |||
| requires :token,type:String | |||
| requires :work_name,type:String,desc:'作业名称' | |||
| requires :work_desc,type:String,desc:'作业描述' | |||
| requires :work_deadline,type:String,desc:'截止日期' | |||
| requires :is_blind_appr,type:Integer,desc:'是否匿评' | |||
| requires :blind_appr_num,type:Integer,desc:'匿评分配数' | |||
| requires :course_id,type:Integer,desc: '课程id' | |||
| end | |||
| post 'create_home_work' do | |||
| Homeworks.get_service.create_home_work params,current_user | |||
| present :status, 0 | |||
| end | |||
| desc '开启匿评' | |||
| params do | |||
| requires :token,type:String | |||
| requires :course_id,type:Integer,desc:'课程id' | |||
| requires :homework_id,type:Integer,desc:'作业id' | |||
| end | |||
| post ':homework_id/start_anonymous_comment' do | |||
| hs = Homeworks.get_service | |||
| status = hs.start_anonymous_comment params,current_user | |||
| messages = "" | |||
| case status[:status] | |||
| when 1 | |||
| messages = "启动成功" | |||
| when 2 | |||
| messages = "启动失败,作业总数大于等于2份时才能启动匿评" | |||
| when 3 | |||
| messages = "已开启匿评,请务重复开启" | |||
| when 4 | |||
| messages = "没有开启匿评的权限" | |||
| when 5 | |||
| messages = "截止日期之前不可启动匿评" | |||
| end | |||
| present :data,messages | |||
| present :status,0 | |||
| end | |||
| desc '关闭匿评' | |||
| params do | |||
| requires :token,type:String | |||
| requires :course_id,type:Integer,desc:'课程id' | |||
| requires :homework_id,type:Integer,desc:'作业id' | |||
| end | |||
| post ':homework_id/stop_anonymous_comment' do | |||
| hs = Homeworks.get_service | |||
| hs.stop_anonymous_comment params,current_user | |||
| message = "成功关闭" | |||
| present :data, message | |||
| present :status,0 | |||
| end | |||
| end | |||
| end | |||
| end | |||
| end | |||
| #coding=utf-8 | |||
| module Mobile | |||
| module Apis | |||
| class Homeworks < Grape::API | |||
| def self.get_service | |||
| HomeworkService.new | |||
| end | |||
| resources :homeworks do | |||
| desc "作业详情" | |||
| params do | |||
| requires :id, type: Integer, desc: "作业ID" | |||
| end | |||
| route_param :id do | |||
| get do | |||
| homework = Homeworks.get_service.show_homework params | |||
| present :data, homework, with: Mobile::Entities::Homework | |||
| present :status, 0 | |||
| end | |||
| end | |||
| desc "我的作品列表" | |||
| params do | |||
| requires :token, type: String | |||
| end | |||
| get ':user_id/homework_attachs' do | |||
| ue = Homeworks.get_service.my_homework_list params,current_user.nil? ? User.find(2):current_user | |||
| present :data, ue,with: Mobile::Entities::Course | |||
| present :status, 0 | |||
| end | |||
| # desc "启动匿评" | |||
| # params do | |||
| # requires :token, type: String | |||
| # end | |||
| # post ':id/start_anonymous_comment' do | |||
| # statue = Homeworks.get_service.start_anonymous_comment params,current_user.nil? ? User.find(2):current_user | |||
| # messages = "" | |||
| # case statue | |||
| # when 1 | |||
| # messages = "启动成功" | |||
| # when 2 | |||
| # messages = "启动失败,作业总数大于等于2份时才能启动匿评" | |||
| # when 3 | |||
| # messages = "已开启匿评,请务重复开启" | |||
| # end | |||
| # present :data,messages | |||
| # present :status, statue | |||
| # end | |||
| # | |||
| # desc "关闭匿评" | |||
| # params do | |||
| # requires :token, type: String | |||
| # end | |||
| # post ':id/stop_anonymous_comment' do | |||
| # Homeworks.get_service.stop_anonymous_comment params,current_user.nil? ? User.find(2):current_user | |||
| # present :status, 0 | |||
| # end | |||
| desc "匿评作品详情" | |||
| params do | |||
| requires :token, type: String | |||
| end | |||
| get ':homework_id/anonymous_works_show' do | |||
| works,par = Homeworks.get_service.anonymous_works_show params.merge(:id => params[:homework_id]),current_user.nil? ? User.find(2):current_user | |||
| present :data, works ,with: Mobile::Entities::HomeworkAttach | |||
| present :otherdata,par,with: Mobile::Entities::AnonymousWorksParams | |||
| present :status, 0 | |||
| end | |||
| desc "作品打分" | |||
| params do | |||
| requires :token, type: String | |||
| requires :is_teacher, type: String,desc: '是否为教师(匿评作品详情返回的结果中可获取此参数的值)' | |||
| requires :is_anonymous_comments, type: String, desc: '是否为匿评(匿评作品详情返回的结果中可获取此参数的值)' | |||
| optional :stars_value, type: Integer,desc: '用户给出的评分' | |||
| optional :cur_page,type: Integer,desc: '匿评作品详情返回的结果中可获取此参数的值' | |||
| optional :cur_type, type: Integer,desc: '匿评作品详情返回的结果中可获取此参数的值' | |||
| optional :user_message, type: String, desc: '用户评论' | |||
| end | |||
| post ':homework_id/scoring' do | |||
| cs_params = { | |||
| new_form: params.reject{|k,v| [:token,:is_teacher,:is_anonymous_comments,:stars_value,:cur_page,:cur_type,:homework_id].include?(k)}, | |||
| token: params[:token], | |||
| is_teacher: params[:is_teacher], | |||
| is_anonymous_comments: params[:is_anonymous_comments], | |||
| stars_value: params[:stars_value], | |||
| cur_page: params[:cur_page], | |||
| cur_type: params[:cur_type], | |||
| homework_id: params[:homework_id] | |||
| } | |||
| Homeworks.get_service.add_score_and_jour cs_params,current_user | |||
| present :status, 0 | |||
| end | |||
| desc '创建作业' | |||
| params do | |||
| requires :token,type:String | |||
| requires :work_name,type:String,desc:'作业名称' | |||
| requires :work_desc,type:String,desc:'作业描述' | |||
| requires :work_deadline,type:String,desc:'截止日期' | |||
| requires :is_blind_appr,type:Integer,desc:'是否匿评' | |||
| requires :blind_appr_num,type:Integer,desc:'匿评分配数' | |||
| requires :course_id,type:Integer,desc: '课程id' | |||
| end | |||
| post 'create_home_work' do | |||
| Homeworks.get_service.create_home_work params,current_user | |||
| present :status, 0 | |||
| end | |||
| desc '开启匿评' | |||
| params do | |||
| requires :token,type:String | |||
| requires :course_id,type:Integer,desc:'课程id' | |||
| requires :homework_id,type:Integer,desc:'作业id' | |||
| end | |||
| post ':homework_id/start_anonymous_comment' do | |||
| hs = Homeworks.get_service | |||
| status = hs.start_anonymous_comment params,current_user | |||
| messages = "" | |||
| case status[:status] | |||
| when 1 | |||
| messages = "启动成功" | |||
| when 2 | |||
| messages = "启动失败,作业总数大于等于2份时才能启动匿评" | |||
| when 3 | |||
| messages = "已开启匿评,请务重复开启" | |||
| when 4 | |||
| messages = "没有开启匿评的权限" | |||
| when 5 | |||
| messages = "截止日期之前不可启动匿评" | |||
| end | |||
| present :data,messages | |||
| present :status,0 | |||
| end | |||
| desc '关闭匿评' | |||
| params do | |||
| requires :token,type:String | |||
| requires :course_id,type:Integer,desc:'课程id' | |||
| requires :homework_id,type:Integer,desc:'作业id' | |||
| end | |||
| post ':homework_id/stop_anonymous_comment' do | |||
| hs = Homeworks.get_service | |||
| hs.stop_anonymous_comment params,current_user | |||
| message = "成功关闭" | |||
| present :data, message | |||
| present :status,0 | |||
| end | |||
| end | |||
| end | |||
| end | |||
| end | |||
| @@ -1,321 +1,321 @@ | |||
| #coding=utf-8 | |||
| module Mobile | |||
| module Apis | |||
| class NewComment< Grape::API | |||
| include ApplicationHelper | |||
| include ApiHelper | |||
| resources :new_comment do | |||
| desc "add a new comment" | |||
| params do | |||
| requires :type, type: String | |||
| requires :content, type: String | |||
| end | |||
| post ':id' do | |||
| unless current_user | |||
| #如果当前用户不存在 则需要根据微信昵称注册一个帐号 | |||
| openid = session[:wechat_openid] | |||
| raise "无法获取到openid,请在微信中打开本页面" unless openid | |||
| us = UsersService.new | |||
| access_token = session[:access_token] | |||
| refresh_token = session[:refresh_token] | |||
| if access_token.present? && refresh_token.present? | |||
| begin | |||
| refreshinfo = Wechat.api.web_refresh_access_token(refresh_token) | |||
| rescue | |||
| info = Wechat.api.web_access_token(session[:wechat_code]) | |||
| openid =info["openid"] | |||
| access_token =info["access_token"] | |||
| if access_token | |||
| session[:access_token] = access_token | |||
| end | |||
| refresh_token = info["refresh_token"] | |||
| if refresh_token | |||
| session[:refresh_token] = refresh_token | |||
| end | |||
| refreshinfo = Wechat.api.web_refresh_access_token(refresh_token) | |||
| end | |||
| access_token = refreshinfo["access_token"] | |||
| refresh_token = refreshinfo["refresh_token"] | |||
| session[:access_token] = access_token | |||
| session[:refresh_token] = refresh_token | |||
| #获取用户信息 | |||
| userinfo = Wechat.api.web_userinfo(access_token,openid) | |||
| Rails.logger.info "userinfo!!!!!!!!!" | |||
| Rails.logger.info userinfo | |||
| name = userinfo["nickname"] | |||
| else | |||
| name = openid[0..3]+"***"+openid.last | |||
| end | |||
| user = us.register ({:login=>openid, :mail=>"#{openid}@163.com", | |||
| :password=>"12345678", :password_confirmation=>"12345678", | |||
| :should_confirmation_password => true}) | |||
| raise user.errors.full_messages.first if user.new_record? | |||
| user.update_attributes(:lastname=>name) | |||
| #自动激活 | |||
| if Setting.self_registration != '3' | |||
| user.activate | |||
| user.last_login_on = Time.now | |||
| if user.save | |||
| UserStatus.create(:user_id => user.id, :changsets_count => 0, :watchers_count => 0) | |||
| end | |||
| end | |||
| UserWechat.create!( | |||
| openid: openid, | |||
| user: user, | |||
| bindtype: 1 | |||
| ) | |||
| end | |||
| authenticate! | |||
| ## 能进来的就是已关注 | |||
| ## 因为取消订阅的记录被删除了 | |||
| subscribe = 1 #默认未关注 | |||
| status = 0 | |||
| tip = 0 #0班级1项目 | |||
| type = params[:type] | |||
| result = 1 | |||
| #0回复 1回复的回复 | |||
| reply_type = params[:reply_type] | |||
| update_id = 0 | |||
| if params[:content]!="" && current_user | |||
| case type | |||
| when "HomeworkCommon" | |||
| #如果是私有的 并且不是成员则不能回复 | |||
| # is_public = homework_common.course.is_public | |||
| # if is_public == 0 && !current_user.member_of_course?(homework_common.course) | |||
| # status = -1 | |||
| # tip = 0 | |||
| # else | |||
| # feedback = HomeworkCommon.add_homework_jour(current_user, params[:content], params[:id]) | |||
| # if (feedback.errors.empty?) | |||
| # homework_common.update_column(:updated_at, Time.now) | |||
| # result = 2 | |||
| # end | |||
| # end | |||
| if reply_type == nil || reply_type == 0 | |||
| homework_common = HomeworkCommon.find(params[:id]) | |||
| feedback = HomeworkCommon.add_homework_jour(current_user, params[:content], params[:id], params[:id]) | |||
| if (feedback.errors.empty?) | |||
| homework_common.update_column(:updated_at, Time.now) | |||
| result = 2 | |||
| update_id = homework_common.id | |||
| end | |||
| else | |||
| #二级回复 | |||
| reply = JournalsForMessage.find params[:id].to_i | |||
| homework_common = HomeworkCommon.find reply.jour_id | |||
| options = {:notes => params[:content], :reply_id => reply.user_id,:user_id => current_user.id,:m_parent_id => params[:id].to_i,:m_reply_id => params[:id].to_i} | |||
| feedback = HomeworkCommon.add_homework_jour(current_user, params[:content], reply.jour_id, reply.jour_id, options) | |||
| if (feedback.errors.empty?) | |||
| homework_common.update_column(:updated_at, Time.now) | |||
| result = 2 | |||
| update_id = homework_common.id | |||
| end | |||
| end | |||
| when "News" | |||
| # if news.project | |||
| # if news.project.is_public == false && !current_user.member_of?(news.project) | |||
| # status = -1 | |||
| # tip = 1 | |||
| # end | |||
| # elsif news.course | |||
| # if news.course.is_public == 0 && !current_user.member_of_course?(news.course) | |||
| # status = -1 | |||
| # tip = 0 | |||
| # end | |||
| # end | |||
| if status == 0 | |||
| if reply_type == nil || reply_type == 0 | |||
| news = News.find(params[:id]) | |||
| comment = Comment.new | |||
| comment.comments = params[:content] | |||
| comment.author = current_user | |||
| if news.comments << comment | |||
| result = 2 | |||
| update_id = news.id | |||
| end | |||
| else | |||
| #二级回复 | |||
| comment = Comment.find(params[:id]) | |||
| news = News.find comment.commented_id | |||
| new_comment = news.comments.build(:author_id => current_user.id, :reply_id => params[:id], :comments => params[:content], :parent_id => comment.id) | |||
| if new_comment.save | |||
| result = 2 | |||
| update_id = news.id | |||
| end | |||
| end | |||
| end | |||
| when "Message" | |||
| # if message.project | |||
| # if message.project.is_public == false && !current_user.member_of?(message.project) | |||
| # status = -1 | |||
| # tip = 1 | |||
| # end | |||
| # elsif message.course | |||
| # if message.course.is_public == 0 && !current_user.member_of_course?(message.course) | |||
| # status = -1 | |||
| # tip = 0 | |||
| # end | |||
| # end | |||
| if status == 0 | |||
| # if reply_type == nil || reply_type == 0 | |||
| message = Message.find(params[:id]) | |||
| board = Board.find(message.board_id) | |||
| topic = message.root | |||
| reply = Message.new | |||
| reply.author = current_user | |||
| reply.board = board | |||
| reply.content = params[:content] | |||
| reply.parent_id = params[:id] | |||
| reply.subject = "RE: #{topic.subject}" | |||
| reply.root_id = topic.id | |||
| if message.children << reply | |||
| result = 2 | |||
| update_id = topic.id | |||
| end | |||
| # else | |||
| #二级回复 | |||
| # end | |||
| end | |||
| when "JournalsForMessage" | |||
| # if jour.jour_type == "Project" | |||
| # if jour.project.is_public == false && !current_user.member_of?(jour.project) | |||
| # status = -1 | |||
| # tip = 1 | |||
| # end | |||
| # elsif jour.jour_type == "Course" | |||
| # if jour.course.is_public == 0 && !current_user.member_of_course?(jour.course) | |||
| # status = -1 | |||
| # tip = 0 | |||
| # end | |||
| # end | |||
| if status == 0 | |||
| # if reply_type == nil || reply_type == 0 | |||
| jour = JournalsForMessage.find(params[:id]).root | |||
| parent_id = params[:id] | |||
| author_id = current_user.id | |||
| reply_user_id = jour.user_id | |||
| reply_id = params[:id] | |||
| content = params[:content] | |||
| options = {:user_id => author_id, | |||
| :status => true, | |||
| :m_parent_id => parent_id, | |||
| :m_reply_id => reply_id, | |||
| :reply_id => reply_user_id, | |||
| :root_id => jour.id, | |||
| :notes => content, | |||
| :is_readed => false} | |||
| jfm = jour.user.add_jour(nil, nil, nil, options) | |||
| if jfm.errors.empty? | |||
| (JournalsForMessage.find parent_id).update_attribute(:updated_on,Time.now) | |||
| result = 2 | |||
| update_id = jour.id | |||
| end | |||
| # else | |||
| #二级回复 | |||
| # end | |||
| end | |||
| when 'Issue' | |||
| # if issue.project.is_public == false && !current_user.member_of?(issue.project) | |||
| # status = -1 | |||
| # tip = 1 | |||
| # end | |||
| if status == 0 | |||
| if reply_type == nil || reply_type == 0 | |||
| issue = Issue.find params[:id] | |||
| is_jour = Journal.new | |||
| is_jour.user_id = current_user.id | |||
| is_jour.notes = params[:content] | |||
| is_jour.journalized = issue | |||
| if is_jour.save | |||
| result = 2 | |||
| update_id = issue.id | |||
| end | |||
| else | |||
| #二级回复 | |||
| jour = Journal.find(params[:id]) | |||
| issue = jour.journalized | |||
| is_jour = Journal.new | |||
| is_jour.user_id = current_user.id | |||
| is_jour.notes = params[:content] | |||
| is_jour.reply_id = params[:id] | |||
| is_jour.parent_id = params[:id] | |||
| is_jour.journalized = issue | |||
| if is_jour.save | |||
| result = 2 | |||
| update_id = issue.id | |||
| end | |||
| end | |||
| end | |||
| when 'BlogComment' | |||
| if reply_type == nil || reply_type == 0 | |||
| blog = BlogComment.find(params[:id]).root | |||
| blogComment = BlogComment.new | |||
| blogComment.author = current_user | |||
| blogComment.blog = blog.blog | |||
| blogComment.content = params[:content] | |||
| blogComment.title = "RE: #{blog.title}" | |||
| blogComment.root_id = blog.id | |||
| if blog.children << blogComment | |||
| result = 2 | |||
| update_id = blog.id | |||
| end | |||
| else | |||
| #二级回复 | |||
| blog = BlogComment.find(params[:id]).root | |||
| blogComment = BlogComment.new | |||
| blogComment.author = current_user | |||
| blogComment.blog = blog.blog | |||
| blogComment.content = params[:content] | |||
| blogComment.title = "RE: #{blog.title}" | |||
| parent = BlogComment.find params[:id] | |||
| blogComment.parent_id = params[:id] #被回复的回复 | |||
| blogComment.reply_id = parent.author.id #被回复者id | |||
| blogComment.root_id = blog.id | |||
| if parent.children << blogComment | |||
| result = 2 | |||
| update_id = blog.id | |||
| end | |||
| end | |||
| end | |||
| if result == 2 | |||
| update_course_activity_api(type,update_id) | |||
| update_user_activity_api(type,update_id) | |||
| update_org_activity_api(type,update_id) | |||
| update_forge_activity_api(type,update_id) | |||
| update_principal_activity_api(type,update_id) | |||
| end | |||
| else | |||
| result = 3 | |||
| end | |||
| present :result, result | |||
| present :status, status | |||
| present :act_id, update_id | |||
| present :tip, tip | |||
| present :subscribe,subscribe | |||
| end | |||
| end | |||
| end | |||
| end | |||
| end | |||
| #coding=utf-8 | |||
| module Mobile | |||
| module Apis | |||
| class NewComment< Grape::API | |||
| include ApplicationHelper | |||
| include ApiHelper | |||
| resources :new_comment do | |||
| desc "add a new comment" | |||
| params do | |||
| requires :type, type: String | |||
| requires :content, type: String | |||
| end | |||
| post ':id' do | |||
| unless current_user | |||
| #如果当前用户不存在 则需要根据微信昵称注册一个帐号 | |||
| openid = session[:wechat_openid] | |||
| raise "无法获取到openid,请在微信中打开本页面" unless openid | |||
| us = UsersService.new | |||
| access_token = session[:access_token] | |||
| refresh_token = session[:refresh_token] | |||
| if access_token.present? && refresh_token.present? | |||
| begin | |||
| refreshinfo = Wechat.api.web_refresh_access_token(refresh_token) | |||
| rescue | |||
| info = Wechat.api.web_access_token(session[:wechat_code]) | |||
| openid =info["openid"] | |||
| access_token =info["access_token"] | |||
| if access_token | |||
| session[:access_token] = access_token | |||
| end | |||
| refresh_token = info["refresh_token"] | |||
| if refresh_token | |||
| session[:refresh_token] = refresh_token | |||
| end | |||
| refreshinfo = Wechat.api.web_refresh_access_token(refresh_token) | |||
| end | |||
| access_token = refreshinfo["access_token"] | |||
| refresh_token = refreshinfo["refresh_token"] | |||
| session[:access_token] = access_token | |||
| session[:refresh_token] = refresh_token | |||
| #获取用户信息 | |||
| userinfo = Wechat.api.web_userinfo(access_token,openid) | |||
| Rails.logger.info "userinfo!!!!!!!!!" | |||
| Rails.logger.info userinfo | |||
| name = userinfo["nickname"] | |||
| else | |||
| name = openid[0..3]+"***"+openid.last | |||
| end | |||
| user = us.register ({:login=>openid, :mail=>"#{openid}@163.com", | |||
| :password=>"12345678", :password_confirmation=>"12345678", | |||
| :should_confirmation_password => true}) | |||
| raise user.errors.full_messages.first if user.new_record? | |||
| user.update_attributes(:lastname=>name) | |||
| #自动激活 | |||
| if Setting.self_registration != '3' | |||
| user.activate | |||
| user.last_login_on = Time.now | |||
| if user.save | |||
| UserStatus.create(:user_id => user.id, :changsets_count => 0, :watchers_count => 0) | |||
| end | |||
| end | |||
| UserWechat.create!( | |||
| openid: openid, | |||
| user: user, | |||
| bindtype: 1 | |||
| ) | |||
| end | |||
| authenticate! | |||
| ## 能进来的就是已关注 | |||
| ## 因为取消订阅的记录被删除了 | |||
| subscribe = 1 #默认未关注 | |||
| status = 0 | |||
| tip = 0 #0班级1项目 | |||
| type = params[:type] | |||
| result = 1 | |||
| #0回复 1回复的回复 | |||
| reply_type = params[:reply_type] | |||
| update_id = 0 | |||
| if params[:content]!="" && current_user | |||
| case type | |||
| when "HomeworkCommon" | |||
| #如果是私有的 并且不是成员则不能回复 | |||
| # is_public = homework_common.course.is_public | |||
| # if is_public == 0 && !current_user.member_of_course?(homework_common.course) | |||
| # status = -1 | |||
| # tip = 0 | |||
| # else | |||
| # feedback = HomeworkCommon.add_homework_jour(current_user, params[:content], params[:id]) | |||
| # if (feedback.errors.empty?) | |||
| # homework_common.update_column(:updated_at, Time.now) | |||
| # result = 2 | |||
| # end | |||
| # end | |||
| if reply_type == nil || reply_type == 0 | |||
| homework_common = HomeworkCommon.find(params[:id]) | |||
| feedback = HomeworkCommon.add_homework_jour(current_user, params[:content], params[:id], params[:id]) | |||
| if (feedback.errors.empty?) | |||
| homework_common.update_column(:updated_at, Time.now) | |||
| result = 2 | |||
| update_id = homework_common.id | |||
| end | |||
| else | |||
| #二级回复 | |||
| reply = JournalsForMessage.find params[:id].to_i | |||
| homework_common = HomeworkCommon.find reply.jour_id | |||
| options = {:notes => params[:content], :reply_id => reply.user_id,:user_id => current_user.id,:m_parent_id => params[:id].to_i,:m_reply_id => params[:id].to_i} | |||
| feedback = HomeworkCommon.add_homework_jour(current_user, params[:content], reply.jour_id, reply.jour_id, options) | |||
| if (feedback.errors.empty?) | |||
| homework_common.update_column(:updated_at, Time.now) | |||
| result = 2 | |||
| update_id = homework_common.id | |||
| end | |||
| end | |||
| when "News" | |||
| # if news.project | |||
| # if news.project.is_public == false && !current_user.member_of?(news.project) | |||
| # status = -1 | |||
| # tip = 1 | |||
| # end | |||
| # elsif news.course | |||
| # if news.course.is_public == 0 && !current_user.member_of_course?(news.course) | |||
| # status = -1 | |||
| # tip = 0 | |||
| # end | |||
| # end | |||
| if status == 0 | |||
| if reply_type == nil || reply_type == 0 | |||
| news = News.find(params[:id]) | |||
| comment = Comment.new | |||
| comment.comments = params[:content] | |||
| comment.author = current_user | |||
| if news.comments << comment | |||
| result = 2 | |||
| update_id = news.id | |||
| end | |||
| else | |||
| #二级回复 | |||
| comment = Comment.find(params[:id]) | |||
| news = News.find comment.commented_id | |||
| new_comment = news.comments.build(:author_id => current_user.id, :reply_id => params[:id], :comments => params[:content], :parent_id => comment.id) | |||
| if new_comment.save | |||
| result = 2 | |||
| update_id = news.id | |||
| end | |||
| end | |||
| end | |||
| when "Message" | |||
| # if message.project | |||
| # if message.project.is_public == false && !current_user.member_of?(message.project) | |||
| # status = -1 | |||
| # tip = 1 | |||
| # end | |||
| # elsif message.course | |||
| # if message.course.is_public == 0 && !current_user.member_of_course?(message.course) | |||
| # status = -1 | |||
| # tip = 0 | |||
| # end | |||
| # end | |||
| if status == 0 | |||
| # if reply_type == nil || reply_type == 0 | |||
| message = Message.find(params[:id]) | |||
| board = Board.find(message.board_id) | |||
| topic = message.root | |||
| reply = Message.new | |||
| reply.author = current_user | |||
| reply.board = board | |||
| reply.content = params[:content] | |||
| reply.parent_id = params[:id] | |||
| reply.subject = "RE: #{topic.subject}" | |||
| reply.root_id = topic.id | |||
| if message.children << reply | |||
| result = 2 | |||
| update_id = topic.id | |||
| end | |||
| # else | |||
| #二级回复 | |||
| # end | |||
| end | |||
| when "JournalsForMessage" | |||
| # if jour.jour_type == "Project" | |||
| # if jour.project.is_public == false && !current_user.member_of?(jour.project) | |||
| # status = -1 | |||
| # tip = 1 | |||
| # end | |||
| # elsif jour.jour_type == "Course" | |||
| # if jour.course.is_public == 0 && !current_user.member_of_course?(jour.course) | |||
| # status = -1 | |||
| # tip = 0 | |||
| # end | |||
| # end | |||
| if status == 0 | |||
| # if reply_type == nil || reply_type == 0 | |||
| jour = JournalsForMessage.find(params[:id]).root | |||
| parent_id = params[:id] | |||
| author_id = current_user.id | |||
| reply_user_id = jour.user_id | |||
| reply_id = params[:id] | |||
| content = params[:content] | |||
| options = {:user_id => author_id, | |||
| :status => true, | |||
| :m_parent_id => parent_id, | |||
| :m_reply_id => reply_id, | |||
| :reply_id => reply_user_id, | |||
| :root_id => jour.id, | |||
| :notes => content, | |||
| :is_readed => false} | |||
| jfm = jour.user.add_jour(nil, nil, nil, options) | |||
| if jfm.errors.empty? | |||
| (JournalsForMessage.find parent_id).update_attribute(:updated_on,Time.now) | |||
| result = 2 | |||
| update_id = jour.id | |||
| end | |||
| # else | |||
| #二级回复 | |||
| # end | |||
| end | |||
| when 'Issue' | |||
| # if issue.project.is_public == false && !current_user.member_of?(issue.project) | |||
| # status = -1 | |||
| # tip = 1 | |||
| # end | |||
| if status == 0 | |||
| if reply_type == nil || reply_type == 0 | |||
| issue = Issue.find params[:id] | |||
| is_jour = Journal.new | |||
| is_jour.user_id = current_user.id | |||
| is_jour.notes = params[:content] | |||
| is_jour.journalized = issue | |||
| if is_jour.save | |||
| result = 2 | |||
| update_id = issue.id | |||
| end | |||
| else | |||
| #二级回复 | |||
| jour = Journal.find(params[:id]) | |||
| issue = jour.journalized | |||
| is_jour = Journal.new | |||
| is_jour.user_id = current_user.id | |||
| is_jour.notes = params[:content] | |||
| is_jour.reply_id = params[:id] | |||
| is_jour.parent_id = params[:id] | |||
| is_jour.journalized = issue | |||
| if is_jour.save | |||
| result = 2 | |||
| update_id = issue.id | |||
| end | |||
| end | |||
| end | |||
| when 'BlogComment' | |||
| if reply_type == nil || reply_type == 0 | |||
| blog = BlogComment.find(params[:id]).root | |||
| blogComment = BlogComment.new | |||
| blogComment.author = current_user | |||
| blogComment.blog = blog.blog | |||
| blogComment.content = params[:content] | |||
| blogComment.title = "RE: #{blog.title}" | |||
| blogComment.root_id = blog.id | |||
| if blog.children << blogComment | |||
| result = 2 | |||
| update_id = blog.id | |||
| end | |||
| else | |||
| #二级回复 | |||
| blog = BlogComment.find(params[:id]).root | |||
| blogComment = BlogComment.new | |||
| blogComment.author = current_user | |||
| blogComment.blog = blog.blog | |||
| blogComment.content = params[:content] | |||
| blogComment.title = "RE: #{blog.title}" | |||
| parent = BlogComment.find params[:id] | |||
| blogComment.parent_id = params[:id] #被回复的回复 | |||
| blogComment.reply_id = parent.author.id #被回复者id | |||
| blogComment.root_id = blog.id | |||
| if parent.children << blogComment | |||
| result = 2 | |||
| update_id = blog.id | |||
| end | |||
| end | |||
| end | |||
| if result == 2 | |||
| update_course_activity_api(type,update_id) | |||
| update_user_activity_api(type,update_id) | |||
| update_org_activity_api(type,update_id) | |||
| update_forge_activity_api(type,update_id) | |||
| update_principal_activity_api(type,update_id) | |||
| end | |||
| else | |||
| result = 3 | |||
| end | |||
| present :result, result | |||
| present :status, status | |||
| present :act_id, update_id | |||
| present :tip, tip | |||
| present :subscribe,subscribe | |||
| end | |||
| end | |||
| end | |||
| end | |||
| end | |||
| @@ -1,42 +1,42 @@ | |||
| #coding=utf-8 | |||
| module Mobile | |||
| module Apis | |||
| class Praise< Grape::API | |||
| include ApiHelper | |||
| resources :praise do | |||
| desc "praise an activity" | |||
| params do | |||
| requires :type, type: String | |||
| requires :token, type: String | |||
| end | |||
| post ':id' do | |||
| authenticate! | |||
| obj_id = params[:id] | |||
| obj_type = params[:type] | |||
| user = current_user | |||
| pts = PraiseTread.where("praise_tread_object_id=? and praise_tread_object_type=? and user_id=?",obj_id,obj_type.to_s,user.id).first | |||
| if pts.blank? | |||
| praise_or_cancel(obj_type,obj_id,user,1) | |||
| obj = PraiseTreadCache.where("object_id=? and object_type=?",obj_id,obj_type.to_s).first | |||
| num = get_activity_praise_num(obj) if !obj.blank? | |||
| else | |||
| pts.destroy if !pts.blank? | |||
| #再更新praise_tread_cache表 使相应的记录减1 当为0时删除 | |||
| ptc = PraiseTreadCache.where("object_id=? and object_type=?",obj_id,obj_type.to_s).first | |||
| ptc.praise_minus(1) if !ptc.blank? | |||
| if ptc.praise_num == 0 | |||
| ptc.delete | |||
| end | |||
| obj = PraiseTreadCache.where("object_id=? and object_type=?",obj_id,obj_type.to_s).first | |||
| num = !obj.blank? ? get_activity_praise_num(obj) : 0 | |||
| end | |||
| present :data, num | |||
| present :status, 0 | |||
| end | |||
| end | |||
| end | |||
| end | |||
| #coding=utf-8 | |||
| module Mobile | |||
| module Apis | |||
| class Praise< Grape::API | |||
| include ApiHelper | |||
| resources :praise do | |||
| desc "praise an activity" | |||
| params do | |||
| requires :type, type: String | |||
| requires :token, type: String | |||
| end | |||
| post ':id' do | |||
| authenticate! | |||
| obj_id = params[:id] | |||
| obj_type = params[:type] | |||
| user = current_user | |||
| pts = PraiseTread.where("praise_tread_object_id=? and praise_tread_object_type=? and user_id=?",obj_id,obj_type.to_s,user.id).first | |||
| if pts.blank? | |||
| praise_or_cancel(obj_type,obj_id,user,1) | |||
| obj = PraiseTreadCache.where("object_id=? and object_type=?",obj_id,obj_type.to_s).first | |||
| num = get_activity_praise_num(obj) if !obj.blank? | |||
| else | |||
| pts.destroy if !pts.blank? | |||
| #再更新praise_tread_cache表 使相应的记录减1 当为0时删除 | |||
| ptc = PraiseTreadCache.where("object_id=? and object_type=?",obj_id,obj_type.to_s).first | |||
| ptc.praise_minus(1) if !ptc.blank? | |||
| if ptc.praise_num == 0 | |||
| ptc.delete | |||
| end | |||
| obj = PraiseTreadCache.where("object_id=? and object_type=?",obj_id,obj_type.to_s).first | |||
| num = !obj.blank? ? get_activity_praise_num(obj) : 0 | |||
| end | |||
| present :data, num | |||
| present :status, 0 | |||
| end | |||
| end | |||
| end | |||
| end | |||
| end | |||
| @@ -1,350 +1,350 @@ | |||
| #coding=utf-8 | |||
| module Mobile | |||
| module Apis | |||
| class Projects < Grape::API | |||
| resources :projects do | |||
| desc "获取项目列表" | |||
| params do | |||
| requires :token, type: String | |||
| end | |||
| get do | |||
| authenticate! | |||
| ps = ProjectsService.new | |||
| projects = ps.user_projects(current_user) | |||
| present :data, projects, with: Mobile::Entities::Project,user: current_user | |||
| present :status, 0 | |||
| end | |||
| desc "返回单个项目" | |||
| params do | |||
| requires :id, type: Integer | |||
| requires :token,type:String | |||
| end | |||
| route_param :id do | |||
| get do | |||
| # course = Course.find(params[:id]) | |||
| ps = ProjectsService.new | |||
| project = ps.show_project(params,current_user) | |||
| if project[:status] == 9 | |||
| {status:-1, message: '该项目不存在或已被删除啦' } | |||
| else | |||
| present :data, project, with: Mobile::Entities::Project,user: current_user | |||
| present :status, 0 | |||
| end | |||
| end | |||
| end | |||
| desc "获取项目动态" | |||
| params do | |||
| requires :id, type: Integer | |||
| requires :token, type: String | |||
| end | |||
| post 'activities' do | |||
| authenticate! | |||
| user = current_user | |||
| project_types = "('Message','Issue','Project')" | |||
| activities = UserActivity.where("(container_type = 'Project' and container_id = #{params[:id]} and act_type in #{project_types})").order('updated_at desc') | |||
| page = params[:page] ? params[:page] : 0 | |||
| all_count = activities.count | |||
| activities = activities.limit(10).offset(page * 10) | |||
| count = activities.count | |||
| present :data, activities, with: Mobile::Entities::Activity,user: user | |||
| present :all_count, all_count | |||
| present :count, count | |||
| present :page, page | |||
| present :status, 0 | |||
| end | |||
| desc "获取项目成员" | |||
| params do | |||
| requires :id, type: Integer | |||
| requires :token, type: String | |||
| end | |||
| post 'members' do | |||
| authenticate! | |||
| project = Project.find("#{params[:id]}") | |||
| members = project.member_principals | |||
| master_members = project.member_principals.includes(:roles, :principal).where("member_roles.role_id=3").all.sort | |||
| master_members.each do |m| | |||
| if m.user_id == project.user_id | |||
| master_members.delete(m) | |||
| master_members.insert(0,m) | |||
| break | |||
| end | |||
| end | |||
| develop_members = project.member_principals.includes(:roles, :principal).where("member_roles.role_id=4").all.sort | |||
| report_members = project.member_principals.includes(:roles, :principal).where("member_roles.role_id=5").all.sort | |||
| review_master_members = [] | |||
| review_develop_members = [] | |||
| my_member = project.member_principals.where("users.id=#{current_user.id}").first | |||
| if my_member && my_member.roles[0] && my_member.roles[0].id == 3 | |||
| ps = ProjectsService.new | |||
| user = current_user | |||
| review_master_members = ps.get_project_review_members(project,3,user) | |||
| review_develop_members = ps.get_project_review_members(project,4,user) | |||
| end | |||
| present :master_members,master_members, with: Mobile::Entities::ProjectMember | |||
| present :develop_members,develop_members, with: Mobile::Entities::ProjectMember | |||
| present :report_members,report_members, with: Mobile::Entities::ProjectMember | |||
| present :review_master_members,review_master_members | |||
| present :review_develop_members,review_develop_members | |||
| present :status, 0 | |||
| end | |||
| desc "获取项目某成员角色信息" | |||
| params do | |||
| requires :id, type: Integer | |||
| requires :token, type: String | |||
| requires :user_id, type: Integer | |||
| end | |||
| post 'get_member_info' do | |||
| authenticate! | |||
| project = Project.find("#{params[:id]}") | |||
| my_member = project.member_principals.where("users.id=#{params[:user_id]}").first | |||
| if my_member && my_member.roles[0] | |||
| present :project_id,params[:id] | |||
| present :user_id,params[:user_id] | |||
| present :member_info,my_member, with: Mobile::Entities::ProjectMember | |||
| present :status, 0 | |||
| else | |||
| present :status, -1 | |||
| present :message, "该用户已不在项目中" | |||
| end | |||
| end | |||
| desc "修改项目某成员角色信息" | |||
| params do | |||
| requires :id, type: Integer | |||
| requires :token, type: String | |||
| requires :user_id, type: Integer | |||
| requires :role_id, type: Integer | |||
| end | |||
| post 'edit_member_role' do | |||
| authenticate! | |||
| project = Project.find("#{params[:id]}") | |||
| my_member = project.member_principals.where("users.id=#{current_user.id}").first | |||
| #3管理 4开发 5报告 | |||
| if !(my_member && my_member.roles[0] && my_member.roles[0].id == 3 ) || project.user_id == params[:user_id] || !(params[:role_id] == 3 || params[:role_id] == 4 || params[:role_id] == 5) | |||
| present :status, -1 | |||
| else | |||
| ps = ProjectsService.new | |||
| status = ps.modify_user_project_role params | |||
| present :status, status | |||
| end | |||
| end | |||
| desc "新建项目" | |||
| params do | |||
| requires :token, type: String | |||
| requires :name, type: String, desc: '项目名称' | |||
| end | |||
| post 'create' do | |||
| authenticate! | |||
| ps = ProjectsService.new | |||
| status = ps.createNewProject params,current_user | |||
| present :status, 0 | |||
| end | |||
| desc "加入项目" | |||
| params do | |||
| requires :token, type: String | |||
| requires :invite_code, type: String, desc: '邀请码' | |||
| requires :role_id, type: Integer, desc: '身份' | |||
| end | |||
| post "join_project" do | |||
| authenticate! | |||
| role_id = params[:role_id] | |||
| if role_id != 3 && role_id != 4 && role_id != 5 | |||
| {status:-1,message:"请至少选择一个角色"} | |||
| else | |||
| ps = ProjectsService.new | |||
| status = ps.join_project({role: role_id, openid: params[:openid], invite_code: params[:invite_code]}, current_user) | |||
| {status:status, message:ProjectsService::JoinProjectError.message(status)} | |||
| end | |||
| # {status:-1, message: '该功能将在近日开放,敬请期待!' } | |||
| end | |||
| desc "项目单个未审核用户信息" | |||
| params do | |||
| requires :token, type: String | |||
| requires :project_id, type: Integer, desc: "项目id" | |||
| requires :user_id, type: Integer, desc: "用户id" | |||
| end | |||
| post 'review_member_info' do | |||
| authenticate! | |||
| ps = ProjectsService.new | |||
| result = ps.get_reviewer_info(params,current_user) | |||
| present :data, result[:reviewer], with: Mobile::Entities::User | |||
| present :status, result[:status] | |||
| end | |||
| desc "处理管理或开发的身份申请" | |||
| params do | |||
| requires :token, type: String | |||
| requires :project_id, type: Integer, desc: "项目id" | |||
| requires :user_id, type: Integer, desc: "用户id" | |||
| requires :type, type: Integer, desc: "同意或拒绝" | |||
| end | |||
| post 'deal_join_apply' do | |||
| authenticate! | |||
| ps = ProjectsService.new | |||
| result = ps.deal_join_apply(params,current_user) | |||
| present :status, result[:status] | |||
| present :message, result[:message] | |||
| end | |||
| desc "发布项目帖子" | |||
| params do | |||
| requires :id, type: Integer | |||
| requires :token, type: String | |||
| requires :text, type: String | |||
| end | |||
| post ':id/publishnote' do | |||
| authenticate! | |||
| project = Project.find("#{params[:id]}") | |||
| boards = project.boards.includes(:last_message => :author).all | |||
| if project.boards.empty? | |||
| board = project.boards.build | |||
| board.name = "项目讨论区" | |||
| board.description = project.name.to_s | |||
| board.course_id = -1 | |||
| if board.save | |||
| boards = project.boards.includes(:last_message => :author).all | |||
| end | |||
| end | |||
| board = boards.first | |||
| message = Message.new | |||
| message.author = current_user | |||
| message.board = board | |||
| tmpparams = {} | |||
| tmpparams['subject'] = params[:title] | |||
| tmpparams['content'] = params[:text] | |||
| message.safe_attributes = tmpparams | |||
| message.save! | |||
| present :status, 0 | |||
| end | |||
| desc "删除项目成员" | |||
| params do | |||
| requires :id, type: Integer | |||
| requires :token, type: String | |||
| requires :user_id, type: Integer | |||
| end | |||
| post ':id/deletemember' do | |||
| authenticate! | |||
| status = -1 | |||
| if(current_user.id != params[:user_id].to_i) | |||
| #权限 | |||
| project = Project.find("#{params[:id]}") | |||
| if project.user_id != params[:user_id].to_i | |||
| my_member = project.member_principals.where("users.id=#{current_user.id}").first | |||
| roles_ids = [] | |||
| my_member.roles.each do |role| | |||
| roles_ids << role.id | |||
| end | |||
| if my_member && roles_ids.include?(3) | |||
| #删除该成员 | |||
| ps = ProjectsService.new | |||
| status = ps.project_delete_member(project,params[:user_id].to_i,current_user) | |||
| else | |||
| status = -2 | |||
| end | |||
| else | |||
| status = -3 | |||
| end | |||
| else | |||
| status = -4 | |||
| end | |||
| out = {status: status} | |||
| message = case status | |||
| when 0; "删除成功" | |||
| when 1; "该用户不在该项目中" | |||
| when -1; "您还未登录" | |||
| when -2; "您没有权限" | |||
| when -3; "不能删除项目创建者" | |||
| when -4; "不能删除自己" | |||
| else; "未知错误,请稍后再试" | |||
| end | |||
| out.merge(message: message) | |||
| end | |||
| desc "退出项目" | |||
| params do | |||
| requires :id, type: Integer | |||
| requires :token, type: String | |||
| end | |||
| post ':id/quit' do | |||
| authenticate! | |||
| project = Project.find("#{params[:id]}") | |||
| ps = ProjectsService.new | |||
| status = ps.exit_project(project,current_user) | |||
| out = {status: status} | |||
| message = case status | |||
| when 0; "退出项目成功" | |||
| when -3; "您不是该项目成员" | |||
| when -1; "您还未登录" | |||
| when -2; "项目创建者不能退出项目" | |||
| else; "未知错误,请稍后再试" | |||
| end | |||
| out.merge(message: message) | |||
| end | |||
| end | |||
| end | |||
| end | |||
| #coding=utf-8 | |||
| module Mobile | |||
| module Apis | |||
| class Projects < Grape::API | |||
| resources :projects do | |||
| desc "获取项目列表" | |||
| params do | |||
| requires :token, type: String | |||
| end | |||
| get do | |||
| authenticate! | |||
| ps = ProjectsService.new | |||
| projects = ps.user_projects(current_user) | |||
| present :data, projects, with: Mobile::Entities::Project,user: current_user | |||
| present :status, 0 | |||
| end | |||
| desc "返回单个项目" | |||
| params do | |||
| requires :id, type: Integer | |||
| requires :token,type:String | |||
| end | |||
| route_param :id do | |||
| get do | |||
| # course = Course.find(params[:id]) | |||
| ps = ProjectsService.new | |||
| project = ps.show_project(params,current_user) | |||
| if project[:status] == 9 | |||
| {status:-1, message: '该项目不存在或已被删除啦' } | |||
| else | |||
| present :data, project, with: Mobile::Entities::Project,user: current_user | |||
| present :status, 0 | |||
| end | |||
| end | |||
| end | |||
| desc "获取项目动态" | |||
| params do | |||
| requires :id, type: Integer | |||
| requires :token, type: String | |||
| end | |||
| post 'activities' do | |||
| authenticate! | |||
| user = current_user | |||
| project_types = "('Message','Issue','Project')" | |||
| activities = UserActivity.where("(container_type = 'Project' and container_id = #{params[:id]} and act_type in #{project_types})").order('updated_at desc') | |||
| page = params[:page] ? params[:page] : 0 | |||
| all_count = activities.count | |||
| activities = activities.limit(10).offset(page * 10) | |||
| count = activities.count | |||
| present :data, activities, with: Mobile::Entities::Activity,user: user | |||
| present :all_count, all_count | |||
| present :count, count | |||
| present :page, page | |||
| present :status, 0 | |||
| end | |||
| desc "获取项目成员" | |||
| params do | |||
| requires :id, type: Integer | |||
| requires :token, type: String | |||
| end | |||
| post 'members' do | |||
| authenticate! | |||
| project = Project.find("#{params[:id]}") | |||
| members = project.member_principals | |||
| master_members = project.member_principals.includes(:roles, :principal).where("member_roles.role_id=3").all.sort | |||
| master_members.each do |m| | |||
| if m.user_id == project.user_id | |||
| master_members.delete(m) | |||
| master_members.insert(0,m) | |||
| break | |||
| end | |||
| end | |||
| develop_members = project.member_principals.includes(:roles, :principal).where("member_roles.role_id=4").all.sort | |||
| report_members = project.member_principals.includes(:roles, :principal).where("member_roles.role_id=5").all.sort | |||
| review_master_members = [] | |||
| review_develop_members = [] | |||
| my_member = project.member_principals.where("users.id=#{current_user.id}").first | |||
| if my_member && my_member.roles[0] && my_member.roles[0].id == 3 | |||
| ps = ProjectsService.new | |||
| user = current_user | |||
| review_master_members = ps.get_project_review_members(project,3,user) | |||
| review_develop_members = ps.get_project_review_members(project,4,user) | |||
| end | |||
| present :master_members,master_members, with: Mobile::Entities::ProjectMember | |||
| present :develop_members,develop_members, with: Mobile::Entities::ProjectMember | |||
| present :report_members,report_members, with: Mobile::Entities::ProjectMember | |||
| present :review_master_members,review_master_members | |||
| present :review_develop_members,review_develop_members | |||
| present :status, 0 | |||
| end | |||
| desc "获取项目某成员角色信息" | |||
| params do | |||
| requires :id, type: Integer | |||
| requires :token, type: String | |||
| requires :user_id, type: Integer | |||
| end | |||
| post 'get_member_info' do | |||
| authenticate! | |||
| project = Project.find("#{params[:id]}") | |||
| my_member = project.member_principals.where("users.id=#{params[:user_id]}").first | |||
| if my_member && my_member.roles[0] | |||
| present :project_id,params[:id] | |||
| present :user_id,params[:user_id] | |||
| present :member_info,my_member, with: Mobile::Entities::ProjectMember | |||
| present :status, 0 | |||
| else | |||
| present :status, -1 | |||
| present :message, "该用户已不在项目中" | |||
| end | |||
| end | |||
| desc "修改项目某成员角色信息" | |||
| params do | |||
| requires :id, type: Integer | |||
| requires :token, type: String | |||
| requires :user_id, type: Integer | |||
| requires :role_id, type: Integer | |||
| end | |||
| post 'edit_member_role' do | |||
| authenticate! | |||
| project = Project.find("#{params[:id]}") | |||
| my_member = project.member_principals.where("users.id=#{current_user.id}").first | |||
| #3管理 4开发 5报告 | |||
| if !(my_member && my_member.roles[0] && my_member.roles[0].id == 3 ) || project.user_id == params[:user_id] || !(params[:role_id] == 3 || params[:role_id] == 4 || params[:role_id] == 5) | |||
| present :status, -1 | |||
| else | |||
| ps = ProjectsService.new | |||
| status = ps.modify_user_project_role params | |||
| present :status, status | |||
| end | |||
| end | |||
| desc "新建项目" | |||
| params do | |||
| requires :token, type: String | |||
| requires :name, type: String, desc: '项目名称' | |||
| end | |||
| post 'create' do | |||
| authenticate! | |||
| ps = ProjectsService.new | |||
| status = ps.createNewProject params,current_user | |||
| present :status, 0 | |||
| end | |||
| desc "加入项目" | |||
| params do | |||
| requires :token, type: String | |||
| requires :invite_code, type: String, desc: '邀请码' | |||
| requires :role_id, type: Integer, desc: '身份' | |||
| end | |||
| post "join_project" do | |||
| authenticate! | |||
| role_id = params[:role_id] | |||
| if role_id != 3 && role_id != 4 && role_id != 5 | |||
| {status:-1,message:"请至少选择一个角色"} | |||
| else | |||
| ps = ProjectsService.new | |||
| status = ps.join_project({role: role_id, openid: params[:openid], invite_code: params[:invite_code]}, current_user) | |||
| {status:status, message:ProjectsService::JoinProjectError.message(status)} | |||
| end | |||
| # {status:-1, message: '该功能将在近日开放,敬请期待!' } | |||
| end | |||
| desc "项目单个未审核用户信息" | |||
| params do | |||
| requires :token, type: String | |||
| requires :project_id, type: Integer, desc: "项目id" | |||
| requires :user_id, type: Integer, desc: "用户id" | |||
| end | |||
| post 'review_member_info' do | |||
| authenticate! | |||
| ps = ProjectsService.new | |||
| result = ps.get_reviewer_info(params,current_user) | |||
| present :data, result[:reviewer], with: Mobile::Entities::User | |||
| present :status, result[:status] | |||
| end | |||
| desc "处理管理或开发的身份申请" | |||
| params do | |||
| requires :token, type: String | |||
| requires :project_id, type: Integer, desc: "项目id" | |||
| requires :user_id, type: Integer, desc: "用户id" | |||
| requires :type, type: Integer, desc: "同意或拒绝" | |||
| end | |||
| post 'deal_join_apply' do | |||
| authenticate! | |||
| ps = ProjectsService.new | |||
| result = ps.deal_join_apply(params,current_user) | |||
| present :status, result[:status] | |||
| present :message, result[:message] | |||
| end | |||
| desc "发布项目帖子" | |||
| params do | |||
| requires :id, type: Integer | |||
| requires :token, type: String | |||
| requires :text, type: String | |||
| end | |||
| post ':id/publishnote' do | |||
| authenticate! | |||
| project = Project.find("#{params[:id]}") | |||
| boards = project.boards.includes(:last_message => :author).all | |||
| if project.boards.empty? | |||
| board = project.boards.build | |||
| board.name = "项目讨论区" | |||
| board.description = project.name.to_s | |||
| board.course_id = -1 | |||
| if board.save | |||
| boards = project.boards.includes(:last_message => :author).all | |||
| end | |||
| end | |||
| board = boards.first | |||
| message = Message.new | |||
| message.author = current_user | |||
| message.board = board | |||
| tmpparams = {} | |||
| tmpparams['subject'] = params[:title] | |||
| tmpparams['content'] = params[:text] | |||
| message.safe_attributes = tmpparams | |||
| message.save! | |||
| present :status, 0 | |||
| end | |||
| desc "删除项目成员" | |||
| params do | |||
| requires :id, type: Integer | |||
| requires :token, type: String | |||
| requires :user_id, type: Integer | |||
| end | |||
| post ':id/deletemember' do | |||
| authenticate! | |||
| status = -1 | |||
| if(current_user.id != params[:user_id].to_i) | |||
| #权限 | |||
| project = Project.find("#{params[:id]}") | |||
| if project.user_id != params[:user_id].to_i | |||
| my_member = project.member_principals.where("users.id=#{current_user.id}").first | |||
| roles_ids = [] | |||
| my_member.roles.each do |role| | |||
| roles_ids << role.id | |||
| end | |||
| if my_member && roles_ids.include?(3) | |||
| #删除该成员 | |||
| ps = ProjectsService.new | |||
| status = ps.project_delete_member(project,params[:user_id].to_i,current_user) | |||
| else | |||
| status = -2 | |||
| end | |||
| else | |||
| status = -3 | |||
| end | |||
| else | |||
| status = -4 | |||
| end | |||
| out = {status: status} | |||
| message = case status | |||
| when 0; "删除成功" | |||
| when 1; "该用户不在该项目中" | |||
| when -1; "您还未登录" | |||
| when -2; "您没有权限" | |||
| when -3; "不能删除项目创建者" | |||
| when -4; "不能删除自己" | |||
| else; "未知错误,请稍后再试" | |||
| end | |||
| out.merge(message: message) | |||
| end | |||
| desc "退出项目" | |||
| params do | |||
| requires :id, type: Integer | |||
| requires :token, type: String | |||
| end | |||
| post ':id/quit' do | |||
| authenticate! | |||
| project = Project.find("#{params[:id]}") | |||
| ps = ProjectsService.new | |||
| status = ps.exit_project(project,current_user) | |||
| out = {status: status} | |||
| message = case status | |||
| when 0; "退出项目成功" | |||
| when -3; "您不是该项目成员" | |||
| when -1; "您还未登录" | |||
| when -2; "项目创建者不能退出项目" | |||
| else; "未知错误,请稍后再试" | |||
| end | |||
| out.merge(message: message) | |||
| end | |||
| end | |||
| end | |||
| end | |||
| end | |||
| @@ -1,119 +1,119 @@ | |||
| #coding=utf-8 | |||
| module Mobile | |||
| module Apis | |||
| class Resources < Grape::API | |||
| resource :resources do | |||
| desc '获取所有课件' | |||
| params do | |||
| requires :token, type: String | |||
| requires :page, type: Integer | |||
| end | |||
| post do | |||
| authenticate! | |||
| page = params[:page] ? params[:page] : 0 | |||
| rs = ResourcesService.new | |||
| # data = current_user.course_attachments | |||
| data = rs.all_course_attachments current_user | |||
| all_count = data.count | |||
| data = data.limit(10).offset(page * 10) | |||
| count = data.count | |||
| present :data, data, with: Mobile::Entities::Attachment,user: current_user | |||
| present :all_count, all_count | |||
| present :count, count | |||
| present :page, page | |||
| present :status, 0 | |||
| end | |||
| desc '获取所有作业' | |||
| params do | |||
| requires :token, type: String | |||
| requires :page, type: Integer | |||
| end | |||
| post 'homeworks' do | |||
| authenticate! | |||
| page = params[:page] ? params[:page] : 0 | |||
| rs = ResourcesService.new | |||
| homeworks = rs.all_homework_commons current_user | |||
| all_count = homeworks.count | |||
| homeworks = homeworks.limit(10).offset(page * 10) | |||
| count = homeworks.count | |||
| present :data, homeworks, with: Mobile::Entities::Homework,user: current_user | |||
| present :all_count, all_count | |||
| present :count, count | |||
| present :page, page | |||
| present :status, 0 | |||
| end | |||
| desc '获取所有测验' | |||
| params do | |||
| requires :token, type: String | |||
| requires :page, type: Integer | |||
| end | |||
| post 'exercises' do | |||
| authenticate! | |||
| page = params[:page] ? params[:page] : 0 | |||
| rs = ResourcesService.new | |||
| exercises = rs.all_exercises current_user | |||
| all_count = exercises.count | |||
| exercises = exercises.limit(10).offset(page * 10) | |||
| count = exercises.count | |||
| present :data, exercises, with: Mobile::Entities::Exercise,user: current_user | |||
| present :all_count, all_count | |||
| present :count, count | |||
| present :page, page | |||
| present :status, 0 | |||
| end | |||
| desc '发送资源' | |||
| params do | |||
| requires :token, type: String | |||
| requires :course_ids, type: Array[Integer] | |||
| requires :send_id, type: Integer | |||
| requires :send_type, type: Integer | |||
| end | |||
| post 'send' do | |||
| authenticate! | |||
| rs = ResourcesService.new | |||
| ori = nil | |||
| flag = false | |||
| save_message = nil | |||
| case params[:send_type] | |||
| when 1 | |||
| ori, flag, save_message = rs.send_resource_to_course(current_user,params) | |||
| when 2 | |||
| ori, flag, save_message = rs.send_homework_to_course(current_user,params) | |||
| when 3 | |||
| ori, flag, save_message = rs.send_exercise_to_course(current_user,params) | |||
| end | |||
| if flag | |||
| present :status, 0 | |||
| else | |||
| {status: -1, message: save_message.first} | |||
| end | |||
| end | |||
| end | |||
| end | |||
| end | |||
| #coding=utf-8 | |||
| module Mobile | |||
| module Apis | |||
| class Resources < Grape::API | |||
| resource :resources do | |||
| desc '获取所有课件' | |||
| params do | |||
| requires :token, type: String | |||
| requires :page, type: Integer | |||
| end | |||
| post do | |||
| authenticate! | |||
| page = params[:page] ? params[:page] : 0 | |||
| rs = ResourcesService.new | |||
| # data = current_user.course_attachments | |||
| data = rs.all_course_attachments current_user | |||
| all_count = data.count | |||
| data = data.limit(10).offset(page * 10) | |||
| count = data.count | |||
| present :data, data, with: Mobile::Entities::Attachment,user: current_user | |||
| present :all_count, all_count | |||
| present :count, count | |||
| present :page, page | |||
| present :status, 0 | |||
| end | |||
| desc '获取所有作业' | |||
| params do | |||
| requires :token, type: String | |||
| requires :page, type: Integer | |||
| end | |||
| post 'homeworks' do | |||
| authenticate! | |||
| page = params[:page] ? params[:page] : 0 | |||
| rs = ResourcesService.new | |||
| homeworks = rs.all_homework_commons current_user | |||
| all_count = homeworks.count | |||
| homeworks = homeworks.limit(10).offset(page * 10) | |||
| count = homeworks.count | |||
| present :data, homeworks, with: Mobile::Entities::Homework,user: current_user | |||
| present :all_count, all_count | |||
| present :count, count | |||
| present :page, page | |||
| present :status, 0 | |||
| end | |||
| desc '获取所有测验' | |||
| params do | |||
| requires :token, type: String | |||
| requires :page, type: Integer | |||
| end | |||
| post 'exercises' do | |||
| authenticate! | |||
| page = params[:page] ? params[:page] : 0 | |||
| rs = ResourcesService.new | |||
| exercises = rs.all_exercises current_user | |||
| all_count = exercises.count | |||
| exercises = exercises.limit(10).offset(page * 10) | |||
| count = exercises.count | |||
| present :data, exercises, with: Mobile::Entities::Exercise,user: current_user | |||
| present :all_count, all_count | |||
| present :count, count | |||
| present :page, page | |||
| present :status, 0 | |||
| end | |||
| desc '发送资源' | |||
| params do | |||
| requires :token, type: String | |||
| requires :course_ids, type: Array[Integer] | |||
| requires :send_id, type: Integer | |||
| requires :send_type, type: Integer | |||
| end | |||
| post 'send' do | |||
| authenticate! | |||
| rs = ResourcesService.new | |||
| ori = nil | |||
| flag = false | |||
| save_message = nil | |||
| case params[:send_type] | |||
| when 1 | |||
| ori, flag, save_message = rs.send_resource_to_course(current_user,params) | |||
| when 2 | |||
| ori, flag, save_message = rs.send_homework_to_course(current_user,params) | |||
| when 3 | |||
| ori, flag, save_message = rs.send_exercise_to_course(current_user,params) | |||
| end | |||
| if flag | |||
| present :status, 0 | |||
| else | |||
| {status: -1, message: save_message.first} | |||
| end | |||
| end | |||
| end | |||
| end | |||
| end | |||
| end | |||
| @@ -1,103 +1,103 @@ | |||
| #coding=utf-8 | |||
| module Mobile | |||
| module Apis | |||
| class Syllabuses < Grape::API | |||
| resources :syllabuses do | |||
| desc "获取大纲列表" | |||
| params do | |||
| requires :token, type: String | |||
| end | |||
| get do | |||
| authenticate! | |||
| cs = SyllabusesService.new | |||
| courses = cs.user_syllabus(current_user) | |||
| present :data, courses, with: Mobile::Entities::Syllabus,user: current_user | |||
| present :status, 0 | |||
| end | |||
| desc "获取某个大纲" | |||
| params do | |||
| requires :token, type: String | |||
| end | |||
| get ':id' do | |||
| authenticate! | |||
| ss = SyllabusesService.new | |||
| sy = ::Syllabus.find(params[:id]) | |||
| result = {:title=>sy.title, :id=>sy.id , :user_id=>sy.user_id,:courses=>sy.courses.not_deleted} | |||
| present :data, result, with: Mobile::Entities::Syllabus,user: current_user | |||
| present :status, 0 | |||
| end | |||
| desc "获取新建大纲的权限" | |||
| params do | |||
| requires :token, type: String | |||
| end | |||
| post 'auth' do | |||
| authenticate! | |||
| auth = 0 | |||
| if (current_user.user_extensions && current_user.user_extensions.identity == 0 && current_user.allowed_to?(:add_course, nil, :global => true)) | |||
| auth = 1 | |||
| end | |||
| present :auth, auth | |||
| end | |||
| desc "新建大纲" | |||
| params do | |||
| requires :token, type: String | |||
| requires :title, type: String, desc: '大纲标题' | |||
| requires :courses, type: Array[String], desc: '课程名' | |||
| end | |||
| post do | |||
| authenticate! | |||
| ss = SyllabusesService.new | |||
| sy = ss.create(current_user, params[:title], | |||
| params[:courses].map{|c| {name: c} }) | |||
| if sy.new_record? | |||
| {status:-1, message: '创建大纲失败' } | |||
| else | |||
| present :data, sy, with: Mobile::Entities::Syllabus,user: current_user | |||
| present :status, 0 | |||
| end | |||
| end | |||
| desc '编辑大纲' | |||
| params do | |||
| requires :token, type: String | |||
| requires :title, type: String, desc: '大纲标题' | |||
| # requires :add_courses, type: Array[String], desc: '课程名' | |||
| # requires :modify_courses, type: Array[Integer,String], desc: '课程名' | |||
| end | |||
| post ':id/edit' do | |||
| authenticate! | |||
| ss = SyllabusesService.new | |||
| #修改课程大纲 | |||
| status = ss.edit(current_user, params) | |||
| if status == -1 | |||
| {status:status, message: '修改课程信息失败' } | |||
| else | |||
| present :status, status | |||
| end | |||
| end | |||
| end | |||
| end | |||
| end | |||
| #coding=utf-8 | |||
| module Mobile | |||
| module Apis | |||
| class Syllabuses < Grape::API | |||
| resources :syllabuses do | |||
| desc "获取大纲列表" | |||
| params do | |||
| requires :token, type: String | |||
| end | |||
| get do | |||
| authenticate! | |||
| cs = SyllabusesService.new | |||
| courses = cs.user_syllabus(current_user) | |||
| present :data, courses, with: Mobile::Entities::Syllabus,user: current_user | |||
| present :status, 0 | |||
| end | |||
| desc "获取某个大纲" | |||
| params do | |||
| requires :token, type: String | |||
| end | |||
| get ':id' do | |||
| authenticate! | |||
| ss = SyllabusesService.new | |||
| sy = ::Syllabus.find(params[:id]) | |||
| result = {:title=>sy.title, :id=>sy.id , :user_id=>sy.user_id,:courses=>sy.courses.not_deleted} | |||
| present :data, result, with: Mobile::Entities::Syllabus,user: current_user | |||
| present :status, 0 | |||
| end | |||
| desc "获取新建大纲的权限" | |||
| params do | |||
| requires :token, type: String | |||
| end | |||
| post 'auth' do | |||
| authenticate! | |||
| auth = 0 | |||
| if (current_user.user_extensions && current_user.user_extensions.identity == 0 && current_user.allowed_to?(:add_course, nil, :global => true)) | |||
| auth = 1 | |||
| end | |||
| present :auth, auth | |||
| end | |||
| desc "新建大纲" | |||
| params do | |||
| requires :token, type: String | |||
| requires :title, type: String, desc: '大纲标题' | |||
| requires :courses, type: Array[String], desc: '课程名' | |||
| end | |||
| post do | |||
| authenticate! | |||
| ss = SyllabusesService.new | |||
| sy = ss.create(current_user, params[:title], | |||
| params[:courses].map{|c| {name: c} }) | |||
| if sy.new_record? | |||
| {status:-1, message: '创建大纲失败' } | |||
| else | |||
| present :data, sy, with: Mobile::Entities::Syllabus,user: current_user | |||
| present :status, 0 | |||
| end | |||
| end | |||
| desc '编辑大纲' | |||
| params do | |||
| requires :token, type: String | |||
| requires :title, type: String, desc: '大纲标题' | |||
| # requires :add_courses, type: Array[String], desc: '课程名' | |||
| # requires :modify_courses, type: Array[Integer,String], desc: '课程名' | |||
| end | |||
| post ':id/edit' do | |||
| authenticate! | |||
| ss = SyllabusesService.new | |||
| #修改课程大纲 | |||
| status = ss.edit(current_user, params) | |||
| if status == -1 | |||
| {status:status, message: '修改课程信息失败' } | |||
| else | |||
| present :status, status | |||
| end | |||
| end | |||
| end | |||
| end | |||
| end | |||
| end | |||
| @@ -1,29 +1,29 @@ | |||
| #coding=utf-8 | |||
| module Mobile | |||
| module Apis | |||
| class Upgrade < Grape::API | |||
| include ApplicationHelper | |||
| resource :upgrade do | |||
| desc "get update info" | |||
| params do | |||
| requires :platform, type: String, desc: '平台名,android, ios' | |||
| end | |||
| get do | |||
| @current_version = ::PhoneAppVersion.reorder('created_at desc').first | |||
| attachment = @current_version.attachments.first | |||
| if attachment.nil? | |||
| raise '未发现客户端!' | |||
| end | |||
| url = "http://" + Setting.host_name + "/attachments/download/" + attachment.id.to_s + "/" + attachment.filename | |||
| { | |||
| version: @current_version.version, | |||
| url: url, | |||
| desc: @current_version.description | |||
| } | |||
| end | |||
| end | |||
| end | |||
| end | |||
| end | |||
| #coding=utf-8 | |||
| module Mobile | |||
| module Apis | |||
| class Upgrade < Grape::API | |||
| include ApplicationHelper | |||
| resource :upgrade do | |||
| desc "get update info" | |||
| params do | |||
| requires :platform, type: String, desc: '平台名,android, ios' | |||
| end | |||
| get do | |||
| @current_version = ::PhoneAppVersion.reorder('created_at desc').first | |||
| attachment = @current_version.attachments.first | |||
| if attachment.nil? | |||
| raise '未发现客户端!' | |||
| end | |||
| url = "http://" + Setting.host_name + "/attachments/download/" + attachment.id.to_s + "/" + attachment.filename | |||
| { | |||
| version: @current_version.version, | |||
| url: url, | |||
| desc: @current_version.description | |||
| } | |||
| end | |||
| end | |||
| end | |||
| end | |||
| end | |||
| @@ -1,320 +1,320 @@ | |||
| #coding=utf-8 | |||
| module Mobile | |||
| module Apis | |||
| class Users < Grape::API | |||
| resource :users do | |||
| desc "我的资料" | |||
| params do | |||
| requires :token, type: String | |||
| end | |||
| get 'get_userinfo' do | |||
| authenticate! | |||
| present :data, current_user, with: Mobile::Entities::User | |||
| present :status, 0 | |||
| end | |||
| desc "上传头像" | |||
| params do | |||
| requires :token, type: String | |||
| requires :imgdata, type: String | |||
| end | |||
| post 'upload_head' do | |||
| authenticate! | |||
| #直接生成头像 | |||
| dirPath = "public/images/avatars/User" | |||
| fileDir = dirPath + "/"+current_user.id.to_s | |||
| imgdata = Base64.decode64(params[:imgdata].split(",")[1]) | |||
| if imgdata.length > 1024*1024 | |||
| present :message,"上传图片不能超过1M" | |||
| present :status, -1 | |||
| else | |||
| begin | |||
| File.open(fileDir,'wb'){ |f| f.write(imgdata) } | |||
| present :status, 0 | |||
| rescue | |||
| present :message,"上传失败" | |||
| present :status, -1 | |||
| end | |||
| end | |||
| end | |||
| desc "解除绑定" | |||
| params do | |||
| requires :token, type: String | |||
| end | |||
| post 'user_unbind' do | |||
| authenticate! | |||
| user = current_user | |||
| uw = user.user_wechat | |||
| us = UsersService.new | |||
| us.wechat_unbind user.user_wechat | |||
| present :status, 0 | |||
| end | |||
| desc "查询是否已绑定" | |||
| params do | |||
| requires :openid, type: String, desc: 'wechat openid' | |||
| end | |||
| post 'isbind' do | |||
| openid = params[:openid] | |||
| uw = UserWechat.where(openid: openid).first | |||
| raise "还未绑定trustie帐户" unless uw | |||
| user = uw.user | |||
| ::ApiKey.delete_all(user_id: user.id) | |||
| key = ::ApiKey.create!(user_id: user.id) | |||
| present status: 0, token: key.access_token | |||
| end | |||
| desc "绑定微信用户" | |||
| params do | |||
| requires :login, type: String, desc: 'username' | |||
| requires :password, type: String, desc: 'password' | |||
| end | |||
| post 'wxbind' do | |||
| openid = session[:wechat_openid] | |||
| logger.debug "openid ============== #{openid}" | |||
| raise "无法获取到openid,请在微信中打开本页面" unless openid | |||
| uw = UserWechat.where(openid: openid).first | |||
| raise "此微信号已绑定用户(#{uw.user.login}), 不能重复绑定" if uw && uw.real? | |||
| user, last_login_on = User.try_to_login(params[:login], params[:password]) | |||
| raise "用户名或密码错误,请重新输入" unless user | |||
| #补全用户信息 | |||
| raise "此用户已经绑定过公众号, 请换一个帐户试试" if user.user_wechat | |||
| if uw && !uw.real? | |||
| uw.migrate_user(user) | |||
| else | |||
| UserWechat.create!( | |||
| openid: openid, | |||
| user: user | |||
| ) | |||
| end | |||
| ws = WechatService.new | |||
| ws.binding_succ_notice(user.id, "您已成功绑定Trustie平台。", user.show_name+"("+user.login+")", Time.now.strftime("%Y-%m-%d")) | |||
| present status: 0, message: '您已成功绑定Trustie平台' | |||
| end | |||
| desc "注册用户" | |||
| params do | |||
| requires :login, type: String, desc: 'username' | |||
| requires :mail, type: String, desc: 'mail' | |||
| requires :password, type: String, desc: 'password' | |||
| end | |||
| post do | |||
| openid = session[:wechat_openid] | |||
| logger.debug "openid ============== #{openid}" | |||
| raise "无法获取到openid,请在微信中打开本页面" unless openid | |||
| uw = UserWechat.where(openid: openid).first | |||
| raise "此微信号已绑定用户(#{uw.user.login}), 不能重复绑定" if uw && uw.real? | |||
| us = UsersService.new | |||
| user = us.register params.merge(:password_confirmation => params[:password], | |||
| :should_confirmation_password => true) | |||
| raise user.errors.full_messages.first if user.new_record? | |||
| #自动激活 | |||
| if Setting.self_registration != '3' | |||
| # user = automatically_register(user) | |||
| user.activate | |||
| user.last_login_on = Time.now | |||
| if user.save | |||
| UserStatus.create(:user_id => user.id, :changsets_count => 0, :watchers_count => 0) | |||
| end | |||
| end | |||
| if uw && !uw.real? | |||
| user.update_attributes(:lastname=>uw.user[:lastname]) | |||
| uw.migrate_user(user) | |||
| else | |||
| UserWechat.create!( | |||
| openid: openid, | |||
| user: user | |||
| ) | |||
| end | |||
| ws = WechatService.new | |||
| ws.binding_succ_notice(user.id, "您已成功绑定Trustie平台。", user.show_name+"("+user.login+")", Time.now.strftime("%Y-%m-%d")) | |||
| present :data, user, with: Mobile::Entities::User | |||
| present :status, 0 | |||
| end | |||
| desc "显示用户" | |||
| params do | |||
| requires :id, type: Integer | |||
| end | |||
| route_param :id do | |||
| get do | |||
| us = UsersService.new | |||
| ue = us.show_user params | |||
| present :data, ue,with: Mobile::Entities::User | |||
| present :status, 0 | |||
| end | |||
| end | |||
| desc "修改用户" | |||
| params do | |||
| requires :token, type: String | |||
| #optional :file, type: File, desc: 'avatar' | |||
| optional :occupation, type: String | |||
| optional :brief_introduction, type: String | |||
| optional :province, type: String | |||
| optional :city, type: String | |||
| optional :gender, type: Integer | |||
| end | |||
| put ':id' do | |||
| authenticate! | |||
| us = UsersService.new | |||
| ue = us.edit_user params.merge(id: current_user.id) | |||
| present :data, ue,with: Mobile::Entities::User | |||
| present :status, 0 | |||
| end | |||
| desc '获取用户课程' | |||
| params do | |||
| optional :token, type: String | |||
| end | |||
| get ':id/courses' do | |||
| us = UsersService.new | |||
| ue = us.user_courses_list params,current_user.nil? ? User.find(2):current_user | |||
| present :data, ue,with: Mobile::Entities::Course | |||
| present :status, 0 | |||
| end | |||
| desc '修改密码' | |||
| params do | |||
| requires :token, type: String | |||
| requires :password, type:String , desc: '原密码' | |||
| requires :new_password, type: String, desc: '新密码' | |||
| end | |||
| post 'password' do | |||
| authenticate! | |||
| us = UsersService.new | |||
| user = us.change_password params.merge(current_user_id: current_user.id, | |||
| new_password_confirmation: params[:new_password]) | |||
| present :data, user, with: Mobile::Entities::User | |||
| present :status, 0 | |||
| end | |||
| desc "用户搜索" | |||
| params do | |||
| requires :name, type: String, desc: '用户名关键字' | |||
| requires :search_by, type: String,desc: '搜索依据:0 登录名,1 用户名,2 邮箱,3 登录名和姓名' | |||
| optional :is_search_assitant,type:Integer,desc:'是否搜索注册用户来作为助教' | |||
| optional :course_id,type:Integer,desc: '课程id,搜索注册用户不为该课程教师的其他用户' | |||
| optional :user_id,type:Integer,desc:'用户id' | |||
| end | |||
| get 'search/search_user' do | |||
| us = UsersService.new | |||
| user = us.search_user params | |||
| present :data, user, with: Mobile::Entities::User | |||
| present :status, 0 | |||
| end | |||
| desc "用户留言" | |||
| params do | |||
| requires :token, type: String | |||
| requires :user_id, type: Integer,desc: '被留言的用户id' | |||
| requires :page,type:Integer,desc:'请求数据的页码' | |||
| end | |||
| get ':user_id/messages' do | |||
| us = UsersService.new | |||
| jours = us.get_all_messages params | |||
| present :data,jours,with:Mobile::Entities::Jours | |||
| present :status,0 | |||
| end | |||
| desc "回复用户留言" | |||
| params do | |||
| requires :token, type: String | |||
| requires :user_id, type: Integer,desc: '被留言的用户id' | |||
| requires :content,type:String,desc:'留言内容' | |||
| requires :ref_user_id,type:Integer,desc:'被回复的用户id' | |||
| requires :parent_id,type:Integer,desc:'留言父id' | |||
| requires :ref_message_id,type:Integer,desc:'引用消息id' | |||
| optional :type,type:Integer,desc:'回复类型' | |||
| optional :course_id,type:Integer,desc:'课程id' | |||
| end | |||
| post ':user_id/reply_message' do | |||
| us = UsersService.new | |||
| jours = us.reply_user_messages params,current_user | |||
| present :status,0 | |||
| end | |||
| desc "给用户留言" | |||
| params do | |||
| requires :token, type: String | |||
| requires :user_id, type: Integer,desc:'被留言的用户id' | |||
| requires :content, type: String,desc:'留言内容' | |||
| end | |||
| post ':user_id/leave_message' do | |||
| us = UsersService.new | |||
| us.leave_message params,current_user | |||
| present :data,0 | |||
| end | |||
| desc "与我相关" | |||
| params do | |||
| requires :token, type: String | |||
| requires :page,type:Integer,desc:'页码' | |||
| end | |||
| get ':user_id/all_my_dynamic' do | |||
| us = UsersService.new | |||
| my_jours = us.reply_my_messages params,current_user | |||
| present :data,my_jours,with:Mobile::Entities::Jours | |||
| present :status,0 | |||
| end | |||
| desc "修改我的资料" | |||
| params do | |||
| requires :token, type: String | |||
| requires :lastname, type: String | |||
| requires :sex, type: Integer | |||
| end | |||
| post 'edit_userinfo' do | |||
| authenticate! | |||
| user = current_user | |||
| status = 0 | |||
| message = "" | |||
| #昵称 不能超过30个字符 | |||
| if params[:lastname].length > 30 then | |||
| message = "姓名不能超过30个字符!" | |||
| status = -1 | |||
| end | |||
| if status == 0 | |||
| user.lastname = params[:lastname] | |||
| user.update_attribute(:lastname, params[:lastname]) | |||
| se = user.extensions | |||
| se.update_attribute(:gender, params[:sex]) | |||
| end | |||
| if status == 0 | |||
| present :data, current_user, with: Mobile::Entities::User | |||
| present :status, 0 | |||
| else | |||
| present :status, -1 | |||
| present :message, message | |||
| end | |||
| end | |||
| end | |||
| end | |||
| end | |||
| end | |||
| #coding=utf-8 | |||
| module Mobile | |||
| module Apis | |||
| class Users < Grape::API | |||
| resource :users do | |||
| desc "我的资料" | |||
| params do | |||
| requires :token, type: String | |||
| end | |||
| get 'get_userinfo' do | |||
| authenticate! | |||
| present :data, current_user, with: Mobile::Entities::User | |||
| present :status, 0 | |||
| end | |||
| desc "上传头像" | |||
| params do | |||
| requires :token, type: String | |||
| requires :imgdata, type: String | |||
| end | |||
| post 'upload_head' do | |||
| authenticate! | |||
| #直接生成头像 | |||
| dirPath = "public/images/avatars/User" | |||
| fileDir = dirPath + "/"+current_user.id.to_s | |||
| imgdata = Base64.decode64(params[:imgdata].split(",")[1]) | |||
| if imgdata.length > 1024*1024 | |||
| present :message,"上传图片不能超过1M" | |||
| present :status, -1 | |||
| else | |||
| begin | |||
| File.open(fileDir,'wb'){ |f| f.write(imgdata) } | |||
| present :status, 0 | |||
| rescue | |||
| present :message,"上传失败" | |||
| present :status, -1 | |||
| end | |||
| end | |||
| end | |||
| desc "解除绑定" | |||
| params do | |||
| requires :token, type: String | |||
| end | |||
| post 'user_unbind' do | |||
| authenticate! | |||
| user = current_user | |||
| uw = user.user_wechat | |||
| us = UsersService.new | |||
| us.wechat_unbind user.user_wechat | |||
| present :status, 0 | |||
| end | |||
| desc "查询是否已绑定" | |||
| params do | |||
| requires :openid, type: String, desc: 'wechat openid' | |||
| end | |||
| post 'isbind' do | |||
| openid = params[:openid] | |||
| uw = UserWechat.where(openid: openid).first | |||
| raise "还未绑定trustie帐户" unless uw | |||
| user = uw.user | |||
| ::ApiKey.delete_all(user_id: user.id) | |||
| key = ::ApiKey.create!(user_id: user.id) | |||
| present status: 0, token: key.access_token | |||
| end | |||
| desc "绑定微信用户" | |||
| params do | |||
| requires :login, type: String, desc: 'username' | |||
| requires :password, type: String, desc: 'password' | |||
| end | |||
| post 'wxbind' do | |||
| openid = session[:wechat_openid] | |||
| logger.debug "openid ============== #{openid}" | |||
| raise "无法获取到openid,请在微信中打开本页面" unless openid | |||
| uw = UserWechat.where(openid: openid).first | |||
| raise "此微信号已绑定用户(#{uw.user.login}), 不能重复绑定" if uw && uw.real? | |||
| user, last_login_on = User.try_to_login(params[:login], params[:password]) | |||
| raise "用户名或密码错误,请重新输入" unless user | |||
| #补全用户信息 | |||
| raise "此用户已经绑定过公众号, 请换一个帐户试试" if user.user_wechat | |||
| if uw && !uw.real? | |||
| uw.migrate_user(user) | |||
| else | |||
| UserWechat.create!( | |||
| openid: openid, | |||
| user: user | |||
| ) | |||
| end | |||
| ws = WechatService.new | |||
| ws.binding_succ_notice(user.id, "您已成功绑定Trustie平台。", user.show_name+"("+user.login+")", Time.now.strftime("%Y-%m-%d")) | |||
| present status: 0, message: '您已成功绑定Trustie平台' | |||
| end | |||
| desc "注册用户" | |||
| params do | |||
| requires :login, type: String, desc: 'username' | |||
| requires :mail, type: String, desc: 'mail' | |||
| requires :password, type: String, desc: 'password' | |||
| end | |||
| post do | |||
| openid = session[:wechat_openid] | |||
| logger.debug "openid ============== #{openid}" | |||
| raise "无法获取到openid,请在微信中打开本页面" unless openid | |||
| uw = UserWechat.where(openid: openid).first | |||
| raise "此微信号已绑定用户(#{uw.user.login}), 不能重复绑定" if uw && uw.real? | |||
| us = UsersService.new | |||
| user = us.register params.merge(:password_confirmation => params[:password], | |||
| :should_confirmation_password => true) | |||
| raise user.errors.full_messages.first if user.new_record? | |||
| #自动激活 | |||
| if Setting.self_registration != '3' | |||
| # user = automatically_register(user) | |||
| user.activate | |||
| user.last_login_on = Time.now | |||
| if user.save | |||
| UserStatus.create(:user_id => user.id, :changsets_count => 0, :watchers_count => 0) | |||
| end | |||
| end | |||
| if uw && !uw.real? | |||
| user.update_attributes(:lastname=>uw.user[:lastname]) | |||
| uw.migrate_user(user) | |||
| else | |||
| UserWechat.create!( | |||
| openid: openid, | |||
| user: user | |||
| ) | |||
| end | |||
| ws = WechatService.new | |||
| ws.binding_succ_notice(user.id, "您已成功绑定Trustie平台。", user.show_name+"("+user.login+")", Time.now.strftime("%Y-%m-%d")) | |||
| present :data, user, with: Mobile::Entities::User | |||
| present :status, 0 | |||
| end | |||
| desc "显示用户" | |||
| params do | |||
| requires :id, type: Integer | |||
| end | |||
| route_param :id do | |||
| get do | |||
| us = UsersService.new | |||
| ue = us.show_user params | |||
| present :data, ue,with: Mobile::Entities::User | |||
| present :status, 0 | |||
| end | |||
| end | |||
| desc "修改用户" | |||
| params do | |||
| requires :token, type: String | |||
| #optional :file, type: File, desc: 'avatar' | |||
| optional :occupation, type: String | |||
| optional :brief_introduction, type: String | |||
| optional :province, type: String | |||
| optional :city, type: String | |||
| optional :gender, type: Integer | |||
| end | |||
| put ':id' do | |||
| authenticate! | |||
| us = UsersService.new | |||
| ue = us.edit_user params.merge(id: current_user.id) | |||
| present :data, ue,with: Mobile::Entities::User | |||
| present :status, 0 | |||
| end | |||
| desc '获取用户课程' | |||
| params do | |||
| optional :token, type: String | |||
| end | |||
| get ':id/courses' do | |||
| us = UsersService.new | |||
| ue = us.user_courses_list params,current_user.nil? ? User.find(2):current_user | |||
| present :data, ue,with: Mobile::Entities::Course | |||
| present :status, 0 | |||
| end | |||
| desc '修改密码' | |||
| params do | |||
| requires :token, type: String | |||
| requires :password, type:String , desc: '原密码' | |||
| requires :new_password, type: String, desc: '新密码' | |||
| end | |||
| post 'password' do | |||
| authenticate! | |||
| us = UsersService.new | |||
| user = us.change_password params.merge(current_user_id: current_user.id, | |||
| new_password_confirmation: params[:new_password]) | |||
| present :data, user, with: Mobile::Entities::User | |||
| present :status, 0 | |||
| end | |||
| desc "用户搜索" | |||
| params do | |||
| requires :name, type: String, desc: '用户名关键字' | |||
| requires :search_by, type: String,desc: '搜索依据:0 登录名,1 用户名,2 邮箱,3 登录名和姓名' | |||
| optional :is_search_assitant,type:Integer,desc:'是否搜索注册用户来作为助教' | |||
| optional :course_id,type:Integer,desc: '课程id,搜索注册用户不为该课程教师的其他用户' | |||
| optional :user_id,type:Integer,desc:'用户id' | |||
| end | |||
| get 'search/search_user' do | |||
| us = UsersService.new | |||
| user = us.search_user params | |||
| present :data, user, with: Mobile::Entities::User | |||
| present :status, 0 | |||
| end | |||
| desc "用户留言" | |||
| params do | |||
| requires :token, type: String | |||
| requires :user_id, type: Integer,desc: '被留言的用户id' | |||
| requires :page,type:Integer,desc:'请求数据的页码' | |||
| end | |||
| get ':user_id/messages' do | |||
| us = UsersService.new | |||
| jours = us.get_all_messages params | |||
| present :data,jours,with:Mobile::Entities::Jours | |||
| present :status,0 | |||
| end | |||
| desc "回复用户留言" | |||
| params do | |||
| requires :token, type: String | |||
| requires :user_id, type: Integer,desc: '被留言的用户id' | |||
| requires :content,type:String,desc:'留言内容' | |||
| requires :ref_user_id,type:Integer,desc:'被回复的用户id' | |||
| requires :parent_id,type:Integer,desc:'留言父id' | |||
| requires :ref_message_id,type:Integer,desc:'引用消息id' | |||
| optional :type,type:Integer,desc:'回复类型' | |||
| optional :course_id,type:Integer,desc:'课程id' | |||
| end | |||
| post ':user_id/reply_message' do | |||
| us = UsersService.new | |||
| jours = us.reply_user_messages params,current_user | |||
| present :status,0 | |||
| end | |||
| desc "给用户留言" | |||
| params do | |||
| requires :token, type: String | |||
| requires :user_id, type: Integer,desc:'被留言的用户id' | |||
| requires :content, type: String,desc:'留言内容' | |||
| end | |||
| post ':user_id/leave_message' do | |||
| us = UsersService.new | |||
| us.leave_message params,current_user | |||
| present :data,0 | |||
| end | |||
| desc "与我相关" | |||
| params do | |||
| requires :token, type: String | |||
| requires :page,type:Integer,desc:'页码' | |||
| end | |||
| get ':user_id/all_my_dynamic' do | |||
| us = UsersService.new | |||
| my_jours = us.reply_my_messages params,current_user | |||
| present :data,my_jours,with:Mobile::Entities::Jours | |||
| present :status,0 | |||
| end | |||
| desc "修改我的资料" | |||
| params do | |||
| requires :token, type: String | |||
| requires :lastname, type: String | |||
| requires :sex, type: Integer | |||
| end | |||
| post 'edit_userinfo' do | |||
| authenticate! | |||
| user = current_user | |||
| status = 0 | |||
| message = "" | |||
| #昵称 不能超过30个字符 | |||
| if params[:lastname].length > 30 then | |||
| message = "姓名不能超过30个字符!" | |||
| status = -1 | |||
| end | |||
| if status == 0 | |||
| user.lastname = params[:lastname] | |||
| user.update_attribute(:lastname, params[:lastname]) | |||
| se = user.extensions | |||
| se.update_attribute(:gender, params[:sex]) | |||
| end | |||
| if status == 0 | |||
| present :data, current_user, with: Mobile::Entities::User | |||
| present :status, 0 | |||
| else | |||
| present :status, -1 | |||
| present :message, message | |||
| end | |||
| end | |||
| end | |||
| end | |||
| end | |||
| end | |||
| @@ -1,49 +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 | |||
| #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 | |||
| @@ -1,139 +1,139 @@ | |||
| module Mobile | |||
| module Entities | |||
| class BlogComment < Grape::Entity | |||
| include ApplicationHelper | |||
| include ApiHelper | |||
| def self.blog_comment_expose(f) | |||
| expose f do |u,opt| | |||
| if u.is_a?(Hash) && u.key?(f) | |||
| u[f] | |||
| elsif u.is_a?(::BlogComment) | |||
| if u.respond_to?(f) | |||
| if f == :created_at | |||
| format_time( u.send(f)) | |||
| else | |||
| u.send(f) | |||
| end | |||
| else | |||
| case f | |||
| when :praise_count | |||
| get_activity_praise_num(u) | |||
| when :lasted_comment | |||
| time_from_now(u.created_at) | |||
| when :act_type | |||
| 'BlogComment' | |||
| when :act_id | |||
| u.id | |||
| when :comment_count | |||
| # u.children.count | |||
| all_comments = [] | |||
| get_all_children(all_comments, u).count | |||
| end | |||
| end | |||
| end | |||
| end | |||
| end | |||
| expose :user, using: Mobile::Entities::User do |c, opt| | |||
| if c.is_a?(::BlogComment) | |||
| c.author | |||
| end | |||
| end | |||
| blog_comment_expose :act_type | |||
| blog_comment_expose :act_id | |||
| blog_comment_expose :blog_id | |||
| blog_comment_expose :title | |||
| blog_comment_expose :content | |||
| blog_comment_expose :comment_count | |||
| blog_comment_expose :created_at | |||
| blog_comment_expose :lasted_comment | |||
| blog_comment_expose :id | |||
| blog_comment_expose :locked | |||
| blog_comment_expose :praise_count | |||
| expose :all_children, using:Mobile::Entities::BlogComment do |c,opt| | |||
| if c.is_a? (::BlogComment) | |||
| if !opt[:children] | |||
| if c.parent.nil? && opt[:type] == 0 | |||
| opt[:children] = true | |||
| all_comments = [] | |||
| tStart = opt[:page]*5 | |||
| tEnd = (opt[:page]+1)*5 - 1 | |||
| all_comments = get_all_children(all_comments, c)[tStart..tEnd] | |||
| all_comments | |||
| end | |||
| end | |||
| end | |||
| end | |||
| expose :has_praise, if: lambda { |instance, options| options[:user] } do |instance, options| | |||
| has_praise = false | |||
| current_user = options[:user] | |||
| obj = PraiseTread.where("praise_tread_object_id=? and praise_tread_object_type=? and user_id=?",instance.id,instance.class.to_s,current_user.id) | |||
| has_praise = obj.empty? ? false : true | |||
| has_praise | |||
| end | |||
| expose :parents_count, if: lambda { |instance, options| options[:user] } do |instance, options| | |||
| parents_reply = [] | |||
| parents_reply = get_reply_parents_no_root(parents_reply, instance) | |||
| parents_reply.count | |||
| end | |||
| expose :parents_reply_bottom, using:Mobile::Entities::BlogComment do |c,opt| | |||
| if c.is_a? (::BlogComment) | |||
| #取二级回复的底楼层 | |||
| parents_reply = [] | |||
| parents_reply = get_reply_parents_no_root(parents_reply, c) | |||
| if parents_reply.count > 0 && !opt[:bottom] | |||
| if opt[:type] == 1 | |||
| # opt[:bottom] = true | |||
| # parents_reply[opt[:page]..opt[:page]] | |||
| else | |||
| opt[:bottom] = true | |||
| parents_reply[0..0] | |||
| end | |||
| else | |||
| [] | |||
| end | |||
| end | |||
| end | |||
| expose :parents_reply_top, using:Mobile::Entities::BlogComment do |c,opt| | |||
| if c.is_a? (::BlogComment) | |||
| #取二级回复的顶楼层 | |||
| parents_reply = [] | |||
| parents_reply = get_reply_parents_no_root(parents_reply, c) | |||
| if parents_reply.count > 2 && !opt[:top] | |||
| if opt[:type] == 1 | |||
| opt[:top] = true | |||
| tStart = (opt[:page]-1)*5+2 | |||
| tEnd = (opt[:page])*5+2 - 1 | |||
| if tEnd >= parents_reply.count - 1 | |||
| tEnd = parents_reply.count - 2 | |||
| end | |||
| if tStart <= parents_reply.count - 2 | |||
| parents_reply = parents_reply.reverse[tStart..tEnd] | |||
| parents_reply.reverse | |||
| else | |||
| [] | |||
| end | |||
| else | |||
| opt[:top] = true | |||
| parents_reply = parents_reply.reverse[0..1] | |||
| parents_reply.reverse | |||
| end | |||
| elsif parents_reply.count == 2 && !opt[:top] | |||
| opt[:top] = true | |||
| parents_reply = parents_reply.reverse[0..0] | |||
| parents_reply.reverse | |||
| else | |||
| [] | |||
| end | |||
| end | |||
| end | |||
| end | |||
| end | |||
| module Mobile | |||
| module Entities | |||
| class BlogComment < Grape::Entity | |||
| include ApplicationHelper | |||
| include ApiHelper | |||
| def self.blog_comment_expose(f) | |||
| expose f do |u,opt| | |||
| if u.is_a?(Hash) && u.key?(f) | |||
| u[f] | |||
| elsif u.is_a?(::BlogComment) | |||
| if u.respond_to?(f) | |||
| if f == :created_at | |||
| format_time( u.send(f)) | |||
| else | |||
| u.send(f) | |||
| end | |||
| else | |||
| case f | |||
| when :praise_count | |||
| get_activity_praise_num(u) | |||
| when :lasted_comment | |||
| time_from_now(u.created_at) | |||
| when :act_type | |||
| 'BlogComment' | |||
| when :act_id | |||
| u.id | |||
| when :comment_count | |||
| # u.children.count | |||
| all_comments = [] | |||
| get_all_children(all_comments, u).count | |||
| end | |||
| end | |||
| end | |||
| end | |||
| end | |||
| expose :user, using: Mobile::Entities::User do |c, opt| | |||
| if c.is_a?(::BlogComment) | |||
| c.author | |||
| end | |||
| end | |||
| blog_comment_expose :act_type | |||
| blog_comment_expose :act_id | |||
| blog_comment_expose :blog_id | |||
| blog_comment_expose :title | |||
| blog_comment_expose :content | |||
| blog_comment_expose :comment_count | |||
| blog_comment_expose :created_at | |||
| blog_comment_expose :lasted_comment | |||
| blog_comment_expose :id | |||
| blog_comment_expose :locked | |||
| blog_comment_expose :praise_count | |||
| expose :all_children, using:Mobile::Entities::BlogComment do |c,opt| | |||
| if c.is_a? (::BlogComment) | |||
| if !opt[:children] | |||
| if c.parent.nil? && opt[:type] == 0 | |||
| opt[:children] = true | |||
| all_comments = [] | |||
| tStart = opt[:page]*5 | |||
| tEnd = (opt[:page]+1)*5 - 1 | |||
| all_comments = get_all_children(all_comments, c)[tStart..tEnd] | |||
| all_comments | |||
| end | |||
| end | |||
| end | |||
| end | |||
| expose :has_praise, if: lambda { |instance, options| options[:user] } do |instance, options| | |||
| has_praise = false | |||
| current_user = options[:user] | |||
| obj = PraiseTread.where("praise_tread_object_id=? and praise_tread_object_type=? and user_id=?",instance.id,instance.class.to_s,current_user.id) | |||
| has_praise = obj.empty? ? false : true | |||
| has_praise | |||
| end | |||
| expose :parents_count, if: lambda { |instance, options| options[:user] } do |instance, options| | |||
| parents_reply = [] | |||
| parents_reply = get_reply_parents_no_root(parents_reply, instance) | |||
| parents_reply.count | |||
| end | |||
| expose :parents_reply_bottom, using:Mobile::Entities::BlogComment do |c,opt| | |||
| if c.is_a? (::BlogComment) | |||
| #取二级回复的底楼层 | |||
| parents_reply = [] | |||
| parents_reply = get_reply_parents_no_root(parents_reply, c) | |||
| if parents_reply.count > 0 && !opt[:bottom] | |||
| if opt[:type] == 1 | |||
| # opt[:bottom] = true | |||
| # parents_reply[opt[:page]..opt[:page]] | |||
| else | |||
| opt[:bottom] = true | |||
| parents_reply[0..0] | |||
| end | |||
| else | |||
| [] | |||
| end | |||
| end | |||
| end | |||
| expose :parents_reply_top, using:Mobile::Entities::BlogComment do |c,opt| | |||
| if c.is_a? (::BlogComment) | |||
| #取二级回复的顶楼层 | |||
| parents_reply = [] | |||
| parents_reply = get_reply_parents_no_root(parents_reply, c) | |||
| if parents_reply.count > 2 && !opt[:top] | |||
| if opt[:type] == 1 | |||
| opt[:top] = true | |||
| tStart = (opt[:page]-1)*5+2 | |||
| tEnd = (opt[:page])*5+2 - 1 | |||
| if tEnd >= parents_reply.count - 1 | |||
| tEnd = parents_reply.count - 2 | |||
| end | |||
| if tStart <= parents_reply.count - 2 | |||
| parents_reply = parents_reply.reverse[tStart..tEnd] | |||
| parents_reply.reverse | |||
| else | |||
| [] | |||
| end | |||
| else | |||
| opt[:top] = true | |||
| parents_reply = parents_reply.reverse[0..1] | |||
| parents_reply.reverse | |||
| end | |||
| elsif parents_reply.count == 2 && !opt[:top] | |||
| opt[:top] = true | |||
| parents_reply = parents_reply.reverse[0..0] | |||
| parents_reply.reverse | |||
| else | |||
| [] | |||
| end | |||
| end | |||
| end | |||
| end | |||
| end | |||
| end | |||
| @@ -1,114 +1,114 @@ | |||
| module Mobile | |||
| module Entities | |||
| class Course < Grape::Entity | |||
| include Redmine::I18n | |||
| include ApplicationHelper | |||
| include ApiHelper | |||
| 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)) | |||
| elsif field == :member_count | |||
| ::Course===c ? c.members.count : 0 | |||
| 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 :invite_code | |||
| course_expose :qrcode | |||
| course_expose :updated_at | |||
| course_expose :course_student_num | |||
| course_expose :member_count | |||
| course_expose :groupnum | |||
| expose :can_setting, if: lambda { |instance, options| options[:user] } do |instance, options| | |||
| current_user = options[:user] | |||
| can_setting = false | |||
| if instance[:course] | |||
| course = instance[:course] | |||
| else | |||
| course = instance | |||
| end | |||
| member = course.members.where("user_id=#{current_user.id} and course_id=#{course.id}")[0] | |||
| role_ids = member.role_ids if member | |||
| if role_ids && (role_ids.include?(7) || role_ids.include?(9) ) | |||
| can_setting = true | |||
| end | |||
| if course.tea_id == current_user.id | |||
| can_setting = true | |||
| end | |||
| can_setting | |||
| end | |||
| expose :is_member, if: lambda { |instance, options| options[:user] } do |instance, options| | |||
| current_user = options[:user] | |||
| if instance[:course] | |||
| course = instance[:course] | |||
| else | |||
| course = instance | |||
| end | |||
| current_user.member_of_course?(course) | |||
| end | |||
| 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 | |||
| expose :is_creator, if: lambda { |instance, options| options[:user] } do |instance, options| | |||
| if instance[:course] | |||
| course = instance[:course] | |||
| else | |||
| course = instance | |||
| end | |||
| current_user = options[:user] | |||
| course.tea_id == current_user.id | |||
| end | |||
| course_expose :current_user_is_member | |||
| course_expose :current_user_is_teacher | |||
| course_expose :work_unit | |||
| course_expose :syllabus_title | |||
| end | |||
| end | |||
| end | |||
| module Mobile | |||
| module Entities | |||
| class Course < Grape::Entity | |||
| include Redmine::I18n | |||
| include ApplicationHelper | |||
| include ApiHelper | |||
| 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)) | |||
| elsif field == :member_count | |||
| ::Course===c ? c.members.count : 0 | |||
| 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 :invite_code | |||
| course_expose :qrcode | |||
| course_expose :updated_at | |||
| course_expose :course_student_num | |||
| course_expose :member_count | |||
| course_expose :groupnum | |||
| expose :can_setting, if: lambda { |instance, options| options[:user] } do |instance, options| | |||
| current_user = options[:user] | |||
| can_setting = false | |||
| if instance[:course] | |||
| course = instance[:course] | |||
| else | |||
| course = instance | |||
| end | |||
| member = course.members.where("user_id=#{current_user.id} and course_id=#{course.id}")[0] | |||
| role_ids = member.role_ids if member | |||
| if role_ids && (role_ids.include?(7) || role_ids.include?(9) ) | |||
| can_setting = true | |||
| end | |||
| if course.tea_id == current_user.id | |||
| can_setting = true | |||
| end | |||
| can_setting | |||
| end | |||
| expose :is_member, if: lambda { |instance, options| options[:user] } do |instance, options| | |||
| current_user = options[:user] | |||
| if instance[:course] | |||
| course = instance[:course] | |||
| else | |||
| course = instance | |||
| end | |||
| current_user.member_of_course?(course) | |||
| end | |||
| 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 | |||
| expose :is_creator, if: lambda { |instance, options| options[:user] } do |instance, options| | |||
| if instance[:course] | |||
| course = instance[:course] | |||
| else | |||
| course = instance | |||
| end | |||
| current_user = options[:user] | |||
| course.tea_id == current_user.id | |||
| end | |||
| course_expose :current_user_is_member | |||
| course_expose :current_user_is_teacher | |||
| course_expose :work_unit | |||
| course_expose :syllabus_title | |||
| end | |||
| end | |||
| end | |||
| @@ -1,19 +1,19 @@ | |||
| module Mobile | |||
| module Entities | |||
| class CourseGroup < Grape::Entity | |||
| include Redmine::I18n | |||
| include ApplicationHelper | |||
| include ApiHelper | |||
| def self.course_group_expose(f) | |||
| expose f do |u,opt| | |||
| if u.is_a?(Hash) && u.key?(f) | |||
| u[f] | |||
| end | |||
| end | |||
| end | |||
| expose :id | |||
| expose :name | |||
| expose :users, using: Mobile::Entities::User | |||
| end | |||
| end | |||
| end | |||
| module Mobile | |||
| module Entities | |||
| class CourseGroup < Grape::Entity | |||
| include Redmine::I18n | |||
| include ApplicationHelper | |||
| include ApiHelper | |||
| def self.course_group_expose(f) | |||
| expose f do |u,opt| | |||
| if u.is_a?(Hash) && u.key?(f) | |||
| u[f] | |||
| end | |||
| end | |||
| end | |||
| expose :id | |||
| expose :name | |||
| expose :users, using: Mobile::Entities::User | |||
| end | |||
| end | |||
| end | |||
| @@ -1,43 +1,43 @@ | |||
| module Mobile | |||
| module Entities | |||
| class Exercise < Grape::Entity | |||
| include Redmine::I18n | |||
| include ApplicationHelper | |||
| include ApiHelper | |||
| def self.exercise_expose(field) | |||
| expose field do |f,opt| | |||
| if f.is_a?(Hash) && f.key?(field) | |||
| if field == :created_on | |||
| format_time(f[field]) | |||
| else | |||
| f[field] | |||
| end | |||
| elsif f.is_a?(::Exercise) | |||
| if f.respond_to?(field) | |||
| f.send(field) | |||
| else | |||
| case field | |||
| when :coursename | |||
| f.course.nil? ? "" : f.course.name | |||
| when :syllabus_title | |||
| f.course.nil? ? "" : f.course.syllabus.nil? ? "" : f.course.syllabus.title | |||
| end | |||
| end | |||
| end | |||
| end | |||
| end | |||
| expose :exercise_name | |||
| expose :exercise_description | |||
| exercise_expose :coursename #所属班级名 | |||
| exercise_expose :syllabus_title | |||
| expose :current_user_is_teacher, if: lambda { |instance, options| options[:user] } do |instance, options| | |||
| current_user = options[:user] | |||
| current_user_is_teacher = false | |||
| current_user_is_teacher = is_course_teacher(current_user,instance.course) | |||
| current_user_is_teacher | |||
| end | |||
| end | |||
| end | |||
| end | |||
| module Mobile | |||
| module Entities | |||
| class Exercise < Grape::Entity | |||
| include Redmine::I18n | |||
| include ApplicationHelper | |||
| include ApiHelper | |||
| def self.exercise_expose(field) | |||
| expose field do |f,opt| | |||
| if f.is_a?(Hash) && f.key?(field) | |||
| if field == :created_on | |||
| format_time(f[field]) | |||
| else | |||
| f[field] | |||
| end | |||
| elsif f.is_a?(::Exercise) | |||
| if f.respond_to?(field) | |||
| f.send(field) | |||
| else | |||
| case field | |||
| when :coursename | |||
| f.course.nil? ? "" : f.course.name | |||
| when :syllabus_title | |||
| f.course.nil? ? "" : f.course.syllabus.nil? ? "" : f.course.syllabus.title | |||
| end | |||
| end | |||
| end | |||
| end | |||
| end | |||
| expose :exercise_name | |||
| expose :exercise_description | |||
| exercise_expose :coursename #所属班级名 | |||
| exercise_expose :syllabus_title | |||
| expose :current_user_is_teacher, if: lambda { |instance, options| options[:user] } do |instance, options| | |||
| current_user = options[:user] | |||
| current_user_is_teacher = false | |||
| current_user_is_teacher = is_course_teacher(current_user,instance.course) | |||
| current_user_is_teacher | |||
| end | |||
| end | |||
| end | |||
| end | |||
| @@ -1,18 +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 | |||
| 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 | |||
| @@ -1,44 +1,44 @@ | |||
| module Mobile | |||
| module Entities | |||
| class Journal <Grape::Entity | |||
| include Redmine::I18n | |||
| =begin | |||
| include Redmine::I18n | |||
| include ApplicationHelper | |||
| include ApiHelper | |||
| include IssuesHelper | |||
| include ActionView::Helpers::TagHelper | |||
| include ActionView::Helpers::UrlHelper | |||
| =end | |||
| def self.journal_expose(f) | |||
| expose f do |journal, opt| | |||
| if journal.is_a?(Hash) && journal.key?(f) | |||
| journal[f] | |||
| elsif journal.is_a?(::Journal) | |||
| if journal.respond_to?(f) | |||
| if f == :created_on | |||
| time_from_now(journal.send(f)) | |||
| else | |||
| journal.send(f) | |||
| end | |||
| else | |||
| case f | |||
| when :detail_journal | |||
| if journal.details.any? | |||
| details_to_strings(journal.details) | |||
| end | |||
| end | |||
| end | |||
| end | |||
| end | |||
| end | |||
| expose :notes | |||
| journal_expose :created_on | |||
| expose :user,using: Mobile::Entities::User do |f, opt| | |||
| f.user | |||
| end | |||
| #journal_expose :detail_journal | |||
| end | |||
| end | |||
| module Mobile | |||
| module Entities | |||
| class Journal <Grape::Entity | |||
| include Redmine::I18n | |||
| =begin | |||
| include Redmine::I18n | |||
| include ApplicationHelper | |||
| include ApiHelper | |||
| include IssuesHelper | |||
| include ActionView::Helpers::TagHelper | |||
| include ActionView::Helpers::UrlHelper | |||
| =end | |||
| def self.journal_expose(f) | |||
| expose f do |journal, opt| | |||
| if journal.is_a?(Hash) && journal.key?(f) | |||
| journal[f] | |||
| elsif journal.is_a?(::Journal) | |||
| if journal.respond_to?(f) | |||
| if f == :created_on | |||
| time_from_now(journal.send(f)) | |||
| else | |||
| journal.send(f) | |||
| end | |||
| else | |||
| case f | |||
| when :detail_journal | |||
| if journal.details.any? | |||
| details_to_strings(journal.details) | |||
| end | |||
| end | |||
| end | |||
| end | |||
| end | |||
| end | |||
| expose :notes | |||
| journal_expose :created_on | |||
| expose :user,using: Mobile::Entities::User do |f, opt| | |||
| f.user | |||
| end | |||
| #journal_expose :detail_journal | |||
| end | |||
| end | |||
| end | |||
| @@ -1,34 +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 | |||
| 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 | |||
| @@ -1,154 +1,154 @@ | |||
| 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 :course_project_name | |||
| if u.board.project_id == -1 | |||
| u.course.name | |||
| else | |||
| u.project.name | |||
| end | |||
| when :syllabus_title | |||
| if u.board.project_id == -1 | |||
| u.course.syllabus.nil? ? "" : u.course.syllabus.title | |||
| end | |||
| when :lasted_comment | |||
| time_from_now u.created_on | |||
| when :praise_count | |||
| get_activity_praise_num(u) | |||
| when :act_type | |||
| 'Message' | |||
| when :act_id | |||
| u.id | |||
| when :comment_count | |||
| all_comments = [] | |||
| get_all_children(all_comments, u).count | |||
| when :title | |||
| u.subject | |||
| 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 :act_type | |||
| message_expose :act_id | |||
| message_expose :course_project_name | |||
| message_expose :syllabus_title | |||
| message_expose :board_id | |||
| message_expose :subject | |||
| message_expose :title | |||
| message_expose :content | |||
| message_expose :comment_count | |||
| message_expose :praise_count | |||
| message_expose :created_on | |||
| message_expose :locked | |||
| message_expose :id | |||
| message_expose :lasted_comment | |||
| expose :all_children,using:Mobile::Entities::Message do |c,opt| | |||
| if c.is_a? (::Message) | |||
| # c.children.reverse | |||
| if !opt[:children] | |||
| if c.parent.nil? && opt[:type] == 0 | |||
| opt[:children] = true | |||
| all_comments = [] | |||
| tStart = opt[:page]*5 | |||
| tEnd = (opt[:page]+1)*5 - 1 | |||
| all_comments = get_all_children(all_comments, c)[tStart..tEnd] | |||
| all_comments | |||
| end | |||
| end | |||
| end | |||
| end | |||
| expose :has_praise , if: lambda { |instance, options| options[:user] } do |instance, options| | |||
| has_praise = false | |||
| current_user = options[:user] | |||
| obj = PraiseTread.where("praise_tread_object_id=? and praise_tread_object_type=? and user_id=?",instance.id,instance.class.to_s,current_user.id) | |||
| has_praise = obj.empty? ? false : true | |||
| has_praise | |||
| end | |||
| expose :parents_count, if: lambda { |instance, options| options[:user] } do |instance, options| | |||
| parents_reply = [] | |||
| parents_reply = get_reply_parents_no_root(parents_reply, instance) | |||
| parents_reply.count | |||
| end | |||
| expose :parents_reply_bottom, using:Mobile::Entities::Message do |c,opt| | |||
| if c.is_a? (::Message) | |||
| #取二级回复的底楼层 | |||
| parents_reply = [] | |||
| parents_reply = get_reply_parents_no_root(parents_reply, c) | |||
| if parents_reply.count > 0 && !opt[:bottom] | |||
| if opt[:type] == 1 | |||
| # opt[:bottom] = true | |||
| # parents_reply[opt[:page]..opt[:page]] | |||
| else | |||
| opt[:bottom] = true | |||
| parents_reply[0..0] | |||
| end | |||
| else | |||
| [] | |||
| end | |||
| end | |||
| end | |||
| expose :parents_reply_top, using:Mobile::Entities::Message do |c,opt| | |||
| if c.is_a? (::Message) | |||
| #取二级回复的顶楼层 | |||
| parents_reply = [] | |||
| parents_reply = get_reply_parents_no_root(parents_reply, c) | |||
| if parents_reply.count > 2 && !opt[:top] | |||
| if opt[:type] == 1 | |||
| opt[:top] = true | |||
| tStart = (opt[:page]-1)*5+2 | |||
| tEnd = (opt[:page])*5+2 - 1 | |||
| if tEnd >= parents_reply.count - 1 | |||
| tEnd = parents_reply.count - 2 | |||
| end | |||
| if tStart <= parents_reply.count - 2 | |||
| parents_reply = parents_reply.reverse[tStart..tEnd] | |||
| parents_reply.reverse | |||
| else | |||
| [] | |||
| end | |||
| else | |||
| opt[:top] = true | |||
| parents_reply = parents_reply.reverse[0..1] | |||
| parents_reply.reverse | |||
| end | |||
| elsif parents_reply.count == 2 && !opt[:top] | |||
| opt[:top] = true | |||
| parents_reply = parents_reply.reverse[0..0] | |||
| parents_reply.reverse | |||
| else | |||
| [] | |||
| end | |||
| end | |||
| end | |||
| end | |||
| end | |||
| 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 :course_project_name | |||
| if u.board.project_id == -1 | |||
| u.course.name | |||
| else | |||
| u.project.name | |||
| end | |||
| when :syllabus_title | |||
| if u.board.project_id == -1 | |||
| u.course.syllabus.nil? ? "" : u.course.syllabus.title | |||
| end | |||
| when :lasted_comment | |||
| time_from_now u.created_on | |||
| when :praise_count | |||
| get_activity_praise_num(u) | |||
| when :act_type | |||
| 'Message' | |||
| when :act_id | |||
| u.id | |||
| when :comment_count | |||
| all_comments = [] | |||
| get_all_children(all_comments, u).count | |||
| when :title | |||
| u.subject | |||
| 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 :act_type | |||
| message_expose :act_id | |||
| message_expose :course_project_name | |||
| message_expose :syllabus_title | |||
| message_expose :board_id | |||
| message_expose :subject | |||
| message_expose :title | |||
| message_expose :content | |||
| message_expose :comment_count | |||
| message_expose :praise_count | |||
| message_expose :created_on | |||
| message_expose :locked | |||
| message_expose :id | |||
| message_expose :lasted_comment | |||
| expose :all_children,using:Mobile::Entities::Message do |c,opt| | |||
| if c.is_a? (::Message) | |||
| # c.children.reverse | |||
| if !opt[:children] | |||
| if c.parent.nil? && opt[:type] == 0 | |||
| opt[:children] = true | |||
| all_comments = [] | |||
| tStart = opt[:page]*5 | |||
| tEnd = (opt[:page]+1)*5 - 1 | |||
| all_comments = get_all_children(all_comments, c)[tStart..tEnd] | |||
| all_comments | |||
| end | |||
| end | |||
| end | |||
| end | |||
| expose :has_praise , if: lambda { |instance, options| options[:user] } do |instance, options| | |||
| has_praise = false | |||
| current_user = options[:user] | |||
| obj = PraiseTread.where("praise_tread_object_id=? and praise_tread_object_type=? and user_id=?",instance.id,instance.class.to_s,current_user.id) | |||
| has_praise = obj.empty? ? false : true | |||
| has_praise | |||
| end | |||
| expose :parents_count, if: lambda { |instance, options| options[:user] } do |instance, options| | |||
| parents_reply = [] | |||
| parents_reply = get_reply_parents_no_root(parents_reply, instance) | |||
| parents_reply.count | |||
| end | |||
| expose :parents_reply_bottom, using:Mobile::Entities::Message do |c,opt| | |||
| if c.is_a? (::Message) | |||
| #取二级回复的底楼层 | |||
| parents_reply = [] | |||
| parents_reply = get_reply_parents_no_root(parents_reply, c) | |||
| if parents_reply.count > 0 && !opt[:bottom] | |||
| if opt[:type] == 1 | |||
| # opt[:bottom] = true | |||
| # parents_reply[opt[:page]..opt[:page]] | |||
| else | |||
| opt[:bottom] = true | |||
| parents_reply[0..0] | |||
| end | |||
| else | |||
| [] | |||
| end | |||
| end | |||
| end | |||
| expose :parents_reply_top, using:Mobile::Entities::Message do |c,opt| | |||
| if c.is_a? (::Message) | |||
| #取二级回复的顶楼层 | |||
| parents_reply = [] | |||
| parents_reply = get_reply_parents_no_root(parents_reply, c) | |||
| if parents_reply.count > 2 && !opt[:top] | |||
| if opt[:type] == 1 | |||
| opt[:top] = true | |||
| tStart = (opt[:page]-1)*5+2 | |||
| tEnd = (opt[:page])*5+2 - 1 | |||
| if tEnd >= parents_reply.count - 1 | |||
| tEnd = parents_reply.count - 2 | |||
| end | |||
| if tStart <= parents_reply.count - 2 | |||
| parents_reply = parents_reply.reverse[tStart..tEnd] | |||
| parents_reply.reverse | |||
| else | |||
| [] | |||
| end | |||
| else | |||
| opt[:top] = true | |||
| parents_reply = parents_reply.reverse[0..1] | |||
| parents_reply.reverse | |||
| end | |||
| elsif parents_reply.count == 2 && !opt[:top] | |||
| opt[:top] = true | |||
| parents_reply = parents_reply.reverse[0..0] | |||
| parents_reply.reverse | |||
| else | |||
| [] | |||
| end | |||
| end | |||
| end | |||
| end | |||
| end | |||
| end | |||
| @@ -1,43 +1,43 @@ | |||
| module Mobile | |||
| module Entities | |||
| class Project < Grape::Entity | |||
| expose :name | |||
| expose :id | |||
| expose :is_public | |||
| expose :user_id | |||
| expose :invite_code | |||
| expose :qrcode | |||
| expose :can_setting, if: lambda { |instance, options| options[:user] } do |instance, options| | |||
| current_user = options[:user] | |||
| my_member = instance.member_principals.where("users.id=#{current_user.id}").first | |||
| can_setting = false | |||
| if my_member && my_member.roles[0] && my_member.roles[0].id == 3 | |||
| can_setting = true | |||
| end | |||
| can_setting | |||
| end | |||
| expose :is_creator, if: lambda { |instance, options| options[:user] } do |instance, options| | |||
| current_user = options[:user] | |||
| current_user.id == instance.user_id | |||
| end | |||
| expose :is_member, if: lambda { |instance, options| options[:user] } do |instance, options| | |||
| current_user = options[:user] | |||
| if instance[:project] | |||
| project = instance[:project] | |||
| else | |||
| project = instance | |||
| end | |||
| current_user.member_of?(project) | |||
| end | |||
| expose :member_count, if: lambda { |instance, options| options[:user] } do |instance, options| | |||
| instance.members.count | |||
| end | |||
| end | |||
| end | |||
| end | |||
| module Mobile | |||
| module Entities | |||
| class Project < Grape::Entity | |||
| expose :name | |||
| expose :id | |||
| expose :is_public | |||
| expose :user_id | |||
| expose :invite_code | |||
| expose :qrcode | |||
| expose :can_setting, if: lambda { |instance, options| options[:user] } do |instance, options| | |||
| current_user = options[:user] | |||
| my_member = instance.member_principals.where("users.id=#{current_user.id}").first | |||
| can_setting = false | |||
| if my_member && my_member.roles[0] && my_member.roles[0].id == 3 | |||
| can_setting = true | |||
| end | |||
| can_setting | |||
| end | |||
| expose :is_creator, if: lambda { |instance, options| options[:user] } do |instance, options| | |||
| current_user = options[:user] | |||
| current_user.id == instance.user_id | |||
| end | |||
| expose :is_member, if: lambda { |instance, options| options[:user] } do |instance, options| | |||
| current_user = options[:user] | |||
| if instance[:project] | |||
| project = instance[:project] | |||
| else | |||
| project = instance | |||
| end | |||
| current_user.member_of?(project) | |||
| end | |||
| expose :member_count, if: lambda { |instance, options| options[:user] } do |instance, options| | |||
| instance.members.count | |||
| end | |||
| end | |||
| end | |||
| end | |||
| @@ -1,35 +1,35 @@ | |||
| module Mobile | |||
| module Entities | |||
| class ProjectMember < Grape::Entity | |||
| include Redmine::I18n | |||
| 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 :roles_id | |||
| # u.roles[0].id | |||
| u.roles.map {|r| r.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 :roles_id | |||
| end | |||
| end | |||
| end | |||
| module Mobile | |||
| module Entities | |||
| class ProjectMember < Grape::Entity | |||
| include Redmine::I18n | |||
| 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 :roles_id | |||
| # u.roles[0].id | |||
| u.roles.map {|r| r.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 :roles_id | |||
| end | |||
| end | |||
| end | |||
| @@ -1,45 +1,45 @@ | |||
| module Mobile | |||
| module Entities | |||
| class StudentWork < Grape::Entity | |||
| include ApplicationHelper | |||
| include ApiHelper | |||
| def self.student_work_expose(f) | |||
| expose f do |u,opt| | |||
| if u.is_a?(Hash) && u.key?(f) | |||
| u[f] | |||
| elsif u.is_a?(::StudentWork) | |||
| if u.respond_to?(f) | |||
| if f == :created_at | |||
| format_time(u.send(:created_at)) | |||
| else | |||
| u.send(f) | |||
| end | |||
| 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?(::StudentWork) | |||
| c.user | |||
| end | |||
| end | |||
| student_work_expose :student_id | |||
| student_work_expose :id | |||
| student_work_expose :name | |||
| student_work_expose :description | |||
| student_work_expose :final_score | |||
| student_work_expose :teacher_score | |||
| student_work_expose :student_score | |||
| student_work_expose :teacher_asistant_score | |||
| student_work_expose :created_at | |||
| end | |||
| end | |||
| module Mobile | |||
| module Entities | |||
| class StudentWork < Grape::Entity | |||
| include ApplicationHelper | |||
| include ApiHelper | |||
| def self.student_work_expose(f) | |||
| expose f do |u,opt| | |||
| if u.is_a?(Hash) && u.key?(f) | |||
| u[f] | |||
| elsif u.is_a?(::StudentWork) | |||
| if u.respond_to?(f) | |||
| if f == :created_at | |||
| format_time(u.send(:created_at)) | |||
| else | |||
| u.send(f) | |||
| end | |||
| 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?(::StudentWork) | |||
| c.user | |||
| end | |||
| end | |||
| student_work_expose :student_id | |||
| student_work_expose :id | |||
| student_work_expose :name | |||
| student_work_expose :description | |||
| student_work_expose :final_score | |||
| student_work_expose :teacher_score | |||
| student_work_expose :student_score | |||
| student_work_expose :teacher_asistant_score | |||
| student_work_expose :created_at | |||
| end | |||
| end | |||
| end | |||
| @@ -1,15 +1,15 @@ | |||
| module Mobile | |||
| module Entities | |||
| class Syllabus < Grape::Entity | |||
| expose :title | |||
| expose :id | |||
| expose :can_setting, if: lambda { |instance, options| options[:user] } do |instance, options| | |||
| current_user = options[:user] | |||
| can_setting = instance[:user_id] == current_user.id ? true : false | |||
| can_setting = false if instance[:id].nil? | |||
| can_setting | |||
| end | |||
| expose :courses, using: Mobile::Entities::Course | |||
| end | |||
| end | |||
| end | |||
| module Mobile | |||
| module Entities | |||
| class Syllabus < Grape::Entity | |||
| expose :title | |||
| expose :id | |||
| expose :can_setting, if: lambda { |instance, options| options[:user] } do |instance, options| | |||
| current_user = options[:user] | |||
| can_setting = instance[:user_id] == current_user.id ? true : false | |||
| can_setting = false if instance[:id].nil? | |||
| can_setting | |||
| end | |||
| expose :courses, using: Mobile::Entities::Course | |||
| end | |||
| end | |||
| end | |||
| @@ -1,87 +1,87 @@ | |||
| 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 | |||
| "/images/#{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 | |||
| when :student_num | |||
| u.nil? || u.user_extensions.nil? ? "" : u.user_extensions.student_id | |||
| when :real_name | |||
| u.nil? ? "" : get_user_realname(u).gsub(/\s*/,""); | |||
| when :name | |||
| u.nil? ? "" : u.show_name | |||
| when :roles_id | |||
| u[:roles_id].nil? ? nil : u.roles_id | |||
| when :login | |||
| u.login | |||
| when :lastname | |||
| u.lastname | |||
| when :mail | |||
| u.mail | |||
| when :is_me | |||
| defined? u.is_me ? u.is_me : 0 | |||
| end | |||
| end | |||
| end | |||
| end | |||
| end | |||
| expose :id | |||
| #头像 | |||
| user_expose :login | |||
| user_expose :lastname | |||
| #邮箱地址 | |||
| user_expose :mail | |||
| expose :nickname | |||
| #真名 | |||
| user_expose :img_url | |||
| #昵称 | |||
| expose :realname | |||
| #昵称 | |||
| user_expose :real_name | |||
| #性别 | |||
| user_expose :gender | |||
| #我的二维码 | |||
| #工作单位 | |||
| user_expose :work_unit | |||
| #地区 | |||
| user_expose :location | |||
| #签名 | |||
| user_expose :brief_introduction | |||
| #总成绩 | |||
| user_expose :score | |||
| #学号 | |||
| user_expose :student_num | |||
| # 活跃值 | |||
| user_expose :active_count | |||
| user_expose :role_name | |||
| user_expose :roles_id | |||
| user_expose :name | |||
| user_expose :is_me | |||
| end | |||
| end | |||
| end | |||
| 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 | |||
| "/images/#{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 | |||
| when :student_num | |||
| u.nil? || u.user_extensions.nil? ? "" : u.user_extensions.student_id | |||
| when :real_name | |||
| u.nil? ? "" : get_user_realname(u).gsub(/\s*/,""); | |||
| when :name | |||
| u.nil? ? "" : u.show_name | |||
| when :roles_id | |||
| u[:roles_id].nil? ? nil : u.roles_id | |||
| when :login | |||
| u.login | |||
| when :lastname | |||
| u.lastname | |||
| when :mail | |||
| u.mail | |||
| when :is_me | |||
| defined? u.is_me ? u.is_me : 0 | |||
| end | |||
| end | |||
| end | |||
| end | |||
| end | |||
| expose :id | |||
| #头像 | |||
| user_expose :login | |||
| user_expose :lastname | |||
| #邮箱地址 | |||
| user_expose :mail | |||
| expose :nickname | |||
| #真名 | |||
| user_expose :img_url | |||
| #昵称 | |||
| expose :realname | |||
| #昵称 | |||
| user_expose :real_name | |||
| #性别 | |||
| user_expose :gender | |||
| #我的二维码 | |||
| #工作单位 | |||
| user_expose :work_unit | |||
| #地区 | |||
| user_expose :location | |||
| #签名 | |||
| user_expose :brief_introduction | |||
| #总成绩 | |||
| user_expose :score | |||
| #学号 | |||
| user_expose :student_num | |||
| # 活跃值 | |||
| user_expose :active_count | |||
| user_expose :role_name | |||
| user_expose :roles_id | |||
| user_expose :name | |||
| user_expose :is_me | |||
| end | |||
| end | |||
| end | |||
| @@ -1,119 +1,119 @@ | |||
| # encoding: utf-8 | |||
| module Mobile | |||
| module Entities | |||
| class Whomework <Grape::Entity | |||
| include ApiHelper | |||
| include ApplicationHelper | |||
| include Redmine::I18n | |||
| def self.whomework_expose(f) | |||
| expose f do |wh, opt| | |||
| if wh.is_a?(Hash) && wh.key?(f) | |||
| wh[f] | |||
| elsif wh.is_a?(::HomeworkCommon) | |||
| if wh.respond_to?(f) | |||
| if f == :created_at | |||
| format_time(wh.send(f)) | |||
| else | |||
| wh.send(f) | |||
| end | |||
| else | |||
| case f | |||
| when :absence_penalty | |||
| wh.nil? || wh.homework_detail_manual.nil? ? 0 : wh.homework_detail_manual.absence_penalty | |||
| when :evaluation_start | |||
| wh.nil? || wh.homework_detail_manual.nil? ? nil : convert_to_time(wh.homework_detail_manual.evaluation_start, 0) | |||
| when :evaluation_end | |||
| wh.nil? || wh.homework_detail_manual.nil? ? nil : convert_to_time(wh.homework_detail_manual.evaluation_end, 1) | |||
| when :praise_count | |||
| get_activity_praise_num(wh) | |||
| when :comment_count | |||
| wh.journals_for_messages.count | |||
| when :course_name | |||
| wh.course.name | |||
| when :syllabus_title | |||
| wh.course.syllabus.nil? ? "" : wh.course.syllabus.title | |||
| when :act_type | |||
| 'HomeworkCommon' | |||
| when :act_id | |||
| wh.id | |||
| when :title | |||
| wh.name | |||
| when :homework_commit_count | |||
| wh.student_works.has_committed.count | |||
| when :last_commit_info | |||
| if wh.student_works.has_committed.count > 0 | |||
| lc = wh.student_works.has_committed.reorder("commit_time desc").first | |||
| {:lasttime=>time_from_now(lc.commit_time), :lastname=>lc.user.show_name} | |||
| end | |||
| when :last_score_info | |||
| if wh.student_works.has_committed.count > 0 | |||
| sw_id = "("+wh.student_works.map{|sw| sw.id}.join(",")+")" | |||
| student_work_scores = StudentWorksScore.where("student_work_id in #{sw_id} and score is not null").reorder("created_at desc") | |||
| unless student_work_scores.empty? | |||
| last_score = student_work_scores.first | |||
| {:lasttime=>time_from_now(last_score.created_at), :lastname=>last_score.user.show_name} | |||
| end | |||
| end | |||
| end | |||
| end | |||
| end | |||
| end | |||
| end | |||
| expose :author, using: Mobile::Entities::User do |w, opt| | |||
| if w.is_a?(::HomeworkCommon) | |||
| w.user | |||
| end | |||
| end | |||
| expose :current_user, using: Mobile::Entities::User do |w, opt| | |||
| current_user | |||
| end | |||
| expose :name | |||
| expose :description | |||
| expose :publish_time | |||
| expose :end_time | |||
| expose :homework_type | |||
| expose :late_penalty | |||
| expose :course_id | |||
| expose :anonymous_comment | |||
| expose :quotes | |||
| expose :is_open | |||
| expose :id | |||
| whomework_expose :title | |||
| whomework_expose :act_type | |||
| whomework_expose :act_id | |||
| whomework_expose :course_name | |||
| whomework_expose :syllabus_title | |||
| whomework_expose :created_at | |||
| whomework_expose :absence_penalty | |||
| whomework_expose :evaluation_start | |||
| whomework_expose :evaluation_end | |||
| whomework_expose :praise_count | |||
| whomework_expose :comment_count | |||
| whomework_expose :homework_commit_count #作品提交数 | |||
| whomework_expose :last_commit_info #最近提交信息 | |||
| whomework_expose :last_score_info #最近评阅信息 | |||
| expose :all_children, using: Mobile::Entities::Jours do |f, opt| | |||
| #f[:journals_for_messages] if f.is_a?(Hash) && f.key?(:journals_for_messages) | |||
| if f.is_a?(::HomeworkCommon) | |||
| # f.journals_for_messages.reverse | |||
| if !opt[:children] && opt[:type] == 0 | |||
| opt[:children] = true | |||
| tStart = opt[:page]*5 | |||
| tEnd = (opt[:page]+1)*5 - 1 | |||
| all_comments = f.journals_for_messages.reorder("created_on desc") | |||
| all_comments[tStart..tEnd] | |||
| end | |||
| end | |||
| end | |||
| expose :has_praise , if: lambda { |instance, options| options[:user] } do |instance, options| | |||
| has_praise = false | |||
| current_user = options[:user] | |||
| obj = PraiseTread.where("praise_tread_object_id=? and praise_tread_object_type=? and user_id=?",instance.id,instance.class.to_s,current_user.id) | |||
| has_praise = obj.empty? ? false : true | |||
| has_praise | |||
| end | |||
| end | |||
| end | |||
| # encoding: utf-8 | |||
| module Mobile | |||
| module Entities | |||
| class Whomework <Grape::Entity | |||
| include ApiHelper | |||
| include ApplicationHelper | |||
| include Redmine::I18n | |||
| def self.whomework_expose(f) | |||
| expose f do |wh, opt| | |||
| if wh.is_a?(Hash) && wh.key?(f) | |||
| wh[f] | |||
| elsif wh.is_a?(::HomeworkCommon) | |||
| if wh.respond_to?(f) | |||
| if f == :created_at | |||
| format_time(wh.send(f)) | |||
| else | |||
| wh.send(f) | |||
| end | |||
| else | |||
| case f | |||
| when :absence_penalty | |||
| wh.nil? || wh.homework_detail_manual.nil? ? 0 : wh.homework_detail_manual.absence_penalty | |||
| when :evaluation_start | |||
| wh.nil? || wh.homework_detail_manual.nil? ? nil : convert_to_time(wh.homework_detail_manual.evaluation_start, 0) | |||
| when :evaluation_end | |||
| wh.nil? || wh.homework_detail_manual.nil? ? nil : convert_to_time(wh.homework_detail_manual.evaluation_end, 1) | |||
| when :praise_count | |||
| get_activity_praise_num(wh) | |||
| when :comment_count | |||
| wh.journals_for_messages.count | |||
| when :course_name | |||
| wh.course.name | |||
| when :syllabus_title | |||
| wh.course.syllabus.nil? ? "" : wh.course.syllabus.title | |||
| when :act_type | |||
| 'HomeworkCommon' | |||
| when :act_id | |||
| wh.id | |||
| when :title | |||
| wh.name | |||
| when :homework_commit_count | |||
| wh.student_works.has_committed.count | |||
| when :last_commit_info | |||
| if wh.student_works.has_committed.count > 0 | |||
| lc = wh.student_works.has_committed.reorder("commit_time desc").first | |||
| {:lasttime=>time_from_now(lc.commit_time), :lastname=>lc.user.show_name} | |||
| end | |||
| when :last_score_info | |||
| if wh.student_works.has_committed.count > 0 | |||
| sw_id = "("+wh.student_works.map{|sw| sw.id}.join(",")+")" | |||
| student_work_scores = StudentWorksScore.where("student_work_id in #{sw_id} and score is not null").reorder("created_at desc") | |||
| unless student_work_scores.empty? | |||
| last_score = student_work_scores.first | |||
| {:lasttime=>time_from_now(last_score.created_at), :lastname=>last_score.user.show_name} | |||
| end | |||
| end | |||
| end | |||
| end | |||
| end | |||
| end | |||
| end | |||
| expose :author, using: Mobile::Entities::User do |w, opt| | |||
| if w.is_a?(::HomeworkCommon) | |||
| w.user | |||
| end | |||
| end | |||
| expose :current_user, using: Mobile::Entities::User do |w, opt| | |||
| current_user | |||
| end | |||
| expose :name | |||
| expose :description | |||
| expose :publish_time | |||
| expose :end_time | |||
| expose :homework_type | |||
| expose :late_penalty | |||
| expose :course_id | |||
| expose :anonymous_comment | |||
| expose :quotes | |||
| expose :is_open | |||
| expose :id | |||
| whomework_expose :title | |||
| whomework_expose :act_type | |||
| whomework_expose :act_id | |||
| whomework_expose :course_name | |||
| whomework_expose :syllabus_title | |||
| whomework_expose :created_at | |||
| whomework_expose :absence_penalty | |||
| whomework_expose :evaluation_start | |||
| whomework_expose :evaluation_end | |||
| whomework_expose :praise_count | |||
| whomework_expose :comment_count | |||
| whomework_expose :homework_commit_count #作品提交数 | |||
| whomework_expose :last_commit_info #最近提交信息 | |||
| whomework_expose :last_score_info #最近评阅信息 | |||
| expose :all_children, using: Mobile::Entities::Jours do |f, opt| | |||
| #f[:journals_for_messages] if f.is_a?(Hash) && f.key?(:journals_for_messages) | |||
| if f.is_a?(::HomeworkCommon) | |||
| # f.journals_for_messages.reverse | |||
| if !opt[:children] && opt[:type] == 0 | |||
| opt[:children] = true | |||
| tStart = opt[:page]*5 | |||
| tEnd = (opt[:page]+1)*5 - 1 | |||
| all_comments = f.journals_for_messages.reorder("created_on desc") | |||
| all_comments[tStart..tEnd] | |||
| end | |||
| end | |||
| end | |||
| expose :has_praise , if: lambda { |instance, options| options[:user] } do |instance, options| | |||
| has_praise = false | |||
| current_user = options[:user] | |||
| obj = PraiseTread.where("praise_tread_object_id=? and praise_tread_object_type=? and user_id=?",instance.id,instance.class.to_s,current_user.id) | |||
| has_praise = obj.empty? ? false : true | |||
| has_praise | |||
| end | |||
| end | |||
| end | |||
| end | |||
| @@ -1,13 +1,13 @@ | |||
| #coding=utf-8 | |||
| # | |||
| module Mobile | |||
| module Exceptions | |||
| class AuthException < StandardError | |||
| attr_reader :err_code, :msg | |||
| def initialize(code, msg) | |||
| @err_code = code | |||
| @msg = msg | |||
| end | |||
| end | |||
| end | |||
| end | |||
| #coding=utf-8 | |||
| # | |||
| module Mobile | |||
| module Exceptions | |||
| class AuthException < StandardError | |||
| attr_reader :err_code, :msg | |||
| def initialize(code, msg) | |||
| @err_code = code | |||
| @msg = msg | |||
| end | |||
| end | |||
| end | |||
| end | |||
| @@ -1,26 +1,26 @@ | |||
| #coding=utf-8 | |||
| module Mobile | |||
| module Middleware | |||
| class ErrorHandler < Grape::Middleware::Base | |||
| def call!(env) | |||
| @env = env | |||
| begin | |||
| @app.call(@env) | |||
| rescue =>e | |||
| code = 1 | |||
| message = {status: code, message: e.message }.to_json | |||
| Rails.logger.error e.inspect | |||
| Rails.logger.error e.backtrace.join("\n") | |||
| 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 | |||
| #coding=utf-8 | |||
| module Mobile | |||
| module Middleware | |||
| class ErrorHandler < Grape::Middleware::Base | |||
| def call!(env) | |||
| @env = env | |||
| begin | |||
| @app.call(@env) | |||
| rescue =>e | |||
| code = 1 | |||
| message = {status: code, message: e.message }.to_json | |||
| Rails.logger.error e.inspect | |||
| Rails.logger.error e.backtrace.join("\n") | |||
| 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 | |||
| @@ -1,2 +1,2 @@ | |||
| // Place all the behaviors and hooks related to the matching controller here. | |||
| // All this logic will automatically be available in application.js. | |||
| // Place all the behaviors and hooks related to the matching controller here. | |||
| // All this logic will automatically be available in application.js. | |||
| @@ -1,2 +1,2 @@ | |||
| // Place all the behaviors and hooks related to the matching controller here. | |||
| // All this logic will automatically be available in application.js. | |||
| // Place all the behaviors and hooks related to the matching controller here. | |||
| // All this logic will automatically be available in application.js. | |||
| @@ -1,3 +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/ | |||
| # 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/ | |||
| @@ -1,2 +1,2 @@ | |||
| // Place all the behaviors and hooks related to the matching controller here. | |||
| // All this logic will automatically be available in application.js. | |||
| // Place all the behaviors and hooks related to the matching controller here. | |||
| // All this logic will automatically be available in application.js. | |||
| @@ -1,3 +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/ | |||
| # 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/ | |||
| @@ -1,3 +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/ | |||
| # 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/ | |||
| @@ -1,3 +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/ | |||
| # 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/ | |||
| @@ -1,3 +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/ | |||
| # 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/ | |||
| @@ -1,3 +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/ | |||
| # 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/ | |||
| @@ -1,2 +1,2 @@ | |||
| // Place all the behaviors and hooks related to the matching controller here. | |||
| // All this logic will automatically be available in application.js. | |||
| // Place all the behaviors and hooks related to the matching controller here. | |||
| // All this logic will automatically be available in application.js. | |||
| @@ -1,3 +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/ | |||
| # 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/ | |||
| @@ -1,3 +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/ | |||
| # 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/ | |||
| @@ -1,2 +1,2 @@ | |||
| // Place all the behaviors and hooks related to the matching controller here. | |||
| // All this logic will automatically be available in application.js. | |||
| // Place all the behaviors and hooks related to the matching controller here. | |||
| // All this logic will automatically be available in application.js. | |||
| @@ -1,2 +1,2 @@ | |||
| // Place all the behaviors and hooks related to the matching controller here. | |||
| // All this logic will automatically be available in application.js. | |||
| // Place all the behaviors and hooks related to the matching controller here. | |||
| // All this logic will automatically be available in application.js. | |||
| @@ -1,3 +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/ | |||
| # 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/ | |||
| @@ -1,2 +1,2 @@ | |||
| // Place all the behaviors and hooks related to the matching controller here. | |||
| // All this logic will automatically be available in application.js. | |||
| // Place all the behaviors and hooks related to the matching controller here. | |||
| // All this logic will automatically be available in application.js. | |||
| @@ -1,3 +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/ | |||
| # 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/ | |||
| @@ -1,3 +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/ | |||
| # 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/ | |||
| @@ -1,3 +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/ | |||
| # 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/ | |||
| @@ -1,3 +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/ | |||
| # 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/ | |||
| @@ -1,3 +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/ | |||
| # 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/ | |||
| @@ -1,3 +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/ | |||
| # 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/ | |||
| @@ -1,2 +1,2 @@ | |||
| // Place all the behaviors and hooks related to the matching controller here. | |||
| // All this logic will automatically be available in application.js. | |||
| // Place all the behaviors and hooks related to the matching controller here. | |||
| // All this logic will automatically be available in application.js. | |||
| @@ -1,3 +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/ | |||
| # 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/ | |||
| @@ -1,3 +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/ | |||
| # 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/ | |||
| @@ -1,2 +1,2 @@ | |||
| // Place all the behaviors and hooks related to the matching controller here. | |||
| // All this logic will automatically be available in application.js. | |||
| // Place all the behaviors and hooks related to the matching controller here. | |||
| // All this logic will automatically be available in application.js. | |||
| @@ -1,2 +1,2 @@ | |||
| // Place all the behaviors and hooks related to the matching controller here. | |||
| // All this logic will automatically be available in application.js. | |||
| // Place all the behaviors and hooks related to the matching controller here. | |||
| // All this logic will automatically be available in application.js. | |||
| @@ -1,3 +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/ | |||
| # 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/ | |||
| @@ -1,3 +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/ | |||
| # 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/ | |||
| @@ -1,2 +1,2 @@ | |||
| // Place all the behaviors and hooks related to the matching controller here. | |||
| // All this logic will automatically be available in application.js. | |||
| // Place all the behaviors and hooks related to the matching controller here. | |||
| // All this logic will automatically be available in application.js. | |||
| @@ -1,3 +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/ | |||
| # 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/ | |||
| @@ -1,3 +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/ | |||
| # 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/ | |||
| @@ -1,3 +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/ | |||
| # 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/ | |||
| @@ -1,3 +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/ | |||
| # 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/ | |||
| @@ -1,3 +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/ | |||
| # 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/ | |||
| @@ -1,3 +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/ | |||
| # 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/ | |||
| @@ -1,3 +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/ | |||
| # 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/ | |||
| @@ -1,3 +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/ | |||
| # 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/ | |||
| @@ -1,3 +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/ | |||
| # 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/ | |||
| @@ -1,2 +1,2 @@ | |||
| // Place all the behaviors and hooks related to the matching controller here. | |||
| // All this logic will automatically be available in application.js. | |||
| // Place all the behaviors and hooks related to the matching controller here. | |||
| // All this logic will automatically be available in application.js. | |||
| @@ -1,3 +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/ | |||
| # 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/ | |||
| @@ -1,2 +1,2 @@ | |||
| // Place all the behaviors and hooks related to the matching controller here. | |||
| // All this logic will automatically be available in application.js. | |||
| // Place all the behaviors and hooks related to the matching controller here. | |||
| // All this logic will automatically be available in application.js. | |||
| @@ -1,4 +1,4 @@ | |||
| /* | |||
| Place all the styles related to the matching controller here. | |||
| They will automatically be included in application.css. | |||
| */ | |||
| /* | |||
| Place all the styles related to the matching controller here. | |||
| They will automatically be included in application.css. | |||
| */ | |||
| @@ -1,4 +1,4 @@ | |||
| /* | |||
| Place all the styles related to the matching controller here. | |||
| They will automatically be included in application.css. | |||
| */ | |||
| /* | |||
| Place all the styles related to the matching controller here. | |||
| They will automatically be included in application.css. | |||
| */ | |||
| @@ -1,3 +1,3 @@ | |||
| // Place all the styles related to the ArticleHomepages controller here. | |||
| // They will automatically be included in application.css. | |||
| // You can use Sass (SCSS) here: http://sass-lang.com/ | |||
| // Place all the styles related to the ArticleHomepages controller here. | |||
| // They will automatically be included in application.css. | |||
| // You can use Sass (SCSS) here: http://sass-lang.com/ | |||
| @@ -1,4 +1,4 @@ | |||
| /* | |||
| Place all the styles related to the matching controller here. | |||
| They will automatically be included in application.css. | |||
| */ | |||
| /* | |||
| Place all the styles related to the matching controller here. | |||
| They will automatically be included in application.css. | |||
| */ | |||
| @@ -1,3 +1,3 @@ | |||
| // Place all the styles related to the contest_members controller here. | |||
| // They will automatically be included in application.css. | |||
| // You can use Sass (SCSS) here: http://sass-lang.com/ | |||
| // Place all the styles related to the contest_members controller here. | |||
| // They will automatically be included in application.css. | |||
| // You can use Sass (SCSS) here: http://sass-lang.com/ | |||
| @@ -1,3 +1,3 @@ | |||
| // Place all the styles related to the contestant_works controller here. | |||
| // They will automatically be included in application.css. | |||
| // You can use Sass (SCSS) here: http://sass-lang.com/ | |||
| // Place all the styles related to the contestant_works controller here. | |||
| // They will automatically be included in application.css. | |||
| // You can use Sass (SCSS) here: http://sass-lang.com/ | |||
| @@ -1,3 +1,3 @@ | |||
| // Place all the styles related to the contests controller here. | |||
| // They will automatically be included in application.css. | |||
| // You can use Sass (SCSS) here: http://sass-lang.com/ | |||
| // Place all the styles related to the contests controller here. | |||
| // They will automatically be included in application.css. | |||
| // You can use Sass (SCSS) here: http://sass-lang.com/ | |||
| @@ -1,3 +1,3 @@ | |||
| // Place all the styles related to the cooperation controller here. | |||
| // They will automatically be included in application.css. | |||
| // You can use Sass (SCSS) here: http://sass-lang.com/ | |||
| // Place all the styles related to the cooperation controller here. | |||
| // They will automatically be included in application.css. | |||
| // You can use Sass (SCSS) here: http://sass-lang.com/ | |||
| @@ -1,3 +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/ | |||
| // 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/ | |||
| @@ -1,4 +1,4 @@ | |||
| /* | |||
| Place all the styles related to the matching controller here. | |||
| They will automatically be included in application.css. | |||
| */ | |||
| /* | |||
| Place all the styles related to the matching controller here. | |||
| They will automatically be included in application.css. | |||
| */ | |||
| @@ -1,3 +1,3 @@ | |||
| // Place all the styles related to the Homepages controller here. | |||
| // They will automatically be included in application.css. | |||
| // You can use Sass (SCSS) here: http://sass-lang.com/ | |||
| // Place all the styles related to the Homepages controller here. | |||
| // They will automatically be included in application.css. | |||
| // You can use Sass (SCSS) here: http://sass-lang.com/ | |||
| @@ -1,3 +1,3 @@ | |||
| // Place all the styles related to the main_categories controller here. | |||
| // They will automatically be included in application.css. | |||
| // You can use Sass (SCSS) here: http://sass-lang.com/ | |||
| // Place all the styles related to the main_categories controller here. | |||
| // They will automatically be included in application.css. | |||
| // You can use Sass (SCSS) here: http://sass-lang.com/ | |||
| @@ -1,4 +1,4 @@ | |||
| /* | |||
| Place all the styles related to the matching controller here. | |||
| They will automatically be included in application.css. | |||
| */ | |||
| /* | |||
| Place all the styles related to the matching controller here. | |||
| They will automatically be included in application.css. | |||
| */ | |||
| @@ -1,4 +1,4 @@ | |||
| /* | |||
| Place all the styles related to the matching controller here. | |||
| They will automatically be included in application.css. | |||
| */ | |||
| /* | |||
| Place all the styles related to the matching controller here. | |||
| They will automatically be included in application.css. | |||
| */ | |||
| @@ -1,3 +1,3 @@ | |||
| // Place all the styles related to the notificationcomments controller here. | |||
| // They will automatically be included in application.css. | |||
| // You can use Sass (SCSS) here: http://sass-lang.com/ | |||
| // Place all the styles related to the notificationcomments controller here. | |||
| // They will automatically be included in application.css. | |||
| // You can use Sass (SCSS) here: http://sass-lang.com/ | |||
| @@ -1,4 +1,4 @@ | |||
| /* | |||
| Place all the styles related to the matching controller here. | |||
| They will automatically be included in application.css. | |||
| */ | |||
| /* | |||
| Place all the styles related to the matching controller here. | |||
| They will automatically be included in application.css. | |||
| */ | |||