diff --git a/app/assets/javascripts/trustie_hacks.js b/app/assets/javascripts/trustie_hacks.js new file mode 100644 index 000000000..dee720fac --- /dev/null +++ b/app/assets/javascripts/trustie_hacks.js @@ -0,0 +1,2 @@ +// Place all the behaviors and hooks related to the matching controller here. +// All this logic will automatically be available in application.js. diff --git a/app/assets/stylesheets/trustie_hacks.scss b/app/assets/stylesheets/trustie_hacks.scss new file mode 100644 index 000000000..78786cfb3 --- /dev/null +++ b/app/assets/stylesheets/trustie_hacks.scss @@ -0,0 +1,3 @@ +// Place all the styles related to the trustie_hacks controller here. +// They will automatically be included in application.css. +// You can use Sass (SCSS) here: http://sass-lang.com/ diff --git a/app/controllers/competitions/certificates_controller.rb b/app/controllers/competitions/certificates_controller.rb index 68dad41c1..7572d8bbb 100644 --- a/app/controllers/competitions/certificates_controller.rb +++ b/app/controllers/competitions/certificates_controller.rb @@ -1,6 +1,11 @@ class Competitions::CertificatesController < Competitions::BaseController def personal - prize_user = CompetitionPrizeUser.find_by!(user: current_user, id: params[:id]) + prize_user = + if current_user.admin_or_business? + CompetitionPrizeUser.find(params[:id]) + else + CompetitionPrizeUser.find_by!(user: current_user, id: params[:id]) + end return render_not_found unless prize_user.certificate_exist? team = prize_user.competition_team @@ -12,7 +17,7 @@ class Competitions::CertificatesController < Competitions::BaseController def team team = CompetitionTeam.find(params[:id]) - return render_forbidden unless team.team_members.exists?(user_id: current_user.id) + return render_forbidden unless current_user.admin_or_business? || team.team_members.exists?(user_id: current_user.id) return render_not_found unless team.certificate_exists? prize = team.competition_prize_users.first.competition_prize diff --git a/app/controllers/competitions/prizes_controller.rb b/app/controllers/competitions/prizes_controller.rb index e8119a67f..c87026042 100644 --- a/app/controllers/competitions/prizes_controller.rb +++ b/app/controllers/competitions/prizes_controller.rb @@ -1,8 +1,10 @@ class Competitions::PrizesController < Competitions::BaseController before_action :require_prize_user! + helper_method :current_prize_user + def show - self_prizes = current_competition.competition_prize_users.where(user_id: current_user.id).includes(:competition_team).order(:competition_prize_id) + self_prizes = current_competition.competition_prize_users.where(user_id: current_prize_user.id).includes(:competition_team).order(:competition_prize_id) @leader = self_prizes.any?{ |prize_user| prize_user.leader? && prize_user.competition_prize.category == 'bonus' } # 是否为队长并且有奖金奖励 if @leader @@ -22,8 +24,13 @@ class Competitions::PrizesController < Competitions::BaseController private def require_prize_user! - return if current_competition.competition_prize_users.exists?(user: current_user) + return if current_competition.competition_prize_users.exists?(user: current_prize_user) + return if current_user.admin_or_business? || current_user.id == current_prize_user.id render_forbidden end + + def current_prize_user + @_current_prize_user ||= User.find(params[:user_id]) + end end \ No newline at end of file diff --git a/app/controllers/trustie_hacks_controller.rb b/app/controllers/trustie_hacks_controller.rb new file mode 100644 index 000000000..f427caf72 --- /dev/null +++ b/app/controllers/trustie_hacks_controller.rb @@ -0,0 +1,48 @@ +class TrustieHacksController < ApplicationController + before_action :require_admin, :except => [:index] + before_action :require_login, :except => [:index] + before_action :find_hackathon + before_action :find_hack, :except => [:create, :index] + + def index + ## 分页参数 + page = params[:page] || 1 + limit = params[:limit] || 16 + + hacks = @hackathon.trustie_hacks + @hackathon_users_count = hacks ? 0 : hacks.sum(:hack_users_count) + + @hacks = hacks.page(page).per(limit) + + end + + def edit ;end + + def create + @hackathon.trustie_hacks.create!(name: params[:name], description: params[:description]) + render_ok + end + + def update + @hack.update_attributes(name: params[:name], description: params[:description]) + end + + def edit_hackathon ;end + + def update_hackathon + @hackathon.update_attributes(name: params[:name], description: params[:description]) + end + + + private + + def find_hackathon + @hackathon = TrustieHackathon.first || + TrustieHackathon.create(name: params[:name], description: params[:description]) + end + + def find_hack + @hack = TrustieHack.find params[:id] + end + +end diff --git a/app/helpers/trustie_hacks_helper.rb b/app/helpers/trustie_hacks_helper.rb new file mode 100644 index 000000000..3ebe3a9cc --- /dev/null +++ b/app/helpers/trustie_hacks_helper.rb @@ -0,0 +1,2 @@ +module TrustieHacksHelper +end diff --git a/app/models/hack_user.rb b/app/models/hack_user.rb new file mode 100644 index 000000000..7b8030841 --- /dev/null +++ b/app/models/hack_user.rb @@ -0,0 +1,3 @@ +class HackUser < ApplicationRecord + belongs_to :trustie_hack, counter_cache: true +end diff --git a/app/models/trustie_hack.rb b/app/models/trustie_hack.rb new file mode 100644 index 000000000..898bf2195 --- /dev/null +++ b/app/models/trustie_hack.rb @@ -0,0 +1,4 @@ +class TrustieHack < ApplicationRecord + has_many :hack_users, :dependent => :destroy + belongs_to :trustie_hackathon, counter_cache: true +end diff --git a/app/models/trustie_hackathon.rb b/app/models/trustie_hackathon.rb new file mode 100644 index 000000000..7269e7856 --- /dev/null +++ b/app/models/trustie_hackathon.rb @@ -0,0 +1,5 @@ +class TrustieHackathon < ApplicationRecord + + has_many :trustie_hacks, :dependent => :destroy + +end diff --git a/app/views/competitions/prizes/show.json.jbuilder b/app/views/competitions/prizes/show.json.jbuilder index 9bb6b8256..18113a7ed 100644 --- a/app/views/competitions/prizes/show.json.jbuilder +++ b/app/views/competitions/prizes/show.json.jbuilder @@ -5,7 +5,7 @@ if @leader json.bank_account_editable @bank_account_editable end -json.all_certified current_user.all_certified? +json.all_certified current_prize_user.all_certified? json.personal_certifications do json.array! @self_prizes do |prize_user| json.url personal_competition_certificate_path(current_competition.identifier, prize_user) diff --git a/app/views/trustie_hacks/edit.json.jbuilder b/app/views/trustie_hacks/edit.json.jbuilder new file mode 100644 index 000000000..9ee35736f --- /dev/null +++ b/app/views/trustie_hacks/edit.json.jbuilder @@ -0,0 +1 @@ +json.(@hack, :id, :name, :description) \ No newline at end of file diff --git a/app/views/trustie_hacks/edit_hackathon.json.jbuilder b/app/views/trustie_hacks/edit_hackathon.json.jbuilder new file mode 100644 index 000000000..52eda0fb8 --- /dev/null +++ b/app/views/trustie_hacks/edit_hackathon.json.jbuilder @@ -0,0 +1,2 @@ +json.name @hackathon&.name +json.description @hackathon&.description \ No newline at end of file diff --git a/app/views/trustie_hacks/index.json.jbuilder b/app/views/trustie_hacks/index.json.jbuilder new file mode 100644 index 000000000..05e3fd7c7 --- /dev/null +++ b/app/views/trustie_hacks/index.json.jbuilder @@ -0,0 +1,9 @@ +json.hackathon do + json.(@hackathon, :id, :name, :description) + json.hackathon_users_count @hackathon_users_count +end + +json.hacks @hacks do |hack| + json.(hack, :id, :name, :description, :hack_users_count) +end + diff --git a/config/routes.rb b/config/routes.rb index e886d1a42..c0231a701 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -513,7 +513,6 @@ Rails.application.routes.draw do post :join_exercise_banks # 加入习题集 post :publish # 立即发布 post :end_exercise # 立即截止 -`` end end @@ -875,6 +874,14 @@ Rails.application.routes.draw do resources :searchs, only: [:index] end + + resources :trustie_hacks, path: :osshackathon do + collection do + get :edit_hackathon + post :update_hackathon + end + + end end namespace :admins do diff --git a/db/migrate/20191105093740_create_trustie_hackathons.rb b/db/migrate/20191105093740_create_trustie_hackathons.rb new file mode 100644 index 000000000..4e806d346 --- /dev/null +++ b/db/migrate/20191105093740_create_trustie_hackathons.rb @@ -0,0 +1,10 @@ +class CreateTrustieHackathons < ActiveRecord::Migration[5.2] + def change + create_table :trustie_hackathons do |t| + t.string :name + t.string :description + t.integer :trustie_hacks_count, default: 0 + t.timestamps + end + end +end diff --git a/db/migrate/20191105093919_create_trustie_hacks.rb b/db/migrate/20191105093919_create_trustie_hacks.rb new file mode 100644 index 000000000..d4f65516e --- /dev/null +++ b/db/migrate/20191105093919_create_trustie_hacks.rb @@ -0,0 +1,11 @@ +class CreateTrustieHacks < ActiveRecord::Migration[5.2] + def change + create_table :trustie_hacks do |t| + t.string :name + t.string :description + t.references :user + t.integer :hack_users_count, default: 0 + t.timestamps + end + end +end diff --git a/db/migrate/20191105094146_create_hack_users.rb b/db/migrate/20191105094146_create_hack_users.rb new file mode 100644 index 000000000..2ef654b5b --- /dev/null +++ b/db/migrate/20191105094146_create_hack_users.rb @@ -0,0 +1,9 @@ +class CreateHackUsers < ActiveRecord::Migration[5.2] + def change + create_table :hack_users do |t| + t.references :user + t.references :trustie_hack + t.timestamps + end + end +end diff --git a/public/react/src/modules/courses/exercise/new/SingleEditor.js b/public/react/src/modules/courses/exercise/new/SingleEditor.js index 08ab4fd90..0b1b7599a 100644 --- a/public/react/src/modules/courses/exercise/new/SingleEditor.js +++ b/public/react/src/modules/courses/exercise/new/SingleEditor.js @@ -304,7 +304,7 @@ class SingleEditor extends Component{ 标准答案: : - 请点击正确选项 + "" } diff --git a/public/react/src/modules/page/readme.txt b/public/react/src/modules/page/readme.txt index 882c48ee5..f5e5646e9 100644 --- a/public/react/src/modules/page/readme.txt +++ b/public/react/src/modules/page/readme.txt @@ -1,5 +1,5 @@ state说明 - tasks详情接口 + 顶层state--tasks详情接口 allowed_unlock 为true时,才允许非管理员用户解锁隐藏测试集 discusses_count 总评论数 @@ -124,6 +124,28 @@ state说明 user 当前关卡所属用户的信息 user_praise 当前用户是否点赞 + /MainContentContainer 里的state + repositoryCode: '', + open: false, // 繁忙等级等提示用Dialog,考虑重构封装到根组件 + gameBuilding: false, // 评测中标志 + codeStatus: SAVED, // 0 已修改 1 保存中 2 已保存 3 保存失败 + + codeLoading: true, // code加载中 + readRepoTimeout: false, // 加载代码轮训超时 + resetCodeDialogOpen: false, // 重新加载初始代码弹框的bool控制 + resetPassedCodeDialogOpen: false, // 重新加载上次通过的代码的bool控制 + + isEditablePath: true // 当前文件是否可编辑 + + CodeRepositoryViewContainer 里的state + drawerOpen: false, // 代码目录Drawer的bool控制 repoFilesDrawer + loadingFirstRepoFiles: false, // 代码目录树加载中的bool控制 + fileTreeData: "", // 目录树节点数据[] + fileTreeSelectedKeys: [], // 目录树被选择的节点的key + codeRepositoryViewExpanded: false, -- + tabIndex: 0, // tab值 + settingDrawerOpen: false // 设置面板Drawer的bool控制 + -------------- -------------- -------------- -------------- -------------- -------------- -------------- -------------- -------------- TPIContextProvider diff --git a/public/react/src/modules/paths/PathDetail/PathDetailIndex.js b/public/react/src/modules/paths/PathDetail/PathDetailIndex.js index 02ef25aa1..d23cf5634 100644 --- a/public/react/src/modules/paths/PathDetail/PathDetailIndex.js +++ b/public/react/src/modules/paths/PathDetail/PathDetailIndex.js @@ -682,7 +682,11 @@ class PathDetailIndex extends Component{

this.modifysy(1)}>{team_title}

- +
: diff --git a/spec/controllers/trustie_hacks_controller_spec.rb b/spec/controllers/trustie_hacks_controller_spec.rb new file mode 100644 index 000000000..bad650328 --- /dev/null +++ b/spec/controllers/trustie_hacks_controller_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe TrustieHacksController, type: :controller do + +end diff --git a/spec/helpers/trustie_hacks_helper_spec.rb b/spec/helpers/trustie_hacks_helper_spec.rb new file mode 100644 index 000000000..6d48a0072 --- /dev/null +++ b/spec/helpers/trustie_hacks_helper_spec.rb @@ -0,0 +1,15 @@ +require 'rails_helper' + +# Specs in this file have access to a helper object that includes +# the TrustieHacksHelper. For example: +# +# describe TrustieHacksHelper do +# describe "string concat" do +# it "concats two strings with spaces" do +# expect(helper.concat_strings("this","that")).to eq("this that") +# end +# end +# end +RSpec.describe TrustieHacksHelper, type: :helper do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/models/hack_user_spec.rb b/spec/models/hack_user_spec.rb new file mode 100644 index 000000000..5bd8221dc --- /dev/null +++ b/spec/models/hack_user_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe HackUser, type: :model do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/models/trustie_hack_spec.rb b/spec/models/trustie_hack_spec.rb new file mode 100644 index 000000000..d4423cd2c --- /dev/null +++ b/spec/models/trustie_hack_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe TrustieHack, type: :model do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/models/trustie_hackathon_spec.rb b/spec/models/trustie_hackathon_spec.rb new file mode 100644 index 000000000..7334fd52c --- /dev/null +++ b/spec/models/trustie_hackathon_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe TrustieHackathon, type: :model do + pending "add some examples to (or delete) #{__FILE__}" +end