class ProjectsController

Public Instance Methods

create() click to toggle source

POST /projects POST /projects.json

# File app/controllers/projects_controller.rb, line 113
def create
if user_signed_in? then
                @project = Project.new(params[:project])
                if @project.dmptemplate.nil? && params[:project][:funder_id] != "" then # this shouldn't be necessary - see setter for funder_id in project.rb

                        funder = Organisation.find(params[:project][:funder_id])
                        if funder.dmptemplates.count == 1 then
                                @project.dmptemplate = funder.published_templates.first
                        end
                elsif @project.dmptemplate.nil? || params[:default_tag] == 'true' then
                        if @project.organisation.nil?  || params[:default_tag] == 'true'  || @project.organisation.published_templates.first.nil? then
                                @project.dmptemplate = Dmptemplate.find_by_is_default(true)
                        else
                                @project.dmptemplate = @project.organisation.published_templates.first
                        end
                end
                @project.principal_investigator = current_user.name(false)
                @project.title = I18n.t('helpers.project.my_project_name')+' ('+@project.dmptemplate.title+')'
                @project.assign_creator(current_user.id)
                respond_to do |format|
                        if @project.save
                                format.html { redirect_to({:action => "show", :id => @project.slug, :show_form => "yes"}, {:notice => I18n.t('helpers.project.success')}) }
                                format.json { render json: @project, status: :created, location: @project }
                        else
                                format.html { render action: "new" }
                                format.json { render json: @project.errors, status: :unprocessable_entity }
                        end
                end
        else
                render(:file => File.join(Rails.root, 'public/403.html'), :status => 403, :layout => false)
        end
end
destroy() click to toggle source

DELETE /projects/1 DELETE /projects/1.json

# File app/controllers/projects_controller.rb, line 166
def destroy
        @project = Project.find(params[:id])
        if user_signed_in? && @project.editable_by(current_user.id) then
                @project.destroy

                respond_to do |format|
                        format.html { redirect_to projects_url }
                        format.json { head :no_content }
                end
        else
                render(:file => File.join(Rails.root, 'public/403.html'), :status => 403, :layout => false)
        end
end
edit() click to toggle source

GET /projects/1/edit Should this be removed?

# File app/controllers/projects_controller.rb, line 71
def edit
        @project = Project.find(params[:id])
        if !user_signed_in? then
       respond_to do |format|
                        format.html { redirect_to edit_user_registration_path }
                end
        elsif !@project.editable_by(current_user.id) then
                respond_to do |format|
                        format.html { redirect_to projects_url, notice: "This account does not have access to that plan." }
                end
        end
end
export() click to toggle source
# File app/controllers/projects_controller.rb, line 97
def export
        @project = Project.find(params[:id])
        if !user_signed_in? then
       respond_to do |format|
                        format.html { redirect_to edit_user_registration_path }
                end
        else 
                respond_to do |format|
                        format.html { render action: "export" }
        
                end
        end
end
index() click to toggle source

GET /projects GET /projects.json

# File app/controllers/projects_controller.rb, line 6
def index
        if user_signed_in? then
                if (current_user.shibboleth_id.nil? || current_user.shibboleth_id.length == 0) && !cookies[:show_shib_link].nil? && cookies[:show_shib_link] == "show_shib_link" then
                        flash.notice = "Would you like to #{view_context.link_to 'link your DMPonline account to your institutional credentials?', user_omniauth_shibboleth_path}".html_safe
                end

                @projects = current_user.projects.filter(params[:filter])
                @has_projects = current_user.projects.any? # unfiltered count


                respond_to do |format|
                        format.html # index.html.erb

                        format.json { render json: @projects }
                end
        else
                respond_to do |format|
                        format.html { redirect_to edit_user_registration_path }
                end
        end
end
new() click to toggle source

GET /projects/new GET /projects/new.json

# File app/controllers/projects_controller.rb, line 52
def new
        if user_signed_in? then
                @project = Project.new
                @project.organisation = current_user.organisation
                @funders = orgs_of_type(t('helpers.org_type.funder'), true)
                @institutions = orgs_of_type(t('helpers.org_type.institution'))
                respond_to do |format|
                  format.html # new.html.erb

                  format.json { render json: @project }
                end
        else
                respond_to do |format|
                        format.html { redirect_to edit_user_registration_path }
                end
        end
end
possible_guidance() click to toggle source
# File app/controllers/projects_controller.rb, line 213
def possible_guidance
        if !params[:template].nil? && params[:template] != "" && params[:template] != "undefined" then
                template = Dmptemplate.find(params[:template])
        else
                template = nil
        end
        if !params[:institution].nil? && params[:institution] != "" && params[:institution] != "undefined" then
                institution = Organisation.find(params[:institution])
        else
                institution = nil
        end
        excluded_orgs = orgs_of_type(t('helpers.org_type.funder')) + orgs_of_type(t('helpers.org_type.institution')) + Organisation.orgs_with_parent_of_type(t('helpers.org_type.institution'))
        guidance_groups = {}
        ggs = GuidanceGroup.guidance_groups_excluding(excluded_orgs) 

        ggs.each do |gg|
                guidance_groups[gg.id] = gg.name
        end

#subset guidance that belong to the institution

        unless institution.nil? then
                optional_gg = GuidanceGroup.where("optional_subset =  ? && organisation_id = ?", true, institution.id)
                optional_gg.each do|optional|
                        guidance_groups[optional.id] = optional.name
                end
                
                institution.children.each do |o|
                        o.guidance_groups.each do |gg|
                                include = false
                                gg.guidances.each do |g|
                                        if g.dmptemplate.nil? || g.dmptemplate_id == template.id then
                                                include = true
                                                break
                                        end
                                end
                                if include then
                                        guidance_groups[gg.id] = gg.name
                                end
                        end
                end
        end

#If template belongs to a funder and that funder has subset guidance display then.

if !template.nil? && template.organisation.organisation_type.name == t('helpers.org_type.funder') then
    optional_gg = GuidanceGroup.where("optional_subset =  ? && organisation_id = ?", true, template.organisation_id)
                optional_gg.each do|optional|
                        guidance_groups[optional.id] = optional.name
                end
end


        respond_to do |format|
                format.json { render json: guidance_groups.to_json }
        end
end
possible_templates() click to toggle source

GET /projects/possible_templates.json

# File app/controllers/projects_controller.rb, line 181
def possible_templates
        if !params[:funder].nil? && params[:funder] != "" && params[:funder] != "undefined" then
                funder = Organisation.find(params[:funder])
        else
                funder = nil
        end
        if !params[:institution].nil? && params[:institution] != "" && params[:institution] != "undefined" then
                institution = Organisation.find(params[:institution])
        else
                institution = nil
        end
        templates = {}
        unless funder.nil? then
                funder.published_templates.each do |t|
                        templates[t.id] = t.title
                end
        end
        if templates.count == 0 && !institution.nil? then
                institution.published_templates.each do |t|
                        templates[t.id] = t.title
                end
                institution.children.each do |o|
                        o.published_templates.each do |t|
                                templates[t.id] = t.title
                        end
                end
        end
        respond_to do |format|
                format.json { render json: templates.to_json }
        end
end
share() click to toggle source
# File app/controllers/projects_controller.rb, line 84
def share
        @project = Project.find(params[:id])
        if !user_signed_in? then
       respond_to do |format|
                        format.html { redirect_to edit_user_registration_path }
                end
        elsif !@project.editable_by(current_user.id) then
                respond_to do |format|
                        format.html { redirect_to projects_url, notice: "This account does not have access to that plan." }
                end
        end
end
show() click to toggle source

GET /projects/1 GET /projects/1.json

# File app/controllers/projects_controller.rb, line 28
def show
        @project = Project.find(params[:id])
        @show_form = false
        if params[:show_form] == "yes" then
                @show_form = true
        end
        if user_signed_in? && @project.readable_by(current_user.id) then
                respond_to do |format|
                        format.html # show.html.erb

                        format.json { render json: @project }
                end
        elsif user_signed_in? then
                respond_to do |format|
                        format.html { redirect_to projects_url, notice: "This account does not have access to that plan." }
                end
        else
                respond_to do |format|
                        format.html { redirect_to edit_user_registration_path }
                end
        end
end
update() click to toggle source

PUT /projects/1 PUT /projects/1.json

# File app/controllers/projects_controller.rb, line 147
def update
        @project = Project.find(params[:id])
        if user_signed_in? && @project.editable_by(current_user.id) then
                respond_to do |format|
                        if @project.update_attributes(params[:project])
                                format.html { redirect_to @project, notice: 'Project was successfully updated.' }
                                format.json { head :no_content }
                        else
                                format.html { render action: "edit" }
                                format.json { render json: @project.errors, status: :unprocessable_entity }
                        end
                end
        else
                render(:file => File.join(Rails.root, 'public/403.html'), :status => 403, :layout => false)
        end
end

Private Instance Methods

orgs_of_type(org_type_name, published_templates = false) click to toggle source
# File app/controllers/projects_controller.rb, line 271
def orgs_of_type(org_type_name, published_templates = false)
        org_type = OrganisationType.find_by_name(org_type_name)
        all_such_orgs = org_type.organisations
        if published_templates then
                with_published = Array.new
                all_such_orgs.each do |o|
                        if o.published_templates.count > 0 then
                                with_published << o
                        end
                end
                return with_published.sort_by {|o| [o.sort_name, o.name] }
        else
                return all_such_orgs.sort_by {|o| [o.sort_name, o.name] }
        end
end