around_filter :set_thread_api_token
# Methods that don't require login should
# skip_around_filter :require_thread_api_token
- around_filter :require_thread_api_token, except: [:report_issue_popup, :report_issue] + ERROR_ACTIONS
+ around_filter :require_thread_api_token, except: ERROR_ACTIONS
before_filter :accept_uuid_as_id_param, except: ERROR_ACTIONS
- before_filter :check_user_agreements, except: [:report_issue_popup, :report_issue] + ERROR_ACTIONS
+ before_filter :check_user_agreements, except: ERROR_ACTIONS
before_filter :check_user_profile, except: ERROR_ACTIONS
before_filter :check_user_notifications, except: ERROR_ACTIONS
before_filter :load_filters_and_paging_params, except: ERROR_ACTIONS
end
end
end
+ # After this, params[:filters] can be trusted to be an array of arrays:
+ params[:filters] = filters
@filters += filters
end
end
return render_not_found("object not found")
end
respond_to do |f|
- f.json { render json: @object.attributes.merge(href: url_for(action: :show, id: @object)) }
+ f.json do
+ extra_attrs = { href: url_for(action: :show, id: @object) }
+ @object.textile_attributes.each do |textile_attr|
+ extra_attrs.merge!({ "#{textile_attr}Textile" => view_context.render_markup(@object.attributes[textile_attr]) })
+ end
+ render json: @object.attributes.merge(extra_attrs)
+ end
f.html {
if params['tab_pane']
- render_pane params['tab_pane']
+ render_pane(if params['tab_pane'].is_a? Hash then params['tab_pane']["name"] else params['tab_pane'] end)
elsif request.method.in? ['GET', 'HEAD']
render
else
def choose
params[:limit] ||= 40
- find_objects_for_index if !@objects
respond_to do |f|
if params[:partial]
f.json {
+ find_objects_for_index if !@objects
render json: {
content: render_to_string(partial: "choose_rows.html",
formats: [:html]),
}
end
f.js {
+ find_objects_for_index if !@objects
render partial: 'choose', locals: {multiple: params[:multiple]}
}
end
end.reverse
end
+ helper_method :running_pipelines
+ def running_pipelines
+ pi = PipelineInstance.order(["started_at asc", "created_at asc"]).filter([["state", "in", ["RunningOnServer", "RunningOnClient"]]])
+ jobs = {}
+ pi.each do |pl|
+ pl.components.each do |k,v|
+ if v.is_a? Hash and v[:job]
+ jobs[v[:job][:uuid]] = {}
+ end
+ end
+ end
+
+ Job.filter([["uuid", "in", jobs.keys]]).each do |j|
+ jobs[j[:uuid]] = j
+ end
+
+ pi.each do |pl|
+ pl.components.each do |k,v|
+ if v.is_a? Hash and v[:job]
+ v[:job] = jobs[v[:job][:uuid]]
+ end
+ end
+ end
+
+ pi
+ end
+
+ helper_method :finished_pipelines
+ def finished_pipelines lim
+ PipelineInstance.limit(lim).order(["finished_at desc"]).filter([["state", "in", ["Complete", "Failed", "Paused"]], ["finished_at", "!=", nil]])
+ end
+
+ helper_method :recent_collections
+ def recent_collections lim
+ c = Collection.limit(lim).order(["modified_at desc"]).filter([["owner_uuid", "is_a", "arvados#group"]])
+ own = {}
+ Group.filter([["uuid", "in", c.map(&:owner_uuid)]]).each do |g|
+ own[g[:uuid]] = g
+ end
+ {collections: c, owners: own}
+ end
+
helper_method :my_project_tree
def my_project_tree
build_project_trees
@my_project_tree =
sorted_paths.call buildtree.call(children_of, 'me')
@shared_project_tree =
- sorted_paths.call({'Shared with me' =>
+ sorted_paths.call({'Projects shared with me' =>
buildtree.call(children_of, false)})
end