120 lines
3.6 KiB
Ruby
120 lines
3.6 KiB
Ruby
|
class MetacodeSetsController < ApplicationController
|
||
|
|
||
|
before_filter :require_admin
|
||
|
|
||
|
# GET /metacode_sets
|
||
|
# GET /metacode_sets.json
|
||
|
def index
|
||
|
@metacode_sets = MetacodeSet.order("name").all
|
||
|
|
||
|
respond_to do |format|
|
||
|
format.html # index.html.erb
|
||
|
format.json { render json: @metacode_sets }
|
||
|
end
|
||
|
end
|
||
|
|
||
|
### SHOW IS NOT CURRENTLY IN USE
|
||
|
# GET /metacode_sets/1
|
||
|
# GET /metacode_sets/1.json
|
||
|
def show
|
||
|
@metacode_set = MetacodeSet.find(params[:id])
|
||
|
|
||
|
respond_to do |format|
|
||
|
format.html # show.html.erb
|
||
|
format.json { render json: @metacode_set }
|
||
|
end
|
||
|
end
|
||
|
|
||
|
# GET /metacode_sets/new
|
||
|
# GET /metacode_sets/new.json
|
||
|
def new
|
||
|
@metacode_set = MetacodeSet.new
|
||
|
|
||
|
respond_to do |format|
|
||
|
format.html # new.html.erb
|
||
|
format.json { render json: @metacode_set }
|
||
|
end
|
||
|
end
|
||
|
|
||
|
# GET /metacode_sets/1/edit
|
||
|
def edit
|
||
|
@metacode_set = MetacodeSet.find(params[:id])
|
||
|
end
|
||
|
|
||
|
# POST /metacode_sets
|
||
|
# POST /metacode_sets.json
|
||
|
def create
|
||
|
@user = current_user
|
||
|
@metacode_set = MetacodeSet.new(params[:metacode_set])
|
||
|
@metacode_set.user_id = @user.id
|
||
|
|
||
|
respond_to do |format|
|
||
|
if @metacode_set.save
|
||
|
# create the InMetacodeSet for all the metacodes that were selected for the set
|
||
|
@metacodes = params[:metacodes][:value].split(',')
|
||
|
@metacodes.each do |m|
|
||
|
InMetacodeSet.create(:metacode_id => m, :metacode_set_id => @metacode_set.id)
|
||
|
end
|
||
|
format.html { redirect_to metacode_sets_url, notice: 'Metacode set was successfully created.' }
|
||
|
format.json { render json: @metacode_set, status: :created, location: metacode_sets_url }
|
||
|
else
|
||
|
format.html { render action: "new" }
|
||
|
format.json { render json: @metacode_set.errors, status: :unprocessable_entity }
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
# PUT /metacode_sets/1
|
||
|
# PUT /metacode_sets/1.json
|
||
|
def update
|
||
|
@metacode_set = MetacodeSet.find(params[:id])
|
||
|
|
||
|
respond_to do |format|
|
||
|
if @metacode_set.update_attributes(params[:metacode_set])
|
||
|
|
||
|
# build an array of the IDs of the metacodes currently in the set
|
||
|
@currentMetacodes = @metacode_set.metacodes.map{ |m| m.id.to_s }
|
||
|
# get the list of desired metacodes for the set from the user input and build an array out of it
|
||
|
@newMetacodes = params[:metacodes][:value].split(',')
|
||
|
|
||
|
#remove the metacodes that were in it, but now aren't
|
||
|
@removedMetacodes = @currentMetacodes - @newMetacodes
|
||
|
@removedMetacodes.each do |m|
|
||
|
@inmetacodeset = InMetacodeSet.find_by_metacode_id_and_metacode_set_id(m, @metacode_set.id)
|
||
|
@inmetacodeset.destroy
|
||
|
end
|
||
|
|
||
|
# add the new metacodes
|
||
|
@addedMetacodes = @newMetacodes - @currentMetacodes
|
||
|
@addedMetacodes.each do |m|
|
||
|
InMetacodeSet.create(:metacode_id => m, :metacode_set_id => @metacode_set.id)
|
||
|
end
|
||
|
|
||
|
format.html { redirect_to metacode_sets_url, notice: 'Metacode set was successfully updated.' }
|
||
|
format.json { head :no_content }
|
||
|
else
|
||
|
format.html { render action: "edit" }
|
||
|
format.json { render json: @metacode_set.errors, status: :unprocessable_entity }
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
# DELETE /metacode_sets/1
|
||
|
# DELETE /metacode_sets/1.json
|
||
|
def destroy
|
||
|
@metacode_set = MetacodeSet.find(params[:id])
|
||
|
|
||
|
#delete everything that tracks what's in the set
|
||
|
@metacode_set.in_metacode_sets.each do |m|
|
||
|
m.destroy
|
||
|
end
|
||
|
|
||
|
@metacode_set.destroy
|
||
|
|
||
|
respond_to do |format|
|
||
|
format.html { redirect_to metacode_sets_url }
|
||
|
format.json { head :no_content }
|
||
|
end
|
||
|
end
|
||
|
end
|